2
0
mirror of https://github.com/iconify/iconify.git synced 2024-10-24 17:41:58 +00:00
iconify/packages/utils/src/loader/loader.ts

40 lines
1.1 KiB
TypeScript
Raw Normal View History

import { getCustomIcon } from './custom';
import type { IconifyLoaderOptions } from './types';
import { searchForIcon } from './modern';
export async function loadIcon(
collection: string,
icon: string,
options?: IconifyLoaderOptions
): Promise<string | undefined> {
const custom = options?.customCollections?.[collection];
if (custom) {
if (typeof custom === 'function') {
const result = await custom(icon);
if (result) {
if (typeof result === 'string') {
return await getCustomIcon(() => result as string, collection, icon, options);
}
// if using dynamic import and requesting the json file
// for example: carbon: () => import('@iconify-json/carbon/icons.json').then(i => i.default as any)
if ('icons' in result) {
// possible icon names
const ids = [
icon,
icon.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(),
icon.replace(/([a-z])(\d+)/g, '$1-$2'),
];
return await searchForIcon(result, collection, ids, options)
}
}
} else {
return await getCustomIcon(custom, collection, icon, options);
}
}
2022-02-27 16:58:24 +00:00
return undefined;
}