86 lines
2.5 KiB
JavaScript
86 lines
2.5 KiB
JavaScript
import { promises } from 'fs';
|
|
import { importModule } from 'local-pkg';
|
|
import { tryInstallPkg } from './install-pkg.mjs';
|
|
import { resolvePath } from 'mlly';
|
|
import '@antfu/install-pkg';
|
|
import '@antfu/utils';
|
|
import 'kolorist';
|
|
import './warn.mjs';
|
|
|
|
const _collections = /* @__PURE__ */ Object.create(null);
|
|
const isLegacyExists = /* @__PURE__ */ Object.create(null);
|
|
async function loadCollectionFromFS(name, autoInstall = false, scope = "@iconify-json", cwd = process.cwd()) {
|
|
const cache = _collections[cwd] || (_collections[cwd] = /* @__PURE__ */ Object.create(null));
|
|
if (!await cache[name]) {
|
|
cache[name] = task();
|
|
}
|
|
return cache[name];
|
|
async function task() {
|
|
const packageName = scope.length === 0 ? name : `${scope}/${name}`;
|
|
let jsonPath = await resolvePath(`${packageName}/icons.json`, {
|
|
url: cwd
|
|
}).catch(() => void 0);
|
|
if (scope === "@iconify-json") {
|
|
if (isLegacyExists[cwd] === void 0) {
|
|
const testResult = await resolvePath(
|
|
`@iconify/json/collections.json`,
|
|
{
|
|
url: cwd
|
|
}
|
|
).catch(() => void 0);
|
|
isLegacyExists[cwd] = !!testResult;
|
|
}
|
|
const checkLegacy = isLegacyExists[cwd];
|
|
if (!jsonPath && checkLegacy) {
|
|
jsonPath = await resolvePath(
|
|
`@iconify/json/json/${name}.json`,
|
|
{
|
|
url: cwd
|
|
}
|
|
).catch(() => void 0);
|
|
}
|
|
if (!jsonPath && !checkLegacy && autoInstall) {
|
|
await tryInstallPkg(packageName, autoInstall);
|
|
jsonPath = await resolvePath(`${packageName}/icons.json`, {
|
|
url: cwd
|
|
}).catch(() => void 0);
|
|
}
|
|
} else if (!jsonPath && autoInstall) {
|
|
await tryInstallPkg(packageName, autoInstall);
|
|
jsonPath = await resolvePath(`${packageName}/icons.json`, {
|
|
url: cwd
|
|
}).catch(() => void 0);
|
|
}
|
|
if (!jsonPath) {
|
|
let packagePath = await resolvePath(packageName, {
|
|
url: cwd
|
|
}).catch(() => void 0);
|
|
if (packagePath?.match(/^[a-z]:/i)) {
|
|
packagePath = `file:///${packagePath}`.replace(/\\/g, "/");
|
|
}
|
|
if (packagePath) {
|
|
const { icons } = await importModule(
|
|
packagePath
|
|
);
|
|
if (icons)
|
|
return icons;
|
|
}
|
|
}
|
|
let stat;
|
|
try {
|
|
stat = jsonPath ? await promises.lstat(jsonPath) : void 0;
|
|
} catch (err) {
|
|
return void 0;
|
|
}
|
|
if (stat?.isFile()) {
|
|
return JSON.parse(
|
|
await promises.readFile(jsonPath, "utf8")
|
|
);
|
|
} else {
|
|
return void 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
export { loadCollectionFromFS };
|