external-pkg.cjs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. 'use strict';
  2. const loader_fs = require('./fs.cjs');
  3. const loader_modern = require('./modern.cjs');
  4. const loader_warn = require('./warn.cjs');
  5. const loader_utils = require('./utils.cjs');
  6. require('fs');
  7. require('local-pkg');
  8. require('./install-pkg.cjs');
  9. require('@antfu/install-pkg');
  10. require('@antfu/utils');
  11. require('kolorist');
  12. require('mlly');
  13. require('../svg/build.cjs');
  14. require('../icon/defaults.cjs');
  15. require('../customisations/defaults.cjs');
  16. require('../svg/size.cjs');
  17. require('../svg/defs.cjs');
  18. require('../icon-set/get-icon.cjs');
  19. require('../icon/merge.cjs');
  20. require('../icon/transformations.cjs');
  21. require('../icon-set/tree.cjs');
  22. require('debug');
  23. function createExternalPackageIconLoader(packageName, autoInstall = false, cwd) {
  24. let scope;
  25. let collection;
  26. const collections = {};
  27. if (typeof packageName === "string") {
  28. if (packageName.length === 0) {
  29. loader_warn.warnOnce(`invalid package name, it is empty`);
  30. return collections;
  31. }
  32. if (packageName[0] === "@") {
  33. if (packageName.indexOf("/") === -1) {
  34. loader_warn.warnOnce(`invalid scoped package name "${packageName}"`);
  35. return collections;
  36. }
  37. [scope, collection] = packageName.split("/");
  38. } else {
  39. scope = "";
  40. collection = packageName;
  41. }
  42. } else {
  43. [scope, collection] = packageName;
  44. }
  45. collections[collection] = createCustomIconLoader(
  46. scope,
  47. collection,
  48. autoInstall,
  49. cwd
  50. );
  51. return collections;
  52. }
  53. function createCustomIconLoader(scope, collection, autoInstall, cwd) {
  54. const iconSetPromise = loader_fs.loadCollectionFromFS(
  55. collection,
  56. autoInstall,
  57. scope,
  58. cwd
  59. );
  60. return async (icon) => {
  61. const iconSet = await iconSetPromise;
  62. let result;
  63. if (iconSet) {
  64. result = await loader_modern.searchForIcon(
  65. iconSet,
  66. collection,
  67. loader_utils.getPossibleIconNames(icon)
  68. );
  69. }
  70. return result;
  71. };
  72. }
  73. exports.createExternalPackageIconLoader = createExternalPackageIconLoader;