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

87 lines
2.5 KiB
JavaScript

'use strict';
const iconSet_index = require('./index.cjs');
const iconSet_match = require('./match.cjs');
const iconSet_modified = require('./modified.cjs');
require('@iconify/utils/lib/icon/defaults');
require('@iconify/utils/lib/svg/build');
require('@iconify/utils/lib/icon-set/minify');
require('@iconify/utils/lib/icon-set/convert-info');
require('./props.cjs');
require('@iconify/utils/lib/misc/objects');
require('@iconify/utils');
require('../svg/index.cjs');
require('cheerio');
function mergeIconSets(oldIcons, newIcons) {
const mergedIcons = new iconSet_index.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 ? iconSet_match.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 && !iconSet_modified.hasIconDataBeenModified(oldIcons, mergedIcons)) {
mergedIcons.updateLastModified(oldIcons.lastModified);
} else if (newIcons.lastModified && !iconSet_modified.hasIconDataBeenModified(newIcons, mergedIcons)) {
mergedIcons.updateLastModified(newIcons.lastModified);
}
return mergedIcons;
}
exports.mergeIconSets = mergeIconSets;