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

54 lines
2 KiB
JavaScript

import { promises } from 'fs';
import { prepareDirectoryForExport } from './helpers/prepare.mjs';
import { writeJSONFile } from '../misc/write-json.mjs';
import { exportCustomFiles } from './helpers/custom-files.mjs';
import 'pathe';
const defaultTypesContent = `import type { IconifyIcon } from '@iconify/types';
declare const data: IconifyIcon;
export default data;
`;
async function exportIconPackage(iconSet, options) {
const files = /* @__PURE__ */ new Set();
const esm = options.module !== false;
const dir = await prepareDirectoryForExport(options);
const typesContent = options.typesContent || defaultTypesContent;
await iconSet.forEach(async (name2) => {
const data = iconSet.resolve(name2, false);
if (!data) {
return;
}
const typesFilename = name2 + ".d.ts";
await promises.writeFile(`${dir}/${typesFilename}`, typesContent, "utf8");
files.add(typesFilename);
let content = `const data = ` + JSON.stringify(data, null, " ") + ";\n";
if (!esm) {
content += "exports.__esModule = true;\nexports.default = data;\n";
} else {
content += "export default data;\n";
}
const contentFilename = name2 + ".js";
await promises.writeFile(`${dir}/${contentFilename}`, content, "utf8");
files.add(contentFilename);
});
await exportCustomFiles(dir, options, files);
const info = iconSet.info;
const { name, description, version, dependencies, ...customPackageProps } = options.package || {};
const packageJSON = {
name: name || (esm ? `@iconify-icons/${iconSet.prefix}` : `@iconify/icons-${iconSet.prefix}`),
description: description || `Iconify icon components for ${info ? info.name : iconSet.prefix}`,
version,
type: esm ? "module" : void 0,
iconSetInfo: info,
...customPackageProps,
dependencies: dependencies || {
"@iconify/types": "*"
// '^' + (await getTypesVersion()),
}
};
await writeJSONFile(dir + "/package.json", packageJSON);
files.add("package.json");
return Array.from(files);
}
export { exportIconPackage };