2
0
mirror of https://github.com/iconify/iconify.git synced 2024-09-19 16:59:02 +00:00

Simplify parse function in utils, check for bad aliases

This commit is contained in:
Vjacheslav Trushkin 2022-06-09 14:03:47 +03:00
parent 465b76e05f
commit 1d65b060d7
3 changed files with 15 additions and 43 deletions

View File

@ -1,16 +1,7 @@
import type { IconifyAlias, IconifyJSON } from '@iconify/types'; import type { IconifyJSON } from '@iconify/types';
import { FullIconifyIcon, iconDefaults } from '../icon'; import type { FullIconifyIcon } from '../icon';
import { getIconData } from './get-icon'; import { getIconData } from './get-icon';
/**
* Which aliases to parse:
*
* none - do not parse aliases
* all - parse all aliases
* variations - parse only aliases that have transformations (can be considered to be different icon)
*/
export type ParseIconSetAliases = 'none' | 'all' | 'variations';
/** /**
* Callback to call for each icon. * Callback to call for each icon.
* *
@ -21,22 +12,6 @@ export type SplitIconSetCallback = (
data: FullIconifyIcon | null data: FullIconifyIcon | null
) => void; ) => void;
/**
* Check if alias is a variation
*/
export function isVariation(item: IconifyAlias): boolean {
for (const key in iconDefaults) {
if (item[key as keyof typeof iconDefaults] !== void 0) {
return true;
}
}
return false;
}
export interface ParseIconSetOptions {
aliases?: ParseIconSetAliases;
}
/** /**
* Extract icons from an icon set * Extract icons from an icon set
* *
@ -44,11 +19,8 @@ export interface ParseIconSetOptions {
*/ */
export function parseIconSet( export function parseIconSet(
data: IconifyJSON, data: IconifyJSON,
callback: SplitIconSetCallback, callback: SplitIconSetCallback
options?: ParseIconSetOptions
): string[] { ): string[] {
options = options || {};
// List of icon names // List of icon names
const names: string[] = []; const names: string[] = [];
@ -67,30 +39,26 @@ export function parseIconSet(
// Get icons // Get icons
const icons = data.icons; const icons = data.icons;
Object.keys(icons).forEach((name) => { for (const name in icons) {
const iconData = getIconData(data, name, true); const iconData = getIconData(data, name, true);
if (iconData) { if (iconData) {
// Call callback // Call callback
callback(name, iconData); callback(name, iconData);
names.push(name); names.push(name);
} }
}); }
// Get aliases // Get aliases
const parseAliases = options.aliases || 'all'; const aliases = data.aliases;
if (parseAliases !== 'none' && typeof data.aliases === 'object') { if (aliases) {
const aliases = data.aliases; for (const name in aliases) {
Object.keys(aliases).forEach((name) => { const iconData = icons[name] ? null : getIconData(data, name, true);
if (parseAliases === 'variations' && isVariation(aliases[name])) {
return;
}
const iconData = getIconData(data, name, true);
if (iconData) { if (iconData) {
// Call callback // Call callback
callback(name, iconData); callback(name, iconData);
names.push(name); names.push(name);
} }
}); }
} }
return names; return names;

View File

@ -22,7 +22,7 @@ export {
} from './icon/index'; } from './icon/index';
// Icon set functions // Icon set functions
export { parseIconSet, isVariation } from './icon-set/parse'; export { parseIconSet } from './icon-set/parse';
export { validateIconSet } from './icon-set/validate'; export { validateIconSet } from './icon-set/validate';
export { quicklyValidateIconSet } from './icon-set/validate-basic'; export { quicklyValidateIconSet } from './icon-set/validate-basic';
export { expandIconSet } from './icon-set/expand'; export { expandIconSet } from './icon-set/expand';

View File

@ -139,6 +139,10 @@ describe('Testing parsing icon set', () => {
hFlip: true, hFlip: true,
width: 20, width: 20,
}, },
// invalid alias
icon2: {
parent: 'icon1',
},
}, },
height: 24, height: 24,
}, },