IOweb/node_modules/@iconify/tools/lib/icon-set/merge.mjs
2026-07-03 15:07:38 -05:00

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 };