diff --git a/.changeset/kind-stingrays-collect.md b/.changeset/kind-stingrays-collect.md new file mode 100644 index 000000000..9dccc398a --- /dev/null +++ b/.changeset/kind-stingrays-collect.md @@ -0,0 +1,5 @@ +--- +'@primer/primitives': minor +--- + +update to SDv4 diff --git a/.github/workflows/visual_regression_test.yml b/.github/workflows/visual_regression_test.yml index 54a520385..7062748c2 100644 --- a/.github/workflows/visual_regression_test.yml +++ b/.github/workflows/visual_regression_test.yml @@ -25,7 +25,7 @@ jobs: cache: 'npm' - name: Install dependencies - run: npm ci + run: npm ci && npm run install:storybook - name: Build tokens run: npm run build @@ -33,7 +33,6 @@ jobs: - name: Build storybook working-directory: docs/storybook run: | - npm ci npm run build-storybook - name: Run storybook @@ -46,7 +45,7 @@ jobs: sleep 5 - name: Run Visual Regression Tests - uses: docker://mcr.microsoft.com/playwright:v1.45.1-jammy + uses: docker://mcr.microsoft.com/playwright:v1.47.1-jammy env: STORYBOOK_URL: 'http://172.17.0.1:6006' with: diff --git a/buildConfig.tsconfig.jsonc b/buildConfig.tsconfig.jsonc deleted file mode 100644 index de1de0951..000000000 --- a/buildConfig.tsconfig.jsonc +++ /dev/null @@ -1,27 +0,0 @@ -{ - "compilerOptions": { - "jsx": "react", - "target": "ES2016", - "module": "commonjs", - "lib": ["ESNext", "dom"], - "moduleResolution": "node", - "esModuleInterop": true, - "strict": true, - "noImplicitAny": true, - "skipLibCheck": false, - "typeRoots": ["./src/@types", "./node_modules/", "./node_modules/@types", "types"], - "types": ["vitest/globals"], - "rootDir": "./src", - "outDir": "./dist/build", - "declaration": true, - "resolveJsonModule": true, - "baseUrl": ".", - "paths": { - "~/*": ["*"], - // workaround for: https://github.com/vitest-dev/vitest/issues/4567 - "rollup/parseAst": ["./node_modules/rollup/dist/parseAst"] - } - }, - "include": ["src/**/*.ts"], - "exclude": ["./src/@types", "**/*.test.ts", "src/test-utilities/*.ts", "vitest.config.ts"] -} diff --git a/docs/storybook/package-lock.json b/docs/storybook/package-lock.json index ef979c71b..457cd362f 100644 --- a/docs/storybook/package-lock.json +++ b/docs/storybook/package-lock.json @@ -73,28 +73,28 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", - "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", + "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", - "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz", + "integrity": "sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helpers": "^7.24.7", - "@babel/parser": "^7.24.7", + "@babel/generator": "^7.24.9", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-module-transforms": "^7.24.9", + "@babel/helpers": "^7.24.8", + "@babel/parser": "^7.24.8", "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7", + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.9", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -110,11 +110,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", - "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", "dependencies": { - "@babel/types": "^7.24.7", + "@babel/types": "^7.25.6", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -148,13 +148,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", - "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", "dependencies": { - "@babel/compat-data": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "browserslist": "^4.22.2", + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -163,19 +163,17 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz", - "integrity": "sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz", + "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.8", "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/helper-replace-supers": "^7.24.7", + "@babel/helper-replace-supers": "^7.25.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/traverse": "^7.25.4", "semver": "^6.3.1" }, "engines": { @@ -186,9 +184,9 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.7.tgz", - "integrity": "sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", + "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", @@ -218,48 +216,14 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", - "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", - "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", - "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", - "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.7.tgz", - "integrity": "sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", + "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", "dev": true, "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -278,15 +242,14 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", - "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", "@babel/helper-module-imports": "^7.24.7", "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7" + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" }, "engines": { "node": ">=6.9.0" @@ -308,22 +271,22 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", - "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz", - "integrity": "sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", + "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-wrap-function": "^7.24.7" + "@babel/helper-wrap-function": "^7.25.0", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -333,14 +296,14 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz", - "integrity": "sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", + "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.7", - "@babel/helper-optimise-call-expression": "^7.24.7" + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -374,21 +337,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", - "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", - "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", "engines": { "node": ">=6.9.0" } @@ -402,35 +354,34 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", - "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz", - "integrity": "sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", + "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.24.7", - "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", - "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", + "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6" }, "engines": { "node": ">=6.9.0" @@ -451,9 +402,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", - "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "dependencies": { + "@babel/types": "^7.25.6" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -462,13 +416,13 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.7.tgz", - "integrity": "sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", + "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.3" }, "engines": { "node": ">=6.9.0" @@ -478,12 +432,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.7.tgz", - "integrity": "sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", + "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -510,13 +464,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.7.tgz", - "integrity": "sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", + "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -616,12 +570,12 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", - "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz", + "integrity": "sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -631,12 +585,12 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", - "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz", + "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -786,12 +740,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", - "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz", + "integrity": "sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -832,15 +786,15 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz", - "integrity": "sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz", + "integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-remap-async-to-generator": "^7.24.7", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-remap-async-to-generator": "^7.25.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/traverse": "^7.25.4" }, "engines": { "node": ">=6.9.0" @@ -882,12 +836,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.7.tgz", - "integrity": "sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", + "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -897,13 +851,13 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", - "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz", + "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-class-features-plugin": "^7.25.4", + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -930,18 +884,16 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.7.tgz", - "integrity": "sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz", + "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-replace-supers": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/traverse": "^7.25.4", "globals": "^11.1.0" }, "engines": { @@ -968,12 +920,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.7.tgz", - "integrity": "sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", + "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1062,12 +1014,12 @@ } }, "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.24.7.tgz", - "integrity": "sha512-cjRKJ7FobOH2eakx7Ja+KpJRj8+y+/SiB3ooYm/n2UJfxu0oEaOoxOinitkJcPqv9KxS0kxTGPUaR7L2XcXDXA==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.2.tgz", + "integrity": "sha512-InBZ0O8tew5V0K6cHcQ+wgxlrjOw1W4wDXLkOTjLRD8GYhTSkxTVBtdy3MMtvYBrbAWa1Qm3hNoTc1620Yj+Mg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", "@babel/plugin-syntax-flow": "^7.24.7" }, "engines": { @@ -1094,14 +1046,14 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.7.tgz", - "integrity": "sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", + "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.1" }, "engines": { "node": ">=6.9.0" @@ -1127,12 +1079,12 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.7.tgz", - "integrity": "sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", + "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1189,13 +1141,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.7.tgz", - "integrity": "sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", + "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-simple-access": "^7.24.7" }, "engines": { @@ -1206,15 +1158,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.7.tgz", - "integrity": "sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", + "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", "dev": true, "dependencies": { - "@babel/helper-hoist-variables": "^7.24.7", - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -1353,12 +1305,12 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.7.tgz", - "integrity": "sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", + "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, @@ -1385,13 +1337,13 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", - "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz", + "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-class-features-plugin": "^7.25.4", + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1449,16 +1401,16 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.7.tgz", - "integrity": "sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz", + "integrity": "sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", "@babel/plugin-syntax-jsx": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.2" }, "engines": { "node": ">=6.9.0" @@ -1591,12 +1543,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.7.tgz", - "integrity": "sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", + "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1606,14 +1558,15 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.7.tgz", - "integrity": "sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz", + "integrity": "sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", "@babel/plugin-syntax-typescript": "^7.24.7" }, "engines": { @@ -1671,13 +1624,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", - "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz", + "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1687,15 +1640,15 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.7.tgz", - "integrity": "sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.8.tgz", + "integrity": "sha512-vObvMZB6hNWuDxhSaEPTKCwcqkAIuDtE+bQGn4XMXne1DSLzFVY8Vmj1bm+mUQXYNN8NmaQEO+r8MMbzPr1jBQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", + "@babel/compat-data": "^7.24.8", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.7", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.7", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", @@ -1726,9 +1679,9 @@ "@babel/plugin-transform-block-scoping": "^7.24.7", "@babel/plugin-transform-class-properties": "^7.24.7", "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.24.7", + "@babel/plugin-transform-classes": "^7.24.8", "@babel/plugin-transform-computed-properties": "^7.24.7", - "@babel/plugin-transform-destructuring": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.8", "@babel/plugin-transform-dotall-regex": "^7.24.7", "@babel/plugin-transform-duplicate-keys": "^7.24.7", "@babel/plugin-transform-dynamic-import": "^7.24.7", @@ -1741,7 +1694,7 @@ "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", "@babel/plugin-transform-member-expression-literals": "^7.24.7", "@babel/plugin-transform-modules-amd": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.8", "@babel/plugin-transform-modules-systemjs": "^7.24.7", "@babel/plugin-transform-modules-umd": "^7.24.7", "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", @@ -1751,7 +1704,7 @@ "@babel/plugin-transform-object-rest-spread": "^7.24.7", "@babel/plugin-transform-object-super": "^7.24.7", "@babel/plugin-transform-optional-catch-binding": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.8", "@babel/plugin-transform-parameters": "^7.24.7", "@babel/plugin-transform-private-methods": "^7.24.7", "@babel/plugin-transform-private-property-in-object": "^7.24.7", @@ -1762,7 +1715,7 @@ "@babel/plugin-transform-spread": "^7.24.7", "@babel/plugin-transform-sticky-regex": "^7.24.7", "@babel/plugin-transform-template-literals": "^7.24.7", - "@babel/plugin-transform-typeof-symbol": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.8", "@babel/plugin-transform-unicode-escapes": "^7.24.7", "@babel/plugin-transform-unicode-property-regex": "^7.24.7", "@babel/plugin-transform-unicode-regex": "^7.24.7", @@ -1771,7 +1724,7 @@ "babel-plugin-polyfill-corejs2": "^0.4.10", "babel-plugin-polyfill-corejs3": "^0.10.4", "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.31.0", + "core-js-compat": "^3.37.1", "semver": "^6.3.1" }, "engines": { @@ -1986,9 +1939,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", - "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", + "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1997,31 +1950,28 @@ } }, "node_modules/@babel/template": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", - "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", - "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-hoist-variables": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2030,11 +1980,11 @@ } }, "node_modules/@babel/types": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", - "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", "dependencies": { - "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-string-parser": "^7.24.8", "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, @@ -2068,17 +2018,17 @@ } }, "node_modules/@emotion/is-prop-valid": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", - "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.0.tgz", + "integrity": "sha512-SHetuSLvJDzuNbOdtPVbq6yMMMlLoW5Q94uDqJZqy50gcmAjxFkVqmzqSGEFq9gT2iMuIeKV1PXVWmvUhuZLlQ==", "dependencies": { - "@emotion/memoize": "^0.8.1" + "@emotion/memoize": "^0.9.0" } }, "node_modules/@emotion/memoize": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", - "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==" }, "node_modules/@emotion/stylis": { "version": "0.8.5", @@ -2091,9 +2041,9 @@ "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" }, "node_modules/@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", - "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz", + "integrity": "sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==", "dev": true, "peerDependencies": { "react": ">=16.8.0" @@ -2458,28 +2408,28 @@ "dev": true }, "node_modules/@floating-ui/core": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.4.tgz", - "integrity": "sha512-a4IowK4QkXl4SCWTGUR0INAfEOX3wtsYw3rKK5InQEHMGObkR8Xk44qYQD9P4r6HHw0iIfK6GUKECmY8sTkqRA==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", + "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", "dev": true, "dependencies": { - "@floating-ui/utils": "^0.2.4" + "@floating-ui/utils": "^0.2.8" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.7.tgz", - "integrity": "sha512-wmVfPG5o2xnKDU4jx/m4w5qva9FWHcnZ8BvzEe90D/RpwsJaTAVYPEPdQ8sbr/N8zZTAHlZUTQdqg8ZUbzHmng==", + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.11.tgz", + "integrity": "sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==", "dev": true, "dependencies": { "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.4" + "@floating-ui/utils": "^0.2.8" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz", - "integrity": "sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", + "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", "dev": true, "dependencies": { "@floating-ui/dom": "^1.0.0" @@ -2490,9 +2440,9 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.4.tgz", - "integrity": "sha512-dWO2pw8hhi+WrXq1YJy2yCuWoL20PddgGaqTgVe4cOS9Q6qklXCiA1tJEqX6BEwRNSCP84/afac9hd4MS+zEUA==", + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", + "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==", "dev": true }, "node_modules/@github/combobox-nav": { @@ -2511,9 +2461,9 @@ "integrity": "sha512-PzZ1b3PaqBzYqbT4fwKEhiORf38h2OcGp2+JdXNNM7inZ7egaSmfmhyNkQILpqWfS0AYtRS3CDq6z03eZ8yOMQ==" }, "node_modules/@github/relative-time-element": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@github/relative-time-element/-/relative-time-element-4.4.2.tgz", - "integrity": "sha512-wTXunu3hmuGljA5CHaaoUIKV0oI35wno0FKJl2yqKplTRnsCA5bPNj4bDeVIubkuskql6jwionWLlGM1Y6QLaw==" + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@github/relative-time-element/-/relative-time-element-4.4.3.tgz", + "integrity": "sha512-EVKokqx9/DdUAZ2l9WVyY51EtRCO2gQWWMvsRIn7r4glJ91q9CXcnILVHZVCpfD52ucXUhUvtYsAjNJ4qP4uIg==" }, "node_modules/@github/tab-container-element": { "version": "4.8.2", @@ -2813,9 +2763,9 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", @@ -2838,9 +2788,9 @@ "integrity": "sha512-DiZdJYFU0tBbdQkfwwRSwYyI/mcWkg3sWesKRsHUd4G+NekTmmeq9fzsurvcKTNVa0comNljwtg4Hvi1ds3V+A==" }, "node_modules/@lit-labs/ssr-dom-shim": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.2.0.tgz", - "integrity": "sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.2.1.tgz", + "integrity": "sha512-wx4aBmgeGvFmOKucFKY+8VFJSYZxs9poN3SDNQFF6lT6NrQUnHiPB2PWz2sc4ieEcAaYYzN+1uWahEeTq2aRIQ==" }, "node_modules/@mdx-js/react": { "version": "2.3.0", @@ -2969,9 +2919,9 @@ } }, "node_modules/@primer/behaviors": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@primer/behaviors/-/behaviors-1.6.0.tgz", - "integrity": "sha512-B5y6NbVQsiB+as3pKj3KaSFRt5l+hCcYOD/21tnfaeNt2o+J5mIv5NzHFdoX3cWYCjmYeFU36QJdk7M4e0l8Vg==" + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@primer/behaviors/-/behaviors-1.7.2.tgz", + "integrity": "sha512-I5dGgtzV9n1ZX3J1KHkLVWjvEbzanstaXFTDr/+tdn4E2GAA/NUHfTLMq6i5+Pt4P/p/paLI50EgExElENzCYQ==" }, "node_modules/@primer/live-region-element": { "version": "0.7.0", @@ -2998,9 +2948,9 @@ "integrity": "sha512-SiPzEb+up1nDpV2NGwNiY8m6sGnF3OUqRb0has5s6T40vq6Li/g3cYVgl+oolEa4DUoNygEPs09jwJt24f/3zg==" }, "node_modules/@primer/react": { - "version": "36.25.0", - "resolved": "https://registry.npmjs.org/@primer/react/-/react-36.25.0.tgz", - "integrity": "sha512-kuSVgh1HAxOKkZ4QxOCvraGmeMR8BQegx+Utk3zjwaUEMVKPPtotfIhqz3u6xGy6DaM+0opXapU2ZS+m3SJdWg==", + "version": "36.27.0", + "resolved": "https://registry.npmjs.org/@primer/react/-/react-36.27.0.tgz", + "integrity": "sha512-dVyp0f9zbbQYQZ6ztfMET43vVaWhvSz+qWirBzpRjDxvCk8vCQsvWrVGUU/PR0kAxxDHf6hqeLG7vcDL229NLA==", "dependencies": { "@github/combobox-nav": "^2.1.5", "@github/markdown-toolbar-element": "^2.1.0", @@ -3009,7 +2959,7 @@ "@github/tab-container-element": "^4.8.0", "@lit-labs/react": "1.2.1", "@oddbird/popover-polyfill": "^0.3.1", - "@primer/behaviors": "^1.5.1", + "@primer/behaviors": "^1.7.0", "@primer/live-region-element": "^0.7.0", "@primer/octicons-react": "^19.9.0", "@primer/primitives": "^7.16.0", @@ -3058,9 +3008,9 @@ } }, "node_modules/@primer/react/node_modules/@primer/octicons-react": { - "version": "19.10.0", - "resolved": "https://registry.npmjs.org/@primer/octicons-react/-/octicons-react-19.10.0.tgz", - "integrity": "sha512-HyzoQckVGoSWmakrmBveiuXnxMkClqfxbVoE0+EC7oidDmpfkCERLtENtLlCkuELMRr+6bQItUjffqE1VnpdOQ==", + "version": "19.11.0", + "resolved": "https://registry.npmjs.org/@primer/octicons-react/-/octicons-react-19.11.0.tgz", + "integrity": "sha512-8PpCz7cpYY2GCGnJ/G9UARh9PH4C290l31YjriQHZ+WsagE37ntKXhFwq+s4OWoRqZ7fA7HeU81zGDFHQi0VKg==", "engines": { "node": ">=8" }, @@ -4893,18 +4843,18 @@ } }, "node_modules/@storybook/builder-webpack5/node_modules/@types/node": { - "version": "18.19.39", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.39.tgz", - "integrity": "sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==", + "version": "18.19.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.50.tgz", + "integrity": "sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@storybook/builder-webpack5/node_modules/babel-loader": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", - "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", + "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", "dev": true, "dependencies": { "find-cache-dir": "^4.0.0", @@ -5020,9 +4970,9 @@ } }, "node_modules/@storybook/builder-webpack5/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -5031,6 +4981,12 @@ "node": ">=10" } }, + "node_modules/@storybook/builder-webpack5/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, "node_modules/@storybook/builder-webpack5/node_modules/yocto-queue": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", @@ -5167,9 +5123,9 @@ } }, "node_modules/@storybook/cli/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -5305,9 +5261,9 @@ } }, "node_modules/@storybook/core-common/node_modules/@types/node": { - "version": "18.19.39", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.39.tgz", - "integrity": "sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==", + "version": "18.19.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.50.tgz", + "integrity": "sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -5365,6 +5321,12 @@ "node": ">=8" } }, + "node_modules/@storybook/core-common/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, "node_modules/@storybook/core-events": { "version": "7.6.20", "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.20.tgz", @@ -5431,9 +5393,9 @@ } }, "node_modules/@storybook/core-server/node_modules/@types/node": { - "version": "18.19.39", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.39.tgz", - "integrity": "sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==", + "version": "18.19.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.50.tgz", + "integrity": "sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -5480,9 +5442,9 @@ } }, "node_modules/@storybook/core-server/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -5503,6 +5465,12 @@ "node": ">=8" } }, + "node_modules/@storybook/core-server/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, "node_modules/@storybook/core-webpack": { "version": "7.6.20", "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-7.6.20.tgz", @@ -5521,14 +5489,20 @@ } }, "node_modules/@storybook/core-webpack/node_modules/@types/node": { - "version": "18.19.39", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.39.tgz", - "integrity": "sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==", + "version": "18.19.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.50.tgz", + "integrity": "sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" } }, + "node_modules/@storybook/core-webpack/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, "node_modules/@storybook/csf": { "version": "0.1.11", "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.11.tgz", @@ -5712,18 +5686,18 @@ } }, "node_modules/@storybook/preset-react-webpack/node_modules/@types/node": { - "version": "18.19.39", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.39.tgz", - "integrity": "sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==", + "version": "18.19.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.50.tgz", + "integrity": "sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@storybook/preset-react-webpack/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -5732,6 +5706,12 @@ "node": ">=10" } }, + "node_modules/@storybook/preset-react-webpack/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, "node_modules/@storybook/preview": { "version": "7.6.20", "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.6.20.tgz", @@ -5881,23 +5861,35 @@ } }, "node_modules/@storybook/react-webpack5/node_modules/@types/node": { - "version": "18.19.39", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.39.tgz", - "integrity": "sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==", + "version": "18.19.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.50.tgz", + "integrity": "sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" } }, + "node_modules/@storybook/react-webpack5/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, "node_modules/@storybook/react/node_modules/@types/node": { - "version": "18.19.39", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.39.tgz", - "integrity": "sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==", + "version": "18.19.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.50.tgz", + "integrity": "sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" } }, + "node_modules/@storybook/react/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, "node_modules/@storybook/router": { "version": "7.6.20", "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.6.20.tgz", @@ -6220,14 +6212,14 @@ } }, "node_modules/@swc/core": { - "version": "1.6.13", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.6.13.tgz", - "integrity": "sha512-eailUYex6fkfaQTev4Oa3mwn0/e3mQU4H8y1WPuImYQESOQDtVrowwUGDSc19evpBbHpKtwM+hw8nLlhIsF+Tw==", + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.26.tgz", + "integrity": "sha512-f5uYFf+TmMQyYIoxkn/evWhNGuUzC730dFwAKGwBVHHVoPyak1/GvJUm6i1SKl+2Hrj9oN0i3WSoWWZ4pgI8lw==", "dev": true, "hasInstallScript": true, "dependencies": { "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.9" + "@swc/types": "^0.1.12" }, "engines": { "node": ">=10" @@ -6237,16 +6229,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.6.13", - "@swc/core-darwin-x64": "1.6.13", - "@swc/core-linux-arm-gnueabihf": "1.6.13", - "@swc/core-linux-arm64-gnu": "1.6.13", - "@swc/core-linux-arm64-musl": "1.6.13", - "@swc/core-linux-x64-gnu": "1.6.13", - "@swc/core-linux-x64-musl": "1.6.13", - "@swc/core-win32-arm64-msvc": "1.6.13", - "@swc/core-win32-ia32-msvc": "1.6.13", - "@swc/core-win32-x64-msvc": "1.6.13" + "@swc/core-darwin-arm64": "1.7.26", + "@swc/core-darwin-x64": "1.7.26", + "@swc/core-linux-arm-gnueabihf": "1.7.26", + "@swc/core-linux-arm64-gnu": "1.7.26", + "@swc/core-linux-arm64-musl": "1.7.26", + "@swc/core-linux-x64-gnu": "1.7.26", + "@swc/core-linux-x64-musl": "1.7.26", + "@swc/core-win32-arm64-msvc": "1.7.26", + "@swc/core-win32-ia32-msvc": "1.7.26", + "@swc/core-win32-x64-msvc": "1.7.26" }, "peerDependencies": { "@swc/helpers": "*" @@ -6258,9 +6250,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.6.13", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.6.13.tgz", - "integrity": "sha512-SOF4buAis72K22BGJ3N8y88mLNfxLNprTuJUpzikyMGrvkuBFNcxYtMhmomO0XHsgLDzOJ+hWzcgjRNzjMsUcQ==", + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.26.tgz", + "integrity": "sha512-FF3CRYTg6a7ZVW4yT9mesxoVVZTrcSWtmZhxKCYJX9brH4CS/7PRPjAKNk6kzWgWuRoglP7hkjQcd6EpMcZEAw==", "cpu": [ "arm64" ], @@ -6274,9 +6266,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.6.13", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.6.13.tgz", - "integrity": "sha512-AW8akFSC+tmPE6YQQvK9S2A1B8pjnXEINg+gGgw0KRUUXunvu1/OEOeC5L2Co1wAwhD7bhnaefi06Qi9AiwOag==", + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.26.tgz", + "integrity": "sha512-az3cibZdsay2HNKmc4bjf62QVukuiMRh5sfM5kHR/JMTrLyS6vSw7Ihs3UTkZjUxkLTT8ro54LI6sV6sUQUbLQ==", "cpu": [ "x64" ], @@ -6290,9 +6282,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.6.13", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.6.13.tgz", - "integrity": "sha512-f4gxxvDXVUm2HLYXRd311mSrmbpQF2MZ4Ja6XCQz1hWAxXdhRl1gpnZ+LH/xIfGSwQChrtLLVrkxdYUCVuIjFg==", + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.26.tgz", + "integrity": "sha512-VYPFVJDO5zT5U3RpCdHE5v1gz4mmR8BfHecUZTmD2v1JeFY6fv9KArJUpjrHEEsjK/ucXkQFmJ0jaiWXmpOV9Q==", "cpu": [ "arm" ], @@ -6306,9 +6298,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.6.13", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.6.13.tgz", - "integrity": "sha512-Nf/eoW2CbG8s+9JoLtjl9FByBXyQ5cjdBsA4efO7Zw4p+YSuXDgc8HRPC+E2+ns0praDpKNZtLvDtmF2lL+2Gg==", + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.26.tgz", + "integrity": "sha512-YKevOV7abpjcAzXrhsl+W48Z9mZvgoVs2eP5nY+uoMAdP2b3GxC0Df1Co0I90o2lkzO4jYBpTMcZlmUXLdXn+Q==", "cpu": [ "arm64" ], @@ -6322,9 +6314,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.6.13", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.6.13.tgz", - "integrity": "sha512-2OysYSYtdw79prJYuKIiux/Gj0iaGEbpS2QZWCIY4X9sGoETJ5iMg+lY+YCrIxdkkNYd7OhIbXdYFyGs/w5LDg==", + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.26.tgz", + "integrity": "sha512-3w8iZICMkQQON0uIcvz7+Q1MPOW6hJ4O5ETjA0LSP/tuKqx30hIniCGOgPDnv3UTMruLUnQbtBwVCZTBKR3Rkg==", "cpu": [ "arm64" ], @@ -6338,9 +6330,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.6.13", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.6.13.tgz", - "integrity": "sha512-PkR4CZYJNk5hcd2+tMWBpnisnmYsUzazI1O5X7VkIGFcGePTqJ/bWlfUIVVExWxvAI33PQFzLbzmN5scyIUyGQ==", + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.26.tgz", + "integrity": "sha512-c+pp9Zkk2lqb06bNGkR2Looxrs7FtGDMA4/aHjZcCqATgp348hOKH5WPvNLBl+yPrISuWjbKDVn3NgAvfvpH4w==", "cpu": [ "x64" ], @@ -6354,9 +6346,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.6.13", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.6.13.tgz", - "integrity": "sha512-OdsY7wryTxCKwGQcwW9jwWg3cxaHBkTTHi91+5nm7hFPpmZMz1HivJrWAMwVE7iXFw+M4l6ugB/wCvpYrUAAjA==", + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.26.tgz", + "integrity": "sha512-PgtyfHBF6xG87dUSSdTJHwZ3/8vWZfNIXQV2GlwEpslrOkGqy+WaiiyE7Of7z9AvDILfBBBcJvJ/r8u980wAfQ==", "cpu": [ "x64" ], @@ -6370,9 +6362,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.6.13", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.6.13.tgz", - "integrity": "sha512-ap6uNmYjwk9M/+bFEuWRNl3hq4VqgQ/Lk+ID/F5WGqczNr0L7vEf+pOsRAn0F6EV+o/nyb3ePt8rLhE/wjHpPg==", + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.26.tgz", + "integrity": "sha512-9TNXPIJqFynlAOrRD6tUQjMq7KApSklK3R/tXgIxc7Qx+lWu8hlDQ/kVPLpU7PWvMMwC/3hKBW+p5f+Tms1hmA==", "cpu": [ "arm64" ], @@ -6386,9 +6378,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.6.13", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.6.13.tgz", - "integrity": "sha512-IJ8KH4yIUHTnS/U1jwQmtbfQals7zWPG0a9hbEfIr4zI0yKzjd83lmtS09lm2Q24QBWOCFGEEbuZxR4tIlvfzA==", + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.26.tgz", + "integrity": "sha512-9YngxNcG3177GYdsTum4V98Re+TlCeJEP4kEwEg9EagT5s3YejYdKwVAkAsJszzkXuyRDdnHUpYbTrPG6FiXrQ==", "cpu": [ "ia32" ], @@ -6402,9 +6394,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.6.13", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.6.13.tgz", - "integrity": "sha512-f6/sx6LMuEnbuxtiSL/EkR0Y6qUHFw1XVrh6rwzKXptTipUdOY+nXpKoh+1UsBm/r7H0/5DtOdrn3q5ZHbFZjQ==", + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.26.tgz", + "integrity": "sha512-VR+hzg9XqucgLjXxA13MtV5O3C0bK0ywtLIBw/+a+O+Oc6mxFWHtdUeXDbIi5AiPbn0fjgVJMqYnyjGyyX8u0w==", "cpu": [ "x64" ], @@ -6424,9 +6416,9 @@ "dev": true }, "node_modules/@swc/types": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.9.tgz", - "integrity": "sha512-qKnCno++jzcJ4lM4NTfYifm1EFSCeIfKiAHAfkENZAV5Kl9PjJIyd2yeeVv6c/2CckuLyv2NmRC5pv6pm2WQBg==", + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.12.tgz", + "integrity": "sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==", "dev": true, "dependencies": { "@swc/counter": "^0.1.3" @@ -6629,26 +6621,6 @@ "integrity": "sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==", "dev": true }, - "node_modules/@types/eslint": { - "version": "8.56.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", - "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "node_modules/@types/estree": { "version": "0.0.51", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", @@ -6751,9 +6723,9 @@ "dev": true }, "node_modules/@types/lodash": { - "version": "4.17.6", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.6.tgz", - "integrity": "sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==", + "version": "4.17.7", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.7.tgz", + "integrity": "sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==", "dev": true }, "node_modules/@types/mdast": { @@ -6788,12 +6760,12 @@ "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" }, "node_modules/@types/node": { - "version": "20.14.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz", - "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", + "version": "22.5.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.5.tgz", + "integrity": "sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==", "dev": true, "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.19.2" } }, "node_modules/@types/node-fetch": { @@ -6825,14 +6797,14 @@ "dev": true }, "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" + "version": "15.7.13", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==" }, "node_modules/@types/qs": { - "version": "6.9.15", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", - "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", + "version": "6.9.16", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.16.tgz", + "integrity": "sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==", "dev": true }, "node_modules/@types/range-parser": { @@ -6842,9 +6814,9 @@ "dev": true }, "node_modules/@types/react": { - "version": "18.3.3", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", - "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.7.tgz", + "integrity": "sha512-KUnDCJF5+AiZd8owLIeVHqmW9yM4sqmDVf2JRJiBMFkGvkoZ4/WyV2lL4zVsoinmRS/W3FeEdZLEWFRofnT2FQ==", "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -6913,9 +6885,9 @@ "integrity": "sha512-dbzwxQ+8x6Bo3EKZMo9M3Knzo77ukwoC/isKW+GAuF5TenXlPkvgzx4t4+Lp0+fKs2M4owSef0KO3gtGW3Hpkw==" }, "node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" }, "node_modules/@types/uuid": { "version": "9.0.8", @@ -6930,9 +6902,9 @@ "dev": true }, "node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -7230,15 +7202,15 @@ } }, "node_modules/ajv": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", - "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -7437,9 +7409,9 @@ } }, "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "dev": true }, "node_modules/async-limiter": { @@ -7470,9 +7442,9 @@ } }, "node_modules/axe-core": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.9.1.tgz", - "integrity": "sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.0.tgz", + "integrity": "sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==", "dev": true, "engines": { "node": ">=4" @@ -7488,13 +7460,13 @@ } }, "node_modules/babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.4.1.tgz", + "integrity": "sha512-nXzRChX+Z1GoE6yWavBQg6jDslyFF3SDjl2paADuoQtQW10JqShJt62R6eJQ5m/pjJFDT8xgKIWSP85OY8eXeA==", "dev": true, "dependencies": { "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", + "loader-utils": "^2.0.4", "make-dir": "^3.1.0", "schema-utils": "^2.6.5" }, @@ -7592,13 +7564,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", - "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.1", - "core-js-compat": "^3.36.1" + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -7814,9 +7786,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", - "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", "funding": [ { "type": "opencollective", @@ -7832,10 +7804,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001629", - "electron-to-chromium": "^1.4.796", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.16" + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" }, "bin": { "browserslist": "cli.js" @@ -7957,9 +7929,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001640", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz", - "integrity": "sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==", + "version": "1.0.30001660", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz", + "integrity": "sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==", "funding": [ { "type": "opencollective", @@ -8073,9 +8045,9 @@ } }, "node_modules/cjs-module-lexer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", - "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", + "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==", "dev": true }, "node_modules/clean-css": { @@ -8491,9 +8463,9 @@ } }, "node_modules/core-js": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz", - "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==", + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.1.tgz", + "integrity": "sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==", "dev": true, "hasInstallScript": true, "funding": { @@ -8502,12 +8474,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", - "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", + "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", "dev": true, "dependencies": { - "browserslist": "^4.23.0" + "browserslist": "^4.23.3" }, "funding": { "type": "opencollective", @@ -8515,9 +8487,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.37.1.tgz", - "integrity": "sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==", + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.38.1.tgz", + "integrity": "sha512-BY8Etc1FZqdw1glX0XNOq2FDwfrg/VGqoZOZCdaL+UmdaqDwQwYXkMJT4t6In+zfEfOJDcM9T0KdbBeJg8KKCQ==", "dev": true, "hasInstallScript": true, "funding": { @@ -8614,9 +8586,9 @@ } }, "node_modules/css-loader/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -8681,11 +8653,11 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -9148,9 +9120,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.820", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.820.tgz", - "integrity": "sha512-kK/4O/YunacfboFEk/BDf7VO1HoPmDudLTJAU9NmXIOSjsV7qVIX3OrI4REZo0VmdqhcpUcncQc6N8Q3aEXlHg==" + "version": "1.5.24", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.24.tgz", + "integrity": "sha512-0x0wLCmpdKFCi9ulhvYZebgcPmHTkFVUfU2wzDykadkslKwT4oAmDTHEKLnlrDsMGZe4B+ksn8quZfZjYsBetA==" }, "node_modules/emoji-regex": { "version": "9.2.2", @@ -9168,9 +9140,9 @@ } }, "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "dev": true, "engines": { "node": ">= 0.8" @@ -9197,9 +9169,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", - "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -9219,9 +9191,9 @@ } }, "node_modules/envinfo": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", - "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", + "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", "dev": true, "bin": { "envinfo": "dist/cli.js" @@ -9339,9 +9311,9 @@ "dev": true }, "node_modules/esbuild-register": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.5.0.tgz", - "integrity": "sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.6.0.tgz", + "integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==", "dev": true, "dependencies": { "debug": "^4.3.4" @@ -9351,9 +9323,9 @@ } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "engines": { "node": ">=6" } @@ -9566,15 +9538,6 @@ "ms": "2.0.0" } }, - "node_modules/express/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -9650,6 +9613,12 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, + "node_modules/fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", + "dev": true + }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", @@ -9776,15 +9745,6 @@ "ms": "2.0.0" } }, - "node_modules/finalhandler/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -9909,18 +9869,18 @@ "dev": true }, "node_modules/flow-parser": { - "version": "0.239.1", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.239.1.tgz", - "integrity": "sha512-topOrETNxJ6T2gAnQiWqAlzGPj8uI2wtmNOlDIMNB+qyvGJZ6R++STbUOTAYmvPhOMz2gXnXPH0hOvURYmrBow==", + "version": "0.246.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.246.0.tgz", + "integrity": "sha512-WHRizzSrWFTcKo7cVcbP3wzZVhzsoYxoWqbnH4z+JXGqrjVmnsld6kBZWVlB200PwD5ur8r+HV3KUDxv3cHhOQ==", "dev": true, "engines": { "node": ">=0.4.0" } }, "node_modules/focus-visible": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/focus-visible/-/focus-visible-5.2.0.tgz", - "integrity": "sha512-Rwix9pBtC1Nuy5wysTmKy+UjbDJpIfg8eHjw0rjZ1mX4GNLz1Bmd16uDpI3Gk1i70Fgcs8Csg2lPm8HULFg9DQ==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/focus-visible/-/focus-visible-5.2.1.tgz", + "integrity": "sha512-8Bx950VD1bWTQJEH/AM6SpEk+SU55aVnp4Ujhuuxy3eMEBCRwBnTBnVXr9YAPvZL3/CNjCa8u4IWfNmEO53whA==" }, "node_modules/for-each": { "version": "0.3.3", @@ -9932,9 +9892,9 @@ } }, "node_modules/foreground-child": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "dev": true, "dependencies": { "cross-spawn": "^7.0.0", @@ -10079,9 +10039,9 @@ } }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -10809,9 +10769,9 @@ ] }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "engines": { "node": ">= 4" @@ -11036,9 +10996,9 @@ } }, "node_modules/is-core-module": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", - "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, "dependencies": { "hasown": "^2.0.2" @@ -11444,16 +11404,13 @@ } }, "node_modules/jackspeak": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.2.tgz", - "integrity": "sha512-qH3nOSj8q/8+Eg8LUPOq3C+6HWkpUioIjDsq1+D4zY91oZvpPttw8GwtF1nReRYKXl+1AORyFqtm2f5Q1SB6/Q==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": "14 >=14.21 || 16 >=16.20 || >=18" - }, "funding": { "url": "https://github.com/sponsors/isaacs" }, @@ -11462,9 +11419,9 @@ } }, "node_modules/jake": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.1.tgz", - "integrity": "sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==", + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", "dev": true, "dependencies": { "async": "^3.2.3", @@ -12072,12 +12029,12 @@ } }, "node_modules/magic-string": { - "version": "0.30.10", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", - "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", + "version": "0.30.11", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", + "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", "dev": true, "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, "node_modules/make-dir": { @@ -12111,9 +12068,9 @@ "dev": true }, "node_modules/markdown-to-jsx": { - "version": "7.4.7", - "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.4.7.tgz", - "integrity": "sha512-0+ls1IQZdU6cwM1yu0ZjjiVWYtkbExSyUIFU2ZeDIFuZM1W42Mh4OlJ4nb4apX4H8smxDHRdFaoIVJGwfv5hkg==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.5.0.tgz", + "integrity": "sha512-RrBNcMHiFPcz/iqIj0n3wclzHXjwS7mzjBNWecKKVhNTIxQepIix6Il/wZCn2Cg5Y1ow2Qi84+eJrryFRWBEWw==", "dev": true, "engines": { "node": ">= 10" @@ -12727,9 +12684,9 @@ ] }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "dependencies": { "braces": "^3.0.3", @@ -12911,9 +12868,9 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/nanoid": { "version": "3.3.7", @@ -13009,9 +12966,9 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" }, "node_modules/normalize-package-data": { "version": "2.5.0", @@ -13068,17 +13025,17 @@ } }, "node_modules/nypm": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.9.tgz", - "integrity": "sha512-BI2SdqqTHg2d4wJh8P9A1W+bslg33vOE9IZDY6eR2QC+Pu1iNBVZUqczrd43rJb+fMzHU7ltAYKsEFY/kHMFcw==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.11.tgz", + "integrity": "sha512-E5GqaAYSnbb6n1qZyik2wjPDZON43FqOJO59+3OkWrnmQtjggrMOVnsyzfjxp/tS6nlYJBA4zRA5jSM2YaadMg==", "dev": true, "dependencies": { "citty": "^0.1.6", "consola": "^3.2.3", "execa": "^8.0.1", "pathe": "^1.1.2", - "pkg-types": "^1.1.1", - "ufo": "^1.5.3" + "pkg-types": "^1.2.0", + "ufo": "^1.5.4" }, "bin": { "nypm": "dist/cli.mjs" @@ -13279,9 +13236,9 @@ "dev": true }, "node_modules/ohash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.3.tgz", - "integrity": "sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.4.tgz", + "integrity": "sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==", "dev": true }, "node_modules/on-finished": { @@ -13614,13 +13571,10 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.2.tgz", - "integrity": "sha512-voV4dDrdVZVNz84n39LFKDaRzfwhdzJ7akpyXfTMxCgRUp07U3lcJUXRlhTKP17rgt09sUzLi5iCitpEAr+6ug==", - "dev": true, - "engines": { - "node": "14 || 16 || 18 || 20 || >=22" - } + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true }, "node_modules/path-to-regexp": { "version": "0.1.10", @@ -13661,9 +13615,9 @@ "dev": true }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -13707,9 +13661,9 @@ } }, "node_modules/pkg-types": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.3.tgz", - "integrity": "sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.0.tgz", + "integrity": "sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==", "dev": true, "dependencies": { "confbox": "^0.1.7", @@ -13739,9 +13693,9 @@ } }, "node_modules/postcss": { - "version": "8.4.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", - "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", "dev": true, "funding": [ { @@ -13759,8 +13713,8 @@ ], "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.1", - "source-map-js": "^1.2.0" + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -13826,9 +13780,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", - "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -13990,9 +13944,9 @@ "dev": true }, "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", "dev": true, "dependencies": { "end-of-stream": "^1.1.0", @@ -14021,13 +13975,10 @@ } }, "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "engines": { - "node": ">=6" - } + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true }, "node_modules/puppeteer-core": { "version": "2.1.1", @@ -14274,9 +14225,9 @@ "dev": true }, "node_modules/react-intersection-observer": { - "version": "9.10.3", - "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.10.3.tgz", - "integrity": "sha512-9NYfKwPZRovB6QJee7fDg0zz/SyYrqXtn5xTZU0vwLtLVBtfu9aZt1pVmr825REE49VPDZ7Lm5SNHjJBOTZHpA==", + "version": "9.13.1", + "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.13.1.tgz", + "integrity": "sha512-tSzDaTy0qwNPLJHg8XZhlyHTgGW6drFKTtvjdL+p6um12rcnp8Z5XstE+QNBJ7c64n5o0Lj4ilUleA41bmDoMw==", "peerDependencies": { "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" @@ -14561,9 +14512,9 @@ "dev": true }, "node_modules/regenerate-unicode-properties": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", - "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", "dev": true, "dependencies": { "regenerate": "^1.4.2" @@ -15070,11 +15021,14 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } }, "node_modules/serialize-javascript": { "version": "6.0.2", @@ -15100,15 +15054,6 @@ "node": ">= 0.8.0" } }, - "node_modules/serve-static/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -15240,9 +15185,9 @@ } }, "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -15303,9 +15248,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.18", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", - "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", "dev": true }, "node_modules/sprintf-js": { @@ -15569,9 +15514,9 @@ } }, "node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, "engines": { "node": ">=12" @@ -15914,9 +15859,9 @@ } }, "node_modules/terser": { - "version": "5.31.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz", - "integrity": "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.33.0.tgz", + "integrity": "sha512-JuPVaB7s1gdFKPKTelwUyRq5Sid2A3Gko2S0PncwdBq7kN9Ti9HPWDQ06MPsEDGsZeVESjKEnyGy68quBk1w6g==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -16184,9 +16129,9 @@ } }, "node_modules/tocbot": { - "version": "4.28.2", - "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.28.2.tgz", - "integrity": "sha512-/MaSa9xI6mIo84IxqqliSCtPlH0oy7sLcY9s26qPMyH/2CxtZ2vNAXYlIdEQ7kjAkCQnc0rbLygf//F5c663oQ==", + "version": "4.29.0", + "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.29.0.tgz", + "integrity": "sha512-E+8+lceJpWHJYKq+qFHbi+gmFdXZeOAliHFdgiIAUo68cr8ClReXAx7h9e3TcDM0kw9PSnBn3GAZEpRmRLZ93g==", "dev": true }, "node_modules/toggle-selection": { @@ -16238,9 +16183,9 @@ } }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true }, "node_modules/type-fest": { @@ -16275,9 +16220,9 @@ "dev": true }, "node_modules/typescript": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", - "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", + "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -16288,15 +16233,15 @@ } }, "node_modules/ufo": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz", - "integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", "dev": true }, "node_modules/uglify-js": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz", - "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==", + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", "dev": true, "optional": true, "bin": { @@ -16307,15 +16252,15 @@ } }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "dev": true }, "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", "dev": true, "engines": { "node": ">=4" @@ -16335,9 +16280,9 @@ } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", "dev": true, "engines": { "node": ">=4" @@ -16473,18 +16418,24 @@ } }, "node_modules/unplugin": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.11.0.tgz", - "integrity": "sha512-3r7VWZ/webh0SGgJScpWl2/MRCZK5d3ZYFcNaeci/GQ7Teop7zf0Nl2pUuz7G21BwPd9pcUPOC5KmJ2L3WgC5g==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.14.1.tgz", + "integrity": "sha512-lBlHbfSFPToDYp9pjXlUEFVxYLaue9f9T1HC+4OHlmj+HnMDdz9oZY+erXfoCe/5V/7gKUSY2jpXPb9S7f0f/w==", "dev": true, "dependencies": { - "acorn": "^8.11.3", - "chokidar": "^3.6.0", - "webpack-sources": "^3.2.3", - "webpack-virtual-modules": "^0.6.1" + "acorn": "^8.12.1", + "webpack-virtual-modules": "^0.6.2" }, "engines": { "node": ">=14.0.0" + }, + "peerDependencies": { + "webpack-sources": "^3" + }, + "peerDependenciesMeta": { + "webpack-sources": { + "optional": true + } } }, "node_modules/unplugin/node_modules/acorn": { @@ -16552,22 +16503,28 @@ "punycode": "^2.1.0" } }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/url": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", - "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", + "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", "dev": true, "dependencies": { "punycode": "^1.4.1", - "qs": "^6.11.2" + "qs": "^6.12.3" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/url/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - }, "node_modules/use-callback-ref": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", @@ -16753,9 +16710,9 @@ } }, "node_modules/watchpack": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", - "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", "dev": true, "dependencies": { "glob-to-regexp": "^0.4.1", @@ -16781,12 +16738,11 @@ "dev": true }, "node_modules/webpack": { - "version": "5.92.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.92.1.tgz", - "integrity": "sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==", + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", "dev": true, "dependencies": { - "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.12.1", "@webassemblyjs/wasm-edit": "^1.12.1", @@ -16795,7 +16751,7 @@ "acorn-import-attributes": "^1.9.5", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.0", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", diff --git a/e2e/storybook.test.ts b/e2e/storybook.test.ts index d811eb72b..4cb960a27 100644 --- a/e2e/storybook.test.ts +++ b/e2e/storybook.test.ts @@ -1,8 +1,8 @@ import {type Page, test, expect} from '@playwright/test' // eslint-disable-next-line import/extensions, import/no-unresolved -import data from '../docs/storybook/storybook-static/stories.json' +import data from '../docs/storybook/storybook-static/stories.json' assert {type: 'json'} // eslint-disable-next-line import/extensions, import/no-unresolved -import colorData from '../dist/docs/functional/themes/light.json' +import colorData from '../dist/docs/functional/themes/light.json' assert {type: 'json'} const extractNameAndValue = Object.entries(colorData) .map(([_key, details]) => ({ diff --git a/integration/baseline.test.ts b/integration/baseline.test.ts index 97f2ca862..7e0ca1dde 100644 --- a/integration/baseline.test.ts +++ b/integration/baseline.test.ts @@ -1,12 +1,12 @@ -import {PrimerStyleDictionary} from '../src/PrimerStyleDictionary' +import {PrimerStyleDictionary} from '../src/PrimerStyleDictionary.js' import fs from 'fs' -describe('PrimerStyleDictionary', () => { +describe('PrimerStyleDictionary', async () => { const basePath = `./integration` const buildPath = `${basePath}/build/baseline` - beforeAll(() => { - const extendedSD = PrimerStyleDictionary.extend({ + beforeAll(async () => { + const extendedSD = await PrimerStyleDictionary.extend({ source: [`${basePath}/tokens/**/*.json5`], platforms: { css: { @@ -39,7 +39,7 @@ describe('PrimerStyleDictionary', () => { jsonFlat: { prefix: 'PREFIX', buildPath: `${buildPath}/json/`, - transforms: ['name/cti/pascal'], + transforms: ['name/pathToPascalCase'], files: [ { options: { @@ -53,15 +53,15 @@ describe('PrimerStyleDictionary', () => { }, }) - extendedSD.cleanAllPlatforms() - extendedSD.buildAllPlatforms() + await extendedSD.cleanAllPlatforms() + await extendedSD.buildAllPlatforms() }) it('runs baseline css/variables format', () => { const output = fs.readFileSync(`${buildPath}/css/variables.css`, 'utf8') const expectedOutput = `:root { - --prefix-base-color-aqua-blue-500: #2C29FF; /* The primary color for interactive elements. */ - --prefix-fg-color-link-rest-01: #2C29FF; + --prefix-base-color-aqua-blue-500: #2c29ff; /* The primary color for interactive elements. */ + --prefix-fg-color-link-rest-01: #2c29ff; } ` expect(output).toBe(expectedOutput) @@ -74,15 +74,15 @@ describe('PrimerStyleDictionary', () => { "color": { "aquaBlue": { "500": { - "value": "#2C29FF", + "$value": "#2C29FF", "$type": "color", - "comment": "The primary color for interactive elements.", + "$description": "The primary color for interactive elements.", "filePath": "integration/tokens/base.json5", "isSource": true, "original": { - "value": "#2C29FF", + "$value": "#2C29FF", "$type": "color", - "comment": "The primary color for interactive elements." + "$description": "The primary color for interactive elements." }, "name": "500", "attributes": {}, @@ -98,12 +98,12 @@ describe('PrimerStyleDictionary', () => { }, "fgColor": { "link-rest-01": { - "value": "#2C29FF", + "$value": "#2C29FF", "$type": "color", "filePath": "integration/tokens/functional.json5", "isSource": true, "original": { - "value": "{base.color.aquaBlue.500}", + "$value": "{base.color.aquaBlue.500}", "$type": "color" }, "name": "link-rest-01", @@ -122,8 +122,8 @@ describe('PrimerStyleDictionary', () => { it('runs baseline flat json format', () => { const output = fs.readFileSync(`${buildPath}/json/flat.json`, 'utf8') const expectedOutput = `{ - "PrefixBaseColorAquaBlue500": "#2C29FF", - "PrefixFgColorLinkRest01": "#2C29FF" + "PREFIXBaseColorAquaBlue500": "#2C29FF", + "PREFIXFgColorLinkRest01": "#2C29FF" } ` expect(output).toBe(expectedOutput) diff --git a/integration/integration.test.ts b/integration/integration.test.ts index 7d440243a..1098a9b29 100644 --- a/integration/integration.test.ts +++ b/integration/integration.test.ts @@ -1,16 +1,17 @@ -import {PrimerStyleDictionary} from '../src/PrimerStyleDictionary' +import {PrimerStyleDictionary} from '../src/PrimerStyleDictionary.js' import fs from 'fs' -describe('PrimerStyleDictionary', () => { +describe('PrimerStyleDictionary', async () => { const basePath = `./integration` - const buildPath = `${basePath}/build/integreation` + const buildPath = `${basePath}/build/integration` - beforeAll(() => { - const extendedSD = PrimerStyleDictionary.extend({ + beforeAll(async () => { + const extendedSD = await PrimerStyleDictionary.extend({ source: [`${basePath}/tokens/**/*.json5`], platforms: { advancedCss: { prefix: 'PREFIX', + usesDtcg: true, transforms: [ 'name/pathToKebabCase', 'color/hex', @@ -36,6 +37,7 @@ describe('PrimerStyleDictionary', () => { }, commonJs: { prefix: 'PREFIX', + usesDtcg: true, transforms: [ 'color/hex', 'color/hexMix', @@ -59,6 +61,7 @@ describe('PrimerStyleDictionary', () => { }, javascriptEsm: { prefix: 'PREFIX', + usesDtcg: true, buildPath: `${buildPath}/js/`, transforms: [ 'color/hex', @@ -82,6 +85,7 @@ describe('PrimerStyleDictionary', () => { }, jsonFigma: { prefix: 'PREFIX', + usesDtcg: true, buildPath: `${buildPath}/json/`, transforms: [ 'color/rgbaFloat', @@ -104,6 +108,7 @@ describe('PrimerStyleDictionary', () => { }, jsonNestedPrefixed: { prefix: 'PREFIX', + usesDtcg: true, buildPath: `${buildPath}/json/`, transforms: [ 'color/hex', @@ -150,8 +155,8 @@ describe('PrimerStyleDictionary', () => { }, }) - extendedSD.cleanAllPlatforms() - extendedSD.buildAllPlatforms() + await extendedSD.cleanAllPlatforms() + await extendedSD.buildAllPlatforms() }) it('runs css/advanced format', () => { @@ -208,7 +213,7 @@ describe('PrimerStyleDictionary', () => { const output = fs.readFileSync(`${buildPath}/json/figma.json`, 'utf8') const expectedOutput = `[ { - "name": "PREFIX/base/color/aquaBlue/500", + "name": "PREFIX/fgColor/link-rest-01", "value": { "r": 0.17254901960784313, "g": 0.1607843137254902, @@ -216,13 +221,13 @@ describe('PrimerStyleDictionary', () => { "a": 1 }, "type": "COLOR", - "description": "The primary color for interactive elements.", - "refId": "PREFIX/base/color/aquaBlue/500", + "refId": "PREFIX/fgColor/link-rest-01", + "reference": "PREFIX/base/color/aquaBlue/500", "mode": "default", "scopes": ["ALL_SCOPES"] }, { - "name": "PREFIX/fgColor/link-rest-01", + "name": "PREFIX/base/color/aquaBlue/500", "value": { "r": 0.17254901960784313, "g": 0.1607843137254902, @@ -230,8 +235,8 @@ describe('PrimerStyleDictionary', () => { "a": 1 }, "type": "COLOR", - "refId": "PREFIX/fgColor/link-rest-01", - "reference": "PREFIX/base/color/aquaBlue/500", + "description": "The primary color for interactive elements.", + "refId": "PREFIX/base/color/aquaBlue/500", "mode": "default", "scopes": ["ALL_SCOPES"] } diff --git a/package-lock.json b/package-lock.json index eca9f28e6..fcab6660b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,11 +17,11 @@ "@changesets/changelog-github": "^0.5.0", "@changesets/cli": "^2.27.7", "@github/prettier-config": "^0.0.6", - "@playwright/test": "^1.45.1", - "@types/node": "^20.14.9", + "@playwright/test": "^1.45.2", + "@types/node": "^20.14.11", "@typescript-eslint/eslint-plugin": "^7.15.0", "@typescript-eslint/parser": "^7.15.0", - "@vitest/coverage-v8": "^2.0.1", + "@vitest/coverage-v8": "^2.0.3", "color-blend": "^4.0.0", "color2k": "^2.0.3", "console-table-printer": "^2.12.1", @@ -37,21 +37,15 @@ "eslint-plugin-storybook": "^0.8.0", "json5": "^2.2.1", "markdown-table-ts": "^1.0.3", - "style-dictionary": "^3.9.2", - "tsx": "^4.16.2", + "style-dictionary": "^4.0.1", + "tsx": "^4.19.0", "typescript": "5.5", - "vitest": "^2.0.1", + "vitest": "^2.0.3", "zod": "3.23", "zod-validation-error": "3.3" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" + }, + "peerDependencies": { + "style-dictionary": "^4.0.1" } }, "node_modules/@actions/github": { @@ -67,9 +61,9 @@ } }, "node_modules/@actions/http-client": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.1.tgz", - "integrity": "sha512-KhC/cZsq7f8I4LfZSJKgCvEwfkE8o1538VoBeoGzokVLLnbFDEAdFD3UhoMklxo2un9NJVBdANOresx7vTHlHw==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.3.tgz", + "integrity": "sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA==", "dev": true, "dependencies": { "tunnel": "^0.0.6", @@ -103,9 +97,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", - "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", "dev": true, "engines": { "node": ">=6.9.0" @@ -135,11 +129,85 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", - "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", "dev": true, + "dependencies": { + "@babel/types": "^7.25.6" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -148,24 +216,24 @@ } }, "node_modules/@babel/runtime": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", - "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", + "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", "dev": true, "dependencies": { - "regenerator-runtime": "^0.13.11" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", - "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-string-parser": "^7.24.8", "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, @@ -179,17 +247,77 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@bundled-es-modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-Rk453EklPUPC3NRWc3VUNI/SSUjdBaFoaQvFRmNBNtMHVtOFD5AntiWg5kEE1hqcPqedYFDzxE3ZcMYPcA195w==", + "dev": true, + "dependencies": { + "deepmerge": "^4.3.1" + } + }, + "node_modules/@bundled-es-modules/glob": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/glob/-/glob-10.4.2.tgz", + "integrity": "sha512-740y5ofkzydsFao5EXJrGilcIL6EFEw/cmPf2uhTw9J6G1YOhiIFjNFCHdpgEiiH5VlU3G0SARSjlFlimRRSMA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "buffer": "^6.0.3", + "events": "^3.3.0", + "glob": "^10.4.2", + "patch-package": "^8.0.0", + "path": "^0.12.7", + "stream": "^0.0.3", + "string_decoder": "^1.3.0", + "url": "^0.11.3" + } + }, + "node_modules/@bundled-es-modules/glob/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@bundled-es-modules/memfs": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/memfs/-/memfs-4.9.4.tgz", + "integrity": "sha512-1XyYPUaIHwEOdF19wYVLBtHJRr42Do+3ctht17cZOHwHf67vkmRNPlYDGY2kJps4RgE5+c7nEZmEzxxvb1NZWA==", + "dev": true, + "dependencies": { + "assert": "^2.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "memfs": "^4.9.3", + "path": "^0.12.7", + "stream": "^0.0.3", + "util": "^0.12.5" + } + }, "node_modules/@changesets/apply-release-plan": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.0.4.tgz", - "integrity": "sha512-HLFwhKWayKinWAul0Vj+76jVx1Pc2v55MGPVjZ924Y/ROeSsBMFutv9heHmCUj48lJyRfOTJG5+ar+29FUky/A==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.0.5.tgz", + "integrity": "sha512-1cWCk+ZshEkSVEZrm2fSj1Gz8sYvxgUL4Q78+1ZZqeqfuevPTPk033/yUZ3df8BKMohkqqHfzj0HOOrG0KtXTw==", "dev": true, "dependencies": { - "@babel/runtime": "^7.20.1", - "@changesets/config": "^3.0.2", + "@changesets/config": "^3.0.3", "@changesets/get-version-range-type": "^0.4.0", - "@changesets/git": "^3.0.0", - "@changesets/should-skip-package": "^0.1.0", + "@changesets/git": "^3.0.1", + "@changesets/should-skip-package": "^0.1.1", "@changesets/types": "^6.0.0", "@manypkg/get-packages": "^1.1.3", "detect-indent": "^6.0.0", @@ -217,15 +345,14 @@ } }, "node_modules/@changesets/assemble-release-plan": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.3.tgz", - "integrity": "sha512-bLNh9/Lgl1VwkjWZTq8JmRqH+hj7/Yzfz0jsQ/zJJ+FTmVqmqPj3szeKOri8O/hEM8JmHW019vh2gTO9iq5Cuw==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.4.tgz", + "integrity": "sha512-nqICnvmrwWj4w2x0fOhVj2QEGdlUuwVAwESrUo5HLzWMI1rE5SWfsr9ln+rDqWB6RQ2ZyaMZHUcU7/IRaUJS+Q==", "dev": true, "dependencies": { - "@babel/runtime": "^7.20.1", "@changesets/errors": "^0.2.0", - "@changesets/get-dependents-graph": "^2.1.1", - "@changesets/should-skip-package": "^0.1.0", + "@changesets/get-dependents-graph": "^2.1.2", + "@changesets/should-skip-package": "^0.1.1", "@changesets/types": "^6.0.0", "@manypkg/get-packages": "^1.1.3", "semver": "^7.5.3" @@ -252,39 +379,37 @@ } }, "node_modules/@changesets/cli": { - "version": "2.27.7", - "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.27.7.tgz", - "integrity": "sha512-6lr8JltiiXPIjDeYg4iM2MeePP6VN/JkmqBsVA5XRiy01hGS3y629LtSDvKcycj/w/5Eur1rEwby/MjcYS+e2A==", + "version": "2.27.8", + "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.27.8.tgz", + "integrity": "sha512-gZNyh+LdSsI82wBSHLQ3QN5J30P4uHKJ4fXgoGwQxfXwYFTJzDdvIJasZn8rYQtmKhyQuiBj4SSnLuKlxKWq4w==", "dev": true, "dependencies": { - "@babel/runtime": "^7.20.1", - "@changesets/apply-release-plan": "^7.0.4", - "@changesets/assemble-release-plan": "^6.0.3", + "@changesets/apply-release-plan": "^7.0.5", + "@changesets/assemble-release-plan": "^6.0.4", "@changesets/changelog-git": "^0.2.0", - "@changesets/config": "^3.0.2", + "@changesets/config": "^3.0.3", "@changesets/errors": "^0.2.0", - "@changesets/get-dependents-graph": "^2.1.1", - "@changesets/get-release-plan": "^4.0.3", - "@changesets/git": "^3.0.0", - "@changesets/logger": "^0.1.0", - "@changesets/pre": "^2.0.0", - "@changesets/read": "^0.6.0", - "@changesets/should-skip-package": "^0.1.0", + "@changesets/get-dependents-graph": "^2.1.2", + "@changesets/get-release-plan": "^4.0.4", + "@changesets/git": "^3.0.1", + "@changesets/logger": "^0.1.1", + "@changesets/pre": "^2.0.1", + "@changesets/read": "^0.6.1", + "@changesets/should-skip-package": "^0.1.1", "@changesets/types": "^6.0.0", - "@changesets/write": "^0.3.1", + "@changesets/write": "^0.3.2", "@manypkg/get-packages": "^1.1.3", "@types/semver": "^7.5.0", "ansi-colors": "^4.1.3", - "chalk": "^2.1.0", "ci-info": "^3.7.0", "enquirer": "^2.3.0", "external-editor": "^3.1.0", "fs-extra": "^7.0.1", - "human-id": "^1.0.2", "mri": "^1.2.0", "outdent": "^0.5.0", "p-limit": "^2.2.0", - "preferred-pm": "^3.0.0", + "package-manager-detector": "^0.2.0", + "picocolors": "^1.1.0", "resolve-from": "^5.0.0", "semver": "^7.5.3", "spawndamnit": "^2.0.0", @@ -295,14 +420,14 @@ } }, "node_modules/@changesets/config": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@changesets/config/-/config-3.0.2.tgz", - "integrity": "sha512-cdEhS4t8woKCX2M8AotcV2BOWnBp09sqICxKapgLHf9m5KdENpWjyrFNMjkLqGJtUys9U+w93OxWT0czorVDfw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@changesets/config/-/config-3.0.3.tgz", + "integrity": "sha512-vqgQZMyIcuIpw9nqFIpTSNyc/wgm/Lu1zKN5vECy74u95Qx/Wa9g27HdgO4NkVAaq+BGA8wUc/qvbvVNs93n6A==", "dev": true, "dependencies": { "@changesets/errors": "^0.2.0", - "@changesets/get-dependents-graph": "^2.1.1", - "@changesets/logger": "^0.1.0", + "@changesets/get-dependents-graph": "^2.1.2", + "@changesets/logger": "^0.1.1", "@changesets/types": "^6.0.0", "@manypkg/get-packages": "^1.1.3", "fs-extra": "^7.0.1", @@ -319,15 +444,14 @@ } }, "node_modules/@changesets/get-dependents-graph": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.1.tgz", - "integrity": "sha512-LRFjjvigBSzfnPU2n/AhFsuWR5DK++1x47aq6qZ8dzYsPtS/I5mNhIGAS68IAxh1xjO9BTtz55FwefhANZ+FCA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.2.tgz", + "integrity": "sha512-sgcHRkiBY9i4zWYBwlVyAjEM9sAzs4wYVwJUdnbDLnVG3QwAaia1Mk5P8M7kraTOZN+vBET7n8KyB0YXCbFRLQ==", "dev": true, "dependencies": { "@changesets/types": "^6.0.0", "@manypkg/get-packages": "^1.1.3", - "chalk": "^2.1.0", - "fs-extra": "^7.0.1", + "picocolors": "^1.1.0", "semver": "^7.5.3" } }, @@ -342,16 +466,15 @@ } }, "node_modules/@changesets/get-release-plan": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.3.tgz", - "integrity": "sha512-6PLgvOIwTSdJPTtpdcr3sLtGatT+Jr22+cQwEBJBy6wP0rjB4yJ9lv583J9fVpn1bfQlBkDa8JxbS2g/n9lIyA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.4.tgz", + "integrity": "sha512-SicG/S67JmPTrdcc9Vpu0wSQt7IiuN0dc8iR5VScnnTVPfIaLvKmEGRvIaF0kcn8u5ZqLbormZNTO77bCEvyWw==", "dev": true, "dependencies": { - "@babel/runtime": "^7.20.1", - "@changesets/assemble-release-plan": "^6.0.3", - "@changesets/config": "^3.0.2", - "@changesets/pre": "^2.0.0", - "@changesets/read": "^0.6.0", + "@changesets/assemble-release-plan": "^6.0.4", + "@changesets/config": "^3.0.3", + "@changesets/pre": "^2.0.1", + "@changesets/read": "^0.6.1", "@changesets/types": "^6.0.0", "@manypkg/get-packages": "^1.1.3" } @@ -363,14 +486,12 @@ "dev": true }, "node_modules/@changesets/git": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@changesets/git/-/git-3.0.0.tgz", - "integrity": "sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@changesets/git/-/git-3.0.1.tgz", + "integrity": "sha512-pdgHcYBLCPcLd82aRcuO0kxCDbw/yISlOtkmwmE8Odo1L6hSiZrBOsRl84eYG7DRCab/iHnOkWqExqc4wxk2LQ==", "dev": true, "dependencies": { - "@babel/runtime": "^7.20.1", "@changesets/errors": "^0.2.0", - "@changesets/types": "^6.0.0", "@manypkg/get-packages": "^1.1.3", "is-subdir": "^1.1.1", "micromatch": "^4.0.2", @@ -378,12 +499,12 @@ } }, "node_modules/@changesets/logger": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@changesets/logger/-/logger-0.1.0.tgz", - "integrity": "sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@changesets/logger/-/logger-0.1.1.tgz", + "integrity": "sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==", "dev": true, "dependencies": { - "chalk": "^2.1.0" + "picocolors": "^1.1.0" } }, "node_modules/@changesets/parse": { @@ -397,12 +518,11 @@ } }, "node_modules/@changesets/pre": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-2.0.0.tgz", - "integrity": "sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-2.0.1.tgz", + "integrity": "sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ==", "dev": true, "dependencies": { - "@babel/runtime": "^7.20.1", "@changesets/errors": "^0.2.0", "@changesets/types": "^6.0.0", "@manypkg/get-packages": "^1.1.3", @@ -410,28 +530,26 @@ } }, "node_modules/@changesets/read": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.6.0.tgz", - "integrity": "sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.6.1.tgz", + "integrity": "sha512-jYMbyXQk3nwP25nRzQQGa1nKLY0KfoOV7VLgwucI0bUO8t8ZLCr6LZmgjXsiKuRDc+5A6doKPr9w2d+FEJ55zQ==", "dev": true, "dependencies": { - "@babel/runtime": "^7.20.1", - "@changesets/git": "^3.0.0", - "@changesets/logger": "^0.1.0", + "@changesets/git": "^3.0.1", + "@changesets/logger": "^0.1.1", "@changesets/parse": "^0.4.0", "@changesets/types": "^6.0.0", - "chalk": "^2.1.0", "fs-extra": "^7.0.1", - "p-filter": "^2.1.0" + "p-filter": "^2.1.0", + "picocolors": "^1.1.0" } }, "node_modules/@changesets/should-skip-package": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@changesets/should-skip-package/-/should-skip-package-0.1.0.tgz", - "integrity": "sha512-FxG6Mhjw7yFStlSM7Z0Gmg3RiyQ98d/9VpQAZ3Fzr59dCOM9G6ZdYbjiSAt0XtFr9JR5U2tBaJWPjrkGGc618g==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@changesets/should-skip-package/-/should-skip-package-0.1.1.tgz", + "integrity": "sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg==", "dev": true, "dependencies": { - "@babel/runtime": "^7.20.1", "@changesets/types": "^6.0.0", "@manypkg/get-packages": "^1.1.3" } @@ -443,12 +561,11 @@ "dev": true }, "node_modules/@changesets/write": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.3.1.tgz", - "integrity": "sha512-SyGtMXzH3qFqlHKcvFY2eX+6b0NGiFcNav8AFsYwy5l8hejOeoeTDemu5Yjmke2V5jpzY+pBvM0vCCQ3gdZpfw==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.3.2.tgz", + "integrity": "sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==", "dev": true, "dependencies": { - "@babel/runtime": "^7.20.1", "@changesets/types": "^6.0.0", "fs-extra": "^7.0.1", "human-id": "^1.0.2", @@ -471,9 +588,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", "cpu": [ "ppc64" ], @@ -483,13 +600,13 @@ "aix" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", "cpu": [ "arm" ], @@ -499,13 +616,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", "cpu": [ "arm64" ], @@ -515,13 +632,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", "cpu": [ "x64" ], @@ -531,13 +648,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", "cpu": [ "arm64" ], @@ -547,13 +664,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", "cpu": [ "x64" ], @@ -563,13 +680,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", "cpu": [ "arm64" ], @@ -579,13 +696,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", "cpu": [ "x64" ], @@ -595,13 +712,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", "cpu": [ "arm" ], @@ -611,13 +728,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", "cpu": [ "arm64" ], @@ -627,13 +744,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", "cpu": [ "ia32" ], @@ -643,13 +760,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", "cpu": [ "loong64" ], @@ -659,13 +776,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", "cpu": [ "mips64el" ], @@ -675,13 +792,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", "cpu": [ "ppc64" ], @@ -691,13 +808,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", "cpu": [ "riscv64" ], @@ -707,13 +824,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", "cpu": [ "s390x" ], @@ -723,13 +840,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", "cpu": [ "x64" ], @@ -739,13 +856,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", "cpu": [ "x64" ], @@ -755,13 +872,29 @@ "netbsd" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", "cpu": [ "x64" ], @@ -771,13 +904,13 @@ "openbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", "cpu": [ "x64" ], @@ -787,13 +920,13 @@ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", "cpu": [ "arm64" ], @@ -803,13 +936,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", "cpu": [ "ia32" ], @@ -819,13 +952,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", "cpu": [ "x64" ], @@ -835,7 +968,7 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@eslint-community/eslint-utils": { @@ -891,6 +1024,16 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -903,6 +1046,18 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@eslint/js": { "version": "8.57.0", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", @@ -948,6 +1103,28 @@ "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -986,9 +1163,9 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, "engines": { "node": ">=12" @@ -997,16 +1174,21 @@ "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { @@ -1024,23 +1206,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", @@ -1050,18 +1215,6 @@ "node": ">=8" } }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", @@ -1077,9 +1230,9 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "engines": { "node": ">=6.0.0" @@ -1095,9 +1248,9 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "dev": true }, "node_modules/@jridgewell/trace-mapping": { @@ -1110,6 +1263,60 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "dev": true, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz", + "integrity": "sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==", + "dev": true, + "dependencies": { + "@jsonjoy.com/base64": "^1.1.1", + "@jsonjoy.com/util": "^1.1.2", + "hyperdyperid": "^1.2.0", + "thingies": "^1.20.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.3.0.tgz", + "integrity": "sha512-Cebt4Vk7k1xHy87kHY7KSPLT77A7Ev7IfOblyLZhtYEhrdQ6fX4EoLq3xOQ3O/DRMEh2ok5nyC180E+ABS8Wmw==", + "dev": true, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, "node_modules/@manypkg/find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", @@ -1211,18 +1418,27 @@ "node": ">= 8" } }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "engines": { + "node": ">=12.4.0" + } + }, "node_modules/@npmcli/config": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-8.3.3.tgz", - "integrity": "sha512-sIMKHiiYr91ALiHjhPq64F5P/SCaiSyDfpNmgYHtlIJtLY445+3+r3VoREzpdDrOwIqwQ6iEHinbTfaocL0UgA==", + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-8.3.4.tgz", + "integrity": "sha512-01rtHedemDNhUXdicU7s+QYz/3JyV5Naj84cvdXGH4mgCdL+agmSYaLF4LUG4vMCLzhBO8YtS0gPpH1FGvbgAw==", "dev": true, "dependencies": { "@npmcli/map-workspaces": "^3.0.2", + "@npmcli/package-json": "^5.1.1", "ci-info": "^4.0.0", "ini": "^4.1.2", "nopt": "^7.2.1", "proc-log": "^4.2.0", - "read-package-json-fast": "^3.0.2", "semver": "^7.3.5", "walk-up-path": "^3.0.1" }, @@ -1245,6 +1461,50 @@ "node": ">=8" } }, + "node_modules/@npmcli/git": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz", + "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==", + "dev": true, + "dependencies": { + "@npmcli/promise-spawn": "^7.0.0", + "ini": "^4.1.3", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^9.0.0", + "proc-log": "^4.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, "node_modules/@npmcli/map-workspaces": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz", @@ -1260,19 +1520,10 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/@npmcli/map-workspaces/node_modules/glob": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", - "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", @@ -1285,53 +1536,91 @@ "bin": { "glob": "dist/esm/bin.mjs" }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/map-workspaces/node_modules/jackspeak": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", - "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", + "node_modules/@npmcli/name-from-folder": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz", + "integrity": "sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.0.tgz", + "integrity": "sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==", "dev": true, "dependencies": { - "@isaacs/cliui": "^8.0.2" + "@npmcli/git": "^5.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^7.0.0", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "proc-log": "^4.0.0", + "semver": "^7.5.3" }, "engines": { - "node": ">=14" + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "funding": { "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/@npmcli/promise-spawn": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", + "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "which": "^4.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@npmcli/name-from-folder": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz", - "integrity": "sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==", + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=16" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" } }, "node_modules/@octokit/auth-token": { @@ -1389,9 +1678,9 @@ } }, "node_modules/@octokit/openapi-types": { - "version": "22.0.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.0.1.tgz", - "integrity": "sha512-1yN5m1IMNXthoBDUXFF97N1gHop04B3H8ws7wtOr8GgRyDO1gKALjwMHARNBoMBiB/2vEe/vxstrApcJZzQbnQ==", + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==", "dev": true }, "node_modules/@octokit/plugin-paginate-rest": { @@ -1484,12 +1773,12 @@ } }, "node_modules/@octokit/types": { - "version": "13.4.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.4.0.tgz", - "integrity": "sha512-WlMegy3lPXYWASe3k9Jslc5a0anrYAYMWtsFrxBTdQjS70hvLH6C+PGvHbOsgy3RA3LouGJoU/vAt4KarecQLQ==", + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz", + "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==", "dev": true, "dependencies": { - "@octokit/openapi-types": "^22.0.1" + "@octokit/openapi-types": "^22.2.0" } }, "node_modules/@pkgjs/parseargs": { @@ -1515,12 +1804,12 @@ } }, "node_modules/@playwright/test": { - "version": "1.45.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.45.1.tgz", - "integrity": "sha512-Wo1bWTzQvGA7LyKGIZc8nFSTFf2TkthGIFBR+QVNilvwouGzFd4PYukZe3rvf5PSqjHi1+1NyKSDZKcQWETzaA==", + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.47.0.tgz", + "integrity": "sha512-SgAdlSwYVpToI4e/IH19IHHWvoijAYH5hu2MWSXptRypLSnzj51PcGD+rsOXFayde4P9ZLi+loXVwArg6IUkCA==", "dev": true, "dependencies": { - "playwright": "1.45.1" + "playwright": "1.47.0" }, "bin": { "playwright": "cli.js" @@ -1751,10 +2040,10 @@ "win32" ] }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", "dev": true }, "node_modules/@storybook/csf": { @@ -1969,9 +2258,9 @@ } }, "node_modules/@types/mdast/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", "dev": true }, "node_modules/@types/ms": { @@ -1981,18 +2270,18 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.14.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", - "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", + "version": "20.16.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.5.tgz", + "integrity": "sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==", "dev": true, "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.19.2" } }, "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, "node_modules/@types/supports-color": { @@ -2002,22 +2291,22 @@ "dev": true }, "node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.15.0.tgz", - "integrity": "sha512-uiNHpyjZtFrLwLDpHnzaDlP3Tt6sGMqTCiqmxaN4n4RP0EfYZDODJyddiFDF44Hjwxr5xAcaYxVKm9QKQFJFLA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", + "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.15.0", - "@typescript-eslint/type-utils": "7.15.0", - "@typescript-eslint/utils": "7.15.0", - "@typescript-eslint/visitor-keys": "7.15.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -2040,16 +2329,17 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.15.0.tgz", - "integrity": "sha512-SkgriaeV6PDvpA6253PDVep0qCqgbO1IOBiycjnXsszNTVQe5flN5wR5jiczoEoDEnAqYFSFFc9al9BSGVltkg==", + "node_modules/@typescript-eslint/parser": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.15.0", - "@typescript-eslint/utils": "7.15.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -2067,16 +2357,14 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.15.0.tgz", - "integrity": "sha512-hfDMDqaqOqsUVGiEPSMLR/AjTSCsmJwjpKkYQRo1FNbmW4tBwBspYDwO9eh7sKSTwMQgBw9/T4DHudPaqshRWA==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.15.0", - "@typescript-eslint/types": "7.15.0", - "@typescript-eslint/typescript-estree": "7.15.0" + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -2084,22 +2372,18 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" } }, - "node_modules/@typescript-eslint/parser": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.15.0.tgz", - "integrity": "sha512-k9fYuQNnypLFcqORNClRykkGOMOj+pV6V91R4GO/l1FDGwpqmSwoOQrOHo3cGaH63e+D3ZiCAOsuS/D2c99j/A==", + "node_modules/@typescript-eslint/type-utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", + "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.15.0", - "@typescript-eslint/types": "7.15.0", - "@typescript-eslint/typescript-estree": "7.15.0", - "@typescript-eslint/visitor-keys": "7.15.0", - "debug": "^4.3.4" + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -2117,27 +2401,10 @@ } } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.15.0.tgz", - "integrity": "sha512-Q/1yrF/XbxOTvttNVPihxh1b9fxamjEoz2Os/Pe38OHwxC24CyCqXxGTOdpb4lt6HYtqw9HetA/Rf6gDGaMPlw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.15.0", - "@typescript-eslint/visitor-keys": "7.15.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@typescript-eslint/types": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.15.0.tgz", - "integrity": "sha512-aV1+B1+ySXbQH0pLK0rx66I3IkiZNidYobyfn0WFsdGhSXw+P3YOqeTq5GED458SfB24tg+ux3S+9g118hjlTw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -2148,13 +2415,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.15.0.tgz", - "integrity": "sha512-gjyB/rHAopL/XxfmYThQbXbzRMGhZzGw6KpcMbfe8Q3nNQKStpxnUKeXb0KiN/fFDR42Z43szs6rY7eHk0zdGQ==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.15.0", - "@typescript-eslint/visitor-keys": "7.15.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2175,37 +2442,35 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/@typescript-eslint/utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^18.18.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.15.0.tgz", - "integrity": "sha512-Hqgy/ETgpt2L5xueA/zHHIl4fJI2O4XUE9l4+OIfbJIRSnTJb/QscncdqqZzofQegIJugRIF57OJea1khw2SDw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.15.0", + "@typescript-eslint/types": "7.18.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -2223,9 +2488,9 @@ "dev": true }, "node_modules/@vitest/coverage-v8": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.0.1.tgz", - "integrity": "sha512-ACcSlJtWlravv0QyJSCO9rvm06msj6x0HooXouB0NXKG6PGxUN5VX4X8QEATfTMGsJlZLqWvq0dEY9W1V0rcSw==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.0.5.tgz", + "integrity": "sha512-qeFcySCg5FLO2bHHSa0tAZAOnAUbp4L6/A5JDuj9+bt53JREl8hpLjLHEWF0e/gWc8INVpJaqA7+Ene2rclpZg==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.3.0", @@ -2237,129 +2502,51 @@ "istanbul-reports": "^3.1.7", "magic-string": "^0.30.10", "magicast": "^0.3.4", - "picocolors": "^1.0.1", "std-env": "^3.7.0", - "strip-literal": "^2.1.0", - "test-exclude": "^7.0.1" + "test-exclude": "^7.0.1", + "tinyrainbow": "^1.2.0" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "2.0.1" - } - }, - "node_modules/@vitest/coverage-v8/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@vitest/coverage-v8/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@vitest/coverage-v8/node_modules/istanbul-lib-source-maps": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", - "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.23", - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@vitest/coverage-v8/node_modules/jackspeak": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.2.tgz", - "integrity": "sha512-qH3nOSj8q/8+Eg8LUPOq3C+6HWkpUioIjDsq1+D4zY91oZvpPttw8GwtF1nReRYKXl+1AORyFqtm2f5Q1SB6/Q==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": "14 >=14.21 || 16 >=16.20 || >=18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "vitest": "2.0.5" } }, - "node_modules/@vitest/coverage-v8/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/@vitest/expect": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.5.tgz", + "integrity": "sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" + "@vitest/spy": "2.0.5", + "@vitest/utils": "2.0.5", + "chai": "^5.1.1", + "tinyrainbow": "^1.2.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@vitest/coverage-v8/node_modules/test-exclude": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", - "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^10.4.1", - "minimatch": "^9.0.4" - }, - "engines": { - "node": ">=18" + "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/expect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.1.tgz", - "integrity": "sha512-yw70WL3ZwzbI2O3MOXYP2Shf4vqVkS3q5FckLJ6lhT9VMMtDyWdofD53COZcoeuHwsBymdOZp99r5bOr5g+oeA==", + "node_modules/@vitest/pretty-format": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.5.tgz", + "integrity": "sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==", "dev": true, "dependencies": { - "@vitest/spy": "2.0.1", - "@vitest/utils": "2.0.1", - "chai": "^5.1.1" + "tinyrainbow": "^1.2.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/runner": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.0.1.tgz", - "integrity": "sha512-XfcSXOGGxgR2dQ466ZYqf0ZtDLLDx9mZeQcKjQDLQ9y6Cmk2Wl7wxMuhiYK4Fo1VxCtLcFEGW2XpcfMuiD1Maw==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.0.5.tgz", + "integrity": "sha512-TfRfZa6Bkk9ky4tW0z20WKXFEwwvWhRY+84CnSEtq4+3ZvDlJyY32oNTJtM7AW9ihW90tX/1Q78cb6FjoAs+ig==", "dev": true, "dependencies": { - "@vitest/utils": "2.0.1", + "@vitest/utils": "2.0.5", "pathe": "^1.1.2" }, "funding": { @@ -2367,23 +2554,23 @@ } }, "node_modules/@vitest/snapshot": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.0.1.tgz", - "integrity": "sha512-rst79a4Q+J5vrvHRapdfK4BdqpMH0eF58jVY1vYeBo/1be+nkyenGI5SCSohmjf6MkCkI20/yo5oG+0R8qrAnA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.0.5.tgz", + "integrity": "sha512-SgCPUeDFLaM0mIUHfaArq8fD2WbaXG/zVXjRupthYfYGzc8ztbFbu6dUNOblBG7XLMR1kEhS/DNnfCZ2IhdDew==", "dev": true, "dependencies": { + "@vitest/pretty-format": "2.0.5", "magic-string": "^0.30.10", - "pathe": "^1.1.2", - "pretty-format": "^29.7.0" + "pathe": "^1.1.2" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/spy": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.1.tgz", - "integrity": "sha512-NLkdxbSefAtJN56GtCNcB4GiHFb5i9q1uh4V229lrlTZt2fnwsTyjLuWIli1xwK2fQspJJmHXHyWx0Of3KTXWA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.5.tgz", + "integrity": "sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==", "dev": true, "dependencies": { "tinyspy": "^3.0.0" @@ -2393,20 +2580,37 @@ } }, "node_modules/@vitest/utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.1.tgz", - "integrity": "sha512-STH+2fHZxlveh1mpU4tKzNgRk7RZJyr6kFGJYCI5vocdfqfPsQrgVC6k7dBWHfin5QNB4TLvRS0Ckly3Dt1uWw==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.5.tgz", + "integrity": "sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==", "dev": true, "dependencies": { - "diff-sequences": "^29.6.3", + "@vitest/pretty-format": "2.0.5", "estree-walker": "^3.0.3", "loupe": "^3.1.1", - "pretty-format": "^29.7.0" + "tinyrainbow": "^1.2.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "node_modules/@zip.js/zip.js": { + "version": "2.7.52", + "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.52.tgz", + "integrity": "sha512-+5g7FQswvrCHwYKNMd/KFxZSObctLSsQOgqBSi0LzwHo3li9Eh1w5cF5ndjQw9Zbr3ajVnd2+XyiX85gAetx1Q==", + "dev": true, + "engines": { + "bun": ">=0.7.0", + "deno": ">=1.0.0", + "node": ">=16.5.0" + } + }, "node_modules/abbrev": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", @@ -2472,15 +2676,18 @@ } }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/argparse": { @@ -2672,6 +2879,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/assert": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", + "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-nan": "^1.3.2", + "object-is": "^1.1.5", + "object.assign": "^4.1.4", + "util": "^0.12.5" + } + }, "node_modules/assertion-error": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", @@ -2687,6 +2907,15 @@ "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", "dev": true }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", @@ -2703,9 +2932,9 @@ } }, "node_modules/axe-core": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.9.1.tgz", - "integrity": "sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.0.tgz", + "integrity": "sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==", "dev": true, "engines": { "node": ">=4" @@ -2736,6 +2965,26 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/before-after-hook": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", @@ -2755,13 +3004,12 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "node_modules/braces": { @@ -2777,9 +3025,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", - "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", "dev": true, "funding": [ { @@ -2796,10 +3044,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001629", - "electron-to-chromium": "^1.4.796", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.16" + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" }, "bin": { "browserslist": "cli.js" @@ -2808,6 +3056,30 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -2851,20 +3123,10 @@ "node": ">=6" } }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, "node_modules/caniuse-lite": { - "version": "1.0.30001640", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz", - "integrity": "sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==", + "version": "1.0.30001660", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz", + "integrity": "sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==", "dev": true, "funding": [ { @@ -2881,17 +3143,6 @@ } ] }, - "node_modules/capital-case": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", - "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" - } - }, "node_modules/ccount": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", @@ -2919,38 +3170,26 @@ } }, "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/change-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", - "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", - "dev": true, - "dependencies": { - "camel-case": "^4.1.2", - "capital-case": "^1.0.4", - "constant-case": "^3.0.4", - "dot-case": "^3.0.4", - "header-case": "^2.0.4", - "no-case": "^3.0.4", - "param-case": "^3.0.4", - "pascal-case": "^3.1.2", - "path-case": "^3.0.4", - "sentence-case": "^3.0.4", - "snake-case": "^3.0.4", - "tslib": "^2.0.3" - } + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", + "dev": true }, "node_modules/character-entities": { "version": "1.2.4", @@ -3008,9 +3247,9 @@ } }, "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { @@ -3032,18 +3271,21 @@ } }, "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/color2k": { @@ -3061,6 +3303,18 @@ "node": ">= 12" } }, + "node_modules/component-emitter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-2.0.0.tgz", + "integrity": "sha512-4m5s3Me2xxlVKG9PkZpQqHQR7bgpnN7joDMJ4yvVkVXngjoITG76IaZmzmywSeRTeTpc6N6r3H3+KyUurV8OYw==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -3091,17 +3345,6 @@ "simple-wcswidth": "^1.0.1" } }, - "node_modules/constant-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", - "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case": "^2.0.2" - } - }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -3180,12 +3423,12 @@ "dev": true }, "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -3266,6 +3509,15 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -3337,13 +3589,13 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.3.1" } }, "node_modules/dir-glob": { @@ -3359,25 +3611,15 @@ } }, "node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "dependencies": { "esutils": "^2.0.2" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "node": ">=6.0.0" } }, "node_modules/dotenv": { @@ -3396,9 +3638,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.816", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.816.tgz", - "integrity": "sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw==", + "version": "1.5.20", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.20.tgz", + "integrity": "sha512-74mdl6Fs1HHzK9SUX4CKFxAtAe3nUns48y79TskHNAG6fGOlLfyKA4j855x+0b5u8rWJIrlaG9tcTPstMlwjIw==", "dev": true }, "node_modules/emoji-regex": { @@ -3408,9 +3650,9 @@ "dev": true }, "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -3421,17 +3663,24 @@ } }, "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, "dependencies": { - "ansi-colors": "^4.1.1" + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8.6" } }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -3620,59 +3869,63 @@ } }, "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", "dev": true, "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint": { @@ -3763,17 +4016,18 @@ } }, "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", - "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.3.tgz", + "integrity": "sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==", "dev": true, "dependencies": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.12.0", - "eslint-module-utils": "^2.7.4", - "fast-glob": "^3.3.1", - "get-tsconfig": "^4.5.0", - "is-core-module": "^2.11.0", + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.3.5", + "enhanced-resolve": "^5.15.0", + "eslint-module-utils": "^2.8.1", + "fast-glob": "^3.3.2", + "get-tsconfig": "^4.7.5", + "is-bun-module": "^1.0.2", "is-glob": "^4.0.3" }, "engines": { @@ -3784,7 +4038,16 @@ }, "peerDependencies": { "eslint": "*", - "eslint-plugin-import": "*" + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } } }, "node_modules/eslint-mdx": { @@ -3819,26 +4082,10 @@ "eslint": ">=8.0.0" } }, - "node_modules/eslint-mdx/node_modules/synckit": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.0.tgz", - "integrity": "sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==", - "dev": true, - "dependencies": { - "@pkgr/core": "^0.1.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.11.0.tgz", + "integrity": "sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==", "dev": true, "dependencies": { "debug": "^3.2.7" @@ -3862,12 +4109,12 @@ } }, "node_modules/eslint-plugin-escompat": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-escompat/-/eslint-plugin-escompat-3.4.0.tgz", - "integrity": "sha512-ufTPv8cwCxTNoLnTZBFTQ5SxU2w7E7wiMIS7PSxsgP1eAxFjtSaoZ80LRn64hI8iYziE6kJG6gX/ZCJVxh48Bg==", + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-escompat/-/eslint-plugin-escompat-3.11.1.tgz", + "integrity": "sha512-j/H70uveM+G9M0onQJOYM+h5trTjQfmBnhGzxAxwGrqARfgXwkfjs+SkvJ1j/a4ofyCIYpBQsGg7q+TowwPNmA==", "dev": true, "dependencies": { - "browserslist": "^4.21.0" + "browserslist": "^4.23.1" }, "peerDependencies": { "eslint": ">=5.14.1" @@ -3892,6 +4139,15 @@ "eslint": ">=4.19.1" } }, + "node_modules/eslint-plugin-eslint-comments/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/eslint-plugin-filenames": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/eslint-plugin-filenames/-/eslint-plugin-filenames-1.3.2.tgz", @@ -3908,14 +4164,14 @@ } }, "node_modules/eslint-plugin-github": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-github/-/eslint-plugin-github-5.0.1.tgz", - "integrity": "sha512-qbXG3wL5Uh2JB92EKeX2hPtO9c/t75qVxQjVLYuTFfhHifLZzv9CBvLCvoaBhLrAC/xTMVht7DK/NofYK8X4Dg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-github/-/eslint-plugin-github-5.0.2.tgz", + "integrity": "sha512-nMdzWJQ5CimjQDY6SFeJ0KIXuNFf0dgDWEd4eP3UWfuTuP/dXcZJDg7MQRvAFt743T1zUi4+/HdOihfu8xJkLA==", "dev": true, "dependencies": { "@github/browserslist-config": "^1.0.0", - "@typescript-eslint/eslint-plugin": "^7.0.1", - "@typescript-eslint/parser": "^7.0.1", + "@typescript-eslint/eslint-plugin": "^8.0.0", + "@typescript-eslint/parser": "^8.0.0", "aria-query": "^5.3.0", "eslint-config-prettier": ">=8.0.0", "eslint-plugin-escompat": "^3.3.3", @@ -3938,6 +4194,188 @@ "eslint": "^8.0.1" } }, + "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.5.0.tgz", + "integrity": "sha512-lHS5hvz33iUFQKuPFGheAB84LwcJ60G8vKnEhnfcK1l8kGVLro2SFYW6K0/tj8FUhRJ0VHyg1oAfg50QGbPPHw==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.5.0", + "@typescript-eslint/type-utils": "8.5.0", + "@typescript-eslint/utils": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/parser": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.5.0.tgz", + "integrity": "sha512-gF77eNv0Xz2UJg/NbpWJ0kqAm35UMsvZf1GHj8D9MRFTj/V3tAciIWXfmPLsAAF/vUlpWPvUDyH1jjsr0cMVWw==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.5.0", + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/typescript-estree": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.5.0.tgz", + "integrity": "sha512-06JOQ9Qgj33yvBEx6tpC8ecP9o860rsR22hWMEd12WcTRrfaFgHr2RB/CA/B+7BMhHkXT4chg2MyboGdFGawYg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.5.0.tgz", + "integrity": "sha512-N1K8Ix+lUM+cIDhL2uekVn/ZD7TZW+9/rwz8DclQpcQ9rk4sIL5CAlBC0CugWKREmDjBzI/kQqU4wkg46jWLYA==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "8.5.0", + "@typescript-eslint/utils": "8.5.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/types": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.5.0.tgz", + "integrity": "sha512-qjkormnQS5wF9pjSi6q60bKUHH44j2APxfh9TQRXK8wbYVeDYYdYJGIROL87LGZZ2gz3Rbmjc736qyL8deVtdw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.5.0.tgz", + "integrity": "sha512-vEG2Sf9P8BPQ+d0pxdfndw3xIXaoSjliG0/Ejk7UggByZPKXmJmw3GW5jV2gHNQNawBUyfahoSiCFVov0Ruf7Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.5.0.tgz", + "integrity": "sha512-6yyGYVL0e+VzGYp60wvkBHiqDWOpT63pdMV2CVG4LVDd5uR6q1qQN/7LafBZtAtNIn/mqXjsSeS5ggv/P0iECw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.5.0", + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/typescript-estree": "8.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.5.0.tgz", + "integrity": "sha512-yTPqMnbAZJNy2Xq2XU8AdtOW9tJIr+UQb64aXB9f3B1498Zx9JorVgFJcZpEc9UBuCCrdzKID2RGAMkYcDtZOw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.5.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/eslint-plugin-i18n-text": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-i18n-text/-/eslint-plugin-i18n-text-1.0.1.tgz", @@ -3948,26 +4386,27 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz", + "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==", "dev": true, "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", + "eslint-module-utils": "^2.9.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", "semver": "^6.3.1", "tsconfig-paths": "^3.15.0" }, @@ -3978,6 +4417,16 @@ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", @@ -3987,6 +4436,30 @@ "ms": "^2.1.1" } }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/eslint-plugin-import/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -4035,33 +4508,29 @@ "deep-equal": "^2.0.5" } }, - "node_modules/eslint-plugin-mdx": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-3.1.5.tgz", - "integrity": "sha512-lUE7tP7IrIRHU3gTtASDe5u4YM2SvQveYVJfuo82yn3MLh/B/v05FNySURCK4aIxIYF1QYo3IRemQG/lyQzpAg==", + "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "eslint-mdx": "^3.1.5", - "eslint-plugin-markdown": "^3.0.1", - "remark-mdx": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-stringify": "^11.0.0", - "tslib": "^2.6.2", - "unified": "^11.0.4", - "vfile": "^6.0.1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "eslint": ">=8.0.0" + "node": "*" } }, - "node_modules/eslint-plugin-mdx/node_modules/eslint-plugin-markdown": { + "node_modules/eslint-plugin-markdown": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-3.0.1.tgz", "integrity": "sha512-8rqoc148DWdGdmYF6WSQFT3uQ6PO7zXYgeBpHAOAakX/zpq+NvFYbDA/H7PYzHajwtmaOzAwfxyl++x0g1/N9A==", @@ -4076,23 +4545,49 @@ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/eslint-plugin-mdx": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-3.1.5.tgz", + "integrity": "sha512-lUE7tP7IrIRHU3gTtASDe5u4YM2SvQveYVJfuo82yn3MLh/B/v05FNySURCK4aIxIYF1QYo3IRemQG/lyQzpAg==", + "dev": true, + "dependencies": { + "eslint-mdx": "^3.1.5", + "eslint-plugin-markdown": "^3.0.1", + "remark-mdx": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "tslib": "^2.6.2", + "unified": "^11.0.4", + "vfile": "^6.0.1" + }, + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "eslint": ">=8.0.0" + } + }, "node_modules/eslint-plugin-no-only-tests": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-3.1.0.tgz", - "integrity": "sha512-Lf4YW/bL6Un1R6A76pRZyE1dl1vr31G/ev8UzIc/geCgFWyrKil8hVjYqWVKGB/UIGmb6Slzs9T0wNezdSVegw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-3.3.0.tgz", + "integrity": "sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q==", "dev": true, "engines": { "node": ">=5.0.0" } }, "node_modules/eslint-plugin-prettier": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", - "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", "dev": true, "dependencies": { "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.6" + "synckit": "^0.9.1" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -4116,9 +4611,9 @@ } }, "node_modules/eslint-plugin-primer-react": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-primer-react/-/eslint-plugin-primer-react-5.3.0.tgz", - "integrity": "sha512-Nw9pAZww4ZPgzffrvexbNytOkoyKm4RLOmrPio5VEZ5BIFNy+uLyiBE5WGRuig4a0KbbjjOM5haLCvC43daAvw==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-primer-react/-/eslint-plugin-primer-react-5.4.0.tgz", + "integrity": "sha512-t3F8RGOG+88SOZTjC5+ZBDhLIJitlRN4qkdRmwDuaL5mkxIA4LzyhLf4KfM595NwDan8mj37Fjbt3Nj04PxUDQ==", "dev": true, "dependencies": { "@styled-system/props": "^5.1.5", @@ -4133,9 +4628,9 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.34.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.3.tgz", - "integrity": "sha512-aoW4MV891jkUulwDApQbPYTVZmeuSyFrudpbTAQuj5Fv8VL+o6df2xIGpw8B0hPjAaih1/Fb0om9grCdyFYemA==", + "version": "7.34.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.4.tgz", + "integrity": "sha512-Np+jo9bUwJNxCsT12pXtrGhJgT3T44T1sHhn1Ssr42XFn8TES0267wPGo5nNrMHi8qkyimDAX2BUmkf9pSaVzA==", "dev": true, "dependencies": { "array-includes": "^3.1.8", @@ -4146,16 +4641,17 @@ "doctrine": "^2.1.0", "es-iterator-helpers": "^1.0.19", "estraverse": "^5.3.0", + "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.8", "object.fromentries": "^2.0.8", - "object.hasown": "^1.1.4", "object.values": "^1.2.0", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.11" + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" }, "engines": { "node": ">=4" @@ -4176,6 +4672,40 @@ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" } }, + "node_modules/eslint-plugin-react/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/eslint-plugin-react/node_modules/resolve": { "version": "2.0.0-next.5", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", @@ -4385,83 +4915,20 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/eslint/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/eslint/node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "node_modules/eslint/node_modules/find-up": { @@ -4480,15 +4947,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/eslint/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -4516,6 +4974,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/eslint/node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -4546,18 +5016,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -4589,9 +5047,9 @@ } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -4663,6 +5121,50 @@ "node": ">=0.10.0" } }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -4742,9 +5244,9 @@ "dev": true }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -4787,14 +5289,13 @@ "node": ">=8" } }, - "node_modules/find-yarn-workspace-root2": { - "version": "1.2.16", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz", - "integrity": "sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==", + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", "dev": true, "dependencies": { - "micromatch": "^4.0.2", - "pkg-dir": "^4.2.0" + "micromatch": "^4.0.2" } }, "node_modules/flat-cache": { @@ -4827,9 +5328,9 @@ } }, "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "dev": true, "dependencies": { "cross-spawn": "^7.0.0", @@ -4843,9 +5344,9 @@ } }, "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "engines": { "node": ">=14" @@ -4952,6 +5453,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-symbol-description": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", @@ -4970,9 +5483,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.7.5", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz", - "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", "dev": true, "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -4985,6 +5498,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -5013,28 +5527,51 @@ "node": ">=10.13.0" } }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -5097,12 +5634,12 @@ } }, "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/has-property-descriptors": { @@ -5168,14 +5705,16 @@ "node": ">= 0.4" } }, - "node_modules/header-case": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", - "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", + "node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", "dev": true, "dependencies": { - "capital-case": "^1.0.4", - "tslib": "^2.0.3" + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/html-escaper": { @@ -5190,6 +5729,24 @@ "integrity": "sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==", "dev": true }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "dev": true, + "engines": { + "node": ">=10.18" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -5202,10 +5759,30 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "engines": { "node": ">= 4" @@ -5259,6 +5836,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, "dependencies": { "once": "^1.3.0", @@ -5399,6 +5977,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-bun-module": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.2.1.tgz", + "integrity": "sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==", + "dev": true, + "dependencies": { + "semver": "^7.6.3" + } + }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -5412,9 +5999,9 @@ } }, "node_modules/is-core-module": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", - "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, "dependencies": { "hasown": "^2.0.2" @@ -5466,6 +6053,21 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-empty": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-empty/-/is-empty-1.2.0.tgz", @@ -5551,6 +6153,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-negative-zero": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", @@ -5651,6 +6269,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", @@ -5757,6 +6387,18 @@ "node": ">=0.10.0" } }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", @@ -5792,25 +6434,18 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/istanbul-reports": { @@ -5840,16 +6475,13 @@ } }, "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": ">=14" - }, "funding": { "url": "https://github.com/sponsors/isaacs" }, @@ -5882,12 +6514,39 @@ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, + "node_modules/json-parse-even-better-errors": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, + "node_modules/json-stable-stringify": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz", + "integrity": "sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "isarray": "^2.0.5", + "jsonify": "^0.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", @@ -5906,12 +6565,6 @@ "node": ">=6" } }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, "node_modules/jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -5921,6 +6574,15 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -5945,6 +6607,24 @@ "json-buffer": "3.0.1" } }, + "node_modules/klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/language-subtag-registry": { "version": "0.3.23", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", @@ -5976,6 +6656,15 @@ "node": ">= 0.8.0" } }, + "node_modules/lines-and-columns": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", + "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, "node_modules/load-plugin": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/load-plugin/-/load-plugin-6.0.3.tgz", @@ -5990,30 +6679,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/load-yaml-file": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/load-yaml-file/-/load-yaml-file-0.2.0.tgz", - "integrity": "sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.5", - "js-yaml": "^3.13.0", - "pify": "^4.0.1", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/load-yaml-file/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -6099,32 +6764,29 @@ "get-func-name": "^2.0.1" } }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "dependencies": { - "tslib": "^2.0.3" - } + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true }, "node_modules/magic-string": { - "version": "0.30.10", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", - "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", + "version": "0.30.11", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", + "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", "dev": true, "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, "node_modules/magicast": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.4.tgz", - "integrity": "sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", "dev": true, "dependencies": { - "@babel/parser": "^7.24.4", - "@babel/types": "^7.24.0", + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", "source-map-js": "^1.2.0" } }, @@ -6304,9 +6966,9 @@ } }, "node_modules/mdast-util-mdx-jsx": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.2.tgz", - "integrity": "sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz", + "integrity": "sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==", "dev": true, "dependencies": { "@types/estree-jsx": "^1.0.0", @@ -6319,7 +6981,6 @@ "mdast-util-to-markdown": "^2.0.0", "parse-entities": "^4.0.0", "stringify-entities": "^4.0.0", - "unist-util-remove-position": "^5.0.0", "unist-util-stringify-position": "^4.0.0", "vfile-message": "^4.0.0" }, @@ -6504,9 +7165,9 @@ } }, "node_modules/mdast-util-mdx-jsx/node_modules/parse-entities/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", "dev": true }, "node_modules/mdast-util-mdx-jsx/node_modules/unist-util-stringify-position": { @@ -6803,6 +7464,25 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/memfs": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.11.1.tgz", + "integrity": "sha512-LZcMTBAgqUUKNXZagcZxvXXfgF1bHX7Y7nQ0QyEiNbRJgE29GhgPd8Yna1VQcLlPiHt/5RFJMWYN9Uv/VPNvjQ==", + "dev": true, + "dependencies": { + "@jsonjoy.com/json-pack": "^1.0.3", + "@jsonjoy.com/util": "^1.3.0", + "tree-dump": "^1.0.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">= 4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -6899,9 +7579,9 @@ } }, "node_modules/micromark-extension-mdx-jsx": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.0.tgz", - "integrity": "sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.1.tgz", + "integrity": "sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==", "dev": true, "dependencies": { "@types/acorn": "^4.0.0", @@ -6911,6 +7591,7 @@ "micromark-factory-mdx-expression": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "vfile-message": "^4.0.0" @@ -7018,9 +7699,9 @@ } }, "node_modules/micromark-factory-mdx-expression": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.1.tgz", - "integrity": "sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.2.tgz", + "integrity": "sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw==", "dev": true, "funding": [ { @@ -7035,6 +7716,7 @@ "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", @@ -7400,31 +8082,46 @@ ] }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" } }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, "engines": { - "node": "*" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minimist": { + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", @@ -7452,9 +8149,9 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "node_modules/nanoid": { @@ -7481,16 +8178,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", @@ -7512,9 +8199,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "dev": true }, "node_modules/nopt": { @@ -7532,6 +8219,32 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "dev": true, + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/npm-normalize-package-bin": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", @@ -7541,6 +8254,63 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/npm-package-arg": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz", + "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==", + "dev": true, + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz", + "integrity": "sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==", + "dev": true, + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^11.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -7651,23 +8421,6 @@ "node": ">= 0.4" } }, - "node_modules/object.hasown": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", - "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object.values": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", @@ -7694,18 +8447,49 @@ "wrappy": "1" } }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" @@ -7789,15 +8573,11 @@ "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", "dev": true }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } + "node_modules/package-manager-detector": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.0.tgz", + "integrity": "sha512-E385OSk9qDcXhcM9LNSe4sdhx8a9mAPrZ4sMLW+tmxl5ZuGtPUcdFu+MPP2jbgiWAZ6Pfe5soGFMd+0Db5Vrog==", + "dev": true }, "node_modules/parent-module": { "version": "1.0.1", @@ -7829,24 +8609,133 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "node_modules/parse-json": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.1.1.tgz", + "integrity": "sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.21.4", + "error-ex": "^1.3.2", + "json-parse-even-better-errors": "^3.0.0", + "lines-and-columns": "^2.0.3", + "type-fest": "^3.8.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-json/node_modules/type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/patch-package": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.0.tgz", + "integrity": "sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA==", + "dev": true, + "dependencies": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^4.1.2", + "ci-info": "^3.7.0", + "cross-spawn": "^7.0.3", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^9.0.0", + "json-stable-stringify": "^1.0.2", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.6", + "open": "^7.4.2", + "rimraf": "^2.6.3", + "semver": "^7.5.3", + "slash": "^2.0.0", + "tmp": "^0.0.33", + "yaml": "^2.2.2" + }, + "bin": { + "patch-package": "index.js" + }, + "engines": { + "node": ">=14", + "npm": ">5" + } + }, + "node_modules/patch-package/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/path-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", - "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", + "node_modules/patch-package/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/patch-package/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/patch-package/node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/patch-package/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", "dev": true, "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" + "process": "^0.11.1", + "util": "^0.10.3" } }, "node_modules/path-exists": { @@ -7898,15 +8787,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -7916,6 +8796,27 @@ "node": ">=8" } }, + "node_modules/path-unified": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/path-unified/-/path-unified-0.1.0.tgz", + "integrity": "sha512-/Oaz9ZJforrkmFrwkR/AcvjVsCAwGSJHO0X6O6ISj8YeFbATjIEBXLDcZfnK3MO4uvCBrJTdVIxdOc79PMqSdg==", + "dev": true + }, + "node_modules/path/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/path/node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "dependencies": { + "inherits": "2.0.3" + } + }, "node_modules/pathe": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", @@ -7958,25 +8859,13 @@ "node": ">=6" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/playwright": { - "version": "1.45.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.45.1.tgz", - "integrity": "sha512-Hjrgae4kpSQBr98nhCj3IScxVeVUixqj+5oyif8TdIn2opTCPEzqAqNMeK42i3cWDCVu9MI+ZsGWw+gVR4ISBg==", + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.47.0.tgz", + "integrity": "sha512-jOWiRq2pdNAX/mwLiwFYnPHpEZ4rM+fRSQpRHwEwZlP2PUANvL3+aJOF/bvISMhFD30rqMxUB4RJx9aQbfh4Ww==", "dev": true, "dependencies": { - "playwright-core": "1.45.1" + "playwright-core": "1.47.0" }, "bin": { "playwright": "cli.js" @@ -7989,9 +8878,9 @@ } }, "node_modules/playwright-core": { - "version": "1.45.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.45.1.tgz", - "integrity": "sha512-LF4CUUtrUu2TCpDw4mcrAIuYrEjVDfT1cHbJMfwnE2+1b8PZcFzPNgvZCvq2JfQ4aTjRCCHw5EJ2tmr2NSzdPg==", + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.47.0.tgz", + "integrity": "sha512-1DyHT8OqkcfCkYUD9zzUTfg7EfTd+6a8MkD/NWOvjo0u/SCNd5YmY/lJwFvUZOxJbWNds+ei7ic2+R/cRz/PDg==", "dev": true, "bin": { "playwright-core": "cli.js" @@ -8037,103 +8926,27 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/preferred-pm": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/preferred-pm/-/preferred-pm-3.0.3.tgz", - "integrity": "sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==", + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "dependencies": { - "find-up": "^5.0.0", - "find-yarn-workspace-root2": "1.2.16", - "path-exists": "^4.0.0", - "which-pm": "2.0.0" - }, "engines": { - "node": ">=10" + "node": ">= 0.8.0" } }, - "node_modules/preferred-pm/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "bin": { + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/preferred-pm/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/preferred-pm/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/preferred-pm/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", - "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/prettier-linter-helpers": { @@ -8148,39 +8961,41 @@ "node": ">=6.0.0" } }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 0.6.0" } }, - "node_modules/proc-log": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=10" } }, "node_modules/prop-types": { @@ -8194,12 +9009,6 @@ "react-is": "^16.13.1" } }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, "node_modules/pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -8215,6 +9024,21 @@ "node": ">=6" } }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -8236,9 +9060,9 @@ ] }, "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true }, "node_modules/read-package-json-fast": { @@ -8254,15 +9078,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", - "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/read-yaml-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz", @@ -8278,15 +9093,6 @@ "node": ">=6" } }, - "node_modules/read-yaml-file/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -8323,9 +9129,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", "dev": true }, "node_modules/regexp.prototype.flags": { @@ -8538,6 +9344,15 @@ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -8696,9 +9511,9 @@ "dev": true }, "node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -8707,17 +9522,6 @@ "node": ">=10" } }, - "node_modules/sentence-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", - "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" - } - }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -8816,16 +9620,6 @@ "node": ">=8" } }, - "node_modules/snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "dev": true, - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -8899,10 +9693,36 @@ "which": "bin/which" } }, - "node_modules/spawndamnit/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", "dev": true }, "node_modules/sprintf-js": { @@ -8935,6 +9755,15 @@ "node": ">= 0.4" } }, + "node_modules/stream": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/stream/-/stream-0.0.3.tgz", + "integrity": "sha512-aMsbn7VKrl4A2T7QAQQbzgN7NVc70vgF5INQrBXqn4dCXN1zy3L9HGgLO5s7PExmdrzTJ8uR/27aviW8or8/+A==", + "dev": true, + "dependencies": { + "component-emitter": "^2.0.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -8945,17 +9774,17 @@ } }, "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz", + "integrity": "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==", "dev": true, "dependencies": { "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", + "emoji-regex": "^10.2.1", "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=12" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -8983,9 +9812,9 @@ "dev": true }, "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, "engines": { "node": ">=12" @@ -8994,6 +9823,12 @@ "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true + }, "node_modules/string-width/node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", @@ -9045,6 +9880,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "node_modules/string.prototype.trim": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", @@ -9143,241 +9988,109 @@ "node": ">=8" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=4" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strip-literal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.0.tgz", - "integrity": "sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==", + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "dependencies": { - "js-tokens": "^9.0.0" + "engines": { + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/antfu" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strip-literal/node_modules/js-tokens": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.0.tgz", - "integrity": "sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==", - "dev": true - }, "node_modules/style-dictionary": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/style-dictionary/-/style-dictionary-3.9.2.tgz", - "integrity": "sha512-M2pcQ6hyRtqHOh+NyT6T05R3pD/gwNpuhREBKvxC1En0vyywx+9Wy9nXWT1SZ9ePzv1vAo65ItnpA16tT9ZUCg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/style-dictionary/-/style-dictionary-4.1.0.tgz", + "integrity": "sha512-DfY64t/XsL0bycnabIcIna/H1GyjK4sKLui2t0q6flr2uM+VpRNoSNCPOpi5YSouhKEFjoiC6ediyrMzraTz8A==", "dev": true, + "hasInstallScript": true, "dependencies": { - "chalk": "^4.0.0", - "change-case": "^4.1.2", + "@bundled-es-modules/deepmerge": "^4.3.1", + "@bundled-es-modules/glob": "^10.4.2", + "@bundled-es-modules/memfs": "^4.9.4", + "@zip.js/zip.js": "^2.7.44", + "chalk": "^5.3.0", + "change-case": "^5.3.0", "commander": "^8.3.0", - "fs-extra": "^10.0.0", - "glob": "^10.3.10", + "is-plain-obj": "^4.1.0", "json5": "^2.2.2", - "jsonc-parser": "^3.0.0", - "lodash": "^4.17.15", - "tinycolor2": "^1.4.1" + "patch-package": "^8.0.0", + "path-unified": "^0.1.0", + "tinycolor2": "^1.6.0" }, "bin": { - "style-dictionary": "bin/style-dictionary" + "style-dictionary": "bin/style-dictionary.js" }, "engines": { - "node": ">=12.0.0" + "node": ">=18.0.0" } }, - "node_modules/style-dictionary/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/style-dictionary/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/style-dictionary/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/styled-system": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/styled-system/-/styled-system-5.1.5.tgz", + "integrity": "sha512-7VoD0o2R3RKzOzPK0jYrVnS8iJdfkKsQJNiLRDjikOpQVqQHns/DXWaPZOH4tIKkhAT7I6wIsy9FWTWh2X3q+A==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0" + "@styled-system/background": "^5.1.2", + "@styled-system/border": "^5.1.5", + "@styled-system/color": "^5.1.2", + "@styled-system/core": "^5.1.2", + "@styled-system/flexbox": "^5.1.2", + "@styled-system/grid": "^5.1.2", + "@styled-system/layout": "^5.1.2", + "@styled-system/position": "^5.1.2", + "@styled-system/shadow": "^5.1.2", + "@styled-system/space": "^5.1.2", + "@styled-system/typography": "^5.1.2", + "@styled-system/variant": "^5.1.5", + "object-assign": "^4.1.1" } }, - "node_modules/style-dictionary/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/style-dictionary/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/style-dictionary/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/style-dictionary/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/style-dictionary/node_modules/glob": { - "version": "10.3.12", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", - "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.6", - "minimatch": "^9.0.1", - "minipass": "^7.0.4", - "path-scurry": "^1.10.2" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/style-dictionary/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/style-dictionary/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/style-dictionary/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/style-dictionary/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/style-dictionary/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/styled-system": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/styled-system/-/styled-system-5.1.5.tgz", - "integrity": "sha512-7VoD0o2R3RKzOzPK0jYrVnS8iJdfkKsQJNiLRDjikOpQVqQHns/DXWaPZOH4tIKkhAT7I6wIsy9FWTWh2X3q+A==", - "dev": true, - "dependencies": { - "@styled-system/background": "^5.1.2", - "@styled-system/border": "^5.1.5", - "@styled-system/color": "^5.1.2", - "@styled-system/core": "^5.1.2", - "@styled-system/flexbox": "^5.1.2", - "@styled-system/grid": "^5.1.2", - "@styled-system/layout": "^5.1.2", - "@styled-system/position": "^5.1.2", - "@styled-system/shadow": "^5.1.2", - "@styled-system/space": "^5.1.2", - "@styled-system/typography": "^5.1.2", - "@styled-system/variant": "^5.1.5", - "object-assign": "^4.1.1" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/supports-preserve-symlinks-flag": { @@ -9403,9 +10116,9 @@ } }, "node_modules/synckit": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", - "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", + "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", "dev": true, "dependencies": { "@pkgr/core": "^0.1.0", @@ -9439,16 +10152,62 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/test-exclude": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", + "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^10.4.1", + "minimatch": "^9.0.4" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/thingies": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", + "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", + "dev": true, + "engines": { + "node": ">=10.18" + }, + "peerDependencies": { + "tslib": "^2" + } + }, "node_modules/tinybench": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.8.0.tgz", - "integrity": "sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", "dev": true }, "node_modules/tinycolor2": { @@ -9458,18 +10217,27 @@ "dev": true }, "node_modules/tinypool": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.0.tgz", - "integrity": "sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.1.tgz", + "integrity": "sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==", "dev": true, "engines": { "node": "^18.0.0 || >=20.0.0" } }, + "node_modules/tinyrainbow": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/tinyspy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.0.tgz", - "integrity": "sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", "dev": true, "engines": { "node": ">=14.0.0" @@ -9514,6 +10282,22 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, + "node_modules/tree-dump": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz", + "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==", + "dev": true, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, "node_modules/trough": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", @@ -9569,19 +10353,10 @@ "json5": "lib/cli.js" } }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true }, "node_modules/tsutils": { @@ -9606,12 +10381,12 @@ "dev": true }, "node_modules/tsx": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.16.2.tgz", - "integrity": "sha512-C1uWweJDgdtX2x600HjaFaucXTilT7tgUZHbOE4+ypskZ1OP8CRCSDkCxG6Vya9EwaFIVagWwpaVAn5wzypaqQ==", + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.1.tgz", + "integrity": "sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==", "dev": true, "dependencies": { - "esbuild": "~0.21.5", + "esbuild": "~0.23.0", "get-tsconfig": "^4.7.5" }, "bin": { @@ -9751,9 +10526,9 @@ "dev": true }, "node_modules/typescript": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", - "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -9791,9 +10566,9 @@ } }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "dev": true }, "node_modules/unified": { @@ -9848,19 +10623,10 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/unified-engine/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/unified-engine/node_modules/glob": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", - "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", @@ -9873,155 +10639,56 @@ "bin": { "glob": "dist/esm/bin.mjs" }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/unified-engine/node_modules/jackspeak": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", - "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", + "node_modules/unist-util-inspect": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/unist-util-inspect/-/unist-util-inspect-8.1.0.tgz", + "integrity": "sha512-mOlg8Mp33pR0eeFpo5d2902ojqFFOKMMG2hF8bmH7ZlhnmjFgh0NI3/ZDwdaBJNbvrS7LZFVrBVtIE9KZ9s7vQ==", "dev": true, "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" + "@types/unist": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/unified-engine/node_modules/json-parse-even-better-errors": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", - "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/unified-engine/node_modules/lines-and-columns": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", - "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", + "node_modules/unist-util-position-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", + "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/unified-engine/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/unified-engine/node_modules/parse-json": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.1.1.tgz", - "integrity": "sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.21.4", - "error-ex": "^1.3.2", - "json-parse-even-better-errors": "^3.0.0", - "lines-and-columns": "^2.0.3", - "type-fest": "^3.8.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unified-engine/node_modules/type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unist-util-inspect": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/unist-util-inspect/-/unist-util-inspect-8.0.0.tgz", - "integrity": "sha512-/3Wn/wU6/H6UEo4FoYUeo8KUePN8ERiZpQYFWYoihOsr1DoDuv80PeB0hobVZyYSvALa2e556bG1A1/AbwU4yg==", - "dev": true, - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dev": true, - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position-from-estree": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", - "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", - "dev": true, - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", - "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", - "dev": true, - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-visit": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.2" + "@types/unist": "^2.0.2" }, "funding": { "type": "opencollective", @@ -10029,9 +10696,9 @@ } }, "node_modules/unist-util-stringify-position/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", "dev": true }, "node_modules/unist-util-visit": { @@ -10108,31 +10775,45 @@ "browserslist": ">= 4.21.0" } }, - "node_modules/upper-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", - "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "dependencies": { - "tslib": "^2.0.3" + "punycode": "^2.1.0" } }, - "node_modules/upper-case-first": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", - "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", + "node_modules/url": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", + "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", "dev": true, "dependencies": { - "tslib": "^2.0.3" + "punycode": "^1.4.1", + "qs": "^6.12.3" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "node_modules/url/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, "dependencies": { - "punycode": "^2.1.0" + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" } }, "node_modules/util-deprecate": { @@ -10159,32 +10840,32 @@ "node": ">=8" } }, - "node_modules/uvu/node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "engines": { - "node": ">=0.3.1" + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "node_modules/uvu/node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "node_modules/validate-npm-package-name": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", "dev": true, "engines": { - "node": ">=6" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", "dev": true, "dependencies": { "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", "vfile-message": "^4.0.0" }, "funding": { @@ -10239,56 +10920,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/vfile-reporter/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/vfile-reporter/node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", - "dev": true - }, - "node_modules/vfile-reporter/node_modules/string-width": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz", - "integrity": "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^10.2.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/vfile-reporter/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/vfile-reporter/node_modules/supports-color": { "version": "9.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", @@ -10342,19 +10973,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/vfile/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dev": true, - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/vite": { "version": "5.4.6", "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.6.tgz", @@ -10415,15 +11033,15 @@ } }, "node_modules/vite-node": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.0.1.tgz", - "integrity": "sha512-nVd6kyhPAql0s+xIVJzuF+RSRH8ZimNrm6U8ZvTA4MXv8CHI17TFaQwRaFiK75YX6XeFqZD4IoAaAfi9OR1XvQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.0.5.tgz", + "integrity": "sha512-LdsW4pxj0Ot69FAoXZ1yTnA9bjGohr2yNBU7QKRxpz8ITSkhuDl6h3zS/tvgz4qrNjeRnvrWeXQ8ZF7Um4W00Q==", "dev": true, "dependencies": { "cac": "^6.7.14", "debug": "^4.3.5", "pathe": "^1.1.2", - "picocolors": "^1.0.1", + "tinyrainbow": "^1.2.0", "vite": "^5.0.0" }, "bin": { @@ -10436,215 +11054,488 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/vite/node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], "dev": true, - "hasInstallScript": true, "optional": true, "os": [ - "darwin" + "aix" ], "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=12" } }, - "node_modules/vitest": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.0.1.tgz", - "integrity": "sha512-PBPvNXRJiywtI9NmbnEqHIhcXlk8mB0aKf6REQIaYGY4JtWF1Pg8Am+N0vAuxdg/wUSlxPSVJr8QdjwcVxc2Hg==", + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.3.0", - "@vitest/expect": "2.0.1", - "@vitest/runner": "2.0.1", - "@vitest/snapshot": "2.0.1", - "@vitest/spy": "2.0.1", - "@vitest/utils": "2.0.1", - "chai": "^5.1.1", - "debug": "^4.3.5", - "execa": "^8.0.1", - "magic-string": "^0.30.10", - "pathe": "^1.1.2", - "picocolors": "^1.0.1", - "std-env": "^3.7.0", - "tinybench": "^2.8.0", - "tinypool": "^1.0.0", - "vite": "^5.0.0", - "vite-node": "2.0.1", - "why-is-node-running": "^2.2.2" - }, - "bin": { - "vitest": "vitest.mjs" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@edge-runtime/vm": "*", - "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.0.1", - "@vitest/ui": "2.0.1", - "happy-dom": "*", - "jsdom": "*" - }, - "peerDependenciesMeta": { - "@edge-runtime/vm": { - "optional": true - }, - "@types/node": { - "optional": true - }, - "@vitest/browser": { - "optional": true - }, - "@vitest/ui": { - "optional": true - }, - "happy-dom": { - "optional": true - }, - "jsdom": { - "optional": true - } + "node": ">=12" } }, - "node_modules/vitest/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">=12" } }, - "node_modules/vitest/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/vitest/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], "dev": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=16.17.0" + "node": ">=12" } }, - "node_modules/vitest/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/vitest/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], "engines": { "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/vitest/node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "path-key": "^4.0.0" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/vitest/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "node_modules/vite/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" }, "engines": { "node": ">=12" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, - "node_modules/vitest/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "node_modules/vite/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/vitest/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "node_modules/vitest": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.0.5.tgz", + "integrity": "sha512-8GUxONfauuIdeSl5f9GTgVEpg5BTOlplET4WEDaeY2QBiN8wSm68vxN/tb5z405OwppfoCavnwXafiaYBC/xOA==", "dev": true, - "engines": { - "node": ">=14" + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@vitest/expect": "2.0.5", + "@vitest/pretty-format": "^2.0.5", + "@vitest/runner": "2.0.5", + "@vitest/snapshot": "2.0.5", + "@vitest/spy": "2.0.5", + "@vitest/utils": "2.0.5", + "chai": "^5.1.1", + "debug": "^4.3.5", + "execa": "^8.0.1", + "magic-string": "^0.30.10", + "pathe": "^1.1.2", + "std-env": "^3.7.0", + "tinybench": "^2.8.0", + "tinypool": "^1.0.0", + "tinyrainbow": "^1.2.0", + "vite": "^5.0.0", + "vite-node": "2.0.5", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/vitest/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, "engines": { - "node": ">=12" + "node": "^18.0.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "2.0.5", + "@vitest/ui": "2.0.5", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } } }, "node_modules/walk-up-path": { @@ -10701,13 +11592,13 @@ } }, "node_modules/which-builtin-type": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", - "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", + "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", "dev": true, "dependencies": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", "is-date-object": "^1.0.5", "is-finalizationregistry": "^1.0.2", @@ -10716,8 +11607,8 @@ "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -10744,19 +11635,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-pm": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-2.0.0.tgz", - "integrity": "sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==", - "dev": true, - "dependencies": { - "load-yaml-file": "^0.2.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8.15" - } - }, "node_modules/which-typed-array": { "version": "1.1.15", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", @@ -10792,6 +11670,32 @@ "node": ">=8" } }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", @@ -10810,57 +11714,80 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/wrap-ansi-cjs/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/wrap-ansi-cjs/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/wrappy": { @@ -10869,10 +11796,16 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true + }, "node_modules/yaml": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", - "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", + "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", "dev": true, "bin": { "yaml": "bin.mjs" @@ -10903,9 +11836,9 @@ } }, "node_modules/zod-validation-error": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-3.3.0.tgz", - "integrity": "sha512-Syib9oumw1NTqEv4LT0e6U83Td9aVRk9iTXPUQr1otyV1PuXQKOvOwhMNqZIq5hluzHP2pMgnOmHEo7kPdI2mw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-3.3.1.tgz", + "integrity": "sha512-uFzCZz7FQis256dqw4AhPQgD6f3pzNca/Zh62RNELavlumQB3nDIUFbF5JQfFLcMbO1s02Q7Xg/gpcOBlEnYZA==", "dev": true, "engines": { "node": ">=18.0.0" diff --git a/package.json b/package.json index c79db8387..e10c92a63 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "@primer/primitives", "version": "9.1.2", "description": "Typography, spacing, and color primitives for Primer design system", + "type": "module", "files": [ "dist", "src/tokens" @@ -22,11 +23,11 @@ }, "homepage": "https://github.com/primer/primitives#readme", "scripts": { - "build": "npm run build:tokens && npm run build:fallbacks && npm run build:figma && npm run build:config", + "build": "npm run clean && npm run build:tokens && npm run build:fallbacks && npm run build:figma", "build:tokens": "tsx ./scripts/buildTokens.ts", "build:fallbacks": "tsx ./scripts/buildFallbacks.ts", "build:figma": "tsx scripts/buildFigma.ts", - "build:config": "tsc -p buildConfig.tsconfig.jsonc", + "clean": "rm -rf dist", "tokenJson:check": "tsx scripts/diffThemes.ts && tsx scripts/diffTokenProps.ts", "contrast:check": "tsx scripts/color-contrast.ts", "format": "prettier --write '**/*.{js,jsx,ts,tsx,md,mdx,css}'", @@ -53,11 +54,11 @@ "@changesets/changelog-github": "^0.5.0", "@changesets/cli": "^2.27.7", "@github/prettier-config": "^0.0.6", - "@playwright/test": "^1.45.1", - "@types/node": "^20.14.9", + "@playwright/test": "^1.45.2", + "@types/node": "^20.14.11", "@typescript-eslint/eslint-plugin": "^7.15.0", "@typescript-eslint/parser": "^7.15.0", - "@vitest/coverage-v8": "^2.0.1", + "@vitest/coverage-v8": "^2.0.3", "color-blend": "^4.0.0", "color2k": "^2.0.3", "console-table-printer": "^2.12.1", @@ -73,11 +74,14 @@ "eslint-plugin-storybook": "^0.8.0", "json5": "^2.2.1", "markdown-table-ts": "^1.0.3", - "style-dictionary": "^3.9.2", - "tsx": "^4.16.2", + "tsx": "^4.19.0", "typescript": "5.5", - "vitest": "^2.0.1", + "vitest": "^2.0.3", "zod": "3.23", - "zod-validation-error": "3.3" + "zod-validation-error": "3.3", + "style-dictionary": "^4.0.1" + }, + "peerDependencies": { + "style-dictionary": "^4.0.1" } } diff --git a/playwright.config.ts b/playwright.config.ts index 835e39cb5..31b723500 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -1,6 +1,10 @@ import {defineConfig} from '@playwright/test' // eslint-disable-next-line import/no-nodejs-modules import path from 'node:path' +import {fileURLToPath} from 'url' + +const __filename = fileURLToPath(import.meta.url) // get the resolved path to the file +const __dirname = path.dirname(__filename) // get the name of the directory export default defineConfig({ testDir: 'e2e', diff --git a/scripts/buildFigma.ts b/scripts/buildFigma.ts index e5bef1577..802eee747 100644 --- a/scripts/buildFigma.ts +++ b/scripts/buildFigma.ts @@ -1,10 +1,10 @@ import fs from 'fs' -import {PrimerStyleDictionary} from '../src/PrimerStyleDictionary' -import {themes} from './themes.config' -import {figma} from '../src/platforms' -import type {ConfigGeneratorOptions} from '../src/types/StyleDictionaryConfigGenerator' +import {PrimerStyleDictionary} from '../src/PrimerStyleDictionary.js' +import {themes} from './themes.config.js' +import {figma} from '../src/platforms/index.js' +import type {ConfigGeneratorOptions} from '../src/types/StyleDictionaryConfigGenerator.js' -const buildFigma = (buildOptions: ConfigGeneratorOptions): void => { +const buildFigma = async (buildOptions: ConfigGeneratorOptions): Promise => { /** ----------------------------------- * Colors * ----------------------------------- */ @@ -33,17 +33,19 @@ const buildFigma = (buildOptions: ConfigGeneratorOptions): void => { ] for (const {name, source} of baseScales) { - PrimerStyleDictionary.extend({ + const extended = await PrimerStyleDictionary.extend({ source, platforms: { figma: figma(`figma/scales/${name}.json`, buildOptions.prefix, buildOptions.buildPath), }, - }).buildAllPlatforms() + }) + // build + await extended.buildAllPlatforms() } // for (const {filename, source, include} of themes) { // build functional scales - PrimerStyleDictionary.extend({ + const extended = await PrimerStyleDictionary.extend({ source, include, platforms: { @@ -51,7 +53,9 @@ const buildFigma = (buildOptions: ConfigGeneratorOptions): void => { mode: filename.replaceAll('-', ' '), }), }, - }).buildAllPlatforms() + }) + + await extended.buildAllPlatforms() } /** ----------------------------------- * Size tokens @@ -65,25 +69,29 @@ const buildFigma = (buildOptions: ConfigGeneratorOptions): void => { // 'src/tokens/functional/size/size-coarse.json', ] // - PrimerStyleDictionary.extend({ + const sizeExtended = await PrimerStyleDictionary.extend({ source: sizeFiles, include: sizeFiles, platforms: { figma: figma(`figma/dimension/dimension.json`, buildOptions.prefix, buildOptions.buildPath), }, - }).buildAllPlatforms() + }) + + await sizeExtended.buildAllPlatforms() /** ----------------------------------- * Typography * ----------------------------------- */ // - PrimerStyleDictionary.extend({ + const typeExtended = await PrimerStyleDictionary.extend({ source: ['src/tokens/base/typography/typography.json', 'src/tokens/functional/typography/typography.json'], include: [], platforms: { figma: figma(`figma/typography/typography.json`, buildOptions.prefix, buildOptions.buildPath), }, - }).buildAllPlatforms() + }) + + await typeExtended.buildAllPlatforms() /** ----------------------------------- * Shadow tokens @@ -198,13 +206,15 @@ const buildFigma = (buildOptions: ConfigGeneratorOptions): void => { ] // for (const {name, source, include, mode} of shadowFiles) { - PrimerStyleDictionary.extend({ + const extended = await PrimerStyleDictionary.extend({ source, include, platforms: { figma: figma(`figma/shadows/${name}.json`, buildOptions.prefix, buildOptions.buildPath, {mode}), }, - }).buildAllPlatforms() + }) + + await extended.buildAllPlatforms() } /** ----------------------------------- * Create list of files @@ -272,7 +282,7 @@ const buildFigma = (buildOptions: ConfigGeneratorOptions): void => { } try { - buildFigma({ + await buildFigma({ buildPath: 'dist/', }) } catch (e) { diff --git a/scripts/buildTokens.ts b/scripts/buildTokens.ts index 4eb0cc824..0fbc45149 100644 --- a/scripts/buildTokens.ts +++ b/scripts/buildTokens.ts @@ -1,11 +1,14 @@ -import type StyleDictionary from 'style-dictionary' -import {PrimerStyleDictionary} from '../src/PrimerStyleDictionary' -import {copyFromDir} from '../src/utilities' -import {deprecatedJson, css, docJson, fallbacks, styleLint} from '../src/platforms' -import type {ConfigGeneratorOptions, StyleDictionaryConfigGenerator} from '../src/types/StyleDictionaryConfigGenerator' -import type {TokenBuildInput} from '../src/types/TokenBuildInput' +import type {Config} from 'style-dictionary/types' +import {PrimerStyleDictionary} from '../src/PrimerStyleDictionary.js' +import {copyFromDir} from '../src/utilities/index.js' +import {deprecatedJson, css, docJson, fallbacks, styleLint} from '../src/platforms/index.js' +import type { + ConfigGeneratorOptions, + StyleDictionaryConfigGenerator, +} from '../src/types/StyleDictionaryConfigGenerator.js' +import type {TokenBuildInput} from '../src/types/TokenBuildInput.js' import glob from 'fast-glob' -import {themes} from './themes.config' +import {themes} from './themes.config.js' import fs from 'fs' /** @@ -22,32 +25,42 @@ const getStyleDictionaryConfig: StyleDictionaryConfigGenerator = ( include, options, platforms = {}, -): StyleDictionary.Config => ({ +): Config => ({ source, // build the special formats include, - platforms: { - css: css(`css/${filename}.css`, options.prefix, options.buildPath, {themed: options.themed}), - docJson: docJson(`docs/${filename}.json`, options.prefix, options.buildPath), - styleLint: styleLint(`styleLint/${filename}.json`, options.prefix, options.buildPath), - fallbacks: fallbacks(`fallbacks/${filename}.json`, options.prefix, options.buildPath), - ...platforms, + log: { + warnings: 'warn', // 'warn' | 'error' | 'disabled' + verbosity: 'verbose', // 'default' | 'silent' | 'verbose' + errors: { + brokenReferences: 'throw', // 'throw' | 'console' + }, }, + platforms: Object.fromEntries( + Object.entries({ + css: css(`css/${filename}.css`, options.prefix, options.buildPath, {themed: options.themed}), + docJson: docJson(`docs/${filename}.json`, options.prefix, options.buildPath), + styleLint: styleLint(`styleLint/${filename}.json`, options.prefix, options.buildPath), + fallbacks: fallbacks(`fallbacks/${filename}.json`, options.prefix, options.buildPath), + ...platforms, + }).filter((entry: [string, unknown]) => entry[1] !== undefined), + ), }) -export const buildDesignTokens = (buildOptions: ConfigGeneratorOptions): void => { +export const buildDesignTokens = async (buildOptions: ConfigGeneratorOptions): Promise => { /** ----------------------------------- * Internal Colors * ----------------------------------- */ try { for (const {filename, source, include} of themes) { // build functional scales - PrimerStyleDictionary.extend({ + const extendedSD = await PrimerStyleDictionary.extend({ source: [...source, ...include], // build the special formats include, platforms: { css: css(`internalCss/${filename}.css`, buildOptions.prefix, buildOptions.buildPath, {themed: true}), }, - }).buildAllPlatforms() + }) + await extendedSD.buildAllPlatforms() } } catch (e) { // eslint-disable-next-line no-console @@ -60,7 +73,7 @@ export const buildDesignTokens = (buildOptions: ConfigGeneratorOptions): void => try { for (const {filename, source, include} of themes) { // build functional scales - PrimerStyleDictionary.extend( + const extendedSD = await PrimerStyleDictionary.extend( getStyleDictionaryConfig( `functional/themes/${filename}`, source, @@ -69,7 +82,8 @@ export const buildDesignTokens = (buildOptions: ConfigGeneratorOptions): void => // disable fallbacks for themes {fallbacks: undefined}, ), - ).buildAllPlatforms() + ) + await extendedSD.buildAllPlatforms() } } catch (e) { // eslint-disable-next-line no-console @@ -83,23 +97,25 @@ export const buildDesignTokens = (buildOptions: ConfigGeneratorOptions): void => const sizeFiles = glob.sync('src/tokens/functional/size/*') // for (const file of sizeFiles) { - PrimerStyleDictionary.extend( + const extendedSD = await PrimerStyleDictionary.extend( getStyleDictionaryConfig( `functional/size/${file.replace('src/tokens/functional/size/', '').replace('.json', '')}`, [file], ['src/tokens/base/size/size.json', ...sizeFiles], buildOptions, ), - ).buildAllPlatforms() + ) + await extendedSD.buildAllPlatforms() } // build base scales - PrimerStyleDictionary.extend( + const SdBaseSize = await PrimerStyleDictionary.extend( // using includes as source getStyleDictionaryConfig(`base/size/size`, ['src/tokens/base/size/size.json'], [], { buildPath: buildOptions.buildPath, prefix: undefined, }), - ).buildAllPlatforms() + ) + await SdBaseSize.buildAllPlatforms() } catch (e) { // eslint-disable-next-line no-console console.error('🛑 Error trying to build size tokens for code output:', e) @@ -108,7 +124,7 @@ export const buildDesignTokens = (buildOptions: ConfigGeneratorOptions): void => * Typography tokens * ----------------------------------- */ try { - PrimerStyleDictionary.extend( + const extendedSD = await PrimerStyleDictionary.extend( getStyleDictionaryConfig( `functional/typography/typography`, [`src/tokens/functional/typography/*.json`], @@ -122,11 +138,13 @@ export const buildDesignTokens = (buildOptions: ConfigGeneratorOptions): void => }), }, ), - ).buildAllPlatforms() + ) + await extendedSD.buildAllPlatforms() - PrimerStyleDictionary.extend( + const SdTypo = await PrimerStyleDictionary.extend( getStyleDictionaryConfig(`base/typography/typography`, [`src/tokens/base/typography/*.json`], [], buildOptions), - ).buildAllPlatforms() + ) + await SdTypo.buildAllPlatforms() } catch (e) { // eslint-disable-next-line no-console console.error('🛑 Error trying to build typography tokens for code output:', e) @@ -136,7 +154,7 @@ export const buildDesignTokens = (buildOptions: ConfigGeneratorOptions): void => * Motion tokens * ----------------------------------- */ try { - PrimerStyleDictionary.extend( + const extendedSD = await PrimerStyleDictionary.extend( getStyleDictionaryConfig( `functional/motion/motion`, [`src/tokens/functional/motion/*.json5`], @@ -150,11 +168,13 @@ export const buildDesignTokens = (buildOptions: ConfigGeneratorOptions): void => }), }, ), - ).buildAllPlatforms() + ) + await extendedSD.buildAllPlatforms() - PrimerStyleDictionary.extend( + const SdMotion = await PrimerStyleDictionary.extend( getStyleDictionaryConfig(`base/motion/motion`, [`src/tokens/base/motion/*.json5`], [], buildOptions), - ).buildAllPlatforms() + ) + await SdMotion.buildAllPlatforms() } catch (e) { // eslint-disable-next-line no-console console.error('🛑 Error trying to build motion tokens for code output:', e) @@ -197,13 +217,14 @@ export const buildDesignTokens = (buildOptions: ConfigGeneratorOptions): void => // try { for (const {filename, source, include} of deprecatedBuilds) { - PrimerStyleDictionary.extend({ + const extendedSD = await PrimerStyleDictionary.extend({ source, include, platforms: { deprecated: deprecatedJson(`deprecated/${filename}.json`, buildOptions.prefix, buildOptions.buildPath), }, - }).buildAllPlatforms() + }) + await extendedSD.buildAllPlatforms() } } catch (e) { // eslint-disable-next-line no-console @@ -247,6 +268,6 @@ export const buildDesignTokens = (buildOptions: ConfigGeneratorOptions): void => * Run build script * ----------------------------------- */ // build to dist -buildDesignTokens({ +await buildDesignTokens({ buildPath: 'dist/', }) diff --git a/scripts/color-contrast.ts b/scripts/color-contrast.ts index 45534dc74..cfacc1699 100644 --- a/scripts/color-contrast.ts +++ b/scripts/color-contrast.ts @@ -1,10 +1,10 @@ -import type {ContrastRequirement, ContrastRequirements, ThemeName} from './color-contrast.config' -import {contrastRequirements, bgColors} from './color-contrast.config' +import type {ContrastRequirement, ContrastRequirements, ThemeName} from './color-contrast.config.js' +import {contrastRequirements, bgColors} from './color-contrast.config.js' import {writeFile} from 'fs' import {readFile} from 'fs/promises' import {normal} from 'color-blend' import {getContrast, parseToRgba, rgba} from 'color2k' -import {makeConsoleTable, makeMarkdownTable} from './utilities/makeTable' +import {makeConsoleTable, makeMarkdownTable} from './utilities/makeTable.js' /** * Type definitions */ diff --git a/scripts/diffThemes.test.ts b/scripts/diffThemes.test.ts index aa879e69c..ad31d9d86 100644 --- a/scripts/diffThemes.test.ts +++ b/scripts/diffThemes.test.ts @@ -1,4 +1,4 @@ -import {diffThemes} from './diffThemes' +import {diffThemes} from './diffThemes.js' describe('diffThemes', () => { const themesArray: [string, string[]][] = [ diff --git a/scripts/diffThemes.ts b/scripts/diffThemes.ts index d096a7a11..5e3ffcd7c 100644 --- a/scripts/diffThemes.ts +++ b/scripts/diffThemes.ts @@ -1,29 +1,36 @@ -import {PrimerStyleDictionary} from '../src/PrimerStyleDictionary' -// @ts-expect-error: no types exists for style-dictionary createDictionary -import createDictionary from 'style-dictionary/lib/utils/createDictionary' -import {themes as themesConfigArray} from './themes.config' -import type StyleDictionary from 'style-dictionary' +import {PrimerStyleDictionary} from '../src/PrimerStyleDictionary.js' +import {flattenTokens} from 'style-dictionary/utils' +import {themes as themesConfigArray} from './themes.config.js' +import type {Dictionary} from 'style-dictionary/types' -const tokenNameArray = ({dictionary}: {dictionary: StyleDictionary.Dictionary}) => +const tokenNameArray = ({dictionary}: {dictionary: Dictionary}) => dictionary.allTokens.map(({name}: {name: string}) => name) -const themesArray = themesConfigArray.map(({filename, source, include}): [string, string[]] => { - const sd = PrimerStyleDictionary.extend({ - source, - include, - platforms: { - json: { - transforms: ['name/pathToDotNotation'], +const themesArray = await Promise.all( + themesConfigArray.map(async ({filename, source, include}): Promise<[string, string[]]> => { + const sd = await PrimerStyleDictionary.extend({ + source, + include, + platforms: { + json: { + transforms: ['name/pathToDotNotation'], + }, }, - }, - }) - return [ - filename, - tokenNameArray({ - dictionary: createDictionary({properties: sd.exportPlatform('json')}), - }), - ] -}) + }) + + const tokens = await sd.exportPlatform('json') + + return [ + filename, + tokenNameArray({ + dictionary: { + tokens, + allTokens: await flattenTokens(tokens), + }, + }), + ] + }), +) /** * diff --git a/scripts/diffTokenProps.ts b/scripts/diffTokenProps.ts index 305658392..caae734a5 100644 --- a/scripts/diffTokenProps.ts +++ b/scripts/diffTokenProps.ts @@ -1,6 +1,6 @@ -import {parse as json5Parse} from 'json5' +import JSON5 from 'json5' import fs from 'fs' -import {flattenObject} from './utilities/flattenObject' +import {flattenObject} from './utilities/flattenObject.js' type DiffItem = { mainThemeName: string @@ -20,7 +20,7 @@ const diffProps = (diffArray: DiffItem[], propsToCheck = ['mix', 'alpha']) => { // add files from mainFiles for (const filePath of mainFiles) { const file = fs.readFileSync(filePath, 'utf8') - mainTheme = {...mainTheme, ...flattenObject(json5Parse(file), undefined, undefined, isToken)} + mainTheme = {...mainTheme, ...flattenObject(JSON5.parse(file), undefined, undefined, isToken)} } // add files from mainThemeDir for (const filePath of fs.readdirSync(mainThemeDir)) { @@ -29,7 +29,7 @@ const diffProps = (diffArray: DiffItem[], propsToCheck = ['mix', 'alpha']) => { } const file = fs.readFileSync(`${mainThemeDir}/${filePath}`, 'utf8') - mainTheme = {...mainTheme, ...flattenObject(json5Parse(file), undefined, undefined, isToken)} + mainTheme = {...mainTheme, ...flattenObject(JSON5.parse(file), undefined, undefined, isToken)} } for (const filePath of fs.readdirSync(overridesDir)) { @@ -38,7 +38,7 @@ const diffProps = (diffArray: DiffItem[], propsToCheck = ['mix', 'alpha']) => { } const fileDiff = [] const file = fs.readFileSync(`${overridesDir}/${filePath}`, 'utf8') - const tokens = flattenObject(json5Parse(file), undefined, undefined, isToken) + const tokens = flattenObject(JSON5.parse(file), undefined, undefined, isToken) for (const [name, value] of Object.entries(tokens)) { if (!mainTheme.hasOwnProperty(name)) { diff --git a/scripts/themes.config.ts b/scripts/themes.config.ts index 4c8327ea9..af821387c 100644 --- a/scripts/themes.config.ts +++ b/scripts/themes.config.ts @@ -1,4 +1,4 @@ -import type {TokenBuildInput} from '../src/types/TokenBuildInput' +import type {TokenBuildInput} from '../src/types/TokenBuildInput.js' export const themes: TokenBuildInput[] = [ { diff --git a/scripts/utilities/flattenObject.test.ts b/scripts/utilities/flattenObject.test.ts index 0edfc3c70..8af462b40 100644 --- a/scripts/utilities/flattenObject.test.ts +++ b/scripts/utilities/flattenObject.test.ts @@ -1,4 +1,4 @@ -import {flattenObject} from './flattenObject' +import {flattenObject} from './flattenObject.js' describe('Utilities: flattenObject', () => { it('flattens an object with dot separator by default', () => { diff --git a/scripts/validateTokenJson.ts b/scripts/validateTokenJson.ts index 5d42cf367..e9a45b51e 100644 --- a/scripts/validateTokenJson.ts +++ b/scripts/validateTokenJson.ts @@ -1,10 +1,10 @@ import fs from 'fs' import json5 from 'json5' -import {designToken} from '../src/schemas/designToken' -import {getFlag} from '../src/utilities/getFlag' -import {validateType} from '../src/schemas/validTokenType' -import {walkDir} from './utilities/walkDir' -import {validateTokenWithSchema, type validationErrors} from './utilities/validateTokenWithSchema' +import {designToken} from '../src/schemas/designToken.js' +import {getFlag} from '../src/utilities/index.js' +import {validateType} from '../src/schemas/validTokenType.js' +import {walkDir} from './utilities/walkDir.js' +import {validateTokenWithSchema, type validationErrors} from './utilities/validateTokenWithSchema.js' export const validateTokens = (tokenDir: string) => { const tokenFiles = walkDir(tokenDir, ['removed', 'fallback']) diff --git a/src/PrimerStyleDictionary.ts b/src/PrimerStyleDictionary.ts index ae542ddf7..0a096f17b 100644 --- a/src/PrimerStyleDictionary.ts +++ b/src/PrimerStyleDictionary.ts @@ -1,5 +1,4 @@ import StyleDictionary from 'style-dictionary' -import {w3cJsonParser} from './parsers' import { borderToCss, colorToRgbAlpha, @@ -25,7 +24,7 @@ import { dimensionToRemPxArray, floatToPixel, floatToPixelUnitless, -} from './transformers' +} from './transformers/index.js' import { javascriptCommonJs, javascriptEsm, @@ -36,196 +35,164 @@ import { jsonPostCssFallback, cssAdvanced, jsonFigma, -} from './formats' +} from './formats/index.js' /** - * Parsers - * + * @name {@link PrimerStyleDictionary} + * @description Returns style dictionary object with primer preset that includes parsers, formats and transformers + * @formats [javascript/esm](https://github.com/primer/primitives/blob/main/config/formats/javascript-esm.ts), [javascript/commonJs](https://github.com/primer/primitives/blob/main/config/formats/javascript-commonJs.ts), [typescript/export-definition](https://github.com/primer/primitives/blob/main/config/formats/typescript-export-defition.ts) + * @transformers [color/rgbAlpha](https://github.com/primer/primitives/blob/main/config/tranformers/color-to-rgb-alpha.ts), [color/hexAlpha](https://github.com/primer/primitives/blob/main/config/tranformers/color-to-hex-alpha.ts), [color/hex](https://github.com/primer/primitives/blob/main/config/tranformers/color-to-hex6.ts), [json/deprecated](https://github.com/primer/primitives/blob/main/config/tranformers/json-deprecated.ts), [name/pathToDotNotation](https://github.com/primer/primitives/blob/main/config/tranformers/name-path-to-dot-notation.ts) */ -StyleDictionary.registerParser(w3cJsonParser) +export const PrimerStyleDictionary: StyleDictionary = new StyleDictionary() /** * Formats * */ -StyleDictionary.registerFormat({ +PrimerStyleDictionary.registerFormat({ name: 'css/advanced', - formatter: cssAdvanced, + format: cssAdvanced, }) -StyleDictionary.registerFormat({ +PrimerStyleDictionary.registerFormat({ name: 'css/customMedia', - formatter: cssCustomMedia, + format: cssCustomMedia, }) -StyleDictionary.registerFormat({ +PrimerStyleDictionary.registerFormat({ name: 'javascript/esm', - formatter: javascriptEsm, + format: javascriptEsm, }) -StyleDictionary.registerFormat({ +PrimerStyleDictionary.registerFormat({ name: 'javascript/commonJs', - formatter: javascriptCommonJs, + format: javascriptCommonJs, }) -StyleDictionary.registerFormat({ +PrimerStyleDictionary.registerFormat({ name: 'typescript/export-definition', - formatter: typescriptExportDefinition, + format: typescriptExportDefinition, }) -StyleDictionary.registerFormat({ +PrimerStyleDictionary.registerFormat({ name: 'json/nested-prefixed', - formatter: jsonNestedPrefixed, + format: jsonNestedPrefixed, }) -StyleDictionary.registerFormat({ +PrimerStyleDictionary.registerFormat({ name: 'json/one-dimensional', - formatter: jsonOneDimensional, + format: jsonOneDimensional, }) -StyleDictionary.registerFormat({ +PrimerStyleDictionary.registerFormat({ name: 'json/postCss-fallback', - formatter: jsonPostCssFallback, + format: jsonPostCssFallback, }) -StyleDictionary.registerFormat({ +PrimerStyleDictionary.registerFormat({ name: 'json/figma', - formatter: jsonFigma, + format: jsonFigma, }) /** * Transformers * */ -StyleDictionary.registerTransform({ - name: 'color/rgbAlpha', +PrimerStyleDictionary.registerTransform({ ...colorToRgbAlpha, }) -StyleDictionary.registerTransform({ - name: 'color/rgbaFloat', +PrimerStyleDictionary.registerTransform({ ...colorToRgbaFloat, }) -StyleDictionary.registerTransform({ - name: 'color/hexMix', +PrimerStyleDictionary.registerTransform({ ...colorToHexMix, }) -StyleDictionary.registerTransform({ - name: 'color/hex', +PrimerStyleDictionary.registerTransform({ ...colorToHex, }) -StyleDictionary.registerTransform({ - name: 'float/pixel', +PrimerStyleDictionary.registerTransform({ ...floatToPixel, }) -StyleDictionary.registerTransform({ - name: 'float/pixelUnitless', +PrimerStyleDictionary.registerTransform({ ...floatToPixelUnitless, }) -StyleDictionary.registerTransform({ - name: 'dimension/rem', +PrimerStyleDictionary.registerTransform({ ...dimensionToRem, }) -StyleDictionary.registerTransform({ - name: 'dimension/remPxArray', +PrimerStyleDictionary.registerTransform({ ...dimensionToRemPxArray, }) -StyleDictionary.registerTransform({ - name: 'dimension/pixelUnitless', +PrimerStyleDictionary.registerTransform({ ...dimensionToPixelUnitless, }) -StyleDictionary.registerTransform({ - name: 'duration/css', +PrimerStyleDictionary.registerTransform({ ...durationToCss, }) -StyleDictionary.registerTransform({ - name: 'figma/attributes', +PrimerStyleDictionary.registerTransform({ ...figmaAttributes, }) -StyleDictionary.registerTransform({ - name: 'json/deprecated', +PrimerStyleDictionary.registerTransform({ ...jsonDeprecated, }) -StyleDictionary.registerTransform({ - name: 'name/pathToCamelCase', +PrimerStyleDictionary.registerTransform({ ...namePathToCamelCase, }) -StyleDictionary.registerTransform({ - name: 'name/pathToPascalCase', +PrimerStyleDictionary.registerTransform({ ...namePathToPascalCase, }) -StyleDictionary.registerTransform({ - name: 'name/pathToDotNotation', +PrimerStyleDictionary.registerTransform({ ...namePathToDotNotation, }) -StyleDictionary.registerTransform({ - name: 'name/pathToFigma', +PrimerStyleDictionary.registerTransform({ ...namePathToFigma, }) -StyleDictionary.registerTransform({ - name: 'name/pathToCamelCase', +PrimerStyleDictionary.registerTransform({ ...namePathToCamelCase, }) -StyleDictionary.registerTransform({ - name: 'name/pathToKebabCase', +PrimerStyleDictionary.registerTransform({ ...namePathToKebabCase, }) -StyleDictionary.registerTransform({ - name: 'name/pathToSlashNotation', +PrimerStyleDictionary.registerTransform({ ...namePathToSlashNotation, }) -StyleDictionary.registerTransform({ - name: 'shadow/css', +PrimerStyleDictionary.registerTransform({ ...shadowToCss, }) -StyleDictionary.registerTransform({ - name: 'border/css', +PrimerStyleDictionary.registerTransform({ ...borderToCss, }) -StyleDictionary.registerTransform({ - name: 'typography/css', +PrimerStyleDictionary.registerTransform({ ...typographyToCss, }) -StyleDictionary.registerTransform({ - name: 'fontWeight/number', +PrimerStyleDictionary.registerTransform({ ...fontWeightToNumber, }) -StyleDictionary.registerTransform({ - name: 'fontFamily/css', +PrimerStyleDictionary.registerTransform({ ...fontFamilyToCss, }) -StyleDictionary.registerTransform({ - name: 'fontFamily/figma', +PrimerStyleDictionary.registerTransform({ ...fontFamilyToFigma, }) - -/** - * @name {@link PrimerStyleDictionary} - * @description Returns style dictionary object with primer preset that includes parsers, formats and transformers - * @parsers [w3cJsonParser](https://github.com/primer/primitives/blob/main/config//parsers/w3c-json-parser.ts) - * @formats [javascript/esm](https://github.com/primer/primitives/blob/main/config/formats/javascript-esm.ts), [javascript/commonJs](https://github.com/primer/primitives/blob/main/config/formats/javascript-commonJs.ts), [typescript/export-definition](https://github.com/primer/primitives/blob/main/config/formats/typescript-export-defition.ts) - * @transformers [color/rgbAlpha](https://github.com/primer/primitives/blob/main/config/tranformers/color-to-rgb-alpha.ts), [color/hexAlpha](https://github.com/primer/primitives/blob/main/config/tranformers/color-to-hex-alpha.ts), [color/hex](https://github.com/primer/primitives/blob/main/config/tranformers/color-to-hex6.ts), [json/deprecated](https://github.com/primer/primitives/blob/main/config/tranformers/json-deprecated.ts), [name/pathToDotNotation](https://github.com/primer/primitives/blob/main/config/tranformers/name-path-to-dot-notation.ts) - */ -export const PrimerStyleDictionary: StyleDictionary.Core = StyleDictionary diff --git a/src/filters/index.ts b/src/filters/index.ts index 3b7f573c9..186fd95b9 100644 --- a/src/filters/index.ts +++ b/src/filters/index.ts @@ -1,13 +1,14 @@ -export {isBorder} from './isBorder' -export {isColor} from './isColor' -export {isColorWithAlpha} from './isColorWithAlpha' -export {isColorWithMix} from './isColorWithMix' -export {isDimension} from './isDimension' -export {isDeprecated} from './isDeprecated' -export {isFromFile} from './isFromFile' -export {isFontFamily} from './isFontFamily' -export {isFontWeight} from './isFontWeight' -export {isNumber} from './isNumber' -export {isShadow} from './isShadow' -export {isSource} from './isSource' -export {isTypography} from './isTypography' +export {isBorder} from './isBorder.js' +export {isColor} from './isColor.js' +export {isColorWithAlpha} from './isColorWithAlpha.js' +export {isColorWithMix} from './isColorWithMix.js' +export {isDimension} from './isDimension.js' +export {isDeprecated} from './isDeprecated.js' +export {isDuration} from './isDuration.js' +export {isFromFile} from './isFromFile.js' +export {isFontFamily} from './isFontFamily.js' +export {isFontWeight} from './isFontWeight.js' +export {isNumber} from './isNumber.js' +export {isShadow} from './isShadow.js' +export {isSource} from './isSource.js' +export {isTypography} from './isTypography.js' diff --git a/src/filters/isBorder.test.ts b/src/filters/isBorder.test.ts index 6b4f0120d..5323180b6 100644 --- a/src/filters/isBorder.test.ts +++ b/src/filters/isBorder.test.ts @@ -1,5 +1,5 @@ -import {getMockToken} from '../test-utilities' -import {isBorder} from './isBorder' +import {getMockToken} from '../test-utilities/index.js' +import {isBorder} from './isBorder.js' describe('Filter: isBorder', () => { it('returns true if $type property is `border`', () => { diff --git a/src/filters/isBorder.ts b/src/filters/isBorder.ts index 72d03bf95..219e2a1fa 100644 --- a/src/filters/isBorder.ts +++ b/src/filters/isBorder.ts @@ -1,10 +1,10 @@ -import type StyleDictionary from 'style-dictionary' +import type {TransformedToken} from 'style-dictionary/types' /** * @description Checks if token is of $type `border` - * @param arguments [StyleDictionary.TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) + * @param arguments [TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) * @returns boolean */ -export const isBorder = (token: StyleDictionary.TransformedToken): boolean => { +export const isBorder = (token: TransformedToken): boolean => { return token.$type === 'border' } diff --git a/src/filters/isColor.test.ts b/src/filters/isColor.test.ts index 5ade55d88..b973fda97 100644 --- a/src/filters/isColor.test.ts +++ b/src/filters/isColor.test.ts @@ -1,5 +1,5 @@ -import {getMockToken} from '../test-utilities' -import {isColor} from './isColor' +import {getMockToken} from '../test-utilities/index.js' +import {isColor} from './isColor.js' describe('Filter: isColor', () => { it('returns true if $type property is `color`', () => { diff --git a/src/filters/isColor.ts b/src/filters/isColor.ts index 827fefe7b..f32e7ee90 100644 --- a/src/filters/isColor.ts +++ b/src/filters/isColor.ts @@ -1,10 +1,14 @@ -import type StyleDictionary from 'style-dictionary' +import type {TransformedToken} from 'style-dictionary/types' /** * @description Checks if token is of $type `color` - * @param token [StyleDictionary.TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) + * @param token [TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) * @returns boolean */ -export const isColor = (token: StyleDictionary.TransformedToken): boolean => { - return token.$type === 'color' +export const isColor = (token: TransformedToken): boolean => { + const typeValue = token.$type ?? token.type + // if (token.path.join('-') === 'control-transparent-bgColor-selected') { + // console.log(typeValue === 'color', token) + // } + return typeValue === 'color' } diff --git a/src/filters/isColorWithAlpha.test.ts b/src/filters/isColorWithAlpha.test.ts index d53351093..1d473710f 100644 --- a/src/filters/isColorWithAlpha.test.ts +++ b/src/filters/isColorWithAlpha.test.ts @@ -1,5 +1,5 @@ -import {getMockToken} from '../test-utilities' -import {isColorWithAlpha} from './isColorWithAlpha' +import {getMockToken} from '../test-utilities/index.js' +import {isColorWithAlpha} from './isColorWithAlpha.js' describe('Filter: isColorWithAlpha', () => { it('returns true if $type property is `color` and `alpha` is number', () => { diff --git a/src/filters/isColorWithAlpha.ts b/src/filters/isColorWithAlpha.ts index ad6d2f9f2..bb9aba5da 100644 --- a/src/filters/isColorWithAlpha.ts +++ b/src/filters/isColorWithAlpha.ts @@ -1,11 +1,11 @@ -import type StyleDictionary from 'style-dictionary' -import {isColor} from './isColor' +import type {TransformedToken} from 'style-dictionary/types' +import {isColor} from './isColor.js' /** * @description Checks if token is color with an alpha value - * @param arguments [StyleDictionary.TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) + * @param arguments [TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) * @returns boolean */ -export const isColorWithAlpha = (token: StyleDictionary.TransformedToken): boolean => { +export const isColorWithAlpha = (token: TransformedToken): boolean => { return isColor(token) && token.alpha !== undefined && typeof token.alpha === 'number' } diff --git a/src/filters/isColorWithMix.test.ts b/src/filters/isColorWithMix.test.ts index 7b2c63d96..6ab8832fb 100644 --- a/src/filters/isColorWithMix.test.ts +++ b/src/filters/isColorWithMix.test.ts @@ -1,5 +1,5 @@ -import {getMockToken} from '../test-utilities' -import {isColorWithMix} from './isColorWithMix' +import {getMockToken} from '../test-utilities/index.js' +import {isColorWithMix} from './isColorWithMix.js' describe('Filter: isColorWithMix', () => { it('returns true if $type property is `color` and valid `mix` property exists', () => { diff --git a/src/filters/isColorWithMix.ts b/src/filters/isColorWithMix.ts index aa7594f2d..c4b7abbb4 100644 --- a/src/filters/isColorWithMix.ts +++ b/src/filters/isColorWithMix.ts @@ -1,7 +1,7 @@ -import type StyleDictionary from 'style-dictionary' -import {isColor} from './isColor' +import {isColor} from './isColor.js' +import type {TransformedToken} from 'style-dictionary/types' -const throwError = (token: StyleDictionary.TransformedToken) => { +const throwError = (token: TransformedToken) => { throw new Error( `Invalid mix property on token: ${token.name}. "mix.color": ${token.mix.color}, "mix.weight": ${ typeof token.mix.weight === 'string' ? `"${token.mix.weight}" (string)` : token.mix.weight @@ -11,10 +11,10 @@ const throwError = (token: StyleDictionary.TransformedToken) => { /** * @description Checks if token is color and has a mix property - * @param arguments [StyleDictionary.TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) + * @param arguments [TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) * @returns boolean */ -export const isColorWithMix = (token: StyleDictionary.TransformedToken): boolean => { +export const isColorWithMix = (token: TransformedToken): boolean => { // no color or no mix property if (!isColor(token) || token.mix === undefined || token.mix === null) { return false diff --git a/src/filters/isDeprecated.test.ts b/src/filters/isDeprecated.test.ts index 1e24bfb2a..58e6bd74f 100644 --- a/src/filters/isDeprecated.test.ts +++ b/src/filters/isDeprecated.test.ts @@ -1,5 +1,5 @@ -import {getMockToken} from '../test-utilities' -import {isDeprecated} from './isDeprecated' +import {getMockToken} from '../test-utilities/index.js' +import {isDeprecated} from './isDeprecated.js' describe('Filter: isDeprecated', () => { it('Returns true if depreacted property is true', () => { diff --git a/src/filters/isDeprecated.ts b/src/filters/isDeprecated.ts index 074e3d603..9a96f2bdb 100644 --- a/src/filters/isDeprecated.ts +++ b/src/filters/isDeprecated.ts @@ -1,10 +1,10 @@ -import type StyleDictionary from 'style-dictionary' +import type {TransformedToken} from 'style-dictionary/types' /** * @description Checks if token has a valid `deprecated` property - * @param arguments [StyleDictionary.TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) + * @param arguments [TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) * @returns boolean */ -export const isDeprecated = (token: StyleDictionary.TransformedToken): boolean => { +export const isDeprecated = (token: TransformedToken): boolean => { return token.deprecated === true || typeof token.deprecated === 'string' } diff --git a/src/filters/isDimension.test.ts b/src/filters/isDimension.test.ts index f0deb8ec7..566ac676d 100644 --- a/src/filters/isDimension.test.ts +++ b/src/filters/isDimension.test.ts @@ -1,5 +1,5 @@ -import {getMockToken} from '../test-utilities' -import {isDimension} from './isDimension' +import {getMockToken} from '../test-utilities/index.js' +import {isDimension} from './isDimension.js' describe('Filter: isDimension', () => { it('returns true if $type property is `dimension`', () => { diff --git a/src/filters/isDimension.ts b/src/filters/isDimension.ts index 355243abc..225dea5ea 100644 --- a/src/filters/isDimension.ts +++ b/src/filters/isDimension.ts @@ -1,10 +1,10 @@ -import type StyleDictionary from 'style-dictionary' +import type {TransformedToken} from 'style-dictionary/types' /** * @description Checks if token is of $type `dimension` - * @param arguments [StyleDictionary.TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) + * @param arguments [TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) * @returns boolean */ -export const isDimension = (token: StyleDictionary.TransformedToken): boolean => { +export const isDimension = (token: TransformedToken): boolean => { return token.$type === 'dimension' } diff --git a/src/filters/isDuration.test.ts b/src/filters/isDuration.test.ts index ee70fbf01..3d73fd809 100644 --- a/src/filters/isDuration.test.ts +++ b/src/filters/isDuration.test.ts @@ -1,5 +1,5 @@ -import {getMockToken} from '../test-utilities' -import {isDuration} from './isDuration' +import {getMockToken} from '../test-utilities/index.js' +import {isDuration} from './isDuration.js' describe('Filter: isDuration', () => { it('returns true if $type property is `duration`', () => { diff --git a/src/filters/isDuration.ts b/src/filters/isDuration.ts index f9dba849c..4ff4f25da 100644 --- a/src/filters/isDuration.ts +++ b/src/filters/isDuration.ts @@ -1,10 +1,10 @@ -import type StyleDictionary from 'style-dictionary' +import type {TransformedToken} from 'style-dictionary/types' /** * @description Checks if token is of $type `duration` - * @param token [StyleDictionary.TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) + * @param token [TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) * @returns boolean */ -export const isDuration = (token: StyleDictionary.TransformedToken): boolean => { +export const isDuration = (token: TransformedToken): boolean => { return token.$type === 'duration' } diff --git a/src/filters/isFontFamily.test.ts b/src/filters/isFontFamily.test.ts index b785cf0c0..714274494 100644 --- a/src/filters/isFontFamily.test.ts +++ b/src/filters/isFontFamily.test.ts @@ -1,5 +1,5 @@ -import {getMockToken} from '../test-utilities' -import {isFontFamily} from './isFontFamily' +import {getMockToken} from '../test-utilities/index.js' +import {isFontFamily} from './isFontFamily.js' describe('Filter: isFontFamily', () => { it('returns true if $type property is `fontFamily`', () => { diff --git a/src/filters/isFontFamily.ts b/src/filters/isFontFamily.ts index e8d4ff987..faf0b0ab8 100644 --- a/src/filters/isFontFamily.ts +++ b/src/filters/isFontFamily.ts @@ -1,10 +1,10 @@ -import type StyleDictionary from 'style-dictionary' +import type {TransformedToken} from 'style-dictionary/types' /** * @description Checks if token is of $type `isFontFamily` - * @param arguments [StyleDictionary.TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) + * @param arguments [TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) * @returns boolean */ -export const isFontFamily = (token: StyleDictionary.TransformedToken): boolean => { +export const isFontFamily = (token: TransformedToken): boolean => { return token.$type === 'fontFamily' } diff --git a/src/filters/isFontWeight.test.ts b/src/filters/isFontWeight.test.ts index 8d4fbf6a6..3e5e3d75f 100644 --- a/src/filters/isFontWeight.test.ts +++ b/src/filters/isFontWeight.test.ts @@ -1,5 +1,5 @@ -import {getMockToken} from '../test-utilities' -import {isFontWeight} from './isFontWeight' +import {getMockToken} from '../test-utilities/index.js' +import {isFontWeight} from './isFontWeight.js' describe('Filter: isFontWeight', () => { it('returns true if $type property is `fontWeight`', () => { diff --git a/src/filters/isFontWeight.ts b/src/filters/isFontWeight.ts index c59b11006..953f3abd8 100644 --- a/src/filters/isFontWeight.ts +++ b/src/filters/isFontWeight.ts @@ -1,10 +1,10 @@ -import type StyleDictionary from 'style-dictionary' +import type {TransformedToken} from 'style-dictionary/types' /** * @description Checks if token is of $type `fontWeight` - * @param arguments [StyleDictionary.TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) + * @param arguments [TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) * @returns boolean */ -export const isFontWeight = (token: StyleDictionary.TransformedToken): boolean => { +export const isFontWeight = (token: TransformedToken): boolean => { return token.$type === 'fontWeight' } diff --git a/src/filters/isFromFile.test.ts b/src/filters/isFromFile.test.ts index 5786cef9a..5beeaa627 100644 --- a/src/filters/isFromFile.test.ts +++ b/src/filters/isFromFile.test.ts @@ -1,5 +1,5 @@ -import {getMockToken} from '../test-utilities' -import {isFromFile} from './isFromFile' +import {getMockToken} from '../test-utilities/index.js' +import {isFromFile} from './isFromFile.js' describe('Filter: isFromFile', () => { it('returns true if token.filePath is in provided array of file paths', () => { diff --git a/src/filters/isFromFile.ts b/src/filters/isFromFile.ts index 8ecbe7196..8f6228205 100644 --- a/src/filters/isFromFile.ts +++ b/src/filters/isFromFile.ts @@ -1,12 +1,12 @@ -import type StyleDictionary from 'style-dictionary' +import type {TransformedToken} from 'style-dictionary/types' /** * @description Checks if token comes from a specific file - * @param token [StyleDictionary.TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) + * @param token [TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) * @param files - array of file paths * @returns boolean */ -export const isFromFile = (token: StyleDictionary.TransformedToken, files: string[]): boolean => { +export const isFromFile = (token: TransformedToken, files: string[]): boolean => { // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition return files?.includes(token.filePath) === true } diff --git a/src/filters/isNumber.test.ts b/src/filters/isNumber.test.ts index 683999173..d79c655db 100644 --- a/src/filters/isNumber.test.ts +++ b/src/filters/isNumber.test.ts @@ -1,5 +1,5 @@ -import {getMockToken} from '../test-utilities' -import {isNumber} from './isNumber' +import {getMockToken} from '../test-utilities/index.js' +import {isNumber} from './isNumber.js' describe('Filter: isNumber', () => { it('returns true if $type property is `number`', () => { diff --git a/src/filters/isNumber.ts b/src/filters/isNumber.ts index 01d1540c5..2c4307c7a 100644 --- a/src/filters/isNumber.ts +++ b/src/filters/isNumber.ts @@ -1,8 +1,10 @@ -import type StyleDictionary from 'style-dictionary' +import type {TransformedToken} from 'style-dictionary/types' /** * @description Checks if token type is a number - * @param token [StyleDictionary.TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) + * @param token [TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) * @returns boolean */ -export const isNumber = (token: StyleDictionary.TransformedToken): boolean => token.$type === 'number' +export const isNumber = (token: TransformedToken): boolean => { + return token.$type === 'number' +} diff --git a/src/filters/isShadow.test.ts b/src/filters/isShadow.test.ts index f458867f8..11828e793 100644 --- a/src/filters/isShadow.test.ts +++ b/src/filters/isShadow.test.ts @@ -1,5 +1,5 @@ -import {getMockToken} from '../test-utilities' -import {isShadow} from './isShadow' +import {getMockToken} from '../test-utilities/index.js' +import {isShadow} from './isShadow.js' describe('Filter: isShadow', () => { it('returns true if $type property is `shadow`', () => { diff --git a/src/filters/isShadow.ts b/src/filters/isShadow.ts index d817db5a0..5b4be4169 100644 --- a/src/filters/isShadow.ts +++ b/src/filters/isShadow.ts @@ -1,10 +1,10 @@ -import type StyleDictionary from 'style-dictionary' +import type {TransformedToken} from 'style-dictionary/types' /** * @description Checks if token is of $type `shadow` - * @param arguments [StyleDictionary.TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) + * @param arguments [TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) * @returns boolean */ -export const isShadow = (token: StyleDictionary.TransformedToken): boolean => { +export const isShadow = (token: TransformedToken): boolean => { return token.$type === 'shadow' } diff --git a/src/filters/isSource.test.ts b/src/filters/isSource.test.ts index d31c60edb..8762dc285 100644 --- a/src/filters/isSource.test.ts +++ b/src/filters/isSource.test.ts @@ -1,6 +1,6 @@ -import type StyleDictionary from 'style-dictionary' -import {getMockToken} from '../test-utilities' -import {isSource} from './isSource' +import type {TransformedToken} from 'style-dictionary/types' +import {getMockToken} from '../test-utilities/index.js' +import {isSource} from './isSource.js' describe('Filter: isSource', () => { it('Returns true if isSource property is true', () => { @@ -19,7 +19,7 @@ describe('Filter: isSource', () => { }) it('Returns false if no isSource property exists', () => { - expect(isSource({value: 'pumpkin'} as StyleDictionary.TransformedToken)).toStrictEqual(false) + expect(isSource({value: 'pumpkin'} as TransformedToken)).toStrictEqual(false) }) it('Usage as a filter function', () => { @@ -35,7 +35,7 @@ describe('Filter: isSource', () => { { value: 'yellow is not source', }, - ] as StyleDictionary.TransformedToken[] + ] as TransformedToken[] const expectedOutput = inputArray.filter(item => item.isSource === true) diff --git a/src/filters/isSource.ts b/src/filters/isSource.ts index 8fe15bf7e..ae513b9e6 100644 --- a/src/filters/isSource.ts +++ b/src/filters/isSource.ts @@ -1,10 +1,10 @@ -import type StyleDictionary from 'style-dictionary' +import type {TransformedToken} from 'style-dictionary/types' /** * @description Checks if token is source token - * @param arguments [StyleDictionary.TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) + * @param arguments [TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) * @returns boolean */ -export const isSource = (token: StyleDictionary.TransformedToken): boolean => { +export const isSource = (token: TransformedToken): boolean => { return token.isSource === true } diff --git a/src/filters/isTypography.test.ts b/src/filters/isTypography.test.ts index ba004348b..ed696dd12 100644 --- a/src/filters/isTypography.test.ts +++ b/src/filters/isTypography.test.ts @@ -1,5 +1,5 @@ -import {getMockToken} from '../test-utilities' -import {isTypography} from './isTypography' +import {getMockToken} from '../test-utilities/index.js' +import {isTypography} from './isTypography.js' describe('Filter: isTypography', () => { it('returns true if $type property is `typography`', () => { diff --git a/src/filters/isTypography.ts b/src/filters/isTypography.ts index e1b57ba83..8c7225d9e 100644 --- a/src/filters/isTypography.ts +++ b/src/filters/isTypography.ts @@ -1,10 +1,10 @@ -import type StyleDictionary from 'style-dictionary' +import type {TransformedToken} from 'style-dictionary/types' /** * @description Checks if token is of $type `typography` - * @param arguments [StyleDictionary.TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) + * @param arguments [TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) * @returns boolean */ -export const isTypography = (token: StyleDictionary.TransformedToken): boolean => { +export const isTypography = (token: TransformedToken): boolean => { return token.$type === 'typography' } diff --git a/src/formats/cssAdvanced.test.ts b/src/formats/cssAdvanced.test.ts index c3fccb543..993c3d430 100644 --- a/src/formats/cssAdvanced.test.ts +++ b/src/formats/cssAdvanced.test.ts @@ -1,15 +1,15 @@ -import {cssAdvanced} from './cssAdvanced' -import {getMockDictionary, getMockFormatterArguments, getMockToken} from '../test-utilities' -import syncPrettier from '@prettier/sync' -import type {TransformedToken} from 'style-dictionary' +import {cssAdvanced} from './cssAdvanced.js' +import {getMockDictionary, getMockFormatterArguments, getMockToken} from '../test-utilities/index.js' +import {format} from 'prettier' +import type {TransformedToken} from 'style-dictionary/types' describe('Format: tokens nested in media query', () => { /** * Test cases for formatting tokens with simple css variables */ - it('Formats tokens as css variables with default :root selector', () => { + it('Formats tokens as css variables with default :root selector', async () => { const input = getMockFormatterArguments() - const expectedOutput = syncPrettier.format( + const expectedOutput = await format( `:root { --red: transformedValue; }`, @@ -18,10 +18,10 @@ describe('Format: tokens nested in media query', () => { printWidth: 500, }, ) - expect(cssAdvanced(input)).toStrictEqual(expectedOutput) + expect(await cssAdvanced(input)).toStrictEqual(expectedOutput) }) - it('Formats tokens with custom selectors', () => { + it('Formats tokens with custom selectors', async () => { const input = getMockFormatterArguments({ file: { destination: 'test.css', @@ -31,19 +31,19 @@ describe('Format: tokens nested in media query', () => { }, }, }) - const expectedOutput = syncPrettier.format( + const expectedOutput = await format( ` [data-color-mode="dark"] { --red: transformedValue; }`, {parser: 'css', printWidth: 500}, ) - expect(cssAdvanced(input)).toStrictEqual(expectedOutput) + expect(await cssAdvanced(input)).toStrictEqual(expectedOutput) }) /** * Test cases for formatting using media queries */ - it('Formats all tokens with screen media query and default selector', () => { + it('Formats all tokens with screen media query and default selector', async () => { const input = getMockFormatterArguments({ file: { destination: 'tokens.ts', @@ -57,7 +57,7 @@ describe('Format: tokens nested in media query', () => { }, }, }) - const expectedOutput = syncPrettier.format( + const expectedOutput = await format( ` @media screen { :root { --red: transformedValue; @@ -65,10 +65,10 @@ describe('Format: tokens nested in media query', () => { }`, {parser: 'css', printWidth: 500}, ) - expect(cssAdvanced(input)).toStrictEqual(expectedOutput) + expect(await cssAdvanced(input)).toStrictEqual(expectedOutput) }) - it('Formats all tokens with screen media query and custom selector', () => { + it('Formats all tokens with screen media query and custom selector', async () => { const input = getMockFormatterArguments({ file: { destination: 'tokens.ts', @@ -83,7 +83,7 @@ describe('Format: tokens nested in media query', () => { }, }, }) - const expectedOutput = syncPrettier.format( + const expectedOutput = await format( ` @media screen { [data-color-mode="dark"] { --red: transformedValue; @@ -91,10 +91,10 @@ describe('Format: tokens nested in media query', () => { }`, {parser: 'css', printWidth: 500}, ) - expect(cssAdvanced(input)).toStrictEqual(expectedOutput) + expect(await cssAdvanced(input)).toStrictEqual(expectedOutput) }) - it('Outputs nothing if no matching media query is found', () => { + it('Outputs nothing if no matching media query is found', async () => { const input = getMockFormatterArguments({ file: { destination: 'size-coarse.css', @@ -109,10 +109,10 @@ describe('Format: tokens nested in media query', () => { }, }, }) - expect(cssAdvanced(input)).toStrictEqual('') + expect(await cssAdvanced(input)).toStrictEqual('') }) - it('Formats only matching tokens in defined media query using matcher', () => { + it('Formats only matching tokens in defined media query using matcher', async () => { const input = getMockFormatterArguments({ dictionary: getMockDictionary({ tokens: { @@ -141,7 +141,7 @@ describe('Format: tokens nested in media query', () => { }, }, }) - const expectedOutput = syncPrettier.format( + const expectedOutput = await format( ` @media (pointer: fine) { :root { --tokens-subgroup-gap: transformedValue; @@ -149,12 +149,12 @@ describe('Format: tokens nested in media query', () => { }`, {parser: 'css', printWidth: 500}, ) - expect(cssAdvanced(input)).toStrictEqual(expectedOutput) + expect(await cssAdvanced(input)).toStrictEqual(expectedOutput) }) /** * Test cases for formatting using selectors */ - it('Formats all tokens with custom selectors', () => { + it('Formats all tokens with custom selectors', async () => { const input = getMockFormatterArguments({ file: { destination: 'dark.css', @@ -169,17 +169,17 @@ describe('Format: tokens nested in media query', () => { }, }, }) - const expectedOutput = syncPrettier.format( + const expectedOutput = await format( ` [data-color-mode="dark"][data-dark-theme="dark"], [data-color-mode="auto"][data-light-theme="dark"] { --red: transformedValue; }`, {parser: 'css', printWidth: 500}, ) - expect(cssAdvanced(input)).toStrictEqual(expectedOutput) + expect(await cssAdvanced(input)).toStrictEqual(expectedOutput) }) - it('Formats only matching tokens with custom selectors', () => { + it('Formats only matching tokens with custom selectors', async () => { const input = getMockFormatterArguments({ dictionary: getMockDictionary({ tokens: { @@ -213,25 +213,25 @@ describe('Format: tokens nested in media query', () => { }, }, }) - const expectedOutput = syncPrettier.format( + const expectedOutput = await format( `[data-color-mode="auto"][data-dark-theme="dark"] { --tokens-subgroup-gap: transformedValue; }`, {parser: 'css', printWidth: 500}, ) - expect(cssAdvanced(input)).toStrictEqual(expectedOutput) + expect(await cssAdvanced(input)).toStrictEqual(expectedOutput) }) /** * Test cases for formatting tokens with simple css variables */ - it('Shows comment if option.formatting.commentStyle is long or not set', () => { + it('Shows comment if option.formatting.commentStyle is long or not set', async () => { const input = getMockFormatterArguments({ dictionary: getMockDictionary({ tokens: { subgroup: { red: getMockToken({ name: 'red', - value: 'transformedValue', + $value: 'transformedValue', comment: 'This is a description', }), }, @@ -241,6 +241,7 @@ describe('Format: tokens nested in media query', () => { formatting: { commentStyle: 'long', }, + usesDtcg: true, }, file: { destination: 'size-fine.css', @@ -261,13 +262,15 @@ describe('Format: tokens nested in media query', () => { subgroup: { red: getMockToken({ name: 'red', - value: 'transformedValue', + $value: 'transformedValue', comment: 'This is a description', }), }, }, }), - options: {}, // description not set + options: { + usesDtcg: true, + }, // description not set file: { destination: 'size-fine.css', options: { @@ -281,7 +284,7 @@ describe('Format: tokens nested in media query', () => { }, }) - const expectedOutput = syncPrettier.format( + const expectedOutput = await format( ` @media (prefers-color-scheme: light){ :root { --red: transformedValue; /* This is a description */ @@ -289,18 +292,18 @@ describe('Format: tokens nested in media query', () => { }`, {parser: 'css', printWidth: 500}, ) - expect(cssAdvanced(input)).toStrictEqual(expectedOutput) - expect(cssAdvanced(inputUnset)).toStrictEqual(expectedOutput) + expect(await cssAdvanced(input)).toStrictEqual(expectedOutput) + expect(await cssAdvanced(inputUnset)).toStrictEqual(expectedOutput) }) - it('Hides comment if option.formatting.commentStle is set to none', () => { + it('Hides comment if option.formatting.commentStyle is set to none', async () => { const input = getMockFormatterArguments({ dictionary: getMockDictionary({ tokens: { subgroup: { red: getMockToken({ name: 'red', - value: 'transformedValue', + $value: 'transformedValue', comment: 'This is a description', }), }, @@ -310,6 +313,7 @@ describe('Format: tokens nested in media query', () => { formatting: { commentStyle: 'none', }, + usesDtcg: true, }, file: { destination: 'size-fine.css', @@ -324,7 +328,7 @@ describe('Format: tokens nested in media query', () => { }, }) - const expectedOutput = syncPrettier.format( + const expectedOutput = await format( ` @media (prefers-color-scheme: dark) { :root { --red: transformedValue; @@ -332,6 +336,6 @@ describe('Format: tokens nested in media query', () => { }`, {parser: 'css', printWidth: 500}, ) - expect(cssAdvanced(input)).toStrictEqual(expectedOutput) + expect(await cssAdvanced(input)).toStrictEqual(expectedOutput) }) }) diff --git a/src/formats/cssAdvanced.ts b/src/formats/cssAdvanced.ts index 75e07963f..93c6865c6 100644 --- a/src/formats/cssAdvanced.ts +++ b/src/formats/cssAdvanced.ts @@ -1,9 +1,6 @@ -import type {TransformedToken} from 'style-dictionary' -import StyleDictionary from 'style-dictionary' -import type {FormatterArguments} from 'style-dictionary/types/Format' -import syncPrettier from '@prettier/sync' -import type {LineFormatting} from 'style-dictionary/types/FormatHelpers' -const {fileHeader, formattedVariables} = StyleDictionary.formatHelpers +import type {TransformedToken, FormatFn, FormatFnArguments, FormattingOptions} from 'style-dictionary/types' +import {format} from 'prettier' +import {fileHeader, formattedVariables} from 'style-dictionary/utils' const wrapWithSelector = (css: string, selector: string | false): string => { // return without selector @@ -12,15 +9,15 @@ const wrapWithSelector = (css: string, selector: string | false): string => { return `${selector} { ${css} }` } -export const cssAdvanced: StyleDictionary.Formatter = ({ +export const cssAdvanced: FormatFn = async ({ dictionary: originalDictionary, options = { queries: [], }, file, -}: FormatterArguments): string => { +}: FormatFnArguments) => { // get options - const {outputReferences, formatting} = options + const {outputReferences, usesDtcg, formatting} = options // selector const selector = file.options?.selector !== undefined ? file.options.selector : ':root' // query extension property @@ -33,7 +30,7 @@ export const cssAdvanced: StyleDictionary.Formatter = ({ }, ] // set formatting - const mergedFormatting: LineFormatting = { + const mergedFormatting: FormattingOptions = { commentStyle: 'long', ...formatting, } @@ -65,7 +62,7 @@ export const cssAdvanced: StyleDictionary.Formatter = ({ } } // add file header - const output = [fileHeader({file})] + const output = [await fileHeader({file})] // add single theme css for (const query of queries) { const {query: queryString, matcher} = query @@ -82,6 +79,7 @@ export const cssAdvanced: StyleDictionary.Formatter = ({ dictionary: filteredDictionary, outputReferences, formatting: mergedFormatting, + usesDtcg, }) // wrap css const cssWithSelector = wrapWithSelector(css, query.selector !== undefined ? query.selector : selector) @@ -89,5 +87,5 @@ export const cssAdvanced: StyleDictionary.Formatter = ({ output.push(queryString ? `${queryString} { ${cssWithSelector} }` : cssWithSelector) } // return prettified - return syncPrettier.format(output.join('\n'), {parser: 'css', printWidth: 500}) + return await format(output.join('\n'), {parser: 'css', printWidth: 500}) } diff --git a/src/formats/cssCustomMedia.test.ts b/src/formats/cssCustomMedia.test.ts index e12adcfaf..c1a394e1f 100644 --- a/src/formats/cssCustomMedia.test.ts +++ b/src/formats/cssCustomMedia.test.ts @@ -1,14 +1,14 @@ -import {cssCustomMedia} from './cssCustomMedia' -import {getMockFormatterArguments} from '../test-utilities' -import syncPrettier from '@prettier/sync' +import {cssCustomMedia} from './cssCustomMedia.js' +import {getMockFormatterArguments} from '../test-utilities/index.js' +import {format} from 'prettier' describe('Format: tokens to custom-media', () => { - it('Formats tokens with custom media', () => { + it('Formats tokens with custom media', async () => { const input = getMockFormatterArguments() - const expectedOutput = syncPrettier.format(`@custom-media --red transformedValue;`, { + const expectedOutput = await format(`@custom-media --red transformedValue;`, { parser: 'css', printWidth: 500, }) - expect(cssCustomMedia(input)).toStrictEqual(expectedOutput) + expect(await cssCustomMedia(input)).toStrictEqual(expectedOutput) }) }) diff --git a/src/formats/cssCustomMedia.ts b/src/formats/cssCustomMedia.ts index 79f4b2619..7b3363e3e 100644 --- a/src/formats/cssCustomMedia.ts +++ b/src/formats/cssCustomMedia.ts @@ -1,24 +1,19 @@ -import StyleDictionary from 'style-dictionary' -import type {FormatterArguments} from 'style-dictionary/types/Format' -import syncPrettier from '@prettier/sync' -const {fileHeader} = StyleDictionary.formatHelpers +import {format} from 'prettier' +import type {FormatFn, FormatFnArguments} from 'style-dictionary/types' +import {fileHeader} from 'style-dictionary/utils' /** * @description Converts `StyleDictionary.dictionary.tokens` to css with @custom-media * @param arguments [FormatterArguments](https://github.com/amzn/style-dictionary/blob/main/types/Format.d.ts) * @returns formatted `string` */ -export const cssCustomMedia: StyleDictionary.Formatter = ({ - dictionary, - options: _options, - file, -}: FormatterArguments) => { +export const cssCustomMedia: FormatFn = async ({dictionary, options: _options, file}: FormatFnArguments) => { // add file header - const output = [fileHeader({file})] + const output = [await fileHeader({file})] // add single theme css - dictionary.allTokens.map(({name, value}) => { - output.push(`@custom-media --${name} ${value};`) + dictionary.allTokens.map(({name, $value}) => { + output.push(`@custom-media --${name} ${$value};`) }) // return prettified - return syncPrettier.format(output.join('\n'), {parser: 'css', printWidth: 500}) + return format(output.join('\n'), {parser: 'css', printWidth: 500}) } diff --git a/src/formats/index.ts b/src/formats/index.ts index 480d276cf..f6cbc0f06 100644 --- a/src/formats/index.ts +++ b/src/formats/index.ts @@ -1,9 +1,9 @@ -export {cssCustomMedia} from './cssCustomMedia' -export {cssAdvanced} from './cssAdvanced' -export {jsonFigma} from './jsonFigma' -export {javascriptCommonJs} from './javascriptCommonJs' -export {javascriptEsm} from './javascriptEsm' -export {jsonNestedPrefixed} from './jsonNestedPrefixed' -export {jsonOneDimensional} from './jsonOneDimensional' -export {jsonPostCssFallback} from './jsonPostCssFallback' -export {typescriptExportDefinition} from './typescriptExportDefinition' +export {cssCustomMedia} from './cssCustomMedia.js' +export {cssAdvanced} from './cssAdvanced.js' +export {jsonFigma} from './jsonFigma.js' +export {javascriptCommonJs} from './javascriptCommonJs.js' +export {javascriptEsm} from './javascriptEsm.js' +export {jsonNestedPrefixed} from './jsonNestedPrefixed.js' +export {jsonOneDimensional} from './jsonOneDimensional.js' +export {jsonPostCssFallback} from './jsonPostCssFallback.js' +export {typescriptExportDefinition} from './typescriptExportDefinition.js' diff --git a/src/formats/javascriptCommonJs.test.ts b/src/formats/javascriptCommonJs.test.ts index 995ff0b58..8745ce889 100644 --- a/src/formats/javascriptCommonJs.test.ts +++ b/src/formats/javascriptCommonJs.test.ts @@ -1,16 +1,16 @@ -import {javascriptCommonJs} from './javascriptCommonJs' -import {getMockFormatterArguments} from '../test-utilities' -import syncPrettier from '@prettier/sync' +import {javascriptCommonJs} from './javascriptCommonJs.js' +import {getMockFormatterArguments} from '../test-utilities/index.js' +import {format} from 'prettier' describe('Format: CommonJs', () => { - it('Formats tokens adding prefix', () => { + it('Formats tokens adding prefix', async () => { const input = getMockFormatterArguments({ platform: { prefix: 'test', }, }) - const expectedOutput = syncPrettier.format( + const expectedOutput = await format( `module.exports = { test: { tokens: { @@ -23,12 +23,12 @@ describe('Format: CommonJs', () => { {parser: 'typescript', printWidth: 500}, ) - expect(javascriptCommonJs(input)).toBe(expectedOutput) + expect(await javascriptCommonJs(input)).toBe(expectedOutput) }) - it('Formats tokens without prefix', () => { + it('Formats tokens without prefix', async () => { const input = getMockFormatterArguments() - const expectedOutput = syncPrettier.format( + const expectedOutput = await format( `module.exports = { tokens: { subgroup: { @@ -38,6 +38,6 @@ describe('Format: CommonJs', () => { };`, {parser: 'typescript', printWidth: 500}, ) - expect(javascriptCommonJs(input)).toStrictEqual(expectedOutput) + expect(await javascriptCommonJs(input)).toStrictEqual(expectedOutput) }) }) diff --git a/src/formats/javascriptCommonJs.ts b/src/formats/javascriptCommonJs.ts index aa0bdb09a..5c75e255e 100644 --- a/src/formats/javascriptCommonJs.ts +++ b/src/formats/javascriptCommonJs.ts @@ -1,21 +1,19 @@ -import syncPrettier from '@prettier/sync' -import {jsonToNestedValue} from './utilities/jsonToNestedValue' -import {prefixTokens} from './utilities/prefixTokens' -import StyleDictionary from 'style-dictionary' -import type {FormatterArguments} from 'style-dictionary/types/Format' - -const {fileHeader} = StyleDictionary.formatHelpers +import {format} from 'prettier' +import {jsonToNestedValue} from './utilities/jsonToNestedValue.js' +import {prefixTokens} from './utilities/prefixTokens.js' +import type {FormatFn, FormatFnArguments} from 'style-dictionary/types' +import {fileHeader} from 'style-dictionary/utils' /** * @description Converts `StyleDictionary.dictionary.tokens` to javascript commonJS module * @param arguments [FormatterArguments](https://github.com/amzn/style-dictionary/blob/main/types/Format.d.ts) * @returns formatted `string` */ -export const javascriptCommonJs: StyleDictionary.Formatter = ({dictionary, file, platform}: FormatterArguments) => { +export const javascriptCommonJs: FormatFn = async ({dictionary, file, platform}: FormatFnArguments) => { // add prefix if defined const tokens = prefixTokens(dictionary.tokens, platform) // add file header and convert output - const output = `${fileHeader({file})}module.exports = ${JSON.stringify(jsonToNestedValue(tokens), null, 2)}\n` + const output = `${await fileHeader({file})}module.exports = ${JSON.stringify(jsonToNestedValue(tokens), null, 2)}\n` // return prettified - return syncPrettier.format(output, {parser: 'typescript', printWidth: 500}) + return format(output, {parser: 'typescript', printWidth: 500}) } diff --git a/src/formats/javascriptEsm.test.ts b/src/formats/javascriptEsm.test.ts index c9fe91e52..8e28e6cef 100644 --- a/src/formats/javascriptEsm.test.ts +++ b/src/formats/javascriptEsm.test.ts @@ -1,15 +1,15 @@ -import {javascriptEsm} from './javascriptEsm' -import {getMockFormatterArguments} from '../test-utilities' -import syncPrettier from '@prettier/sync' +import {javascriptEsm} from './javascriptEsm.js' +import {getMockFormatterArguments} from '../test-utilities/index.js' +import {format} from 'prettier' describe('Format: ESM', () => { - it('Formats tokens adding prefix', () => { + it('Formats tokens adding prefix', async () => { const input = getMockFormatterArguments({ platform: { prefix: 'test', }, }) - const expectedOutput = syncPrettier.format( + const expectedOutput = await format( `export default { test: { tokens: { @@ -21,12 +21,12 @@ describe('Format: ESM', () => { };`, {parser: 'typescript', printWidth: 500}, ) - expect(javascriptEsm(input)).toStrictEqual(expectedOutput) + expect(await javascriptEsm(input)).toStrictEqual(expectedOutput) }) - it('Formats tokens without prefix', () => { + it('Formats tokens without prefix', async () => { const input = getMockFormatterArguments() - const expectedOutput = syncPrettier.format( + const expectedOutput = await format( `export default { tokens: { subgroup: { @@ -36,6 +36,6 @@ describe('Format: ESM', () => { };`, {parser: 'typescript', printWidth: 500}, ) - expect(javascriptEsm(input)).toStrictEqual(expectedOutput) + expect(await javascriptEsm(input)).toStrictEqual(expectedOutput) }) }) diff --git a/src/formats/javascriptEsm.ts b/src/formats/javascriptEsm.ts index 95da2cac8..f863a5e74 100644 --- a/src/formats/javascriptEsm.ts +++ b/src/formats/javascriptEsm.ts @@ -1,21 +1,19 @@ -import StyleDictionary from 'style-dictionary' -import syncPrettier from '@prettier/sync' -import {jsonToNestedValue} from './utilities/jsonToNestedValue' -import {prefixTokens} from './utilities/prefixTokens' -import type {FormatterArguments} from 'style-dictionary/types/Format' - -const {fileHeader} = StyleDictionary.formatHelpers +import {format} from 'prettier' +import {jsonToNestedValue} from './utilities/jsonToNestedValue.js' +import {prefixTokens} from './utilities/prefixTokens.js' +import type {FormatFn, FormatFnArguments} from 'style-dictionary/types' +import {fileHeader} from 'style-dictionary/utils' /** * @description Converts `StyleDictionary.dictionary.tokens` to javascript esm (javascript export statement) * @param arguments [FormatterArguments](https://github.com/amzn/style-dictionary/blob/main/types/Format.d.ts) * @returns formatted `string` */ -export const javascriptEsm: StyleDictionary.Formatter = ({dictionary, file, platform}: FormatterArguments) => { +export const javascriptEsm: FormatFn = async ({dictionary, file, platform}: FormatFnArguments) => { // add prefix if defined const tokens = prefixTokens(dictionary.tokens, platform) // add file header and convert output - const output = `${fileHeader({file})}export default \n${JSON.stringify(jsonToNestedValue(tokens), null, 2)}\n` + const output = `${await fileHeader({file})}export default \n${JSON.stringify(jsonToNestedValue(tokens), null, 2)}\n` // return prettified - return syncPrettier.format(output, {parser: 'typescript', printWidth: 500}) + return format(output, {parser: 'typescript', printWidth: 500}) } diff --git a/src/formats/jsonFigma.ts b/src/formats/jsonFigma.ts index 2cb5cbb24..cc4bc7c6e 100644 --- a/src/formats/jsonFigma.ts +++ b/src/formats/jsonFigma.ts @@ -1,23 +1,18 @@ -import StyleDictionary from 'style-dictionary' -import syncPrettier from '@prettier/sync' -import type {FormatterArguments} from 'style-dictionary/types/Format' -import {transformNamePathToFigma} from '../transformers/namePathToFigma' -import type {ShadowTokenValue} from '../types/ShadowTokenValue' -import {hexToRgbaFloat} from '../transformers/utilities/hexToRgbaFloat' -import type {RgbaFloat} from '../transformers/utilities/isRgbaFloat' -import {isRgbaFloat} from '../transformers/utilities/isRgbaFloat' -const {sortByReference} = StyleDictionary.formatHelpers +import type {Dictionary, TransformedToken, FormatFn, FormatFnArguments, PlatformConfig} from 'style-dictionary/types' +import {format} from 'prettier' +import {transformNamePathToFigma} from '../transformers/namePathToFigma.js' +import type {ShadowTokenValue} from '../types/ShadowTokenValue.js' +import {hexToRgbaFloat} from '../transformers/utilities/hexToRgbaFloat.js' +import type {RgbaFloat} from '../transformers/utilities/isRgbaFloat.js' +import {isRgbaFloat} from '../transformers/utilities/isRgbaFloat.js' +import {getReferences, sortByReference} from 'style-dictionary/utils' const isReference = (string: string): boolean => /^\{([^\\]*)\}$/g.test(string) -const getReference = ( - dictionary: StyleDictionary.Dictionary, - refString: string, - platform: StyleDictionary.Platform, -) => { +const getReference = (dictionary: Dictionary, refString: string, platform: PlatformConfig) => { if (isReference(refString)) { // retrieve reference token - const refToken = dictionary.getReferences(refString)[0] + const refToken = getReferences(refString, dictionary.tokens, {unfilteredTokens: dictionary.unfilteredTokens})[0] // return full reference return [refToken.attributes?.collection, transformNamePathToFigma(refToken, platform)].filter(Boolean).join('/') } @@ -38,7 +33,7 @@ const getFigmaType = (type: string): string => { const shadowToVariables = ( name: string, values: Omit & {color: string | RgbaFloat}, - token: StyleDictionary.TransformedToken, + token: TransformedToken, ) => { // floatValue const floatValue = (property: 'offsetX' | 'offsetY' | 'blur' | 'spread') => ({ @@ -78,14 +73,19 @@ const shadowToVariables = ( * @param arguments [FormatterArguments](https://github.com/amzn/style-dictionary/blob/main/types/Format.d.ts) * @returns formatted `string` */ -export const jsonFigma: StyleDictionary.Formatter = ({dictionary, file: _file, platform}: FormatterArguments) => { +export const jsonFigma: FormatFn = async ({dictionary, file: _file, platform}: FormatFnArguments) => { // array to store tokens in const tokens: Record[] = [] + const sortedTokens = [...dictionary.allTokens].sort( + sortByReference(dictionary.tokens, {unfilteredTokens: dictionary.unfilteredTokens}), + ) // loop through tokens sorted by reference - for (const token of dictionary.allTokens.sort(sortByReference(dictionary))) { + for (const token of sortedTokens) { // deconstruct token - const {attributes, value, $type, comment: description, original, alpha, mix} = token + const {attributes, $value: value, $type, $description: description, original, alpha, mix} = token const {mode, collection, scopes, group, codeSyntax} = attributes || {} + // early escape if no type is present + if (!$type) return // shadows need to be specifically dealt with if ($type === 'shadow') { const shadowValues = !Array.isArray(value) ? [value] : value @@ -118,7 +118,7 @@ export const jsonFigma: StyleDictionary.Formatter = ({dictionary, file: _file, p isMix: mix ? true : undefined, description, refId: [collection, token.name].filter(Boolean).join('/'), - reference: getReference(dictionary, original.value, platform), + reference: getReference(dictionary, original.$value, platform), collection, mode, group, @@ -130,5 +130,5 @@ export const jsonFigma: StyleDictionary.Formatter = ({dictionary, file: _file, p // add file header and convert output const output = JSON.stringify(tokens, null, 2) // return prettified - return syncPrettier.format(output, {parser: 'json', printWidth: 500}) + return format(output, {parser: 'json', printWidth: 500}) } diff --git a/src/formats/jsonNestedPrefixed.test.ts b/src/formats/jsonNestedPrefixed.test.ts index 36b82a14e..ba74932b7 100644 --- a/src/formats/jsonNestedPrefixed.test.ts +++ b/src/formats/jsonNestedPrefixed.test.ts @@ -1,16 +1,16 @@ import {jsonNestedPrefixed} from './jsonNestedPrefixed' import {getMockFormatterArguments} from '../test-utilities' -import syncPrettier from '@prettier/sync' +import {format} from 'prettier' describe('Format: Json nested with prefixes', () => { - test('Formats tokens with prefix', () => { + test('Formats tokens with prefix', async () => { const input = getMockFormatterArguments({ platform: { prefix: 'test', }, }) - const expectedOutput = syncPrettier.format( + const expectedOutput = await format( `{ "test": { "tokens": { @@ -23,12 +23,12 @@ describe('Format: Json nested with prefixes', () => { {parser: 'json', printWidth: 500}, ) - expect(jsonNestedPrefixed(input)).toBe(expectedOutput) + expect(await jsonNestedPrefixed(input)).toBe(expectedOutput) }) - test('Formats tokens without prefix', () => { + test('Formats tokens without prefix', async () => { const input = getMockFormatterArguments() - const expectedOutput = syncPrettier.format( + const expectedOutput = await format( `{ "tokens": { "subgroup": { @@ -38,16 +38,16 @@ describe('Format: Json nested with prefixes', () => { }`, {parser: 'json', printWidth: 500}, ) - expect(jsonNestedPrefixed(input)).toStrictEqual(expectedOutput) + expect(await jsonNestedPrefixed(input)).toStrictEqual(expectedOutput) }) - test('Formats tokens without verbose setting', () => { + test('Formats tokens without verbose setting', async () => { const input = getMockFormatterArguments({ options: { outputVerbose: true, }, }) - const expectedOutput = syncPrettier.format( + const expectedOutput = await format( `{ "tokens": { "subgroup": { @@ -55,12 +55,12 @@ describe('Format: Json nested with prefixes', () => { "name": "red", "path": ["tokens", "subgroup", "red"], "original": { - "value": "originalValue", + "$value": "originalValue", "attributes": {} }, "filePath": "file.json", "isSource": true, - "value": "transformedValue", + "$value": "transformedValue", "attributes": {}, "description": "This is a description" } @@ -69,6 +69,6 @@ describe('Format: Json nested with prefixes', () => { }`, {parser: 'json', printWidth: 500}, ) - expect(jsonNestedPrefixed(input)).toStrictEqual(expectedOutput) + expect(await jsonNestedPrefixed(input)).toStrictEqual(expectedOutput) }) }) diff --git a/src/formats/jsonNestedPrefixed.ts b/src/formats/jsonNestedPrefixed.ts index cb3b549e9..35cdca913 100644 --- a/src/formats/jsonNestedPrefixed.ts +++ b/src/formats/jsonNestedPrefixed.ts @@ -1,15 +1,15 @@ -import type StyleDictionary from 'style-dictionary' -import syncPrettier from '@prettier/sync' -import {prefixTokens} from './utilities/prefixTokens' -import {jsonToNestedValue} from './utilities/jsonToNestedValue' +import {format} from 'prettier' +import {prefixTokens} from './utilities/prefixTokens.js' +import {jsonToNestedValue} from './utilities/jsonToNestedValue.js' +import type {FormatFn, FormatFnArguments} from 'style-dictionary/types' /** * @description Takes a style dictionary token dictionary and converts it to a nested json string. * In contrast to the `json/nested` this formatter does add a prefix if provided - * @param StyleDictionary.FormatterArguments + * @param FormatFnArguments * @returns formatted json `string` */ -export const jsonNestedPrefixed: StyleDictionary.Formatter = ({dictionary, file: _file, options, platform}) => { +export const jsonNestedPrefixed: FormatFn = async ({dictionary, file: _file, options, platform}: FormatFnArguments) => { const {outputVerbose} = options // add prefix if defined let tokens = prefixTokens(dictionary.tokens, platform) @@ -19,5 +19,5 @@ export const jsonNestedPrefixed: StyleDictionary.Formatter = ({dictionary, file: // add file header and convert output const output = JSON.stringify(tokens, null, 2) // return prettified - return syncPrettier.format(output, {parser: 'json', printWidth: 500}) + return format(output, {parser: 'json', printWidth: 500}) } diff --git a/src/formats/jsonOneDimensional.test.ts b/src/formats/jsonOneDimensional.test.ts index 86ecb1a7f..231bcfbec 100644 --- a/src/formats/jsonOneDimensional.test.ts +++ b/src/formats/jsonOneDimensional.test.ts @@ -1,6 +1,6 @@ -import {jsonOneDimensional} from './jsonOneDimensional' -import {getMockDictionary, getMockFormatterArguments, getMockToken} from '../test-utilities' -import syncPrettier from '@prettier/sync' +import {jsonOneDimensional} from './jsonOneDimensional.js' +import {getMockDictionary, getMockFormatterArguments, getMockToken} from '../test-utilities/index.js' +import {format} from 'prettier' describe('Format: Json One Dimensional', () => { const dictionary = getMockDictionary({ @@ -14,43 +14,43 @@ describe('Format: Json One Dimensional', () => { }, }) - test('Formats tokens as object', () => { + test('Formats tokens as object', async () => { const input = getMockFormatterArguments({ dictionary, options: {outputVerbose: true}, }) - const expectedOutput = syncPrettier.format( + const expectedOutput = await format( `{ "tokens-subgroup-red": { "name": "tokens-subgroup-red", "path": ["tokens", "subgroup", "red"], "original": { - "value": "originalValue", + "$value": "originalValue", "attributes": {} }, "filePath": "file.json", "isSource": true, - "value": "transformedValue", + "$value": "transformedValue", "attributes": {} } }`, {parser: 'json', printWidth: 500}, ) - expect(jsonOneDimensional(input)).toStrictEqual(expectedOutput) + expect(await jsonOneDimensional(input)).toStrictEqual(expectedOutput) }) - test('Formats tokens as values only', () => { + test('Formats tokens as values only', async () => { const input = getMockFormatterArguments({ dictionary, }) - const expectedOutput = syncPrettier.format( + const expectedOutput = await format( `{ "tokens-subgroup-red": "transformedValue" }`, {parser: 'json', printWidth: 500}, ) - expect(jsonOneDimensional(input)).toStrictEqual(expectedOutput) + expect(await jsonOneDimensional(input)).toStrictEqual(expectedOutput) }) }) diff --git a/src/formats/jsonOneDimensional.ts b/src/formats/jsonOneDimensional.ts index 1a31e23c0..2e2f91874 100644 --- a/src/formats/jsonOneDimensional.ts +++ b/src/formats/jsonOneDimensional.ts @@ -1,18 +1,35 @@ -import type StyleDictionary from 'style-dictionary' -import syncPrettier from '@prettier/sync' -import {jsonToFlat} from './utilities/jsonToFlat' +import {format} from 'prettier' +import {jsonToFlat} from './utilities/jsonToFlat.js' +import type {FormatFn, FormatFnArguments} from 'style-dictionary/types' /** * @description Takes a style dictionary token dictionary and converts it to a one dimensional json object. - * @param StyleDictionary.FormatterArguments + * @param FormatFnArguments * @param options.nameSeparator - separator to use for nested token name * @returns formatted json `string` */ -export const jsonOneDimensional: StyleDictionary.Formatter = ({dictionary, file: _file, options}) => { +export const jsonOneDimensional: FormatFn = ({dictionary, file: _file, options}: FormatFnArguments) => { // option to allow verbose output (object) or just the value - const {outputVerbose} = options + const {outputVerbose, propertyConversion} = options const tokens = jsonToFlat(dictionary.allTokens, outputVerbose) - // add file header and convert output - const output = JSON.stringify(tokens, null, 2) + if (propertyConversion === undefined) { + // + const output = JSON.stringify(tokens, null, 2) + // return prettified + return format(output, {parser: 'json', printWidth: 500}) + } + // replace property names + const convertedTokens = Object.fromEntries( + Object.entries(tokens).map(([name, token]) => { + for (const [from, to] of Object.entries(propertyConversion as Record)) { + if (from in token) { + token[to] = token[from] + delete token[from] + } + } + return [name, token] + }), + ) + const output = JSON.stringify(convertedTokens, null, 2) // return prettified - return syncPrettier.format(output, {parser: 'json', printWidth: 500}) + return format(output, {parser: 'json', printWidth: 500}) } diff --git a/src/formats/jsonPostCssFallback.ts b/src/formats/jsonPostCssFallback.ts index 6bb618cf4..fe127b6de 100644 --- a/src/formats/jsonPostCssFallback.ts +++ b/src/formats/jsonPostCssFallback.ts @@ -1,16 +1,16 @@ -import type StyleDictionary from 'style-dictionary' -import syncPrettier from '@prettier/sync' +import {format} from 'prettier' +import type {FormatFn, FormatFnArguments} from 'style-dictionary/types' /** * @description Takes a style dictionary token dictionary and converts it to a one dimensional json object. - * @param StyleDictionary.FormatterArguments + * @param FormatFnArguments * @param options.nameSeparator - separator to use for nested token name * @returns formatted json `string` */ -export const jsonPostCssFallback: StyleDictionary.Formatter = ({dictionary, file: _file}) => { - const tokens = Object.fromEntries(dictionary.allTokens.map(token => [`--${token.name}`, token.value])) +export const jsonPostCssFallback: FormatFn = ({dictionary, file: _file}: FormatFnArguments) => { + const tokens = Object.fromEntries(dictionary.allTokens.map(token => [`--${token.name}`, token.$value])) // add file header and convert output const output = JSON.stringify(tokens, null, 2) // return prettified - return syncPrettier.format(output, {parser: 'json', printWidth: 500}) + return format(output, {parser: 'json', printWidth: 500}) } diff --git a/src/formats/typescriptExportDefinition.test.ts b/src/formats/typescriptExportDefinition.test.ts index 51b0ed996..f91633303 100644 --- a/src/formats/typescriptExportDefinition.test.ts +++ b/src/formats/typescriptExportDefinition.test.ts @@ -1,6 +1,6 @@ -import {typescriptExportDefinition} from './typescriptExportDefinition' -import {getMockFormatterArguments, getMockDictionary, getMockToken} from '../test-utilities' -import syncPrettier from '@prettier/sync' +import {typescriptExportDefinition} from './typescriptExportDefinition.js' +import {getMockFormatterArguments, getMockDictionary, getMockToken} from '../test-utilities/index.js' +import {format} from 'prettier' describe('Format: TypeScript definitions', () => { const dictionary = getMockDictionary({ @@ -8,30 +8,30 @@ describe('Format: TypeScript definitions', () => { subgroup: { red: getMockToken({ $type: 'color', - value: '#FF0000', + $value: '#FF0000', }), stringValue: getMockToken({ - value: '#FF0000', + $value: '#FF0000', }), border: getMockToken({ $type: 'border', - value: { + $value: { color: '#FF0000', style: 'solid', width: '1px', }, }), numberValue: getMockToken({ - value: 20, + $value: 20, }), booleanValue: getMockToken({ - value: true, + $value: true, }), }, }, }) - it('Formats dimension tokens', () => { + it('Formats dimension tokens', async () => { const input = getMockFormatterArguments({ dictionary: getMockDictionary({ tokens: { @@ -39,22 +39,22 @@ describe('Format: TypeScript definitions', () => { size: { px: getMockToken({ $type: 'dimension', - value: '100px', + $value: '100px', }), rem: getMockToken({ $type: 'dimension', - value: '10rem', + $value: '10rem', }), em: getMockToken({ $type: 'dimension', - value: '10em', + $value: '10em', }), }, }, }, }), }) - const expectedOutput = syncPrettier.format( + const expectedOutput = await format( `/** * @description size in px */ @@ -84,17 +84,17 @@ describe('Format: TypeScript definitions', () => { {parser: 'typescript', printWidth: 500}, ) - expect(typescriptExportDefinition(input)).toStrictEqual(expectedOutput) + expect(await typescriptExportDefinition(input)).toStrictEqual(expectedOutput) }) - it('Formats tokens adding prefix', () => { + it('Formats tokens adding prefix', async () => { const input = getMockFormatterArguments({ dictionary, platform: { prefix: 'test', }, }) - const expectedOutput = syncPrettier.format( + const expectedOutput = await format( `/** * @description hex string (6 or 8-digit) */ @@ -122,12 +122,12 @@ describe('Format: TypeScript definitions', () => { {parser: 'typescript', printWidth: 500}, ) - expect(typescriptExportDefinition(input)).toStrictEqual(expectedOutput) + expect(await typescriptExportDefinition(input)).toStrictEqual(expectedOutput) }) - it('Formats tokens without prefix', () => { + it('Formats tokens without prefix', async () => { const input = getMockFormatterArguments({dictionary}) - const expectedOutput = syncPrettier.format( + const expectedOutput = await format( `/** * @description hex string (6 or 8-digit) */ @@ -152,27 +152,25 @@ describe('Format: TypeScript definitions', () => { };`, {parser: 'typescript', printWidth: 500}, ) - expect(typescriptExportDefinition(input)).toStrictEqual(expectedOutput) + expect(await typescriptExportDefinition(input)).toStrictEqual(expectedOutput) }) - it('throws an invalidTokenValue error if a token has an invalid value for the defined type', () => { + it('throws an invalidTokenValue error if a token has an invalid value for the defined type', async () => { const input = getMockFormatterArguments({ dictionary: getMockDictionary({ - // @ts-expect-error: Because of invalid token tokens: { subgroup: { color: { name: 'color token name', - value: 'rgb(100,200,255)', + $value: 'rgb(100,200,255)', $type: 'color', }, }, }, }), }) - - expect(() => { - typescriptExportDefinition(input) - }).toThrowError('Invalid token: "color token name" with type "color" can not have a value of "rgb(100,200,255)"') + expect(async () => await typescriptExportDefinition(input)).rejects.toThrowError( + 'Invalid token: "color token name" with type "color" can not have a value of "rgb(100,200,255)"', + ) }) }) diff --git a/src/formats/typescriptExportDefinition.ts b/src/formats/typescriptExportDefinition.ts index 9c110dd69..b321a47c5 100644 --- a/src/formats/typescriptExportDefinition.ts +++ b/src/formats/typescriptExportDefinition.ts @@ -1,14 +1,12 @@ -import StyleDictionary from 'style-dictionary' -import syncPrettier from '@prettier/sync' -import fs = require('fs') -import path = require('path') -import {treeWalker} from '../utilities/treeWalker' - -import type {FormatterArguments} from 'style-dictionary/types/Format' -import type {w3cTransformedToken} from '../types/w3cTransformedToken' -import {prefixTokens} from './utilities/prefixTokens' - -const {fileHeader} = StyleDictionary.formatHelpers +import {format} from 'prettier' +import {readFileSync} from 'fs' +import {resolve as resolvePath} from 'path' +import {treeWalker} from '../utilities/treeWalker.js' +import type {w3cTransformedToken} from '../types/w3cTransformedToken.js' +import {prefixTokens} from './utilities/prefixTokens.js' +import type {Config, DesignTokens, FormatFn, FormatFnArguments, LocalOptions} from 'style-dictionary/types' +import {fileHeader} from 'style-dictionary/utils' +import {getPropName} from './utilities/getPropName.js' /** * unquoteTypes @@ -31,7 +29,7 @@ const unquoteTypes = (output: string, designTokenTypes: string[]): string => { */ const getTokenType = (tokenTypesPath: string): string => { try { - const designTokenType = fs.readFileSync(path.resolve(tokenTypesPath), {encoding: 'utf-8'}) + const designTokenType = readFileSync(resolvePath(tokenTypesPath), {encoding: 'utf-8'}) return designTokenType } catch (e) { // eslint-disable-next-line no-console @@ -43,8 +41,10 @@ const getTokenType = (tokenTypesPath: string): string => { * @description throws an error stating the token name, type and invalid value * @param token w3cTransformedToken */ -const invalidTokenValueError = (token: w3cTransformedToken) => { - throw new Error(`Invalid token: "${token.name}" with type "${token.$type}" can not have a value of "${token.value}"`) +const invalidTokenValueError = (token: w3cTransformedToken, options: Config & LocalOptions) => { + throw new Error( + `Invalid token: "${token.name}" with type "${token[getPropName('type', options.usesDtcg)]}" can not have a value of "${token[getPropName('value', options.usesDtcg)]}"`, + ) } /** * convertPropToType @@ -52,29 +52,34 @@ const invalidTokenValueError = (token: w3cTransformedToken) => { * @param type * @returns */ -const convertPropToType = (tree: w3cTransformedToken): string => { - if (!Object.prototype.hasOwnProperty.call(tree, 'value')) { +const convertPropToType = (tree: w3cTransformedToken, options: Config & LocalOptions): string => { + const valueProp = getPropName('value', options.usesDtcg) + + if (!Object.prototype.hasOwnProperty.call(tree, valueProp)) { throw new Error(`Invalid token: ${tree}`) } switch (tree.$type) { case 'color': - if (typeof tree.value === 'string' && tree.value[0] === '#') { + if (typeof tree[valueProp] === 'string' && tree[valueProp][0] === '#') { return 'ColorHex' } - return invalidTokenValueError(tree) + return invalidTokenValueError(tree, options) case 'dimension': - if (typeof tree.value === 'string' && tree.value.substring(tree.value.length - 3) === 'rem') return 'SizeRem' - if (typeof tree.value === 'string' && tree.value.substring(tree.value.length - 2) === 'em') return 'SizeEm' - if (typeof tree.value === 'string' && tree.value.substring(tree.value.length - 2) === 'px') return 'SizePx' - return invalidTokenValueError(tree) + if (typeof tree[valueProp] === 'string' && tree[valueProp].substring(tree[valueProp].length - 3) === 'rem') + return 'SizeRem' + if (typeof tree[valueProp] === 'string' && tree[valueProp].substring(tree[valueProp].length - 2) === 'em') + return 'SizeEm' + if (typeof tree[valueProp] === 'string' && tree[valueProp].substring(tree[valueProp].length - 2) === 'px') + return 'SizePx' + return invalidTokenValueError(tree, options) case 'shadow': return 'Shadow' case 'border': return 'Border' default: - if (typeof tree.value === 'number') return 'number' - if (typeof tree.value === 'string') return 'string' - if (typeof tree.value === 'boolean') return 'boolean' + if (typeof tree[valueProp] === 'number') return 'number' + if (typeof tree[valueProp] === 'string') return 'string' + if (typeof tree[valueProp] === 'boolean') return 'boolean' return 'any' } } @@ -83,22 +88,24 @@ const convertPropToType = (tree: w3cTransformedToken): string => { * @param item object * @returns boolean */ -const validTokenNode = (item: w3cTransformedToken | unknown): item is w3cTransformedToken => { - return typeof item === 'object' && item !== null && 'value' in item -} +const validTokenNode = + (usesDtcg?: boolean) => + (item: w3cTransformedToken | unknown): item is w3cTransformedToken => { + return typeof item === 'object' && item !== null && getPropName('value', usesDtcg) in item + } /** * returns a set with every used token type * @param item object * @param validTypes array, all other types will be removed * @returns set of all used token types */ -const getUsedTokenTypes = (tokens: StyleDictionary.DesignTokens, validTypes: string[]): Set => { +const getUsedTokenTypes = (tokens: DesignTokens, validTypes: string[], options: Config & LocalOptions): Set => { // using a set to assure every value only exists once const usedTypes = new Set() // adds type to set - const callback = (tree: unknown) => usedTypes.add(convertPropToType(tree as w3cTransformedToken)) + const callback = (tree: unknown) => usedTypes.add(convertPropToType(tree as w3cTransformedToken, options)) // tree walker adds to usedTypes - treeWalker(tokens, callback, validTokenNode) + treeWalker(tokens, callback, validTokenNode(options.usesDtcg)) // clean up types for (const type of usedTypes) { if (!validTypes.includes(type)) { @@ -112,11 +119,12 @@ const getUsedTokenTypes = (tokens: StyleDictionary.DesignTokens, validTypes: str * @param item object * @returns object */ -const getTokenObjectWithTypes = (tokens: StyleDictionary.DesignTokens): Record => { +const getTokenObjectWithTypes = (tokens: DesignTokens, options: Config & LocalOptions): Record => { + const callback = (tree: unknown) => convertPropToType(tree as w3cTransformedToken, options) // TODO: FIX typescript issues // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore - return treeWalker(tokens, convertPropToType, validTokenNode) as Record + return treeWalker(tokens, callback, validTokenNode(options.usesDtcg)) as Record } /** * getTypeDefinition @@ -126,13 +134,12 @@ const getTokenObjectWithTypes = (tokens: StyleDictionary.DesignTokens): Record { - const usedTypes = getUsedTokenTypes(tokens, ['ColorHex', 'Shadow', 'Border', 'SizeEm', 'SizeRem', 'SizePx']) - const tokenObjectWithTypes = getTokenObjectWithTypes(tokens) +const getTypeDefinition = (tokens: DesignTokens, options: Config & LocalOptions): string => { + // extract options + const {moduleName = `tokens`, tokenTypesPath = `./src/types/`} = options + + const usedTypes = getUsedTokenTypes(tokens, ['ColorHex', 'Shadow', 'Border', 'SizeEm', 'SizeRem', 'SizePx'], options) + const tokenObjectWithTypes = getTokenObjectWithTypes(tokens, options) // get token type declaration from file const designTokenTypes: string[] = [] for (const type of usedTypes) { @@ -153,18 +160,16 @@ const getTypeDefinition = ( * @param arguments [FormatterArguments](https://github.com/amzn/style-dictionary/blob/main/types/Format.d.ts) * @returns formatted `string` */ -export const typescriptExportDefinition: StyleDictionary.Formatter = ({ +export const typescriptExportDefinition: FormatFn = async ({ dictionary, file, options = {}, platform, -}: FormatterArguments): string => { - // extract options - const {moduleName = `tokens`, tokenTypesPath = `./src/types/`} = options +}: FormatFnArguments) => { // add prefix if defined const tokens = prefixTokens(dictionary.tokens, platform) // add file header and convert output - const output = `${fileHeader({file})}\n${getTypeDefinition(tokens, moduleName, tokenTypesPath)}\n` + const output = `${await fileHeader({file})}\n${getTypeDefinition(tokens, options)}\n` // return prettified - return syncPrettier.format(output, {parser: 'typescript', printWidth: 500}) + return format(output, {parser: 'typescript', printWidth: 500}) } diff --git a/src/formats/utilities/getPropName.ts b/src/formats/utilities/getPropName.ts new file mode 100644 index 000000000..3d117ff4d --- /dev/null +++ b/src/formats/utilities/getPropName.ts @@ -0,0 +1,18 @@ +const props = { + dtcg: { + value: '$value', + type: '$type', + description: '$description', + }, + legacy: { + value: 'value', + type: 'type', + description: 'comment', + }, +} as const + +export const getPropName = (prop: 'value' | 'type' | 'description', usesDtcg?: boolean) => { + const type = usesDtcg ? 'dtcg' : 'legacy' + + return props[type][prop] +} diff --git a/src/formats/utilities/jsonToFlat.test.ts b/src/formats/utilities/jsonToFlat.test.ts index 81e07513a..d9f111f11 100644 --- a/src/formats/utilities/jsonToFlat.test.ts +++ b/src/formats/utilities/jsonToFlat.test.ts @@ -1,16 +1,16 @@ -import {getMockToken} from '../../test-utilities' -import {jsonToFlat} from './jsonToFlat' +import {getMockToken} from '../../test-utilities/index.js' +import {jsonToFlat} from './jsonToFlat.js' describe('Utilities: jsonToFlat', () => { const tokens = [ getMockToken({ - value: '#111', + $value: '#111', $type: 'color', path: ['parent', 'subparent', 'child1'], name: 'parent-subparent-child1', }), getMockToken({ - value: '#222', + $value: '#222', $type: 'color', path: ['parent', 'subparent', 'child2'], name: 'parent-subparent-child2', @@ -27,7 +27,7 @@ describe('Utilities: jsonToFlat', () => { it('it returns objects as value of object if return Object is true', () => { expect(jsonToFlat(tokens, true)['parent-subparent-child1']).toEqual({ - value: '#111', + $value: '#111', $type: 'color', path: ['parent', 'subparent', 'child1'], name: 'parent-subparent-child1', @@ -36,7 +36,7 @@ describe('Utilities: jsonToFlat', () => { isSource: true, original: { attributes: {}, - value: 'originalValue', + $value: 'originalValue', }, }) }) diff --git a/src/formats/utilities/jsonToFlat.ts b/src/formats/utilities/jsonToFlat.ts index f22b6cb6c..d075e4e59 100644 --- a/src/formats/utilities/jsonToFlat.ts +++ b/src/formats/utilities/jsonToFlat.ts @@ -1,4 +1,4 @@ -import type StyleDictionary from 'style-dictionary' +import type {TransformedToken} from 'style-dictionary/types' /** * jsonToFlat * @description creates a one dimensional json structure with either a single value or an token object as the value @@ -6,5 +6,5 @@ import type StyleDictionary from 'style-dictionary' * @param returnObject - boolean * @returns flat json three */ -export const jsonToFlat = (tokens: StyleDictionary.TransformedToken[], returnObject = false) => - Object.fromEntries(tokens.map(token => [token.name, returnObject ? token : token.value])) +export const jsonToFlat = (tokens: TransformedToken[], returnObject = false) => + Object.fromEntries(tokens.map(token => [token.name, returnObject ? token : token.$value])) diff --git a/src/formats/utilities/jsonToNestedValue.test.ts b/src/formats/utilities/jsonToNestedValue.test.ts index b31e52445..0bcc087f2 100644 --- a/src/formats/utilities/jsonToNestedValue.test.ts +++ b/src/formats/utilities/jsonToNestedValue.test.ts @@ -1,15 +1,15 @@ -import {jsonToNestedValue} from './jsonToNestedValue' +import {jsonToNestedValue} from './jsonToNestedValue.js' describe('Utilities: jsonToNestedValue', () => { const obj = { parent: { subparent: { child1: { - value: '#111', + $value: '#111', $type: 'color', }, child2: { - value: '#222', + $value: '#222', $type: 'color', }, }, diff --git a/src/formats/utilities/jsonToNestedValue.ts b/src/formats/utilities/jsonToNestedValue.ts index 327fc82ba..60f687fdd 100644 --- a/src/formats/utilities/jsonToNestedValue.ts +++ b/src/formats/utilities/jsonToNestedValue.ts @@ -1,14 +1,15 @@ -import type StyleDictionary from 'style-dictionary' +import type {DesignToken} from 'style-dictionary/types' /** * jsonToNestedValue * @description creates a nested json tree where every final value is the `.value` prop * @param token StyleDictionary.DesignToken * @returns nested json three */ -export const jsonToNestedValue = (token: StyleDictionary.DesignToken | Record) => { +export const jsonToNestedValue = (token: DesignToken | Record) => { // is non-object value if (typeof token !== 'object') return token // is design token + if ('$value' in token) return token.$value if ('value' in token) return token.value // is obj const nextObj = {} diff --git a/src/formats/utilities/prefixTokens.test.ts b/src/formats/utilities/prefixTokens.test.ts index 13f1d7c62..6087ddb1b 100644 --- a/src/formats/utilities/prefixTokens.test.ts +++ b/src/formats/utilities/prefixTokens.test.ts @@ -1,5 +1,5 @@ -import {getMockToken} from '../../test-utilities' -import {prefixTokens} from './prefixTokens' +import {getMockToken} from '../../test-utilities/index.js' +import {prefixTokens} from './prefixTokens.js' describe('Utilities: prefixTokens', () => { const tokens = { diff --git a/src/formats/utilities/prefixTokens.ts b/src/formats/utilities/prefixTokens.ts index 21874e52c..0d8044427 100644 --- a/src/formats/utilities/prefixTokens.ts +++ b/src/formats/utilities/prefixTokens.ts @@ -1,14 +1,11 @@ -import type StyleDictionary from 'style-dictionary' +import type {PlatformConfig, TransformedTokens} from 'style-dictionary/types' /** * @description extract prefix from platform and add to tokens array if defined * @param tokens StyleDictionary.TransformedTokens * @param platform StyleDictionary.Platform * @return StyleDictionary.TransformedTokens */ -export const prefixTokens = ( - tokens: StyleDictionary.TransformedTokens, - platform: StyleDictionary.Platform = {}, -): StyleDictionary.TransformedTokens => { +export const prefixTokens = (tokens: TransformedTokens, platform: PlatformConfig = {}): TransformedTokens => { const {prefix} = platform if (typeof prefix === 'string') { tokens = {[prefix]: tokens} diff --git a/src/parsers/index.ts b/src/parsers/index.ts index 130f68dea..45adb9387 100644 --- a/src/parsers/index.ts +++ b/src/parsers/index.ts @@ -1 +1 @@ -export {w3cJsonParser} from './w3cJsonParser' +export {w3cJsonParser} from './w3cJsonParser.js' diff --git a/src/parsers/w3cJsonParser.test.ts b/src/parsers/w3cJsonParser.test.ts index 079517e42..d8e2da3fc 100644 --- a/src/parsers/w3cJsonParser.test.ts +++ b/src/parsers/w3cJsonParser.test.ts @@ -1,35 +1,35 @@ -import {w3cJsonParser} from './w3cJsonParser' -import {parserOutput as expectedOutput, getMockParserInput} from '../test-utilities' +import {w3cJsonParser} from './w3cJsonParser.js' +import {parserOutput as expectedOutput, getMockParserInput} from '../test-utilities/index.js' describe('Parser: w3c token json5 parser', () => { it('parses valid w3c json5', () => { - const result = w3cJsonParser.parse(getMockParserInput('json5.w3c')) + const result = w3cJsonParser.parser(getMockParserInput('json5.w3c')) expect(result).toStrictEqual(expectedOutput) }) it('parses valid w3c json', () => { - const result = w3cJsonParser.parse(getMockParserInput('json.w3c')) + const result = w3cJsonParser.parser(getMockParserInput('json.w3c')) expect(result).toStrictEqual(expectedOutput) }) it('parses valid json5', () => { - const result = w3cJsonParser.parse(getMockParserInput('json5.default')) + const result = w3cJsonParser.parser(getMockParserInput('json5.default')) expect(result).toStrictEqual(expectedOutput) }) it('parses valid json', () => { - const result = w3cJsonParser.parse(getMockParserInput('json.default')) + const result = w3cJsonParser.parser(getMockParserInput('json.default')) expect(result).toStrictEqual(expectedOutput) }) it('it parses empty object `{}` json', () => { - const result = w3cJsonParser.parse(getMockParserInput('{}')) + const result = w3cJsonParser.parser(getMockParserInput('{}')) expect(result).toStrictEqual({}) }) it('throws an error while parsing invalid empty JSON', () => { expect(() => { - w3cJsonParser.parse(getMockParserInput('', 'invalidFile.json')) + w3cJsonParser.parser(getMockParserInput('', 'invalidFile.json')) }).toThrow(`Invalid json5 file "invalidFile.json".`) }) }) diff --git a/src/parsers/w3cJsonParser.ts b/src/parsers/w3cJsonParser.ts index c28dfcf98..bcedbd9eb 100644 --- a/src/parsers/w3cJsonParser.ts +++ b/src/parsers/w3cJsonParser.ts @@ -1,13 +1,14 @@ -import {parse as json5Parse} from 'json5' -import type StyleDictionary from 'style-dictionary' +import JSON5 from 'json5' +import type {Parser, ParserOptions} from 'style-dictionary/types' /** * @description Parses a valid [json5](https://json5.org) file and replaces `$value` with `value` and `$description` with `comment` to make a w3c standard file compatible with style dictionary * @pattern supported file extensions `.json` or `.json5` */ -export const w3cJsonParser: StyleDictionary.Parser = { +export const w3cJsonParser: Parser = { + name: 'w3cJsonParser', pattern: /\.json5?$/, - parse: ({filePath, contents}: {filePath: string; contents: string}) => { + parser: ({filePath, contents}: ParserOptions) => { // replace $value with value so that style dictionary recognizes it try { contents = contents @@ -17,7 +18,7 @@ export const w3cJsonParser: StyleDictionary.Parser = { .replace(/["|']?\$?type["|']?:/g, '"$type":') .replace(/["|']?\$?extensions["|']?:/g, '"$extensions":') // - return json5Parse(contents) + return JSON5.parse(contents) } catch (e) { throw new Error(`Invalid json5 file "${filePath}".`) } diff --git a/src/platforms/css.ts b/src/platforms/css.ts index 83189a0eb..9dd4a0057 100644 --- a/src/platforms/css.ts +++ b/src/platforms/css.ts @@ -1,7 +1,6 @@ -import {isFromFile, isSource} from '../filters' -import type StyleDictionary from 'style-dictionary' -import type {PlatformInitializer} from '../types/PlatformInitializer' -import type {TransformedToken} from 'style-dictionary' +import {isFromFile, isSource} from '../filters/index.js' +import type {PlatformInitializer} from '../types/PlatformInitializer.ts' +import type {PlatformConfig, TransformedToken} from 'style-dictionary/types' const getCssSelectors = (outputFile: string) => { // check for dark in the beginning of the output filename @@ -21,7 +20,7 @@ const getCssSelectors = (outputFile: string) => { ] } -export const css: PlatformInitializer = (outputFile, prefix, buildPath, options): StyleDictionary.Platform => { +export const css: PlatformInitializer = (outputFile, prefix, buildPath, options): PlatformConfig => { return { prefix, buildPath, diff --git a/src/platforms/deprecatedJson.ts b/src/platforms/deprecatedJson.ts index 4de0fd511..c24ac2b11 100644 --- a/src/platforms/deprecatedJson.ts +++ b/src/platforms/deprecatedJson.ts @@ -1,8 +1,8 @@ -import type StyleDictionary from 'style-dictionary' -import type {PlatformInitializer} from '../types/PlatformInitializer' -import {isDeprecated} from '../filters' +import type {PlatformInitializer} from '../types/PlatformInitializer.js' +import type {PlatformConfig} from 'style-dictionary/types' +import {isDeprecated} from '../filters/index.js' -export const deprecatedJson: PlatformInitializer = (outputFile, prefix, buildPath): StyleDictionary.Platform => ({ +export const deprecatedJson: PlatformInitializer = (outputFile, prefix, buildPath): PlatformConfig => ({ prefix, buildPath, transforms: ['name/pathToDotNotation', 'json/deprecated'], diff --git a/src/platforms/docJson.ts b/src/platforms/docJson.ts index 9d9c28584..bc763114b 100644 --- a/src/platforms/docJson.ts +++ b/src/platforms/docJson.ts @@ -1,8 +1,8 @@ -import type StyleDictionary from 'style-dictionary' -import type {PlatformInitializer} from '../types/PlatformInitializer' -import {isSource} from '../filters' +import type {PlatformInitializer} from '../types/PlatformInitializer.js' +import {isSource} from '../filters/index.js' +import type {PlatformConfig} from 'style-dictionary/types' -export const docJson: PlatformInitializer = (outputFile, prefix, buildPath): StyleDictionary.Platform => ({ +export const docJson: PlatformInitializer = (outputFile, prefix, buildPath): PlatformConfig => ({ prefix, buildPath, transforms: [ @@ -18,6 +18,11 @@ export const docJson: PlatformInitializer = (outputFile, prefix, buildPath): Sty ], options: { basePxFontSize: 16, + propertyConversion: { + $value: 'value', + $type: 'type', + $description: 'description', + }, }, files: [ { diff --git a/src/platforms/fallbacks.ts b/src/platforms/fallbacks.ts index 273bef0c9..f7e2457e9 100644 --- a/src/platforms/fallbacks.ts +++ b/src/platforms/fallbacks.ts @@ -1,8 +1,8 @@ -import type StyleDictionary from 'style-dictionary' -import type {PlatformInitializer} from '../types/PlatformInitializer' -import {isSource} from '../filters' +import type {PlatformInitializer} from '../types/PlatformInitializer.js' +import {isSource} from '../filters/index.js' +import type {PlatformConfig} from 'style-dictionary/types' -export const fallbacks: PlatformInitializer = (outputFile, prefix, buildPath): StyleDictionary.Platform => ({ +export const fallbacks: PlatformInitializer = (outputFile, prefix, buildPath): PlatformConfig => ({ prefix, buildPath, transforms: [ diff --git a/src/platforms/figma.ts b/src/platforms/figma.ts index 77c41423b..2d4d9fd7f 100644 --- a/src/platforms/figma.ts +++ b/src/platforms/figma.ts @@ -1,13 +1,14 @@ -import type StyleDictionary from 'style-dictionary' -import type {PlatformInitializer} from '../types/PlatformInitializer' -import {isSource} from '../filters' +import type {PlatformInitializer} from '../types/PlatformInitializer.js' +import {isSource} from '../filters/index.js' +import type {TransformedToken, PlatformConfig, Config} from 'style-dictionary/types' -const validFigmaToken = (token: StyleDictionary.TransformedToken) => { +const validFigmaToken = async (token: TransformedToken, options: Config) => { + const valueProp = options.usesDtcg ? '$value' : 'value' const validTypes = ['color', 'dimension', 'shadow', 'fontWeight', 'fontFamily', 'number'] // is a siource token, not an included one - if (!isSource(token)) return false + if (!isSource(token) || !token.$type) return false - if (`${token.value}`.substring(token.value.length - 2) === 'em') return false + if (`${token[valueProp]}`.substring(token[valueProp].length - 2) === 'em') return false // has a collection attribute if ( !('$extensions' in token) || @@ -19,20 +20,19 @@ const validFigmaToken = (token: StyleDictionary.TransformedToken) => { return validTypes.includes(token.$type) } -export const figma: PlatformInitializer = (outputFile, prefix, buildPath, options): StyleDictionary.Platform => ({ +export const figma: PlatformInitializer = (outputFile, prefix, buildPath, options): PlatformConfig => ({ prefix, buildPath, transforms: [ 'color/rgbaFloat', - 'name/pathToFigma', - // 'name/pathToSlashNotation', - 'figma/attributes', 'fontFamily/figma', 'float/pixelUnitless', 'dimension/pixelUnitless', // 'border/figma', // 'typography/figma', 'fontWeight/number', + 'figma/attributes', + 'name/pathToFigma', ], options: { basePxFontSize: 16, @@ -47,7 +47,9 @@ export const figma: PlatformInitializer = (outputFile, prefix, buildPath, option files: [ { destination: outputFile, - filter: validFigmaToken, + filter: (token: TransformedToken, config: Config) => { + return validFigmaToken(token, config) + }, format: `json/figma`, options: { outputReferences: true, diff --git a/src/platforms/index.ts b/src/platforms/index.ts index 9bed8e80d..b2bbf7bb4 100644 --- a/src/platforms/index.ts +++ b/src/platforms/index.ts @@ -1,10 +1,10 @@ -export {css} from './css' -export {deprecatedJson} from './deprecatedJson' -export {docJson} from './docJson' -export {fallbacks} from './fallbacks' -export {figma} from './figma' -export {javascript} from './javascript' -export {json} from './json' -export {styleLint} from './styleLint' -export {typeDefinitions} from './typeDefinitions' -export {typescript} from './typescript' +export {css} from './css.js' +export {deprecatedJson} from './deprecatedJson.js' +export {docJson} from './docJson.js' +export {fallbacks} from './fallbacks.js' +export {figma} from './figma.js' +export {javascript} from './javascript.js' +export {json} from './json.js' +export {styleLint} from './styleLint.js' +export {typeDefinitions} from './typeDefinitions.js' +export {typescript} from './typescript.js' diff --git a/src/platforms/javascript.ts b/src/platforms/javascript.ts index 3ffed7908..5df3f08e0 100644 --- a/src/platforms/javascript.ts +++ b/src/platforms/javascript.ts @@ -1,8 +1,8 @@ -import type StyleDictionary from 'style-dictionary' -import type {PlatformInitializer} from '../types/PlatformInitializer' -import {isSource} from '../filters' +import type {PlatformInitializer} from '../types/PlatformInitializer.js' +import type {PlatformConfig} from 'style-dictionary/types' +import {isSource} from '../filters/index.js' -export const javascript: PlatformInitializer = (outputFile, prefix, buildPath): StyleDictionary.Platform => ({ +export const javascript: PlatformInitializer = (outputFile, prefix, buildPath): PlatformConfig => ({ prefix, buildPath, transforms: [ diff --git a/src/platforms/json.ts b/src/platforms/json.ts index e98358043..cbb9ef360 100644 --- a/src/platforms/json.ts +++ b/src/platforms/json.ts @@ -1,8 +1,8 @@ -import type StyleDictionary from 'style-dictionary' -import type {PlatformInitializer} from '../types/PlatformInitializer' -import {isSource} from '../filters' +import type {PlatformInitializer} from '../types/PlatformInitializer.js' +import {isSource} from '../filters/index.js' +import type {PlatformConfig} from 'style-dictionary/types' -export const json: PlatformInitializer = (outputFile, prefix, buildPath): StyleDictionary.Platform => ({ +export const json: PlatformInitializer = (outputFile, prefix, buildPath): PlatformConfig => ({ prefix, buildPath, transforms: [ diff --git a/src/platforms/styleLint.ts b/src/platforms/styleLint.ts index 21fc83cd6..d85ef692c 100644 --- a/src/platforms/styleLint.ts +++ b/src/platforms/styleLint.ts @@ -1,8 +1,8 @@ -import type StyleDictionary from 'style-dictionary' -import type {PlatformInitializer} from '../types/PlatformInitializer' -import {isSource} from '../filters' +import type {PlatformInitializer} from '../types/PlatformInitializer.js' +import {isSource} from '../filters/index.js' +import type {PlatformConfig} from 'style-dictionary/types' -export const styleLint: PlatformInitializer = (outputFile, prefix, buildPath): StyleDictionary.Platform => ({ +export const styleLint: PlatformInitializer = (outputFile, prefix, buildPath): PlatformConfig => ({ prefix, buildPath, transforms: [ diff --git a/src/platforms/typeDefinitions.ts b/src/platforms/typeDefinitions.ts index c70596947..77c91860f 100644 --- a/src/platforms/typeDefinitions.ts +++ b/src/platforms/typeDefinitions.ts @@ -1,9 +1,9 @@ -import type StyleDictionary from 'style-dictionary' -import type {PlatformInitializer} from '../types/PlatformInitializer' -import {isSource} from '../filters' -import {upperCaseFirstCharacter} from '../utilities' +import type {PlatformInitializer} from '../types/PlatformInitializer.js' +import {isSource} from '../filters/index.js' +import {upperCaseFirstCharacter} from '../utilities/index.js' +import type {PlatformConfig} from 'style-dictionary/types' -export const typeDefinitions: PlatformInitializer = (outputFile, prefix, buildPath): StyleDictionary.Platform => ({ +export const typeDefinitions: PlatformInitializer = (outputFile, prefix, buildPath): PlatformConfig => ({ prefix, buildPath, transforms: [ diff --git a/src/platforms/typescript.ts b/src/platforms/typescript.ts index 3743c596c..a49d46670 100644 --- a/src/platforms/typescript.ts +++ b/src/platforms/typescript.ts @@ -1,8 +1,8 @@ -import type StyleDictionary from 'style-dictionary' -import type {PlatformInitializer} from '../types/PlatformInitializer' -import {isSource} from '../filters' +import type {PlatformInitializer} from '../types/PlatformInitializer.js' +import type {PlatformConfig} from 'style-dictionary/types' +import {isSource} from '../filters/index.js' -export const typescript: PlatformInitializer = (outputFile, prefix, buildPath): StyleDictionary.Platform => ({ +export const typescript: PlatformInitializer = (outputFile, prefix, buildPath): PlatformConfig => ({ prefix, buildPath, transforms: [ diff --git a/src/schemas/alphaValue.ts b/src/schemas/alphaValue.ts index adfcda934..123c71346 100644 --- a/src/schemas/alphaValue.ts +++ b/src/schemas/alphaValue.ts @@ -1,5 +1,5 @@ import {z} from 'zod' -import {schemaErrorMessage} from '../utilities/schemaErrorMessage' +import {schemaErrorMessage} from '../utilities/index.js' export const alphaValue = z.any().refine( value => typeof value === 'number' && value >= 0 && value <= 1, diff --git a/src/schemas/alphaValueSchema.test.ts b/src/schemas/alphaValueSchema.test.ts index 1aa1841aa..62dde081a 100644 --- a/src/schemas/alphaValueSchema.test.ts +++ b/src/schemas/alphaValueSchema.test.ts @@ -1,4 +1,4 @@ -import {alphaValue} from './alphaValue' +import {alphaValue} from './alphaValue.js' describe('Schema: alphaValue', () => { it('passes on valid alpha values', () => { diff --git a/src/schemas/baseTokenSchema.test.ts b/src/schemas/baseTokenSchema.test.ts index 1d874a370..2ef0c0836 100644 --- a/src/schemas/baseTokenSchema.test.ts +++ b/src/schemas/baseTokenSchema.test.ts @@ -1,4 +1,4 @@ -import {baseToken} from './baseToken' +import {baseToken} from './baseToken.js' describe('Schema: baseToken', () => { const validToken = { diff --git a/src/schemas/borderToken.ts b/src/schemas/borderToken.ts index 653fa1517..c25884856 100644 --- a/src/schemas/borderToken.ts +++ b/src/schemas/borderToken.ts @@ -1,9 +1,9 @@ import {z} from 'zod' -import {baseToken} from './baseToken' -import {referenceValue} from './referenceValue' -import {colorHexValue} from './colorHexValue' -import {dimensionValue} from './dimensionValue' -import {tokenType} from './tokenType' +import {baseToken} from './baseToken.js' +import {referenceValue} from './referenceValue.js' +import {colorHexValue} from './colorHexValue.js' +import {dimensionValue} from './dimensionValue.js' +import {tokenType} from './tokenType.js' export const borderValue = z.object({ color: z.union([colorHexValue, referenceValue]), diff --git a/src/schemas/borderTokenSchema.test.ts b/src/schemas/borderTokenSchema.test.ts index 3121b5ed7..03a7792ca 100644 --- a/src/schemas/borderTokenSchema.test.ts +++ b/src/schemas/borderTokenSchema.test.ts @@ -1,4 +1,4 @@ -import {borderToken, borderValue} from './borderToken' +import {borderToken, borderValue} from './borderToken.js' const validBorderValue = { color: '#333', diff --git a/src/schemas/collectionSchema.test.ts b/src/schemas/collectionSchema.test.ts index 053f98963..a4c7c5542 100644 --- a/src/schemas/collectionSchema.test.ts +++ b/src/schemas/collectionSchema.test.ts @@ -1,4 +1,4 @@ -import {collection, mode} from './collections' +import {collection, mode} from './collections.js' describe('Schema: collection', () => { const collections = collection([ diff --git a/src/schemas/collections.ts b/src/schemas/collections.ts index 78b06f590..8e6d1b81a 100644 --- a/src/schemas/collections.ts +++ b/src/schemas/collections.ts @@ -1,6 +1,5 @@ import {z} from 'zod' -import {joinFriendly} from '../utilities/joinFriendly' -import {schemaErrorMessage} from '../utilities/schemaErrorMessage' +import {joinFriendly, schemaErrorMessage} from '../utilities/index.js' type Collections = | 'base/color/light' diff --git a/src/schemas/colorHexValue.ts b/src/schemas/colorHexValue.ts index 21884eaae..d39b6a37e 100644 --- a/src/schemas/colorHexValue.ts +++ b/src/schemas/colorHexValue.ts @@ -1,5 +1,5 @@ import {z} from 'zod' -import {schemaErrorMessage} from '../utilities/schemaErrorMessage' +import {schemaErrorMessage} from '../utilities/index.js' const colorHex3RegEx = '^#[0-9a-f]{3}$' const colorHex6RegEx = '^#[0-9a-f]{6}$' diff --git a/src/schemas/colorHexValueSchema.test.ts b/src/schemas/colorHexValueSchema.test.ts index fc012ea2f..2a2d307b1 100644 --- a/src/schemas/colorHexValueSchema.test.ts +++ b/src/schemas/colorHexValueSchema.test.ts @@ -1,4 +1,4 @@ -import {colorHexValue} from './colorHexValue' +import {colorHexValue} from './colorHexValue.js' describe('Schema: colorHexValue', () => { it('passes on valid colorHexValue values', () => { diff --git a/src/schemas/colorToken.ts b/src/schemas/colorToken.ts index 803585b41..94de93728 100644 --- a/src/schemas/colorToken.ts +++ b/src/schemas/colorToken.ts @@ -1,11 +1,11 @@ import {z} from 'zod' -import {colorHexValue} from './colorHexValue' -import {referenceValue} from './referenceValue' -import {alphaValue} from './alphaValue' -import {baseToken} from './baseToken' -import {collection, mode} from './collections' -import {scopes} from './scopes' -import {tokenType} from './tokenType' +import {colorHexValue} from './colorHexValue.js' +import {referenceValue} from './referenceValue.js' +import {alphaValue} from './alphaValue.js' +import {baseToken} from './baseToken.js' +import {collection, mode} from './collections.js' +import {scopes} from './scopes.js' +import {tokenType} from './tokenType.js' export const colorToken = baseToken .extend({ @@ -21,29 +21,32 @@ export const colorToken = baseToken .optional(), $extensions: z .object({ - 'org.primer.figma': z.object({ - collection: collection([ - 'base/color/light', - 'base/color/light-high-contrast', - 'base/color/dark', - 'base/color/dark-dimmed', - 'base/color/dark-high-contrast', - 'mode', - 'pattern/mode', - ]).optional(), - mode: mode([ - 'light', - 'dark', - 'dark dimmed', - 'light high contrast', - 'dark high contrast', - 'light colorblind', - 'dark colorblind', - 'light tritanopia', - 'dark tritanopia', - ]).optional(), - scopes: scopes(['all', 'bgColor', 'fgColor', 'borderColor', 'effectColor']).optional(), - }), + alpha: z.number().min(0).max(1).optional().nullable(), + 'org.primer.figma': z + .object({ + collection: collection([ + 'base/color/light', + 'base/color/light-high-contrast', + 'base/color/dark', + 'base/color/dark-dimmed', + 'base/color/dark-high-contrast', + 'mode', + 'pattern/mode', + ]).optional(), + mode: mode([ + 'light', + 'dark', + 'dark dimmed', + 'light high contrast', + 'dark high contrast', + 'light colorblind', + 'dark colorblind', + 'light tritanopia', + 'dark tritanopia', + ]).optional(), + scopes: scopes(['all', 'bgColor', 'fgColor', 'borderColor', 'effectColor']).optional(), + }) + .optional(), }) .optional(), }) diff --git a/src/schemas/colorTokenSchema.test.ts b/src/schemas/colorTokenSchema.test.ts index badff7f60..e1704edab 100644 --- a/src/schemas/colorTokenSchema.test.ts +++ b/src/schemas/colorTokenSchema.test.ts @@ -1,4 +1,4 @@ -import {colorToken} from './colorToken' +import {colorToken} from './colorToken.js' describe('Schema: colorToken', () => { const validToken = { diff --git a/src/schemas/designToken.ts b/src/schemas/designToken.ts index b23a24cf7..fd8d3b650 100644 --- a/src/schemas/designToken.ts +++ b/src/schemas/designToken.ts @@ -1,16 +1,16 @@ import {z} from 'zod' -import {tokenName} from './tokenName' -import {stringToken} from './stringToken' -import {viewportRangeToken} from './viewportRangeToken' -import {numberToken} from './numberToken' -import {fontWeightToken} from './fontWeightToken' -import {typographyToken} from './typographyToken' -import {borderToken} from './borderToken' -import {dimensionToken} from './dimensionToken' -import {colorToken} from './colorToken' -import {fontFamilyToken} from './fontFamilyToken' -import {shadowToken} from './shadowToken' -import {durationToken} from './durationToken' +import {tokenName} from './tokenName.js' +import {stringToken} from './stringToken.js' +import {viewportRangeToken} from './viewportRangeToken.js' +import {numberToken} from './numberToken.js' +import {fontWeightToken} from './fontWeightToken.js' +import {typographyToken} from './typographyToken.js' +import {borderToken} from './borderToken.js' +import {dimensionToken} from './dimensionToken.js' +import {colorToken} from './colorToken.js' +import {fontFamilyToken} from './fontFamilyToken.js' +import {shadowToken} from './shadowToken.js' +import {durationToken} from './durationToken.js' // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: TODO: fix this diff --git a/src/schemas/dimensionToken.ts b/src/schemas/dimensionToken.ts index e7554f451..d41c352b3 100644 --- a/src/schemas/dimensionToken.ts +++ b/src/schemas/dimensionToken.ts @@ -1,10 +1,10 @@ import {z} from 'zod' -import {baseToken} from './baseToken' -import {referenceValue} from './referenceValue' -import {collection} from './collections' -import {scopes} from './scopes' -import {dimensionValue} from './dimensionValue' -import {tokenType} from './tokenType' +import {baseToken} from './baseToken.js' +import {referenceValue} from './referenceValue.js' +import {collection} from './collections.js' +import {scopes} from './scopes.js' +import {dimensionValue} from './dimensionValue.js' +import {tokenType} from './tokenType.js' export const dimensionToken = baseToken .extend({ diff --git a/src/schemas/dimensionTokenSchema.test.ts b/src/schemas/dimensionTokenSchema.test.ts index a544c91da..09e9e870b 100644 --- a/src/schemas/dimensionTokenSchema.test.ts +++ b/src/schemas/dimensionTokenSchema.test.ts @@ -1,4 +1,4 @@ -import {dimensionToken} from './dimensionToken' +import {dimensionToken} from './dimensionToken.js' describe('Schema: dimensionToken', () => { const validToken = { diff --git a/src/schemas/dimensionValue.ts b/src/schemas/dimensionValue.ts index 91958d6d3..b62733223 100644 --- a/src/schemas/dimensionValue.ts +++ b/src/schemas/dimensionValue.ts @@ -1,5 +1,5 @@ import {z} from 'zod' -import {schemaErrorMessage} from '../utilities/schemaErrorMessage' +import {schemaErrorMessage} from '../utilities/index.js' export const dimensionValue = z.union([ z.string().refine( diff --git a/src/schemas/dimensionValueSchema.test.ts b/src/schemas/dimensionValueSchema.test.ts index 49fc41b42..fd0cd7ff7 100644 --- a/src/schemas/dimensionValueSchema.test.ts +++ b/src/schemas/dimensionValueSchema.test.ts @@ -1,4 +1,4 @@ -import {dimensionValue} from './dimensionValue' +import {dimensionValue} from './dimensionValue.js' describe('Schema: dimensionValue', () => { it('passes on valid values', () => { diff --git a/src/schemas/durationToken.ts b/src/schemas/durationToken.ts index 03e2a9a76..4ea0def1b 100644 --- a/src/schemas/durationToken.ts +++ b/src/schemas/durationToken.ts @@ -1,8 +1,8 @@ import {z} from 'zod' -import {baseToken} from './baseToken' -import {referenceValue} from './referenceValue' -import {durationValue} from './durationValue' -import {tokenType} from './tokenType' +import {baseToken} from './baseToken.js' +import {referenceValue} from './referenceValue.js' +import {durationValue} from './durationValue.js' +import {tokenType} from './tokenType.js' export const durationToken = baseToken .extend({ diff --git a/src/schemas/durationTokenSchema.test.ts b/src/schemas/durationTokenSchema.test.ts index 2fcdb87df..dc579e988 100644 --- a/src/schemas/durationTokenSchema.test.ts +++ b/src/schemas/durationTokenSchema.test.ts @@ -1,4 +1,4 @@ -import {durationToken} from './durationToken' +import {durationToken} from './durationToken.js' describe('Schema: durationToken', () => { const validToken = { diff --git a/src/schemas/durationValue.ts b/src/schemas/durationValue.ts index 893c85cfd..d114f9340 100644 --- a/src/schemas/durationValue.ts +++ b/src/schemas/durationValue.ts @@ -1,5 +1,5 @@ import {z} from 'zod' -import {schemaErrorMessage} from '../utilities/schemaErrorMessage' +import {schemaErrorMessage} from '../utilities/index.js' export const durationValue = z.string().refine( duration => /(^[0-9]+ms$)/.test(duration), diff --git a/src/schemas/durationValueSchema.test.ts b/src/schemas/durationValueSchema.test.ts index 1a11a2c56..ddc68c8f2 100644 --- a/src/schemas/durationValueSchema.test.ts +++ b/src/schemas/durationValueSchema.test.ts @@ -1,4 +1,4 @@ -import {durationValue} from './durationValue' +import {durationValue} from './durationValue.js' describe('Schema: durationValue', () => { it('passes on valid duration values', () => { diff --git a/src/schemas/fontFamilyToken.ts b/src/schemas/fontFamilyToken.ts index bbc5d053d..184b91878 100644 --- a/src/schemas/fontFamilyToken.ts +++ b/src/schemas/fontFamilyToken.ts @@ -1,9 +1,9 @@ import {z} from 'zod' -import {referenceValue} from './referenceValue' -import {baseToken} from './baseToken' -import {tokenType} from './tokenType' -import {collection} from './collections' -import {scopes} from './scopes' +import {referenceValue} from './referenceValue.js' +import {baseToken} from './baseToken.js' +import {tokenType} from './tokenType.js' +import {collection} from './collections.js' +import {scopes} from './scopes.js' export const fontFamilyToken = baseToken .extend({ diff --git a/src/schemas/fontFamilyTokenSchema.test.ts b/src/schemas/fontFamilyTokenSchema.test.ts index f3fb5e901..05d30b6e5 100644 --- a/src/schemas/fontFamilyTokenSchema.test.ts +++ b/src/schemas/fontFamilyTokenSchema.test.ts @@ -1,4 +1,4 @@ -import {fontFamilyToken} from './fontFamilyToken' +import {fontFamilyToken} from './fontFamilyToken.js' describe('Schema: fontFamilyToken', () => { const validToken = { diff --git a/src/schemas/fontWeightToken.ts b/src/schemas/fontWeightToken.ts index dc915ca7f..23308aaa0 100644 --- a/src/schemas/fontWeightToken.ts +++ b/src/schemas/fontWeightToken.ts @@ -1,10 +1,10 @@ import {z} from 'zod' -import {fontWeightValue} from './fontWeightValue' -import {referenceValue} from './referenceValue' -import {baseToken} from './baseToken' -import {tokenType} from './tokenType' -import {collection} from './collections' -import {scopes} from './scopes' +import {fontWeightValue} from './fontWeightValue.js' +import {referenceValue} from './referenceValue.js' +import {baseToken} from './baseToken.js' +import {tokenType} from './tokenType.js' +import {collection} from './collections.js' +import {scopes} from './scopes.js' export const fontWeightToken = baseToken .extend({ diff --git a/src/schemas/fontWeightTokenSchema.test.ts b/src/schemas/fontWeightTokenSchema.test.ts index 5465f9a87..ef77fe052 100644 --- a/src/schemas/fontWeightTokenSchema.test.ts +++ b/src/schemas/fontWeightTokenSchema.test.ts @@ -1,4 +1,4 @@ -import {fontWeightToken} from './fontWeightToken' +import {fontWeightToken} from './fontWeightToken.js' describe('Schema: fontWeightToken', () => { const validToken = { diff --git a/src/schemas/fontWeightValue.test.ts b/src/schemas/fontWeightValue.test.ts index 2655ab94f..4f30c81eb 100644 --- a/src/schemas/fontWeightValue.test.ts +++ b/src/schemas/fontWeightValue.test.ts @@ -1,4 +1,4 @@ -import {fontWeightValue} from './fontWeightValue' +import {fontWeightValue} from './fontWeightValue.js' describe('Schema: fontWeightValue', () => { const allowed = [100, 200, 300, 400, 500, 600, 700, 800, 900, 950] diff --git a/src/schemas/fontWeightValue.ts b/src/schemas/fontWeightValue.ts index 3d6b43d33..c184f7b14 100644 --- a/src/schemas/fontWeightValue.ts +++ b/src/schemas/fontWeightValue.ts @@ -1,5 +1,5 @@ import {z} from 'zod' -import {schemaErrorMessage} from '../utilities/schemaErrorMessage' +import {schemaErrorMessage} from '../utilities/index.js' const allowed = [100, 200, 300, 400, 500, 600, 700, 800, 900, 950] diff --git a/src/schemas/numberToken.ts b/src/schemas/numberToken.ts index 0a507a70b..bfd279437 100644 --- a/src/schemas/numberToken.ts +++ b/src/schemas/numberToken.ts @@ -1,9 +1,9 @@ import {z} from 'zod' -import {baseToken} from './baseToken' -import {referenceValue} from './referenceValue' -import {tokenType} from './tokenType' -import {scopes} from './scopes' -import {collection} from './collections' +import {baseToken} from './baseToken.js' +import {referenceValue} from './referenceValue.js' +import {tokenType} from './tokenType.js' +import {scopes} from './scopes.js' +import {collection} from './collections.js' export const numberToken = baseToken .extend({ diff --git a/src/schemas/numberTokenSchema.test.ts b/src/schemas/numberTokenSchema.test.ts index e98e59e67..b6acaf2a1 100644 --- a/src/schemas/numberTokenSchema.test.ts +++ b/src/schemas/numberTokenSchema.test.ts @@ -1,4 +1,4 @@ -import {numberToken} from './numberToken' +import {numberToken} from './numberToken.js' describe('Schema: numberToken', () => { const validToken = { diff --git a/src/schemas/referenceValue.ts b/src/schemas/referenceValue.ts index 9dec67b44..b92c3e7f3 100644 --- a/src/schemas/referenceValue.ts +++ b/src/schemas/referenceValue.ts @@ -1,5 +1,5 @@ import {z} from 'zod' -import {schemaErrorMessage} from '../utilities/schemaErrorMessage' +import {schemaErrorMessage} from '../utilities/index.js' export const referenceValue = z.string().refine( ref => /^{\w+(\.\w+)*(\.\w+|\.@)}$/.test(ref), diff --git a/src/schemas/referenceValueSchema.test.ts b/src/schemas/referenceValueSchema.test.ts index 6776856c4..cbeae2b51 100644 --- a/src/schemas/referenceValueSchema.test.ts +++ b/src/schemas/referenceValueSchema.test.ts @@ -1,4 +1,4 @@ -import {referenceValue} from './referenceValue' +import {referenceValue} from './referenceValue.js' describe('Schema: referenceValue', () => { it('returns success on valid reference', () => { diff --git a/src/schemas/schema.test.ts b/src/schemas/schema.test.ts index 2ded99889..0e406a254 100644 --- a/src/schemas/schema.test.ts +++ b/src/schemas/schema.test.ts @@ -1,4 +1,4 @@ -import {designToken} from './designToken' +import {designToken} from './designToken.js' describe('Schema validation', () => { const validTokenJson = { diff --git a/src/schemas/scopeTokenSchema.test.ts b/src/schemas/scopeTokenSchema.test.ts index 57323f61f..3ed5211e5 100644 --- a/src/schemas/scopeTokenSchema.test.ts +++ b/src/schemas/scopeTokenSchema.test.ts @@ -1,5 +1,5 @@ -import type {ValidScope} from './scopes' -import {scopes} from './scopes' +import type {ValidScope} from './scopes.js' +import {scopes} from './scopes.js' const validScopes: ValidScope[] = [ 'all', diff --git a/src/schemas/scopes.ts b/src/schemas/scopes.ts index 3575464e8..e6eeeb787 100644 --- a/src/schemas/scopes.ts +++ b/src/schemas/scopes.ts @@ -1,6 +1,5 @@ import {z} from 'zod' -import {joinFriendly} from '../utilities/joinFriendly' -import {schemaErrorMessage} from '../utilities/schemaErrorMessage' +import {joinFriendly, schemaErrorMessage} from '../utilities/index.js' const validScopes = [ 'all', diff --git a/src/schemas/shadowToken.ts b/src/schemas/shadowToken.ts index 7865017bd..28d9f6979 100644 --- a/src/schemas/shadowToken.ts +++ b/src/schemas/shadowToken.ts @@ -1,11 +1,11 @@ import {z} from 'zod' -import {baseToken} from './baseToken' -import {referenceValue} from './referenceValue' -import {colorHexValue} from './colorHexValue' -import {alphaValue} from './alphaValue' -import {dimensionValue} from './dimensionValue' -import {tokenType} from './tokenType' -import {collection, mode} from './collections' +import {baseToken} from './baseToken.js' +import {referenceValue} from './referenceValue.js' +import {colorHexValue} from './colorHexValue.js' +import {alphaValue} from './alphaValue.js' +import {dimensionValue} from './dimensionValue.js' +import {tokenType} from './tokenType.js' +import {collection, mode} from './collections.js' export const shadowValue = z .object({ diff --git a/src/schemas/shadowTokenSchema.test.ts b/src/schemas/shadowTokenSchema.test.ts index 8e60ff4e5..6b0760542 100644 --- a/src/schemas/shadowTokenSchema.test.ts +++ b/src/schemas/shadowTokenSchema.test.ts @@ -1,4 +1,4 @@ -import {shadowValue, shadowToken} from './shadowToken' +import {shadowValue, shadowToken} from './shadowToken.js' const tokenValue = { color: '#000000', diff --git a/src/schemas/stringToken.ts b/src/schemas/stringToken.ts index f13f786bb..6992e5154 100644 --- a/src/schemas/stringToken.ts +++ b/src/schemas/stringToken.ts @@ -1,7 +1,7 @@ import {z} from 'zod' -import {baseToken} from './baseToken' -import {referenceValue} from './referenceValue' -import {tokenType} from './tokenType' +import {baseToken} from './baseToken.js' +import {referenceValue} from './referenceValue.js' +import {tokenType} from './tokenType.js' export const stringToken = baseToken .extend({ diff --git a/src/schemas/stringTokenSchema.test.ts b/src/schemas/stringTokenSchema.test.ts index 721d8e9fa..5370b677c 100644 --- a/src/schemas/stringTokenSchema.test.ts +++ b/src/schemas/stringTokenSchema.test.ts @@ -1,4 +1,4 @@ -import {stringToken} from './stringToken' +import {stringToken} from './stringToken.js' describe('Schema: stringToken', () => { const validToken = { diff --git a/src/schemas/tokenName.ts b/src/schemas/tokenName.ts index 5a3368a7b..9e65e2863 100644 --- a/src/schemas/tokenName.ts +++ b/src/schemas/tokenName.ts @@ -1,5 +1,5 @@ import {z} from 'zod' -import {schemaErrorMessage} from '../utilities/schemaErrorMessage' +import {schemaErrorMessage} from '../utilities/index.js' export const tokenName = z.string().refine( name => /(^[a-z0-9][A-Za-z0-9-]*$|^@$)/.test(name), diff --git a/src/schemas/tokenNameSchema.test.ts b/src/schemas/tokenNameSchema.test.ts index bbfa92fed..155bac573 100644 --- a/src/schemas/tokenNameSchema.test.ts +++ b/src/schemas/tokenNameSchema.test.ts @@ -1,4 +1,4 @@ -import {tokenName} from './tokenName' +import {tokenName} from './tokenName.js' describe('Schema: tokenName', () => { it('parses valid token names', () => { diff --git a/src/schemas/tokenType.ts b/src/schemas/tokenType.ts index 42716510d..e6c321903 100644 --- a/src/schemas/tokenType.ts +++ b/src/schemas/tokenType.ts @@ -1,4 +1,4 @@ import {z} from 'zod' -import type {TokenType} from './validTokenType' +import type {TokenType} from './validTokenType.js' export const tokenType = ($type: TokenType) => z.literal($type) diff --git a/src/schemas/typographyToken.ts b/src/schemas/typographyToken.ts index bdfcbf3d4..ca6a5ab77 100644 --- a/src/schemas/typographyToken.ts +++ b/src/schemas/typographyToken.ts @@ -1,9 +1,9 @@ import {z} from 'zod' -import {referenceValue} from './referenceValue' -import {dimensionValue} from './dimensionValue' -import {baseToken} from './baseToken' -import {fontWeightValue} from './fontWeightValue' -import {tokenType} from './tokenType' +import {referenceValue} from './referenceValue.js' +import {dimensionValue} from './dimensionValue.js' +import {baseToken} from './baseToken.js' +import {fontWeightValue} from './fontWeightValue.js' +import {tokenType} from './tokenType.js' export const typographyValue = z.object({ fontSize: z.union([dimensionValue, referenceValue]), diff --git a/src/schemas/typographyTokenSchema.test.ts b/src/schemas/typographyTokenSchema.test.ts index c2752bcc4..cd9ed2bc7 100644 --- a/src/schemas/typographyTokenSchema.test.ts +++ b/src/schemas/typographyTokenSchema.test.ts @@ -1,4 +1,4 @@ -import {typographyToken, typographyValue} from './typographyToken' +import {typographyToken, typographyValue} from './typographyToken.js' describe('Schema: typographyToken', () => { const validValue = { diff --git a/src/schemas/validTokenType.ts b/src/schemas/validTokenType.ts index 16d305912..bfd43f7af 100644 --- a/src/schemas/validTokenType.ts +++ b/src/schemas/validTokenType.ts @@ -1,6 +1,5 @@ import {z} from 'zod' -import {joinFriendly} from '../utilities/joinFriendly' -import {schemaErrorMessage} from '../utilities/schemaErrorMessage' +import {joinFriendly, schemaErrorMessage} from '../utilities/index.js' const validTypes = [ 'color', diff --git a/src/schemas/validTokenTypeSchema.test.ts b/src/schemas/validTokenTypeSchema.test.ts index 2a2c6c961..8d78a2b22 100644 --- a/src/schemas/validTokenTypeSchema.test.ts +++ b/src/schemas/validTokenTypeSchema.test.ts @@ -1,4 +1,4 @@ -import {validateType} from './validTokenType' +import {validateType} from './validTokenType.js' const token = (type: string) => ({ tokenName: {$value: 1, $type: type}, diff --git a/src/schemas/viewportRangeToken.ts b/src/schemas/viewportRangeToken.ts index d7d074931..a6e989206 100644 --- a/src/schemas/viewportRangeToken.ts +++ b/src/schemas/viewportRangeToken.ts @@ -1,7 +1,7 @@ import {z} from 'zod' -import {baseToken} from './baseToken' -import {referenceValue} from './referenceValue' -import {tokenType} from './tokenType' +import {baseToken} from './baseToken.js' +import {referenceValue} from './referenceValue.js' +import {tokenType} from './tokenType.js' export const viewportRangeToken = baseToken .extend({ diff --git a/src/schemas/viewportRangeTokenSchema.test.ts b/src/schemas/viewportRangeTokenSchema.test.ts index fafa3f9c3..fd7fa51d9 100644 --- a/src/schemas/viewportRangeTokenSchema.test.ts +++ b/src/schemas/viewportRangeTokenSchema.test.ts @@ -1,4 +1,4 @@ -import {viewportRangeToken} from './viewportRangeToken' +import {viewportRangeToken} from './viewportRangeToken.js' describe('Schema: viewportRangeToken', () => { const validToken = { diff --git a/src/test-utilities/getMockDictionary.ts b/src/test-utilities/getMockDictionary.ts index 924bf6305..b31a4aa2b 100644 --- a/src/test-utilities/getMockDictionary.ts +++ b/src/test-utilities/getMockDictionary.ts @@ -1,5 +1,5 @@ import type StyleDictionary from 'style-dictionary' -import {getMockToken} from './getMockToken' +import {getMockToken} from './getMockToken.js' const mockDictionaryDefault = { tokens: { @@ -7,7 +7,7 @@ const mockDictionaryDefault = { red: getMockToken({ name: 'red', description: 'This is a description', - value: 'transformedValue', + $value: 'transformedValue', path: ['tokens', 'subgroup', 'red'], }), }, diff --git a/src/test-utilities/getMockFormatterArguments.ts b/src/test-utilities/getMockFormatterArguments.ts index f9f4ceae5..e1c82e0ad 100644 --- a/src/test-utilities/getMockFormatterArguments.ts +++ b/src/test-utilities/getMockFormatterArguments.ts @@ -1,7 +1,7 @@ import type {FormatterArguments} from 'style-dictionary/types/Format' -import {getMockDictionary} from './' +import {getMockDictionary} from './getMockDictionary.js' -const defaultFormatterArguments: FormatterArguments = { +const defaultFormatterArguments: FormatFnArguments = { dictionary: getMockDictionary(), file: { destination: 'tokens.ts', @@ -9,11 +9,13 @@ const defaultFormatterArguments: FormatterArguments = { showFileHeader: false, }, }, - options: {}, + options: { + usesDtcg: true, + }, platform: {}, } -export const getMockFormatterArguments = (overrides?: Partial): FormatterArguments => { +export const getMockFormatterArguments = (overrides?: Partial): FormatFnArguments => { return { ...defaultFormatterArguments, ...(overrides || {}), diff --git a/src/test-utilities/getMockToken.ts b/src/test-utilities/getMockToken.ts index 66825c540..20f357f17 100644 --- a/src/test-utilities/getMockToken.ts +++ b/src/test-utilities/getMockToken.ts @@ -4,12 +4,12 @@ const mockTokenDefaults = { name: 'tokenName', path: ['path'], original: { - value: 'originalValue', + $value: 'originalValue', attributes: {}, }, filePath: 'file.json', isSource: true, - value: 'transformedValue', + $value: 'transformedValue', attributes: {}, } /** diff --git a/src/test-utilities/index.ts b/src/test-utilities/index.ts index 9b174bd20..dbc4b418a 100644 --- a/src/test-utilities/index.ts +++ b/src/test-utilities/index.ts @@ -1,4 +1,4 @@ -export {getMockDictionary} from './getMockDictionary' -export {getMockToken} from './getMockToken' -export {getMockParserInput, parserOutput} from './getMockParserInput' -export {getMockFormatterArguments} from './getMockFormatterArguments' +export {getMockDictionary} from './getMockDictionary.js' +export {getMockToken} from './getMockToken.js' +export {getMockParserInput, parserOutput} from './getMockParserInput.js' +export {getMockFormatterArguments} from './getMockFormatterArguments.js' diff --git a/src/tokens/functional/color/dark/overrides/dark.protanopia-deuteranopia.json5 b/src/tokens/functional/color/dark/overrides/dark.protanopia-deuteranopia.json5 index fd7740a23..50aa9bf52 100644 --- a/src/tokens/functional/color/dark/overrides/dark.protanopia-deuteranopia.json5 +++ b/src/tokens/functional/color/dark/overrides/dark.protanopia-deuteranopia.json5 @@ -60,6 +60,9 @@ muted: { $value: '{bgColor.neutral.muted}', $type: 'color', + $extensions: { + alpha: 0.1, + }, }, emphasis: { $value: '{bgColor.neutral.emphasis}', @@ -83,6 +86,9 @@ muted: { $value: '{borderColor.muted}', $type: 'color', + $extensions: { + alpha: 0.4, + }, }, emphasis: { $value: '{borderColor.emphasis}', diff --git a/src/tokens/functional/color/dark/overrides/dark.tritanopia.json5 b/src/tokens/functional/color/dark/overrides/dark.tritanopia.json5 index 4efe17198..19959e5db 100644 --- a/src/tokens/functional/color/dark/overrides/dark.tritanopia.json5 +++ b/src/tokens/functional/color/dark/overrides/dark.tritanopia.json5 @@ -73,7 +73,9 @@ muted: { $value: '{base.color.blue.4}', $type: 'color', - alpha: 0.4, + $extensions: { + alpha: 0.4, + }, }, emphasis: { $value: '{base.color.blue.5}', @@ -84,7 +86,9 @@ muted: { $value: '{base.color.red.4}', $type: 'color', - alpha: 0.4, + $extensions: { + alpha: 0.4, + }, }, emphasis: { $value: '{base.color.red.5}', @@ -95,7 +99,9 @@ muted: { $value: '{base.color.red.4}', $type: 'color', - alpha: 0.4, + $extensions: { + alpha: 0.4, + }, }, emphasis: { $value: '{base.color.red.5}', @@ -106,6 +112,9 @@ muted: { $value: '{borderColor.default}', $type: 'color', + $extensions: { + alpha: 0.4, + }, }, emphasis: { $value: '{borderColor.emphasis}', @@ -119,14 +128,23 @@ num: { $value: '{base.color.blue.3}', $type: 'color', + $extensions: { + alpha: 0.3, + }, }, line: { $value: '{base.color.blue.4}', $type: 'color', + $extensions: { + alpha: 0.15, + }, }, word: { $value: '{base.color.blue.4}', $type: 'color', + $extensions: { + alpha: 0.4, + }, }, }, }, diff --git a/src/tokens/functional/color/dark/primitives-dark.json5 b/src/tokens/functional/color/dark/primitives-dark.json5 index 5b20db48b..0994e4c28 100644 --- a/src/tokens/functional/color/dark/primitives-dark.json5 +++ b/src/tokens/functional/color/dark/primitives-dark.json5 @@ -85,6 +85,7 @@ $value: '{base.color.neutral.8}', $type: 'color', $extensions: { + alpha: 0.6, 'org.primer.figma': { collection: 'mode', mode: 'dark', @@ -92,7 +93,6 @@ scopes: ['fgColor'], }, }, - alpha: 0.6, }, link: { $value: '{fgColor.accent}', @@ -597,6 +597,7 @@ $value: '{base.color.red.4}', $type: 'color', $extensions: { + alpha: 0.1, 'org.primer.figma': { collection: 'mode', mode: 'dark', @@ -607,7 +608,6 @@ }, }, }, - alpha: 0.1, }, emphasis: { $value: '{base.color.red.5}', @@ -630,6 +630,7 @@ $value: '{bgColor.danger.muted}', $type: 'color', $extensions: { + alpha: 0.1, 'org.primer.figma': { collection: 'mode', mode: 'dark', @@ -640,7 +641,6 @@ }, }, }, - alpha: 0.1, }, emphasis: { $value: '{bgColor.danger.emphasis}', diff --git a/src/tokens/functional/color/light/overrides/light.protanopia-deuteranopia.json5 b/src/tokens/functional/color/light/overrides/light.protanopia-deuteranopia.json5 index 388c8bc21..4106d8233 100644 --- a/src/tokens/functional/color/light/overrides/light.protanopia-deuteranopia.json5 +++ b/src/tokens/functional/color/light/overrides/light.protanopia-deuteranopia.json5 @@ -35,7 +35,7 @@ emphasis: { $value: '{base.color.blue.5}', $type: 'color', - mix: null + mix: null, }, }, open: { @@ -86,6 +86,9 @@ muted: { $value: '{borderColor.default}', $type: 'color', + $extensions: { + alpha: 0.4, + }, }, emphasis: { $value: '{borderColor.emphasis}', diff --git a/src/tokens/functional/color/light/overrides/light.tritanopia.json5 b/src/tokens/functional/color/light/overrides/light.tritanopia.json5 index 2c44ab7a2..7056ed3a6 100644 --- a/src/tokens/functional/color/light/overrides/light.tritanopia.json5 +++ b/src/tokens/functional/color/light/overrides/light.tritanopia.json5 @@ -31,7 +31,7 @@ emphasis: { $value: '{base.color.blue.5}', $type: 'color', - mix: null + mix: null, }, }, open: { @@ -103,6 +103,9 @@ muted: { $value: '{borderColor.default}', $type: 'color', + $extensions: { + alpha: 0.4, + }, }, emphasis: { $value: '{borderColor.emphasis}', diff --git a/src/tokens/functional/color/light/primitives-light.json5 b/src/tokens/functional/color/light/primitives-light.json5 index 2fc0e9f16..4ed7b0c12 100644 --- a/src/tokens/functional/color/light/primitives-light.json5 +++ b/src/tokens/functional/color/light/primitives-light.json5 @@ -118,7 +118,7 @@ group: 'semantic', scopes: ['fgColor'], }, - } + }, }, accent: { $value: '{base.color.blue.5}', @@ -806,7 +806,7 @@ scopes: ['borderColor'], }, }, - alpha: 0.1 + alpha: 0.1, }, transparent: { $value: '{base.color.transparent}', diff --git a/src/transformers/borderToCss.test.ts b/src/transformers/borderToCss.test.ts index 3c36a7b56..a15042b8a 100644 --- a/src/transformers/borderToCss.test.ts +++ b/src/transformers/borderToCss.test.ts @@ -1,10 +1,10 @@ -import {getMockToken} from '../test-utilities' -import {borderToCss} from './borderToCss' +import {getMockToken} from '../test-utilities/index.js' +import {borderToCss} from './borderToCss.js' describe('Transformer: borderToCss', () => { it('transforms `border` token to css border string', () => { const input = getMockToken({ - value: { + $value: { color: '#000000', style: 'solid', width: '1px', @@ -12,46 +12,49 @@ describe('Transformer: borderToCss', () => { }) const expectedOutput = '#000000 solid 1px' - expect(borderToCss.transformer(input, {})).toStrictEqual(expectedOutput) + expect(borderToCss.transform(input, {}, {})).toStrictEqual(expectedOutput) }) it('throws an error when required values are missing', () => { // missing blur expect(() => - borderToCss.transformer( + borderToCss.transform( getMockToken({ - value: { + $value: { color: '#000000', style: 'solid', }, }), {}, + {}, ), ).toThrowError() // missing spread expect(() => - borderToCss.transformer( + borderToCss.transform( getMockToken({ - value: { + $value: { color: '#000000', width: '1px', }, }), {}, + {}, ), ).toThrowError() // missing offsets expect(() => - borderToCss.transformer( + borderToCss.transform( getMockToken({ - value: { + $value: { style: 'solid', width: '1px', }, }), {}, + {}, ), ).toThrowError() }) diff --git a/src/transformers/borderToCss.ts b/src/transformers/borderToCss.ts index f4d20c2cb..3236c4762 100644 --- a/src/transformers/borderToCss.ts +++ b/src/transformers/borderToCss.ts @@ -1,37 +1,41 @@ -import {isBorder} from '../filters/isBorder' -import type StyleDictionary from 'style-dictionary' -import type {BorderTokenValue} from '../types/BorderTokenValue' +import type {Transform, TransformedToken} from 'style-dictionary/types' +import {isBorder} from '../filters/isBorder.js' +import type {BorderTokenValue} from '../types/BorderTokenValue.js' /** * checks if all required properties exist on shadow token * @param object - BorderTokenValue * @returns void or throws error */ -const checkForBorderTokenProperties = (border: BorderTokenValue) => { - const requiredProperties = ['color', 'width', 'style'] - for (const prop of requiredProperties) { - if (prop in border === false) { - throw new Error(`Missing propery: ${prop} on border token ${JSON.stringify(border)}`) - } +const checkForBorderTokenProperties = (border: Record): border is BorderTokenValue => { + if ('color' in border && 'width' in border && 'style' in border) { + return true } + return false } /** * @description converts w3c border tokens in css border string - * @type value transformer — [StyleDictionary.ValueTransform](https://github.com/amzn/style-dictionary/blob/main/types/Transform.d.ts) + * @type valueTransformer — [StyleDictionary.ValueTransform](https://github.com/amzn/style-dictionary/blob/main/types/Transform.d.ts) * @matcher matches all tokens of $type `border` * @transformer returns css border `string` */ -export const borderToCss: StyleDictionary.Transform = { - type: `value`, +export const borderToCss: Transform = { + name: 'border/css', + type: 'value', transitive: true, - matcher: isBorder, - transformer: ({value}: {value: BorderTokenValue}) => { - // - checkForBorderTokenProperties(value) + filter: isBorder, + transform: (token: TransformedToken) => { + const value = token.$value ?? token.value // if value === string it was probably already transformed if (typeof value === 'string') { return value } + // + if (!checkForBorderTokenProperties(value)) { + throw new Error( + `Invalid border token property ${JSON.stringify(value)}. Must be an object with color, width and style properties.`, + ) + } /* color | style | width */ return `${value.color} ${value.style} ${value.width}` }, diff --git a/src/transformers/colorToHex.test.ts b/src/transformers/colorToHex.test.ts index c104d67ab..1b1edaabc 100644 --- a/src/transformers/colorToHex.test.ts +++ b/src/transformers/colorToHex.test.ts @@ -1,42 +1,46 @@ -import {getMockToken} from '../test-utilities' -import {colorToHex} from './colorToHex' +import {getMockToken} from '../test-utilities/index.js' +import {colorToHex} from './colorToHex.js' -describe('Transformer: colorToHex', () => { +describe('Transform: colorToHex', () => { it('transforms `hex3`, `hex6`, and `hex8` tokens to hex value', () => { - const input = [getMockToken({value: '#123'}), getMockToken({value: '#343434'}), getMockToken({value: '#34343466'})] + const input = [ + getMockToken({$value: '#123'}), + getMockToken({$value: '#343434'}), + getMockToken({$value: '#34343466'}), + ] const expectedOutput = ['#112233', '#343434', '#34343466'] - expect(input.map(item => colorToHex.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => colorToHex.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('transforms `rgb` and `rgba` to hex value', () => { - const input = [getMockToken({value: 'rgb(100,200,255)'}), getMockToken({value: 'rgba(100,200,255, .4)'})] + const input = [getMockToken({$value: 'rgb(100,200,255)'}), getMockToken({$value: 'rgba(100,200,255, .4)'})] const expectedOutput = ['#64c8ff', '#64c8ff66'] - expect(input.map(item => colorToHex.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => colorToHex.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('transforms hex3, hex6 `color` tokens with alpha value', () => { - const input = [getMockToken({value: '#123', alpha: 0.2}), getMockToken({value: '#343434', alpha: 0.4})] + const input = [getMockToken({$value: '#123', alpha: 0.2}), getMockToken({$value: '#343434', alpha: 0.4})] const expectedOutput = ['#11223333', '#34343466'] - expect(input.map(item => colorToHex.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => colorToHex.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('transforms hex8 `color` tokens with alpha value, ignoring the initial alpha from the hex8', () => { - const input = getMockToken({value: '#34343466', alpha: 0.6}) - expect(colorToHex.transformer(input, {})).toStrictEqual('#34343499') + const input = getMockToken({$value: '#34343466', alpha: 0.6}) + expect(colorToHex.transform(input, {}, {})).toStrictEqual('#34343499') }) it('transforms rgb `color` tokens with alpha value', () => { - const input = getMockToken({value: 'rgb(100,200,255)', alpha: 0.6}) - expect(colorToHex.transformer(input, {})).toStrictEqual('#64c8ff99') + const input = getMockToken({$value: 'rgb(100,200,255)', alpha: 0.6}) + expect(colorToHex.transform(input, {}, {})).toStrictEqual('#64c8ff99') }) it('transforms rgba `color` tokens with alpha value, ignoring the initial alpha from the hex8', () => { - const input = getMockToken({value: 'rgba(100,200,255, 0.2)', alpha: 0.6}) - expect(colorToHex.transformer(input, {})).toStrictEqual('#64c8ff99') + const input = getMockToken({$value: 'rgba(100,200,255, 0.2)', alpha: 0.6}) + expect(colorToHex.transform(input, {}, {})).toStrictEqual('#64c8ff99') }) it('transforms rgba `color` tokens with alpha null, ignoring alpha', () => { - const input = getMockToken({value: 'rgba(100,200,255, 0.5)', alpha: null}) - expect(colorToHex.transformer(input, {})).toStrictEqual('#64c8ff80') + const input = getMockToken({$value: 'rgba(100,200,255, 0.5)', alpha: null}) + expect(colorToHex.transform(input, {}, {})).toStrictEqual('#64c8ff80') }) }) diff --git a/src/transformers/colorToHex.ts b/src/transformers/colorToHex.ts index 4da9389b2..99042d39c 100644 --- a/src/transformers/colorToHex.ts +++ b/src/transformers/colorToHex.ts @@ -1,19 +1,20 @@ import {toHex} from 'color2k' -import {isColor} from '../filters' -import type StyleDictionary from 'style-dictionary' -import {getTokenValue} from './utilities/getTokenValue' -import {alpha} from './utilities/alpha' +import {isColor} from '../filters/index.js' +import {getTokenValue} from './utilities/getTokenValue.js' +import type {Transform, TransformedToken} from 'style-dictionary/types' +import {alpha} from './utilities/alpha.js' /** * @description converts color tokens value to `hex6` or `hex8` * @type value transformer — [StyleDictionary.ValueTransform](https://github.com/amzn/style-dictionary/blob/main/types/Transform.d.ts) * @matcher matches all tokens of $type `color` * @transformer returns a `hex` string */ -export const colorToHex: StyleDictionary.Transform = { - type: `value`, +export const colorToHex: Transform = { + name: 'color/hex', + type: 'value', transitive: true, - matcher: isColor, - transformer: (token: StyleDictionary.TransformedToken) => { + filter: isColor, + transform: (token: TransformedToken) => { const alphaValue = token.alpha ?? token.$extensions?.alpha if (alphaValue === null || alphaValue === undefined) { return toHex(getTokenValue(token)) diff --git a/src/transformers/colorToHexMix.test.ts b/src/transformers/colorToHexMix.test.ts index 551e46850..d990e6bc1 100644 --- a/src/transformers/colorToHexMix.test.ts +++ b/src/transformers/colorToHexMix.test.ts @@ -1,18 +1,18 @@ -import {getMockToken} from '../test-utilities' -import {colorToHexMix} from './colorToHexMix' +import {getMockToken} from '../test-utilities/index.js' +import {colorToHexMix} from './colorToHexMix.js' describe('Transformer: colorToHexMix', () => { it('transforms hex3, hex6 `color` tokens with mix', () => { const input = [ getMockToken({ - value: '#567', + $value: '#567', mix: { color: '#000', weight: 0.5, }, }), getMockToken({ - value: '#556677', + $value: '#556677', mix: { color: '#000', weight: 0.5, @@ -20,13 +20,13 @@ describe('Transformer: colorToHexMix', () => { }), ] const expectedOutput = ['#2b333c', '#2b333c'] - expect(input.map(item => colorToHexMix.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => colorToHexMix.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('transforms color with mix but ignores alpha property of token', () => { const input = [ getMockToken({ - value: '#556677', + $value: '#556677', alpha: 0.4, mix: { color: '#000', @@ -35,20 +35,20 @@ describe('Transformer: colorToHexMix', () => { }), ] const expectedOutput = ['#44525f'] - expect(input.map(item => colorToHexMix.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => colorToHexMix.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('transforms color with mix and merges alpha from hex8', () => { const input = [ getMockToken({ - value: '#55667755', + $value: '#55667755', mix: { color: '#000', weight: 0.2, }, }), getMockToken({ - value: '#55667755', + $value: '#55667755', mix: { color: '#00000022', weight: 0.2, @@ -56,28 +56,28 @@ describe('Transformer: colorToHexMix', () => { }), ] const expectedOutput = ['#51617177', '#3e4a574b'] - expect(input.map(item => colorToHexMix.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => colorToHexMix.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('ignore mix if undefined or weight or color is undefined', () => { const input = [ getMockToken({ - value: '#556677', + $value: '#556677', }), getMockToken({ - value: '#556677', + $value: '#556677', mix: { weight: 0.2, }, }), getMockToken({ - value: '#556677', + $value: '#556677', mix: { color: '#000000', }, }), ] const expectedOutput = ['#556677', '#556677', '#556677'] - expect(input.map(item => colorToHexMix.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => colorToHexMix.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) }) diff --git a/src/transformers/colorToHexMix.ts b/src/transformers/colorToHexMix.ts index 872489a68..ff63a3656 100644 --- a/src/transformers/colorToHexMix.ts +++ b/src/transformers/colorToHexMix.ts @@ -1,19 +1,20 @@ import {toHex} from 'color2k' -import {isColorWithMix} from '../filters' -import type StyleDictionary from 'style-dictionary' -import {getTokenValue} from './utilities/getTokenValue' -import mix from './utilities/mix' +import {isColorWithMix} from '../filters/index.js' +import {getTokenValue} from './utilities/getTokenValue.js' +import mix from './utilities/mix.js' +import type {Transform, TransformedToken} from 'style-dictionary/types' /** * @description replaces tokens value with `hex8` color using the tokens `alpha` property to specify the value used for alpha * @type value transformer — [StyleDictionary.ValueTransform](https://github.com/amzn/style-dictionary/blob/main/types/Transform.d.ts) * @matcher matches all tokens of $type `color` with an `alpha` property * @transformer returns `hex8` string */ -export const colorToHexMix: StyleDictionary.Transform = { - type: `value`, +export const colorToHexMix: Transform = { + name: 'color/hexMix', + type: 'value', transitive: true, - matcher: isColorWithMix, - transformer: (token: StyleDictionary.TransformedToken) => { + filter: isColorWithMix, + transform: (token: TransformedToken) => { return toHex(mix(getTokenValue(token), token.mix?.color || getTokenValue(token), token.mix?.weight || 0)) }, } diff --git a/src/transformers/colorToRgbAlpha.test.ts b/src/transformers/colorToRgbAlpha.test.ts index 3c09eba24..f286178e3 100644 --- a/src/transformers/colorToRgbAlpha.test.ts +++ b/src/transformers/colorToRgbAlpha.test.ts @@ -1,33 +1,33 @@ -import {getMockToken} from '../test-utilities' -import {colorToRgbAlpha} from './colorToRgbAlpha' +import {getMockToken} from '../test-utilities/index.js' +import {colorToRgbAlpha} from './colorToRgbAlpha.js' describe('Transformer: colorToRgbAlpha', () => { it('transforms hex3, hex6 `color` tokens with alpha value', () => { - const input = [getMockToken({value: '#123', alpha: 0.2}), getMockToken({value: '#343434', alpha: 0.4})] + const input = [getMockToken({$value: '#123', alpha: 0.2}), getMockToken({$value: '#343434', alpha: 0.4})] const expectedOutput = ['rgba(17, 34, 51, 0.2)', 'rgba(52, 52, 52, 0.4)'] - expect(input.map(item => colorToRgbAlpha.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => colorToRgbAlpha.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('transforms hex8 `color` tokens with alpha value, ignoring the initial alpha from the hex8', () => { - const input = getMockToken({value: '#34343466', alpha: 0.6}) + const input = getMockToken({$value: '#34343466', alpha: 0.6}) const expectedOutput = 'rgba(52, 52, 52, 0.6)' - expect(colorToRgbAlpha.transformer(input, {})).toStrictEqual(expectedOutput) + expect(colorToRgbAlpha.transform(input, {}, {})).toStrictEqual(expectedOutput) }) it('transforms rgb `color` tokens with alpha value', () => { - const input = getMockToken({value: 'rgb(100,200,255)', alpha: 0.6}) + const input = getMockToken({$value: 'rgb(100,200,255)', alpha: 0.6}) const expectedOutput = 'rgba(100, 200, 255, 0.6)' - expect(colorToRgbAlpha.transformer(input, {})).toStrictEqual(expectedOutput) + expect(colorToRgbAlpha.transform(input, {}, {})).toStrictEqual(expectedOutput) }) it('transforms rgba `color` tokens with alpha value, ignoring the initial alpha from the hex8', () => { - const input = getMockToken({value: 'rgba(100,200,255, 0.2)', alpha: 0.6}) + const input = getMockToken({$value: 'rgba(100,200,255, 0.2)', alpha: 0.6}) const expectedOutput = 'rgba(100, 200, 255, 0.6)' - expect(colorToRgbAlpha.transformer(input, {})).toStrictEqual(expectedOutput) + expect(colorToRgbAlpha.transform(input, {}, {})).toStrictEqual(expectedOutput) }) it('transforms rgba `color` tokens with alpha null, ignoring alpha', () => { - const input = getMockToken({value: 'rgba(100,200,255, 0.5)', alpha: null}) + const input = getMockToken({$value: 'rgba(100,200,255, 0.5)', alpha: null}) const expectedOutput = 'rgba(100,200,255, 0.5)' - expect(colorToRgbAlpha.transformer(input, {})).toStrictEqual(expectedOutput) + expect(colorToRgbAlpha.transform(input, {}, {})).toStrictEqual(expectedOutput) }) }) diff --git a/src/transformers/colorToRgbAlpha.ts b/src/transformers/colorToRgbAlpha.ts index 6f480a497..896f07904 100644 --- a/src/transformers/colorToRgbAlpha.ts +++ b/src/transformers/colorToRgbAlpha.ts @@ -1,19 +1,20 @@ -import {isColorWithAlpha} from '../filters' -import {alpha} from './utilities/alpha' -import type StyleDictionary from 'style-dictionary' -import {getTokenValue} from './utilities/getTokenValue' +import {isColorWithAlpha} from '../filters/index.js' +import {alpha} from './utilities/alpha.js' +import {getTokenValue} from './utilities/getTokenValue.js' +import type {PlatformConfig, Transform, TransformedToken} from 'style-dictionary/types' /** * @description replaces tokens value with `rgba` color using the tokens `alpha` property to specify the value used for alpha * @type value transformer — [StyleDictionary.ValueTransform](https://github.com/amzn/style-dictionary/blob/main/types/Transform.d.ts) * @matcher matches all tokens of $type `color` with an `alpha` property * @transformer returns `rgba` string */ -export const colorToRgbAlpha: StyleDictionary.Transform = { - type: `value`, +export const colorToRgbAlpha: Transform = { + name: 'color/rgbAlpha', + type: 'value', transitive: true, - matcher: isColorWithAlpha, - transformer: (token: StyleDictionary.TransformedToken) => { - if (token.alpha === null) return getTokenValue(token) - return alpha(getTokenValue(token), token.alpha, token) + filter: isColorWithAlpha, + transform: (token: TransformedToken, config: PlatformConfig) => { + if (token.alpha === null) return getTokenValue(token, undefined, config) + return alpha(getTokenValue(token, undefined, config), token.alpha, token) }, } diff --git a/src/transformers/colorToRgbaFloat.test.ts b/src/transformers/colorToRgbaFloat.test.ts index 9c3e32b2d..62fe5b73c 100644 --- a/src/transformers/colorToRgbaFloat.test.ts +++ b/src/transformers/colorToRgbaFloat.test.ts @@ -1,10 +1,14 @@ -import {getMockToken} from '../test-utilities' -import {colorToRgbaFloat} from './colorToRgbaFloat' -import {rgbaFloatToHex} from './utilities/rgbaFloatToHex' +import {getMockToken} from '../test-utilities/index.js' +import {colorToRgbaFloat} from './colorToRgbaFloat.js' +import {rgbaFloatToHex} from './utilities/rgbaFloatToHex.js' describe('Transformer: colorToRgbaFloat', () => { it('transforms `hex3`, `hex6`, and `hex8` tokens to rgb float value', () => { - const input = [getMockToken({value: '#123'}), getMockToken({value: '#343434'}), getMockToken({value: '#34343466'})] + const input = [ + getMockToken({$value: '#123'}), + getMockToken({$value: '#343434'}), + getMockToken({$value: '#34343466'}), + ] const expectedOutput = [ { r: 0.06666666666666667, @@ -25,11 +29,11 @@ describe('Transformer: colorToRgbaFloat', () => { a: 0.4, }, ] - expect(input.map(item => colorToRgbaFloat.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => colorToRgbaFloat.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('transforms `rgb` and `rgba` to rgb float value', () => { - const input = [getMockToken({value: 'rgb(100,200,255)'}), getMockToken({value: 'rgba(100,200,255, .4)'})] + const input = [getMockToken({$value: 'rgb(100,200,255)'}), getMockToken({$value: 'rgba(100,200,255, .4)'})] const expectedOutput = [ { r: 0.39215686274509803, @@ -44,17 +48,17 @@ describe('Transformer: colorToRgbaFloat', () => { a: 0.4, }, ] - expect(input.map(item => colorToRgbaFloat.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => colorToRgbaFloat.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('transforms `color` tokens including alpha value', () => { expect( [ - getMockToken({value: '#343434', alpha: 0.4}), - getMockToken({value: '#34343466', alpha: 0.9}), - getMockToken({value: 'rgb(100,200,255)', alpha: 0.4}), - getMockToken({value: 'rgba(100,200,255,0.8)', alpha: 0.4}), - ].map(item => colorToRgbaFloat.transformer(item, {})), + getMockToken({$value: '#343434', alpha: 0.4}), + getMockToken({$value: '#34343466', alpha: 0.9}), + getMockToken({$value: 'rgb(100,200,255)', alpha: 0.4}), + getMockToken({$value: 'rgba(100,200,255,0.8)', alpha: 0.4}), + ].map(item => colorToRgbaFloat.transform(item, {}, {})), ).toStrictEqual([ { r: 0.20392156862745098, @@ -86,11 +90,11 @@ describe('Transformer: colorToRgbaFloat', () => { it('transforms `color` tokens including mix', () => { expect( [ - getMockToken({name: 'Mix of reds', value: '#a40e26', mix: {color: '#660018', weight: 0.4}}), - getMockToken({value: '#34343466', mix: {color: '#000000'}}), - getMockToken({value: 'rgb(100,200,255)', mix: {weight: 0.5}}), - getMockToken({value: 'rgba(100,200,255,0.8)', mix: {color: undefined, weight: undefined}}), - ].map(item => colorToRgbaFloat.transformer(item, {})), + getMockToken({name: 'Mix of reds', $value: '#a40e26', mix: {color: '#660018', weight: 0.4}}), + getMockToken({$value: '#34343466', mix: {color: '#000000'}}), + getMockToken({$value: 'rgb(100,200,255)', mix: {weight: 0.5}}), + getMockToken({$value: 'rgba(100,200,255,0.8)', mix: {color: undefined, weight: undefined}}), + ].map(item => colorToRgbaFloat.transform(item, {}, {})), ).toStrictEqual([ { b: 0.12549019607843137, @@ -120,12 +124,12 @@ describe('Transformer: colorToRgbaFloat', () => { expect( [ - getMockToken({name: 'Mix of reds', value: '#a40e26', mix: {color: '#660018', weight: 0.4}}), - getMockToken({value: '#34343466', mix: {color: '#000000'}}), - getMockToken({value: 'rgb(100,200,255)', mix: {weight: 0.5}}), - getMockToken({value: 'rgba(100,200,255,0.8)', mix: {color: undefined, weight: undefined}}), + getMockToken({name: 'Mix of reds', $value: '#a40e26', mix: {color: '#660018', weight: 0.4}}), + getMockToken({$value: '#34343466', mix: {color: '#000000'}}), + getMockToken({$value: 'rgb(100,200,255)', mix: {weight: 0.5}}), + getMockToken({$value: 'rgba(100,200,255,0.8)', mix: {color: undefined, weight: undefined}}), ] - .map(item => colorToRgbaFloat.transformer(item, {})) + .map(item => colorToRgbaFloat.transform(item, {}, {}) as {r: number; g: number; b: number; a?: number}) .map(item => rgbaFloatToHex(item)), ).toStrictEqual(['#8b0820', '#34343466', '#64c8ff', '#64c8ffcc']) }) @@ -133,7 +137,7 @@ describe('Transformer: colorToRgbaFloat', () => { it('it forwards `rgb float` values', () => { const input = [ getMockToken({ - value: { + $value: { r: 0.39215686274509803, g: 0.7843137254901961, b: 1, @@ -141,7 +145,7 @@ describe('Transformer: colorToRgbaFloat', () => { }, }), getMockToken({ - value: { + $value: { r: 0.39215686274509803, g: 0.7843137254901961, b: 1, @@ -163,6 +167,6 @@ describe('Transformer: colorToRgbaFloat', () => { a: 0.4, }, ] - expect(input.map(item => colorToRgbaFloat.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => colorToRgbaFloat.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) }) diff --git a/src/transformers/colorToRgbaFloat.ts b/src/transformers/colorToRgbaFloat.ts index 3bcc94c39..e87919f65 100644 --- a/src/transformers/colorToRgbaFloat.ts +++ b/src/transformers/colorToRgbaFloat.ts @@ -1,13 +1,13 @@ import {toHex} from 'color2k' -import {isColor} from '../filters' -import type StyleDictionary from 'style-dictionary' -import {getTokenValue} from './utilities/getTokenValue' -import {rgbaFloatToHex} from './utilities/rgbaFloatToHex' -import mix from './utilities/mix' -import {hexToRgbaFloat} from './utilities/hexToRgbaFloat' -import {isRgbaFloat} from './utilities/isRgbaFloat' +import {isColor} from '../filters/index.js' +import {getTokenValue} from './utilities/getTokenValue.js' +import {rgbaFloatToHex} from './utilities/rgbaFloatToHex.js' +import mix from './utilities/mix.js' +import {hexToRgbaFloat} from './utilities/hexToRgbaFloat.js' +import {isRgbaFloat} from './utilities/isRgbaFloat.js' +import type {Transform, TransformedToken} from 'style-dictionary/types' -const toRgbaFloat = (token: StyleDictionary.TransformedToken, alpha?: number) => { +const toRgbaFloat = (token: TransformedToken, alpha: undefined | number = undefined) => { let tokenValue = getTokenValue(token) let tokenMixColor = token.mix?.color // get hex value from color string @@ -32,13 +32,15 @@ const toRgbaFloat = (token: StyleDictionary.TransformedToken, alpha?: number) => * @matcher matches all tokens of $type `color` * @transformer returns a `rgb` float object */ -export const colorToRgbaFloat: StyleDictionary.Transform = { - type: `value`, +export const colorToRgbaFloat: Transform = { + name: 'color/rgbaFloat', + type: 'value', transitive: true, - matcher: isColor, - transformer: (token: StyleDictionary.TransformedToken) => { + filter: isColor, + transform: (token: TransformedToken) => { + const value = getTokenValue(token) // skip if value is already rgb float - if (isRgbaFloat(token.value) && !('mix' in token) && !('alpha' in token)) return token.value + if (isRgbaFloat(value) && !('mix' in token) && !('alpha' in token)) return value // convert hex or rgb values to rgba float return toRgbaFloat(token, token.alpha) }, diff --git a/src/transformers/dimensionToPixelUnitless.test.ts b/src/transformers/dimensionToPixelUnitless.test.ts index c5d45deef..25e124cc5 100644 --- a/src/transformers/dimensionToPixelUnitless.test.ts +++ b/src/transformers/dimensionToPixelUnitless.test.ts @@ -1,5 +1,5 @@ -import {getMockToken} from '../test-utilities' -import {dimensionToPixelUnitless} from './dimensionToPixelUnitless' +import {getMockToken} from '../test-utilities/index.js' +import {dimensionToPixelUnitless} from './dimensionToPixelUnitless.js' describe('Transformer: dimensionToPixelUnitless', () => { it('transforms pixel string tokens', () => { @@ -9,7 +9,7 @@ describe('Transformer: dimensionToPixelUnitless', () => { }), ] const expectedOutput = [16] - expect(input.map(item => dimensionToPixelUnitless.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => dimensionToPixelUnitless.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('does not transforms number or number string', () => { @@ -22,7 +22,7 @@ describe('Transformer: dimensionToPixelUnitless', () => { }), ] const expectedOutput = ['16', 16] - expect(input.map(item => dimensionToPixelUnitless.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => dimensionToPixelUnitless.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('transforms rem', () => { @@ -32,7 +32,7 @@ describe('Transformer: dimensionToPixelUnitless', () => { }), ] const expectedOutput = [16] - expect(input.map(item => dimensionToPixelUnitless.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => dimensionToPixelUnitless.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('transforms rem with custom basePxFontSize', () => { @@ -42,7 +42,7 @@ describe('Transformer: dimensionToPixelUnitless', () => { }), ] const expectedOutput = [20] - expect(input.map(item => dimensionToPixelUnitless.transformer(item, {basePxFontSize: 10}))).toStrictEqual( + expect(input.map(item => dimensionToPixelUnitless.transform(item, {basePxFontSize: 10}, {}))).toStrictEqual( expectedOutput, ) }) @@ -54,7 +54,7 @@ describe('Transformer: dimensionToPixelUnitless', () => { }), ] const expectedOutput = ['1em'] - expect(input.map(item => dimensionToPixelUnitless.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => dimensionToPixelUnitless.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('transforms 0 to 0', () => { @@ -70,7 +70,7 @@ describe('Transformer: dimensionToPixelUnitless', () => { }), ] const expectedOutput = [0, 0, 0] - expect(input.map(item => dimensionToPixelUnitless.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => dimensionToPixelUnitless.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('throws on invalid tokens', () => { @@ -88,6 +88,6 @@ describe('Transformer: dimensionToPixelUnitless', () => { value: null, }), ] - expect(() => input.map(item => dimensionToPixelUnitless.transformer(item, {}))).toThrow() + expect(() => input.map(item => dimensionToPixelUnitless.transform(item, {}, {}))).toThrow() }) }) diff --git a/src/transformers/dimensionToPixelUnitless.ts b/src/transformers/dimensionToPixelUnitless.ts index b907f63a8..f6b082743 100644 --- a/src/transformers/dimensionToPixelUnitless.ts +++ b/src/transformers/dimensionToPixelUnitless.ts @@ -1,13 +1,12 @@ -import {isDimension} from '../filters' -import type StyleDictionary from 'style-dictionary' -import type {Platform} from 'style-dictionary' +import {isDimension} from '../filters/index.js' +import type {PlatformConfig, Transform, TransformedToken, Config} from 'style-dictionary/types' /** * @description base font size from options or 16 * @param options * @returns number */ -const getBasePxFontSize = (options?: Platform): number => (options && options.basePxFontSize) || 16 +const getBasePxFontSize = (options?: PlatformConfig): number => (options && options.basePxFontSize) || 16 /** * @description checks if token value has a specific unit @@ -29,17 +28,18 @@ const hasUnit = (value: string | number, unit: string): boolean => { * @matcher matches all tokens of $type `dimension` * @transformer returns a float number */ -export const dimensionToPixelUnitless: StyleDictionary.Transform = { - type: `value`, +export const dimensionToPixelUnitless: Transform = { + name: 'dimension/pixelUnitless', + type: 'value', transitive: true, - matcher: isDimension, - transformer: (token: StyleDictionary.TransformedToken, options?: Platform) => { - const baseFont = getBasePxFontSize(options) - const floatVal = parseFloat(token.value) - + filter: isDimension, + transform: (token: TransformedToken, config: PlatformConfig, options: Config) => { + const valueProp = options.usesDtcg ? '$value' : 'value' + const baseFont = getBasePxFontSize(config) + const floatVal = parseFloat(token[valueProp]) if (isNaN(floatVal)) { throw new Error( - `Invalid dimension token: '${token.name}: ${token.value}' is not valid and cannot be transform to 'float' \n`, + `Invalid dimension token: '${token.path.join('.')}: ${token[valueProp]}' is not valid and cannot be transform to 'float' \n`, ) } @@ -47,14 +47,14 @@ export const dimensionToPixelUnitless: StyleDictionary.Transform = { return 0 } - if (hasUnit(token.value, 'rem')) { + if (hasUnit(token[valueProp], 'rem')) { return floatVal * baseFont } - if (hasUnit(token.value, 'px')) { + if (hasUnit(token[valueProp], 'px')) { return floatVal } - return token.value + return token[valueProp] }, } diff --git a/src/transformers/dimensionToRem.test.ts b/src/transformers/dimensionToRem.test.ts index decaf27e4..21c06bb89 100644 --- a/src/transformers/dimensionToRem.test.ts +++ b/src/transformers/dimensionToRem.test.ts @@ -1,5 +1,5 @@ -import {getMockToken} from '../test-utilities' -import {dimensionToRem} from './dimensionToRem' +import {getMockToken} from '../test-utilities/index.js' +import {dimensionToRem} from './dimensionToRem.js' describe('Transformer: dimensionToRem', () => { it('transforms pixel string tokens to rem', () => { @@ -9,7 +9,7 @@ describe('Transformer: dimensionToRem', () => { }), ] const expectedOutput = ['1rem'] - expect(input.map(item => dimensionToRem.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => dimensionToRem.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('transforms number to rem', () => { @@ -22,7 +22,7 @@ describe('Transformer: dimensionToRem', () => { }), ] const expectedOutput = ['1rem', '1rem'] - expect(input.map(item => dimensionToRem.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => dimensionToRem.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('transforms rem to rem', () => { @@ -32,7 +32,7 @@ describe('Transformer: dimensionToRem', () => { }), ] const expectedOutput = ['1rem'] - expect(input.map(item => dimensionToRem.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => dimensionToRem.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('does not transforms em to rem', () => { @@ -42,7 +42,7 @@ describe('Transformer: dimensionToRem', () => { }), ] const expectedOutput = ['1em'] - expect(input.map(item => dimensionToRem.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => dimensionToRem.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('transforms 0 to 0', () => { @@ -58,7 +58,7 @@ describe('Transformer: dimensionToRem', () => { }), ] const expectedOutput = ['0', '0', '0'] - expect(input.map(item => dimensionToRem.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => dimensionToRem.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('throws on invalid tokens', () => { @@ -76,6 +76,6 @@ describe('Transformer: dimensionToRem', () => { value: null, }), ] - expect(() => input.map(item => dimensionToRem.transformer(item, {}))).toThrow() + expect(() => input.map(item => dimensionToRem.transform(item, {}, {}))).toThrow() }) }) diff --git a/src/transformers/dimensionToRem.ts b/src/transformers/dimensionToRem.ts index fb0ed0688..5aaba8e70 100644 --- a/src/transformers/dimensionToRem.ts +++ b/src/transformers/dimensionToRem.ts @@ -1,13 +1,12 @@ -import {isDimension} from '../filters' -import type StyleDictionary from 'style-dictionary' -import type {Platform} from 'style-dictionary' +import {isDimension} from '../filters/index.js' +import type {Config, PlatformConfig, Transform, TransformedToken} from 'style-dictionary/types' /** * @description base font size from options or 16 * @param options * @returns number */ -const getBasePxFontSize = (options?: Platform): number => (options && options.basePxFontSize) || 16 +const getBasePxFontSize = (options?: PlatformConfig): number => (options && options.basePxFontSize) || 16 /** * @description checks if token value has a specific unit @@ -29,17 +28,19 @@ const hasUnit = (value: string | number, unit: string): boolean => { * @matcher matches all tokens of $type `dimension` * @transformer returns a `rem` string */ -export const dimensionToRem: StyleDictionary.Transform = { - type: `value`, +export const dimensionToRem: Transform = { + name: 'dimension/rem', + type: 'value', transitive: true, - matcher: isDimension, - transformer: (token: StyleDictionary.TransformedToken, options?: Platform) => { - const baseFont = getBasePxFontSize(options) - const floatVal = parseFloat(token.value) + filter: isDimension, + transform: (token: TransformedToken, config: PlatformConfig, options: Config) => { + const valueProp = options.usesDtcg ? '$value' : 'value' + const baseFont = getBasePxFontSize(config) + const floatVal = parseFloat(token[valueProp]) if (isNaN(floatVal)) { throw new Error( - `Invalid dimension token: '${token.name}: ${token.value}' is not valid and cannot be transform to 'rem' \n`, + `Invalid dimension token: '${token.name}: ${token[valueProp]}' is not valid and cannot be transform to 'rem' \n`, ) } @@ -47,8 +48,8 @@ export const dimensionToRem: StyleDictionary.Transform = { return '0' } - if (hasUnit(token.value, 'rem') || hasUnit(token.value, 'em')) { - return token.value + if (hasUnit(token[valueProp], 'rem') || hasUnit(token[valueProp], 'em')) { + return token[valueProp] } return `${floatVal / baseFont}rem` diff --git a/src/transformers/dimensionToRemPxArray.ts b/src/transformers/dimensionToRemPxArray.ts index 758b78334..f5e0966ea 100644 --- a/src/transformers/dimensionToRemPxArray.ts +++ b/src/transformers/dimensionToRemPxArray.ts @@ -1,6 +1,5 @@ -import {isDimension} from '../filters' -import type StyleDictionary from 'style-dictionary' -import type {Platform} from 'style-dictionary' +import {isDimension} from '../filters/index.js' +import type {Config, PlatformConfig, Transform, TransformedToken} from 'style-dictionary/types' type SizePx = '0' | `${number}px` type SizeRem = '0' | `${number}rem` @@ -11,7 +10,7 @@ type SizeEm = '0' | `${number}em` * @param options * @returns number */ -const getBasePxFontSize = (options?: Platform): number => (options && options.basePxFontSize) || 16 +const getBasePxFontSize = (options?: PlatformConfig): number => (options && options.basePxFontSize) || 16 /** * @description checks if token value has a specific unit @@ -33,17 +32,19 @@ const hasUnit = (value: string | number, unit: string): boolean => { * @matcher matches all tokens of $type `dimension` * @transformer returns an array with the `rem` and `pixel` string */ -export const dimensionToRemPxArray: StyleDictionary.Transform = { - type: `value`, +export const dimensionToRemPxArray: Transform = { + name: 'dimension/remPxArray', + type: 'value', transitive: true, - matcher: isDimension, - transformer: (token: StyleDictionary.TransformedToken, options?: Platform): [SizeRem | SizeEm, SizePx] => { - const baseFont = getBasePxFontSize(options) - const floatVal = parseFloat(token.value) + filter: isDimension, + transform: (token: TransformedToken, config: PlatformConfig, options: Config): [SizeRem | SizeEm, SizePx] => { + const valueProp = options.usesDtcg ? '$value' : 'value' + const baseFont = getBasePxFontSize(config) + const floatVal = parseFloat(token[valueProp]) if (isNaN(floatVal)) { throw new Error( - `Invalid dimension token: '${token.name}: ${token.value}' is not valid and cannot be transform to 'rem' \n`, + `Invalid dimension token: '${token.name}: ${token[valueProp]}' is not valid and cannot be transform to 'rem' \n`, ) } @@ -51,7 +52,7 @@ export const dimensionToRemPxArray: StyleDictionary.Transform = { return ['0', '0'] } - if (hasUnit(token.value, 'rem') || hasUnit(token.value, 'em')) { + if (hasUnit(token[valueProp], 'rem') || hasUnit(token[valueProp], 'em')) { return [token.value, `${floatVal * baseFont}px`] } diff --git a/src/transformers/durationToCss.test.ts b/src/transformers/durationToCss.test.ts index c8ccfd199..84f17418d 100644 --- a/src/transformers/durationToCss.test.ts +++ b/src/transformers/durationToCss.test.ts @@ -1,5 +1,5 @@ -import {getMockToken} from '../test-utilities' -import {durationToCss} from './durationToCss' +import {getMockToken} from '../test-utilities/index.js' +import {durationToCss} from './durationToCss.js' describe('Transformer: durationToCss', () => { it('transforms `duration` token to css duration', () => { @@ -8,7 +8,7 @@ describe('Transformer: durationToCss', () => { }) const expectedOutput = '100ms' - expect(durationToCss.transformer(input, {})).toStrictEqual(expectedOutput) + expect(durationToCss.transform(input, {}, {})).toStrictEqual(expectedOutput) }) it('transforms `ms` to `s`', () => { @@ -17,27 +17,29 @@ describe('Transformer: durationToCss', () => { }) const expectedOutput = '1.252s' - expect(durationToCss.transformer(input, {})).toStrictEqual(expectedOutput) + expect(durationToCss.transform(input, {}, {})).toStrictEqual(expectedOutput) }) it('throws an error when unit is missing or invalid', () => { // missing unit expect(() => - durationToCss.transformer( + durationToCss.transform( getMockToken({ value: '1000', }), {}, + {}, ), ).toThrowError() // only ms unit is supported expect(() => - durationToCss.transformer( + durationToCss.transform( getMockToken({ value: '1s', }), {}, + {}, ), ).toThrowError() }) @@ -45,11 +47,12 @@ describe('Transformer: durationToCss', () => { it('throws an error when value is number', () => { // missing unit expect(() => - durationToCss.transformer( + durationToCss.transform( getMockToken({ value: 1000, }), {}, + {}, ), ).toThrowError() }) diff --git a/src/transformers/durationToCss.ts b/src/transformers/durationToCss.ts index de2428e1e..2754cd1d7 100644 --- a/src/transformers/durationToCss.ts +++ b/src/transformers/durationToCss.ts @@ -1,5 +1,5 @@ -import type StyleDictionary from 'style-dictionary' -import {isDuration} from '../filters/isDuration' +import type {Config, PlatformConfig, Transform, TransformedToken} from 'style-dictionary/types' +import {isDuration} from '../filters/index.js' /** * @description converts duration tokens string value to number with `ms` unit @@ -7,17 +7,19 @@ import {isDuration} from '../filters/isDuration' * @matcher matches all tokens of $type `duration` * @transformer returns a css duration */ -export const durationToCss: StyleDictionary.Transform = { - type: `value`, +export const durationToCss: Transform = { + name: 'duration/css', + type: 'value', transitive: true, - matcher: isDuration, - transformer: (token: StyleDictionary.TransformedToken, _options?: StyleDictionary.Platform) => { + filter: isDuration, + transform: (token: TransformedToken, _config: PlatformConfig, options: Config) => { + const valueProp = options.usesDtcg ? '$value' : 'value' // throw an error if token value is not a string or does not end with `ms` - if (typeof token.value !== `string` || !token.value.endsWith(`ms`)) { + if (typeof token[valueProp] !== `string` || !token[valueProp].endsWith(`ms`)) { throw new Error(`duration token value must be a string with an "ms" unit`) } // get value - let value = parseInt(token.value.replace('ms', '')) + let value = parseInt(token[valueProp].replace('ms', '')) let unit = `ms` if (value >= 1000) { value = value / 1000 diff --git a/src/transformers/figmaAttributes.ts b/src/transformers/figmaAttributes.ts index 753db9ef4..d9c9ee644 100644 --- a/src/transformers/figmaAttributes.ts +++ b/src/transformers/figmaAttributes.ts @@ -1,4 +1,4 @@ -import type StyleDictionary from 'style-dictionary' +import type {PlatformConfig, Transform, TransformedToken} from 'style-dictionary/types' type FigmaVariableScope = | 'ALL_SCOPES' @@ -64,9 +64,10 @@ const getScopes = (scopes: string[] | string | undefined): FigmaVariableScope[] * @matcher matches all tokens * @transformer returns ab object of figma attributes */ -export const figmaAttributes: StyleDictionary.Transform = { +export const figmaAttributes: Transform = { + name: 'figma/attributes', type: `attribute`, - transformer: (token: StyleDictionary.TransformedToken, platform: StyleDictionary.Platform = {}) => { + transform: (token: TransformedToken, platform: PlatformConfig = {}) => { const {mode, collection, scopes, group, codeSyntax} = token.$extensions?.['org.primer.figma'] || {} return { mode: platform.options?.mode || mode || 'default', diff --git a/src/transformers/floatToPixel.test.ts b/src/transformers/floatToPixel.test.ts index cce8e5788..0392fb3c3 100644 --- a/src/transformers/floatToPixel.test.ts +++ b/src/transformers/floatToPixel.test.ts @@ -1,5 +1,5 @@ -import {getMockToken} from '../test-utilities' -import {floatToPixel, floatToPixelUnitless} from './floatToPixel' +import {getMockToken} from '../test-utilities/index.js' +import {floatToPixel, floatToPixelUnitless} from './floatToPixel.js' describe('Transformer: floatToPixel', () => { it('transforms float to pixel', () => { @@ -30,7 +30,7 @@ describe('Transformer: floatToPixel', () => { }), ] const expectedOutput = ['24px', '21px', '25px'] - expect(input.map(item => floatToPixel.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => floatToPixel.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('transforms 0 to 0', () => { @@ -48,7 +48,7 @@ describe('Transformer: floatToPixel', () => { }), ] const expectedOutput = [0, 0] - expect(input.map(item => floatToPixel.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => floatToPixel.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('ignore invalid', () => { @@ -72,7 +72,7 @@ describe('Transformer: floatToPixel', () => { }), ] const expectedOutput = ['1.5', 1.5, 2] - expect(input.map(item => floatToPixel.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => floatToPixel.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('transforms float to pixel unitless', () => { @@ -103,6 +103,6 @@ describe('Transformer: floatToPixel', () => { }), ] const expectedOutput = [24, 21, 25] - expect(input.map(item => floatToPixelUnitless.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => floatToPixelUnitless.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) }) diff --git a/src/transformers/floatToPixel.ts b/src/transformers/floatToPixel.ts index d86030f6e..db65dbae8 100644 --- a/src/transformers/floatToPixel.ts +++ b/src/transformers/floatToPixel.ts @@ -1,11 +1,11 @@ -import type StyleDictionary from 'style-dictionary' -import {isNumber} from '../filters' +import {isNumber} from '../filters/index.js' +import type {Transform, TransformedToken} from 'style-dictionary/types' /** * takes a value and returns it if its a px string if it is a float and the token has a fontSize value in extensions['org.primer.data'] * @param value * @returns string */ -export const convertFloatToPixel = (token: StyleDictionary.TransformedToken, unitless = false) => { +export const convertFloatToPixel = (token: TransformedToken, unitless = false) => { // short circut if value is not a number if ( typeof token.value !== 'number' || @@ -25,16 +25,18 @@ export const convertFloatToPixel = (token: StyleDictionary.TransformedToken, uni * @matcher matches all tokens of $type `isNumber` * @transformer returns a pixel string */ -export const floatToPixel: StyleDictionary.Transform = { - type: `value`, +export const floatToPixel: Transform = { + name: 'float/pixel', + type: 'value', transitive: true, - matcher: isNumber, - transformer: (token: StyleDictionary.TransformedToken): string => convertFloatToPixel(token), + filter: isNumber, + transform: (token: TransformedToken): string => convertFloatToPixel(token), } -export const floatToPixelUnitless: StyleDictionary.Transform = { - type: `value`, +export const floatToPixelUnitless: Transform = { + name: 'float/pixelUnitless', + type: 'value', transitive: true, - matcher: isNumber, - transformer: (token: StyleDictionary.TransformedToken): string => convertFloatToPixel(token, true), + filter: isNumber, + transform: (token: TransformedToken): string => convertFloatToPixel(token, true), } diff --git a/src/transformers/fontFamilyToCss.test.ts b/src/transformers/fontFamilyToCss.test.ts index b8310fbea..2e10ae70c 100644 --- a/src/transformers/fontFamilyToCss.test.ts +++ b/src/transformers/fontFamilyToCss.test.ts @@ -1,70 +1,74 @@ -import {getMockToken} from '../test-utilities' -import {fontFamilyToCss} from './fontFamilyToCss' +import {getMockToken} from '../test-utilities/index.js' +import {fontFamilyToCss} from './fontFamilyToCss.js' describe('Transformer: fontFamilyToCss', () => { it('transforms fontFamily string', () => { const input = [ getMockToken({ - value: 'Roboto, Noto Sans', + $value: 'Roboto, Noto Sans', }), getMockToken({ - value: 'Roboto', + $value: 'Roboto', }), ] const expectedOutput = ['Roboto, Noto Sans', 'Roboto'] - expect(input.map(item => fontFamilyToCss.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => fontFamilyToCss.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('transforms fontFamily array', () => { const input = [ getMockToken({ - value: ['Roboto', 'Noto Sans'], + $value: ['Roboto', 'Noto Sans'], }), getMockToken({ - value: ['Roboto'], + $value: ['Roboto'], }), ] const expectedOutput = ["Roboto, 'Noto Sans'", 'Roboto'] - expect(input.map(item => fontFamilyToCss.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => fontFamilyToCss.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('throws on invalid value', () => { expect(() => - fontFamilyToCss.transformer( + fontFamilyToCss.transform( getMockToken({ - value: { + $value: { fontFamily: 'Roboto', fontSize: '42px', }, }), {}, + {}, ), ).toThrowError() expect(() => - fontFamilyToCss.transformer( + fontFamilyToCss.transform( getMockToken({ - value: 42, + $value: 42, }), {}, + {}, ), ).toThrowError() expect(() => - fontFamilyToCss.transformer( + fontFamilyToCss.transform( getMockToken({ - value: undefined, + $value: undefined, }), {}, + {}, ), ).toThrowError() expect(() => - fontFamilyToCss.transformer( + fontFamilyToCss.transform( getMockToken({ - value: [42, 'Roboto'], + $value: [42, 'Roboto'], }), {}, + {}, ), ).toThrowError() }) diff --git a/src/transformers/fontFamilyToCss.ts b/src/transformers/fontFamilyToCss.ts index 95eb63936..d666b25ee 100644 --- a/src/transformers/fontFamilyToCss.ts +++ b/src/transformers/fontFamilyToCss.ts @@ -1,7 +1,7 @@ -import type StyleDictionary from 'style-dictionary' -import {isFontFamily} from '../filters' -import {getTokenValue} from './utilities/getTokenValue' -import {hasSpaceInString} from './utilities/hasSpaceInString' +import type {PlatformConfig, Transform, TransformedToken} from 'style-dictionary/types' +import {isFontFamily} from '../filters/index.js' +import {getTokenValue} from './utilities/getTokenValue.js' +import {hasSpaceInString} from './utilities/hasSpaceInString.js' /** * takes a value and returns it if its a string or concats strings in an array quoting strings with spaces * @param value @@ -29,9 +29,11 @@ export const parseFontFamily = (value: unknown): string => { * @matcher matches all tokens of $type `fontFamily` * @transformer returns a string */ -export const fontFamilyToCss: StyleDictionary.Transform = { - type: `value`, +export const fontFamilyToCss: Transform = { + name: 'fontFamily/css', + type: 'value', transitive: true, - matcher: isFontFamily, - transformer: (token: StyleDictionary.TransformedToken): string => parseFontFamily(getTokenValue(token)), + filter: isFontFamily, + transform: (token: TransformedToken, config: PlatformConfig): string => + parseFontFamily(getTokenValue(token, undefined, config)), } diff --git a/src/transformers/fontFamilyToFigma.test.ts b/src/transformers/fontFamilyToFigma.test.ts index 5a8d32a1e..d52dfdc32 100644 --- a/src/transformers/fontFamilyToFigma.test.ts +++ b/src/transformers/fontFamilyToFigma.test.ts @@ -1,5 +1,5 @@ -import {getMockToken} from '../test-utilities' -import {fontFamilyToFigma} from './fontFamilyToFigma' +import {getMockToken} from '../test-utilities/index.js' +import {fontFamilyToFigma} from './fontFamilyToFigma.js' describe('Transformer: fontFamilyToFigma', () => { it('transforms fontFamily string', () => { @@ -12,7 +12,7 @@ describe('Transformer: fontFamilyToFigma', () => { }), ] const expectedOutput = ['Roboto, Noto Sans', 'Roboto'] - expect(input.map(item => fontFamilyToFigma.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => fontFamilyToFigma.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('transforms fontFamily array', () => { @@ -25,7 +25,7 @@ describe('Transformer: fontFamilyToFigma', () => { }), ] const expectedOutput = ["Roboto, 'Noto Sans'", 'Roboto'] - expect(input.map(item => fontFamilyToFigma.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => fontFamilyToFigma.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('transforms fontFamily with platform options', () => { @@ -48,12 +48,12 @@ describe('Transformer: fontFamilyToFigma', () => { } const expectedOutput = ['Inter', 'Slab Serif'] - expect(input.map(item => fontFamilyToFigma.transformer(item, platform))).toStrictEqual(expectedOutput) + expect(input.map(item => fontFamilyToFigma.transform(item, platform, {}))).toStrictEqual(expectedOutput) }) it('throws on invalid value', () => { expect(() => - fontFamilyToFigma.transformer( + fontFamilyToFigma.transform( getMockToken({ value: { fontFamily: 'Roboto', @@ -61,33 +61,37 @@ describe('Transformer: fontFamilyToFigma', () => { }, }), {}, + {}, ), ).toThrowError() expect(() => - fontFamilyToFigma.transformer( + fontFamilyToFigma.transform( getMockToken({ value: 42, }), {}, + {}, ), ).toThrowError() expect(() => - fontFamilyToFigma.transformer( + fontFamilyToFigma.transform( getMockToken({ value: undefined, }), {}, + {}, ), ).toThrowError() expect(() => - fontFamilyToFigma.transformer( + fontFamilyToFigma.transform( getMockToken({ value: [42, 'Roboto'], }), {}, + {}, ), ).toThrowError() }) diff --git a/src/transformers/fontFamilyToFigma.ts b/src/transformers/fontFamilyToFigma.ts index 495a5d036..d3db998f4 100644 --- a/src/transformers/fontFamilyToFigma.ts +++ b/src/transformers/fontFamilyToFigma.ts @@ -1,26 +1,28 @@ -import type StyleDictionary from 'style-dictionary' -import {isFontFamily} from '../filters' -import {hasSpaceInString} from './utilities/hasSpaceInString' +import type {Config, PlatformConfig, Transform, TransformedToken} from 'style-dictionary/types' +import {isFontFamily} from '../filters/index.js' +import {hasSpaceInString} from './utilities/hasSpaceInString.js' /** * takes a value and returns it if its a string or concats strings in an array quoting strings with spaces * @param value * @returns string */ export const parseFontFamily = ( - token: StyleDictionary.TransformedToken, + token: TransformedToken, fontFamilies: Record = {}, + options: Config, ): string => { + const valueProp = options.usesDtcg ? '$value' : 'value' // return value from fontFamilies if (token.name in fontFamilies) { return fontFamilies[token.name] } // return string - if (typeof token.value === 'string') { - return token.value + if (typeof token[valueProp] === 'string') { + return token[valueProp] } // return stringified array - if (Array.isArray(token.value)) { - return token.value + if (Array.isArray(token[valueProp])) { + return token[valueProp] .map((string: string) => { if (typeof string !== 'string') { throw new Error(`Invalid value in array ${string}, must be a string`) @@ -30,7 +32,7 @@ export const parseFontFamily = ( .join(', ') } // invalid value - throw new Error(`Invalid value ${token.value}, should be a string or array of strings`) + throw new Error(`Invalid value ${token[valueProp]}, should be a string or array of strings`) } /** * @description converts fontFamily tokens value to string @@ -38,10 +40,11 @@ export const parseFontFamily = ( * @matcher matches all tokens of $type `fontFamily` * @transformer returns a string */ -export const fontFamilyToFigma: StyleDictionary.Transform = { - type: `value`, +export const fontFamilyToFigma: Transform = { + name: 'fontFamily/figma', + type: 'value', transitive: true, - matcher: isFontFamily, - transformer: (token: StyleDictionary.TransformedToken, platform: StyleDictionary.Platform): string => - parseFontFamily(token, platform.options?.fontFamilies), + filter: isFontFamily, + transform: (token: TransformedToken, platform: PlatformConfig, options: Config): string => + parseFontFamily(token, platform.options?.fontFamilies, options), } diff --git a/src/transformers/fontWeightToNumber.ts b/src/transformers/fontWeightToNumber.ts index ea189b0b1..7f6bf6c1c 100644 --- a/src/transformers/fontWeightToNumber.ts +++ b/src/transformers/fontWeightToNumber.ts @@ -1,6 +1,6 @@ -import type StyleDictionary from 'style-dictionary' -import {isFontWeight} from '../filters' -import {getTokenValue} from './utilities/getTokenValue' +import type {Transform, TransformedToken} from 'style-dictionary/types' +import {isFontWeight} from '../filters/index.js' +import {getTokenValue} from './utilities/getTokenValue.js' const fontWeightMatrix: Record = { '100': ['thin', 'hairline'], @@ -45,9 +45,10 @@ export const parseFontWeight = (value: unknown): number => { * @matcher matches all tokens of $type `fontWeight` * @transformer returns a number */ -export const fontWeightToNumber: StyleDictionary.Transform = { - type: `value`, +export const fontWeightToNumber: Transform = { + name: 'fontWeight/number', + type: 'value', transitive: true, - matcher: isFontWeight, - transformer: (token: StyleDictionary.TransformedToken): number => parseFontWeight(getTokenValue(token)), + filter: isFontWeight, + transform: (token: TransformedToken): number => parseFontWeight(getTokenValue(token)), } diff --git a/src/transformers/fontWeightToNumbers.test.ts b/src/transformers/fontWeightToNumbers.test.ts index c3d8e2983..4038006c5 100644 --- a/src/transformers/fontWeightToNumbers.test.ts +++ b/src/transformers/fontWeightToNumbers.test.ts @@ -1,26 +1,26 @@ -import {getMockToken} from '../test-utilities' -import {fontWeightToNumber} from './fontWeightToNumber' +import {getMockToken} from '../test-utilities/index.js' +import {fontWeightToNumber} from './fontWeightToNumber.js' describe('Transformer: fontWeightToNumbers', () => { it('keeps number if within range of 1-1000', () => { const input = [ getMockToken({ - value: 100, + $value: 100, }), getMockToken({ - value: 1000, + $value: 1000, }), ] const expectedOutput = [100, 1000] - expect(input.map(item => fontWeightToNumber.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => fontWeightToNumber.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('transforms string of number to number', () => { const input = getMockToken({ - value: '100', + $value: '100', }) const expectedOutput = 100 - expect(fontWeightToNumber.transformer(input, {})).toStrictEqual(expectedOutput) + expect(fontWeightToNumber.transform(input, {}, {})).toStrictEqual(expectedOutput) }) it('transforms font strings to number', () => { @@ -47,10 +47,10 @@ describe('Transformer: fontWeightToNumbers', () => { for (const [fontWeightNumber, fontWeightString] of testCases) { const input = getMockToken({ - value: fontWeightString, + $value: fontWeightString, }) try { - expect(fontWeightToNumber.transformer(input, {})).toStrictEqual(fontWeightNumber) + expect(fontWeightToNumber.transform(input, {}, {})).toStrictEqual(fontWeightNumber) } catch (e) { throw new Error(`❌ Expects ${fontWeightString} to be transformed to ${fontWeightNumber}`) } @@ -59,58 +59,64 @@ describe('Transformer: fontWeightToNumbers', () => { it('throws on invalid value', () => { expect(() => - fontWeightToNumber.transformer( + fontWeightToNumber.transform( getMockToken({ - value: 1001, + $value: 1001, }), {}, + {}, ), ).toThrowError() expect(() => - fontWeightToNumber.transformer( + fontWeightToNumber.transform( getMockToken({ - value: 0, + $value: 0, }), {}, + {}, ), ).toThrowError() expect(() => - fontWeightToNumber.transformer( + fontWeightToNumber.transform( getMockToken({ - value: undefined, + $value: undefined, }), {}, + {}, ), ).toThrowError() expect(() => - fontWeightToNumber.transformer( + fontWeightToNumber.transform( getMockToken({ - value: 'Roboto', + $value: 'Roboto', }), {}, + {}, ), ).toThrowError() expect(() => - fontWeightToNumber.transformer( + fontWeightToNumber.transform( getMockToken({ - value: ['Roboto'], + $value: ['Roboto'], }), {}, + {}, ), ).toThrowError() expect(() => - fontWeightToNumber.transformer( + fontWeightToNumber.transform( getMockToken({ - value: { + $value: { fontWeight: 300, }, }), {}, + {}, ), ).toThrowError() }) diff --git a/src/transformers/index.ts b/src/transformers/index.ts index 9a86428aa..41e046383 100644 --- a/src/transformers/index.ts +++ b/src/transformers/index.ts @@ -1,24 +1,24 @@ -export {borderToCss} from './borderToCss' -export {colorToHex} from './colorToHex' -export {colorToHexMix} from './colorToHexMix' -export {colorToRgbAlpha} from './colorToRgbAlpha' -export {colorToRgbaFloat} from './colorToRgbaFloat' -export {floatToPixel} from './floatToPixel' -export {floatToPixelUnitless} from './floatToPixel' -export {dimensionToRem} from './dimensionToRem' -export {dimensionToRemPxArray} from './dimensionToRemPxArray' -export {dimensionToPixelUnitless} from './dimensionToPixelUnitless' -export {durationToCss} from './durationToCss' -export {figmaAttributes} from './figmaAttributes' -export {fontFamilyToCss} from './fontFamilyToCss' -export {fontFamilyToFigma} from './fontFamilyToFigma' -export {fontWeightToNumber} from './fontWeightToNumber' -export {jsonDeprecated} from './jsonDeprecated' -export {namePathToCamelCase} from './namePathToCamelCase' -export {namePathToPascalCase} from './namePathToPascalCase' -export {namePathToDotNotation} from './namePathToDotNotation' -export {namePathToFigma} from './namePathToFigma' -export {namePathToKebabCase} from './namePathToKebabCase' -export {namePathToSlashNotation} from './namePathToSlashNotation' -export {shadowToCss} from './shadowToCss' -export {typographyToCss} from './typographyToCss' +export {borderToCss} from './borderToCss.js' +export {colorToHex} from './colorToHex.js' +export {colorToHexMix} from './colorToHexMix.js' +export {colorToRgbAlpha} from './colorToRgbAlpha.js' +export {colorToRgbaFloat} from './colorToRgbaFloat.js' +export {floatToPixel} from './floatToPixel.js' +export {floatToPixelUnitless} from './floatToPixel.js' +export {dimensionToRem} from './dimensionToRem.js' +export {dimensionToRemPxArray} from './dimensionToRemPxArray.js' +export {dimensionToPixelUnitless} from './dimensionToPixelUnitless.js' +export {durationToCss} from './durationToCss.js' +export {figmaAttributes} from './figmaAttributes.js' +export {fontFamilyToCss} from './fontFamilyToCss.js' +export {fontFamilyToFigma} from './fontFamilyToFigma.js' +export {fontWeightToNumber} from './fontWeightToNumber.js' +export {jsonDeprecated} from './jsonDeprecated.js' +export {namePathToCamelCase} from './namePathToCamelCase.js' +export {namePathToPascalCase} from './namePathToPascalCase.js' +export {namePathToDotNotation} from './namePathToDotNotation.js' +export {namePathToFigma} from './namePathToFigma.js' +export {namePathToKebabCase} from './namePathToKebabCase.js' +export {namePathToSlashNotation} from './namePathToSlashNotation.js' +export {shadowToCss} from './shadowToCss.js' +export {typographyToCss} from './typographyToCss.js' diff --git a/src/transformers/jsonDeprecated.test.ts b/src/transformers/jsonDeprecated.test.ts index d128a99d9..c2ef6e1cb 100644 --- a/src/transformers/jsonDeprecated.test.ts +++ b/src/transformers/jsonDeprecated.test.ts @@ -1,5 +1,5 @@ -import {getMockToken} from '../test-utilities' -import {jsonDeprecated} from './jsonDeprecated' +import {getMockToken} from '../test-utilities/index.js' +import {jsonDeprecated} from './jsonDeprecated.js' describe('Transformer: jsonDeprecated', () => { it('Replaces token value with `null` if deprecated is set to `true`', () => { @@ -8,7 +8,7 @@ describe('Transformer: jsonDeprecated', () => { deprecated: true, }) const expectedOutput = null - expect(jsonDeprecated.transformer(item, {})).toStrictEqual(expectedOutput) + expect(jsonDeprecated.transform(item, {}, {})).toStrictEqual(expectedOutput) }) it('Replaces token value with deprecated value if deprecated is a `string`', () => { @@ -17,7 +17,7 @@ describe('Transformer: jsonDeprecated', () => { deprecated: `token.pumpkin`, }) const expectedOutput = 'token.pumpkin' - expect(jsonDeprecated.transformer(item, {})).toStrictEqual(expectedOutput) + expect(jsonDeprecated.transform(item, {}, {})).toStrictEqual(expectedOutput) }) it('Replaces token value with deprecated value if deprecated is a `string` and removes {}', () => { @@ -26,6 +26,6 @@ describe('Transformer: jsonDeprecated', () => { deprecated: `{token.pumpkin}`, }) const expectedOutput = 'token.pumpkin' - expect(jsonDeprecated.transformer(item, {})).toStrictEqual(expectedOutput) + expect(jsonDeprecated.transform(item, {}, {})).toStrictEqual(expectedOutput) }) }) diff --git a/src/transformers/jsonDeprecated.ts b/src/transformers/jsonDeprecated.ts index 25087ef43..65bdd1f7d 100644 --- a/src/transformers/jsonDeprecated.ts +++ b/src/transformers/jsonDeprecated.ts @@ -1,15 +1,16 @@ -import {isDeprecated} from '../filters' -import type StyleDictionary from 'style-dictionary' +import type {Transform, TransformedToken} from 'style-dictionary/types' +import {isDeprecated} from '../filters/index.js' /** * @description replaces tokens value with content of tokens `deprecated` property * @type value transformer — [StyleDictionary.ValueTransform](https://github.com/amzn/style-dictionary/blob/main/types/Transform.d.ts) * @matcher matches all tokens with a `deprecated` property * @transformer returns `string` specified in `token.deprecated` or `null` */ -export const jsonDeprecated: StyleDictionary.Transform = { - type: `value`, +export const jsonDeprecated: Transform = { + name: 'json/deprecated', + type: 'value', transitive: true, - matcher: isDeprecated, - transformer: (token: StyleDictionary.TransformedToken) => + filter: isDeprecated, + transform: (token: TransformedToken) => typeof token.deprecated === 'string' ? token.deprecated.replace(/[{}]/g, '') : null, } diff --git a/src/transformers/namePathToCamelCase.test.ts b/src/transformers/namePathToCamelCase.test.ts index c3312db2d..66bb08e12 100644 --- a/src/transformers/namePathToCamelCase.test.ts +++ b/src/transformers/namePathToCamelCase.test.ts @@ -1,5 +1,5 @@ -import {getMockToken} from '../test-utilities' -import {namePathToCamelCase} from './namePathToCamelCase' +import {getMockToken} from '../test-utilities/index.js' +import {namePathToCamelCase} from './namePathToCamelCase.js' describe('Transformer: namePathToCamelCase', () => { it('converts path elements to dot.notation and ignores name proprty', () => { @@ -23,7 +23,7 @@ describe('Transformer: namePathToCamelCase', () => { ] const expectedOutput = ['pathToToken', 'PATHTOToken', 'pathToToken', 'pathtoToken'] - expect(input.map(item => namePathToCamelCase.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => namePathToCamelCase.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('replaces spaces, `-`, `_` and `+` within path elements and joins with camelCase, but does not change the rest of the word', () => { @@ -42,7 +42,7 @@ describe('Transformer: namePathToCamelCase', () => { }), ] const expectedOutput = ['startPathToToken', 'startPATHTOToken', 'startPathToToken'] - expect(input.map(item => namePathToCamelCase.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => namePathToCamelCase.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('removes `@`, so we can use it for the default hack', () => { @@ -57,7 +57,7 @@ describe('Transformer: namePathToCamelCase', () => { }), ] const expectedOutput = ['fgColorAccent', 'fgColorMuted'] - expect(input.map(item => namePathToCamelCase.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => namePathToCamelCase.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('adds prefix to token name', () => { @@ -69,6 +69,6 @@ describe('Transformer: namePathToCamelCase', () => { path: ['start', 'pathTo', 'token'], }) const expectedOutput = 'PRIMERStartPathToToken' - expect(namePathToCamelCase.transformer(input, platform)).toStrictEqual(expectedOutput) + expect(namePathToCamelCase.transform(input, platform, {})).toStrictEqual(expectedOutput) }) }) diff --git a/src/transformers/namePathToCamelCase.ts b/src/transformers/namePathToCamelCase.ts index ee105d201..b1f053484 100644 --- a/src/transformers/namePathToCamelCase.ts +++ b/src/transformers/namePathToCamelCase.ts @@ -1,5 +1,5 @@ -import type StyleDictionary from 'style-dictionary' -import {toCamelCase} from '../utilities' +import {toCamelCase} from '../utilities/index.js' +import type {PlatformConfig, Transform, TransformedToken} from 'style-dictionary/types' /** * @description converts the [TransformedToken's](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) `.path` array to a camelCase string, preserves casing of parts @@ -7,8 +7,9 @@ import {toCamelCase} from '../utilities' * @matcher omitted to match all tokens * @transformer returns `string` camelCase */ -export const namePathToCamelCase: StyleDictionary.Transform = { - type: `name`, - transformer: (token: StyleDictionary.TransformedToken, options?: StyleDictionary.Platform): string => +export const namePathToCamelCase: Transform = { + name: 'name/pathToCamelCase', + type: 'name', + transform: (token: TransformedToken, options?: PlatformConfig): string => toCamelCase([options?.prefix || '', ...token.path]), } diff --git a/src/transformers/namePathToDotNotation.test.ts b/src/transformers/namePathToDotNotation.test.ts index 5de057a89..d94606fa8 100644 --- a/src/transformers/namePathToDotNotation.test.ts +++ b/src/transformers/namePathToDotNotation.test.ts @@ -1,5 +1,5 @@ -import {getMockToken} from '../test-utilities' -import {namePathToDotNotation} from './namePathToDotNotation' +import {getMockToken} from '../test-utilities/index.js' +import {namePathToDotNotation} from './namePathToDotNotation.js' describe('Transformer: namePathToDotNotation', () => { it('converts path elements to dot.notation and ignores name proprty', () => { @@ -23,7 +23,7 @@ describe('Transformer: namePathToDotNotation', () => { ] const expectedOutput = ['path.to.token', 'PATH.tO.Token', 'path.toToken', 'pathtoToken'] - expect(input.map(item => namePathToDotNotation.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => namePathToDotNotation.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('replaces spaces, `-`, `_` and `+` within path elements and joins with camelCase, but does not change the rest of the word', () => { @@ -42,7 +42,7 @@ describe('Transformer: namePathToDotNotation', () => { }), ] const expectedOutput = ['start.pathToToken', 'start.PATHTOToken', 'start.pathToToken'] - expect(input.map(item => namePathToDotNotation.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => namePathToDotNotation.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('removes `@`, so we can use it for the default hack', () => { @@ -57,7 +57,7 @@ describe('Transformer: namePathToDotNotation', () => { }), ] const expectedOutput = ['fgColor.accent', 'fgColor.muted'] - expect(input.map(item => namePathToDotNotation.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => namePathToDotNotation.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('adds prefix to token name', () => { @@ -69,6 +69,6 @@ describe('Transformer: namePathToDotNotation', () => { path: ['start', 'pathTo', 'token'], }) const expectedOutput = 'PRIMER.start.pathTo.token' - expect(namePathToDotNotation.transformer(input, platform)).toStrictEqual(expectedOutput) + expect(namePathToDotNotation.transform(input, platform, {})).toStrictEqual(expectedOutput) }) }) diff --git a/src/transformers/namePathToDotNotation.ts b/src/transformers/namePathToDotNotation.ts index 4f2b604c5..c0188e9e6 100644 --- a/src/transformers/namePathToDotNotation.ts +++ b/src/transformers/namePathToDotNotation.ts @@ -1,5 +1,5 @@ -import {upperCaseFirstCharacter} from '../utilities' -import type StyleDictionary from 'style-dictionary' +import type {PlatformConfig, Transform, TransformedToken} from 'style-dictionary/types' +import {upperCaseFirstCharacter} from '../utilities/index.js' /** * camelCase @@ -20,9 +20,10 @@ const camelCase = (string: string): string => { * @matcher omitted to match all tokens * @transformer returns `string` in dot.notation */ -export const namePathToDotNotation: StyleDictionary.Transform = { - type: `name`, - transformer: (token: StyleDictionary.TransformedToken, options?: StyleDictionary.Platform): string => { +export const namePathToDotNotation: Transform = { + name: 'name/pathToDotNotation', + type: 'name', + transform: (token: TransformedToken, options?: PlatformConfig): string => { return ( [options?.prefix, ...token.path] // remove undefined if exists diff --git a/src/transformers/namePathToFigma.test.ts b/src/transformers/namePathToFigma.test.ts index 5c653e83c..7ed394456 100644 --- a/src/transformers/namePathToFigma.test.ts +++ b/src/transformers/namePathToFigma.test.ts @@ -1,5 +1,5 @@ -import {getMockToken} from '../test-utilities' -import {namePathToFigma} from './namePathToFigma' +import {getMockToken} from '../test-utilities/index.js' +import {namePathToFigma} from './namePathToFigma.js' describe('Transformer: namePathToFigma', () => { it('converts path elements to dot.notation and ignores name proprty', () => { @@ -23,7 +23,7 @@ describe('Transformer: namePathToFigma', () => { ] const expectedOutput = ['path/to/token', 'PATH/tO/Token', 'path/toToken', 'pathtoToken'] - expect(input.map(item => namePathToFigma.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => namePathToFigma.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('replaces spaces, `-`, `_` and `+` within path elements and joins with camelCase, but does not change the rest of the word', () => { @@ -42,7 +42,7 @@ describe('Transformer: namePathToFigma', () => { }), ] const expectedOutput = ['start/path to token', 'start/PATH_tO-Token', 'start/path+toToken'] - expect(input.map(item => namePathToFigma.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => namePathToFigma.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('removes `@`, so we can use it for the default hack', () => { @@ -57,7 +57,7 @@ describe('Transformer: namePathToFigma', () => { }), ] const expectedOutput = ['fgColor/accent', 'fgColor/muted'] - expect(input.map(item => namePathToFigma.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => namePathToFigma.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('adds prefix to token name', () => { @@ -69,6 +69,6 @@ describe('Transformer: namePathToFigma', () => { path: ['start', 'pathTo', 'token'], }) const expectedOutput = 'PRIMER/start/pathTo/token' - expect(namePathToFigma.transformer(input, platform)).toStrictEqual(expectedOutput) + expect(namePathToFigma.transform(input, platform, {})).toStrictEqual(expectedOutput) }) }) diff --git a/src/transformers/namePathToFigma.ts b/src/transformers/namePathToFigma.ts index 574c7f29f..6cd975ed5 100644 --- a/src/transformers/namePathToFigma.ts +++ b/src/transformers/namePathToFigma.ts @@ -1,9 +1,6 @@ -import type StyleDictionary from 'style-dictionary' +import type {PlatformConfig, Transform, TransformedToken} from 'style-dictionary/types' -export const transformNamePathToFigma = ( - token: StyleDictionary.TransformedToken, - options?: StyleDictionary.Platform, -): string => { +export const transformNamePathToFigma = (token: TransformedToken, options?: PlatformConfig): string => { let pathArray = token.path.filter((part: unknown): part is string => part !== '@') if (['fgColor', 'borderColor', 'bgColor'].includes(pathArray[0]) && pathArray.length === 3) { pathArray = [pathArray[0], `${pathArray[1]}-${pathArray[2]}`] @@ -22,7 +19,8 @@ export const transformNamePathToFigma = ( * @matcher omitted to match all tokens * @transformer returns `string` */ -export const namePathToFigma: StyleDictionary.Transform = { - type: `name`, - transformer: transformNamePathToFigma, +export const namePathToFigma: Transform = { + name: 'name/pathToFigma', + type: 'name', + transform: transformNamePathToFigma, } diff --git a/src/transformers/namePathToKebabCase.test.ts b/src/transformers/namePathToKebabCase.test.ts index 9f1fbf7b5..c29ba29e1 100644 --- a/src/transformers/namePathToKebabCase.test.ts +++ b/src/transformers/namePathToKebabCase.test.ts @@ -1,5 +1,5 @@ -import {getMockToken} from '../test-utilities' -import {namePathToKebabCase} from './namePathToKebabCase' +import {getMockToken} from '../test-utilities/index.js' +import {namePathToKebabCase} from './namePathToKebabCase.js' describe('Transformer: namePathToKebabCase', () => { it('converts path elements to dot.notation and ignores name proprty', () => { @@ -23,7 +23,7 @@ describe('Transformer: namePathToKebabCase', () => { ] const expectedOutput = ['path-to-token', 'PATH-tO-Token', 'path-toToken', 'pathtoToken'] - expect(input.map(item => namePathToKebabCase.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => namePathToKebabCase.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('replaces spaces, `-`, `_` and `+` within path elements and joins with camelCase, but does not change the rest of the word', () => { @@ -42,7 +42,7 @@ describe('Transformer: namePathToKebabCase', () => { }), ] const expectedOutput = ['start-path to token', 'start-PATH_tO-Token', 'start-path+toToken'] - expect(input.map(item => namePathToKebabCase.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => namePathToKebabCase.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('removes `@`, so we can use it for the default hack', () => { @@ -57,7 +57,7 @@ describe('Transformer: namePathToKebabCase', () => { }), ] const expectedOutput = ['fgColor-accent', 'fgColor-muted'] - expect(input.map(item => namePathToKebabCase.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => namePathToKebabCase.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('adds prefix to token name', () => { @@ -69,6 +69,6 @@ describe('Transformer: namePathToKebabCase', () => { path: ['start', 'pathTo', 'token'], }) const expectedOutput = 'PRIMER-start-pathTo-token' - expect(namePathToKebabCase.transformer(input, platform)).toStrictEqual(expectedOutput) + expect(namePathToKebabCase.transform(input, platform, {})).toStrictEqual(expectedOutput) }) }) diff --git a/src/transformers/namePathToKebabCase.ts b/src/transformers/namePathToKebabCase.ts index 7a1b580e6..ff78182d2 100644 --- a/src/transformers/namePathToKebabCase.ts +++ b/src/transformers/namePathToKebabCase.ts @@ -1,4 +1,4 @@ -import type StyleDictionary from 'style-dictionary' +import type {PlatformConfig, Transform, TransformedToken} from 'style-dictionary/types' /** * @description converts the [TransformedToken's](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) `.path` array to a kebab-case string, preserves casing of parts @@ -6,9 +6,10 @@ import type StyleDictionary from 'style-dictionary' * @matcher omitted to match all tokens * @transformer returns `string` kebab-case */ -export const namePathToKebabCase: StyleDictionary.Transform = { - type: `name`, - transformer: (token: StyleDictionary.TransformedToken, options?: StyleDictionary.Platform): string => { +export const namePathToKebabCase: Transform = { + name: 'name/pathToKebabCase', + type: 'name', + transform: (token: TransformedToken, options?: PlatformConfig): string => { return ( [options?.prefix, ...token.path] // remove undefined if exists diff --git a/src/transformers/namePathToPascalCase.test.ts b/src/transformers/namePathToPascalCase.test.ts index 4f2e42967..fedacfe49 100644 --- a/src/transformers/namePathToPascalCase.test.ts +++ b/src/transformers/namePathToPascalCase.test.ts @@ -23,7 +23,7 @@ describe('Transformer: namePathToPascalCase', () => { ] const expectedOutput = ['PathToToken', 'PATHTOToken', 'PathToToken', 'PathtoToken'] - expect(input.map(item => namePathToPascalCase.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => namePathToPascalCase.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('removes `@`, so we can use it for the default hack', () => { @@ -38,7 +38,7 @@ describe('Transformer: namePathToPascalCase', () => { }), ] const expectedOutput = ['FgColorAccent', 'FgColorMuted'] - expect(input.map(item => namePathToPascalCase.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => namePathToPascalCase.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('adds prefix to token name', () => { @@ -50,6 +50,6 @@ describe('Transformer: namePathToPascalCase', () => { path: ['start', 'pathTo', 'token'], }) const expectedOutput = 'PRIMERStartPathToToken' - expect(namePathToPascalCase.transformer(input, platform)).toStrictEqual(expectedOutput) + expect(namePathToPascalCase.transform(input, platform, {})).toStrictEqual(expectedOutput) }) }) diff --git a/src/transformers/namePathToPascalCase.ts b/src/transformers/namePathToPascalCase.ts index 023a3ef28..0a094414a 100644 --- a/src/transformers/namePathToPascalCase.ts +++ b/src/transformers/namePathToPascalCase.ts @@ -1,4 +1,4 @@ -import type StyleDictionary from 'style-dictionary' +import type {PlatformConfig, Transform, TransformedToken} from 'style-dictionary/types' import {toPascalCase} from '../utilities/toPascalCase' /** * @description converts the [TransformedToken's](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) `.path` array to a PascalCase string, preserves casing of parts @@ -6,8 +6,9 @@ import {toPascalCase} from '../utilities/toPascalCase' * @matcher omitted to match all tokens * @transformer returns `string` PascalCase */ -export const namePathToPascalCase: StyleDictionary.Transform = { - type: `name`, - transformer: (token: StyleDictionary.TransformedToken, options?: StyleDictionary.Platform): string => +export const namePathToPascalCase: Transform = { + name: 'name/pathToPascalCase', + type: 'name', + transform: (token: TransformedToken, options?: PlatformConfig): string => toPascalCase([options?.prefix || '', ...token.path]), } diff --git a/src/transformers/namePathToSlashNotation.test.ts b/src/transformers/namePathToSlashNotation.test.ts index 82bbf92b6..8e433facd 100644 --- a/src/transformers/namePathToSlashNotation.test.ts +++ b/src/transformers/namePathToSlashNotation.test.ts @@ -1,5 +1,5 @@ -import {getMockToken} from '../test-utilities' -import {namePathToSlashNotation} from './namePathToSlashNotation' +import {getMockToken} from '../test-utilities/index.js' +import {namePathToSlashNotation} from './namePathToSlashNotation.js' describe('Transformer: namePathToSlashNotation', () => { it('converts path elements to dot.notation and ignores name proprty', () => { @@ -23,7 +23,7 @@ describe('Transformer: namePathToSlashNotation', () => { ] const expectedOutput = ['path/to/token', 'PATH/tO/Token', 'path/toToken', 'pathtoToken'] - expect(input.map(item => namePathToSlashNotation.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => namePathToSlashNotation.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('replaces spaces, `-`, `_` and `+` within path elements and joins with camelCase, but does not change the rest of the word', () => { @@ -42,7 +42,7 @@ describe('Transformer: namePathToSlashNotation', () => { }), ] const expectedOutput = ['start/path to token', 'start/PATH_tO-Token', 'start/path+toToken'] - expect(input.map(item => namePathToSlashNotation.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => namePathToSlashNotation.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('removes `@`, so we can use it for the default hack', () => { @@ -57,7 +57,7 @@ describe('Transformer: namePathToSlashNotation', () => { }), ] const expectedOutput = ['fgColor/accent', 'fgColor/muted'] - expect(input.map(item => namePathToSlashNotation.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => namePathToSlashNotation.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('adds prefix to token name', () => { @@ -69,6 +69,6 @@ describe('Transformer: namePathToSlashNotation', () => { path: ['start', 'pathTo', 'token'], }) const expectedOutput = 'PRIMER/start/pathTo/token' - expect(namePathToSlashNotation.transformer(input, platform)).toStrictEqual(expectedOutput) + expect(namePathToSlashNotation.transform(input, platform, {})).toStrictEqual(expectedOutput) }) }) diff --git a/src/transformers/namePathToSlashNotation.ts b/src/transformers/namePathToSlashNotation.ts index 02a6194a8..2919c9051 100644 --- a/src/transformers/namePathToSlashNotation.ts +++ b/src/transformers/namePathToSlashNotation.ts @@ -1,4 +1,4 @@ -import type StyleDictionary from 'style-dictionary' +import type {PlatformConfig, Transform, TransformedToken} from 'style-dictionary/types' /** * @description converts the [TransformedToken's](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts) `.path` array to a slash/notation string @@ -6,9 +6,10 @@ import type StyleDictionary from 'style-dictionary' * @matcher omitted to match all tokens * @transformer returns `string` on slash/notation */ -export const namePathToSlashNotation: StyleDictionary.Transform = { - type: `name`, - transformer: (token: StyleDictionary.TransformedToken, options?: StyleDictionary.Platform): string => { +export const namePathToSlashNotation: Transform = { + name: 'name/pathToSlashNotation', + type: 'name', + transform: (token: TransformedToken, options?: PlatformConfig): string => { return ( [options?.prefix, ...token.path] // remove undefined if exists diff --git a/src/transformers/shadowToCss.test.ts b/src/transformers/shadowToCss.test.ts index af008d300..a738b0e88 100644 --- a/src/transformers/shadowToCss.test.ts +++ b/src/transformers/shadowToCss.test.ts @@ -1,11 +1,11 @@ -import {getMockToken} from '../test-utilities' -import {shadowToCss} from './shadowToCss' +import {getMockToken} from '../test-utilities/index.js' +import {shadowToCss} from './shadowToCss.js' describe('Transformer: shadowToCss', () => { it('transforms `shadow` token to css shadow string', () => { const input = [ getMockToken({ - value: { + $value: { color: '#000000', offsetX: '0px', offsetY: '2px', @@ -15,13 +15,13 @@ describe('Transformer: shadowToCss', () => { }), ] const expectedOutput = ['0px 2px 1px 0 #000000'] - expect(input.map(item => shadowToCss.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => shadowToCss.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('transforms inset `shadow` token to css shadow string', () => { const input = [ getMockToken({ - value: { + $value: { color: '#000000', offsetX: '0px', offsetY: '2px', @@ -31,7 +31,7 @@ describe('Transformer: shadowToCss', () => { }, }), getMockToken({ - value: { + $value: { color: '#000000', offsetX: '0px', offsetY: '2px', @@ -42,15 +42,15 @@ describe('Transformer: shadowToCss', () => { }), ] const expectedOutput = ['inset 0px 2px 1px 0px #000000', '0px 2px 1px 0px #000000'] - expect(input.map(item => shadowToCss.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => shadowToCss.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('throws an error when required values are missing', () => { // missing blur expect(() => - shadowToCss.transformer( + shadowToCss.transform( getMockToken({ - value: { + $value: { color: '#000000', offsetX: '2px', offsetY: '2px', @@ -58,14 +58,15 @@ describe('Transformer: shadowToCss', () => { }, }), {}, + {}, ), ).toThrowError() // missing spread expect(() => - shadowToCss.transformer( + shadowToCss.transform( getMockToken({ - value: { + $value: { color: '#000000', offsetX: '2px', offsetY: '2px', @@ -73,14 +74,15 @@ describe('Transformer: shadowToCss', () => { }, }), {}, + {}, ), ).toThrowError() // missing offsets expect(() => - shadowToCss.transformer( + shadowToCss.transform( getMockToken({ - value: { + $value: { color: '#000000', offsetX: '2px', spread: '0px', @@ -88,13 +90,14 @@ describe('Transformer: shadowToCss', () => { }, }), {}, + {}, ), ).toThrowError() expect(() => - shadowToCss.transformer( + shadowToCss.transform( getMockToken({ - value: { + $value: { color: '#000000', offsetY: '2px', spread: '0px', @@ -102,13 +105,14 @@ describe('Transformer: shadowToCss', () => { }, }), {}, + {}, ), ).toThrowError() // missing color expect(() => - shadowToCss.transformer( + shadowToCss.transform( getMockToken({ - value: { + $value: { offsetX: '0px', offsetY: '2px', spread: '0px', @@ -116,6 +120,7 @@ describe('Transformer: shadowToCss', () => { }, }), {}, + {}, ), ).toThrowError() }) @@ -123,7 +128,7 @@ describe('Transformer: shadowToCss', () => { it('transforms `shadow` token alpha value to css shadow string', () => { const input = [ getMockToken({ - value: { + $value: { color: '#000000', offsetX: '0px', offsetY: '2px', @@ -133,7 +138,7 @@ describe('Transformer: shadowToCss', () => { }, }), getMockToken({ - value: { + $value: { color: '#22222266', offsetX: '0px', offsetY: '2px', @@ -144,12 +149,12 @@ describe('Transformer: shadowToCss', () => { }), ] const expectedOutput = ['0px 2px 1px 0 #00000080', '0px 2px 1px 0 #22222280'] - expect(input.map(item => shadowToCss.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => shadowToCss.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('transforms multi-layer `shadow` token to css shadow string', () => { const item = getMockToken({ - value: [ + $value: [ { color: '#000000', offsetX: '0px', @@ -170,6 +175,6 @@ describe('Transformer: shadowToCss', () => { }) const expectedOutput = '0px 2px 1px 0 #00000080, 0px 8px 16px 0 #22222233' - expect(shadowToCss.transformer(item, {})).toStrictEqual(expectedOutput) + expect(shadowToCss.transform(item, {}, {})).toStrictEqual(expectedOutput) }) }) diff --git a/src/transformers/shadowToCss.ts b/src/transformers/shadowToCss.ts index 1c78ede05..3b5273ade 100644 --- a/src/transformers/shadowToCss.ts +++ b/src/transformers/shadowToCss.ts @@ -1,10 +1,10 @@ import {toHex} from 'color2k' -import {isShadow} from '../filters' -import {alpha} from './utilities/alpha' -import {checkRequiredTokenProperties} from './utilities/checkRequiredTokenProperties' -import type {ShadowTokenValue} from '../types/ShadowTokenValue' -import type StyleDictionary from 'style-dictionary' -import {getTokenValue} from './utilities/getTokenValue' +import {isShadow} from '../filters/index.js' +import {alpha} from './utilities/alpha.js' +import {checkRequiredTokenProperties} from './utilities/checkRequiredTokenProperties.js' +import type {ShadowTokenValue} from '../types/ShadowTokenValue.js' +import {getTokenValue} from './utilities/getTokenValue.js' +import type {Transform, TransformedToken} from 'style-dictionary/types' /** * @description converts w3c shadow tokens in css shadow string @@ -12,13 +12,15 @@ import {getTokenValue} from './utilities/getTokenValue' * @matcher matches all tokens of $type `shadow` * @transformer returns css shadow `string` */ -export const shadowToCss: StyleDictionary.Transform = { - type: `value`, +export const shadowToCss: Transform = { + name: 'shadow/css', + type: 'value', transitive: true, - matcher: isShadow, - transformer: (token: StyleDictionary.TransformedToken) => { + filter: isShadow, + transform: (token: TransformedToken) => { // extract value - const {value}: {value: ShadowTokenValue | ShadowTokenValue[]} = token + const value: ShadowTokenValue | ShadowTokenValue[] = getTokenValue(token) + const valueProp = token.$value ? '$value' : 'value' // turn value into array const shadowValues = !Array.isArray(value) ? [value] : value @@ -30,7 +32,7 @@ export const shadowToCss: StyleDictionary.Transform = { /*css box shadow: inset? | offset-x | offset-y | blur-radius | spread-radius | color */ return `${shadow.inset === true ? 'inset ' : ''}${shadow.offsetX} ${shadow.offsetY} ${shadow.blur} ${ shadow.spread - } ${toHex(alpha(getTokenValue({...token, ...{value: shadow}}, 'color'), shadow.alpha || 1, token))}` + } ${toHex(alpha(getTokenValue({...token, ...{[valueProp]: shadow}}, 'color'), shadow.alpha || 1, token))}` }) .join(', ') }, diff --git a/src/transformers/typographyToCss.test.ts b/src/transformers/typographyToCss.test.ts index 9b8372f11..28e989a08 100644 --- a/src/transformers/typographyToCss.test.ts +++ b/src/transformers/typographyToCss.test.ts @@ -1,10 +1,10 @@ -import {getMockToken} from '../test-utilities' -import {typographyToCss} from './typographyToCss' +import {getMockToken} from '../test-utilities/index.js' +import {typographyToCss} from './typographyToCss.js' describe('Transformer: typographyToCss', () => { it('transforms `typography` token to css typography string', () => { const input = getMockToken({ - value: { + $value: { fontFamily: 'Roboto', fontSize: '42px', fontWeight: 700, @@ -13,12 +13,12 @@ describe('Transformer: typographyToCss', () => { }, }) const expectedOutput = '700 42px/1.2 Roboto' - expect(typographyToCss.transformer(input, {})).toStrictEqual(expectedOutput) + expect(typographyToCss.transform(input, {}, {})).toStrictEqual(expectedOutput) }) it('transforms `typography` with custom `fontStyle` prop token to css typography string', () => { const input = getMockToken({ - value: { + $value: { fontFamily: 'Roboto', fontSize: '2rem', fontWeight: 700, @@ -28,13 +28,13 @@ describe('Transformer: typographyToCss', () => { }) const expectedOutput = 'italic 700 2rem/1.2 Roboto' - expect(typographyToCss.transformer(input, {})).toStrictEqual(expectedOutput) + expect(typographyToCss.transform(input, {}, {})).toStrictEqual(expectedOutput) }) it('transforms fontWeight string to number', () => { const input = [ getMockToken({ - value: { + $value: { fontFamily: 'Roboto', fontSize: '42px', fontWeight: '500', @@ -43,7 +43,7 @@ describe('Transformer: typographyToCss', () => { }, }), getMockToken({ - value: { + $value: { fontFamily: 'Roboto', fontSize: '42px', fontWeight: 'black', @@ -53,13 +53,13 @@ describe('Transformer: typographyToCss', () => { }), ] const expectedOutput = ['500 42px/1.2 Roboto', '900 42px/1.2 Roboto'] - expect(input.map(item => typographyToCss.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => typographyToCss.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('transforms fontFamily string and array', () => { const input = [ getMockToken({ - value: { + $value: { fontFamily: 'Roboto, Noto Sans', fontSize: '42px', fontWeight: '700', @@ -68,7 +68,7 @@ describe('Transformer: typographyToCss', () => { }, }), getMockToken({ - value: { + $value: { fontFamily: ['Roboto', 'Noto Sans'], fontSize: '42px', fontWeight: '700', @@ -78,13 +78,13 @@ describe('Transformer: typographyToCss', () => { }), ] const expectedOutput = ['700 42px/1.2 Roboto, Noto Sans', "700 42px/1.2 Roboto, 'Noto Sans'"] - expect(input.map(item => typographyToCss.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => typographyToCss.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('transforms lineHeight string to number', () => { const input = [ getMockToken({ - value: { + $value: { fontFamily: 'Roboto', fontSize: '42px', fontWeight: '700', @@ -93,7 +93,7 @@ describe('Transformer: typographyToCss', () => { }, }), getMockToken({ - value: { + $value: { fontFamily: 'Roboto', fontSize: '42px', fontWeight: '700', @@ -102,7 +102,7 @@ describe('Transformer: typographyToCss', () => { }, }), getMockToken({ - value: { + $value: { fontFamily: 'Roboto', fontSize: '42px', fontWeight: '700', @@ -112,15 +112,15 @@ describe('Transformer: typographyToCss', () => { }), ] const expectedOutput = ['700 42px/1.2 Roboto', '700 42px/1rem Roboto', '700 42px/20px Roboto'] - expect(input.map(item => typographyToCss.transformer(item, {}))).toStrictEqual(expectedOutput) + expect(input.map(item => typographyToCss.transform(item, {}, {}))).toStrictEqual(expectedOutput) }) it('throws an error when required values are missing', () => { // missing fontFamily expect(() => - typographyToCss.transformer( + typographyToCss.transform( getMockToken({ - value: { + $value: { fontSize: '42px', fontWeight: '700', letterSpacing: '0.1px', @@ -128,14 +128,15 @@ describe('Transformer: typographyToCss', () => { }, }), {}, + {}, ), ).toThrowError() // missing fontSize expect(() => - typographyToCss.transformer( + typographyToCss.transform( getMockToken({ - value: { + $value: { fontFamily: 'Roboto', fontWeight: '700', letterSpacing: '0.1px', @@ -143,14 +144,15 @@ describe('Transformer: typographyToCss', () => { }, }), {}, + {}, ), ).toThrowError() // missing fontWeight expect(() => - typographyToCss.transformer( + typographyToCss.transform( getMockToken({ - value: { + $value: { fontFamily: 'Roboto', fontSize: '42px', letterSpacing: '0.1px', @@ -158,6 +160,7 @@ describe('Transformer: typographyToCss', () => { }, }), {}, + {}, ), ).toThrowError() }) diff --git a/src/transformers/typographyToCss.ts b/src/transformers/typographyToCss.ts index c7f8d6b94..1a61b47de 100644 --- a/src/transformers/typographyToCss.ts +++ b/src/transformers/typographyToCss.ts @@ -1,10 +1,10 @@ -import type StyleDictionary from 'style-dictionary' -import {isTypography} from '../filters' -import type {TypographyTokenValue} from '../types/TypographyTokenValue' -import {checkRequiredTokenProperties} from './utilities/checkRequiredTokenProperties' -import {parseFontFamily} from './fontFamilyToCss' -import {parseFontWeight} from './fontWeightToNumber' -import {getTokenValue} from './utilities/getTokenValue' +import {isTypography} from '../filters/index.js' +import type {TypographyTokenValue} from '../types/TypographyTokenValue.js' +import {checkRequiredTokenProperties} from './utilities/checkRequiredTokenProperties.js' +import {parseFontFamily} from './fontFamilyToCss.js' +import {parseFontWeight} from './fontWeightToNumber.js' +import {getTokenValue} from './utilities/getTokenValue.js' +import type {Config, PlatformConfig, Transform, TransformedToken} from 'style-dictionary/types' /** * @description converts typograhy token value to css font shorthand @@ -12,19 +12,20 @@ import {getTokenValue} from './utilities/getTokenValue' * @matcher matches all tokens of $type `typography` * @transformer returns a css font string */ -export const typographyToCss: StyleDictionary.Transform = { - type: `value`, +export const typographyToCss: Transform = { + name: 'typography/css', + type: 'value', transitive: true, - matcher: isTypography, - transformer: (token: StyleDictionary.TransformedToken) => { + filter: isTypography, + transform: (token: TransformedToken, config: PlatformConfig, options: Config) => { // extract value const value: TypographyTokenValue = getTokenValue(token) // validate token properties checkRequiredTokenProperties(value, ['fontWeight', 'fontSize', 'fontFamily']) // format output - return `${value.fontStyle || ''} ${parseFontWeight(getTokenValue(token, 'fontWeight'))} ${value.fontSize}${ + return `${value.fontStyle || ''} ${parseFontWeight(getTokenValue(token, 'fontWeight', options))} ${value.fontSize}${ value.lineHeight ? `/${value.lineHeight}` : '' - } ${parseFontFamily(getTokenValue(token, 'fontFamily'))}` + } ${parseFontFamily(getTokenValue(token, 'fontFamily', options))}` .trim() .replace(/\s\s+/g, ' ') }, diff --git a/src/transformers/utilities/alpha.test.ts b/src/transformers/utilities/alpha.test.ts index c5555104f..ffa12b8bc 100644 --- a/src/transformers/utilities/alpha.test.ts +++ b/src/transformers/utilities/alpha.test.ts @@ -1,4 +1,4 @@ -import {alpha} from './alpha' +import {alpha} from './alpha.js' describe('Utilities: alpha', () => { it('it transforms `hex3`', () => { diff --git a/src/transformers/utilities/alpha.ts b/src/transformers/utilities/alpha.ts index e34bb63c5..87b1db06b 100644 --- a/src/transformers/utilities/alpha.ts +++ b/src/transformers/utilities/alpha.ts @@ -1,5 +1,5 @@ import {rgba, parseToRgba} from 'color2k' -import type {TransformedToken} from 'style-dictionary' +import type {TransformedToken} from 'style-dictionary/types' /** * alpha * @description takes a colors string like hex or rgba and returns an rgba color with the specified alpha value diff --git a/src/transformers/utilities/checkRequiredTokenProperties.test.ts b/src/transformers/utilities/checkRequiredTokenProperties.test.ts index 6c2a21a03..f4a279be2 100644 --- a/src/transformers/utilities/checkRequiredTokenProperties.test.ts +++ b/src/transformers/utilities/checkRequiredTokenProperties.test.ts @@ -1,4 +1,4 @@ -import {checkRequiredTokenProperties} from './checkRequiredTokenProperties' +import {checkRequiredTokenProperties} from './checkRequiredTokenProperties.js' describe('Utilities: checkRequiredTokenProperties', () => { it('it throws if property is missing', () => { diff --git a/src/transformers/utilities/getTokenValue.test.ts b/src/transformers/utilities/getTokenValue.test.ts index 52243a956..d32e05831 100644 --- a/src/transformers/utilities/getTokenValue.test.ts +++ b/src/transformers/utilities/getTokenValue.test.ts @@ -1,14 +1,21 @@ -import {getMockToken} from '../../test-utilities' -import {getTokenValue} from './getTokenValue' +import {getMockToken} from '../../test-utilities/index.js' +import {getTokenValue} from './getTokenValue.js' describe('Utilities: getTokenValue', () => { - it('it retrieves the token value', () => { + it('it retrieves the token value if usesDtcg is false', () => { const token = getMockToken({ + $value: undefined, // needs to reset because of defaults from getMockToken value: '#223344', }) expect(getTokenValue(token)).toStrictEqual('#223344') }) + it('it retrieves the token $value if usesDtcg is true', () => { + const token = getMockToken({ + $value: '#223344', + }) + expect(getTokenValue(token, undefined)).toStrictEqual('#223344') + }) it('it throws a typeError if invalid input is used', () => { expect(() => { // @ts-expect-error due to testing wrong input diff --git a/src/transformers/utilities/getTokenValue.ts b/src/transformers/utilities/getTokenValue.ts index d6d2ab90f..6cc802963 100644 --- a/src/transformers/utilities/getTokenValue.ts +++ b/src/transformers/utilities/getTokenValue.ts @@ -1,18 +1,20 @@ -import type StyleDictionary from 'style-dictionary' -import {invalidTokenValueError, invalidTokenValuePropertyError} from './invalidTokenError' +import type {TransformedToken} from 'style-dictionary/types' +import {invalidTokenValueError, invalidTokenValuePropertyError} from './invalidTokenError.js' -export const getTokenValue = (token: StyleDictionary.TransformedToken, property?: string) => { - if (token.value === undefined) { +export const getTokenValue = (token: TransformedToken, property?: string) => { + const value = token.$value ?? token.value + + if (value === undefined) { throw new invalidTokenValueError(token) } // for composite token if subproperty is needed - if (typeof property === 'string' && token.value[property] === undefined) { + if (typeof property === 'string' && value[property] === undefined) { throw new invalidTokenValuePropertyError(token, property) } if (typeof property === 'string') { - return token.value[property] + return value[property] } - return token.value + return value } diff --git a/src/transformers/utilities/hasSpaceInString.test.ts b/src/transformers/utilities/hasSpaceInString.test.ts index 82424d06d..71321ebf8 100644 --- a/src/transformers/utilities/hasSpaceInString.test.ts +++ b/src/transformers/utilities/hasSpaceInString.test.ts @@ -1,4 +1,4 @@ -import {hasSpaceInString} from './hasSpaceInString' +import {hasSpaceInString} from './hasSpaceInString.js' describe('Utilities: hasSpaceInString', () => { it('returns true if string has space', () => { diff --git a/src/transformers/utilities/hexToRgbaFloat.test.ts b/src/transformers/utilities/hexToRgbaFloat.test.ts index d95b8a8e4..8c243b915 100644 --- a/src/transformers/utilities/hexToRgbaFloat.test.ts +++ b/src/transformers/utilities/hexToRgbaFloat.test.ts @@ -1,4 +1,4 @@ -import {hexToRgbaFloat} from './hexToRgbaFloat' +import {hexToRgbaFloat} from './hexToRgbaFloat.js' describe('Utilities: hexToRgbaFloat', () => { it('it converts hex3', () => { diff --git a/src/transformers/utilities/invalidTokenError.test.ts b/src/transformers/utilities/invalidTokenError.test.ts index aea3da65d..ab3843b83 100644 --- a/src/transformers/utilities/invalidTokenError.test.ts +++ b/src/transformers/utilities/invalidTokenError.test.ts @@ -1,5 +1,5 @@ -import {getMockToken} from '../../test-utilities' -import {invalidTokenValueError} from './invalidTokenError' +import {getMockToken} from '../../test-utilities/index.js' +import {invalidTokenValueError} from './invalidTokenError.js' describe('Utilities: invalidTokenValueError', () => { it('it throws with token', () => { diff --git a/src/transformers/utilities/invalidTokenError.ts b/src/transformers/utilities/invalidTokenError.ts index 531a11e67..ad6aa39b1 100644 --- a/src/transformers/utilities/invalidTokenError.ts +++ b/src/transformers/utilities/invalidTokenError.ts @@ -1,21 +1,25 @@ -import type {TransformedToken} from 'style-dictionary' -import {namePathToDotNotation} from '../namePathToDotNotation' +import type {TransformedToken} from 'style-dictionary/types' +import {namePathToDotNotation} from '../namePathToDotNotation.js' const composeValueErrorMessage = (token: TransformedToken) => { + const originalValue = token.original.$value ?? token.original.value + const value = token.$value ?? token.value // eslint-disable-next-line i18n-text/no-en - return `Invalid token "${namePathToDotNotation.transformer(token, {})}" in file "${ + return `Invalid token "${namePathToDotNotation.transform(token, {}, {})}" in file "${ token.filePath - }". Transformed value: "${JSON.stringify(token.value)}". ${ - token.original.value ? `Original value: "${JSON.stringify(token.original.value)}" ` : '' + }". Transformed value: "${JSON.stringify(value)}". ${ + originalValue ? `Original value: "${JSON.stringify(originalValue)}" ` : '' }This may be due to referencing a token that does not exists.` } const composeValuePropertyErrorMessage = (token: TransformedToken, property: string) => { + const originalValue = token.original.$value ?? token.original.value + const value = token.$value ?? token.value // eslint-disable-next-line i18n-text/no-en - return `Invalid property "${property}" of token "${namePathToDotNotation.transformer(token, {})}" in file "${ + return `Invalid property "${property}" of token "${namePathToDotNotation.transform(token, {}, {})}" in file "${ token.filePath - }". Transformed property value: "${token.value[property]}". ${ - token.original.value ? `Original value: "${token.original.value[property]}" ` : '' + }". Transformed property value: "${value[property]}". ${ + originalValue ? `Original value: "${originalValue[property]}" ` : '' }This may be due to referencing a token that does not exists.` } diff --git a/src/transformers/utilities/isRgbaFloat.test.ts b/src/transformers/utilities/isRgbaFloat.test.ts index 4f913a068..f286b685f 100644 --- a/src/transformers/utilities/isRgbaFloat.test.ts +++ b/src/transformers/utilities/isRgbaFloat.test.ts @@ -1,4 +1,4 @@ -import {isRgbaFloat} from './isRgbaFloat' +import {isRgbaFloat} from './isRgbaFloat.js' describe('Utilities: isRgbaFloat', () => { it('valid RgbaFloat', () => { diff --git a/src/transformers/utilities/rgbaFloatToHex.test.ts b/src/transformers/utilities/rgbaFloatToHex.test.ts index 34816fcf9..5b124f65c 100644 --- a/src/transformers/utilities/rgbaFloatToHex.test.ts +++ b/src/transformers/utilities/rgbaFloatToHex.test.ts @@ -1,4 +1,4 @@ -import {rgbaFloatToHex} from './rgbaFloatToHex' +import {rgbaFloatToHex} from './rgbaFloatToHex.js' describe('Utilities: rgbaFloatToHex', () => { it('valid RgbaFloat value', () => { diff --git a/src/types/PlatformInitializer.d.ts b/src/types/PlatformInitializer.d.ts index 25e802274..af64d41de 100644 --- a/src/types/PlatformInitializer.d.ts +++ b/src/types/PlatformInitializer.d.ts @@ -1,4 +1,4 @@ -import type StyleDictionary from 'style-dictionary' +import type {LocalOptions, PlatformConfig} from 'style-dictionary/types' export type PlatformInitializer = ( // the filename including the extension (e.g. `.css`) and any subfolders after the buildPath (e.g. `functional`) @@ -7,5 +7,5 @@ export type PlatformInitializer = ( prefix: string | undefined, // the build path in which the `outputFile` is placed buildPath: string, - options?: StyleDictionary.Options, -) => StyleDictionary.Platform + options?: LocalOptions, +) => PlatformConfig diff --git a/src/types/StyleDictionaryConfigGenerator.d.ts b/src/types/StyleDictionaryConfigGenerator.d.ts index 934e2d6d6..ffa53f330 100644 --- a/src/types/StyleDictionaryConfigGenerator.d.ts +++ b/src/types/StyleDictionaryConfigGenerator.d.ts @@ -1,4 +1,4 @@ -import type StyleDictionary from 'style-dictionary' +import type {Config, PlatformConfig} from 'style-dictionary/types' export type ConfigGeneratorOptions = { buildPath: string @@ -11,5 +11,5 @@ export type StyleDictionaryConfigGenerator = ( source: string[], include: string[], options: ConfigGeneratorOptions, - platforms?: Record, -) => StyleDictionary.Config + platforms?: Record, +) => Config diff --git a/src/types/w3cTransformedToken.d.ts b/src/types/w3cTransformedToken.d.ts index 5a05531af..ca052fd59 100644 --- a/src/types/w3cTransformedToken.d.ts +++ b/src/types/w3cTransformedToken.d.ts @@ -1,8 +1,8 @@ -import type StyleDictionary from 'style-dictionary' +import type {TransformedToken} from 'style-dictionary/types' export type w3cTokenType = 'color' | 'dimension' | 'fontFamily' | 'fontWeight' | 'duration' | 'cubicBezier' export type w3cCompositeTokenType = 'shadow' | 'border' | 'gradient' | 'transition' | 'strokeStyle' | 'typography' -export interface w3cTransformedToken extends StyleDictionary.TransformedToken { +export interface w3cTransformedToken extends TransformedToken { $type?: w3cTokenType | w3cCompositeTokenType } diff --git a/src/utilities/filterStringArray.test.ts b/src/utilities/filterStringArray.test.ts index 28859f616..59d21997b 100644 --- a/src/utilities/filterStringArray.test.ts +++ b/src/utilities/filterStringArray.test.ts @@ -1,4 +1,4 @@ -import {filterStringArray} from './filterStringArray' +import {filterStringArray} from './filterStringArray.js' describe('Utilities: filterStringArray', () => { it('keeps words', () => { diff --git a/src/utilities/getFlag.test.ts b/src/utilities/getFlag.test.ts index 8b5b710e5..46de8a024 100644 --- a/src/utilities/getFlag.test.ts +++ b/src/utilities/getFlag.test.ts @@ -1,4 +1,4 @@ -import {getFlag} from './getFlag' +import {getFlag} from './getFlag.js' import {vi} from 'vitest' describe('Utilities: getFlag', () => { diff --git a/src/utilities/index.ts b/src/utilities/index.ts index baad04d3b..6ad00fc8b 100644 --- a/src/utilities/index.ts +++ b/src/utilities/index.ts @@ -1,3 +1,9 @@ -export {copyFromDir} from './copyFromDir' -export {upperCaseFirstCharacter} from './upperCaseFirstCharacter' -export {toCamelCase} from './toCamelCase' +export {copyFromDir} from './copyFromDir.js' +export {filterStringArray} from './filterStringArray.js' +export {getFlag} from './getFlag.js' +export {joinFriendly} from './joinFriendly.js' +export {schemaErrorMessage} from './schemaErrorMessage.js' +export {toCamelCase} from './toCamelCase.js' +export {toPascalCase} from './toPascalCase.js' +export {treeWalker} from './treeWalker.js' +export {upperCaseFirstCharacter} from './upperCaseFirstCharacter.js' diff --git a/src/utilities/joinFriendly.test.ts b/src/utilities/joinFriendly.test.ts index d19b87699..3defdefd9 100644 --- a/src/utilities/joinFriendly.test.ts +++ b/src/utilities/joinFriendly.test.ts @@ -1,4 +1,4 @@ -import {joinFriendly} from './joinFriendly' +import {joinFriendly} from './joinFriendly.js' describe('Utilities: joinFriendly', () => { it('it joins items with and for last item', () => { diff --git a/src/utilities/toCamelCase.test.ts b/src/utilities/toCamelCase.test.ts index b6bc3502b..850c23268 100644 --- a/src/utilities/toCamelCase.test.ts +++ b/src/utilities/toCamelCase.test.ts @@ -1,4 +1,4 @@ -import {toCamelCase} from './toCamelCase' +import {toCamelCase} from './toCamelCase.js' describe('Utilities: toCamelCase', () => { it('it transforms all lowercase word', () => { diff --git a/src/utilities/toCamelCase.ts b/src/utilities/toCamelCase.ts index 40556dc5e..10771f366 100644 --- a/src/utilities/toCamelCase.ts +++ b/src/utilities/toCamelCase.ts @@ -1,5 +1,5 @@ -import {filterStringArray} from './filterStringArray' -import {upperCaseFirstCharacter} from './upperCaseFirstCharacter' +import {filterStringArray} from './filterStringArray.js' +import {upperCaseFirstCharacter} from './upperCaseFirstCharacter.js' export const toCamelCase = (string: string | string[]) => { if (!Array.isArray(string)) { diff --git a/src/utilities/toPascalCase.test.ts b/src/utilities/toPascalCase.test.ts index 28673166a..fd0e89474 100644 --- a/src/utilities/toPascalCase.test.ts +++ b/src/utilities/toPascalCase.test.ts @@ -1,4 +1,4 @@ -import {toPascalCase} from './toPascalCase' +import {toPascalCase} from './toPascalCase.js' describe('Utilities: toPascalCase', () => { it('it transforms all lowercase word', () => { diff --git a/src/utilities/treeWalker.test.ts b/src/utilities/treeWalker.test.ts index 69b147adf..415345e5b 100644 --- a/src/utilities/treeWalker.test.ts +++ b/src/utilities/treeWalker.test.ts @@ -1,4 +1,4 @@ -import {treeWalker} from './treeWalker' +import {treeWalker} from './treeWalker.js' describe('Utilities: treeWalker', () => { const isValidItem = (item: unknown) => { diff --git a/src/utilities/upperCaseFirstCharacter.test.ts b/src/utilities/upperCaseFirstCharacter.test.ts index f5feb2e44..c89b65d40 100644 --- a/src/utilities/upperCaseFirstCharacter.test.ts +++ b/src/utilities/upperCaseFirstCharacter.test.ts @@ -1,4 +1,4 @@ -import {upperCaseFirstCharacter} from './upperCaseFirstCharacter' +import {upperCaseFirstCharacter} from './upperCaseFirstCharacter.js' describe('Utilities: upperCaseFirstCharacter', () => { it('it transforms all lowercase word', () => { diff --git a/tsconfig.json b/tsconfig.json index d5fca2ab0..338a92dd0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,9 +2,9 @@ "compilerOptions": { "jsx": "react", "target": "ES2016", - "module": "commonjs", + "module": "Node16", "lib": ["ESNext", "dom"], - "moduleResolution": "node", + "moduleResolution": "Node16", "esModuleInterop": true, "strict": true, "noImplicitAny": true,