IOweb/node_modules/@iconify/tools/lib/import/figma/index.cjs
2026-07-03 15:07:38 -05:00

115 lines
3.7 KiB
JavaScript

'use strict';
const iconSet_index = require('../../icon-set/index.cjs');
const svg_index = require('../../svg/index.cjs');
const svg_cleanup = require('../../svg/cleanup.cjs');
const import_figma_nodes = require('./nodes.cjs');
const import_figma_query = require('./query.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('../../icon-set/props.cjs');
require('@iconify/utils/lib/misc/objects');
require('@iconify/utils');
require('cheerio');
require('../../svg/cleanup/attribs.cjs');
require('../../svg/data/attributes.cjs');
require('../../svg/data/tags.cjs');
require('../../svg/parse.cjs');
require('../../svg/cleanup/bad-tags.cjs');
require('../../svg/cleanup/inline-style.cjs');
require('../../css/parse.cjs');
require('../../css/parser/tokens.cjs');
require('../../css/parser/error.cjs');
require('../../css/parser/strings.cjs');
require('../../css/parser/text.cjs');
require('../../svg/cleanup/root-style.cjs');
require('../../svg/parse-style.cjs');
require('../../css/parser/export.cjs');
require('../../css/parser/tree.cjs');
require('../../svg/cleanup/root-svg.cjs');
require('../../svg/cleanup/svgo-style.cjs');
require('../../optimise/svgo.cjs');
require('svgo');
require('@iconify/utils/lib/svg/id');
require('../../download/api/index.cjs');
require('../../download/api/cache.cjs');
require('fs');
require('crypto');
require('../../misc/scan.cjs');
require('../../download/api/config.cjs');
require('../../download/api/fetch.cjs');
require('../../download/api/queue.cjs');
async function importFromFigma(options) {
const cacheOptions = options.cacheDir ? {
// 24 hours
ttl: options.cacheAPITTL || 60 * 60 * 24,
dir: options.cacheDir
} : void 0;
const cacheSVGOptions = options.cacheDir ? {
// 30 days
ttl: options.cacheSVGTTL || 60 * 60 * 24 * 30,
dir: options.cacheDir
} : void 0;
const document = await import_figma_query.figmaFilesQuery(
options,
cacheOptions
);
if (document === "not_modified") {
return document;
}
options.version = document.version;
const nodes = import_figma_nodes.getFigmaIconNodes(document, options);
await import_figma_query.figmaImagesQuery(options, nodes, cacheOptions);
await import_figma_query.figmaDownloadImages(nodes, cacheSVGOptions);
const iconSet = iconSet_index.blankIconSet(options.prefix);
const icons = nodes.icons;
const missing = [];
const iconIDs = Object.keys(icons);
for (let i = 0; i < iconIDs.length; i++) {
const id = iconIDs[i];
const item = icons[id];
if (typeof item.content !== "string") {
missing.push(item);
continue;
}
if (options.beforeImportingIcon) {
const callbackResult = options.beforeImportingIcon(item, iconSet);
if (callbackResult instanceof Promise) {
await callbackResult;
}
}
try {
const svg = new svg_index.SVG(item.content);
svg_cleanup.cleanupSVG(svg);
iconSet.fromSVG(item.keyword, svg);
} catch (err) {
missing.push(item);
continue;
}
if (options.afterImportingIcon) {
const callbackResult = options.afterImportingIcon(item, iconSet);
if (callbackResult instanceof Promise) {
await callbackResult;
}
}
}
const result = {
// Document
name: document.name,
version: document.version,
lastModified: document.lastModified,
// Counters
nodesCount: nodes.nodesCount,
generatedIconsCount: nodes.generatedIconsCount,
downloadedIconsCount: nodes.downloadedIconsCount,
// Icon set
iconSet,
missing
};
return result;
}
exports.importFromFigma = importFromFigma;