From e82083e1d89cb85307f531ef4c4e42c50f207864 Mon Sep 17 00:00:00 2001 From: Matthew Phillips Date: Fri, 11 Feb 2022 16:16:19 -0500 Subject: [PATCH 1/6] Compatibility with the static build --- demo/package.json | 2 +- packages/core/lib/utils.ts | 21 +- packages/core/package.json | 1 + packages/www/package.json | 2 +- yarn.lock | 975 ++++++++++++++++--------------------- 5 files changed, 455 insertions(+), 546 deletions(-) diff --git a/demo/package.json b/demo/package.json index 1a64066c..7e463f93 100644 --- a/demo/package.json +++ b/demo/package.json @@ -9,7 +9,7 @@ "preview": "astro preview" }, "devDependencies": { - "astro": "^0.21.10", + "astro": "^0.23.0-next.4", "astro-icon": "0.5.3" }, "dependencies": { diff --git a/packages/core/lib/utils.ts b/packages/core/lib/utils.ts index 09399d32..29992dd0 100644 --- a/packages/core/lib/utils.ts +++ b/packages/core/lib/utils.ts @@ -1,3 +1,4 @@ +/// import { SPRITESHEET_NAMESPACE } from "./constants"; import { Props, Optimize } from "./Props"; import getFromService from "./resolver"; @@ -145,7 +146,13 @@ export default async function load( filepath = `/src/icons/${pack}`; let get; try { - const mod = await import(`${filepath}`); + const files = import.meta.globEager(`/src/icons/*`); + + if(!(filepath in files)) { + throw new Error(`Could not find the file "${filepath}"`); + } + + const mod = files[filepath]; if (typeof mod.default !== "function") { throw new Error( `[astro-icon] "${filepath}" did not export a default function!` @@ -177,7 +184,17 @@ ${contents}` filepath = `/src/icons/${name}.svg`; try { - const { default: contents } = await import(`${filepath}?raw`); + const files = import.meta.globEager(`/src/icons/*.svg`, { + assert: { + type: 'raw' + } + }); + + if(!(filepath in files)) { + throw new Error(`Could not find the file "${filepath}"`); + } + + const contents = files[filepath]; if (!/=3.0.0 <4.0.0" immutable "^4.0.0" + source-map-js ">=0.6.2 <2.0.0" scheduler@^0.20.2: version "0.20.2" @@ -4376,6 +4255,13 @@ send@^0.17.1: range-parser "~1.2.1" statuses "~1.5.0" +serialize-javascript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -4398,10 +4284,10 @@ shebang-regex@^1.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= -shiki@^0.9.10: - version "0.9.14" - resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.9.14.tgz#6b3e369edf76049ae7ad7c2b0498c35c200b8dd7" - integrity sha512-uLHjjyJdNsMzF9GOF8vlOuZ8BwigiYPraMN5yjC826k8K7Xu90JQcC5GUNrzRibLgT2EOk9597I1IX+jRdA8nw== +shiki@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.10.0.tgz#85f21ecfa95b377ff64db6c71442c22c220e9540" + integrity sha512-iczxaIYeBFHTFrQPb9DVy2SKgYxC4Wo7Iucm7C17cCh2Ge/refnvHscUOxM85u57MfLoNOtjoEFUWt9gBexblA== dependencies: jsonc-parser "^3.0.0" vscode-oniguruma "^1.6.1" @@ -4457,6 +4343,11 @@ sorcery@^0.10.0: sander "^0.5.0" sourcemap-codec "^1.3.0" +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + source-map-js@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.1.tgz#a1741c131e3c77d048252adfa24e23b908670caf" @@ -4654,7 +4545,7 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -strnum@^1.0.4, strnum@^1.0.5: +strnum@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== @@ -4687,15 +4578,20 @@ supports-esm@^1.0.0: dependencies: has-package-exports "^1.1.0" -svelte-hmr@^0.14.7: - version "0.14.7" - resolved "https://registry.yarnpkg.com/svelte-hmr/-/svelte-hmr-0.14.7.tgz#7fa8261c7b225d9409f0a86f3b9ea5c3ca6f6607" - integrity sha512-pDrzgcWSoMaK6AJkBWkmgIsecW0GChxYZSZieIYfCP0v2oPyx2CYU/zm7TBIcjLVUPP714WxmViE9Thht4etog== +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -svelte-preprocess@^4.9.8: - version "4.9.8" - resolved "https://registry.yarnpkg.com/svelte-preprocess/-/svelte-preprocess-4.9.8.tgz#fd40afebfb352f469beab289667485ebf0d811da" - integrity sha512-EQS/oRZzMtYdAprppZxY3HcysKh11w54MgA63ybtL+TAZ4hVqYOnhw41JVJjWN9dhPnNjjLzvbZ2tMhTsla1Og== +svelte-hmr@^0.14.9: + version "0.14.9" + resolved "https://registry.yarnpkg.com/svelte-hmr/-/svelte-hmr-0.14.9.tgz#35f277efc789e1a6230185717347cddb2f8e9833" + integrity sha512-bKE9+4qb4sAnA+TKHiYurUl970rjA0XmlP9TEP7K/ncyWz3m81kA4HOgmlZK/7irGK7gzZlaPDI3cmf8fp/+tg== + +svelte-preprocess@^4.10.2: + version "4.10.3" + resolved "https://registry.yarnpkg.com/svelte-preprocess/-/svelte-preprocess-4.10.3.tgz#9aac89a8abc3889fa5740fb34f7dd74f3c578e13" + integrity sha512-ttw17lJfb/dx2ZJT9sesaXT5l7mPQ9Apx1H496Kli3Hkk7orIRGpOw6rCPkRNzr6ueVPqb4vzodS5x7sBFhKHw== dependencies: "@types/pug" "^2.0.4" "@types/sass" "^1.16.0" @@ -4704,10 +4600,10 @@ svelte-preprocess@^4.9.8: sorcery "^0.10.0" strip-indent "^3.0.0" -svelte@^3.44.2: - version "3.44.2" - resolved "https://registry.yarnpkg.com/svelte/-/svelte-3.44.2.tgz#3e69be2598308dfc8354ba584cec54e648a50f7f" - integrity sha512-jrZhZtmH3ZMweXg1Q15onb8QlWD+a5T5Oca4C1jYvSURp2oD35h4A5TV6t6MEa93K4LlX6BkafZPdQoFjw/ylA== +svelte@^3.46.4: + version "3.46.4" + resolved "https://registry.yarnpkg.com/svelte/-/svelte-3.46.4.tgz#0c46bc4a3e20a2617a1b7dc43a722f9d6c084a38" + integrity sha512-qKJzw6DpA33CIa+C/rGp4AUdSfii0DOTCzj/2YpSKKayw5WGSS624Et9L1nU1k2OVRS9vaENQXp2CVZNU+xvIg== svgo@^2.8.0: version "2.8.0" @@ -4848,11 +4744,16 @@ typescript@4.3.4: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.4.tgz#3f85b986945bcf31071decdd96cf8bfa65f9dcbc" integrity sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew== -typescript@^4.3.5, typescript@^4.5.1-rc: +typescript@^4.3.5: version "4.5.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.2.tgz#8ac1fba9f52256fdb06fb89e4122fa6a346c2998" integrity sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw== +typescript@^4.5.4: + version "4.5.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.4.tgz#a17d3a0263bf5c8723b9c52f43c5084edf13c2e8" + integrity sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg== + unbox-primitive@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" @@ -4983,11 +4884,6 @@ universalify@^0.1.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - util@^0.12.0: version "0.12.4" resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253" @@ -5000,11 +4896,6 @@ util@^0.12.0: safe-buffer "^5.1.2" which-typed-array "^1.1.2" -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - uvu@^0.5.0: version "0.5.2" resolved "https://registry.yarnpkg.com/uvu/-/uvu-0.5.2.tgz#c145e7f4b5becf80099cf22fd8a4a05f0112b2c0" @@ -5050,15 +4941,15 @@ vfile@^5.0.0: unist-util-stringify-position "^3.0.0" vfile-message "^3.0.0" -vite@^2.6.10, vite@~2.6.10: - version "2.6.14" - resolved "https://registry.yarnpkg.com/vite/-/vite-2.6.14.tgz#35c09a15e4df823410819a2a239ab11efb186271" - integrity sha512-2HA9xGyi+EhY2MXo0+A2dRsqsAG3eFNEVIo12olkWhOmc8LfiM+eMdrXf+Ruje9gdXgvSqjLI9freec1RUM5EA== +vite@^2.8.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/vite/-/vite-2.8.1.tgz#4b2a42c1d01d6786a2a4c278cd0ba7223b8ec15c" + integrity sha512-Typ8qjUnW0p53gBsJpisrKcZlEbUPZATja9BG6Z09QZjg9YrnEn/htkr/VH4WhnH7eNUQeSD+wKI1lHzQRWskw== dependencies: - esbuild "^0.13.2" - postcss "^8.3.8" - resolve "^1.20.0" - rollup "^2.57.0" + esbuild "^0.14.14" + postcss "^8.4.6" + resolve "^1.22.0" + rollup "^2.59.0" optionalDependencies: fsevents "~2.3.2" @@ -5154,16 +5045,16 @@ vscode-uri@^3.0.2: resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.2.tgz#ecfd1d066cb8ef4c3a208decdbab9a8c23d055d0" integrity sha512-jkjy6pjU1fxUvI51P+gCsxg1u2n8LSt0W6KrCNQceaziKzff74GoWmjVG46KieVzybO1sttPQmYfrwSHey7GUA== -vue@^3.2.22: - version "3.2.23" - resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.23.tgz#fe17e4a98bee1afe2aed351a0a80e052728f9ce2" - integrity sha512-MGp9JZC37lzGhwSu6c1tQxrQbXbw7XKFqtYh7SFwNrNK899FPxGAHwSHMZijMChTSC3uZrD2BGO/3EHOgMJ0cw== +vue@^3.2.30: + version "3.2.30" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.30.tgz#47de3039631ac22cab2fd26b427575260199b8bb" + integrity sha512-ZmTFWVJUX2XADkuOB8GcLTuxnBLogjJBTNVrM7WsTnjqRQ+VR8bLNrvNsbn8vj/LaP5+0WFAPrpngOYE2x+e+Q== dependencies: - "@vue/compiler-dom" "3.2.23" - "@vue/compiler-sfc" "3.2.23" - "@vue/runtime-dom" "3.2.23" - "@vue/server-renderer" "3.2.23" - "@vue/shared" "3.2.23" + "@vue/compiler-dom" "3.2.30" + "@vue/compiler-sfc" "3.2.30" + "@vue/runtime-dom" "3.2.30" + "@vue/server-renderer" "3.2.30" + "@vue/shared" "3.2.30" wcwidth@^1.0.1: version "1.0.1" @@ -5274,6 +5165,11 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yaml@^1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + yargs-parser@^18.1.2, yargs-parser@^18.1.3: version "18.1.3" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" @@ -5282,11 +5178,6 @@ yargs-parser@^18.1.2, yargs-parser@^18.1.3: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^20.2.9: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - yargs-parser@^21.0.0: version "21.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.0.tgz#a485d3966be4317426dd56bdb6a30131b281dc55" From 3b4f4e6ca71f432c2eaf2b1def3c377f044b3da2 Mon Sep 17 00:00:00 2001 From: Matthew Phillips Date: Fri, 11 Feb 2022 16:19:55 -0500 Subject: [PATCH 2/6] Adds a changeset --- .changeset/lazy-tips-lie.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/lazy-tips-lie.md diff --git a/.changeset/lazy-tips-lie.md b/.changeset/lazy-tips-lie.md new file mode 100644 index 00000000..5762fd51 --- /dev/null +++ b/.changeset/lazy-tips-lie.md @@ -0,0 +1,5 @@ +--- +"astro-icon": minor +--- + +Compatibility with --experimental-static-build From 5134a12ae810f7d401f75b567462f9388a616489 Mon Sep 17 00:00:00 2001 From: Matthew Phillips Date: Fri, 11 Feb 2022 16:31:09 -0500 Subject: [PATCH 3/6] Remove astro as a dependency --- packages/core/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/core/package.json b/packages/core/package.json index e04fecdc..7d9511f2 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -31,7 +31,6 @@ }, "homepage": "https://github.com/natemoo-re/astro-icon#readme", "dependencies": { - "astro": "^0.23.0-next.4", "node-fetch": "^3.1.0", "svgo": "^2.8.0" } From 9697fda67b3e6dbed8774c994d18ebd31130f394 Mon Sep 17 00:00:00 2001 From: Matthew Phillips Date: Fri, 11 Feb 2022 16:33:03 -0500 Subject: [PATCH 4/6] Use set:html --- packages/core/lib/Icon.astro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/lib/Icon.astro b/packages/core/lib/Icon.astro index 8577b918..bfd08491 100644 --- a/packages/core/lib/Icon.astro +++ b/packages/core/lib/Icon.astro @@ -25,4 +25,4 @@ ${e}`) } --- -{title ? ({title}) : ''}{innerHTML} +{title ? ({title}) : ''} From 89ad96522d57ab81ecc09cc3482f8401a7e9664c Mon Sep 17 00:00:00 2001 From: Nate Moore Date: Thu, 17 Feb 2022 12:55:58 -0600 Subject: [PATCH 5/6] fix: allow `createIconPack` to work with `--experimental-static-build`, use `set:html` --- .changeset/lazy-tips-lie.md | 2 +- .changeset/tall-needles-admire.md | 18 +++++++ demo/src/icons/heroicons.ts | 4 +- demo/src/icons/radix.ts | 2 +- packages/core/index.ts | 5 +- packages/core/lib/Icon.astro | 2 +- packages/core/lib/Spritesheet.astro | 6 +-- packages/core/lib/createIconPack.ts | 8 ++- packages/core/lib/utils.ts | 9 ++-- packages/core/pack.ts | 1 + packages/core/package.json | 4 +- yarn.lock | 77 ++++++++++++++++++++++++++++- 12 files changed, 112 insertions(+), 26 deletions(-) create mode 100644 .changeset/tall-needles-admire.md create mode 100644 packages/core/pack.ts diff --git a/.changeset/lazy-tips-lie.md b/.changeset/lazy-tips-lie.md index 5762fd51..e901c47a 100644 --- a/.changeset/lazy-tips-lie.md +++ b/.changeset/lazy-tips-lie.md @@ -2,4 +2,4 @@ "astro-icon": minor --- -Compatibility with --experimental-static-build +`astro-icon` is now compatible with Astro's `--experimental-static-build` flag diff --git a/.changeset/tall-needles-admire.md b/.changeset/tall-needles-admire.md new file mode 100644 index 00000000..04ba9256 --- /dev/null +++ b/.changeset/tall-needles-admire.md @@ -0,0 +1,18 @@ +--- +"astro-icon": minor +--- + +# Breaking Changes + +- `astro-icon@0.6.0` is compatible with `astro@0.23.x` and up, but will no longer work in lower versions. + +- The `createIconPack` export has been moved from `astro-icon` to `astro-icon/pack`. + + You will likely see a Vite error that `createIconPack` is not defined until you update your import statement. + + ```diff + - import { createIconPack } from "astro-icon"; + + import { createIconPack } from "astro-icon/pack"; + + export default createIconPack({ package: "heroicons", dir: "outline" }) + ``` diff --git a/demo/src/icons/heroicons.ts b/demo/src/icons/heroicons.ts index ed4de37b..fb091c52 100644 --- a/demo/src/icons/heroicons.ts +++ b/demo/src/icons/heroicons.ts @@ -1,3 +1,3 @@ -import { createIconPack } from "astro-icon"; +import { createIconPack } from "astro-icon/pack"; -export default createIconPack({ package: "heroicons", dir: "outline" }); +export default createIconPack({ package: "heroicons", dir: "outline" }) diff --git a/demo/src/icons/radix.ts b/demo/src/icons/radix.ts index 66bd3344..f846c8b9 100644 --- a/demo/src/icons/radix.ts +++ b/demo/src/icons/radix.ts @@ -1,4 +1,4 @@ -import { createIconPack } from "astro-icon"; +import { createIconPack } from "astro-icon/pack"; export default createIconPack({ url: "https://raw.githubusercontent.com/radix-ui/icons/master/packages/radix-icons/icons/", diff --git a/packages/core/index.ts b/packages/core/index.ts index dd4ba7a6..3f869c22 100644 --- a/packages/core/index.ts +++ b/packages/core/index.ts @@ -1,8 +1,6 @@ import Icon from "./lib/Icon.astro"; import SpriteProvider from "./lib/SpriteProvider.astro"; import SpriteComponent from "./lib/Sprite.astro"; -import createIconPack from "./lib/createIconPack.ts"; - import Sheet from "./lib/Spritesheet.astro"; const deprecate = (component: any, message: string) => { @@ -29,6 +27,5 @@ export { Spritesheet, SpriteSheet, SpriteProvider, - Sprite, - createIconPack, + Sprite }; diff --git a/packages/core/lib/Icon.astro b/packages/core/lib/Icon.astro index bfd08491..cfd0d9cb 100644 --- a/packages/core/lib/Icon.astro +++ b/packages/core/lib/Icon.astro @@ -25,4 +25,4 @@ ${e}`) } --- -{title ? ({title}) : ''} +${title}` : '') + innerHTML} /> diff --git a/packages/core/lib/Spritesheet.astro b/packages/core/lib/Spritesheet.astro index dbfba28b..7271ef4a 100644 --- a/packages/core/lib/Spritesheet.astro +++ b/packages/core/lib/Spritesheet.astro @@ -25,9 +25,5 @@ ${e}`); --- - {icons.map(icon => ( - - {icon.innerHTML} - - ))} + {icons.map(icon => ())} diff --git a/packages/core/lib/createIconPack.ts b/packages/core/lib/createIconPack.ts index 85c741ef..e9d73ec3 100644 --- a/packages/core/lib/createIconPack.ts +++ b/packages/core/lib/createIconPack.ts @@ -1,8 +1,6 @@ import { statSync, promises as fs } from "fs"; import { fileURLToPath, pathToFileURL } from "url"; -import { createRequire } from "module"; - -const require = createRequire(import.meta.url); +import resolvePackage from "resolve-pkg"; export interface CreateIconPackOptions { package?: string; @@ -10,14 +8,14 @@ export interface CreateIconPackOptions { url?: string; } -export default function createIconPack({ +export function createIconPack({ package: pkg, dir, url, }: CreateIconPackOptions) { if (pkg) { - const baseUrl = pathToFileURL(require.resolve(`${pkg}/package.json`)); return async (name: string) => { + const baseUrl = new URL(pathToFileURL(resolvePackage(pkg)) + "/"); const path = fileURLToPath( new URL(dir ? `${dir}/${name}.svg` : `${name}.svg`, baseUrl) ); diff --git a/packages/core/lib/utils.ts b/packages/core/lib/utils.ts index 29992dd0..fbfc5655 100644 --- a/packages/core/lib/utils.ts +++ b/packages/core/lib/utils.ts @@ -146,13 +146,14 @@ export default async function load( filepath = `/src/icons/${pack}`; let get; try { - const files = import.meta.globEager(`/src/icons/*`); + const files = import.meta.globEager(`/src/icons/**/*.{js,ts,cjs,mjc,cts,mts}`); + const keys = Object.fromEntries(Object.keys(files).map(key => [key.replace(/\.[cm]?[jt]s$/, ''), key])) - if(!(filepath in files)) { + if (!(filepath in keys)) { throw new Error(`Could not find the file "${filepath}"`); } - const mod = files[filepath]; + const mod = files[keys[filepath]]; if (typeof mod.default !== "function") { throw new Error( `[astro-icon] "${filepath}" did not export a default function!` @@ -184,7 +185,7 @@ ${contents}` filepath = `/src/icons/${name}.svg`; try { - const files = import.meta.globEager(`/src/icons/*.svg`, { + const files = import.meta.globEager(`/src/icons/**/*.svg`, { assert: { type: 'raw' } diff --git a/packages/core/pack.ts b/packages/core/pack.ts new file mode 100644 index 00000000..76c73fed --- /dev/null +++ b/packages/core/pack.ts @@ -0,0 +1 @@ +export * from './lib/createIconPack'; diff --git a/packages/core/package.json b/packages/core/package.json index 7d9511f2..fb7c607d 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -3,7 +3,8 @@ "version": "0.5.3", "type": "module", "exports": { - ".": "./index.ts" + ".": "./index.ts", + "./pack": "./lib/createIconPack.ts" }, "files": [ "lib", @@ -32,6 +33,7 @@ "homepage": "https://github.com/natemoo-re/astro-icon#readme", "dependencies": { "node-fetch": "^3.1.0", + "resolve-pkg": "^2.0.0", "svgo": "^2.8.0" } } diff --git a/yarn.lock b/yarn.lock index c230812e..de4bde9b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2077,6 +2077,13 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= + dependencies: + homedir-polyfill "^1.0.1" + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -2142,6 +2149,20 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +find-file-up@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/find-file-up/-/find-file-up-2.0.1.tgz#4932dd81551af643893f8cda7453f221e3e28261" + integrity sha512-qVdaUhYO39zmh28/JLQM5CoYN9byEOKEH4qfa8K1eNV17W0UUMJ9WgbR/hHFH+t5rcl+6RTb5UC7ck/I+uRkpQ== + dependencies: + resolve-dir "^1.0.1" + +find-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/find-pkg/-/find-pkg-2.0.0.tgz#3a7c35c704e11a6e5722c56e45bd7e587507735e" + integrity sha512-WgZ+nKbELDa6N3i/9nrHeNznm+lY3z4YfhDDWgW+5P0pdmMj26bxaxU11ookgY3NyP9GC7HvZ9etp0jRFqGEeQ== + dependencies: + find-file-up "^2.0.1" + find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -2272,6 +2293,26 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -2482,6 +2523,13 @@ heroicons@^1.0.5: resolved "https://registry.yarnpkg.com/heroicons/-/heroicons-1.0.5.tgz#75c8bc02ecd707d93dc86f4a058569ee24ecfe6c" integrity sha512-QMidnnCbBSmnuN0ieh6lDvAmIFeUoPyPv0z1/3Q2gM8c69aIcoolMCg9i0MZXwnNE//jWU1sxEFY4T2o1fYgeg== +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + hosted-git-info@^2.1.4: version "2.8.9" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" @@ -2558,6 +2606,11 @@ inherits@2, inherits@2.0.4, inherits@^2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +ini@^1.3.4: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + inline-style-parser@0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" @@ -2799,7 +2852,7 @@ is-weakref@^1.0.1: dependencies: call-bind "^1.0.0" -is-windows@^1.0.0: +is-windows@^1.0.0, is-windows@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== @@ -3768,6 +3821,11 @@ parse-latin@^5.0.0: unist-util-modify-children "^2.0.0" unist-util-visit-children "^1.0.0" +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + parse5@^6.0.0, parse5@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" @@ -4075,11 +4133,26 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + resolve-from@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== +resolve-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg/-/resolve-pkg-2.0.0.tgz#ac06991418a7623edc119084edc98b0e6bf05a41" + integrity sha512-+1lzwXehGCXSeryaISr6WujZzowloigEofRB+dj75y9RRa/obVcYgbHJd53tdYw8pvZj8GojXaaENws8Ktw/hQ== + dependencies: + resolve-from "^5.0.0" + resolve@^1.10.0, resolve@^1.17.0, resolve@^1.20.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" @@ -5122,7 +5195,7 @@ which-typed-array@^1.1.2: has-tostringtag "^1.0.0" is-typed-array "^1.1.7" -which@^1.2.9: +which@^1.2.14, which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== From 3ed758922e46c5c084bcfc92db23c966bd5e23e0 Mon Sep 17 00:00:00 2001 From: Nate Moore Date: Thu, 17 Feb 2022 12:56:10 -0600 Subject: [PATCH 6/6] chore: update `demo` to use `--experimental-static-build` --- demo/package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/demo/package.json b/demo/package.json index 7e463f93..269c5237 100644 --- a/demo/package.json +++ b/demo/package.json @@ -3,9 +3,9 @@ "version": "0.0.1", "private": true, "scripts": { - "dev": "astro dev", - "start": "astro dev", - "build": "astro build", + "dev": "astro dev --experimental-static-build", + "start": "astro dev --experimental-static-build", + "build": "astro build --experimental-static-build", "preview": "astro preview" }, "devDependencies": {