From 1caa9432bb134a5361333870bd8d1caf2ffcf8dd Mon Sep 17 00:00:00 2001 From: Bogdan Chadkin Date: Sat, 19 Nov 2022 00:39:48 +0300 Subject: [PATCH] Generate icons index.ts with after hook (#466) Ref https://github.com/svg/svgo-components/tree/main/packages/svgo-jsx#how-to-generate-indexjs-if-you-really-need-it Use svgo/jsx "after" hook instead of custom script for index.ts generation. This makes setup slightly simpler and more portable. Use tsx as loader to run svgo-jsx instead of using .bin as entry point. This is safer when use in various package managers. --- packages/icons/bin/svgo-jsx-index.ts | 16 ----- packages/icons/package.json | 4 +- packages/icons/svgo-jsx.config.ts | 12 +++- yarn.lock | 97 +++++++++++++++++++++------- 4 files changed, 88 insertions(+), 41 deletions(-) delete mode 100644 packages/icons/bin/svgo-jsx-index.ts diff --git a/packages/icons/bin/svgo-jsx-index.ts b/packages/icons/bin/svgo-jsx-index.ts deleted file mode 100644 index a2aafb8db5..0000000000 --- a/packages/icons/bin/svgo-jsx-index.ts +++ /dev/null @@ -1,16 +0,0 @@ -import * as fs from "fs/promises"; -import * as path from "path"; - -(async () => { - try { - const list = await fs.readdir(path.join(process.cwd(), "./src/gen")); - let result = ""; - for (let name of list) { - name = path.basename(name, path.extname(name)); - result += `export * from "./${name}";\n`; - } - await fs.writeFile(path.join(process.cwd(), "./src/gen/index.ts"), result); - } catch (error) { - console.error(error); - } -})(); diff --git a/packages/icons/package.json b/packages/icons/package.json index db7ba0b0a5..24050a4735 100644 --- a/packages/icons/package.json +++ b/packages/icons/package.json @@ -7,7 +7,7 @@ "scripts": { "dev": "tsup --watch", "build": "rm -fr lib tsconfig.tsbuildinfo && tsc", - "generate": "rm -fr src/gen && tsx ./node_modules/.bin/svgo-jsx svgo-jsx.config.ts && tsx ./bin/svgo-jsx-index.ts", + "generate": "rm -fr src/gen && NODE_OPTIONS='--loader=tsx' svgo-jsx svgo-jsx.config.ts", "typecheck": "tsc --noEmit", "lint": "eslint ./src --ext .ts,.tsx --max-warnings 0", "checks": "yarn typecheck && yarn lint", @@ -24,7 +24,7 @@ "@storybook/manager-webpack4": "^6.5.6", "@storybook/react": "^6.5.6", "@storybook/testing-library": "^0.0.13", - "@svgo/jsx": "^0.3.1", + "@svgo/jsx": "^0.4.2", "tsup": "^6.1.3", "tsx": "^3.9.0", "typescript": "4.7.4" diff --git a/packages/icons/svgo-jsx.config.ts b/packages/icons/svgo-jsx.config.ts index 4e45e60722..b2bf638d75 100644 --- a/packages/icons/svgo-jsx.config.ts +++ b/packages/icons/svgo-jsx.config.ts @@ -1,4 +1,6 @@ +import * as fs from "fs/promises"; import * as path from "path"; +import type { Config } from "@svgo/jsx"; const template = ({ sourceFile, @@ -25,7 +27,7 @@ const transformFilename = (filename: string) => { return path.basename(filename, path.extname(filename)) + ".tsx"; }; -export const config = { +export const config: Config = { inputDir: "./icons", outputDir: "./src/gen", template, @@ -50,4 +52,12 @@ export const config = { // convert width/height to viewBox if missing { name: "removeDimensions" }, ], + after: async ({ targets }) => { + let result = ""; + for (const { file } of targets) { + const tsFile = path.basename(file, path.extname(file)); + result += `export * from "./${tsFile}";\n`; + } + await fs.writeFile(path.join(process.cwd(), "./src/gen/index.ts"), result); + }, }; diff --git a/yarn.lock b/yarn.lock index 2d2c2b4eef..126d557deb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5032,13 +5032,13 @@ regenerator-runtime "^0.13.7" resolve-from "^5.0.0" -"@svgo/jsx@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@svgo/jsx/-/jsx-0.3.1.tgz#9271692026b805c8f887683b689df08062a97fdf" - integrity sha512-WjT1ERLcI/p4lcn2mJtUwWwF49Cm1yex5xLc5WRY7H5EKvYT4wkqyTWT87yMsKlY6G1ywDywxQXXucks/Iq5og== +"@svgo/jsx@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@svgo/jsx/-/jsx-0.4.2.tgz#21ebd76a02d7fdcd6eb2d8ed79ff8618bf9a7441" + integrity sha512-0e4B41q+GnS8TI+SWHQw78ziW6V07Li2TMLS8FwbvKOTIJL0ua1Sat1AI0AFAjHlAePz9b+1VtyJzv1516edJw== dependencies: - css-tree "^1.1.3" - svgo "^2.7.0" + css-tree "^2.2.1" + svgo "^3.0.1" "@swc/helpers@^0.4.2": version "0.4.11" @@ -8230,7 +8230,18 @@ css-select@^4.1.3: domutils "^2.8.0" nth-check "^2.0.1" -css-tree@^1.1.2, css-tree@^1.1.3: +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + +css-tree@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== @@ -8246,7 +8257,15 @@ css-tree@^2.0.4, css-tree@^2.1.0: mdn-data "2.0.27" source-map-js "^1.0.1" -css-what@^6.0.1: +css-tree@^2.2.1, css-tree@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032" + integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== + dependencies: + mdn-data "2.0.28" + source-map-js "^1.0.1" + +css-what@^6.0.1, css-what@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== @@ -8261,12 +8280,12 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -csso@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" - integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== +csso@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" + integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== dependencies: - css-tree "^1.1.2" + css-tree "~2.2.0" cssom@^0.4.4: version "0.4.4" @@ -8625,6 +8644,15 @@ dom-serializer@^1.0.1: domhandler "^4.2.0" entities "^2.0.0" +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + dom-walk@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" @@ -8635,7 +8663,7 @@ domain-browser@^1.1.1: resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== -domelementtype@^2.0.1, domelementtype@^2.2.0: +domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== @@ -8654,6 +8682,13 @@ domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: dependencies: domelementtype "^2.2.0" +domhandler@^5.0.1, domhandler@^5.0.2: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + domutils@^2.5.2, domutils@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" @@ -8663,6 +8698,15 @@ domutils@^2.5.2, domutils@^2.8.0: domelementtype "^2.2.0" domhandler "^4.2.0" +domutils@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" + integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.1" + dot-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" @@ -8818,6 +8862,11 @@ entities@2.2.0, entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== +entities@^4.2.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" + integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== + errno@^0.1.3, errno@~0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" @@ -12978,6 +13027,11 @@ mdn-data@2.0.27: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.27.tgz#1710baa7b0db8176d3b3d565ccb7915fc69525ab" integrity sha512-kwqO0I0jtWr25KcfLm9pia8vLZ8qoAKhWZuZMbneJq3jjBD3gl5nZs8l8Tu3ZBlBAHVQtDur9rdDGyvtfVraHQ== +mdn-data@2.0.28: + version "2.0.28" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" + integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== + mdurl@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" @@ -16980,18 +17034,17 @@ supports-preserve-symlinks-flag@^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== -svgo@^2.7.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" - integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== +svgo@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.0.2.tgz#5e99eeea42c68ee0dc46aa16da093838c262fe0a" + integrity sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ== dependencies: "@trysound/sax" "0.2.0" commander "^7.2.0" - css-select "^4.1.3" - css-tree "^1.1.3" - csso "^4.2.0" + css-select "^5.1.0" + css-tree "^2.2.1" + csso "^5.0.5" picocolors "^1.0.0" - stable "^0.1.8" symbol-tree@^3.2.4: version "3.2.4"