115 lines
3.7 KiB
JavaScript
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;
|