85 lines
2.4 KiB
JavaScript
85 lines
2.4 KiB
JavaScript
import { IconSet } from './index.mjs';
|
|
import { findMatchingIcon } from './match.mjs';
|
|
import { hasIconDataBeenModified } from './modified.mjs';
|
|
import '@iconify/utils/lib/icon/defaults';
|
|
import '@iconify/utils/lib/svg/build';
|
|
import '@iconify/utils/lib/icon-set/minify';
|
|
import '@iconify/utils/lib/icon-set/convert-info';
|
|
import './props.mjs';
|
|
import '@iconify/utils/lib/misc/objects';
|
|
import '@iconify/utils';
|
|
import '../svg/index.mjs';
|
|
import 'cheerio';
|
|
|
|
function mergeIconSets(oldIcons, newIcons) {
|
|
const mergedIcons = new IconSet(newIcons.export());
|
|
const oldEntries = oldIcons.entries;
|
|
const entries = mergedIcons.entries;
|
|
function add(name) {
|
|
if (entries[name]) {
|
|
return true;
|
|
}
|
|
const item = oldEntries[name];
|
|
switch (item.type) {
|
|
case "icon": {
|
|
const fullIcon = oldIcons.resolve(name, true);
|
|
const parent = fullIcon ? findMatchingIcon(mergedIcons, fullIcon) : null;
|
|
if (parent !== null) {
|
|
mergedIcons.setAlias(name, parent);
|
|
return true;
|
|
}
|
|
const props = item.props;
|
|
mergedIcons.setItem(name, {
|
|
...item,
|
|
props: {
|
|
...props,
|
|
hidden: true
|
|
},
|
|
categories: /* @__PURE__ */ new Set()
|
|
});
|
|
return true;
|
|
}
|
|
case "variation":
|
|
case "alias": {
|
|
let parent = item.parent;
|
|
if (!add(parent)) {
|
|
return false;
|
|
}
|
|
const parentItem = entries[parent];
|
|
if (parentItem.type === "alias") {
|
|
parent = parentItem.parent;
|
|
}
|
|
if (item.type === "variation") {
|
|
const props = item.props;
|
|
mergedIcons.setItem(name, {
|
|
...item,
|
|
parent,
|
|
props: {
|
|
...props,
|
|
hidden: true
|
|
}
|
|
});
|
|
} else {
|
|
mergedIcons.setItem(name, {
|
|
...item,
|
|
parent
|
|
});
|
|
}
|
|
return true;
|
|
}
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
for (const name in oldEntries) {
|
|
add(name);
|
|
}
|
|
if (oldIcons.lastModified && !hasIconDataBeenModified(oldIcons, mergedIcons)) {
|
|
mergedIcons.updateLastModified(oldIcons.lastModified);
|
|
} else if (newIcons.lastModified && !hasIconDataBeenModified(newIcons, mergedIcons)) {
|
|
mergedIcons.updateLastModified(newIcons.lastModified);
|
|
}
|
|
return mergedIcons;
|
|
}
|
|
|
|
export { mergeIconSets };
|