28 lines
		
	
	
		
			882 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
		
			882 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import { getCustomIcon } from "./custom.js";
 | |
| import { searchForIcon } from "./modern.js";
 | |
| 
 | |
| const loadIcon = async (collection, icon, options) => {
 | |
| 	const custom = options?.customCollections?.[collection];
 | |
| 	if (custom) if (typeof custom === "function") {
 | |
| 		let result;
 | |
| 		try {
 | |
| 			result = await custom(icon);
 | |
| 		} catch (err) {
 | |
| 			console.warn(`Failed to load custom icon "${icon}" in "${collection}":`, err);
 | |
| 			return;
 | |
| 		}
 | |
| 		if (result) {
 | |
| 			if (typeof result === "string") return await getCustomIcon(() => result, collection, icon, options);
 | |
| 			if ("icons" in result) {
 | |
| 				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);
 | |
| };
 | |
| 
 | |
| export { loadIcon }; | 
