From 60a994094085a731e3108d95e42a33f2d6fe44aa Mon Sep 17 00:00:00 2001 From: Nate Moore Date: Wed, 25 Sep 2024 09:02:17 -0500 Subject: [PATCH 1/7] chore: update node, move to biome --- biome.json | 30 + package.json | 26 +- pnpm-lock.yaml | 4211 ++++++++++++++++++++++++++++-------------------- 3 files changed, 2525 insertions(+), 1742 deletions(-) create mode 100644 biome.json diff --git a/biome.json b/biome.json new file mode 100644 index 0000000..9ff5646 --- /dev/null +++ b/biome.json @@ -0,0 +1,30 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.9.2/schema.json", + "vcs": { + "enabled": false, + "clientKind": "git", + "useIgnoreFile": false + }, + "files": { + "ignoreUnknown": false, + "ignore": [] + }, + "formatter": { + "enabled": true, + "indentStyle": "tab" + }, + "organizeImports": { + "enabled": true + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true + } + }, + "javascript": { + "formatter": { + "quoteStyle": "single" + } + } +} diff --git a/package.json b/package.json index cc75bd5..e170319 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "homepage": "https://github.com/natemoo-re/ultrahtml#README", "scripts": { "build": "node scripts/build.js", - "lint": "prettier \"**/*.{js,ts,md}\"", + "format": "biome format --write", "dev": "vitest", "test": "vitest run" }, @@ -57,24 +57,24 @@ }, "license": "MIT", "volta": { - "node": "18.7.0" + "node": "18.20.4" }, "packageManager": "pnpm@7.6.0", "devDependencies": { - "@changesets/cli": "^2.18.1", - "@types/stylis": "^4.0.2", - "chalk": "^5.1.2", - "dts-bundle-generator": "^9.2.1", - "esbuild": "^0.14.51", - "globby": "^13.1.2", + "@biomejs/biome": "1.9.2", + "@changesets/cli": "^2.27.8", + "@types/stylis": "^4.2.6", + "chalk": "^5.3.0", + "dts-bundle-generator": "^9.5.1", + "esbuild": "^0.14.54", + "globby": "^13.2.2", "gzip-size": "^7.0.0", - "markdown-it": "^13.0.1", + "markdown-it": "^13.0.2", "media-query-fns": "^2.0.0", "npm-run-all": "^4.1.5", "parsel-js": "^1.1.2", - "prettier": "^2.5.1", - "pretty-bytes": "^6.0.0", - "stylis": "^4.1.2", - "vitest": "^0.20.2" + "pretty-bytes": "^6.1.1", + "stylis": "^4.3.4", + "vitest": "^2.1.1" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8262ac8..4cb4fe6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,1566 +1,2643 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -devDependencies: - '@changesets/cli': - specifier: ^2.18.1 - version: 2.24.1 - '@types/stylis': - specifier: ^4.0.2 - version: 4.0.2 - chalk: - specifier: ^5.1.2 - version: 5.1.2 - dts-bundle-generator: - specifier: ^9.2.1 - version: 9.2.1 - esbuild: - specifier: ^0.14.51 - version: 0.14.51 - globby: - specifier: ^13.1.2 - version: 13.1.2 - gzip-size: - specifier: ^7.0.0 - version: 7.0.0 - markdown-it: - specifier: ^13.0.1 - version: 13.0.1 - media-query-fns: - specifier: ^2.0.0 - version: 2.0.0 - npm-run-all: - specifier: ^4.1.5 - version: 4.1.5 - parsel-js: - specifier: ^1.1.2 - version: 1.1.2 - prettier: - specifier: ^2.5.1 - version: 2.7.1 - pretty-bytes: - specifier: ^6.0.0 - version: 6.0.0 - stylis: - specifier: ^4.1.2 - version: 4.1.2 - vitest: - specifier: ^0.20.2 - version: 0.20.2 +importers: + + .: + devDependencies: + '@biomejs/biome': + specifier: 1.9.2 + version: 1.9.2 + '@changesets/cli': + specifier: ^2.27.8 + version: 2.27.8 + '@types/stylis': + specifier: ^4.2.6 + version: 4.2.6 + chalk: + specifier: ^5.3.0 + version: 5.3.0 + dts-bundle-generator: + specifier: ^9.5.1 + version: 9.5.1 + esbuild: + specifier: ^0.14.54 + version: 0.14.54 + globby: + specifier: ^13.2.2 + version: 13.2.2 + gzip-size: + specifier: ^7.0.0 + version: 7.0.0 + markdown-it: + specifier: ^13.0.2 + version: 13.0.2 + media-query-fns: + specifier: ^2.0.0 + version: 2.0.0 + npm-run-all: + specifier: ^4.1.5 + version: 4.1.5 + parsel-js: + specifier: ^1.1.2 + version: 1.1.2 + pretty-bytes: + specifier: ^6.1.1 + version: 6.1.1 + stylis: + specifier: ^4.3.4 + version: 4.3.4 + vitest: + specifier: ^2.1.1 + version: 2.1.1(@types/node@18.6.3) packages: - /@babel/code-frame@7.18.6: - resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} + '@babel/runtime@7.25.6': + resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.18.6 - dev: true - /@babel/helper-validator-identifier@7.18.6: - resolution: {integrity: sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==} - engines: {node: '>=6.9.0'} - dev: true + '@biomejs/biome@1.9.2': + resolution: {integrity: sha512-4j2Gfwft8Jqp1X0qLYvK4TEy4xhTo4o6rlvJPsjPeEame8gsmbGQfOPBkw7ur+7/Z/f0HZmCZKqbMvR7vTXQYQ==} + engines: {node: '>=14.21.3'} + hasBin: true + + '@biomejs/cli-darwin-arm64@1.9.2': + resolution: {integrity: sha512-rbs9uJHFmhqB3Td0Ro+1wmeZOHhAPTL3WHr8NtaVczUmDhXkRDWScaxicG9+vhSLj1iLrW47itiK6xiIJy6vaA==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [darwin] + + '@biomejs/cli-darwin-x64@1.9.2': + resolution: {integrity: sha512-BlfULKijNaMigQ9GH9fqJVt+3JTDOSiZeWOQtG/1S1sa8Lp046JHG3wRJVOvekTPL9q/CNFW1NVG8J0JN+L1OA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [darwin] + + '@biomejs/cli-linux-arm64-musl@1.9.2': + resolution: {integrity: sha512-ZATvbUWhNxegSALUnCKWqetTZqrK72r2RsFD19OK5jXDj/7o1hzI1KzDNG78LloZxftrwr3uI9SqCLh06shSZw==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-arm64@1.9.2': + resolution: {integrity: sha512-T8TJuSxuBDeQCQzxZu2o3OU4eyLumTofhCxxFd3+aH2AEWVMnH7Z/c3QP1lHI5RRMBP9xIJeMORqDQ5j+gVZzw==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-x64-musl@1.9.2': + resolution: {integrity: sha512-CjPM6jT1miV5pry9C7qv8YJk0FIZvZd86QRD3atvDgfgeh9WQU0k2Aoo0xUcPdTnoz0WNwRtDicHxwik63MmSg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-linux-x64@1.9.2': + resolution: {integrity: sha512-T0cPk3C3Jr2pVlsuQVTBqk2qPjTm8cYcTD9p/wmR9MeVqui1C/xTVfOIwd3miRODFMrJaVQ8MYSXnVIhV9jTjg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-win32-arm64@1.9.2': + resolution: {integrity: sha512-2x7gSty75bNIeD23ZRPXyox6Z/V0M71ObeJtvQBhi1fgrvPdtkEuw7/0wEHg6buNCubzOFuN9WYJm6FKoUHfhg==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [win32] + + '@biomejs/cli-win32-x64@1.9.2': + resolution: {integrity: sha512-JC3XvdYcjmu1FmAehVwVV0SebLpeNTnO2ZaMdGCSOdS7f8O9Fq14T2P1gTG1Q29Q8Dt1S03hh0IdVpIZykOL8g==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [win32] + + '@changesets/apply-release-plan@7.0.5': + resolution: {integrity: sha512-1cWCk+ZshEkSVEZrm2fSj1Gz8sYvxgUL4Q78+1ZZqeqfuevPTPk033/yUZ3df8BKMohkqqHfzj0HOOrG0KtXTw==} + + '@changesets/assemble-release-plan@6.0.4': + resolution: {integrity: sha512-nqICnvmrwWj4w2x0fOhVj2QEGdlUuwVAwESrUo5HLzWMI1rE5SWfsr9ln+rDqWB6RQ2ZyaMZHUcU7/IRaUJS+Q==} + + '@changesets/changelog-git@0.2.0': + resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} + + '@changesets/cli@2.27.8': + resolution: {integrity: sha512-gZNyh+LdSsI82wBSHLQ3QN5J30P4uHKJ4fXgoGwQxfXwYFTJzDdvIJasZn8rYQtmKhyQuiBj4SSnLuKlxKWq4w==} + hasBin: true + + '@changesets/config@3.0.3': + resolution: {integrity: sha512-vqgQZMyIcuIpw9nqFIpTSNyc/wgm/Lu1zKN5vECy74u95Qx/Wa9g27HdgO4NkVAaq+BGA8wUc/qvbvVNs93n6A==} + + '@changesets/errors@0.2.0': + resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} + + '@changesets/get-dependents-graph@2.1.2': + resolution: {integrity: sha512-sgcHRkiBY9i4zWYBwlVyAjEM9sAzs4wYVwJUdnbDLnVG3QwAaia1Mk5P8M7kraTOZN+vBET7n8KyB0YXCbFRLQ==} + + '@changesets/get-release-plan@4.0.4': + resolution: {integrity: sha512-SicG/S67JmPTrdcc9Vpu0wSQt7IiuN0dc8iR5VScnnTVPfIaLvKmEGRvIaF0kcn8u5ZqLbormZNTO77bCEvyWw==} + + '@changesets/get-version-range-type@0.4.0': + resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} + + '@changesets/git@3.0.1': + resolution: {integrity: sha512-pdgHcYBLCPcLd82aRcuO0kxCDbw/yISlOtkmwmE8Odo1L6hSiZrBOsRl84eYG7DRCab/iHnOkWqExqc4wxk2LQ==} + + '@changesets/logger@0.1.1': + resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} + + '@changesets/parse@0.4.0': + resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} + + '@changesets/pre@2.0.1': + resolution: {integrity: sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ==} + + '@changesets/read@0.6.1': + resolution: {integrity: sha512-jYMbyXQk3nwP25nRzQQGa1nKLY0KfoOV7VLgwucI0bUO8t8ZLCr6LZmgjXsiKuRDc+5A6doKPr9w2d+FEJ55zQ==} + + '@changesets/should-skip-package@0.1.1': + resolution: {integrity: sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg==} + + '@changesets/types@4.1.0': + resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} + + '@changesets/types@6.0.0': + resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} + + '@changesets/write@0.3.2': + resolution: {integrity: sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==} + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.14.54': + resolution: {integrity: sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@manypkg/find-root@1.1.0': + resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + + '@manypkg/get-packages@1.1.3': + resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@rollup/rollup-android-arm-eabi@4.22.4': + resolution: {integrity: sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.22.4': + resolution: {integrity: sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.22.4': + resolution: {integrity: sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.22.4': + resolution: {integrity: sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-linux-arm-gnueabihf@4.22.4': + resolution: {integrity: sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.22.4': + resolution: {integrity: sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.22.4': + resolution: {integrity: sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.22.4': + resolution: {integrity: sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.22.4': + resolution: {integrity: sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.22.4': + resolution: {integrity: sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.22.4': + resolution: {integrity: sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.22.4': + resolution: {integrity: sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.22.4': + resolution: {integrity: sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.22.4': + resolution: {integrity: sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.22.4': + resolution: {integrity: sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.22.4': + resolution: {integrity: sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==} + cpu: [x64] + os: [win32] + + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@18.6.3': + resolution: {integrity: sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg==} + + '@types/semver@7.5.8': + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + + '@types/stylis@4.2.6': + resolution: {integrity: sha512-4nebF2ZJGzQk0ka0O6+FZUWceyFv4vWq/0dXBMmrSeAwzOuOd/GxE5Pa64d/ndeNLG73dXoBsRzvtsVsYUv6Uw==} + + '@vitest/expect@2.1.1': + resolution: {integrity: sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==} + + '@vitest/mocker@2.1.1': + resolution: {integrity: sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==} + peerDependencies: + '@vitest/spy': 2.1.1 + msw: ^2.3.5 + vite: ^5.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@2.1.1': + resolution: {integrity: sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==} + + '@vitest/runner@2.1.1': + resolution: {integrity: sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==} + + '@vitest/snapshot@2.1.1': + resolution: {integrity: sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==} + + '@vitest/spy@2.1.1': + resolution: {integrity: sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==} + + '@vitest/utils@2.1.1': + resolution: {integrity: sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + better-path-resolve@1.0.0: + resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} + engines: {node: '>=4'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + chai@5.1.1: + resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==} + engines: {node: '>=12'} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + cross-spawn@5.1.0: + resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} + + cross-spawn@6.0.5: + resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} + engines: {node: '>=4.8'} + + data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + dts-bundle-generator@9.5.1: + resolution: {integrity: sha512-DxpJOb2FNnEyOzMkG11sxO2dmxPjthoVWxfKqWYJ/bI/rT1rvTMktF5EKjAYrRZu6Z6t3NhOUZ0sZ5ZXevOfbA==} + engines: {node: '>=14.0.0'} + hasBin: true + + duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + + entities@3.0.1: + resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} + engines: {node: '>=0.12'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + + esbuild-android-64@0.14.54: + resolution: {integrity: sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + esbuild-android-arm64@0.14.54: + resolution: {integrity: sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + esbuild-darwin-64@0.14.54: + resolution: {integrity: sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + esbuild-darwin-arm64@0.14.54: + resolution: {integrity: sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + esbuild-freebsd-64@0.14.54: + resolution: {integrity: sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + esbuild-freebsd-arm64@0.14.54: + resolution: {integrity: sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + esbuild-linux-32@0.14.54: + resolution: {integrity: sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + esbuild-linux-64@0.14.54: + resolution: {integrity: sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + esbuild-linux-arm64@0.14.54: + resolution: {integrity: sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + esbuild-linux-arm@0.14.54: + resolution: {integrity: sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + esbuild-linux-mips64le@0.14.54: + resolution: {integrity: sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + esbuild-linux-ppc64le@0.14.54: + resolution: {integrity: sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + esbuild-linux-riscv64@0.14.54: + resolution: {integrity: sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + esbuild-linux-s390x@0.14.54: + resolution: {integrity: sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + esbuild-netbsd-64@0.14.54: + resolution: {integrity: sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + esbuild-openbsd-64@0.14.54: + resolution: {integrity: sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + esbuild-sunos-64@0.14.54: + resolution: {integrity: sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + esbuild-windows-32@0.14.54: + resolution: {integrity: sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + esbuild-windows-64@0.14.54: + resolution: {integrity: sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + esbuild-windows-arm64@0.14.54: + resolution: {integrity: sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + esbuild@0.14.54: + resolution: {integrity: sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + extendable-error@0.1.7: + resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + gzip-size@7.0.0: + resolution: {integrity: sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + + human-id@1.0.2: + resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-subdir@1.2.0: + resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} + engines: {node: '>=4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + linkify-it@4.0.1: + resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==} + + load-json-file@4.0.0: + resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} + engines: {node: '>=4'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + + loupe@3.1.1: + resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==} + + lru-cache@4.1.5: + resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + + magic-string@0.30.11: + resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} + + markdown-it@13.0.2: + resolution: {integrity: sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==} + hasBin: true + + mdurl@1.0.1: + resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} + + media-query-fns@2.0.0: + resolution: {integrity: sha512-HAIvh3utK+RMkNT/3Cc3fZuA2WJj4nISBHcmcXuSBaosB3slwl/iVjO/coroelDjOgKFgpe4oAoy7OO2sCgDog==} + engines: {node: '>=16.0.0 || ^14.13.1'} + + media-query-parser@3.0.0-beta.1: + resolution: {integrity: sha512-LWNtMYGpFmRnOYWVG0KNHKz8grWc7bHym9KTecl2cU5dzUv50qiafcfqeLmV6t2j4ZhnAWfTcQ++ejjyGvLdsg==} + engines: {node: '>=16.0.0 || ^14.13.1'} + + memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + nice-try@1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + + normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + + npm-run-all@4.1.5: + resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} + engines: {node: '>= 4'} + hasBin: true + + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + outdent@0.5.0: + resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + + p-filter@2.1.0: + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} + engines: {node: '>=8'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-manager-detector@0.2.0: + resolution: {integrity: sha512-E385OSk9qDcXhcM9LNSe4sdhx8a9mAPrZ4sMLW+tmxl5ZuGtPUcdFu+MPP2jbgiWAZ6Pfe5soGFMd+0Db5Vrog==} + + parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + + parsel-js@1.1.2: + resolution: {integrity: sha512-D66DG2nKx4Yoq66TMEyCUHlR2STGqO7vsBrX7tgyS9cfQyO6XD5JyzOiflwmWN6a4wbUAqpmHqmrxlTQVGZcbA==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-type@3.0.0: + resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} + engines: {node: '>=4'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} + + picocolors@1.1.0: + resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pidtree@0.3.1: + resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} + engines: {node: '>=0.10'} + hasBin: true + + pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + postcss@8.4.47: + resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} + engines: {node: ^10 || ^12 || >=14} + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + pretty-bytes@6.1.1: + resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} + engines: {node: ^14.13.1 || >=16.0.0} + + pseudomap@1.0.2: + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + read-pkg@3.0.0: + resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} + engines: {node: '>=4'} + + read-yaml-file@1.1.0: + resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} + engines: {node: '>=6'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rollup@4.22.4: + resolution: {integrity: sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + + shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + + shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + spawndamnit@2.0.0: + resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.20: + resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + std-env@3.7.0: + resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string.prototype.padend@3.1.6: + resolution: {integrity: sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==} + engines: {node: '>= 0.4'} + + string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + stylis@4.3.4: + resolution: {integrity: sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + term-size@2.2.1: + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} + engines: {node: '>=8'} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.0: + resolution: {integrity: sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==} + + tinypool@1.0.1: + resolution: {integrity: sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@1.2.0: + resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + engines: {node: '>=14.0.0'} + + tinyspy@3.0.2: + resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + engines: {node: '>=14.0.0'} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + + typescript@5.6.2: + resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} + engines: {node: '>=14.17'} + hasBin: true + + uc.micro@1.0.6: + resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} - /@babel/highlight@7.18.6: - resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.18.6 - chalk: 2.4.2 - js-tokens: 4.0.0 - dev: true + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - /@babel/runtime@7.18.9: - resolution: {integrity: sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==} - engines: {node: '>=6.9.0'} + vite-node@2.1.1: + resolution: {integrity: sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + + vite@5.4.8: + resolution: {integrity: sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vitest@2.1.1: + resolution: {integrity: sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': 2.1.1 + '@vitest/ui': 2.1.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 + + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@2.1.2: + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + +snapshots: + + '@babel/runtime@7.25.6': dependencies: - regenerator-runtime: 0.13.9 - dev: true + regenerator-runtime: 0.14.1 + + '@biomejs/biome@1.9.2': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 1.9.2 + '@biomejs/cli-darwin-x64': 1.9.2 + '@biomejs/cli-linux-arm64': 1.9.2 + '@biomejs/cli-linux-arm64-musl': 1.9.2 + '@biomejs/cli-linux-x64': 1.9.2 + '@biomejs/cli-linux-x64-musl': 1.9.2 + '@biomejs/cli-win32-arm64': 1.9.2 + '@biomejs/cli-win32-x64': 1.9.2 + + '@biomejs/cli-darwin-arm64@1.9.2': + optional: true + + '@biomejs/cli-darwin-x64@1.9.2': + optional: true + + '@biomejs/cli-linux-arm64-musl@1.9.2': + optional: true + + '@biomejs/cli-linux-arm64@1.9.2': + optional: true + + '@biomejs/cli-linux-x64-musl@1.9.2': + optional: true + + '@biomejs/cli-linux-x64@1.9.2': + optional: true + + '@biomejs/cli-win32-arm64@1.9.2': + optional: true + + '@biomejs/cli-win32-x64@1.9.2': + optional: true - /@changesets/apply-release-plan@6.0.3: - resolution: {integrity: sha512-/3JKqtDefs2YSEQI6JQo43/MKTLfhPdrW/BFmqnRpW8UmPB+YXjjQgfjR/2KOaObLOkoixcL3WCK4wNkn/Krmw==} + '@changesets/apply-release-plan@7.0.5': dependencies: - '@babel/runtime': 7.18.9 - '@changesets/config': 2.1.0 - '@changesets/get-version-range-type': 0.3.2 - '@changesets/git': 1.4.1 - '@changesets/types': 5.1.0 + '@changesets/config': 3.0.3 + '@changesets/get-version-range-type': 0.4.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.1.0 fs-extra: 7.0.1 lodash.startcase: 4.4.0 outdent: 0.5.0 - prettier: 1.19.1 + prettier: 2.8.8 resolve-from: 5.0.0 - semver: 5.7.1 - dev: true + semver: 7.6.3 - /@changesets/assemble-release-plan@5.2.0: - resolution: {integrity: sha512-ewY24PEbSec2eKX0+KM7eyENA2hUUp6s4LF9p/iBxTtc+TX2Xbx5rZnlLKZkc8tpuQ3PZbyjLFXWhd1PP6SjCg==} + '@changesets/assemble-release-plan@6.0.4': dependencies: - '@babel/runtime': 7.18.9 - '@changesets/errors': 0.1.4 - '@changesets/get-dependents-graph': 1.3.3 - '@changesets/types': 5.1.0 + '@changesets/errors': 0.2.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: 5.7.1 - dev: true - - /@changesets/changelog-git@0.1.12: - resolution: {integrity: sha512-Xv2CPjTBmwjl8l4ZyQ3xrsXZMq8WafPUpEonDpTmcb24XY8keVzt7ZSCJuDz035EiqrjmDKDhODoQ6XiHudlig==} - dependencies: - '@changesets/types': 5.1.0 - dev: true - - /@changesets/cli@2.24.1: - resolution: {integrity: sha512-7Lz1inqGQjBrXgnXlENtzQ7EmO/9c+09d9oi8XoK4ARqlJe8GpafjqKRobcjcA/TTI7Fn2+cke4CrXFZfVF8Rw==} - hasBin: true - dependencies: - '@babel/runtime': 7.18.9 - '@changesets/apply-release-plan': 6.0.3 - '@changesets/assemble-release-plan': 5.2.0 - '@changesets/changelog-git': 0.1.12 - '@changesets/config': 2.1.0 - '@changesets/errors': 0.1.4 - '@changesets/get-dependents-graph': 1.3.3 - '@changesets/get-release-plan': 3.0.12 - '@changesets/git': 1.4.1 - '@changesets/logger': 0.0.5 - '@changesets/pre': 1.0.12 - '@changesets/read': 0.5.7 - '@changesets/types': 5.1.0 - '@changesets/write': 0.1.9 + semver: 7.6.3 + + '@changesets/changelog-git@0.2.0': + dependencies: + '@changesets/types': 6.0.0 + + '@changesets/cli@2.27.8': + dependencies: + '@changesets/apply-release-plan': 7.0.5 + '@changesets/assemble-release-plan': 6.0.4 + '@changesets/changelog-git': 0.2.0 + '@changesets/config': 3.0.3 + '@changesets/errors': 0.2.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.2 '@manypkg/get-packages': 1.1.3 - '@types/is-ci': 3.0.0 - '@types/semver': 6.2.3 + '@types/semver': 7.5.8 ansi-colors: 4.1.3 - chalk: 2.4.2 - enquirer: 2.3.6 + ci-info: 3.9.0 + enquirer: 2.4.1 external-editor: 3.1.0 fs-extra: 7.0.1 - human-id: 1.0.2 - is-ci: 3.0.1 - meow: 6.1.1 + mri: 1.2.0 outdent: 0.5.0 p-limit: 2.3.0 - preferred-pm: 3.0.3 + package-manager-detector: 0.2.0 + picocolors: 1.1.0 resolve-from: 5.0.0 - semver: 5.7.1 + semver: 7.6.3 spawndamnit: 2.0.0 term-size: 2.2.1 - tty-table: 4.1.6 - dev: true - /@changesets/config@2.1.0: - resolution: {integrity: sha512-43potf+DwYHmH7EY19vxtCq6fqj7UUIrZ4DTwM3pVBqCKxFIytm7GPy7wNAsH06UvMw7NRuOu4QK5HN02GsIrw==} + '@changesets/config@3.0.3': dependencies: - '@changesets/errors': 0.1.4 - '@changesets/get-dependents-graph': 1.3.3 - '@changesets/logger': 0.0.5 - '@changesets/types': 5.1.0 + '@changesets/errors': 0.2.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 - micromatch: 4.0.5 - dev: true + micromatch: 4.0.8 - /@changesets/errors@0.1.4: - resolution: {integrity: sha512-HAcqPF7snsUJ/QzkWoKfRfXushHTu+K5KZLJWPb34s4eCZShIf8BFO3fwq6KU8+G7L5KdtN2BzQAXOSXEyiY9Q==} + '@changesets/errors@0.2.0': dependencies: extendable-error: 0.1.7 - dev: true - /@changesets/get-dependents-graph@1.3.3: - resolution: {integrity: sha512-h4fHEIt6X+zbxdcznt1e8QD7xgsXRAXd2qzLlyxoRDFSa6SxJrDAUyh7ZUNdhjBU4Byvp4+6acVWVgzmTy4UNQ==} + '@changesets/get-dependents-graph@2.1.2': dependencies: - '@changesets/types': 5.1.0 + '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 - chalk: 2.4.2 - fs-extra: 7.0.1 - semver: 5.7.1 - dev: true - - /@changesets/get-release-plan@3.0.12: - resolution: {integrity: sha512-TlpEdpxV5ZQmNeHoD6KNKAc01wjRrcu9/CQqzmO4qAlX7ARA4pIuAxd8QZ1AQXv/l4qhHox7SUYH3VLHfarv5w==} - dependencies: - '@babel/runtime': 7.18.9 - '@changesets/assemble-release-plan': 5.2.0 - '@changesets/config': 2.1.0 - '@changesets/pre': 1.0.12 - '@changesets/read': 0.5.7 - '@changesets/types': 5.1.0 + picocolors: 1.1.0 + semver: 7.6.3 + + '@changesets/get-release-plan@4.0.4': + dependencies: + '@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 - dev: true - /@changesets/get-version-range-type@0.3.2: - resolution: {integrity: sha512-SVqwYs5pULYjYT4op21F2pVbcrca4qA/bAA3FmFXKMN7Y+HcO8sbZUTx3TAy2VXulP2FACd1aC7f2nTuqSPbqg==} - dev: true + '@changesets/get-version-range-type@0.4.0': {} - /@changesets/git@1.4.1: - resolution: {integrity: sha512-GWwRXEqBsQ3nEYcyvY/u2xUK86EKAevSoKV/IhELoZ13caZ1A1TSak/71vyKILtzuLnFPk5mepP5HjBxr7lZ9Q==} + '@changesets/git@3.0.1': dependencies: - '@babel/runtime': 7.18.9 - '@changesets/errors': 0.1.4 - '@changesets/types': 5.1.0 + '@changesets/errors': 0.2.0 '@manypkg/get-packages': 1.1.3 is-subdir: 1.2.0 + micromatch: 4.0.8 spawndamnit: 2.0.0 - dev: true - /@changesets/logger@0.0.5: - resolution: {integrity: sha512-gJyZHomu8nASHpaANzc6bkQMO9gU/ib20lqew1rVx753FOxffnCrJlGIeQVxNWCqM+o6OOleCo/ivL8UAO5iFw==} + '@changesets/logger@0.1.1': dependencies: - chalk: 2.4.2 - dev: true + picocolors: 1.1.0 - /@changesets/parse@0.3.14: - resolution: {integrity: sha512-SWnNVyC9vz61ueTbuxvA6b4HXcSx2iaWr2VEa37lPg1Vw+cEyQp7lOB219P7uow1xFfdtIEEsxbzXnqLAAaY8w==} + '@changesets/parse@0.4.0': dependencies: - '@changesets/types': 5.1.0 + '@changesets/types': 6.0.0 js-yaml: 3.14.1 - dev: true - /@changesets/pre@1.0.12: - resolution: {integrity: sha512-RFzWYBZx56MtgMesXjxx7ymyI829/rcIw/41hvz3VJPnY8mDscN7RJyYu7Xm7vts2Fcd+SRcO0T/Ws3I1/6J7g==} + '@changesets/pre@2.0.1': dependencies: - '@babel/runtime': 7.18.9 - '@changesets/errors': 0.1.4 - '@changesets/types': 5.1.0 + '@changesets/errors': 0.2.0 + '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 - dev: true - /@changesets/read@0.5.7: - resolution: {integrity: sha512-Iteg0ccTPpkJ+qFzY97k7qqdVE5Kz30TqPo9GibpBk2g8tcLFUqf+Qd0iXPLcyhUZpPL1U6Hia1gINHNKIKx4g==} + '@changesets/read@0.6.1': dependencies: - '@babel/runtime': 7.18.9 - '@changesets/git': 1.4.1 - '@changesets/logger': 0.0.5 - '@changesets/parse': 0.3.14 - '@changesets/types': 5.1.0 - chalk: 2.4.2 + '@changesets/git': 3.0.1 + '@changesets/logger': 0.1.1 + '@changesets/parse': 0.4.0 + '@changesets/types': 6.0.0 fs-extra: 7.0.1 p-filter: 2.1.0 - dev: true + picocolors: 1.1.0 - /@changesets/types@4.1.0: - resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} - dev: true + '@changesets/should-skip-package@0.1.1': + dependencies: + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + + '@changesets/types@4.1.0': {} - /@changesets/types@5.1.0: - resolution: {integrity: sha512-uUByGATZCdaPkaO9JkBsgGDjEvHyY2Sb0e/J23+cwxBi5h0fxpLF/HObggO/Fw8T2nxK6zDfJbPsdQt5RwYFJA==} - dev: true + '@changesets/types@6.0.0': {} - /@changesets/write@0.1.9: - resolution: {integrity: sha512-E90ZrsrfJVOOQaP3Mm5Xd7uDwBAqq3z5paVEavTHKA8wxi7NAL8CmjgbGxSFuiP7ubnJA2BuHlrdE4z86voGOg==} + '@changesets/write@0.3.2': dependencies: - '@babel/runtime': 7.18.9 - '@changesets/types': 5.1.0 + '@changesets/types': 6.0.0 fs-extra: 7.0.1 human-id: 1.0.2 - prettier: 1.19.1 - dev: true + prettier: 2.8.8 - /@manypkg/find-root@1.1.0: - resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.14.54': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@manypkg/find-root@1.1.0': dependencies: - '@babel/runtime': 7.18.9 + '@babel/runtime': 7.25.6 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 - dev: true - /@manypkg/get-packages@1.1.3: - resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + '@manypkg/get-packages@1.1.3': dependencies: - '@babel/runtime': 7.18.9 + '@babel/runtime': 7.25.6 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 globby: 11.1.0 read-yaml-file: 1.1.0 - dev: true - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - dev: true - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: true + '@nodelib/fs.stat@2.0.5': {} - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.13.0 - dev: true + fastq: 1.17.1 - /@types/chai-subset@1.3.3: - resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} - dependencies: - '@types/chai': 4.3.1 - dev: true + '@rollup/rollup-android-arm-eabi@4.22.4': + optional: true + + '@rollup/rollup-android-arm64@4.22.4': + optional: true + + '@rollup/rollup-darwin-arm64@4.22.4': + optional: true + + '@rollup/rollup-darwin-x64@4.22.4': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.22.4': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.22.4': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.22.4': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.22.4': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.22.4': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.22.4': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.22.4': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.22.4': + optional: true + + '@rollup/rollup-linux-x64-musl@4.22.4': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.22.4': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.22.4': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.22.4': + optional: true + + '@types/estree@1.0.5': {} + + '@types/estree@1.0.6': {} + + '@types/node@12.20.55': {} - /@types/chai@4.3.1: - resolution: {integrity: sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==} - dev: true + '@types/node@18.6.3': + optional: true + + '@types/semver@7.5.8': {} - /@types/is-ci@3.0.0: - resolution: {integrity: sha512-Q0Op0hdWbYd1iahB+IFNQcWXFq4O0Q5MwQP7uN0souuQ4rPg1vEYcnIOfr1gY+M+6rc8FGoRaBO1mOOvL29sEQ==} + '@types/stylis@4.2.6': {} + + '@vitest/expect@2.1.1': dependencies: - ci-info: 3.3.2 - dev: true + '@vitest/spy': 2.1.1 + '@vitest/utils': 2.1.1 + chai: 5.1.1 + tinyrainbow: 1.2.0 - /@types/minimist@1.2.2: - resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} - dev: true + '@vitest/mocker@2.1.1(@vitest/spy@2.1.1)(vite@5.4.8(@types/node@18.6.3))': + dependencies: + '@vitest/spy': 2.1.1 + estree-walker: 3.0.3 + magic-string: 0.30.11 + optionalDependencies: + vite: 5.4.8(@types/node@18.6.3) - /@types/node@12.20.55: - resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - dev: true + '@vitest/pretty-format@2.1.1': + dependencies: + tinyrainbow: 1.2.0 - /@types/node@18.6.3: - resolution: {integrity: sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg==} - dev: true + '@vitest/runner@2.1.1': + dependencies: + '@vitest/utils': 2.1.1 + pathe: 1.1.2 - /@types/normalize-package-data@2.4.1: - resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} - dev: true + '@vitest/snapshot@2.1.1': + dependencies: + '@vitest/pretty-format': 2.1.1 + magic-string: 0.30.11 + pathe: 1.1.2 - /@types/semver@6.2.3: - resolution: {integrity: sha512-KQf+QAMWKMrtBMsB8/24w53tEsxllMj6TuA80TT/5igJalLI/zm0L3oXRbIAl4Ohfc85gyHX/jhMwsVkmhLU4A==} - dev: true + '@vitest/spy@2.1.1': + dependencies: + tinyspy: 3.0.2 - /@types/stylis@4.0.2: - resolution: {integrity: sha512-wtckGuk1eXUlUz0Qb1eXHG37Z7HWT2GfMdqRf8F/ifddTwadSS9Jwsqi4qtXk7cP7MtoyGVIHPElFCLc6HItbg==} - dev: true + '@vitest/utils@2.1.1': + dependencies: + '@vitest/pretty-format': 2.1.1 + loupe: 3.1.1 + tinyrainbow: 1.2.0 - /ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} - dev: true + ansi-colors@4.1.3: {} - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true + ansi-regex@5.0.1: {} - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 - dev: true - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - dev: true - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 - dev: true - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true + argparse@2.0.1: {} - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - dev: true + array-buffer-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 - /array.prototype.flat@1.3.0: - resolution: {integrity: sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==} - engines: {node: '>= 0.4'} + array-union@2.1.0: {} + + arraybuffer.prototype.slice@1.0.3: dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.1 - es-shim-unscopables: 1.0.0 - dev: true + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 - /arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - dev: true + assertion-error@2.0.1: {} - /assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} - dev: true + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true + balanced-match@1.0.2: {} - /better-path-resolve@1.0.0: - resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} - engines: {node: '>=4'} + better-path-resolve@1.0.0: dependencies: is-windows: 1.0.2 - dev: true - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true - - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 - dev: true - /breakword@1.0.5: - resolution: {integrity: sha512-ex5W9DoOQ/LUEU3PMdLs9ua/CYZl1678NUkKOdUSi8Aw5F1idieaiRURCBFJCwVcrD1J8Iy3vfWSloaMwO2qFg==} + braces@3.0.3: dependencies: - wcwidth: 1.0.1 - dev: true + fill-range: 7.1.1 - /call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} - dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.1.2 - dev: true + cac@6.7.14: {} - /camelcase-keys@6.2.2: - resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} - engines: {node: '>=8'} + call-bind@1.0.7: dependencies: - camelcase: 5.3.1 - map-obj: 4.3.0 - quick-lru: 4.0.1 - dev: true - - /camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - dev: true + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 - /chai@4.3.6: - resolution: {integrity: sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==} - engines: {node: '>=4'} + chai@5.1.1: dependencies: - assertion-error: 1.1.0 - check-error: 1.0.2 - deep-eql: 3.0.1 - get-func-name: 2.0.0 - loupe: 2.3.4 - pathval: 1.1.1 - type-detect: 4.0.8 - dev: true + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.1 + pathval: 2.0.0 - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 - dev: true - - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - - /chalk@5.1.2: - resolution: {integrity: sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true - /chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: true + chalk@5.3.0: {} - /check-error@1.0.2: - resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} - dev: true + chardet@0.7.0: {} - /ci-info@3.3.2: - resolution: {integrity: sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==} - dev: true + check-error@2.1.1: {} - /cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - dev: true + ci-info@3.9.0: {} - /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true - - /clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - dev: true - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@1.9.3: dependencies: color-name: 1.1.3 - dev: true - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - dev: true - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true + color-name@1.1.3: {} - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true + color-name@1.1.4: {} - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true + concat-map@0.0.1: {} - /cross-spawn@5.1.0: - resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} + cross-spawn@5.1.0: dependencies: lru-cache: 4.1.5 shebang-command: 1.2.0 which: 1.3.1 - dev: true - /cross-spawn@6.0.5: - resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} - engines: {node: '>=4.8'} + cross-spawn@6.0.5: dependencies: nice-try: 1.0.5 path-key: 2.0.1 - semver: 5.7.1 + semver: 5.7.2 shebang-command: 1.2.0 which: 1.3.1 - dev: true - - /csv-generate@3.4.3: - resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} - dev: true - - /csv-parse@4.16.3: - resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==} - dev: true - - /csv-stringify@5.6.5: - resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==} - dev: true - /csv@5.5.3: - resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} - engines: {node: '>= 0.1.90'} + data-view-buffer@1.0.1: dependencies: - csv-generate: 3.4.3 - csv-parse: 4.16.3 - csv-stringify: 5.6.5 - stream-transform: 2.1.3 - dev: true + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + data-view-byte-length@1.0.1: dependencies: - ms: 2.1.2 - dev: true + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 - /decamelize-keys@1.1.0: - resolution: {integrity: sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==} - engines: {node: '>=0.10.0'} + data-view-byte-offset@1.0.0: dependencies: - decamelize: 1.2.0 - map-obj: 1.0.1 - dev: true - - /decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - dev: true + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 - /deep-eql@3.0.1: - resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==} - engines: {node: '>=0.12'} + debug@4.3.7: dependencies: - type-detect: 4.0.8 - dev: true + ms: 2.1.3 - /defaults@1.0.3: - resolution: {integrity: sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==} + deep-eql@5.0.2: {} + + define-data-property@1.1.4: dependencies: - clone: 1.0.4 - dev: true + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 - /define-properties@1.1.4: - resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} - engines: {node: '>= 0.4'} + define-properties@1.2.1: dependencies: - has-property-descriptors: 1.0.0 + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 object-keys: 1.1.1 - dev: true - /detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} - dev: true + detect-indent@6.1.0: {} - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 - dev: true - /dts-bundle-generator@9.2.1: - resolution: {integrity: sha512-sMyIGJcn+FSc4f4VzRgX4muZS2uG91c/DjC++HkpZJyudGedSpGNR5bY9HEkSyyYFay0ERzjoDM7uKgUycaRvw==} - engines: {node: '>=14.0.0'} - hasBin: true + dts-bundle-generator@9.5.1: dependencies: - typescript: 5.2.2 + typescript: 5.6.2 yargs: 17.7.2 - dev: true - /duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - dev: true + duplexer@0.1.2: {} - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true + emoji-regex@8.0.0: {} - /enquirer@2.3.6: - resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} - engines: {node: '>=8.6'} + enquirer@2.4.1: dependencies: ansi-colors: 4.1.3 - dev: true + strip-ansi: 6.0.1 - /entities@3.0.1: - resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} - engines: {node: '>=0.12'} - dev: true + entities@3.0.1: {} - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 - dev: true - /es-abstract@1.20.1: - resolution: {integrity: sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 + es-abstract@1.23.3: + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 es-to-primitive: 1.2.1 - function-bind: 1.1.1 - function.prototype.name: 1.1.5 - get-intrinsic: 1.1.2 - get-symbol-description: 1.0.0 - has: 1.0.3 - has-property-descriptors: 1.0.0 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 has-symbols: 1.0.3 - internal-slot: 1.0.3 - is-callable: 1.2.4 - is-negative-zero: 2.0.2 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 + is-shared-array-buffer: 1.0.3 is-string: 1.0.7 + is-typed-array: 1.1.13 is-weakref: 1.0.2 - object-inspect: 1.12.2 + object-inspect: 1.13.2 object-keys: 1.1.1 - object.assign: 4.1.2 - regexp.prototype.flags: 1.4.3 - string.prototype.trimend: 1.0.5 - string.prototype.trimstart: 1.0.5 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 unbox-primitive: 1.0.2 - dev: true + which-typed-array: 1.1.15 - /es-shim-unscopables@1.0.0: - resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} + es-define-property@1.0.0: dependencies: - has: 1.0.3 - dev: true + get-intrinsic: 1.2.4 - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} + es-errors@1.3.0: {} + + es-object-atoms@1.0.0: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.0.3: dependencies: - is-callable: 1.2.4 + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-to-primitive@1.2.1: + dependencies: + is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 - dev: true - /esbuild-android-64@0.14.51: - resolution: {integrity: sha512-6FOuKTHnC86dtrKDmdSj2CkcKF8PnqkaIXqvgydqfJmqBazCPdw+relrMlhGjkvVdiiGV70rpdnyFmA65ekBCQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true + esbuild-android-64@0.14.54: optional: true - /esbuild-android-arm64@0.14.51: - resolution: {integrity: sha512-vBtp//5VVkZWmYYvHsqBRCMMi1MzKuMIn5XDScmnykMTu9+TD9v0NMEDqQxvtFToeYmojdo5UCV2vzMQWJcJ4A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true + esbuild-android-arm64@0.14.54: optional: true - /esbuild-darwin-64@0.14.51: - resolution: {integrity: sha512-YFmXPIOvuagDcwCejMRtCDjgPfnDu+bNeh5FU2Ryi68ADDVlWEpbtpAbrtf/lvFTWPexbgyKgzppNgsmLPr8PA==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true + esbuild-darwin-64@0.14.54: optional: true - /esbuild-darwin-arm64@0.14.51: - resolution: {integrity: sha512-juYD0QnSKwAMfzwKdIF6YbueXzS6N7y4GXPDeDkApz/1RzlT42mvX9jgNmyOlWKN7YzQAYbcUEJmZJYQGdf2ow==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true + esbuild-darwin-arm64@0.14.54: optional: true - /esbuild-freebsd-64@0.14.51: - resolution: {integrity: sha512-cLEI/aXjb6vo5O2Y8rvVSQ7smgLldwYY5xMxqh/dQGfWO+R1NJOFsiax3IS4Ng300SVp7Gz3czxT6d6qf2cw0g==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true + esbuild-freebsd-64@0.14.54: optional: true - /esbuild-freebsd-arm64@0.14.51: - resolution: {integrity: sha512-TcWVw/rCL2F+jUgRkgLa3qltd5gzKjIMGhkVybkjk6PJadYInPtgtUBp1/hG+mxyigaT7ib+od1Xb84b+L+1Mg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true + esbuild-freebsd-arm64@0.14.54: optional: true - /esbuild-linux-32@0.14.51: - resolution: {integrity: sha512-RFqpyC5ChyWrjx8Xj2K0EC1aN0A37H6OJfmUXIASEqJoHcntuV3j2Efr9RNmUhMfNE6yEj2VpYuDteZLGDMr0w==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true + esbuild-linux-32@0.14.54: optional: true - /esbuild-linux-64@0.14.51: - resolution: {integrity: sha512-dxjhrqo5i7Rq6DXwz5v+MEHVs9VNFItJmHBe1CxROWNf4miOGoQhqSG8StStbDkQ1Mtobg6ng+4fwByOhoQoeA==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + esbuild-linux-64@0.14.54: optional: true - /esbuild-linux-arm64@0.14.51: - resolution: {integrity: sha512-D9rFxGutoqQX3xJPxqd6o+kvYKeIbM0ifW2y0bgKk5HPgQQOo2k9/2Vpto3ybGYaFPCE5qTGtqQta9PoP6ZEzw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + esbuild-linux-arm64@0.14.54: optional: true - /esbuild-linux-arm@0.14.51: - resolution: {integrity: sha512-LsJynDxYF6Neg7ZC7748yweCDD+N8ByCv22/7IAZglIEniEkqdF4HCaa49JNDLw1UQGlYuhOB8ZT/MmcSWzcWg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true + esbuild-linux-arm@0.14.54: optional: true - /esbuild-linux-mips64le@0.14.51: - resolution: {integrity: sha512-vS54wQjy4IinLSlb5EIlLoln8buh1yDgliP4CuEHumrPk4PvvP4kTRIG4SzMXm6t19N0rIfT4bNdAxzJLg2k6A==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true + esbuild-linux-mips64le@0.14.54: optional: true - /esbuild-linux-ppc64le@0.14.51: - resolution: {integrity: sha512-xcdd62Y3VfGoyphNP/aIV9LP+RzFw5M5Z7ja+zdpQHHvokJM7d0rlDRMN+iSSwvUymQkqZO+G/xjb4/75du8BQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true + esbuild-linux-ppc64le@0.14.54: optional: true - /esbuild-linux-riscv64@0.14.51: - resolution: {integrity: sha512-syXHGak9wkAnFz0gMmRBoy44JV0rp4kVCEA36P5MCeZcxFq8+fllBC2t6sKI23w3qd8Vwo9pTADCgjTSf3L3rA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true + esbuild-linux-riscv64@0.14.54: optional: true - /esbuild-linux-s390x@0.14.51: - resolution: {integrity: sha512-kFAJY3dv+Wq8o28K/C7xkZk/X34rgTwhknSsElIqoEo8armCOjMJ6NsMxm48KaWY2h2RUYGtQmr+RGuUPKBhyw==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true + esbuild-linux-s390x@0.14.54: optional: true - /esbuild-netbsd-64@0.14.51: - resolution: {integrity: sha512-ZZBI7qrR1FevdPBVHz/1GSk1x5GDL/iy42Zy8+neEm/HA7ma+hH/bwPEjeHXKWUDvM36CZpSL/fn1/y9/Hb+1A==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true + esbuild-netbsd-64@0.14.54: optional: true - /esbuild-openbsd-64@0.14.51: - resolution: {integrity: sha512-7R1/p39M+LSVQVgDVlcY1KKm6kFKjERSX1lipMG51NPcspJD1tmiZSmmBXoY5jhHIu6JL1QkFDTx94gMYK6vfA==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true + esbuild-openbsd-64@0.14.54: optional: true - /esbuild-sunos-64@0.14.51: - resolution: {integrity: sha512-HoHaCswHxLEYN8eBTtyO0bFEWvA3Kdb++hSQ/lLG7TyKF69TeSG0RNoBRAs45x/oCeWaTDntEZlYwAfQlhEtJA==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true + esbuild-sunos-64@0.14.54: optional: true - /esbuild-windows-32@0.14.51: - resolution: {integrity: sha512-4rtwSAM35A07CBt1/X8RWieDj3ZUHQqUOaEo5ZBs69rt5WAFjP4aqCIobdqOy4FdhYw1yF8Z0xFBTyc9lgPtEg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true + esbuild-windows-32@0.14.54: optional: true - /esbuild-windows-64@0.14.51: - resolution: {integrity: sha512-HoN/5HGRXJpWODprGCgKbdMvrC3A2gqvzewu2eECRw2sYxOUoh2TV1tS+G7bHNapPGI79woQJGV6pFH7GH7qnA==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true + esbuild-windows-64@0.14.54: optional: true - /esbuild-windows-arm64@0.14.51: - resolution: {integrity: sha512-JQDqPjuOH7o+BsKMSddMfmVJXrnYZxXDHsoLHc0xgmAZkOOCflRmC43q31pk79F9xuyWY45jDBPolb5ZgGOf9g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true + esbuild-windows-arm64@0.14.54: optional: true - /esbuild@0.14.51: - resolution: {integrity: sha512-+CvnDitD7Q5sT7F+FM65sWkF8wJRf+j9fPcprxYV4j+ohmzVj2W7caUqH2s5kCaCJAfcAICjSlKhDCcvDpU7nw==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true + esbuild@0.14.54: optionalDependencies: - esbuild-android-64: 0.14.51 - esbuild-android-arm64: 0.14.51 - esbuild-darwin-64: 0.14.51 - esbuild-darwin-arm64: 0.14.51 - esbuild-freebsd-64: 0.14.51 - esbuild-freebsd-arm64: 0.14.51 - esbuild-linux-32: 0.14.51 - esbuild-linux-64: 0.14.51 - esbuild-linux-arm: 0.14.51 - esbuild-linux-arm64: 0.14.51 - esbuild-linux-mips64le: 0.14.51 - esbuild-linux-ppc64le: 0.14.51 - esbuild-linux-riscv64: 0.14.51 - esbuild-linux-s390x: 0.14.51 - esbuild-netbsd-64: 0.14.51 - esbuild-openbsd-64: 0.14.51 - esbuild-sunos-64: 0.14.51 - esbuild-windows-32: 0.14.51 - esbuild-windows-64: 0.14.51 - esbuild-windows-arm64: 0.14.51 - dev: true - - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: true - - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: true - - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /extendable-error@0.1.7: - resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} - dev: true - - /external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} + '@esbuild/linux-loong64': 0.14.54 + esbuild-android-64: 0.14.54 + esbuild-android-arm64: 0.14.54 + esbuild-darwin-64: 0.14.54 + esbuild-darwin-arm64: 0.14.54 + esbuild-freebsd-64: 0.14.54 + esbuild-freebsd-arm64: 0.14.54 + esbuild-linux-32: 0.14.54 + esbuild-linux-64: 0.14.54 + esbuild-linux-arm: 0.14.54 + esbuild-linux-arm64: 0.14.54 + esbuild-linux-mips64le: 0.14.54 + esbuild-linux-ppc64le: 0.14.54 + esbuild-linux-riscv64: 0.14.54 + esbuild-linux-s390x: 0.14.54 + esbuild-netbsd-64: 0.14.54 + esbuild-openbsd-64: 0.14.54 + esbuild-sunos-64: 0.14.54 + esbuild-windows-32: 0.14.54 + esbuild-windows-64: 0.14.54 + esbuild-windows-arm64: 0.14.54 + + esbuild@0.21.5: + 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 + + escalade@3.2.0: {} + + escape-string-regexp@1.0.5: {} + + esprima@4.0.1: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.6 + + extendable-error@0.1.7: {} + + external-editor@3.1.0: dependencies: chardet: 0.7.0 iconv-lite: 0.4.24 tmp: 0.0.33 - dev: true - /fast-glob@3.2.11: - resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} - engines: {node: '>=8.6.0'} + fast-glob@3.3.2: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.5 - dev: true + micromatch: 4.0.8 - /fastq@1.13.0: - resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} + fastq@1.17.1: dependencies: reusify: 1.0.4 - dev: true - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 - dev: true - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} + find-up@4.1.0: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - dev: true - - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - dev: true - /find-yarn-workspace-root2@1.2.16: - resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} + for-each@0.3.3: dependencies: - micromatch: 4.0.5 - pkg-dir: 4.2.0 - dev: true + is-callable: 1.2.7 - /fs-extra@7.0.1: - resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} - engines: {node: '>=6 <7 || >=8'} + fs-extra@7.0.1: dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 - dev: true - /fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} + fs-extra@8.1.0: dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 - dev: true - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true + fsevents@2.3.3: optional: true - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: true + function-bind@1.1.2: {} - /function.prototype.name@1.1.5: - resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} - engines: {node: '>= 0.4'} + function.prototype.name@1.1.6: dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 functions-have-names: 1.2.3 - dev: true - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true + functions-have-names@1.2.3: {} - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true + get-caller-file@2.0.5: {} - /get-func-name@2.0.0: - resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} - dev: true + get-func-name@2.0.2: {} - /get-intrinsic@1.1.2: - resolution: {integrity: sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==} + get-intrinsic@1.2.4: dependencies: - function-bind: 1.1.1 - has: 1.0.3 + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 has-symbols: 1.0.3 - dev: true + hasown: 2.0.2 - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} + get-symbol-description@1.0.2: dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.1.2 - dev: true + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - dev: true - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.0.1 + + globby@11.1.0: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.2.11 - ignore: 5.2.0 + fast-glob: 3.3.2 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 - dev: true - /globby@13.1.2: - resolution: {integrity: sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + globby@13.2.2: dependencies: dir-glob: 3.0.1 - fast-glob: 3.2.11 - ignore: 5.2.0 + fast-glob: 3.3.2 + ignore: 5.3.2 merge2: 1.4.1 slash: 4.0.0 - dev: true - /graceful-fs@4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} - dev: true + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 - /grapheme-splitter@1.0.4: - resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} - dev: true + graceful-fs@4.2.11: {} - /gzip-size@7.0.0: - resolution: {integrity: sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + gzip-size@7.0.0: dependencies: duplexer: 0.1.2 - dev: true - - /hard-rejection@2.1.0: - resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} - engines: {node: '>=6'} - dev: true - - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - dev: true + has-bigints@1.0.2: {} - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true + has-flag@3.0.0: {} - /has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + has-property-descriptors@1.0.2: dependencies: - get-intrinsic: 1.1.2 - dev: true + es-define-property: 1.0.0 - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true + has-proto@1.0.3: {} - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} + has-symbols@1.0.3: {} + + has-tostringtag@1.0.2: dependencies: has-symbols: 1.0.3 - dev: true - /has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} + hasown@2.0.2: dependencies: - function-bind: 1.1.1 - dev: true + function-bind: 1.1.2 - /hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: true + hosted-git-info@2.8.9: {} - /human-id@1.0.2: - resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} - dev: true + human-id@1.0.2: {} - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 - dev: true - /ignore@5.2.0: - resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} - engines: {node: '>= 4'} - dev: true + ignore@5.3.2: {} - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: true + internal-slot@1.0.7: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 - /internal-slot@1.0.3: - resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} - engines: {node: '>= 0.4'} + is-array-buffer@3.0.4: dependencies: - get-intrinsic: 1.1.2 - has: 1.0.3 - side-channel: 1.0.4 - dev: true + call-bind: 1.0.7 + get-intrinsic: 1.2.4 - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true + is-arrayish@0.2.1: {} - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + is-bigint@1.0.4: dependencies: has-bigints: 1.0.2 - dev: true - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} + is-boolean-object@1.1.2: dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - dev: true + call-bind: 1.0.7 + has-tostringtag: 1.0.2 - /is-callable@1.2.4: - resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==} - engines: {node: '>= 0.4'} - dev: true + is-callable@1.2.7: {} - /is-ci@3.0.1: - resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} - hasBin: true + is-core-module@2.15.1: dependencies: - ci-info: 3.3.2 - dev: true + hasown: 2.0.2 - /is-core-module@2.9.0: - resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==} + is-data-view@1.0.1: dependencies: - has: 1.0.3 - dev: true + is-typed-array: 1.1.13 - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} + is-date-object@1.0.5: dependencies: - has-tostringtag: 1.0.0 - dev: true + has-tostringtag: 1.0.2 - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true + is-extglob@2.1.1: {} - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true + is-fullwidth-code-point@3.0.0: {} - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - dev: true - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - dev: true + is-negative-zero@2.0.3: {} - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} + is-number-object@1.0.7: dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true + has-tostringtag: 1.0.2 - /is-plain-obj@1.1.0: - resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} - engines: {node: '>=0.10.0'} - dev: true + is-number@7.0.0: {} - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} + is-regex@1.1.4: dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - dev: true + call-bind: 1.0.7 + has-tostringtag: 1.0.2 - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + is-shared-array-buffer@1.0.3: dependencies: - call-bind: 1.0.2 - dev: true + call-bind: 1.0.7 - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} + is-string@1.0.7: dependencies: - has-tostringtag: 1.0.0 - dev: true + has-tostringtag: 1.0.2 - /is-subdir@1.2.0: - resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} - engines: {node: '>=4'} + is-subdir@1.2.0: dependencies: better-path-resolve: 1.0.0 - dev: true - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} + is-symbol@1.0.4: dependencies: has-symbols: 1.0.3 - dev: true - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + is-typed-array@1.1.13: dependencies: - call-bind: 1.0.2 - dev: true + which-typed-array: 1.1.15 - /is-windows@1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} - dev: true + is-weakref@1.0.2: + dependencies: + call-bind: 1.0.7 - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true + is-windows@1.0.2: {} - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: true + isarray@2.0.5: {} - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true + isexe@2.0.0: {} + + js-yaml@3.14.1: dependencies: argparse: 1.0.10 esprima: 4.0.1 - dev: true - - /json-parse-better-errors@1.0.2: - resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} - dev: true - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true + json-parse-better-errors@1.0.2: {} - /jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + jsonfile@4.0.0: optionalDependencies: - graceful-fs: 4.2.10 - dev: true - - /kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - dev: true + graceful-fs: 4.2.11 - /kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} - dev: true - - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true - - /linkify-it@4.0.1: - resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==} + linkify-it@4.0.1: dependencies: uc.micro: 1.0.6 - dev: true - /load-json-file@4.0.0: - resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} - engines: {node: '>=4'} + load-json-file@4.0.0: dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 parse-json: 4.0.0 pify: 3.0.0 strip-bom: 3.0.0 - dev: true - - /load-yaml-file@0.2.0: - resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} - engines: {node: '>=6'} - dependencies: - graceful-fs: 4.2.10 - js-yaml: 3.14.1 - pify: 4.0.1 - strip-bom: 3.0.0 - dev: true - /local-pkg@0.4.2: - resolution: {integrity: sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==} - engines: {node: '>=14'} - dev: true - - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} + locate-path@5.0.0: dependencies: p-locate: 4.1.0 - dev: true - - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - dependencies: - p-locate: 5.0.0 - dev: true - /lodash.startcase@4.4.0: - resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - dev: true + lodash.startcase@4.4.0: {} - /loupe@2.3.4: - resolution: {integrity: sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==} + loupe@3.1.1: dependencies: - get-func-name: 2.0.0 - dev: true + get-func-name: 2.0.2 - /lru-cache@4.1.5: - resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + lru-cache@4.1.5: dependencies: pseudomap: 1.0.2 yallist: 2.1.2 - dev: true - /map-obj@1.0.1: - resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} - engines: {node: '>=0.10.0'} - dev: true - - /map-obj@4.3.0: - resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} - engines: {node: '>=8'} - dev: true + magic-string@0.30.11: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 - /markdown-it@13.0.1: - resolution: {integrity: sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==} - hasBin: true + markdown-it@13.0.2: dependencies: argparse: 2.0.1 entities: 3.0.1 linkify-it: 4.0.1 mdurl: 1.0.1 uc.micro: 1.0.6 - dev: true - /mdurl@1.0.1: - resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} - dev: true + mdurl@1.0.1: {} - /media-query-fns@2.0.0: - resolution: {integrity: sha512-HAIvh3utK+RMkNT/3Cc3fZuA2WJj4nISBHcmcXuSBaosB3slwl/iVjO/coroelDjOgKFgpe4oAoy7OO2sCgDog==} - engines: {node: '>=16.0.0 || ^14.13.1'} + media-query-fns@2.0.0: dependencies: media-query-parser: 3.0.0-beta.1 - dev: true - /media-query-parser@3.0.0-beta.1: - resolution: {integrity: sha512-LWNtMYGpFmRnOYWVG0KNHKz8grWc7bHym9KTecl2cU5dzUv50qiafcfqeLmV6t2j4ZhnAWfTcQ++ejjyGvLdsg==} - engines: {node: '>=16.0.0 || ^14.13.1'} - dev: true + media-query-parser@3.0.0-beta.1: {} - /memorystream@0.3.1: - resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} - engines: {node: '>= 0.10.0'} - dev: true + memorystream@0.3.1: {} - /meow@6.1.1: - resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} - engines: {node: '>=8'} - dependencies: - '@types/minimist': 1.2.2 - camelcase-keys: 6.2.2 - decamelize-keys: 1.1.0 - hard-rejection: 2.1.0 - minimist-options: 4.1.0 - normalize-package-data: 2.5.0 - read-pkg-up: 7.0.1 - redent: 3.0.0 - trim-newlines: 3.0.1 - type-fest: 0.13.1 - yargs-parser: 18.1.3 - dev: true - - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true + merge2@1.4.1: {} - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} + micromatch@4.0.8: dependencies: - braces: 3.0.2 + braces: 3.0.3 picomatch: 2.3.1 - dev: true - - /min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - dev: true - - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - dependencies: - brace-expansion: 1.1.11 - dev: true - /minimist-options@4.1.0: - resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} - engines: {node: '>= 6'} + minimatch@3.1.2: dependencies: - arrify: 1.0.1 - is-plain-obj: 1.1.0 - kind-of: 6.0.3 - dev: true + brace-expansion: 1.1.11 - /mixme@0.5.4: - resolution: {integrity: sha512-3KYa4m4Vlqx98GPdOHghxSdNtTvcP8E0kkaJ5Dlh+h2DRzF7zpuVVcA8B0QpKd11YJeP9QQ7ASkKzOeu195Wzw==} - engines: {node: '>= 8.0.0'} - dev: true + mri@1.2.0: {} - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true + ms@2.1.3: {} - /nanoid@3.3.4: - resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true + nanoid@3.3.7: {} - /nice-try@1.0.5: - resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - dev: true + nice-try@1.0.5: {} - /normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.1 - semver: 5.7.1 + resolve: 1.22.8 + semver: 5.7.2 validate-npm-package-license: 3.0.4 - dev: true - /npm-run-all@4.1.5: - resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} - engines: {node: '>= 4'} - hasBin: true + npm-run-all@4.1.5: dependencies: ansi-styles: 3.2.1 chalk: 2.4.2 @@ -1569,779 +2646,455 @@ packages: minimatch: 3.1.2 pidtree: 0.3.1 read-pkg: 3.0.0 - shell-quote: 1.7.4 - string.prototype.padend: 3.1.3 - dev: true + shell-quote: 1.8.1 + string.prototype.padend: 3.1.6 - /object-inspect@1.12.2: - resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} - dev: true + object-inspect@1.13.2: {} - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true + object-keys@1.1.1: {} - /object.assign@4.1.2: - resolution: {integrity: sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==} - engines: {node: '>= 0.4'} + object.assign@4.1.5: dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 + call-bind: 1.0.7 + define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 - dev: true - /os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - dev: true + os-tmpdir@1.0.2: {} - /outdent@0.5.0: - resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} - dev: true + outdent@0.5.0: {} - /p-filter@2.1.0: - resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} - engines: {node: '>=8'} + p-filter@2.1.0: dependencies: p-map: 2.1.0 - dev: true - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + p-limit@2.3.0: dependencies: p-try: 2.2.0 - dev: true - - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - dependencies: - yocto-queue: 0.1.0 - dev: true - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} + p-locate@4.1.0: dependencies: p-limit: 2.3.0 - dev: true - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - dependencies: - p-limit: 3.1.0 - dev: true + p-map@2.1.0: {} - /p-map@2.1.0: - resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} - engines: {node: '>=6'} - dev: true + p-try@2.2.0: {} - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: true + package-manager-detector@0.2.0: {} - /parse-json@4.0.0: - resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} - engines: {node: '>=4'} + parse-json@4.0.0: dependencies: error-ex: 1.3.2 json-parse-better-errors: 1.0.2 - dev: true - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - dependencies: - '@babel/code-frame': 7.18.6 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - dev: true - - /parsel-js@1.1.2: - resolution: {integrity: sha512-D66DG2nKx4Yoq66TMEyCUHlR2STGqO7vsBrX7tgyS9cfQyO6XD5JyzOiflwmWN6a4wbUAqpmHqmrxlTQVGZcbA==} - dev: true + parsel-js@1.1.2: {} - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true + path-exists@4.0.0: {} - /path-key@2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} - engines: {node: '>=4'} - dev: true + path-key@2.0.1: {} - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true + path-parse@1.0.7: {} - /path-type@3.0.0: - resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} - engines: {node: '>=4'} + path-type@3.0.0: dependencies: pify: 3.0.0 - dev: true - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: true + path-type@4.0.0: {} - /pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} - dev: true + pathe@1.1.2: {} - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true + pathval@2.0.0: {} - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true + picocolors@1.1.0: {} - /pidtree@0.3.1: - resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} - engines: {node: '>=0.10'} - hasBin: true - dev: true + picomatch@2.3.1: {} - /pify@3.0.0: - resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} - engines: {node: '>=4'} - dev: true + pidtree@0.3.1: {} - /pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} - engines: {node: '>=6'} - dev: true + pify@3.0.0: {} - /pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} - dependencies: - find-up: 4.1.0 - dev: true + pify@4.0.1: {} - /postcss@8.4.14: - resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.4 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: true + possible-typed-array-names@1.0.0: {} - /preferred-pm@3.0.3: - resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==} - engines: {node: '>=10'} + postcss@8.4.47: dependencies: - find-up: 5.0.0 - find-yarn-workspace-root2: 1.2.16 - path-exists: 4.0.0 - which-pm: 2.0.0 - dev: true - - /prettier@1.19.1: - resolution: {integrity: sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /prettier@2.7.1: - resolution: {integrity: sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==} - engines: {node: '>=10.13.0'} - hasBin: true - dev: true + nanoid: 3.3.7 + picocolors: 1.1.0 + source-map-js: 1.2.1 - /pretty-bytes@6.0.0: - resolution: {integrity: sha512-6UqkYefdogmzqAZWzJ7laYeJnaXDy2/J+ZqiiMtS7t7OfpXWTlaeGMwX8U6EFvPV/YWWEKRkS8hKS4k60WHTOg==} - engines: {node: ^14.13.1 || >=16.0.0} - dev: true - - /pseudomap@1.0.2: - resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} - dev: true + prettier@2.8.8: {} - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true + pretty-bytes@6.1.1: {} - /quick-lru@4.0.1: - resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} - engines: {node: '>=8'} - dev: true + pseudomap@1.0.2: {} - /read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} - dependencies: - find-up: 4.1.0 - read-pkg: 5.2.0 - type-fest: 0.8.1 - dev: true + queue-microtask@1.2.3: {} - /read-pkg@3.0.0: - resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} - engines: {node: '>=4'} + read-pkg@3.0.0: dependencies: load-json-file: 4.0.0 normalize-package-data: 2.5.0 path-type: 3.0.0 - dev: true - - /read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} - dependencies: - '@types/normalize-package-data': 2.4.1 - normalize-package-data: 2.5.0 - parse-json: 5.2.0 - type-fest: 0.6.0 - dev: true - /read-yaml-file@1.1.0: - resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} - engines: {node: '>=6'} + read-yaml-file@1.1.0: dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 js-yaml: 3.14.1 pify: 4.0.1 strip-bom: 3.0.0 - dev: true - /redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} - dependencies: - indent-string: 4.0.0 - strip-indent: 3.0.0 - dev: true + regenerator-runtime@0.14.1: {} - /regenerator-runtime@0.13.9: - resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==} - dev: true - - /regexp.prototype.flags@1.4.3: - resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} - engines: {node: '>= 0.4'} + regexp.prototype.flags@1.5.2: dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - functions-have-names: 1.2.3 - dev: true - - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 - /require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - dev: true + require-directory@2.1.1: {} - /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: true + resolve-from@5.0.0: {} - /resolve@1.22.1: - resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} - hasBin: true + resolve@1.22.8: dependencies: - is-core-module: 2.9.0 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true + reusify@1.0.4: {} - /rollup@2.77.2: - resolution: {integrity: sha512-m/4YzYgLcpMQbxX3NmAqDvwLATZzxt8bIegO78FZLl+lAgKJBd1DRAOeEiZcKOIOPjxE6ewHWHNgGEalFXuz1g==} - engines: {node: '>=10.0.0'} - hasBin: true + rollup@4.22.4: + dependencies: + '@types/estree': 1.0.5 optionalDependencies: - fsevents: 2.3.2 - dev: true - - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + '@rollup/rollup-android-arm-eabi': 4.22.4 + '@rollup/rollup-android-arm64': 4.22.4 + '@rollup/rollup-darwin-arm64': 4.22.4 + '@rollup/rollup-darwin-x64': 4.22.4 + '@rollup/rollup-linux-arm-gnueabihf': 4.22.4 + '@rollup/rollup-linux-arm-musleabihf': 4.22.4 + '@rollup/rollup-linux-arm64-gnu': 4.22.4 + '@rollup/rollup-linux-arm64-musl': 4.22.4 + '@rollup/rollup-linux-powerpc64le-gnu': 4.22.4 + '@rollup/rollup-linux-riscv64-gnu': 4.22.4 + '@rollup/rollup-linux-s390x-gnu': 4.22.4 + '@rollup/rollup-linux-x64-gnu': 4.22.4 + '@rollup/rollup-linux-x64-musl': 4.22.4 + '@rollup/rollup-win32-arm64-msvc': 4.22.4 + '@rollup/rollup-win32-ia32-msvc': 4.22.4 + '@rollup/rollup-win32-x64-msvc': 4.22.4 + fsevents: 2.3.3 + + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - dev: true - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true + safe-array-concat@1.1.2: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + isarray: 2.0.5 - /semver@5.7.1: - resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} - hasBin: true - dev: true + safe-regex-test@1.0.3: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-regex: 1.1.4 - /set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - dev: true + safer-buffer@2.1.2: {} - /shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} + semver@5.7.2: {} + + semver@7.6.3: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + shebang-command@1.2.0: dependencies: shebang-regex: 1.0.0 - dev: true - /shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} - dev: true + shebang-regex@1.0.0: {} - /shell-quote@1.7.4: - resolution: {integrity: sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==} - dev: true + shell-quote@1.8.1: {} - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + side-channel@1.0.6: dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.1.2 - object-inspect: 1.12.2 - dev: true + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true + siginfo@2.0.0: {} - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - dev: true + signal-exit@3.0.7: {} - /slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - dev: true + slash@3.0.0: {} - /smartwrap@2.0.2: - resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} - engines: {node: '>=6'} - hasBin: true - dependencies: - array.prototype.flat: 1.3.0 - breakword: 1.0.5 - grapheme-splitter: 1.0.4 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - yargs: 15.4.1 - dev: true + slash@4.0.0: {} - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - dev: true + source-map-js@1.2.1: {} - /spawndamnit@2.0.0: - resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} + spawndamnit@2.0.0: dependencies: cross-spawn: 5.1.0 signal-exit: 3.0.7 - dev: true - /spdx-correct@3.1.1: - resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.11 - dev: true + spdx-license-ids: 3.0.20 - /spdx-exceptions@2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} - dev: true + spdx-exceptions@2.5.0: {} - /spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + spdx-expression-parse@3.0.1: dependencies: - spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.11 - dev: true + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.20 - /spdx-license-ids@3.0.11: - resolution: {integrity: sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==} - dev: true + spdx-license-ids@3.0.20: {} - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: true + sprintf-js@1.0.3: {} - /stream-transform@2.1.3: - resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} - dependencies: - mixme: 0.5.4 - dev: true + stackback@0.0.2: {} - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + std-env@3.7.0: {} + + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: true - /string.prototype.padend@3.1.3: - resolution: {integrity: sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==} - engines: {node: '>= 0.4'} + string.prototype.padend@3.1.6: dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.1 - dev: true + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 - /string.prototype.trimend@1.0.5: - resolution: {integrity: sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==} + string.prototype.trim@1.2.9: dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.1 - dev: true + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 - /string.prototype.trimstart@1.0.5: - resolution: {integrity: sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==} + string.prototype.trimend@1.0.8: dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.1 - dev: true + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + string.prototype.trimstart@1.0.8: dependencies: - ansi-regex: 5.0.1 - dev: true - - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - dev: true + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 - /strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: - min-indent: 1.0.1 - dev: true + ansi-regex: 5.0.1 - /stylis@4.1.2: - resolution: {integrity: sha512-Nn2CCrG2ZaFziDxaZPN43CXqn+j7tcdjPFCkRBkFue8QYXC2HdEwnw5TCBo4yQZ2WxKYeSi0fdoOrtEqgDrXbA==} - dev: true + strip-bom@3.0.0: {} - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + stylis@4.3.4: {} + + supports-color@5.5.0: dependencies: has-flag: 3.0.0 - dev: true - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - dev: true + supports-preserve-symlinks-flag@1.0.0: {} - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true + term-size@2.2.1: {} - /term-size@2.2.1: - resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} - engines: {node: '>=8'} - dev: true + tinybench@2.9.0: {} - /tinypool@0.2.4: - resolution: {integrity: sha512-Vs3rhkUH6Qq1t5bqtb816oT+HeJTXfwt2cbPH17sWHIYKTotQIFPk3tf2fgqRrVyMDVOc1EnPgzIxfIulXVzwQ==} - engines: {node: '>=14.0.0'} - dev: true + tinyexec@0.3.0: {} - /tinyspy@1.0.0: - resolution: {integrity: sha512-FI5B2QdODQYDRjfuLF+OrJ8bjWRMCXokQPcwKm0W3IzcbUmBNv536cQc7eXGoAuXphZwgx1DFbqImwzz08Fnhw==} - engines: {node: '>=14.0.0'} - dev: true + tinypool@1.0.1: {} - /tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} + tinyrainbow@1.2.0: {} + + tinyspy@3.0.2: {} + + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 - dev: true - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - dev: true - - /trim-newlines@3.0.1: - resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} - engines: {node: '>=8'} - dev: true - /tty-table@4.1.6: - resolution: {integrity: sha512-kRj5CBzOrakV4VRRY5kUWbNYvo/FpOsz65DzI5op9P+cHov3+IqPbo1JE1ZnQGkHdZgNFDsrEjrfqqy/Ply9fw==} - engines: {node: '>=8.0.0'} - hasBin: true + typed-array-buffer@1.0.2: dependencies: - chalk: 4.1.2 - csv: 5.5.3 - kleur: 4.1.5 - smartwrap: 2.0.2 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - yargs: 17.7.2 - dev: true - - /type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - dev: true + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 - /type-fest@0.13.1: - resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} - engines: {node: '>=10'} - dev: true + typed-array-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 - /type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - dev: true + typed-array-byte-offset@1.0.2: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 - /type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - dev: true + typed-array-length@1.0.6: + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 - /typescript@5.2.2: - resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} - engines: {node: '>=14.17'} - hasBin: true - dev: true + typescript@5.6.2: {} - /uc.micro@1.0.6: - resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} - dev: true + uc.micro@1.0.6: {} - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + unbox-primitive@1.0.2: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - dev: true - /universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - dev: true + universalify@0.1.2: {} - /validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + validate-npm-package-license@3.0.4: dependencies: - spdx-correct: 3.1.1 + spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - dev: true - /vite@3.0.4: - resolution: {integrity: sha512-NU304nqnBeOx2MkQnskBQxVsa0pRAH5FphokTGmyy8M3oxbvw7qAXts2GORxs+h/2vKsD+osMhZ7An6yK6F1dA==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - less: '*' - sass: '*' - stylus: '*' - terser: ^5.4.0 - peerDependenciesMeta: - less: - optional: true - sass: - optional: true - stylus: - optional: true - terser: - optional: true + vite-node@2.1.1(@types/node@18.6.3): dependencies: - esbuild: 0.14.51 - postcss: 8.4.14 - resolve: 1.22.1 - rollup: 2.77.2 - optionalDependencies: - fsevents: 2.3.2 - dev: true + cac: 6.7.14 + debug: 4.3.7 + pathe: 1.1.2 + vite: 5.4.8(@types/node@18.6.3) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser - /vitest@0.20.2: - resolution: {integrity: sha512-AFXTHrwG4d2OO6SAL8WP5ZkOwLtgeF4tlrHfXFqrHc+5chNegeR53pge0lv/C4316SqJ2DbYaUBH8vh3CdF+BQ==} - engines: {node: '>=v14.16.0'} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@vitest/browser': '*' - '@vitest/ui': '*' - c8: '*' - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - c8: - optional: true - happy-dom: - optional: true - jsdom: - optional: true + vite@5.4.8(@types/node@18.6.3): dependencies: - '@types/chai': 4.3.1 - '@types/chai-subset': 1.3.3 + esbuild: 0.21.5 + postcss: 8.4.47 + rollup: 4.22.4 + optionalDependencies: + '@types/node': 18.6.3 + fsevents: 2.3.3 + + vitest@2.1.1(@types/node@18.6.3): + dependencies: + '@vitest/expect': 2.1.1 + '@vitest/mocker': 2.1.1(@vitest/spy@2.1.1)(vite@5.4.8(@types/node@18.6.3)) + '@vitest/pretty-format': 2.1.1 + '@vitest/runner': 2.1.1 + '@vitest/snapshot': 2.1.1 + '@vitest/spy': 2.1.1 + '@vitest/utils': 2.1.1 + chai: 5.1.1 + debug: 4.3.7 + magic-string: 0.30.11 + pathe: 1.1.2 + std-env: 3.7.0 + tinybench: 2.9.0 + tinyexec: 0.3.0 + tinypool: 1.0.1 + tinyrainbow: 1.2.0 + vite: 5.4.8(@types/node@18.6.3) + vite-node: 2.1.1(@types/node@18.6.3) + why-is-node-running: 2.3.0 + optionalDependencies: '@types/node': 18.6.3 - chai: 4.3.6 - debug: 4.3.4 - local-pkg: 0.4.2 - tinypool: 0.2.4 - tinyspy: 1.0.0 - vite: 3.0.4 transitivePeerDependencies: - less + - lightningcss + - msw - sass + - sass-embedded - stylus + - sugarss - supports-color - terser - dev: true - - /wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - dependencies: - defaults: 1.0.3 - dev: true - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 is-boolean-object: 1.1.2 is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 - dev: true - /which-module@2.0.0: - resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} - dev: true - - /which-pm@2.0.0: - resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} - engines: {node: '>=8.15'} + which-typed-array@1.1.15: dependencies: - load-yaml-file: 0.2.0 - path-exists: 4.0.0 - dev: true + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 - /which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true + which@1.3.1: dependencies: isexe: 2.0.0 - dev: true - /wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} + why-is-node-running@2.3.0: dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: true + siginfo: 2.0.0 + stackback: 0.0.2 - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true - - /y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - dev: true - - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true - /yallist@2.1.2: - resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} - dev: true - - /yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} - dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 - dev: true + y18n@5.0.8: {} - /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - dev: true + yallist@2.1.2: {} - /yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} - dependencies: - cliui: 6.0.0 - decamelize: 1.2.0 - find-up: 4.1.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 - string-width: 4.2.3 - which-module: 2.0.0 - y18n: 4.0.3 - yargs-parser: 18.1.3 - dev: true + yargs-parser@21.1.1: {} - /yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + yargs@17.7.2: dependencies: cliui: 8.0.1 - escalade: 3.1.1 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - dev: true - - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true From 6541d540427a40555f283110ed6b01dfb8c0e7a5 Mon Sep 17 00:00:00 2001 From: Nate Moore Date: Wed, 25 Sep 2024 09:08:16 -0500 Subject: [PATCH 2/7] chore(ci): add format action --- .github/workflows/format.yml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 .github/workflows/format.yml diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml new file mode 100644 index 0000000..2a3b980 --- /dev/null +++ b/.github/workflows/format.yml @@ -0,0 +1,26 @@ +name: Format + +on: + push: + branches: + - main + +jobs: + format: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.head_ref }} + - uses: pnpm/action-setup@v3 + - uses: actions/setup-node@v4 + with: + node-version: 18 + cache: "pnpm" + - run: pnpm install + - run: pnpm run format + - uses: stefanzweifel/git-auto-commit-action@v5 + with: + commit_message: "[ci] format" + branch: ${{ github.head_ref }} + commit_author: ${{ github.event.commits[0].author.name }} <${{ github.actor }}@users.noreply.github.com> From ad8c36bd99ad00358d8574ee9a145077c5907970 Mon Sep 17 00:00:00 2001 From: Nate Moore Date: Wed, 25 Sep 2024 09:10:09 -0500 Subject: [PATCH 3/7] chore: format --- .changeset/config.json | 16 +- jsx-runtime.d.ts | 2 +- package.json | 152 +++--- scripts/build.js | 103 ++-- src/index.ts | 762 +++++++++++++++-------------- src/jsx-runtime/index.ts | 62 +-- src/selector.ts | 432 +++++++++------- src/transformers/inline.ts | 229 +++++---- src/transformers/sanitize.ts | 243 ++++----- src/transformers/scope.ts | 262 +++++----- src/transformers/swap.ts | 41 +- test/basic.test.ts | 168 +++---- test/html.test.ts | 46 +- test/jsx.test.tsx | 44 +- test/markdown.test.ts | 20 +- test/script.test.ts | 129 ++--- test/selector.test.ts | 564 +++++++++++---------- test/svg.test.ts | 26 +- test/transformers/inline.test.tsx | 204 ++++---- test/transformers/sanitize.test.ts | 149 +++--- test/transformers/scope.test.tsx | 147 +++--- test/transformers/swap.test.ts | 121 ++--- tsconfig.json | 34 +- vite.config.ts | 22 +- 24 files changed, 2091 insertions(+), 1887 deletions(-) diff --git a/.changeset/config.json b/.changeset/config.json index fb73926..239a570 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -1,10 +1,10 @@ { - "$schema": "https://unpkg.com/@changesets/config@1.6.3/schema.json", - "changelog": "@changesets/cli/changelog", - "commit": false, - "linked": [], - "access": "public", - "baseBranch": "main", - "updateInternalDependencies": "patch", - "ignore": [] + "$schema": "https://unpkg.com/@changesets/config@1.6.3/schema.json", + "changelog": "@changesets/cli/changelog", + "commit": false, + "linked": [], + "access": "public", + "baseBranch": "main", + "updateInternalDependencies": "patch", + "ignore": [] } diff --git a/jsx-runtime.d.ts b/jsx-runtime.d.ts index a02b47d..c4b1c99 100644 --- a/jsx-runtime.d.ts +++ b/jsx-runtime.d.ts @@ -1 +1 @@ -export * from './dist/jsx-runtime/index' +export * from './dist/jsx-runtime/index'; diff --git a/package.json b/package.json index e170319..d5e7325 100644 --- a/package.json +++ b/package.json @@ -1,80 +1,76 @@ { - "name": "ultrahtml", - "type": "module", - "version": "1.5.3", - "types": "./dist/index.d.ts", - "main": "./dist/index.js", - "repository": { - "type": "git", - "url": "https://github.com/natemoo-re/ultrahtml" - }, - "bugs": { - "url": "https://github.com/natemoo-re/ultrahtml/issues" - }, - "homepage": "https://github.com/natemoo-re/ultrahtml#README", - "scripts": { - "build": "node scripts/build.js", - "format": "biome format --write", - "dev": "vitest", - "test": "vitest run" - }, - "files": [ - "selector.d.ts", - "transform.d.ts", - "jsx-runtime.d.ts", - "transformers", - "dist", - "CHANGELOG.md" - ], - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - }, - "./package.json": "./package.json", - "./selector": { - "types": "./dist/selector.d.ts", - "import": "./dist/selector.js" - }, - "./transformers/*": { - "types": "./dist/transformers/*.d.ts", - "import": "./dist/transformers/*.js" - }, - "./jsx-runtime": { - "types": "./dist/jsx-runtime/index.d.ts", - "import": "./dist/jsx-runtime/index.js" - } - }, - "keywords": [ - "html", - "template", - "sanitize" - ], - "author": { - "name": "Nate Moore", - "email": "nate@natemoo.re", - "url": "https://twitter.com/n_moore" - }, - "license": "MIT", - "volta": { - "node": "18.20.4" - }, - "packageManager": "pnpm@7.6.0", - "devDependencies": { - "@biomejs/biome": "1.9.2", - "@changesets/cli": "^2.27.8", - "@types/stylis": "^4.2.6", - "chalk": "^5.3.0", - "dts-bundle-generator": "^9.5.1", - "esbuild": "^0.14.54", - "globby": "^13.2.2", - "gzip-size": "^7.0.0", - "markdown-it": "^13.0.2", - "media-query-fns": "^2.0.0", - "npm-run-all": "^4.1.5", - "parsel-js": "^1.1.2", - "pretty-bytes": "^6.1.1", - "stylis": "^4.3.4", - "vitest": "^2.1.1" - } + "name": "ultrahtml", + "type": "module", + "version": "1.5.3", + "types": "./dist/index.d.ts", + "main": "./dist/index.js", + "repository": { + "type": "git", + "url": "https://github.com/natemoo-re/ultrahtml" + }, + "bugs": { + "url": "https://github.com/natemoo-re/ultrahtml/issues" + }, + "homepage": "https://github.com/natemoo-re/ultrahtml#README", + "scripts": { + "build": "node scripts/build.js", + "format": "biome format --write", + "dev": "vitest", + "test": "vitest run" + }, + "files": [ + "selector.d.ts", + "transform.d.ts", + "jsx-runtime.d.ts", + "transformers", + "dist", + "CHANGELOG.md" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + }, + "./package.json": "./package.json", + "./selector": { + "types": "./dist/selector.d.ts", + "import": "./dist/selector.js" + }, + "./transformers/*": { + "types": "./dist/transformers/*.d.ts", + "import": "./dist/transformers/*.js" + }, + "./jsx-runtime": { + "types": "./dist/jsx-runtime/index.d.ts", + "import": "./dist/jsx-runtime/index.js" + } + }, + "keywords": ["html", "template", "sanitize"], + "author": { + "name": "Nate Moore", + "email": "nate@natemoo.re", + "url": "https://twitter.com/n_moore" + }, + "license": "MIT", + "volta": { + "node": "18.20.4" + }, + "packageManager": "pnpm@7.6.0", + "devDependencies": { + "@biomejs/biome": "1.9.2", + "@changesets/cli": "^2.27.8", + "@types/stylis": "^4.2.6", + "chalk": "^5.3.0", + "dts-bundle-generator": "^9.5.1", + "esbuild": "^0.14.54", + "globby": "^13.2.2", + "gzip-size": "^7.0.0", + "markdown-it": "^13.0.2", + "media-query-fns": "^2.0.0", + "npm-run-all": "^4.1.5", + "parsel-js": "^1.1.2", + "pretty-bytes": "^6.1.1", + "stylis": "^4.3.4", + "vitest": "^2.1.1" + } } diff --git a/scripts/build.js b/scripts/build.js index 23c51b3..d7f08c3 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -1,62 +1,67 @@ import { writeFileSync, mkdirSync } from 'node:fs'; import path from 'node:path'; -import { build } from "esbuild"; +import { build } from 'esbuild'; import { globby } from 'globby'; import { gzipSizeFromFileSync } from 'gzip-size'; import bytes from 'pretty-bytes'; import colors from 'chalk'; -import { generateDtsBundle } from 'dts-bundle-generator' +import { generateDtsBundle } from 'dts-bundle-generator'; async function run() { - const files = await globby(['src/**/*.ts', '!src/env.d.ts']); - const output = {}; - const promises = []; - for (const file of files) { - promises.push( - build({ - metafile: true, - entryPoints: [file], - outfile: file.replace('src', 'dist').replace('.ts', '.js'), - external: ["../selector.js", "../index.js", "./index.js"], - bundle: true, - format: 'esm', - minify: true, - sourcemap: 'external', - target: 'node16', - platform: 'node', - }).then((metadata) => { - const file = Object.keys(metadata.metafile.outputs)[1] - const size = gzipSizeFromFileSync(file); - const b = bytes(size); - output[file] = b; - }) - ) - } - await Promise.all(promises); - const bundles = generateDtsBundle(files.map(filePath => { - /** @type {import('dts-bundle-generator').EntryPointConfig} */ - const config = { - filePath, - libraries: { - inlinedLibraries: ['media-query-fns'] - }, - output: { - exportReferencedTypes: false, - } - } - return config; - }), { preferredConfigPath: 'tsconfig.json' }); - for (let i = 0; i < files.length; i++) { - const dts = bundles[i]; - const file = files[i].replace('src', 'dist').replace('.ts', '.d.ts') - mkdirSync(path.join(file, '..'), { recursive: true }) - writeFileSync(file, dts, { encoding: 'utf8' }) - } + const files = await globby(['src/**/*.ts', '!src/env.d.ts']); + const output = {}; + const promises = []; + for (const file of files) { + promises.push( + build({ + metafile: true, + entryPoints: [file], + outfile: file.replace('src', 'dist').replace('.ts', '.js'), + external: ['../selector.js', '../index.js', './index.js'], + bundle: true, + format: 'esm', + minify: true, + sourcemap: 'external', + target: 'node16', + platform: 'node', + }).then((metadata) => { + const file = Object.keys(metadata.metafile.outputs)[1]; + const size = gzipSizeFromFileSync(file); + const b = bytes(size); + output[file] = b; + }), + ); + } + await Promise.all(promises); + const bundles = generateDtsBundle( + files.map((filePath) => { + /** @type {import('dts-bundle-generator').EntryPointConfig} */ + const config = { + filePath, + libraries: { + inlinedLibraries: ['media-query-fns'], + }, + output: { + exportReferencedTypes: false, + }, + }; + return config; + }), + { preferredConfigPath: 'tsconfig.json' }, + ); + for (let i = 0; i < files.length; i++) { + const dts = bundles[i]; + const file = files[i].replace('src', 'dist').replace('.ts', '.d.ts'); + mkdirSync(path.join(file, '..'), { recursive: true }); + writeFileSync(file, dts, { encoding: 'utf8' }); + } - for (const [file, size] of Object.entries(output).sort(([a], [b]) => a.localeCompare(b))) { - console.log(`${file} ${colors.green(size)}`); - } + for (const [file, size] of Object.entries(output).sort(([a], [b]) => + a.localeCompare(b), + )) { + console.log(`${file} ${colors.green(size)}`); + } } run(); diff --git a/src/index.ts b/src/index.ts index e4ffe11..b62e58c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,56 +1,56 @@ export type Node = - | DocumentNode - | ElementNode - | TextNode - | CommentNode - | DoctypeNode; + | DocumentNode + | ElementNode + | TextNode + | CommentNode + | DoctypeNode; export type NodeType = - | typeof DOCUMENT_NODE - | typeof ELEMENT_NODE - | typeof TEXT_NODE - | typeof COMMENT_NODE - | typeof DOCTYPE_NODE; + | typeof DOCUMENT_NODE + | typeof ELEMENT_NODE + | typeof TEXT_NODE + | typeof COMMENT_NODE + | typeof DOCTYPE_NODE; export interface Location { - start: number; - end: number; + start: number; + end: number; } interface BaseNode { - type: NodeType; - loc: [Location, Location]; - parent: Node; - [key: string]: any; + type: NodeType; + loc: [Location, Location]; + parent: Node; + [key: string]: any; } interface LiteralNode extends BaseNode { - value: string; + value: string; } interface ParentNode extends BaseNode { - children: Node[]; + children: Node[]; } -export interface DocumentNode extends Omit { - type: typeof DOCUMENT_NODE; - attributes: Record; - parent: undefined; +export interface DocumentNode extends Omit { + type: typeof DOCUMENT_NODE; + attributes: Record; + parent: undefined; } export interface ElementNode extends ParentNode { - type: typeof ELEMENT_NODE; - name: string; - attributes: Record; + type: typeof ELEMENT_NODE; + name: string; + attributes: Record; } export interface TextNode extends LiteralNode { - type: typeof TEXT_NODE; + type: typeof TEXT_NODE; } export interface CommentNode extends LiteralNode { - type: typeof COMMENT_NODE; + type: typeof COMMENT_NODE; } export interface DoctypeNode extends LiteralNode { - type: typeof DOCTYPE_NODE; + type: typeof DOCTYPE_NODE; } export const DOCUMENT_NODE = 0; @@ -60,427 +60,429 @@ export const COMMENT_NODE = 3; export const DOCTYPE_NODE = 4; export function h( - type: any, - props: null | Record = {}, - ...children: any[] + type: any, + props: null | Record = {}, + ...children: any[] ) { - const vnode: ElementNode = { - type: ELEMENT_NODE, - name: typeof type === "function" ? type.name : type, - attributes: props || {}, - children: children.map((child) => - typeof child === "string" - ? { type: TEXT_NODE, value: escapeHTML(String(child)) } - : child - ), - parent: undefined as any, - loc: [] as any, - }; - if (typeof type === "function") { - __unsafeRenderFn(vnode, type); - } - return vnode; + const vnode: ElementNode = { + type: ELEMENT_NODE, + name: typeof type === 'function' ? type.name : type, + attributes: props || {}, + children: children.map((child) => + typeof child === 'string' + ? { type: TEXT_NODE, value: escapeHTML(String(child)) } + : child, + ), + parent: undefined as any, + loc: [] as any, + }; + if (typeof type === 'function') { + __unsafeRenderFn(vnode, type); + } + return vnode; } -export const Fragment = Symbol("Fragment"); +export const Fragment = Symbol('Fragment'); const VOID_TAGS = new Set([ - "area", - "base", - "br", - "col", - "embed", - "hr", - "img", - "input", - "keygen", - "link", - "meta", - "param", - "source", - "track", - "wbr", + 'area', + 'base', + 'br', + 'col', + 'embed', + 'hr', + 'img', + 'input', + 'keygen', + 'link', + 'meta', + 'param', + 'source', + 'track', + 'wbr', ]); -const RAW_TAGS = new Set(["script", "style"]); -const SPLIT_ATTRS_RE = /([\@\.a-z0-9_\:\-]*)\s*?=?\s*?(['"]?)([\s\S]*?)\2\s+/gim; +const RAW_TAGS = new Set(['script', 'style']); +const SPLIT_ATTRS_RE = + /([\@\.a-z0-9_\:\-]*)\s*?=?\s*?(['"]?)([\s\S]*?)\2\s+/gim; const DOM_PARSER_RE = - /(?:<(\/?)([a-zA-Z][a-zA-Z0-9\:-]*)(?:\s([^>]*?))?((?:\s*\/)?)>|(<\!\-\-)([\s\S]*?)(\-\->)|(<\!)([\s\S]*?)(>))/gm; + /(?:<(\/?)([a-zA-Z][a-zA-Z0-9\:-]*)(?:\s([^>]*?))?((?:\s*\/)?)>|(<\!\-\-)([\s\S]*?)(\-\->)|(<\!)([\s\S]*?)(>))/gm; function splitAttrs(str?: string) { - let obj: Record = {}; - let token: any; - if (str) { - SPLIT_ATTRS_RE.lastIndex = 0; - str = " " + (str || "") + " "; - while ((token = SPLIT_ATTRS_RE.exec(str))) { - if (token[0] === " ") continue; - obj[token[1]] = token[3]; - } - } - return obj; + let obj: Record = {}; + let token: any; + if (str) { + SPLIT_ATTRS_RE.lastIndex = 0; + str = ' ' + (str || '') + ' '; + while ((token = SPLIT_ATTRS_RE.exec(str))) { + if (token[0] === ' ') continue; + obj[token[1]] = token[3]; + } + } + return obj; } export function parse(input: string | ReturnType): any { - let str = typeof input === "string" ? input : input.value; - let doc: Node, - parent: Node, - token: any, - text, - i, - bStart, - bText, - bEnd, - tag: Node; - const tags: Node[] = []; - DOM_PARSER_RE.lastIndex = 0; - parent = doc = { - type: DOCUMENT_NODE, - children: [] as Node[], - } as any; + let str = typeof input === 'string' ? input : input.value; + let doc: Node, + parent: Node, + token: any, + text, + i, + bStart, + bText, + bEnd, + tag: Node; + const tags: Node[] = []; + DOM_PARSER_RE.lastIndex = 0; + parent = doc = { + type: DOCUMENT_NODE, + children: [] as Node[], + } as any; - let lastIndex = 0; - function commitTextNode() { - text = str.substring(lastIndex, DOM_PARSER_RE.lastIndex - token[0].length); - if (text) { - (parent as ParentNode).children.push({ - type: TEXT_NODE, - value: text, - parent, - } as any); - } - } + let lastIndex = 0; + function commitTextNode() { + text = str.substring(lastIndex, DOM_PARSER_RE.lastIndex - token[0].length); + if (text) { + (parent as ParentNode).children.push({ + type: TEXT_NODE, + value: text, + parent, + } as any); + } + } - while ((token = DOM_PARSER_RE.exec(str))) { - bStart = token[5] || token[8]; - bText = token[6] || token[9]; - bEnd = token[7] || token[10]; - if (RAW_TAGS.has(parent.name) && token[2] !== parent.name) { - i = DOM_PARSER_RE.lastIndex - token[0].length; - if (parent.children.length > 0) { - parent.children[0].value += token[0]; - } - continue; - } else if (bStart === "`; - case DOCTYPE_NODE: - return ``; - } + switch (node.type) { + case DOCUMENT_NODE: + return node.children.map((child: Node) => renderSync(child)).join(''); + case ELEMENT_NODE: + return renderElementSync(node); + case TEXT_NODE: + return `${node.value}`; + case COMMENT_NODE: + return ``; + case DOCTYPE_NODE: + return ``; + } } export async function render(node: Node): Promise { - switch (node.type) { - case DOCUMENT_NODE: - return Promise.all( - node.children.map((child: Node) => render(child)) - ).then((res) => res.join("")); - case ELEMENT_NODE: - return renderElement(node); - case TEXT_NODE: - return `${node.value}`; - case COMMENT_NODE: - return ``; - case DOCTYPE_NODE: - return ``; - } + switch (node.type) { + case DOCUMENT_NODE: + return Promise.all( + node.children.map((child: Node) => render(child)), + ).then((res) => res.join('')); + case ELEMENT_NODE: + return renderElement(node); + case TEXT_NODE: + return `${node.value}`; + case COMMENT_NODE: + return ``; + case DOCTYPE_NODE: + return ``; + } } export interface Transformer { - (node: Node): Node | Promise; + (node: Node): Node | Promise; } export async function transform( - markup: string | Node, - transformers: Transformer[] = [] + markup: string | Node, + transformers: Transformer[] = [], ): Promise { - if (!Array.isArray(transformers)) { - throw new Error( - `Invalid second argument for \`transform\`! Expected \`Transformer[]\` but got \`${typeof transformers}\`` - ); - } - const doc = typeof markup === "string" ? parse(markup) : markup; - let newDoc = doc; - for (const t of transformers) { - newDoc = await t(newDoc); - } - return render(newDoc); + if (!Array.isArray(transformers)) { + throw new Error( + `Invalid second argument for \`transform\`! Expected \`Transformer[]\` but got \`${typeof transformers}\``, + ); + } + const doc = typeof markup === 'string' ? parse(markup) : markup; + let newDoc = doc; + for (const t of transformers) { + newDoc = await t(newDoc); + } + return render(newDoc); } diff --git a/src/jsx-runtime/index.ts b/src/jsx-runtime/index.ts index 314c09d..6cac1d7 100644 --- a/src/jsx-runtime/index.ts +++ b/src/jsx-runtime/index.ts @@ -1,40 +1,40 @@ -import { ElementNode, Node, TEXT_NODE } from "../index.js"; -import { ELEMENT_NODE, Fragment, __unsafeRenderFn } from "../index.js"; +import { ElementNode, Node, TEXT_NODE } from '../index.js'; +import { ELEMENT_NODE, Fragment, __unsafeRenderFn } from '../index.js'; function createVNode( - type: any, - { children, ...attributes }: Record, - key: string, - __self: string, - __source: string + type: any, + { children, ...attributes }: Record, + key: string, + __self: string, + __source: string, ) { - const vnode: ElementNode = { - type: ELEMENT_NODE, - name: typeof type === "function" ? type.name : type, - attributes, - children: (Array.isArray(children) ? children : [children]).map((child) => { - if (typeof child === "string") { - return { - type: TEXT_NODE, - value: child, - }; - } - return child; - }), - parent: undefined as any, - loc: [] as any, - }; + const vnode: ElementNode = { + type: ELEMENT_NODE, + name: typeof type === 'function' ? type.name : type, + attributes, + children: (Array.isArray(children) ? children : [children]).map((child) => { + if (typeof child === 'string') { + return { + type: TEXT_NODE, + value: child, + }; + } + return child; + }), + parent: undefined as any, + loc: [] as any, + }; - if (typeof type === "function") { - __unsafeRenderFn(vnode, type); - } + if (typeof type === 'function') { + __unsafeRenderFn(vnode, type); + } - return vnode; + return vnode; } export { - createVNode as jsx, - createVNode as jsxs, - createVNode as jsxDEV, - Fragment, + createVNode as jsx, + createVNode as jsxs, + createVNode as jsxDEV, + Fragment, }; diff --git a/src/selector.ts b/src/selector.ts index ee5f63e..2e5def6 100644 --- a/src/selector.ts +++ b/src/selector.ts @@ -1,215 +1,277 @@ import type { Node } from './index.js'; import { ELEMENT_NODE, TEXT_NODE, walkSync } from './index.js'; import type { AST, AttributeToken } from 'parsel-js'; -import { parse, specificity as getSpecificity, specificityToNumber } from 'parsel-js'; +import { + parse, + specificity as getSpecificity, + specificityToNumber, +} from 'parsel-js'; export function specificity(selector: string) { - return specificityToNumber(getSpecificity(selector), 10); + return specificityToNumber(getSpecificity(selector), 10); } export function matches(node: Node, selector: string): boolean { - const match = selectorToMatch(selector); - return match(node, node.parent, nthChildIndex(node, node.parent)) + const match = selectorToMatch(selector); + return match(node, node.parent, nthChildIndex(node, node.parent)); } export function querySelector(node: Node, selector: string): Node { - const match = selectorToMatch(selector); - try { - return select(node, (n: Node, parent?: Node, index?: number) => { - let m = match(n, parent, index); - if (!m) return false; - return m; - }, { single: true })[0]; - } catch (e) { - if (e instanceof Error) { - throw e; - } - return e as Node; - } + const match = selectorToMatch(selector); + try { + return select( + node, + (n: Node, parent?: Node, index?: number) => { + let m = match(n, parent, index); + if (!m) return false; + return m; + }, + { single: true }, + )[0]; + } catch (e) { + if (e instanceof Error) { + throw e; + } + return e as Node; + } } export function querySelectorAll(node: Node, selector: string): Node[] { - const match = selectorToMatch(selector); - return select(node, (n: Node, parent?: Node, index?: number) => { - let m = match(n, parent, index); - if (!m) return false; - return m; - }); + const match = selectorToMatch(selector); + return select(node, (n: Node, parent?: Node, index?: number) => { + let m = match(n, parent, index); + if (!m) return false; + return m; + }); } export default querySelectorAll; interface Matcher { - (n: Node, parent?: Node, index?: number): boolean; + (n: Node, parent?: Node, index?: number): boolean; } -function select(node: Node, match: Matcher, opts: { single?: boolean } = { single: false }): Node[] { - let nodes: Node[] = []; - walkSync(node, (n, parent, index): void => { - if (n && n.type !== ELEMENT_NODE) return; - if (match(n, parent, index)) { - if (opts.single) throw n; - nodes.push(n); - } - }) - return nodes; +function select( + node: Node, + match: Matcher, + opts: { single?: boolean } = { single: false }, +): Node[] { + let nodes: Node[] = []; + walkSync(node, (n, parent, index): void => { + if (n && n.type !== ELEMENT_NODE) return; + if (match(n, parent, index)) { + if (opts.single) throw n; + nodes.push(n); + } + }); + return nodes; } const getAttributeMatch = (selector: AttributeToken) => { - const { operator = '=' } = selector; - switch (operator) { - case '=': return (a: string, b: string) => a === b; - case '~=': return (a: string, b: string) => a.split(/\s+/g).includes(b); - case '|=': return (a: string, b: string) => a.startsWith(b + '-'); - case '*=': return (a: string, b: string) => a.indexOf(b) > -1; - case '$=': return (a: string, b: string) => a.endsWith(b); - case '^=': return (a: string, b: string) => a.startsWith(b); - } - return (a: string, b: string) => false; -} + const { operator = '=' } = selector; + switch (operator) { + case '=': + return (a: string, b: string) => a === b; + case '~=': + return (a: string, b: string) => a.split(/\s+/g).includes(b); + case '|=': + return (a: string, b: string) => a.startsWith(b + '-'); + case '*=': + return (a: string, b: string) => a.indexOf(b) > -1; + case '$=': + return (a: string, b: string) => a.endsWith(b); + case '^=': + return (a: string, b: string) => a.startsWith(b); + } + return (a: string, b: string) => false; +}; -const nthChildIndex = (node: Node, parent?: Node) => parent?.children.filter((n: Node) => n.type === ELEMENT_NODE).findIndex((n: Node) => n === node); +const nthChildIndex = (node: Node, parent?: Node) => + parent?.children + .filter((n: Node) => n.type === ELEMENT_NODE) + .findIndex((n: Node) => n === node); const nthChild = (formula: string) => { - let [_, A = '1', B = '0'] = /^\s*(?:(-?(?:\d+)?)n)?\s*\+?\s*(\d+)?\s*$/gm.exec(formula) ?? []; - if (A.length === 0) A = '1' - const a = Number.parseInt(A === '-' ? '-1' : A); - const b = Number.parseInt(B); - return (n: number) => (a * n) + b; -} -const lastChild = (node: Node, parent?: Node) => parent?.children.filter((n: Node) => n.type === ELEMENT_NODE).pop() === node; -const firstChild = (node: Node, parent?: Node) => parent?.children.filter((n: Node) => n.type === ELEMENT_NODE).shift() === node; -const onlyChild = (node: Node, parent?: Node) => parent?.children.filter((n: Node) => n.type === ELEMENT_NODE).length === 1; + let [_, A = '1', B = '0'] = + /^\s*(?:(-?(?:\d+)?)n)?\s*\+?\s*(\d+)?\s*$/gm.exec(formula) ?? []; + if (A.length === 0) A = '1'; + const a = Number.parseInt(A === '-' ? '-1' : A); + const b = Number.parseInt(B); + return (n: number) => a * n + b; +}; +const lastChild = (node: Node, parent?: Node) => + parent?.children.filter((n: Node) => n.type === ELEMENT_NODE).pop() === node; +const firstChild = (node: Node, parent?: Node) => + parent?.children.filter((n: Node) => n.type === ELEMENT_NODE).shift() === + node; +const onlyChild = (node: Node, parent?: Node) => + parent?.children.filter((n: Node) => n.type === ELEMENT_NODE).length === 1; const createMatch = (selector: AST): Matcher => { - switch (selector.type) { - case 'type': return (node: Node) => { - if (selector.content === '*') return true; - return node.name === selector.name; - } - case 'class': return (node: Node) => node.attributes?.class?.split(/\s+/g).includes(selector.name); - case 'id': return (node: Node) => node.attributes?.id === selector.name; - case 'pseudo-class': { - switch (selector.name) { - case 'global': return (...args) => selectorToMatch(parse(selector.argument!)!)(...args); - case 'not': return (...args) => !createMatch(selector.subtree!)(...args); - case 'is': return (...args) => selectorToMatch(selector.subtree!)(...args); - case 'where': return (...args) => selectorToMatch(selector.subtree!)(...args); - case 'root': return (node: Node, parent?: Node) => node.type === ELEMENT_NODE && node.name === 'html'; - case 'empty': return (node: Node) => node.type === ELEMENT_NODE && (node.children.length === 0 || node.children.every((n: Node) => n.type === TEXT_NODE && n.value.trim() === '')); - case 'first-child': return (node: Node, parent?: Node) => firstChild(node, parent); - case 'last-child': return (node: Node, parent?: Node) => lastChild(node, parent); - case 'only-child': return (node: Node, parent?: Node) => onlyChild(node, parent); - case 'nth-child': return (node: Node, parent?: Node) => { - const target = nthChildIndex(node, parent) + 1; - if (Number.isNaN(Number(selector.argument))) { - switch (selector.argument) { - case 'odd': return Math.abs(target % 2) == 1; - case 'even': return target % 2 === 0; - default: { - if (!selector.argument) { - throw new Error(`Unsupported empty nth-child selector!`); - } - const nth = nthChild(selector.argument); - const elements = parent?.children.filter((n: Node) => n.type === ELEMENT_NODE); - const childIndex = nthChildIndex(node, parent) + 1; - for (let i = 0; i < elements.length; i++) { - let n = nth(i); - if (n > elements.length) return false; - if (n === childIndex) return true; - } - return false; - } - } - } - return target === Number(selector.argument); - } - default: throw new Error(`Unhandled pseudo-class: ${selector.name}!`); - } - } - case 'attribute': return (node: Node) => { - let { caseSensitive, name, value } = selector; - if (!node.attributes) return false; - const attrs = Object.entries(node.attributes as Record); - for (let [attr, attrVal] of attrs) { - if (caseSensitive === 'i') { - value = name.toLowerCase(); - attrVal = attr.toLowerCase(); - } - if (attr !== name) continue; - if (!value) return true; - if ((value[0] === '"' || value[0] === "'") && value[0] === value[value.length - 1]) { - value = JSON.parse(value) - } - if (value) { - return getAttributeMatch(selector)(attrVal, value); - } - } - return false - } - case 'universal': return (_: Node) => { - return true; - } - default: { - throw new Error(`Unhandled selector: ${selector.type}`) - } - } -} + switch (selector.type) { + case 'type': + return (node: Node) => { + if (selector.content === '*') return true; + return node.name === selector.name; + }; + case 'class': + return (node: Node) => + node.attributes?.class?.split(/\s+/g).includes(selector.name); + case 'id': + return (node: Node) => node.attributes?.id === selector.name; + case 'pseudo-class': { + switch (selector.name) { + case 'global': + return (...args) => + selectorToMatch(parse(selector.argument!)!)(...args); + case 'not': + return (...args) => !createMatch(selector.subtree!)(...args); + case 'is': + return (...args) => selectorToMatch(selector.subtree!)(...args); + case 'where': + return (...args) => selectorToMatch(selector.subtree!)(...args); + case 'root': + return (node: Node, parent?: Node) => + node.type === ELEMENT_NODE && node.name === 'html'; + case 'empty': + return (node: Node) => + node.type === ELEMENT_NODE && + (node.children.length === 0 || + node.children.every( + (n: Node) => n.type === TEXT_NODE && n.value.trim() === '', + )); + case 'first-child': + return (node: Node, parent?: Node) => firstChild(node, parent); + case 'last-child': + return (node: Node, parent?: Node) => lastChild(node, parent); + case 'only-child': + return (node: Node, parent?: Node) => onlyChild(node, parent); + case 'nth-child': + return (node: Node, parent?: Node) => { + const target = nthChildIndex(node, parent) + 1; + if (Number.isNaN(Number(selector.argument))) { + switch (selector.argument) { + case 'odd': + return Math.abs(target % 2) == 1; + case 'even': + return target % 2 === 0; + default: { + if (!selector.argument) { + throw new Error(`Unsupported empty nth-child selector!`); + } + const nth = nthChild(selector.argument); + const elements = parent?.children.filter( + (n: Node) => n.type === ELEMENT_NODE, + ); + const childIndex = nthChildIndex(node, parent) + 1; + for (let i = 0; i < elements.length; i++) { + let n = nth(i); + if (n > elements.length) return false; + if (n === childIndex) return true; + } + return false; + } + } + } + return target === Number(selector.argument); + }; + default: + throw new Error(`Unhandled pseudo-class: ${selector.name}!`); + } + } + case 'attribute': + return (node: Node) => { + let { caseSensitive, name, value } = selector; + if (!node.attributes) return false; + const attrs = Object.entries(node.attributes as Record); + for (let [attr, attrVal] of attrs) { + if (caseSensitive === 'i') { + value = name.toLowerCase(); + attrVal = attr.toLowerCase(); + } + if (attr !== name) continue; + if (!value) return true; + if ( + (value[0] === '"' || value[0] === "'") && + value[0] === value[value.length - 1] + ) { + value = JSON.parse(value); + } + if (value) { + return getAttributeMatch(selector)(attrVal, value); + } + } + return false; + }; + case 'universal': + return (_: Node) => { + return true; + }; + default: { + throw new Error(`Unhandled selector: ${selector.type}`); + } + } +}; const selectorToMatch = (sel: string | AST): Matcher => { - let selector = typeof sel === 'string' ? parse(sel) : sel; - switch (selector?.type) { - case 'list': { - const matchers = selector.list.map((s: any) => createMatch(s)); - return (node: Node, parent?: Node, index?: number) => { - for (const match of matchers) { - if (match(node, parent!)) return true; - } - return false; - } - } - case 'compound': { - const matchers = selector.list.map((s: any) => createMatch(s)); - return (node: Node, parent?: Node, index?: number) => { - for (const match of matchers) { - if (!match(node, parent!)) return false; - } - return true; - } - } - case 'complex': { - const { left, right, combinator } = selector; - const matchLeft = selectorToMatch(left); - const matchRight = selectorToMatch(right); - let leftMatches = new WeakSet(); - return (node: Node, parent?: Node, i: number = 0) => { - if (matchLeft(node)) { - leftMatches.add(node) - } else if (parent && leftMatches.has(parent) && (combinator === ' ')) { - leftMatches.add(node); - } - if (!matchRight(node)) return false; - switch (combinator) { - case ' ': // fall-through - case '>': return parent ? leftMatches.has(parent) : false; - case '~': { - if (!parent) return false; - for (let sibling of parent.children.slice(0, i)) { - if (leftMatches.has(sibling)) return true; - } - return false; - } - case '+': { - if (!parent) return false; - let prevSiblings = parent.children.slice(0, i).filter((el: Node) => el.type === ELEMENT_NODE); - if (prevSiblings.length === 0) return false; - const prev = prevSiblings[prevSiblings.length - 1]; - if (!prev) return false; - if (leftMatches.has(prev)) return true; - } - default: return false; - } - } - } - default: return createMatch(selector!) as Matcher; - } -} + let selector = typeof sel === 'string' ? parse(sel) : sel; + switch (selector?.type) { + case 'list': { + const matchers = selector.list.map((s: any) => createMatch(s)); + return (node: Node, parent?: Node, index?: number) => { + for (const match of matchers) { + if (match(node, parent!)) return true; + } + return false; + }; + } + case 'compound': { + const matchers = selector.list.map((s: any) => createMatch(s)); + return (node: Node, parent?: Node, index?: number) => { + for (const match of matchers) { + if (!match(node, parent!)) return false; + } + return true; + }; + } + case 'complex': { + const { left, right, combinator } = selector; + const matchLeft = selectorToMatch(left); + const matchRight = selectorToMatch(right); + let leftMatches = new WeakSet(); + return (node: Node, parent?: Node, i: number = 0) => { + if (matchLeft(node)) { + leftMatches.add(node); + } else if (parent && leftMatches.has(parent) && combinator === ' ') { + leftMatches.add(node); + } + if (!matchRight(node)) return false; + switch (combinator) { + case ' ': // fall-through + case '>': + return parent ? leftMatches.has(parent) : false; + case '~': { + if (!parent) return false; + for (let sibling of parent.children.slice(0, i)) { + if (leftMatches.has(sibling)) return true; + } + return false; + } + case '+': { + if (!parent) return false; + let prevSiblings = parent.children + .slice(0, i) + .filter((el: Node) => el.type === ELEMENT_NODE); + if (prevSiblings.length === 0) return false; + const prev = prevSiblings[prevSiblings.length - 1]; + if (!prev) return false; + if (leftMatches.has(prev)) return true; + } + default: + return false; + } + }; + } + default: + return createMatch(selector!) as Matcher; + } +}; diff --git a/src/transformers/inline.ts b/src/transformers/inline.ts index 6ec5041..7a0a13f 100644 --- a/src/transformers/inline.ts +++ b/src/transformers/inline.ts @@ -1,117 +1,134 @@ -import { walkSync, ELEMENT_NODE, TEXT_NODE, Node } from "../index.js"; -import { querySelectorAll, specificity } from "../selector.js"; -import { type Element as CSSEntry, compile } from "stylis"; +import { walkSync, ELEMENT_NODE, TEXT_NODE, Node } from '../index.js'; +import { querySelectorAll, specificity } from '../selector.js'; +import { type Element as CSSEntry, compile } from 'stylis'; import { compileQuery, matches, type Environment } from 'media-query-fns'; export interface InlineOptions { - /** Emit `style` attributes as objects rather than strings. */ - useObjectSyntax: boolean; - env: Partial & { width: number, height: number }; + /** Emit `style` attributes as objects rather than strings. */ + useObjectSyntax: boolean; + env: Partial & { width: number; height: number }; } export default function inline(opts?: Partial) { - const { useObjectSyntax = false } = opts ?? {}; - return (doc: Node): Node => { - const style: string[] = useObjectSyntax ? [':where([style]) {}'] : []; - const actions: (() => void)[] = []; - walkSync(doc, (node: Node, parent?: Node) => { - if (node.type === ELEMENT_NODE) { - if (node.name === "style") { - style.push( - node.children - .map((c: Node) => (c.type === TEXT_NODE ? c.value : "")) - .join("") - ); - actions.push(() => { - parent!.children = parent!.children.filter((c: Node) => c !== node); - }); - } - } - }); - for (const action of actions) { - action(); - } - const styles = style.join("\n"); - const css = compile(styles); - const selectors = new Map>(); + const { useObjectSyntax = false } = opts ?? {}; + return (doc: Node): Node => { + const style: string[] = useObjectSyntax ? [':where([style]) {}'] : []; + const actions: (() => void)[] = []; + walkSync(doc, (node: Node, parent?: Node) => { + if (node.type === ELEMENT_NODE) { + if (node.name === 'style') { + style.push( + node.children + .map((c: Node) => (c.type === TEXT_NODE ? c.value : '')) + .join(''), + ); + actions.push(() => { + parent!.children = parent!.children.filter((c: Node) => c !== node); + }); + } + } + }); + for (const action of actions) { + action(); + } + const styles = style.join('\n'); + const css = compile(styles); + const selectors = new Map>(); - function applyRule(rule: CSSEntry) { - if (rule.type === 'rule') { - const rules = Object.fromEntries( - (rule.children as unknown as Element[]) - .map((child: any) => [child.props, child.children]) - ); - for (const selector of rule.props) { - const value = Object.assign(selectors.get(selector) ?? {}, rules); - selectors.set(selector, value); - } - } else if (rule.type === '@media' && opts?.env) { - const env = getEnvironment(opts.env); - const args = Array.isArray(rule.props) ? rule.props : [rule.props]; - const queries = args.map(arg => compileQuery(arg)) - for (const query of queries) { - if (matches(query, env)) { - for (const child of rule.children) { - applyRule(child as CSSEntry) - } - return; - } - } - } - } - for (const rule of css) { - applyRule(rule); - } - const rules = new Map>(); - for (const [selector, styles] of Array.from(selectors).sort(([a], [b]) => { - const $a = specificity(a); - const $b = specificity(b); - if ($a > $b) return 1; - if ($b > $a) return -1; - return 0; - })) { - const nodes = querySelectorAll(doc, selector); - for (const node of nodes) { - const curr = rules.get(node) ?? {}; - rules.set(node, Object.assign(curr, styles)); - } - } + function applyRule(rule: CSSEntry) { + if (rule.type === 'rule') { + const rules = Object.fromEntries( + (rule.children as unknown as Element[]).map((child: any) => [ + child.props, + child.children, + ]), + ); + for (const selector of rule.props) { + const value = Object.assign(selectors.get(selector) ?? {}, rules); + selectors.set(selector, value); + } + } else if (rule.type === '@media' && opts?.env) { + const env = getEnvironment(opts.env); + const args = Array.isArray(rule.props) ? rule.props : [rule.props]; + const queries = args.map((arg) => compileQuery(arg)); + for (const query of queries) { + if (matches(query, env)) { + for (const child of rule.children) { + applyRule(child as CSSEntry); + } + return; + } + } + } + } + for (const rule of css) { + applyRule(rule); + } + const rules = new Map>(); + for (const [selector, styles] of Array.from(selectors).sort(([a], [b]) => { + const $a = specificity(a); + const $b = specificity(b); + if ($a > $b) return 1; + if ($b > $a) return -1; + return 0; + })) { + const nodes = querySelectorAll(doc, selector); + for (const node of nodes) { + const curr = rules.get(node) ?? {}; + rules.set(node, Object.assign(curr, styles)); + } + } - for (const [node, rule] of rules) { - let style = node.attributes.style ?? ""; - let styleObj: Record = {}; - for (const decl of compile(style)) { - if (decl.type === "decl") { - if ( - typeof decl.props === "string" && - typeof decl.children === "string" - ) { - styleObj[decl.props] = decl.children; - } - } - } - styleObj = Object.assign({}, rule, styleObj); - if (useObjectSyntax) { - node.attributes.style = styleObj; - } else { - node.attributes.style = `${Object.entries(styleObj) - .map(([decl, value]) => `${decl}:${value.replace("!important", "")};`) - .join("")}`; - } - } - return doc; - }; + for (const [node, rule] of rules) { + let style = node.attributes.style ?? ''; + let styleObj: Record = {}; + for (const decl of compile(style)) { + if (decl.type === 'decl') { + if ( + typeof decl.props === 'string' && + typeof decl.children === 'string' + ) { + styleObj[decl.props] = decl.children; + } + } + } + styleObj = Object.assign({}, rule, styleObj); + if (useObjectSyntax) { + node.attributes.style = styleObj; + } else { + node.attributes.style = `${Object.entries(styleObj) + .map(([decl, value]) => `${decl}:${value.replace('!important', '')};`) + .join('')}`; + } + } + return doc; + }; } -type AlwaysDefinedValues = "widthPx" | "heightPx" | "deviceWidthPx" | "deviceHeightPx" | "dppx"; -type ResolvedEnvironment = Omit, AlwaysDefinedValues> & Record; +type AlwaysDefinedValues = + | 'widthPx' + | 'heightPx' + | 'deviceWidthPx' + | 'deviceHeightPx' + | 'dppx'; +type ResolvedEnvironment = Omit, AlwaysDefinedValues> & + Record; function getEnvironment(baseEnv: InlineOptions['env']): ResolvedEnvironment { - const { width, height, dppx = 1, widthPx = width, heightPx = height, deviceWidthPx = width * dppx, deviceHeightPx = height * dppx, ...env } = baseEnv; - return { - widthPx, - heightPx, - deviceWidthPx, - deviceHeightPx, - dppx, - ...env - } + const { + width, + height, + dppx = 1, + widthPx = width, + heightPx = height, + deviceWidthPx = width * dppx, + deviceHeightPx = height * dppx, + ...env + } = baseEnv; + return { + widthPx, + heightPx, + deviceWidthPx, + deviceHeightPx, + dppx, + ...env, + }; } diff --git a/src/transformers/sanitize.ts b/src/transformers/sanitize.ts index 9a77ac6..8c5ad64 100644 --- a/src/transformers/sanitize.ts +++ b/src/transformers/sanitize.ts @@ -1,148 +1,149 @@ -import { ElementNode, ELEMENT_NODE, Node, walkSync } from "../index.js"; +import { ElementNode, ELEMENT_NODE, Node, walkSync } from '../index.js'; export interface SanitizeOptions { - /** An Array of strings indicating elements that the sanitizer should not remove. All elements not in the array will be dropped. */ - allowElements?: string[]; - /** An Array of strings indicating elements that the sanitizer should remove, but keeping their child elements. */ - blockElements?: string[]; - /** An Array of strings indicating elements (including nested elements) that the sanitizer should remove. */ - dropElements?: string[]; - /** An Object where each key is the attribute name and the value is an Array of allowed tag names. Matching attributes will not be removed. All attributes that are not in the array will be dropped. */ - allowAttributes?: Record; - /** An Object where each key is the attribute name and the value is an Array of dropped tag names. Matching attributes will be removed. */ - dropAttributes?: Record; - /** A Boolean value set to false (default) to remove components and their children. If set to true, components will be subject to built-in and custom configuration checks (and will be retained or dropped based on those checks). */ - allowComponents?: boolean; - /** A Boolean value set to false (default) to remove custom elements and their children. If set to true, custom elements will be subject to built-in and custom configuration checks (and will be retained or dropped based on those checks). */ - allowCustomElements?: boolean; - /** A Boolean value set to false (default) to remove HTML comments. Set to true in order to keep comments. */ - allowComments?: boolean; + /** An Array of strings indicating elements that the sanitizer should not remove. All elements not in the array will be dropped. */ + allowElements?: string[]; + /** An Array of strings indicating elements that the sanitizer should remove, but keeping their child elements. */ + blockElements?: string[]; + /** An Array of strings indicating elements (including nested elements) that the sanitizer should remove. */ + dropElements?: string[]; + /** An Object where each key is the attribute name and the value is an Array of allowed tag names. Matching attributes will not be removed. All attributes that are not in the array will be dropped. */ + allowAttributes?: Record; + /** An Object where each key is the attribute name and the value is an Array of dropped tag names. Matching attributes will be removed. */ + dropAttributes?: Record; + /** A Boolean value set to false (default) to remove components and their children. If set to true, components will be subject to built-in and custom configuration checks (and will be retained or dropped based on those checks). */ + allowComponents?: boolean; + /** A Boolean value set to false (default) to remove custom elements and their children. If set to true, custom elements will be subject to built-in and custom configuration checks (and will be retained or dropped based on those checks). */ + allowCustomElements?: boolean; + /** A Boolean value set to false (default) to remove HTML comments. Set to true in order to keep comments. */ + allowComments?: boolean; } function resolveSantizeOptions( - sanitize?: SanitizeOptions + sanitize?: SanitizeOptions, ): Required { - if (sanitize === undefined) { - return { - allowElements: [] as string[], - dropElements: ["script"], - allowComponents: false, - allowCustomElements: false, - allowComments: false, - } as Required; - } else { - const dropElements = new Set([]); - if (!sanitize.allowElements?.includes("script")) { - dropElements.add("script"); - } - for (const dropElement of sanitize.dropElements ?? []) { - dropElements.add(dropElement); - } - return { - allowComponents: false, - allowCustomElements: false, - allowComments: false, - ...sanitize, - dropElements: Array.from(dropElements), - } as Required; - } + if (sanitize === undefined) { + return { + allowElements: [] as string[], + dropElements: ['script'], + allowComponents: false, + allowCustomElements: false, + allowComments: false, + } as Required; + } else { + const dropElements = new Set([]); + if (!sanitize.allowElements?.includes('script')) { + dropElements.add('script'); + } + for (const dropElement of sanitize.dropElements ?? []) { + dropElements.add(dropElement); + } + return { + allowComponents: false, + allowCustomElements: false, + allowComments: false, + ...sanitize, + dropElements: Array.from(dropElements), + } as Required; + } } -type NodeKind = "element" | "component" | "custom-element"; +type NodeKind = 'element' | 'component' | 'custom-element'; function getNodeKind(node: ElementNode): NodeKind { - if (node.name.includes("-")) return "custom-element"; - if (/[\_\$A-Z]/.test(node.name[0]) || node.name.includes(".")) - return "component"; - return "element"; + if (node.name.includes('-')) return 'custom-element'; + if (/[\_\$A-Z]/.test(node.name[0]) || node.name.includes('.')) + return 'component'; + return 'element'; } -type ActionType = "allow" | "drop" | "block"; +type ActionType = 'allow' | 'drop' | 'block'; function getAction( - name: string, - kind: NodeKind, - sanitize: Required + name: string, + kind: NodeKind, + sanitize: Required, ): ActionType { - if (sanitize.allowElements?.length > 0) { - if (sanitize.allowElements.includes(name)) return "allow"; - } - if (sanitize.blockElements?.length > 0) { - if (sanitize.blockElements.includes(name)) return "block"; - } - if (sanitize.dropElements?.length > 0) { - if (sanitize.dropElements.find((n) => n === name)) return "drop"; - } - if (kind === "component" && !sanitize.allowComponents) return "drop"; - if (kind === "custom-element" && !sanitize.allowCustomElements) return "drop"; + if (sanitize.allowElements?.length > 0) { + if (sanitize.allowElements.includes(name)) return 'allow'; + } + if (sanitize.blockElements?.length > 0) { + if (sanitize.blockElements.includes(name)) return 'block'; + } + if (sanitize.dropElements?.length > 0) { + if (sanitize.dropElements.find((n) => n === name)) return 'drop'; + } + if (kind === 'component' && !sanitize.allowComponents) return 'drop'; + if (kind === 'custom-element' && !sanitize.allowCustomElements) return 'drop'; - return (sanitize.allowElements?.length > 0) ? 'drop' : 'allow'; + return sanitize.allowElements?.length > 0 ? 'drop' : 'allow'; } function sanitizeAttributes( - node: ElementNode, - sanitize: Required + node: ElementNode, + sanitize: Required, ): Record { - const attrs: Record = node.attributes; - for (const key of Object.keys(node.attributes)) { - if ( - (sanitize.allowAttributes?.[key] && - sanitize.allowAttributes?.[key].includes(node.name)) || - sanitize.allowAttributes?.[key]?.includes("*") - ) { - continue; - } - if ( - (sanitize.dropAttributes?.[key] && - sanitize.dropAttributes?.[key].includes(node.name)) || - sanitize.dropAttributes?.[key]?.includes("*") - ) { - delete attrs[key]; - } - } - return attrs; + const attrs: Record = node.attributes; + for (const key of Object.keys(node.attributes)) { + if ( + (sanitize.allowAttributes?.[key] && + sanitize.allowAttributes?.[key].includes(node.name)) || + sanitize.allowAttributes?.[key]?.includes('*') + ) { + continue; + } + if ( + (sanitize.dropAttributes?.[key] && + sanitize.dropAttributes?.[key].includes(node.name)) || + sanitize.dropAttributes?.[key]?.includes('*') + ) { + delete attrs[key]; + } + } + return attrs; } function sanitizeElement( - opts: Required, - node: ElementNode, - parent: Node + opts: Required, + node: ElementNode, + parent: Node, ) { - const kind = getNodeKind(node); - const { name } = node; - const action = getAction(name, kind, opts); - if (action === "drop") - return () => { - parent!.children = parent!.children.filter( - (child: Node) => child !== node - ); - }; - if (action === "block") - return () => { - parent!.children = parent!.children - .map((child: Node) => (child === node ? child.children : child)) - .flat(1); - }; + const kind = getNodeKind(node); + const { name } = node; + const action = getAction(name, kind, opts); + if (action === 'drop') + return () => { + parent!.children = parent!.children.filter( + (child: Node) => child !== node, + ); + }; + if (action === 'block') + return () => { + parent!.children = parent!.children + .map((child: Node) => (child === node ? child.children : child)) + .flat(1); + }; - return () => { - node.attributes = sanitizeAttributes(node, opts); - }; + return () => { + node.attributes = sanitizeAttributes(node, opts); + }; } export default function sanitize(opts?: SanitizeOptions) { - const sanitize = resolveSantizeOptions(opts); - return (doc: Node): Node => { - let actions: any[] = []; - walkSync(doc, (node: Node, parent?: Node) => { - switch (node.type) { - case ELEMENT_NODE: { - actions.push(sanitizeElement(sanitize, node, parent!)); - return; - } - default: return; - } - }); - for (const action of actions) { - action(); - } - return doc; - }; + const sanitize = resolveSantizeOptions(opts); + return (doc: Node): Node => { + let actions: any[] = []; + walkSync(doc, (node: Node, parent?: Node) => { + switch (node.type) { + case ELEMENT_NODE: { + actions.push(sanitizeElement(sanitize, node, parent!)); + return; + } + default: + return; + } + }); + for (const action of actions) { + action(); + } + return doc; + }; } diff --git a/src/transformers/scope.ts b/src/transformers/scope.ts index 85b2767..f124020 100644 --- a/src/transformers/scope.ts +++ b/src/transformers/scope.ts @@ -1,146 +1,164 @@ import type { ElementNode } from '../index.js'; -import { walkSync, ELEMENT_NODE, TEXT_NODE, Node, render } from "../index.js"; -import { matches } from "../selector.js"; -import { serialize, compile, middleware, stringify } from "stylis"; +import { walkSync, ELEMENT_NODE, TEXT_NODE, Node, render } from '../index.js'; +import { matches } from '../selector.js'; +import { serialize, compile, middleware, stringify } from 'stylis'; import { AST, parse } from 'parsel-js'; export interface ScopeOptions { - hash?: string; - attribute?: string; + hash?: string; + attribute?: string; } export default function scope(opts: ScopeOptions = {}) { - return async (doc: Node): Promise => { - const hash = opts.hash ?? shorthash(await render(doc)); - const actions: (() => void)[] = []; - let hasStyle = false; - const selectors = new Set(); - const nodes = new Set(); - walkSync(doc, (node: Node) => { - if (node.type === ELEMENT_NODE && node.name === "style") { - if (!opts.attribute || (hasAttribute(node, opts.attribute))) { - hasStyle = true; - if (opts.attribute) { - delete node.attributes[opts.attribute]; - } - for (const selector of getSelectors(node.children[0].value)) { - selectors.add(selector); - } - } - } - if (node.type === ELEMENT_NODE) { - nodes.add(node); - } - }); - if (hasStyle) { - walkSync(doc, (node: Node) => { - if (node.type === ELEMENT_NODE) { - actions.push(() => scopeElement(node, hash, selectors)) - if (node.name === 'style') { - actions.push(() => { - node.children = node.children.map((c: Node) => { - if (c.type !== TEXT_NODE) return c; - c.value = scopeCSS(c.value, hash); - if (c.value === '') { - node.parent.children = node.parent.children.filter((s: Node) => s !== node); - } - return c; - }) - }); - } - } - }) - } - for (const action of actions) { - action(); - } - - return doc; - }; + return async (doc: Node): Promise => { + const hash = opts.hash ?? shorthash(await render(doc)); + const actions: (() => void)[] = []; + let hasStyle = false; + const selectors = new Set(); + const nodes = new Set(); + walkSync(doc, (node: Node) => { + if (node.type === ELEMENT_NODE && node.name === 'style') { + if (!opts.attribute || hasAttribute(node, opts.attribute)) { + hasStyle = true; + if (opts.attribute) { + delete node.attributes[opts.attribute]; + } + for (const selector of getSelectors(node.children[0].value)) { + selectors.add(selector); + } + } + } + if (node.type === ELEMENT_NODE) { + nodes.add(node); + } + }); + if (hasStyle) { + walkSync(doc, (node: Node) => { + if (node.type === ELEMENT_NODE) { + actions.push(() => scopeElement(node, hash, selectors)); + if (node.name === 'style') { + actions.push(() => { + node.children = node.children.map((c: Node) => { + if (c.type !== TEXT_NODE) return c; + c.value = scopeCSS(c.value, hash); + if (c.value === '') { + node.parent.children = node.parent.children.filter( + (s: Node) => s !== node, + ); + } + return c; + }); + }); + } + } + }); + } + for (const action of actions) { + action(); + } + + return doc; + }; } const NEVER_SCOPED = new Set([ - "base", - "font", - "frame", - "frameset", - "head", - "link", - "meta", - "noframes", - "noscript", - "script", - "style", - "title", -]) + 'base', + 'font', + 'frame', + 'frameset', + 'head', + 'link', + 'meta', + 'noframes', + 'noscript', + 'script', + 'style', + 'title', +]); function hasAttribute(node: ElementNode, name: string) { - if (name in node.attributes) { - return node.attributes[name] !== 'false'; - } - return false; + if (name in node.attributes) { + return node.attributes[name] !== 'false'; + } + return false; } function scopeElement(node: ElementNode, hash: string, selectors: Set) { - const { name } = node; - if (!name) return; - if (name.length < 1) return; - if (NEVER_SCOPED.has(name)) return; - if (node.attributes['data-scope']) return; - for (const selector of selectors) { - if (matches(node, selector)) { - node.attributes['data-scope'] = hash; - return; - } - } + const { name } = node; + if (!name) return; + if (name.length < 1) return; + if (NEVER_SCOPED.has(name)) return; + if (node.attributes['data-scope']) return; + for (const selector of selectors) { + if (matches(node, selector)) { + node.attributes['data-scope'] = hash; + return; + } + } } function scopeSelector(selector: string, hash: string): string { - const ast = parse(selector); - const scope = (node: AST): string => { - switch (node.type) { - case 'pseudo-class': { - if (node.name === 'root') return node.content; - if (node.name === 'global') return node.argument!; - return `${node.content}:where([data-scope="${hash}"])`; - } - case 'compound': return `${selector}:where([data-scope="${hash}"])` - case 'complex': { - const { left, right, combinator } = node; - return `${scope(left)}${combinator}${scope(right)}` - } - case 'list': return node.list.map(s => scope(s)).join(' '); - default: return `${node.content}:where([data-scope="${hash}"])` - } - } - return scope(ast!); + const ast = parse(selector); + const scope = (node: AST): string => { + switch (node.type) { + case 'pseudo-class': { + if (node.name === 'root') return node.content; + if (node.name === 'global') return node.argument!; + return `${node.content}:where([data-scope="${hash}"])`; + } + case 'compound': + return `${selector}:where([data-scope="${hash}"])`; + case 'complex': { + const { left, right, combinator } = node; + return `${scope(left)}${combinator}${scope(right)}`; + } + case 'list': + return node.list.map((s) => scope(s)).join(' '); + default: + return `${node.content}:where([data-scope="${hash}"])`; + } + }; + return scope(ast!); } function scopeCSS(css: string, hash: string) { - return serialize(compile(css), middleware([(element) => { - if (element.type === 'rule') { - if (Array.isArray(element.props)) { - element.props = element.props.map(prop => scopeSelector(prop, hash)) - } else { - element.props = scopeSelector(element.props, hash); - } - } - }, stringify])); + return serialize( + compile(css), + middleware([ + (element) => { + if (element.type === 'rule') { + if (Array.isArray(element.props)) { + element.props = element.props.map((prop) => + scopeSelector(prop, hash), + ); + } else { + element.props = scopeSelector(element.props, hash); + } + } + }, + stringify, + ]), + ); } function getSelectors(css: string) { - const selectors = new Set(); - serialize(compile(css), middleware([(element) => { - if (element.type === 'rule') { - if (Array.isArray(element.props)) { - for (const p of element.props) { - selectors.add(p); - } - } else { - selectors.add(element.props); - } - } - }])); - return Array.from(selectors); + const selectors = new Set(); + serialize( + compile(css), + middleware([ + (element) => { + if (element.type === 'rule') { + if (Array.isArray(element.props)) { + for (const p of element.props) { + selectors.add(p); + } + } else { + selectors.add(element.props); + } + } + }, + ]), + ); + return Array.from(selectors); } /** @@ -174,7 +192,8 @@ function getSelectors(css: string) { * OTHER DEALINGS IN THE SOFTWARE. */ -const dictionary = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXY'; +const dictionary = + '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXY'; const binary = dictionary.length; // refer to: http://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/ @@ -210,4 +229,3 @@ function shorthash(text: string) { return sign + result; } - diff --git a/src/transformers/swap.ts b/src/transformers/swap.ts index 0704a26..ba558ae 100644 --- a/src/transformers/swap.ts +++ b/src/transformers/swap.ts @@ -1,21 +1,26 @@ import { ElementNode, RenderFn } from '../index.js'; -import { Node, __unsafeRenderFn } from "../index.js"; -import { querySelectorAll } from "../selector.js"; +import { Node, __unsafeRenderFn } from '../index.js'; +import { querySelectorAll } from '../selector.js'; -export default function swap(components: Record, ...children: any[]) => any)> = {}) { - return (doc: Node): Node => { - for (const [selector, component] of Object.entries(components)) { - for (const node of querySelectorAll(doc, selector)) { - if (typeof component === 'string') { - node.name = component; - if (RenderFn in node) { - delete (node as any)[RenderFn] - } - } else if (typeof component === 'function') { - __unsafeRenderFn(node as ElementNode, component) - } - } - } - return doc; - }; +export default function swap( + components: Record< + string, + string | ((props: Record, ...children: any[]) => any) + > = {}, +) { + return (doc: Node): Node => { + for (const [selector, component] of Object.entries(components)) { + for (const node of querySelectorAll(doc, selector)) { + if (typeof component === 'string') { + node.name = component; + if (RenderFn in node) { + delete (node as any)[RenderFn]; + } + } else if (typeof component === 'function') { + __unsafeRenderFn(node as ElementNode, component); + } + } + } + return doc; + }; } diff --git a/test/basic.test.ts b/test/basic.test.ts index 288c423..ffc94e6 100644 --- a/test/basic.test.ts +++ b/test/basic.test.ts @@ -1,95 +1,95 @@ -import { parse, render } from "../src/"; -import { describe, expect, it, test } from "vitest"; +import { parse, render } from '../src/'; +import { describe, expect, it, test } from 'vitest'; -test("sanity", () => { - expect(parse).toBeTypeOf("function"); +test('sanity', () => { + expect(parse).toBeTypeOf('function'); }); -describe("input === output", () => { - it("works for elements", async () => { - const input = `

