fs.cjs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. 'use strict';
  2. const fs = require('fs');
  3. const localPkg = require('local-pkg');
  4. const loader_installPkg = require('./install-pkg.cjs');
  5. const mlly = require('mlly');
  6. require('@antfu/install-pkg');
  7. require('@antfu/utils');
  8. require('kolorist');
  9. require('./warn.cjs');
  10. const _collections = /* @__PURE__ */ Object.create(null);
  11. const isLegacyExists = /* @__PURE__ */ Object.create(null);
  12. async function loadCollectionFromFS(name, autoInstall = false, scope = "@iconify-json", cwd = process.cwd()) {
  13. const cache = _collections[cwd] || (_collections[cwd] = /* @__PURE__ */ Object.create(null));
  14. if (!await cache[name]) {
  15. cache[name] = task();
  16. }
  17. return cache[name];
  18. async function task() {
  19. const packageName = scope.length === 0 ? name : `${scope}/${name}`;
  20. let jsonPath = await mlly.resolvePath(`${packageName}/icons.json`, {
  21. url: cwd
  22. }).catch(() => void 0);
  23. if (scope === "@iconify-json") {
  24. if (isLegacyExists[cwd] === void 0) {
  25. const testResult = await mlly.resolvePath(
  26. `@iconify/json/collections.json`,
  27. {
  28. url: cwd
  29. }
  30. ).catch(() => void 0);
  31. isLegacyExists[cwd] = !!testResult;
  32. }
  33. const checkLegacy = isLegacyExists[cwd];
  34. if (!jsonPath && checkLegacy) {
  35. jsonPath = await mlly.resolvePath(
  36. `@iconify/json/json/${name}.json`,
  37. {
  38. url: cwd
  39. }
  40. ).catch(() => void 0);
  41. }
  42. if (!jsonPath && !checkLegacy && autoInstall) {
  43. await loader_installPkg.tryInstallPkg(packageName, autoInstall);
  44. jsonPath = await mlly.resolvePath(`${packageName}/icons.json`, {
  45. url: cwd
  46. }).catch(() => void 0);
  47. }
  48. } else if (!jsonPath && autoInstall) {
  49. await loader_installPkg.tryInstallPkg(packageName, autoInstall);
  50. jsonPath = await mlly.resolvePath(`${packageName}/icons.json`, {
  51. url: cwd
  52. }).catch(() => void 0);
  53. }
  54. if (!jsonPath) {
  55. let packagePath = await mlly.resolvePath(packageName, {
  56. url: cwd
  57. }).catch(() => void 0);
  58. if (packagePath?.match(/^[a-z]:/i)) {
  59. packagePath = `file:///${packagePath}`.replace(/\\/g, "/");
  60. }
  61. if (packagePath) {
  62. const { icons } = await localPkg.importModule(
  63. packagePath
  64. );
  65. if (icons)
  66. return icons;
  67. }
  68. }
  69. let stat;
  70. try {
  71. stat = jsonPath ? await fs.promises.lstat(jsonPath) : void 0;
  72. } catch (err) {
  73. return void 0;
  74. }
  75. if (stat?.isFile()) {
  76. return JSON.parse(
  77. await fs.promises.readFile(jsonPath, "utf8")
  78. );
  79. } else {
  80. return void 0;
  81. }
  82. }
  83. }
  84. exports.loadCollectionFromFS = loadCollectionFromFS;