Hello world!

`; - const output = await render(parse(input)); - expect(output).toEqual(input); - }); - it("works for custom elements", async () => { - const input = `Hello world!`; - const output = await render(parse(input)); - expect(output).toEqual(input); - }); - it("works for comments", async () => { - const input = ``; - const output = await render(parse(input)); - expect(output).toEqual(input); - }); - it("works for text", async () => { - const input = `Hmm...`; - const output = await render(parse(input)); - expect(output).toEqual(input); - }); - it("works for doctype", async () => { - const input = ``; - const output = await render(parse(input)); - expect(output).toEqual(input); - }); - it("works for html:5", async () => { - const input = `Document`; - const output = await render(parse(input)); +describe('input === output', () => { + it('works for elements', async () => { + const input = `

Hello world!

`; + const output = await render(parse(input)); + expect(output).toEqual(input); + }); + it('works for custom elements', async () => { + const input = `Hello world!`; + const output = await render(parse(input)); + expect(output).toEqual(input); + }); + it('works for comments', async () => { + const input = ``; + const output = await render(parse(input)); + expect(output).toEqual(input); + }); + it('works for text', async () => { + const input = `Hmm...`; + const output = await render(parse(input)); + expect(output).toEqual(input); + }); + it('works for doctype', async () => { + const input = ``; + const output = await render(parse(input)); + expect(output).toEqual(input); + }); + it('works for html:5', async () => { + const input = `Document`; + const output = await render(parse(input)); - expect(output).toEqual(input); - }); + expect(output).toEqual(input); + }); }); -describe("attributes", () => { - it("simple", async () => { - const { - children: [{ attributes }], - } = parse(`
`); - expect(attributes).toMatchObject({ a: "b", c: "1" }); - }); - it("empty", async () => { - const { - children: [{ attributes }], - } = parse(`
`); - expect(attributes).toMatchObject({ test: "" }); - }); - it("@", async () => { - const { - children: [{ attributes }], - } = parse(`
`); - expect(attributes).toMatchObject({ "@on.click": "doThing" }); - }); - it("namespace", async () => { - const { - children: [{ attributes }], - } = parse(`
`); - expect(attributes).toMatchObject({ "on:click": "alert()" }); - }); - it("simple and empty", async () => { - const { - children: [{ attributes }], - } = parse(`
`); - expect(attributes).toMatchObject({ test: "", a: "b", c: "1" }); - }); - it("with linebreaks", async () => { - const { - children: [{ attributes }], - } = parse(`
`); + expect(attributes).toMatchObject({ a: 'b', c: '1' }); + }); + it('empty', async () => { + const { + children: [{ attributes }], + } = parse(`
`); + expect(attributes).toMatchObject({ test: '' }); + }); + it('@', async () => { + const { + children: [{ attributes }], + } = parse(`
`); + expect(attributes).toMatchObject({ '@on.click': 'doThing' }); + }); + it('namespace', async () => { + const { + children: [{ attributes }], + } = parse(`
`); + expect(attributes).toMatchObject({ 'on:click': 'alert()' }); + }); + it('simple and empty', async () => { + const { + children: [{ attributes }], + } = parse(`
`); + expect(attributes).toMatchObject({ test: '', a: 'b', c: '1' }); + }); + it('with linebreaks', async () => { + const { + children: [{ attributes }], + } = parse(`
`); - expect(attributes).toMatchObject({ a: "1\n2\n3" }); - }); - it("with single quote", async () => { - const { - children: [{ attributes }], - } = parse(`
`); - expect(attributes).toMatchObject({ a: "nate'\ns" }); - }); - it("with escaped double quote", async () => { - const { - children: [{ attributes }], - } = parse(`
{ + const { + children: [{ attributes }], + } = parse(`
`); - expect(attributes).toMatchObject({ a: "\"never\nmore\"" }); - }); + expect(attributes).toMatchObject({ a: '"never\nmore"' }); + }); }); diff --git a/test/html.test.ts b/test/html.test.ts index abd981f..689e344 100644 --- a/test/html.test.ts +++ b/test/html.test.ts @@ -1,25 +1,25 @@ -import { html, attrs } from "../src/"; -import { describe, expect, it } from "vitest"; +import { html, attrs } from '../src/'; +import { describe, expect, it } from 'vitest'; -describe("html", () => { - it("works", () => { - const { value } = html`

${"Hello world!"}

`; - expect(value).toEqual(`

Hello world!

`); - }) - it("escapes", () => { - const { value } = html`

${"
"}

`; - expect(value).toEqual(`

<div></div>

`); - }) - it("nested", () => { - const { value } = html`

${html`
`}

`; - expect(value).toEqual(`

`); - }) - it("attrs", () => { - const { value } = html`

`; - expect(value).toEqual(`

`); - }) - it("spread", () => { - const { value } = html`

`; - expect(value).toEqual(`

`); - }) +describe('html', () => { + it('works', () => { + const { value } = html`

${'Hello world!'}

`; + expect(value).toEqual(`

Hello world!

`); + }); + it('escapes', () => { + const { value } = html`

${'
'}

`; + expect(value).toEqual(`

<div></div>

`); + }); + it('nested', () => { + const { value } = html`

${html`
`}

`; + expect(value).toEqual(`

`); + }); + it('attrs', () => { + const { value } = html`

`; + expect(value).toEqual(`

`); + }); + it('spread', () => { + const { value } = html`

`; + expect(value).toEqual(`

`); + }); }); diff --git a/test/jsx.test.tsx b/test/jsx.test.tsx index 6255a49..c0bf6b6 100644 --- a/test/jsx.test.tsx +++ b/test/jsx.test.tsx @@ -1,26 +1,26 @@ import { h } from '../src/index.js'; -import { describe, expect, it } from "vitest"; +import { describe, expect, it } from 'vitest'; import { render } from '../src/index'; -describe("jsx", () => { - it("works", async () => { - const value = await render(

Hello world!

); - expect(value).toEqual(`

Hello world!

`); - }) - it("escapes", async () => { - const value = await render(

{"
"}

); - expect(value).toEqual(`

<div></div>

`); - }) - it("nested", async () => { - const value = await render(

{
}

); - expect(value).toEqual(`

`); - }) - it("attrs", async () => { - const value = await render(

); - expect(value).toEqual(`

`); - }) - it("spread", async () => { - const value = await render(

); - expect(value).toEqual(`

`); - }) +describe('jsx', () => { + it('works', async () => { + const value = await render(

Hello world!

); + expect(value).toEqual(`

Hello world!

`); + }); + it('escapes', async () => { + const value = await render(

{'
'}

); + expect(value).toEqual(`

<div></div>

`); + }); + it('nested', async () => { + const value = await render(

{
}

); + expect(value).toEqual(`

`); + }); + it('attrs', async () => { + const value = await render(

); + expect(value).toEqual(`

`); + }); + it('spread', async () => { + const value = await render(

); + expect(value).toEqual(`

`); + }); }); diff --git a/test/markdown.test.ts b/test/markdown.test.ts index bc50f95..ad0d995 100644 --- a/test/markdown.test.ts +++ b/test/markdown.test.ts @@ -1,8 +1,8 @@ -import { html, attrs, parse, render } from "../src/"; -import { describe, expect, it } from "vitest"; +import { html, attrs, parse, render } from '../src/'; +import { describe, expect, it } from 'vitest'; import Markdown from 'markdown-it'; -const md = new Markdown() +const md = new Markdown(); const src = `Token CSS is a new tool that seamlessly integrates [Design Tokens](https://design-tokens.github.io/community-group/format/#design-token) into your development workflow. Conceptually, it is similar to tools like [Tailwind](https://tailwindcss.com), [Styled System](https://styled-system.com/), and many CSS-in-JS libraries that provide tokenized _constraints_ for your styles—but there's one big difference. @@ -10,12 +10,12 @@ like [Tailwind](https://tailwindcss.com), [Styled System](https://styled-system. # Hello world! **Token CSS embraces \`.css\` files and \`` - let meta = 0; - await walk(parse(input), async (node, parent) => { - if (node.type === ELEMENT_NODE && node.name === 'meta' && parent?.name === 'head') { - meta++; - } - }) - expect(meta).toEqual(11); - }) - it("works with in live string", async () => { - const input = await fetch("https://developer.mozilla.org/en-US/docs/Web/API/HTML_Sanitizer_API").then(r => r.text()); - let meta = 0; - await walk(parse(input), async (node, parent) => { - if (node.type === ELEMENT_NODE && node.name === 'meta' && parent?.name === 'head') { - meta++; - } - }) - expect(meta).toEqual(18); - }) - it("works with ` - const output = await render(parse(input)); - expect(output).toEqual(input); - }) - it("works with inside script", async () => { - const input = `` - const output = await render(parse(input)); - expect(output).toEqual(input); - }) - it("works with <\\/script> inside script", async () => { - const input = `` - const output = await render(parse(input)); - expect(output).toEqual(input); - }) +describe('script', () => { + it('works for elements', async () => { + const input = ``; + const output = await render(parse(input)); + expect(output).toEqual(input); + }); + it('works without quotes', async () => { + const input = ``; + const output = await render(parse(input)); + expect(output).toEqual(input); + }); + it('works with HTML Sanitizer API - Web APIs | MDN`; + let meta = 0; + await walk(parse(input), async (node, parent) => { + if ( + node.type === ELEMENT_NODE && + node.name === 'meta' && + parent?.name === 'head' + ) { + meta++; + } + }); + expect(meta).toEqual(11); + }); + it('works with in live string', async () => { + const input = await fetch( + 'https://developer.mozilla.org/en-US/docs/Web/API/HTML_Sanitizer_API', + ).then((r) => r.text()); + let meta = 0; + await walk(parse(input), async (node, parent) => { + if ( + node.type === ELEMENT_NODE && + node.name === 'meta' && + parent?.name === 'head' + ) { + meta++; + } + }); + expect(meta).toEqual(18); + }); + it('works with `; + const output = await render(parse(input)); + expect(output).toEqual(input); + }); + it('works with inside script', async () => { + const input = ``; + const output = await render(parse(input)); + expect(output).toEqual(input); + }); + it('works with <\\/script> inside script', async () => { + const input = ``; + const output = await render(parse(input)); + expect(output).toEqual(input); + }); }); -describe("style", () => { - it("works for elements", async () => { - const input = ``; - const output = await render(parse(input)); - expect(output).toEqual(input); - }); - it("works without quotes", async () => { - const input = ``; - const output = await render(parse(input)); - expect(output).toEqual(input); - }); - +describe('style', () => { + it('works for elements', async () => { + const input = ``; + const output = await render(parse(input)); + expect(output).toEqual(input); + }); + it('works without quotes', async () => { + const input = ``; + const output = await render(parse(input)); + expect(output).toEqual(input); + }); }); diff --git a/test/selector.test.ts b/test/selector.test.ts index f0c2954..0f13c59 100644 --- a/test/selector.test.ts +++ b/test/selector.test.ts @@ -1,284 +1,308 @@ -import $, { querySelector, querySelectorAll } from "../src/selector"; -import { parse, render } from "../src"; -import { describe, expect, it, test } from "vitest"; +import $, { querySelector, querySelectorAll } from '../src/selector'; +import { parse, render } from '../src'; +import { describe, expect, it, test } from 'vitest'; -test("sanity", () => { - expect(querySelector).toBeTypeOf("function"); - expect(querySelectorAll).toBeTypeOf("function"); - expect($).toBeTypeOf("function"); - expect($).toEqual(querySelectorAll); +test('sanity', () => { + expect(querySelector).toBeTypeOf('function'); + expect(querySelectorAll).toBeTypeOf('function'); + expect($).toBeTypeOf('function'); + expect($).toEqual(querySelectorAll); }); -describe("type selector", () => { - it("type", async () => { - const input = `

Hello world!

`; - const output = await render(querySelector(parse(input), 'h1')); - expect(output).toEqual(input); - }); - it("compound type class", async () => { - const input = `

Hello world!

No

`; - const el = querySelectorAll(parse(input), 'h1.foo')[0] - expect(el).toBeDefined(); - const output = await render(el); - expect(output).toEqual(`

Hello world!

`); - }); - it("compound type attribute", async () => { - const input = `

Hello world!

No

`; - const el = querySelectorAll(parse(input), 'h1[data-test]')[0] - expect(el).toBeDefined(); - const output = await render(el); - expect(output).toEqual(`

Hello world!

`); - }); - it("compound type attribute = case sensitive", async () => { - const input = `

Hello world!

No

`; - const el = querySelectorAll(parse(input), 'h1[data-test="FOO"]')[0] - expect(el).toBeUndefined(); - }); - it("compound type attribute = case insensitive", async () => { - const input = `

Hello world!

No

`; - const el = querySelectorAll(parse(input), 'h1[data-test="FOO" i]')[0] - expect(el).toBeDefined(); - const output = await render(el); - expect(output).toEqual(`

Hello world!

`); - }); - it("compound type attribute =", async () => { - const input = `

Hello world!

No

`; - const el = querySelectorAll(parse(input), 'h1[data-test="foo"]')[0] - expect(el).toBeDefined(); - const output = await render(el); - expect(output).toEqual(`

Hello world!

`); - }); - it("compound type attribute ~=", async () => { - const input = `

Hello world!

No

`; - const el = querySelectorAll(parse(input), 'h1[data-test~="foo"]')[0] - expect(el).toBeDefined(); - const output = await render(el); - expect(output).toEqual(`

Hello world!

`); - }); - it("compound type attribute *=", async () => { - const input = `

Hello world!

No

`; - const el = querySelectorAll(parse(input), 'h1[data-test*="foo"]')[0] - expect(el).toBeDefined(); - const output = await render(el); - expect(output).toEqual(`

Hello world!

`); - }); - it("compound type attribute $=", async () => { - const input = `

Hello world!

No

`; - const el = querySelectorAll(parse(input), 'h1[data-test$=".com"]')[0] - expect(el).toBeDefined(); - const output = await render(el); - expect(output).toEqual(`

Hello world!

`); - }); - it("compound type attribute ^=", async () => { - const input = `

Hello world!

No

`; - const el = querySelectorAll(parse(input), 'h1[data-test^="awe"]')[0] - expect(el).toBeDefined(); - const output = await render(el); - expect(output).toEqual(`

Hello world!

`); - }); - it("compound type attribute |=", async () => { - const input = `

Hello world!

No

`; - const el = querySelectorAll(parse(input), 'h1[data-test|="en"]')[0] - expect(el).toBeDefined(); - const output = await render(el); - expect(output).toEqual(`

Hello world!

`); - }); - it("compound type attributes", async () => { - const input = `

Hello world!

No

`; - const el = querySelectorAll(parse(input), 'h1[data-test^="https://"][data-test$=.com]')[0] - expect(el).toBeDefined(); - const output = await render(el); - expect(output).toEqual(`

Hello world!

`); - }); +describe('type selector', () => { + it('type', async () => { + const input = `

Hello world!

`; + const output = await render(querySelector(parse(input), 'h1')); + expect(output).toEqual(input); + }); + it('compound type class', async () => { + const input = `

Hello world!

No

`; + const el = querySelectorAll(parse(input), 'h1.foo')[0]; + expect(el).toBeDefined(); + const output = await render(el); + expect(output).toEqual(`

Hello world!

`); + }); + it('compound type attribute', async () => { + const input = `

Hello world!

No

`; + const el = querySelectorAll(parse(input), 'h1[data-test]')[0]; + expect(el).toBeDefined(); + const output = await render(el); + expect(output).toEqual(`

Hello world!

`); + }); + it('compound type attribute = case sensitive', async () => { + const input = `

Hello world!

No

`; + const el = querySelectorAll(parse(input), 'h1[data-test="FOO"]')[0]; + expect(el).toBeUndefined(); + }); + it('compound type attribute = case insensitive', async () => { + const input = `

Hello world!

No

`; + const el = querySelectorAll(parse(input), 'h1[data-test="FOO" i]')[0]; + expect(el).toBeDefined(); + const output = await render(el); + expect(output).toEqual(`

Hello world!

`); + }); + it('compound type attribute =', async () => { + const input = `

Hello world!

No

`; + const el = querySelectorAll(parse(input), 'h1[data-test="foo"]')[0]; + expect(el).toBeDefined(); + const output = await render(el); + expect(output).toEqual(`

Hello world!

`); + }); + it('compound type attribute ~=', async () => { + const input = `

Hello world!

No

`; + const el = querySelectorAll(parse(input), 'h1[data-test~="foo"]')[0]; + expect(el).toBeDefined(); + const output = await render(el); + expect(output).toEqual(`

Hello world!

`); + }); + it('compound type attribute *=', async () => { + const input = `

Hello world!

No

`; + const el = querySelectorAll(parse(input), 'h1[data-test*="foo"]')[0]; + expect(el).toBeDefined(); + const output = await render(el); + expect(output).toEqual(`

Hello world!

`); + }); + it('compound type attribute $=', async () => { + const input = `

Hello world!

No

`; + const el = querySelectorAll(parse(input), 'h1[data-test$=".com"]')[0]; + expect(el).toBeDefined(); + const output = await render(el); + expect(output).toEqual( + `

Hello world!

`, + ); + }); + it('compound type attribute ^=', async () => { + const input = `

Hello world!

No

`; + const el = querySelectorAll(parse(input), 'h1[data-test^="awe"]')[0]; + expect(el).toBeDefined(); + const output = await render(el); + expect(output).toEqual(`

Hello world!

`); + }); + it('compound type attribute |=', async () => { + const input = `

Hello world!

No

`; + const el = querySelectorAll(parse(input), 'h1[data-test|="en"]')[0]; + expect(el).toBeDefined(); + const output = await render(el); + expect(output).toEqual(`

Hello world!

`); + }); + it('compound type attributes', async () => { + const input = `

Hello world!

No

`; + const el = querySelectorAll( + parse(input), + 'h1[data-test^="https://"][data-test$=.com]', + )[0]; + expect(el).toBeDefined(); + const output = await render(el); + expect(output).toEqual( + `

Hello world!

`, + ); + }); }); -describe("id selector", () => { - it("id", async () => { - const input = `

Hello world!

`; - const output = await render(querySelectorAll(parse(input), '#foo')[0]); - expect(output).toEqual(input); - }); +describe('id selector', () => { + it('id', async () => { + const input = `

Hello world!

`; + const output = await render(querySelectorAll(parse(input), '#foo')[0]); + expect(output).toEqual(input); + }); }); -describe("list selector", () => { - it("list", async () => { - const input = `

Hello world!

Goodbye world!

`; - const els = querySelectorAll(parse(input), 'h1, h2'); - expect(els.length).toEqual(2); - const output = await (await Promise.all(els.map(el => render(el)))).join(''); - expect(output).toEqual(input); - }); +describe('list selector', () => { + it('list', async () => { + const input = `

Hello world!

Goodbye world!

`; + const els = querySelectorAll(parse(input), 'h1, h2'); + expect(els.length).toEqual(2); + const output = await (await Promise.all(els.map((el) => render(el)))).join( + '', + ); + expect(output).toEqual(input); + }); }); -describe("complex selector", () => { - it("deep", async () => { - const input = `

Hello
world
!

`; - const el = querySelectorAll(parse(input), 'h1 span')[0]; - expect(el).toBeDefined(); - const output = await render(el); - expect(output).toEqual("world"); - }); - it(">", async () => { - const input = `

Hello world!

`; - const el = querySelectorAll(parse(input), 'h1 > span')[0]; - expect(el).toBeDefined(); - const output = await render(el); - expect(output).toEqual("world"); - }); - it("~", async () => { - const input = `world !`; - const el = querySelectorAll(parse(input), 'span ~ span')[0]; - expect(el).toBeDefined(); - const output = await render(el); - expect(output).toEqual("!"); - }); - it("* + *", async () => { - const input = `

Hello

world

!

`; - const el = querySelectorAll(parse(input), '* + *'); - expect(el).toBeDefined(); - expect(el.length).toEqual(2) - const a = await render(el[0]); - const b = await render(el[1]); - expect(a).toEqual("world"); - expect(b).toEqual("

!

"); - }); +describe('complex selector', () => { + it('deep', async () => { + const input = `

Hello
world
!

`; + const el = querySelectorAll(parse(input), 'h1 span')[0]; + expect(el).toBeDefined(); + const output = await render(el); + expect(output).toEqual('world'); + }); + it('>', async () => { + const input = `

Hello world!

`; + const el = querySelectorAll(parse(input), 'h1 > span')[0]; + expect(el).toBeDefined(); + const output = await render(el); + expect(output).toEqual('world'); + }); + it('~', async () => { + const input = `world !`; + const el = querySelectorAll(parse(input), 'span ~ span')[0]; + expect(el).toBeDefined(); + const output = await render(el); + expect(output).toEqual('!'); + }); + it('* + *', async () => { + const input = `

Hello

world

!

`; + const el = querySelectorAll(parse(input), '* + *'); + expect(el).toBeDefined(); + expect(el.length).toEqual(2); + const a = await render(el[0]); + const b = await render(el[1]); + expect(a).toEqual('world'); + expect(b).toEqual('

!

'); + }); }); -describe("pseudo-class", () => { - it("root", async () => { - const input = `

Hello world

`; - const el = querySelectorAll(parse(input), ':root')[0]; - expect(el).toBeDefined(); - const output = await render(el); - expect(output).toEqual(input); - }); - it("empty", async () => { - const input = `

Hello

`; - const el = querySelectorAll(parse(input), ':empty')[0]; - expect(el).toBeDefined(); - const output = await render(el); - expect(output).toEqual(``); - }); - it("first-child", async () => { - const input = `

Hello world

`; - const el = querySelectorAll(parse(input), 'span:first-child')[0]; - expect(el).toBeDefined(); - const output = await render(el); - expect(output).toEqual("world"); - }); - it("only-child", async () => { - const input = `

Hello world

`; - const el = querySelectorAll(parse(input), 'span:only-child')[0]; - expect(el).toBeDefined(); - const output = await render(el); - expect(output).toEqual("world"); - }); - it("last-child", async () => { - const input = `

Hello world

`; - const el = querySelectorAll(parse(input), 'span:last-child')[0]; - expect(el).toBeDefined(); - const output = await render(el); - expect(output).toEqual("world"); - }); - it("nth-child(1)", async () => { - const input = `

Hello world

`; - const el = querySelectorAll(parse(input), 'span:nth-child(1)')[0]; - expect(el).toBeDefined(); - const output = await render(el); - expect(output).toEqual("world"); - }); - it("nth-child(odd)", async () => { - const input = `

Hello world

`; - const el = querySelectorAll(parse(input), 'span:nth-child(odd)')[0]; - expect(el).toBeDefined(); - const output = await render(el); - expect(output).toEqual("world"); - }); - it("nth-child(even)", async () => { - const input = `

Hello world!

`; - const el = querySelectorAll(parse(input), 'span:nth-child(even)')[0]; - expect(el).toBeDefined(); - const output = await render(el); - expect(output).toEqual("!"); - }); - it("nth-child(2n + 1)", async () => { - const input = `

Hello world!

`; - const el = querySelectorAll(parse(input), 'span:nth-child(2n + 1)')[0]; - expect(el).toBeDefined(); - const output = await render(el); - expect(output).toEqual("world"); - }); - it("nth-child(2n)", async () => { - const input = `

Hello world!

`; - const el = querySelectorAll(parse(input), 'span:nth-child(2n)')[0]; - expect(el).toBeDefined(); - const output = await render(el); - expect(output).toEqual("!"); - }); - it("nth-child(3n)", async () => { - const input = `

abcdef

`; - const els = querySelectorAll(parse(input), 'span:nth-child(3n)'); - expect(els.length).toBe(2); - const output = await (await Promise.all(els.map(el => render(el)))).join(''); - expect(output).toEqual("cf"); - }); - it("nth-child(n+4)", async () => { - const input = `

abcdef

`; - const els = querySelectorAll(parse(input), 'span:nth-child(n+4)'); - expect(els.length).toBe(3); - const output = await (await Promise.all(els.map(el => render(el)))).join(''); - expect(output).toEqual("def"); - }); - it("nth-child(n + 4)", async () => { - const input = `

abcdef

`; - const els = querySelectorAll(parse(input), 'span:nth-child(n + 4)'); - expect(els.length).toBe(3); - const output = await (await Promise.all(els.map(el => render(el)))).join(''); - expect(output).toEqual("def"); - }); - it("nth-child(2n+4)", async () => { - const input = `

abcdef

`; - const els = querySelectorAll(parse(input), 'span:nth-child(2n+4)'); - expect(els.length).toBe(2); - const output = await (await Promise.all(els.map(el => render(el)))).join(''); - expect(output).toEqual("df"); - }); - it("nth-child(-n+3)", async () => { - const input = `

abcdef

`; - const els = querySelectorAll(parse(input), 'span:nth-child(-n+3)'); - expect(els.length).toBe(3); - const output = await (await Promise.all(els.map(el => render(el)))).join(''); - expect(output).toEqual("abc"); - }); - it("nth-child(n+3):nth-child(-n+5)", async () => { - const input = `

abcdef

`; - const els = querySelectorAll(parse(input), 'span:nth-child(n+3):nth-child(-n+5)'); - expect(els.length).toBe(3); - const output = await (await Promise.all(els.map(el => render(el)))).join(''); - expect(output).toEqual("cde"); - }); +describe('pseudo-class', () => { + it('root', async () => { + const input = `

Hello world

`; + const el = querySelectorAll(parse(input), ':root')[0]; + expect(el).toBeDefined(); + const output = await render(el); + expect(output).toEqual(input); + }); + it('empty', async () => { + const input = `

Hello

`; + const el = querySelectorAll(parse(input), ':empty')[0]; + expect(el).toBeDefined(); + const output = await render(el); + expect(output).toEqual(``); + }); + it('first-child', async () => { + const input = `

Hello world

`; + const el = querySelectorAll(parse(input), 'span:first-child')[0]; + expect(el).toBeDefined(); + const output = await render(el); + expect(output).toEqual('world'); + }); + it('only-child', async () => { + const input = `

Hello world

`; + const el = querySelectorAll(parse(input), 'span:only-child')[0]; + expect(el).toBeDefined(); + const output = await render(el); + expect(output).toEqual('world'); + }); + it('last-child', async () => { + const input = `

Hello world

`; + const el = querySelectorAll(parse(input), 'span:last-child')[0]; + expect(el).toBeDefined(); + const output = await render(el); + expect(output).toEqual('world'); + }); + it('nth-child(1)', async () => { + const input = `

Hello world

`; + const el = querySelectorAll(parse(input), 'span:nth-child(1)')[0]; + expect(el).toBeDefined(); + const output = await render(el); + expect(output).toEqual('world'); + }); + it('nth-child(odd)', async () => { + const input = `

Hello world

`; + const el = querySelectorAll(parse(input), 'span:nth-child(odd)')[0]; + expect(el).toBeDefined(); + const output = await render(el); + expect(output).toEqual('world'); + }); + it('nth-child(even)', async () => { + const input = `

Hello world!

`; + const el = querySelectorAll(parse(input), 'span:nth-child(even)')[0]; + expect(el).toBeDefined(); + const output = await render(el); + expect(output).toEqual('!'); + }); + it('nth-child(2n + 1)', async () => { + const input = `

Hello world!

`; + const el = querySelectorAll(parse(input), 'span:nth-child(2n + 1)')[0]; + expect(el).toBeDefined(); + const output = await render(el); + expect(output).toEqual('world'); + }); + it('nth-child(2n)', async () => { + const input = `

Hello world!

`; + const el = querySelectorAll(parse(input), 'span:nth-child(2n)')[0]; + expect(el).toBeDefined(); + const output = await render(el); + expect(output).toEqual('!'); + }); + it('nth-child(3n)', async () => { + const input = `

abcdef

`; + const els = querySelectorAll(parse(input), 'span:nth-child(3n)'); + expect(els.length).toBe(2); + const output = await (await Promise.all(els.map((el) => render(el)))).join( + '', + ); + expect(output).toEqual('cf'); + }); + it('nth-child(n+4)', async () => { + const input = `

abcdef

`; + const els = querySelectorAll(parse(input), 'span:nth-child(n+4)'); + expect(els.length).toBe(3); + const output = await (await Promise.all(els.map((el) => render(el)))).join( + '', + ); + expect(output).toEqual('def'); + }); + it('nth-child(n + 4)', async () => { + const input = `

abcdef

`; + const els = querySelectorAll(parse(input), 'span:nth-child(n + 4)'); + expect(els.length).toBe(3); + const output = await (await Promise.all(els.map((el) => render(el)))).join( + '', + ); + expect(output).toEqual('def'); + }); + it('nth-child(2n+4)', async () => { + const input = `

abcdef

`; + const els = querySelectorAll(parse(input), 'span:nth-child(2n+4)'); + expect(els.length).toBe(2); + const output = await (await Promise.all(els.map((el) => render(el)))).join( + '', + ); + expect(output).toEqual('df'); + }); + it('nth-child(-n+3)', async () => { + const input = `

abcdef

`; + const els = querySelectorAll(parse(input), 'span:nth-child(-n+3)'); + expect(els.length).toBe(3); + const output = await (await Promise.all(els.map((el) => render(el)))).join( + '', + ); + expect(output).toEqual('abc'); + }); + it('nth-child(n+3):nth-child(-n+5)', async () => { + const input = `

abcdef

`; + const els = querySelectorAll( + parse(input), + 'span:nth-child(n+3):nth-child(-n+5)', + ); + expect(els.length).toBe(3); + const output = await (await Promise.all(els.map((el) => render(el)))).join( + '', + ); + expect(output).toEqual('cde'); + }); }); -describe("functional pseudo-class", () => { - it("not", async () => { - const input = `

Helloworld

`; - const el = querySelectorAll(parse(input), 'h1 > span:not(#foo)')[0]; - expect(el).toBeDefined(); - const output = await render(el); - expect(output).toEqual(`world`); - }); - it("is", async () => { - const input = `

Helloworld

`; - const el = querySelectorAll(parse(input), 'h1 > span:is(#foo, [id])')[0]; - expect(el).toBeDefined(); - const output = await render(el); - expect(output).toEqual(`Hello`); - }); - it("where", async () => { - const input = `

Helloworld

`; - const el = querySelectorAll(parse(input), 'h1 > span:where(#foo, [id])')[0]; - expect(el).toBeDefined(); - const output = await render(el); - expect(output).toEqual(`Hello`); - }); +describe('functional pseudo-class', () => { + it('not', async () => { + const input = `

Helloworld

`; + const el = querySelectorAll(parse(input), 'h1 > span:not(#foo)')[0]; + expect(el).toBeDefined(); + const output = await render(el); + expect(output).toEqual(`world`); + }); + it('is', async () => { + const input = `

Helloworld

`; + const el = querySelectorAll(parse(input), 'h1 > span:is(#foo, [id])')[0]; + expect(el).toBeDefined(); + const output = await render(el); + expect(output).toEqual(`Hello`); + }); + it('where', async () => { + const input = `

Helloworld

`; + const el = querySelectorAll(parse(input), 'h1 > span:where(#foo, [id])')[0]; + expect(el).toBeDefined(); + const output = await render(el); + expect(output).toEqual(`Hello`); + }); }); diff --git a/test/svg.test.ts b/test/svg.test.ts index b376853..94eaeb5 100644 --- a/test/svg.test.ts +++ b/test/svg.test.ts @@ -1,15 +1,15 @@ -import { parse, render, renderSync } from "../src"; -import { describe, expect, it, test } from "vitest"; +import { parse, render, renderSync } from '../src'; +import { describe, expect, it, test } from 'vitest'; -describe("svg", () => { - it("render as self-closing", async () => { - const input = ``; - const output = await render(parse(input)); - expect(output).toEqual(input); - }); - it("renderSync as self-closing", async () => { - const input = ``; - const output = renderSync(parse(input)); - expect(output).toEqual(input); - }); +describe('svg', () => { + it('render as self-closing', async () => { + const input = ``; + const output = await render(parse(input)); + expect(output).toEqual(input); + }); + it('renderSync as self-closing', async () => { + const input = ``; + const output = renderSync(parse(input)); + expect(output).toEqual(input); + }); }); diff --git a/test/transformers/inline.test.tsx b/test/transformers/inline.test.tsx index 670a2b8..4abe7da 100644 --- a/test/transformers/inline.test.tsx +++ b/test/transformers/inline.test.tsx @@ -1,42 +1,42 @@ -import { describe, it, expect } from "vitest"; -import { h, Fragment, parse, transform } from "../../src/index"; -import inline from "../../src/transformers/inline"; -import { setTimeout as sleep } from "timers/promises"; +import { describe, it, expect } from 'vitest'; +import { h, Fragment, parse, transform } from '../../src/index'; +import inline from '../../src/transformers/inline'; +import { setTimeout as sleep } from 'timers/promises'; -describe("inline", () => { - it("works with a simple input", async () => { - const input = `
Hello world
`; - const output = await transform(input, [inline()]); - expect(output).toEqual(`
Hello world
`); - }); +describe('inline', () => { + it('works with a simple input', async () => { + const input = `
Hello world
`; + const output = await transform(input, [inline()]); + expect(output).toEqual(`
Hello world
`); + }); - it("works with multiple inputs", async () => { - const input = `
Hello world
`; - const output = await transform(input, [inline()]); - expect(output).toEqual(`
Hello world
`); - }); + it('works with multiple inputs', async () => { + const input = `
Hello world
`; + const output = await transform(input, [inline()]); + expect(output).toEqual(`
Hello world
`); + }); - it("inline styles override external", async () => { - const input = `
Hello world
`; - const output = await transform(input, [inline()]); - expect(output).toEqual(`
Hello world
`); - }); + it('inline styles override external', async () => { + const input = `
Hello world
`; + const output = await transform(input, [inline()]); + expect(output).toEqual(`
Hello world
`); + }); - it("inline styles with class", async () => { - const input = `
Hello world
+ it('inline styles with class', async () => { + const input = `
Hello world
`; - const output = await transform(input, [inline()]); - expect(output.trim()).toEqual( - `
Hello world
` - ); - }); + const output = await transform(input, [inline()]); + expect(output.trim()).toEqual( + `
Hello world
`, + ); + }); - it("inlines styles when @media is matched", async () => { - const input = `
Hello world
+ it('inlines styles when @media is matched', async () => { + const input = `
Hello world
`; - const output = await transform(input, [inline({ env: { width: 961, height: 1280 }})]); - expect(output.trim()).toEqual( - `
Hello world
` - ); - }); + const output = await transform(input, [ + inline({ env: { width: 961, height: 1280 } }), + ]); + expect(output.trim()).toEqual( + `
Hello world
`, + ); + }); - it("does not inline styles when @media cannot be matched", async () => { - const input = `
Hello world
+ it('does not inline styles when @media cannot be matched', async () => { + const input = `
Hello world
`; - const output = await transform(input, [inline({ env: { width: 959, height: 1280 }})]); - expect(output.trim()).toEqual( - `
Hello world
` - ); - }); + const output = await transform(input, [ + inline({ env: { width: 959, height: 1280 } }), + ]); + expect(output.trim()).toEqual( + `
Hello world
`, + ); + }); }); -describe("inline jsx", () => { - it("works with a simple input", async () => { - const input = ( - <> -
Hello world
- - - ); - const output = await transform(input, [inline()]); - expect(output).toEqual(`
Hello world
`); - }); +describe('inline jsx', () => { + it('works with a simple input', async () => { + const input = ( + <> +
Hello world
+ + + ); + const output = await transform(input, [inline()]); + expect(output).toEqual(`
Hello world
`); + }); - it("works with multiple inputs", async () => { - const input = ( - <> -
Hello world
- - - - ); - const output = await transform(input, [inline()]); - expect(output).toEqual(`
Hello world
`); - }); + it('works with multiple inputs', async () => { + const input = ( + <> +
Hello world
+ + + + ); + const output = await transform(input, [inline()]); + expect(output).toEqual(`
Hello world
`); + }); - it("inline styles override external", async () => { - const input = ( - <> -
Hello world
- - - ); - const output = await transform(input, [inline()]); - expect(output).toEqual(`
Hello world
`); - }); + it('inline styles override external', async () => { + const input = ( + <> +
Hello world
+ + + ); + const output = await transform(input, [inline()]); + expect(output).toEqual(`
Hello world
`); + }); }); -describe("object syntax", () => { - it("emits style as object", async () => { - const inliner = inline({ useObjectSyntax: true }); - const input = `
Hello world
`; - const doc = await parse(input); - const output = inliner(doc); - expect(output.children[0].attributes.style).toEqual({ color: "red" }); - }); +describe('object syntax', () => { + it('emits style as object', async () => { + const inliner = inline({ useObjectSyntax: true }); + const input = `
Hello world
`; + const doc = await parse(input); + const output = inliner(doc); + expect(output.children[0].attributes.style).toEqual({ color: 'red' }); + }); - it("emits plain style attribute as object", async () => { - const inliner = inline({ useObjectSyntax: true }); - const input = `
Hello world
`; - const doc = await parse(input); - const output = inliner(doc); - expect(output.children[0].attributes.style).toEqual({ color: "blue" }); - }); + it('emits plain style attribute as object', async () => { + const inliner = inline({ useObjectSyntax: true }); + const input = `
Hello world
`; + const doc = await parse(input); + const output = inliner(doc); + expect(output.children[0].attributes.style).toEqual({ color: 'blue' }); + }); - it("works for complex properties", async () => { - const inliner = inline({ useObjectSyntax: true }); - const input = ` + it('works for complex properties', async () => { + const inliner = inline({ useObjectSyntax: true }); + const input = `
Hello world
`.trim(); - const doc = await parse(input); - const output = inliner(doc); - expect(output.children[0].attributes.style).toEqual({ - background: "linear-gradient(135deg, #ef629f, #eecda3)", - display: "flex", - width: "100%", - height: "100%", - }); - }); + const doc = await parse(input); + const output = inliner(doc); + expect(output.children[0].attributes.style).toEqual({ + background: 'linear-gradient(135deg, #ef629f, #eecda3)', + display: 'flex', + width: '100%', + height: '100%', + }); + }); }); // describe("inline link", () => { diff --git a/test/transformers/sanitize.test.ts b/test/transformers/sanitize.test.ts index 138de16..7ef0054 100644 --- a/test/transformers/sanitize.test.ts +++ b/test/transformers/sanitize.test.ts @@ -1,66 +1,87 @@ -import { describe, expect, it } from "vitest"; -import sanitize from "../../src/transformers/sanitize.js"; -import { transform } from "../../src/index.js"; +import { describe, expect, it } from 'vitest'; +import sanitize from '../../src/transformers/sanitize.js'; +import { transform } from '../../src/index.js'; -describe("sanitize", () => { - it("drop", async () => { - const input = `

Hello world!

`; - const output = await transform(input, [sanitize({ dropElements: ['h1'] })]); - expect(output).toEqual(''); - }); - it("block", async () => { - const input = `

Hello world!

`; - const output = await transform(input, [sanitize({ blockElements: ['h1'] })]); - expect(output).toEqual('Hello world!'); - }); - it("allow", async () => { - const input = ``; - const output = await transform(input, [sanitize({ allowElements: ['script'] })]); - expect(output).toEqual(''); - }); - it("allow drops everything else", async () => { - const input = `

Hello world!

This is not allowed

`; - const output = await transform(input, [sanitize({ allowElements: ['h1', 'h2', 'h3'] })]); - expect(output).toEqual('

Hello world!

'); - }); - it("drop script by default", async () => { - const input = `

Hello world!

`; - const output = await transform(input, [sanitize()]); - expect(output).toEqual('

Hello world!

'); - }); - it("explicit components are automatically allowed", async () => { - const input = `Hello world!`; - const output = await transform(input); - expect(output).toEqual('Hello world!'); - }); - it("attribute drop", async () => { - const input = `

Hello world!

`; - const output = await transform(input, [sanitize({ dropAttributes: { no: ['h1'] }})]); - expect(output).toEqual('

Hello world!

'); - }); - it("attribute drop *", async () => { - const input = `

Hello world!

`; - const output = await transform(input, [sanitize({ dropAttributes: { no: ['*'] }})]); - expect(output).toEqual('

Hello world!

'); - }); - it("attribute allow", async () => { - const input = `

Hello world!

`; - const output = await transform(input, [sanitize({ allowAttributes: { yes: ['h1'] } })]); - expect(output).toEqual('

Hello world!

'); - }); - it("attribute allow", async () => { - const input = `

Hello world!

`; - const output = await transform(input, [sanitize({ dropAttributes: { yes: ['*'] }, allowAttributes: { yes: ['h1'] } })]); - expect(output).toEqual('

Hello world!

'); - }); - it("gracefully handles invalid drop", async () => { - const input = `Hello world!`; - const output = await transform(input, [sanitize({ dropAttributes: { nonexistent: ["a"] }})]); - expect(output).toEqual(`Hello world!`); - }); - it("gracefully handles invalid allow", async () => { - const input = `Hello world!`; - const output = await transform(input, [sanitize({ allowAttributes: { nonexistent: ["a"] }})]); - expect(output).toEqual(`Hello world!`); - }); +describe('sanitize', () => { + it('drop', async () => { + const input = `

Hello world!

`; + const output = await transform(input, [sanitize({ dropElements: ['h1'] })]); + expect(output).toEqual(''); + }); + it('block', async () => { + const input = `

Hello world!

`; + const output = await transform(input, [ + sanitize({ blockElements: ['h1'] }), + ]); + expect(output).toEqual('Hello world!'); + }); + it('allow', async () => { + const input = ``; + const output = await transform(input, [ + sanitize({ allowElements: ['script'] }), + ]); + expect(output).toEqual(''); + }); + it('allow drops everything else', async () => { + const input = `

Hello world!

This is not allowed

`; + const output = await transform(input, [ + sanitize({ allowElements: ['h1', 'h2', 'h3'] }), + ]); + expect(output).toEqual('

Hello world!

'); + }); + it('drop script by default', async () => { + const input = `

Hello world!

`; + const output = await transform(input, [sanitize()]); + expect(output).toEqual('

Hello world!

'); + }); + it('explicit components are automatically allowed', async () => { + const input = `Hello world!`; + const output = await transform(input); + expect(output).toEqual('Hello world!'); + }); + it('attribute drop', async () => { + const input = `

Hello world!

`; + const output = await transform(input, [ + sanitize({ dropAttributes: { no: ['h1'] } }), + ]); + expect(output).toEqual('

Hello world!

'); + }); + it('attribute drop *', async () => { + const input = `

Hello world!

`; + const output = await transform(input, [ + sanitize({ dropAttributes: { no: ['*'] } }), + ]); + expect(output).toEqual('

Hello world!

'); + }); + it('attribute allow', async () => { + const input = `

Hello world!

`; + const output = await transform(input, [ + sanitize({ allowAttributes: { yes: ['h1'] } }), + ]); + expect(output).toEqual('

Hello world!

'); + }); + it('attribute allow', async () => { + const input = `

Hello world!

`; + const output = await transform(input, [ + sanitize({ + dropAttributes: { yes: ['*'] }, + allowAttributes: { yes: ['h1'] }, + }), + ]); + expect(output).toEqual('

Hello world!

'); + }); + it('gracefully handles invalid drop', async () => { + const input = `Hello world!`; + const output = await transform(input, [ + sanitize({ dropAttributes: { nonexistent: ['a'] } }), + ]); + expect(output).toEqual(`Hello world!`); + }); + it('gracefully handles invalid allow', async () => { + const input = `Hello world!`; + const output = await transform(input, [ + sanitize({ allowAttributes: { nonexistent: ['a'] } }), + ]); + expect(output).toEqual(`Hello world!`); + }); }); diff --git a/test/transformers/scope.test.tsx b/test/transformers/scope.test.tsx index ab0ac78..cf6df2d 100644 --- a/test/transformers/scope.test.tsx +++ b/test/transformers/scope.test.tsx @@ -1,66 +1,97 @@ -import { describe, it, expect } from "vitest"; -import { h, Fragment, transform } from '../../src/index' +import { describe, it, expect } from 'vitest'; +import { h, Fragment, transform } from '../../src/index'; import scope from '../../src/transformers/scope'; -describe("scope", () => { - it("works with a simple input", async () => { - const input = `
Hello world
`; - const output = await transform(input, [scope({ hash: 'XXX' })]); - expect(output).toEqual(`
Hello world
`); - }); +describe('scope', () => { + it('works with a simple input', async () => { + const input = `
Hello world
`; + const output = await transform(input, [scope({ hash: 'XXX' })]); + expect(output).toEqual( + `
Hello world
`, + ); + }); - it("only scopes seen selectors", async () => { - const input = `
Hello world
`; - const output = await transform(input, [scope({ hash: 'XXX' })]); - expect(output).toEqual(`
Hello world
`); - }); + it('only scopes seen selectors', async () => { + const input = `
Hello world
`; + const output = await transform(input, [scope({ hash: 'XXX' })]); + expect(output).toEqual( + `
Hello world
`, + ); + }); - it("keeps unmatched selectors", async () => { - const input = `
Hello world
`; - const output = await transform(input, [scope({ hash: 'XXX' })]); - expect(output).toEqual(`
Hello world
`); - }); + it('keeps unmatched selectors', async () => { + const input = `
Hello world
`; + const output = await transform(input, [scope({ hash: 'XXX' })]); + expect(output).toEqual( + `
Hello world
`, + ); + }); - it("keeps unmatched :global selectors", async () => { - const input = `
Hello world
`; - const output = await transform(input, [scope({ hash: 'XXX' })]); - expect(output).toEqual(`
Hello world
`); - }); + it('keeps unmatched :global selectors', async () => { + const input = `
Hello world
`; + const output = await transform(input, [scope({ hash: 'XXX' })]); + expect(output).toEqual( + `
Hello world
`, + ); + }); - it("keeps :root selector", async () => { - const input = `
Hello world
`; - const output = await transform(input, [scope({ hash: 'XXX' })]); - expect(output).toEqual(`
Hello world
`); - }); - it("scopes div > * + * selector", async () => { - const input = `
Helloworld!
`; - const output = await transform(input, [scope({ hash: 'XXX' })]); - expect(output).toEqual(`
Helloworld!
`); - }); - it("keeps div > :global(* + *) selector", async () => { - const input = `
Helloworld!
`; - const output = await transform(input, [scope({ hash: 'XXX' })]); - expect(output).toEqual(`
Helloworld!
`); - }); -}) + it('keeps :root selector', async () => { + const input = `
Hello world
`; + const output = await transform(input, [scope({ hash: 'XXX' })]); + expect(output).toEqual( + `
Hello world
`, + ); + }); + it('scopes div > * + * selector', async () => { + const input = `
Helloworld!
`; + const output = await transform(input, [scope({ hash: 'XXX' })]); + expect(output).toEqual( + `
Helloworld!
`, + ); + }); + it('keeps div > :global(* + *) selector', async () => { + const input = `
Helloworld!
`; + const output = await transform(input, [scope({ hash: 'XXX' })]); + expect(output).toEqual( + `
Helloworld!
`, + ); + }); +}); -describe("attribute", () => { - it("ignores style without attribute", async () => { - const input = `
Hello world
`; - const output = await transform(input, [scope({ hash: 'XXX', attribute: 'scoped' })]); - expect(output).toEqual(`
Hello world
`); - }); - it("scopes style with attribute", async () => { - const input = `
Hello world
`; - const output = await transform(input, [scope({ hash: 'XXX', attribute: 'scoped' })]); - expect(output).toEqual(`
Hello world
`); - }); -}) +describe('attribute', () => { + it('ignores style without attribute', async () => { + const input = `
Hello world
`; + const output = await transform(input, [ + scope({ hash: 'XXX', attribute: 'scoped' }), + ]); + expect(output).toEqual( + `
Hello world
`, + ); + }); + it('scopes style with attribute', async () => { + const input = `
Hello world
`; + const output = await transform(input, [ + scope({ hash: 'XXX', attribute: 'scoped' }), + ]); + expect(output).toEqual( + `
Hello world
`, + ); + }); +}); -describe("scope jsx", () => { - it("works with a simple input", async () => { - const input = <>
Hello world
; - const output = await transform(input, [scope({ hash: 'XXX', attribute: 'scoped' })]); - expect(output).toEqual(`
Hello world
`); - }); -}) +describe('scope jsx', () => { + it('works with a simple input', async () => { + const input = ( + <> +
Hello world
+ + + ); + const output = await transform(input, [ + scope({ hash: 'XXX', attribute: 'scoped' }), + ]); + expect(output).toEqual( + `
Hello world
`, + ); + }); +}); diff --git a/test/transformers/swap.test.ts b/test/transformers/swap.test.ts index 63805fd..0a5963f 100644 --- a/test/transformers/swap.test.ts +++ b/test/transformers/swap.test.ts @@ -1,59 +1,68 @@ -import { html, transform } from "../../src/index.js"; -import swap from "../../src/transformers/swap.js"; -import { describe, expect, it } from "vitest"; +import { html, transform } from '../../src/index.js'; +import swap from '../../src/transformers/swap.js'; +import { describe, expect, it } from 'vitest'; -describe("html API", () => { - it("function for element", async () => { - const components = { - h1: (_, children) => html`${children}`, - }; - const input = `

Hello world!

`; - const output = await transform(input, [swap(components)]); - expect(output).toEqual(`Hello world!`); - }); - it("function for component", async () => { - const components = { - Title: (_, children) => html`

${children}

`, - }; - const input = `Hello world!`; - const output = await transform(input, [swap(components)]); - expect(output).toEqual(`

Hello world!

`); - }); - it("string for element to Component", async () => { - const components = { - h1: "Title", - Title: (_, children) => html`${children}`, - }; - const input = `

Hello world!

`; - const output = await transform(input, [swap(components)]); - expect(output).toEqual(`Hello world!`); - }); - it("string for element to Component", async () => { - const components = { - h1: "Title", - Title: (_, children) => html`${children}`, - }; - const input = `

Hello world!

`; - const output = await transform(input, [swap(components)]); - expect(output).toEqual(`Hello world!`); - }); - it("async Component", async () => { - const components = { - Title: async (_, children) => html`${children}`, - }; - const input = `Hello world!`; - const output = await transform(input, [swap(components)]); - expect(output).toEqual(`Hello world!`); - }); +describe('html API', () => { + it('function for element', async () => { + const components = { + h1: (_, children) => html`${children}`, + }; + const input = `

Hello world!

`; + const output = await transform(input, [swap(components)]); + expect(output).toEqual(`Hello world!`); + }); + it('function for component', async () => { + const components = { + Title: (_, children) => html`

${children}

`, + }; + const input = `Hello world!`; + const output = await transform(input, [swap(components)]); + expect(output).toEqual(`

Hello world!

`); + }); + it('string for element to Component', async () => { + const components = { + h1: 'Title', + Title: (_, children) => html`${children}`, + }; + const input = `

Hello world!

`; + const output = await transform(input, [swap(components)]); + expect(output).toEqual(`Hello world!`); + }); + it('string for element to Component', async () => { + const components = { + h1: 'Title', + Title: (_, children) => html`${children}`, + }; + const input = `

Hello world!

`; + const output = await transform(input, [swap(components)]); + expect(output).toEqual(`Hello world!`); + }); + it('async Component', async () => { + const components = { + Title: async (_, children) => html`${children}`, + }; + const input = `Hello world!`; + const output = await transform(input, [swap(components)]); + expect(output).toEqual(`Hello world!`); + }); - it("readme example", async () => { - const Title = (props, children) => html`

${children}

`; - const output = await transform(`

Hello world!

`, [swap({ h1: Title })]) - expect(output).toEqual(`

Hello world!

`); - }); - it("transforms custom components", async () => { - const CustomElement = (props, children) => html`${children}`; - const output = await transform(`Hello world!`, [swap({ "custom-element": CustomElement })]) - expect(output).toEqual(`Hello world!`); - }) + it('readme example', async () => { + const Title = (props, children) => + html`

${children}

`; + const output = await transform(`

Hello world!

`, [ + swap({ h1: Title }), + ]); + expect(output).toEqual(`

Hello world!

`); + }); + it('transforms custom components', async () => { + const CustomElement = (props, children) => + html`${children}`; + const output = await transform( + `Hello world!`, + [swap({ 'custom-element': CustomElement })], + ); + expect(output).toEqual( + `Hello world!`, + ); + }); }); diff --git a/tsconfig.json b/tsconfig.json index a9456df..067835a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,19 +1,19 @@ { - "include": ["src"], - "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "strict": true, - "moduleResolution": "NodeNext", - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "allowJs": true, - "module": "NodeNext", - "outDir": "./dist", - "declarationDir": "./dist", - "target": "ES2020", - "jsx": "react", - "jsxFactory": "h", - "jsxFragmentFactory": "Fragment" - } + "include": ["src"], + "compilerOptions": { + "declaration": true, + "emitDeclarationOnly": true, + "strict": true, + "moduleResolution": "NodeNext", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "allowJs": true, + "module": "NodeNext", + "outDir": "./dist", + "declarationDir": "./dist", + "target": "ES2020", + "jsx": "react", + "jsxFactory": "h", + "jsxFragmentFactory": "Fragment" + } } diff --git a/vite.config.ts b/vite.config.ts index 1a8f5de..3c76619 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,13 +1,13 @@ -import { defineConfig } from 'vitest/config' +import { defineConfig } from 'vitest/config'; export default defineConfig({ - esbuild: { - jsxFactory: 'h', - jsxFragment: 'Fragment' - }, - test: { - transformMode: { - web: [/\.[jt]sx$/], - }, - }, -}) + esbuild: { + jsxFactory: 'h', + jsxFragment: 'Fragment', + }, + test: { + transformMode: { + web: [/\.[jt]sx$/], + }, + }, +}); From 8ea78f4ca11c61182a574cfe17cabd4c2fd90bc0 Mon Sep 17 00:00:00 2001 From: Nate Moore Date: Wed, 25 Sep 2024 09:11:14 -0500 Subject: [PATCH 4/7] chore: ignore revs --- .git-blame-ignore-revs | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .git-blame-ignore-revs diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 0000000..118402e --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,2 @@ +# Format with Biome +ad8c36bd99ad00358d8574ee9a145077c5907970 From 75090fdc7edd1d7e2336956d5c26129d25d149d3 Mon Sep 17 00:00:00 2001 From: Nate Moore Date: Wed, 25 Sep 2024 09:13:23 -0500 Subject: [PATCH 5/7] chore(ci): update actions --- .github/workflows/ci.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b4cd2e7..ef7db06 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,9 +16,10 @@ jobs: name: Build Packages runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: pnpm/action-setup@v2.2.1 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + - uses: actions/setup-node@v4 + id: cache-node with: node-version: 18 cache: "pnpm" From 4d0f7927af41fef270875a2a555badd57e5e69a9 Mon Sep 17 00:00:00 2001 From: Nate Moore Date: Wed, 25 Sep 2024 09:14:08 -0500 Subject: [PATCH 6/7] chore(ci): update action --- .github/workflows/format.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index 2a3b980..0f29c27 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -12,7 +12,7 @@ jobs: - uses: actions/checkout@v4 with: ref: ${{ github.head_ref }} - - uses: pnpm/action-setup@v3 + - uses: pnpm/action-setup@v4 - uses: actions/setup-node@v4 with: node-version: 18 From 4d1a9c83f4ae0823d9a408cdec68cdd09b548c9e Mon Sep 17 00:00:00 2001 From: Nate Moore Date: Wed, 25 Sep 2024 09:16:12 -0500 Subject: [PATCH 7/7] fix: remove test --- test/script.test.ts | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/test/script.test.ts b/test/script.test.ts index 680af29..e6b5a2a 100644 --- a/test/script.test.ts +++ b/test/script.test.ts @@ -26,22 +26,6 @@ describe('script', () => { }); expect(meta).toEqual(11); }); - it('works with in live string', async () => { - const input = await fetch( - 'https://developer.mozilla.org/en-US/docs/Web/API/HTML_Sanitizer_API', - ).then((r) => r.text()); - let meta = 0; - await walk(parse(input), async (node, parent) => { - if ( - node.type === ELEMENT_NODE && - node.name === 'meta' && - parent?.name === 'head' - ) { - meta++; - } - }); - expect(meta).toEqual(18); - }); it('works with `; const output = await render(parse(input));