diff --git a/package.json b/package.json index 8a22944..0f3dc05 100644 --- a/package.json +++ b/package.json @@ -85,15 +85,15 @@ }, "prettier": "@webdeveric/prettier-config", "devDependencies": { - "@commitlint/config-conventional": "^21.0.2", - "@commitlint/types": "^21.0.1", + "@commitlint/config-conventional": "^21.1.0", + "@commitlint/types": "^21.1.0", "@types/node": "^24.13.2", - "@typescript/native-preview": "7.0.0-dev.20260622.1", + "@typescript/native-preview": "7.0.0-dev.20260629.1", "@vitest/coverage-v8": "^4.1.9", "@webdeveric/eslint-config-ts": "^0.12.0", "@webdeveric/prettier-config": "^0.4.0", - "commitlint": "^21.0.2", - "commitlint-plugin-cspell": "^0.9.2", + "commitlint": "^21.1.0", + "commitlint-plugin-cspell": "^0.9.3", "conventional-changelog-conventionalcommits": "^9.3.1", "cspell": "^10.0.1", "eslint": "^8.57.1", @@ -103,10 +103,10 @@ "husky": "^9.1.7", "jsdom": "^29.1.1", "lint-staged": "^17.0.8", - "prettier": "^3.8.4", + "prettier": "^3.9.3", "rimraf": "^6.1.3", "semantic-release": "^25.0.5", - "validate-package-exports": "^1.1.0", + "validate-package-exports": "^1.1.1", "vitest": "^4.1.9" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 70ee413..4dafbbd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,17 +9,17 @@ importers: .: devDependencies: '@commitlint/config-conventional': - specifier: ^21.0.2 - version: 21.0.2 + specifier: ^21.1.0 + version: 21.1.0 '@commitlint/types': - specifier: ^21.0.1 - version: 21.0.1 + specifier: ^21.1.0 + version: 21.1.0 '@types/node': specifier: ^24.13.2 version: 24.13.2 '@typescript/native-preview': - specifier: 7.0.0-dev.20260622.1 - version: 7.0.0-dev.20260622.1 + specifier: 7.0.0-dev.20260629.1 + version: 7.0.0-dev.20260629.1 '@vitest/coverage-v8': specifier: ^4.1.9 version: 4.1.9(vitest@4.1.9) @@ -28,13 +28,13 @@ importers: version: 0.12.0(eslint@8.57.1)(typescript@6.0.3) '@webdeveric/prettier-config': specifier: ^0.4.0 - version: 0.4.0(prettier@3.8.4) + version: 0.4.0(prettier@3.9.3) commitlint: - specifier: ^21.0.2 - version: 21.0.2(@types/node@24.13.2)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@6.0.3) + specifier: ^21.1.0 + version: 21.1.0(@types/node@24.13.2)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@6.0.3) commitlint-plugin-cspell: - specifier: ^0.9.2 - version: 0.9.2(@commitlint/lint@21.0.2) + specifier: ^0.9.3 + version: 0.9.3(@commitlint/lint@21.1.0) conventional-changelog-conventionalcommits: specifier: ^9.3.1 version: 9.3.1 @@ -52,7 +52,7 @@ importers: version: 4.4.5(eslint-plugin-import@2.32.0)(eslint@8.57.1) eslint-plugin-import: specifier: ^2.32.0 - version: 2.32.0(@typescript-eslint/parser@8.62.0(eslint@8.57.1)(typescript@6.0.3))(eslint-import-resolver-typescript@4.4.5)(eslint@8.57.1) + version: 2.32.0(@typescript-eslint/parser@8.62.1(eslint@8.57.1)(typescript@6.0.3))(eslint-import-resolver-typescript@4.4.5)(eslint@8.57.1) husky: specifier: ^9.1.7 version: 9.1.7 @@ -63,8 +63,8 @@ importers: specifier: ^17.0.8 version: 17.0.8 prettier: - specifier: ^3.8.4 - version: 3.8.4 + specifier: ^3.9.3 + version: 3.9.3 rimraf: specifier: ^6.1.3 version: 6.1.3 @@ -72,8 +72,8 @@ importers: specifier: ^25.0.5 version: 25.0.5(typescript@6.0.3) validate-package-exports: - specifier: ^1.1.0 - version: 1.1.0 + specifier: ^1.1.1 + version: 1.1.1 vitest: specifier: ^4.1.9 version: 4.1.9(@types/node@24.13.2)(@vitest/coverage-v8@4.1.9)(jsdom@29.1.1)(vite@8.0.16(@types/node@24.13.2)(jiti@2.6.1)(yaml@2.9.0)) @@ -140,61 +140,61 @@ packages: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} - '@commitlint/cli@21.0.2': - resolution: {integrity: sha512-YMmfLbqBg+ZRvvmPhc+cilSQFrh/AgzVgCT1U/OifmUZEwPbvCtA8rN//YNaF9d5eoZphxVMGYtmwA2QgQORgg==} + '@commitlint/cli@21.1.0': + resolution: {integrity: sha512-CVwY6TxGv5naEaWxBdgNHko1xgL95Mb4WcIqp9iik33H0ctVqRv6YtekCntayhEP0T/apuiGvHu5HcCwFuVxEA==} engines: {node: '>=22.12.0'} hasBin: true - '@commitlint/config-conventional@21.0.2': - resolution: {integrity: sha512-P/ZRhryQmkj0Z0dY9FOoRwe3xkwJyyAdtXwt01NT2kuZttcG2CNYp1q5Ci3u+nDT2jcbJRw2kt13Czl1qKNPfg==} + '@commitlint/config-conventional@21.1.0': + resolution: {integrity: sha512-BIFl8xM+3SLy3jrblUC3wmQLCVbLty+++6o859BDCmybVrQdXmIWO+dlkGIbv/M2bBoC55wGuh0zGiw3TPjL1g==} engines: {node: '>=22.12.0'} - '@commitlint/config-validator@21.0.1': - resolution: {integrity: sha512-Zd2UFdndeMMaW2O96HK0tdfT4gOImUvidMpAd/pws2zZ4m1nrAZ/9b/v2JYuE8fs86GpXv9F7LNaIuCIWhY+pA==} + '@commitlint/config-validator@21.1.0': + resolution: {integrity: sha512-gHczt1xqQSwfNqBmOI3HjejtTljkiBEUneExMmTBLD0WwTC78lAqDvNMyydbySt3DhpH0F9oX7Vvuks6s5XPFw==} engines: {node: '>=22.12.0'} - '@commitlint/ensure@21.0.1': - resolution: {integrity: sha512-jJ1037967wU7YN/xkv+iRlOBlmaOXPhPO5KQSqya6GyXzBlwuLzELBFao16DVg9dZyqmNrhewzwZ3SAibetHBQ==} + '@commitlint/ensure@21.1.0': + resolution: {integrity: sha512-/S8Mo3Q1NtQUYDQjDmyQVPxfIwtnxq+guzMOkuGk8OSdwlzanm1WB9wDPIuuzlbMDDnBNbiAuBEUCcCNlfjrTQ==} engines: {node: '>=22.12.0'} '@commitlint/execute-rule@21.0.1': resolution: {integrity: sha512-RifH+FmImozKBE6mozhF4K3r2RRKP7SMi/Q/zLCmExtp5e05lhHOUYqGBlFBAGNHaZxU/WYw1XuugYK9jQzqnA==} engines: {node: '>=22.12.0'} - '@commitlint/format@21.0.1': - resolution: {integrity: sha512-ksmG2+cHGtuDPQQbhBbC4unwm444+6TiPw0d1bKf67hntgZqZ8E0g1MuYKUuyT5IH4IMmXZhKq22/Z3jBvtQIw==} + '@commitlint/format@21.1.0': + resolution: {integrity: sha512-ySymqKYBfjNrQ5N4W/l1iF2ISW1W7Eu/Oi/wRxlri31N0yjNyzUyUzQwyuZLDzTXIlMs4IZ7hIOfAZx8lO18gA==} engines: {node: '>=22.12.0'} - '@commitlint/is-ignored@21.0.2': - resolution: {integrity: sha512-H5z4t8PC9tUsmZ/o+EptM3Nq8sTFtskAShdcqxCoyzklW5eaVT5xbrDAET2uypzir9Vsj4ZZmBtyKjYe2XqgeQ==} + '@commitlint/is-ignored@21.1.0': + resolution: {integrity: sha512-RoRh1/YI+fYH+aid5lMQ2UD0vZ3p3Vf1KeUWT1ir3H/p/7T/6SFv1OiXLgLwUT8dP72EVWeEIyOfkiSWLZYVvw==} engines: {node: '>=22.12.0'} - '@commitlint/lint@21.0.2': - resolution: {integrity: sha512-PnUmLYGeGLfW8oVatR9KpNxSHYAnJOEWlMZzfdeFOUq6WUrFx1fGQaWCWJqMoIll/xPM+GdfJV+tKHZVHhl0Fg==} + '@commitlint/lint@21.1.0': + resolution: {integrity: sha512-0DbfVVUjAWBfixW6v7CXXWVxMcj6Ukf/oB7O8NAbouP3jxmqUaC4eVQphxl3B3M0ii3cCQiR3sRAYxICwU2gAA==} engines: {node: '>=22.12.0'} - '@commitlint/load@21.0.2': - resolution: {integrity: sha512-lwUE70hN0/qE/ZRROhbaX65ly/FF12DrqfReLCESo37M0OQCFAf2jRS+2tSCSORq+bm4Kdju7qNDj46uc1QzTA==} + '@commitlint/load@21.1.0': + resolution: {integrity: sha512-juiClVEcoreNB0TNVkseO2EmNcpEs/Yhnmgbnm/hQAKBFRynKwIaoNIljXkx/3yvZcMO0EE8I2XOEI7d5KZG8Q==} engines: {node: '>=22.12.0'} '@commitlint/message@21.0.2': resolution: {integrity: sha512-5n4aqHGD/FNnom/D5L8i7cYtV+xjuXcBL832C3w9VglEsZzIsoHpJsvxzJ7cgiOsOdc/2jU4t5+7qMHh7GBX3g==} engines: {node: '>=22.12.0'} - '@commitlint/parse@21.0.2': - resolution: {integrity: sha512-QVZJhGHTm+oiuWyEKOCTQ0ZM3mfJ0eGWFeHuj7WzSKEth+UukcCHac9GD8pgdFlg/qGkFWOtyaNd1T8REgagaw==} + '@commitlint/parse@21.1.0': + resolution: {integrity: sha512-HdAqbbjQS8eEtbR74Ysg2VNmbvAfeWLVYMkip/lHibNrtjRsC/97XAYN3/H5P0pEJtDfyTb3iLs8x6y0eu4OYA==} engines: {node: '>=22.12.0'} - '@commitlint/read@21.0.2': - resolution: {integrity: sha512-BtsrnLVycSSKf4Q0gMch4giCj5NNlmcbhc8ra5vONgGtP2IjRDo33bEFtr5Pm+2N+5fXGWb2MksWPrspPfdhdw==} + '@commitlint/read@21.1.0': + resolution: {integrity: sha512-ID7m79aw8d0dMlxuXHD2QGxEX3Fhl/mUPA80WwEW5VgeOpUHNahhwWJefDdoBDVZcDfbHuf429NrcK0gxQsQjA==} engines: {node: '>=22.12.0'} - '@commitlint/resolve-extends@21.0.1': - resolution: {integrity: sha512-0DhjYWL6uYrY16Efa032fYk3woGJDU4AGWiG1XXltT9AMUNYKyb5cIZU2ivbaMZ3+kKFqUjikD2cjh66Sbh/Sg==} + '@commitlint/resolve-extends@21.1.0': + resolution: {integrity: sha512-SANYkxJDfMl3TvnyALWHEaiF5nc6FFaOnh7VvfxjT4X2vD4i2gVHhmfMm1fsrBwDRX98/XyM1XDo5sAd/KXcyQ==} engines: {node: '>=22.12.0'} - '@commitlint/rules@21.0.2': - resolution: {integrity: sha512-k6tQ69Td7t2qUSIbik8D3TL1q3ZJpkEbV+yLogDzCRAdOxJm4ndhtBNREsLA1/puRfWvzS9eioF2w43WT+hHgQ==} + '@commitlint/rules@21.1.0': + resolution: {integrity: sha512-fOPEYSmKn1ZJptjLmCEjJfYqz0PUYr8ng6VY2ZW26sB7KtENR90CmAXHEmScBbOIZip+d/+OwqK12DFBuHTqsQ==} engines: {node: '>=22.12.0'} '@commitlint/to-lines@21.0.1': @@ -205,8 +205,8 @@ packages: resolution: {integrity: sha512-s9KKM+e+mXgFeIh4n7KmOGAVT3mkJ3Fp1bBYHIK5pjeUwlEMzp/tZfb5u0Poa680AsQTXMEMRxZi1vQ9m2X5ug==} engines: {node: '>=22.12.0'} - '@commitlint/types@21.0.1': - resolution: {integrity: sha512-4u7w8jcoCUFWhjWnASYzZHAP34OqOtuFBN87nQmFvqda03YU0T6z+yB4w0gSAMpekiRqqGk5rt+qSlW+a2vSEg==} + '@commitlint/types@21.1.0': + resolution: {integrity: sha512-YodnnnH1Cp+08nP8HGNJAIuB6L3/vdCTHVRTfF8Ik/wRCLOTsU9zwv3yO1cSPQRDa9CLYtE+UJ2K67r7CwMSFw==} engines: {node: '>=22.12.0'} '@conventional-changelog/git-client@2.7.0': @@ -455,8 +455,8 @@ packages: resolution: {integrity: sha512-abYYgI29wJhWIfWTYrYuzRYDcHQUQ1N5ylnhxYn1NJnIQMqUWGLbDmt12JABtZ+R6h6UNatQrS7rhP86etvJyQ==} engines: {node: '>=22.18.0'} - '@csstools/color-helpers@6.0.2': - resolution: {integrity: sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==} + '@csstools/color-helpers@6.1.0': + resolution: {integrity: sha512-064IFJdjTfUqnjpCVpMOdbr8FLQBhinbZj6yRv2An2E41O/pLEXqfFRWqGq/SxlE5PEUYTlvWsG2r8MswAVvkg==} engines: {node: '>=20.19.0'} '@csstools/css-calc@3.2.1': @@ -466,8 +466,8 @@ packages: '@csstools/css-parser-algorithms': ^4.0.0 '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-color-parser@4.1.8': - resolution: {integrity: sha512-3chWb7PRLijpJpPIKkDxdu6IBeO5MrFACND57On0j8OPpc0wZibcGc3xAHrSEbOx/KDRyMHoIxGn0w1PhXMYHw==} + '@csstools/css-color-parser@4.1.9': + resolution: {integrity: sha512-paQcIaOO53Rk5+YrBaBjm/SgrV4INImjo2BT1DtQRYr+XeTRbeAYlS+jxXp9drqvKmtFnWRJKIalDLhZZDu42A==} engines: {node: '>=20.19.0'} peerDependencies: '@csstools/css-parser-algorithms': ^4.0.0 @@ -479,8 +479,8 @@ packages: peerDependencies: '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.1.5': - resolution: {integrity: sha512-oNjBvzLq2GPZtJphCjLqXow/cHySHSgtxvKZb7OqSZ/xHgw6NWNhfad+6AB9cLeVm6eA9d/qMll3JdEHjy6M+A==} + '@csstools/css-syntax-patches-for-csstree@1.1.6': + resolution: {integrity: sha512-TcJCWFbXLPpJYq6z7bfOyjWYJDiDg2/I4gyUC9pqPNqHFRIey0EB0q0L5cSnQDfWJg8Jd6VadakxdIez/3zkqQ==} peerDependencies: css-tree: ^3.2.1 peerDependenciesMeta: @@ -561,8 +561,8 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@napi-rs/wasm-runtime@1.1.5': - resolution: {integrity: sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==} + '@napi-rs/wasm-runtime@1.1.6': + resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==} peerDependencies: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 @@ -583,8 +583,8 @@ packages: resolution: {integrity: sha512-EUEuWAxnL07Sp5/iC/1X6Xj+XThUvnbei9zfRWZdEXa7lss9RTHMhAHBeg+MZ5To9s/gGaSI+UwZTPdYMvKSeg==} engines: {node: ^20.17.0 || >=22.9.0} - '@npmcli/arborist@9.8.0': - resolution: {integrity: sha512-bqjei/1+uait6wA30G7IElMs5VCyGpuVPFQYsvzqhTEEAVmDMsHBCFstcT2lLfeQDvi8MeUQHStfHSArvdTQuw==} + '@npmcli/arborist@9.9.0': + resolution: {integrity: sha512-tzsb1R8mx0k0drlLDT/9ckEYaQHIaWnUti/ci2IaFoQqdqwfmYrc+90p1+QEZC/ocvqcxBep9P1xKw4FbAGofw==} engines: {node: ^20.17.0 || >=22.9.0} hasBin: true @@ -883,8 +883,8 @@ packages: resolution: {integrity: sha512-Y8cK9aggNRsqJVaKUlEYs4s7CvQ1b1ta2DVPyAimb0I2qhzjNk+A+mxvll/klL0RlfuIUei8BF7YWiua4kQqww==} engines: {node: ^20.17.0 || >=22.9.0} - '@tybys/wasm-util@0.10.2': - resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} + '@tybys/wasm-util@0.10.3': + resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -904,114 +904,114 @@ packages: '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - '@typescript-eslint/eslint-plugin@8.62.0': - resolution: {integrity: sha512-o+mpz7EYiMzXoySXiKmzlabIvTVqUuK5yLrAedRPRDA0IpPFMUV1IXt6OqljIxX/kumN6EjUYp41Hqelh6p/Dw==} + '@typescript-eslint/eslint-plugin@8.62.1': + resolution: {integrity: sha512-4EQM77WgVNxj7OkL/5b/D/xZsw00G577+UriYTC7JF5opcF3T2AuoeY7ueLaZgSVjSgCS6yOAJB5bRGLPSJUzA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.62.0 + '@typescript-eslint/parser': ^8.62.1 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.62.0': - resolution: {integrity: sha512-dzHeT2gySzZtLDsuqxU9AkYgIsQoHAHtRBpOqM+Ofzx1Bwrd2RcCjQJ+6iQbsHOIR6NS33bF2W1k3blN1zLDrA==} + '@typescript-eslint/parser@8.62.1': + resolution: {integrity: sha512-sPhE4iHuJDSvoAiec+Ro8JyXw8f0ql13HFR82P99nCm9GwTEKG0KYLvDe6REk8BCXuit6vJAv/Yxg5ABaNS2rA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.62.0': - resolution: {integrity: sha512-wexnCqiTg7BOGtbLDftYpRWlmLq4xfoMd7BKFR6Y75sZS3QmRKLdN3yWLhmIYgqMmP/OXWpj3H8odkb5nGURCQ==} + '@typescript-eslint/project-service@8.62.1': + resolution: {integrity: sha512-yQ3RgY5RkSBpsNS1Bx/JQEcA24FOSdfGktoyprAr5u18390UQdtVcfnEv4nIrIshNnavlVyZBKxQwT1fIAE6cg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.62.0': - resolution: {integrity: sha512-1lX38kNxXIRb8mEc3lbq5mdHq1Pf2+U0nFU65KfT18mtPxxl0fvjuEE92mHuXPuCtElJhOrddOpyMlM3Z0umEA==} + '@typescript-eslint/scope-manager@8.62.1': + resolution: {integrity: sha512-r4d249KbQ1SFdpeStvob8Ih6aPPIzfqllPVOtvhve6ZcpuVcYo5/7zUWckKpHE7StASX4kTKZTLf0WQm/wPkcg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.62.0': - resolution: {integrity: sha512-y2GAdB6ykaXUvuspbYnizQc4oDDz0Tz/Yc7iWrXf9mx8vm/L/0vLHCe0tS2boG96Zy+DivnVDQ9ZUEWoHqqx1g==} + '@typescript-eslint/tsconfig-utils@8.62.1': + resolution: {integrity: sha512-xadytJqX9vJVQ2fdQjkcIVigwaOJNWkpjdLt6cEQ+xPnrI1fkp+/jZE/I97k9KUjqtpd25i0HeyZf3T6dutv2g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.62.0': - resolution: {integrity: sha512-+g5O3j0w2ldzC86Pv6fvbO/xhAonbJFIdf/MKQ1d30gndlsVzUOE83ldfSE15Qrl9fhFjK6AovHs5Wpp6vx86w==} + '@typescript-eslint/type-utils@8.62.1': + resolution: {integrity: sha512-aXM5xlqXiTxPibXB93cLAURfT3rlizf7uMXISCXy66Isr/9hISJx3yDsKl0L7lKa51b8JpFuNKby0/O0pEm9jg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.62.0': - resolution: {integrity: sha512-KvAclkktORPvM54TgLgA4z9HIV1M8zOgw9ZVNXl9f/8dLYfXYX1wkMXP7qmabpijQRV5bHJLOmoyGQbLMaUYeg==} + '@typescript-eslint/types@8.62.1': + resolution: {integrity: sha512-ooCzJFaf+Hg+uG6fA3NRFGuFjlfNlDhBthbv4ZPU/0elCAFUfnyXUvf/WOpHz/jYwSmvU2GkR2LtyUfy1AxZ1Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.62.0': - resolution: {integrity: sha512-+hVbNxtW64pIcZWDPGbyaKF7vp2IBTVY5ma1blwwksrjdsbdqqEKvJWMGbBofei4F6Dovx1M0RJgoFeNu2279A==} + '@typescript-eslint/typescript-estree@8.62.1': + resolution: {integrity: sha512-xMcW9oP9u7fAMXYs9A65CVmtLQe2r//oXINHfi8HV+oiqhih17sbLdhXr4540YWlgpDKQdY854OL5ZrdCiQsAA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.62.0': - resolution: {integrity: sha512-82r66fi9zYwZ+mTq3vKgwjbZ1PVk/DJzrXFLpG6RnBbdvH8TEGVHIs9H4d2drhkOzf0syZuD/OZvvlu6GDbP4g==} + '@typescript-eslint/utils@8.62.1': + resolution: {integrity: sha512-sHtbPfuKNZCG+ih8SyjjucqRntSVmp8XgL5u6o9mAhiSn8ds5o/M/XdM0abweme2Tln3szOstOrZ9OXitvPh0g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.62.0': - resolution: {integrity: sha512-CY3uyFSRbcQv3nnSv8S0+lDftMVz6P963PoRlxrV7ew/Md564g9ut60PYzdLM5qW4jFn93GBF+Soi90ISAN+GQ==} + '@typescript-eslint/visitor-keys@8.62.1': + resolution: {integrity: sha512-4g3BLxfdTMy8iZG0MaBkadnlRrCJ74cQiFbyEVMrkwIoqdyaXXQM22cotDvrl4x28wgIZ9rEJRoM+mmhSJpJ1g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260622.1': - resolution: {integrity: sha512-g/fjmdh/i/ngSmUeWNHh98iuONzW+kUaqwZRaZCmGkssBJ6ZrJAsyg85cm1t4aK9ne5nNjbjNPzJFTZ+QNMSRw==} + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260629.1': + resolution: {integrity: sha512-wXRExZJweYoTzE4atRR7T5HwKJYkl6/KHxON0eF0iy2fvgLXDlyq4AQqhmV8mMx10PQKc/4sNbfhD4kjWWvm8A==} engines: {node: '>=16.20.0'} cpu: [arm64] os: [darwin] - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260622.1': - resolution: {integrity: sha512-AqRrnPQCR+7j6u6uC6eQpacJ/btxZW6ktpWxPj7byoyk6kGSSgUb0YNcZ2Iao2brdbYw4LOxVcrVW4mP+K7sxg==} + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260629.1': + resolution: {integrity: sha512-xkL/tETzUuDxfRkk2rD0/CjjjGLyOLHeE103T52rpgj0VNSXMnn7tTiw+TSdxnS61b8ImOrWgQJujhPFTp0jng==} engines: {node: '>=16.20.0'} cpu: [x64] os: [darwin] - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260622.1': - resolution: {integrity: sha512-sxo7AlhQiX5J5WYWBxSBjJ02nA2kiO8j+K51fuF24nmbQRtSLjTa8/BimpYbBywTAsSps8vgnJjsLONf243HYw==} + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260629.1': + resolution: {integrity: sha512-y4ey82krq4iLNHML4G1dUObBWY6gNAjVqaUHFDv7+LBu5bfAJy8VClBaLtAJce3siQQeB0/4SkN4XsAa0oZktQ==} engines: {node: '>=16.20.0'} cpu: [arm64] os: [linux] - '@typescript/native-preview-linux-arm@7.0.0-dev.20260622.1': - resolution: {integrity: sha512-XnDHJZWFY2M8DCzxXj598Ql9op+zYpk6k5X3FYB4KeOXpdzjAke2H9wKW7UKeYfvPJyAgvyS+IapcvogCwx13A==} + '@typescript/native-preview-linux-arm@7.0.0-dev.20260629.1': + resolution: {integrity: sha512-QlTxO+O6yELc0NYZZYIbncZhkhw+K/vBoVg+mKipbEIK5b1E6cwW7ivWIrDp1FfssQ0Wu7zxincPappoci7KNw==} engines: {node: '>=16.20.0'} cpu: [arm] os: [linux] - '@typescript/native-preview-linux-x64@7.0.0-dev.20260622.1': - resolution: {integrity: sha512-41TR69UuB1be2DmjcavcUMoFipIQNVpqsm1FvVCtGnscL41pDa/ijXHnSwzn7v8EbCgAI7hRUhRsPNPGY3OCKQ==} + '@typescript/native-preview-linux-x64@7.0.0-dev.20260629.1': + resolution: {integrity: sha512-ckb4HyugC5beDpOMPOVpEx1H3l2Z2RgsGPxFOLGMU6LLIHQwlCaSdRjSfH8Hq8yffPgKuotTQLdA89cP1IC8xQ==} engines: {node: '>=16.20.0'} cpu: [x64] os: [linux] - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260622.1': - resolution: {integrity: sha512-TMdYylCqBvQOVz6x5dT1HQ/49eLBijNE/uMGD2CA3YR4Hp4NkG+Rqg46NZiaO48D2+sjZws2uoNtPhfefN9IdA==} + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260629.1': + resolution: {integrity: sha512-Ktgepu9p0blqrbiryzYrw11ddnbESXPdeGKURDG/wXESoHQETsMNxKWhqAo587ItNnWjKOBFxoEM22eP9OzKnw==} engines: {node: '>=16.20.0'} cpu: [arm64] os: [win32] - '@typescript/native-preview-win32-x64@7.0.0-dev.20260622.1': - resolution: {integrity: sha512-ROz8ncFZsMC2nn8ClBZ3wLNXpea6BbdMYyNTWx8xYrikhOIgFlkmAdc10PA/MiOh78RraUbdWvwbXNe19He+iQ==} + '@typescript/native-preview-win32-x64@7.0.0-dev.20260629.1': + resolution: {integrity: sha512-b2wmeIpFJs/peej3NG26320ya+iYQz21JzFYDrnvtsEeR/g66rB9uvp4Owo4J1AG/BcmRWC/nuwrBy3Jdb+UDA==} engines: {node: '>=16.20.0'} cpu: [x64] os: [win32] - '@typescript/native-preview@7.0.0-dev.20260622.1': - resolution: {integrity: sha512-t4XoYz/Jr1Jt7wkaHwe4e/r3OcYgKxvL0dqfZsnBmqG8HsJ57VpOwd0PINU5b5umcb4g9akVto028L70lAJUpA==} + '@typescript/native-preview@7.0.0-dev.20260629.1': + resolution: {integrity: sha512-KImWFkxGUa/V78bUEAgzeJQT+6wKQXDDYHHrOavof8wnbMCpj86KuPNyBIPQMtoHiz2If8aNTums2m50oE3oqw==} engines: {node: '>=16.20.0'} hasBin: true - '@ungap/structured-clone@1.3.1': - resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==} + '@ungap/structured-clone@1.3.2': + resolution: {integrity: sha512-5jsZFwgR5rTdKwidH9Qmat75RKwqfpKlWWB1frDkljN127mwqBu8K0PYo7/hFpF03IEJpfVPpCQDY/eDx3iHvA==} '@unrs/resolver-binding-android-arm-eabi@1.12.2': resolution: {integrity: sha512-g5T90pqg1bo/7mytQx6F4iBNC0Wsh9cu+z9veDbFjc7HjpesJFWD7QMS0NGStXM075+7dJPPVvBbpZlnrdpi/w==} @@ -1188,8 +1188,8 @@ packages: peerDependencies: prettier: '>=2.4.0' - '@webdeveric/utils@0.79.0': - resolution: {integrity: sha512-1ANvex1ghT2JlK/Z6QqT1BR48RVFh1+gLYAL2A658FPrfbRCfxLj6FPKW1tGrgT6ucjq2EnCMhgmHY7KAowfww==} + '@webdeveric/utils@0.81.0': + resolution: {integrity: sha512-LJylmoQ13+qWM10ohDf/gvlyP/jNE3dZZ+opapy9tcW7p1Um3f1AibmNSsmVqJB6Gbd14vmQ++MaafQFimZ2Hw==} engines: {node: '>=18.0.0'} abbrev@4.0.0: @@ -1325,8 +1325,8 @@ packages: brace-expansion@1.1.15: resolution: {integrity: sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==} - brace-expansion@5.0.6: - resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} + brace-expansion@5.0.7: + resolution: {integrity: sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==} engines: {node: 18 || 20 || >=22} braces@3.0.3: @@ -1434,13 +1434,13 @@ packages: resolution: {integrity: sha512-uiqLcOiVDJtBP8WGkZHEP+FZIhTzP1dxvn59EfoYUi9gqupjrBWVQkO2atDrbnKPwLeotFYDsuNb26uBMqB+hw==} engines: {node: '>= 6'} - commitlint-plugin-cspell@0.9.2: - resolution: {integrity: sha512-i+1zLJqYVRYdcD+rR+zkwS0ymGUlZ8BhuVUI3ONyTpAQDXNbuV1gl6aTqdhDBL/Y44EKq1KEz6KrscKHo4RssA==} + commitlint-plugin-cspell@0.9.3: + resolution: {integrity: sha512-BWcBEh14sP1OYe6Ro8OxwmbTUPQ3fomTDsqOjpZ02h9ZOBH5LZIzZ2lO6zKdW1EnaG3ec6FeW2ENdROqXikZxg==} peerDependencies: '@commitlint/lint': '>=7.6.0' - commitlint@21.0.2: - resolution: {integrity: sha512-396jFlB/RPVbd8/fM959insMb1WHNV8a5QlBDtBHfX3k5+APHpJI9b7quP3TFDtwBiVfXVTItE6mOhc08hKzlg==} + commitlint@21.1.0: + resolution: {integrity: sha512-zhOptGgfRqtw+uEPYENa3Uaz5fe94SJ4sKf4yh6ODGr8LZin0aOxTIwiyyDaTP2xp3EQ6JInZMspGXPRfjaFsg==} engines: {node: '>=22.12.0'} hasBin: true @@ -1694,8 +1694,8 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@2.1.0: - resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} + es-module-lexer@2.2.0: + resolution: {integrity: sha512-3lGxdTXCLfe1MYfTz1y2ksAAUM4NAOP6rPEjxGJVKO7TZ5+tvHCaQWGpC4Y3IXvW3ece0Cz1cIP4FWBxOnGCTQ==} es-object-atoms@1.1.2: resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} @@ -1709,12 +1709,12 @@ packages: resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} engines: {node: '>= 0.4'} - es-to-primitive@1.3.1: - resolution: {integrity: sha512-CxN9N56HYfd2m/acc/NOFrZQsN9kU4eh+2kk6A707Kz1krH8tKmfrs5RnftB8WNX80T0NS7vSQsDOlg23diR2g==} + es-to-primitive@1.3.4: + resolution: {integrity: sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==} engines: {node: '>= 0.4'} - es-toolkit@1.48.1: - resolution: {integrity: sha512-wfnXlwd5I75eXRtdD2vuEs50xHHESECDsGD7yiQnfFVNoa5522NwXEbmgo98LfiukSQHs+mBM7/YG3qKJB9/mQ==} + es-toolkit@1.49.0: + resolution: {integrity: sha512-G5iZ6Pc/FNRY/soKZHC+TxGDD83rHUDXxzaWhGCX44vAv/tMs56WMusnm/KMNK+luUPsgA9U28cGr4RDlSzL2g==} escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} @@ -1851,8 +1851,8 @@ packages: resolution: {integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==} engines: {node: ^18.19.0 || >=20.5.0} - expect-type@1.3.0: - resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + expect-type@1.4.0: + resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==} engines: {node: '>=12.0.0'} exponential-backoff@3.1.3: @@ -1871,8 +1871,8 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-uri@3.1.2: - resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} + fast-uri@3.1.3: + resolution: {integrity: sha512-i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==} fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} @@ -2008,6 +2008,7 @@ packages: git-raw-commits@5.0.1: resolution: {integrity: sha512-Y+csSm2GD/PCSh6Isd/WiMjNAydu0VBiG9J7EdQsNA5P9uXvLayqjmTsNlK5Gs9IhblFZqOU0yid5Il5JPoLiQ==} engines: {node: '>=18'} + deprecated: Deprecated and no longer maintained. Use @conventional-changelog/git-client instead. hasBin: true glob-parent@6.0.2: @@ -2398,8 +2399,8 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@4.2.0: - resolution: {integrity: sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==} + js-yaml@4.3.0: + resolution: {integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==} hasBin: true jsdom@29.1.1: @@ -2545,8 +2546,8 @@ packages: engines: {node: '>=22.22.1'} hasBin: true - listr2@10.2.1: - resolution: {integrity: sha512-7I5knELsJKTUjXG+A6BkKAiGkW1i25fNa/xlUl9hFtk15WbE9jndA89xu5FzQKrY5llajE1hfZZFMILXkDHk/Q==} + listr2@10.2.2: + resolution: {integrity: sha512-JtNtbZj8q5BnDMR7trpwvwk3RIrANtIVzEUm8w7amp6xelLgyuq+4WZoTH913XaQAoH/cNdYhaNzBPA2U3xbDw==} engines: {node: '>=22.13.0'} load-json-file@4.0.0: @@ -2794,8 +2795,8 @@ packages: resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} engines: {node: '>=18'} - npm@11.17.0: - resolution: {integrity: sha512-PurxiZexEHDTE4SSaLI3ZrnbAGiZfeyUcQcxcP5D+hfytNAze/D1IzDuInTn9XVLIbAQUnQuSPXJx02LHjLvQw==} + npm@11.18.0: + resolution: {integrity: sha512-T67M4L5wNm0cZ7EBLErcEkY1SmzEW/WJ+SADBzsFUY1UdAPfFHXFQtZ6SEXiK0+vzXysCvAsepbMaBTwnrAD+w==} engines: {node: ^20.17.0 || >=22.9.0} hasBin: true bundledDependencies: @@ -3069,16 +3070,16 @@ packages: resolution: {integrity: sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==} engines: {node: '>=4'} - postcss@8.5.15: - resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} + postcss@8.5.16: + resolution: {integrity: sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier@3.8.4: - resolution: {integrity: sha512-N2MylSdi48+5N/6S5j+maeHbUSIzzZ5uOcX5Hm4QpV8Dkb1HFjfAKTKX6yNPJQD9AhcT3ifHNB66tWTTJDi11Q==} + prettier@3.9.3: + resolution: {integrity: sha512-HWmu+K+zvHNpaMfSnYeqdqrDbR16cuIXaPx8WoHaviQkDJh1/0BNtOZmHVQI5jc3wXv0H1yXc9wjvFdXh+n3hQ==} engines: {node: '>=14'} hasBin: true @@ -3473,8 +3474,8 @@ packages: resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} engines: {node: '>=20'} - tar@7.5.16: - resolution: {integrity: sha512-56adEpPMouktRlBLXiaYFFzZ/3+JXa8P9n7WbR+ibIjtviN55mEaOkiysCnPnWm+7kkui1Dn8J9l+g6zV8731w==} + tar@7.5.19: + resolution: {integrity: sha512-4LeEWl96twnS2Q7Bz4MGqgazLqO+hJN63GZxXoIqh1T3VweYD997gbU1ItNsQafqqXTXd5WFyFdReLtwvRBNiw==} engines: {node: '>=18'} temp-dir@3.0.0: @@ -3517,11 +3518,11 @@ packages: resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} - tldts-core@7.4.3: - resolution: {integrity: sha512-27ep5H9PzdBrNd5OFM/j3WCU8F3kPwM9D0BOaOf7uYfxMJfyr0K5Tjj69Gri+sZlh2WXd5buIm47NuPF29CDiw==} + tldts-core@7.4.5: + resolution: {integrity: sha512-pGrwzZDvPwKe+7NNUqAunb6rqTfynr0VOUhCMdqbu5xlvNiszsAJygRzwvpVycdzejlbpY+SWJOn+s75Og7FEA==} - tldts@7.4.3: - resolution: {integrity: sha512-A3BDQBeeukYPzB4QdQ1DtdlUmp4x2OCH8n5UVhEWbyANxNep8GavottKzd1xYKFJKjUgMyPT7EzOfnBO55s8Sg==} + tldts@7.4.5: + resolution: {integrity: sha512-RfEzKWcq5fHUOFq7J3rl3Oz6ylKGtcHqUznzj4EcXsxLSIjJcvpbXAQtWGeJQ0xKnimR5e0Cn+cn9TssfMzm+g==} hasBin: true to-regex-range@5.0.1: @@ -3676,8 +3677,8 @@ packages: resolution: {integrity: sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==} engines: {node: ^20.17.0 || >=22.9.0} - validate-package-exports@1.1.0: - resolution: {integrity: sha512-fnIYf0OCtjbk5X8GM4VMK8yQndPtE45wcMH/cUTHake7xxvahDlUVGNmxupRr+XTWWGLmccVkCPBL7lI8aOuXg==} + validate-package-exports@1.1.1: + resolution: {integrity: sha512-1SfEbG2FgU5aTzTvQHRLA54n4+aTgLimDb24Nl4+xL5dSL8iU3jdFVipYUG1vzZ14nf+pfCtvv3nglE2Qq5hww==} engines: {node: '>=22.22.2'} hasBin: true @@ -3928,7 +3929,7 @@ snapshots: dependencies: '@asamuzakjp/generational-cache': 1.0.1 '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-color-parser': 4.1.8(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.1.9(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 @@ -3972,13 +3973,14 @@ snapshots: '@colors/colors@1.5.0': optional: true - '@commitlint/cli@21.0.2(@types/node@24.13.2)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@6.0.3)': + '@commitlint/cli@21.1.0(@types/node@24.13.2)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@6.0.3)': dependencies: - '@commitlint/format': 21.0.1 - '@commitlint/lint': 21.0.2 - '@commitlint/load': 21.0.2(@types/node@24.13.2)(typescript@6.0.3) - '@commitlint/read': 21.0.2(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) - '@commitlint/types': 21.0.1 + '@commitlint/config-conventional': 21.1.0 + '@commitlint/format': 21.1.0 + '@commitlint/lint': 21.1.0 + '@commitlint/load': 21.1.0(@types/node@24.13.2)(typescript@6.0.3) + '@commitlint/read': 21.1.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) + '@commitlint/types': 21.1.0 tinyexec: 1.2.4 yargs: 18.0.0 transitivePeerDependencies: @@ -3987,49 +3989,49 @@ snapshots: - conventional-commits-parser - typescript - '@commitlint/config-conventional@21.0.2': + '@commitlint/config-conventional@21.1.0': dependencies: - '@commitlint/types': 21.0.1 + '@commitlint/types': 21.1.0 conventional-changelog-conventionalcommits: 9.3.1 - '@commitlint/config-validator@21.0.1': + '@commitlint/config-validator@21.1.0': dependencies: - '@commitlint/types': 21.0.1 + '@commitlint/types': 21.1.0 ajv: 8.20.0 - '@commitlint/ensure@21.0.1': + '@commitlint/ensure@21.1.0': dependencies: - '@commitlint/types': 21.0.1 - es-toolkit: 1.48.1 + '@commitlint/types': 21.1.0 + es-toolkit: 1.49.0 '@commitlint/execute-rule@21.0.1': {} - '@commitlint/format@21.0.1': + '@commitlint/format@21.1.0': dependencies: - '@commitlint/types': 21.0.1 + '@commitlint/types': 21.1.0 picocolors: 1.1.1 - '@commitlint/is-ignored@21.0.2': + '@commitlint/is-ignored@21.1.0': dependencies: - '@commitlint/types': 21.0.1 + '@commitlint/types': 21.1.0 semver: 7.8.5 - '@commitlint/lint@21.0.2': + '@commitlint/lint@21.1.0': dependencies: - '@commitlint/is-ignored': 21.0.2 - '@commitlint/parse': 21.0.2 - '@commitlint/rules': 21.0.2 - '@commitlint/types': 21.0.1 + '@commitlint/is-ignored': 21.1.0 + '@commitlint/parse': 21.1.0 + '@commitlint/rules': 21.1.0 + '@commitlint/types': 21.1.0 - '@commitlint/load@21.0.2(@types/node@24.13.2)(typescript@6.0.3)': + '@commitlint/load@21.1.0(@types/node@24.13.2)(typescript@6.0.3)': dependencies: - '@commitlint/config-validator': 21.0.1 + '@commitlint/config-validator': 21.1.0 '@commitlint/execute-rule': 21.0.1 - '@commitlint/resolve-extends': 21.0.1 - '@commitlint/types': 21.0.1 + '@commitlint/resolve-extends': 21.1.0 + '@commitlint/types': 21.1.0 cosmiconfig: 9.0.2(typescript@6.0.3) cosmiconfig-typescript-loader: 6.3.0(@types/node@24.13.2)(cosmiconfig@9.0.2(typescript@6.0.3))(typescript@6.0.3) - es-toolkit: 1.48.1 + es-toolkit: 1.49.0 is-plain-obj: 4.1.0 picocolors: 1.1.1 transitivePeerDependencies: @@ -4038,36 +4040,36 @@ snapshots: '@commitlint/message@21.0.2': {} - '@commitlint/parse@21.0.2': + '@commitlint/parse@21.1.0': dependencies: - '@commitlint/types': 21.0.1 + '@commitlint/types': 21.1.0 conventional-changelog-angular: 8.3.1 conventional-commits-parser: 6.4.0 - '@commitlint/read@21.0.2(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)': + '@commitlint/read@21.1.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)': dependencies: '@commitlint/top-level': 21.0.2 - '@commitlint/types': 21.0.1 + '@commitlint/types': 21.1.0 git-raw-commits: 5.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) tinyexec: 1.2.4 transitivePeerDependencies: - conventional-commits-filter - conventional-commits-parser - '@commitlint/resolve-extends@21.0.1': + '@commitlint/resolve-extends@21.1.0': dependencies: - '@commitlint/config-validator': 21.0.1 - '@commitlint/types': 21.0.1 - es-toolkit: 1.48.1 + '@commitlint/config-validator': 21.1.0 + '@commitlint/types': 21.1.0 + es-toolkit: 1.49.0 global-directory: 5.0.0 resolve-from: 5.0.0 - '@commitlint/rules@21.0.2': + '@commitlint/rules@21.1.0': dependencies: - '@commitlint/ensure': 21.0.1 + '@commitlint/ensure': 21.1.0 '@commitlint/message': 21.0.2 '@commitlint/to-lines': 21.0.1 - '@commitlint/types': 21.0.1 + '@commitlint/types': 21.1.0 '@commitlint/to-lines@21.0.1': {} @@ -4075,7 +4077,7 @@ snapshots: dependencies: escalade: 3.2.0 - '@commitlint/types@21.0.1': + '@commitlint/types@21.1.0': dependencies: conventional-commits-parser: 6.4.0 picocolors: 1.1.1 @@ -4311,16 +4313,16 @@ snapshots: '@cspell/url@10.0.1': {} - '@csstools/color-helpers@6.0.2': {} + '@csstools/color-helpers@6.1.0': {} '@csstools/css-calc@3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-color-parser@4.1.8(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + '@csstools/css-color-parser@4.1.9(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: - '@csstools/color-helpers': 6.0.2 + '@csstools/color-helpers': 6.1.0 '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 @@ -4329,7 +4331,7 @@ snapshots: dependencies: '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.1.5(css-tree@3.2.1)': + '@csstools/css-syntax-patches-for-csstree@1.1.6(css-tree@3.2.1)': optionalDependencies: css-tree: 3.2.1 @@ -4366,7 +4368,7 @@ snapshots: globals: 13.24.0 ignore: 5.3.2 import-fresh: 3.3.1 - js-yaml: 4.2.0 + js-yaml: 4.3.0 minimatch: 3.1.5 strip-json-comments: 3.1.1 transitivePeerDependencies: @@ -4405,11 +4407,11 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 - '@tybys/wasm-util': 0.10.2 + '@tybys/wasm-util': 0.10.3 optional: true '@nodelib/fs.scandir@2.1.5': @@ -4434,7 +4436,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@npmcli/arborist@9.8.0': + '@npmcli/arborist@9.9.0': dependencies: '@gar/promise-retry': 1.0.3 '@isaacs/string-locale-compare': 1.1.0 @@ -4656,7 +4658,7 @@ snapshots: dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true '@rolldown/binding-win32-arm64-msvc@1.0.3': @@ -4722,7 +4724,7 @@ snapshots: lodash-es: 4.18.1 nerf-dart: 1.0.0 normalize-url: 9.0.1 - npm: 11.17.0 + npm: 11.18.0 rc: 1.2.8 read-pkg: 10.1.0 registry-auth-token: 5.1.1 @@ -4795,7 +4797,7 @@ snapshots: '@tufjs/canonical-json': 2.0.0 minimatch: 10.2.5 - '@tybys/wasm-util@0.10.2': + '@tybys/wasm-util@0.10.3': dependencies: tslib: 2.8.1 optional: true @@ -4817,14 +4819,14 @@ snapshots: '@types/normalize-package-data@2.4.4': {} - '@typescript-eslint/eslint-plugin@8.62.0(@typescript-eslint/parser@8.62.0(eslint@8.57.1)(typescript@6.0.3))(eslint@8.57.1)(typescript@6.0.3)': + '@typescript-eslint/eslint-plugin@8.62.1(@typescript-eslint/parser@8.62.1(eslint@8.57.1)(typescript@6.0.3))(eslint@8.57.1)(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.62.0(eslint@8.57.1)(typescript@6.0.3) - '@typescript-eslint/scope-manager': 8.62.0 - '@typescript-eslint/type-utils': 8.62.0(eslint@8.57.1)(typescript@6.0.3) - '@typescript-eslint/utils': 8.62.0(eslint@8.57.1)(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.62.0 + '@typescript-eslint/parser': 8.62.1(eslint@8.57.1)(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.62.1 + '@typescript-eslint/type-utils': 8.62.1(eslint@8.57.1)(typescript@6.0.3) + '@typescript-eslint/utils': 8.62.1(eslint@8.57.1)(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.62.1 eslint: 8.57.1 ignore: 7.0.5 natural-compare: 1.4.0 @@ -4833,41 +4835,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.62.0(eslint@8.57.1)(typescript@6.0.3)': + '@typescript-eslint/parser@8.62.1(eslint@8.57.1)(typescript@6.0.3)': dependencies: - '@typescript-eslint/scope-manager': 8.62.0 - '@typescript-eslint/types': 8.62.0 - '@typescript-eslint/typescript-estree': 8.62.0(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.62.0 + '@typescript-eslint/scope-manager': 8.62.1 + '@typescript-eslint/types': 8.62.1 + '@typescript-eslint/typescript-estree': 8.62.1(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.62.1 debug: 4.4.3 eslint: 8.57.1 typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.62.0(typescript@6.0.3)': + '@typescript-eslint/project-service@8.62.1(typescript@6.0.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.62.0(typescript@6.0.3) - '@typescript-eslint/types': 8.62.0 + '@typescript-eslint/tsconfig-utils': 8.62.1(typescript@6.0.3) + '@typescript-eslint/types': 8.62.1 debug: 4.4.3 typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.62.0': + '@typescript-eslint/scope-manager@8.62.1': dependencies: - '@typescript-eslint/types': 8.62.0 - '@typescript-eslint/visitor-keys': 8.62.0 + '@typescript-eslint/types': 8.62.1 + '@typescript-eslint/visitor-keys': 8.62.1 - '@typescript-eslint/tsconfig-utils@8.62.0(typescript@6.0.3)': + '@typescript-eslint/tsconfig-utils@8.62.1(typescript@6.0.3)': dependencies: typescript: 6.0.3 - '@typescript-eslint/type-utils@8.62.0(eslint@8.57.1)(typescript@6.0.3)': + '@typescript-eslint/type-utils@8.62.1(eslint@8.57.1)(typescript@6.0.3)': dependencies: - '@typescript-eslint/types': 8.62.0 - '@typescript-eslint/typescript-estree': 8.62.0(typescript@6.0.3) - '@typescript-eslint/utils': 8.62.0(eslint@8.57.1)(typescript@6.0.3) + '@typescript-eslint/types': 8.62.1 + '@typescript-eslint/typescript-estree': 8.62.1(typescript@6.0.3) + '@typescript-eslint/utils': 8.62.1(eslint@8.57.1)(typescript@6.0.3) debug: 4.4.3 eslint: 8.57.1 ts-api-utils: 2.5.0(typescript@6.0.3) @@ -4875,14 +4877,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.62.0': {} + '@typescript-eslint/types@8.62.1': {} - '@typescript-eslint/typescript-estree@8.62.0(typescript@6.0.3)': + '@typescript-eslint/typescript-estree@8.62.1(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.62.0(typescript@6.0.3) - '@typescript-eslint/tsconfig-utils': 8.62.0(typescript@6.0.3) - '@typescript-eslint/types': 8.62.0 - '@typescript-eslint/visitor-keys': 8.62.0 + '@typescript-eslint/project-service': 8.62.1(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.62.1(typescript@6.0.3) + '@typescript-eslint/types': 8.62.1 + '@typescript-eslint/visitor-keys': 8.62.1 debug: 4.4.3 minimatch: 10.2.5 semver: 7.8.5 @@ -4892,54 +4894,54 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.62.0(eslint@8.57.1)(typescript@6.0.3)': + '@typescript-eslint/utils@8.62.1(eslint@8.57.1)(typescript@6.0.3)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) - '@typescript-eslint/scope-manager': 8.62.0 - '@typescript-eslint/types': 8.62.0 - '@typescript-eslint/typescript-estree': 8.62.0(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.62.1 + '@typescript-eslint/types': 8.62.1 + '@typescript-eslint/typescript-estree': 8.62.1(typescript@6.0.3) eslint: 8.57.1 typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.62.0': + '@typescript-eslint/visitor-keys@8.62.1': dependencies: - '@typescript-eslint/types': 8.62.0 + '@typescript-eslint/types': 8.62.1 eslint-visitor-keys: 5.0.1 - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260622.1': + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260629.1': optional: true - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260622.1': + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260629.1': optional: true - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260622.1': + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260629.1': optional: true - '@typescript/native-preview-linux-arm@7.0.0-dev.20260622.1': + '@typescript/native-preview-linux-arm@7.0.0-dev.20260629.1': optional: true - '@typescript/native-preview-linux-x64@7.0.0-dev.20260622.1': + '@typescript/native-preview-linux-x64@7.0.0-dev.20260629.1': optional: true - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260622.1': + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260629.1': optional: true - '@typescript/native-preview-win32-x64@7.0.0-dev.20260622.1': + '@typescript/native-preview-win32-x64@7.0.0-dev.20260629.1': optional: true - '@typescript/native-preview@7.0.0-dev.20260622.1': + '@typescript/native-preview@7.0.0-dev.20260629.1': optionalDependencies: - '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260622.1 - '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260622.1 - '@typescript/native-preview-linux-arm': 7.0.0-dev.20260622.1 - '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260622.1 - '@typescript/native-preview-linux-x64': 7.0.0-dev.20260622.1 - '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260622.1 - '@typescript/native-preview-win32-x64': 7.0.0-dev.20260622.1 + '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260629.1 + '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260629.1 + '@typescript/native-preview-linux-arm': 7.0.0-dev.20260629.1 + '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260629.1 + '@typescript/native-preview-linux-x64': 7.0.0-dev.20260629.1 + '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260629.1 + '@typescript/native-preview-win32-x64': 7.0.0-dev.20260629.1 - '@ungap/structured-clone@1.3.1': {} + '@ungap/structured-clone@1.3.2': {} '@unrs/resolver-binding-android-arm-eabi@1.12.2': optional: true @@ -4999,7 +5001,7 @@ snapshots: dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true '@unrs/resolver-binding-win32-arm64-msvc@1.12.2': @@ -5068,8 +5070,8 @@ snapshots: '@webdeveric/eslint-config-ts@0.12.0(eslint@8.57.1)(typescript@6.0.3)': dependencies: - '@typescript-eslint/eslint-plugin': 8.62.0(@typescript-eslint/parser@8.62.0(eslint@8.57.1)(typescript@6.0.3))(eslint@8.57.1)(typescript@6.0.3) - '@typescript-eslint/parser': 8.62.0(eslint@8.57.1)(typescript@6.0.3) + '@typescript-eslint/eslint-plugin': 8.62.1(@typescript-eslint/parser@8.62.1(eslint@8.57.1)(typescript@6.0.3))(eslint@8.57.1)(typescript@6.0.3) + '@typescript-eslint/parser': 8.62.1(eslint@8.57.1)(typescript@6.0.3) '@webdeveric/eslint-config': 0.7.0(eslint@8.57.1) eslint: 8.57.1 typescript: 6.0.3 @@ -5080,11 +5082,11 @@ snapshots: dependencies: eslint: 8.57.1 - '@webdeveric/prettier-config@0.4.0(prettier@3.8.4)': + '@webdeveric/prettier-config@0.4.0(prettier@3.9.3)': dependencies: - prettier: 3.8.4 + prettier: 3.9.3 - '@webdeveric/utils@0.79.0': {} + '@webdeveric/utils@0.81.0': {} abbrev@4.0.0: {} @@ -5113,7 +5115,7 @@ snapshots: ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.1.2 + fast-uri: 3.1.3 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -5234,7 +5236,7 @@ snapshots: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@5.0.6: + brace-expansion@5.0.7: dependencies: balanced-match: 4.0.4 @@ -5358,16 +5360,16 @@ snapshots: array-timsort: 1.0.3 esprima: 4.0.1 - commitlint-plugin-cspell@0.9.2(@commitlint/lint@21.0.2): + commitlint-plugin-cspell@0.9.3(@commitlint/lint@21.1.0): dependencies: - '@commitlint/lint': 21.0.2 - '@commitlint/types': 21.0.1 + '@commitlint/lint': 21.1.0 + '@commitlint/types': 21.1.0 cspell-lib: 10.0.1 - commitlint@21.0.2(@types/node@24.13.2)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@6.0.3): + commitlint@21.1.0(@types/node@24.13.2)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@6.0.3): dependencies: - '@commitlint/cli': 21.0.2(@types/node@24.13.2)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@6.0.3) - '@commitlint/types': 21.0.1 + '@commitlint/cli': 21.1.0(@types/node@24.13.2)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@6.0.3) + '@commitlint/types': 21.1.0 transitivePeerDependencies: - '@types/node' - conventional-commits-filter @@ -5430,7 +5432,7 @@ snapshots: dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 - js-yaml: 4.2.0 + js-yaml: 4.3.0 parse-json: 5.2.0 optionalDependencies: typescript: 6.0.3 @@ -5667,7 +5669,7 @@ snapshots: es-errors: 1.3.0 es-object-atoms: 1.1.2 es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.1 + es-to-primitive: 1.3.4 function.prototype.name: 1.2.0 get-intrinsic: 1.3.0 get-proto: 1.0.1 @@ -5714,7 +5716,7 @@ snapshots: es-errors@1.3.0: {} - es-module-lexer@2.1.0: {} + es-module-lexer@2.2.0: {} es-object-atoms@1.1.2: dependencies: @@ -5731,15 +5733,16 @@ snapshots: dependencies: hasown: 2.0.4 - es-to-primitive@1.3.1: + es-to-primitive@1.3.4: dependencies: es-abstract-get: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 is-callable: 1.2.7 is-date-object: 1.1.0 is-symbol: 1.1.1 - es-toolkit@1.48.1: {} + es-toolkit@1.49.0: {} escalade@3.2.0: {} @@ -5779,22 +5782,22 @@ snapshots: tinyglobby: 0.2.17 unrs-resolver: 1.12.2 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.62.0(eslint@8.57.1)(typescript@6.0.3))(eslint-import-resolver-typescript@4.4.5)(eslint@8.57.1) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.62.1(eslint@8.57.1)(typescript@6.0.3))(eslint-import-resolver-typescript@4.4.5)(eslint@8.57.1) transitivePeerDependencies: - supports-color - eslint-module-utils@2.13.0(@typescript-eslint/parser@8.62.0(eslint@8.57.1)(typescript@6.0.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@4.4.5)(eslint@8.57.1): + eslint-module-utils@2.13.0(@typescript-eslint/parser@8.62.1(eslint@8.57.1)(typescript@6.0.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@4.4.5)(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.62.0(eslint@8.57.1)(typescript@6.0.3) + '@typescript-eslint/parser': 8.62.1(eslint@8.57.1)(typescript@6.0.3) eslint: 8.57.1 eslint-import-resolver-node: 0.3.10 eslint-import-resolver-typescript: 4.4.5(eslint-plugin-import@2.32.0)(eslint@8.57.1) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.62.0(eslint@8.57.1)(typescript@6.0.3))(eslint-import-resolver-typescript@4.4.5)(eslint@8.57.1): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.62.1(eslint@8.57.1)(typescript@6.0.3))(eslint-import-resolver-typescript@4.4.5)(eslint@8.57.1): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -5805,7 +5808,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.10 - eslint-module-utils: 2.13.0(@typescript-eslint/parser@8.62.0(eslint@8.57.1)(typescript@6.0.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@4.4.5)(eslint@8.57.1) + eslint-module-utils: 2.13.0(@typescript-eslint/parser@8.62.1(eslint@8.57.1)(typescript@6.0.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@4.4.5)(eslint@8.57.1) hasown: 2.0.4 is-core-module: 2.16.2 is-glob: 4.0.3 @@ -5817,7 +5820,7 @@ snapshots: string.prototype.trimend: 1.0.10 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.62.0(eslint@8.57.1)(typescript@6.0.3) + '@typescript-eslint/parser': 8.62.1(eslint@8.57.1)(typescript@6.0.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -5841,7 +5844,7 @@ snapshots: '@humanwhocodes/config-array': 0.13.0 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.3.1 + '@ungap/structured-clone': 1.3.2 ajv: 6.15.0 chalk: 4.1.2 cross-spawn: 7.0.6 @@ -5863,7 +5866,7 @@ snapshots: imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 - js-yaml: 4.2.0 + js-yaml: 4.3.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 lodash.merge: 4.6.2 @@ -5928,7 +5931,7 @@ snapshots: strip-final-newline: 4.0.0 yoctocolors: 2.1.2 - expect-type@1.3.0: {} + expect-type@1.4.0: {} exponential-backoff@3.1.3: {} @@ -5940,7 +5943,7 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-uri@3.1.2: {} + fast-uri@3.1.3: {} fastq@1.20.1: dependencies: @@ -6457,7 +6460,7 @@ snapshots: js-tokens@4.0.0: {} - js-yaml@4.2.0: + js-yaml@4.3.0: dependencies: argparse: 2.0.1 @@ -6466,7 +6469,7 @@ snapshots: '@asamuzakjp/css-color': 5.1.11 '@asamuzakjp/dom-selector': 7.1.1 '@bramus/specificity': 2.4.2 - '@csstools/css-syntax-patches-for-csstree': 1.1.5(css-tree@3.2.1) + '@csstools/css-syntax-patches-for-csstree': 1.1.6(css-tree@3.2.1) '@exodus/bytes': 1.15.1 css-tree: 3.2.1 data-urls: 7.0.0 @@ -6583,14 +6586,14 @@ snapshots: lint-staged@17.0.8: dependencies: - listr2: 10.2.1 + listr2: 10.2.2 picomatch: 4.0.4 string-argv: 0.3.2 tinyexec: 1.2.4 optionalDependencies: yaml: 2.9.0 - listr2@10.2.1: + listr2@10.2.2: dependencies: cli-truncate: 5.2.0 eventemitter3: 5.0.4 @@ -6711,7 +6714,7 @@ snapshots: minimatch@10.2.5: dependencies: - brace-expansion: 5.0.6 + brace-expansion: 5.0.7 minimatch@3.1.5: dependencies: @@ -6795,7 +6798,7 @@ snapshots: nopt: 9.0.0 proc-log: 6.1.0 semver: 7.8.5 - tar: 7.5.16 + tar: 7.5.19 tinyglobby: 0.2.17 undici: 6.27.0 which: 6.0.1 @@ -6875,7 +6878,7 @@ snapshots: path-key: 4.0.0 unicorn-magic: 0.3.0 - npm@11.17.0: {} + npm@11.18.0: {} object-assign@4.1.1: {} @@ -7002,7 +7005,7 @@ snapshots: proc-log: 6.1.0 sigstore: 4.1.1 ssri: 13.0.1 - tar: 7.5.16 + tar: 7.5.19 transitivePeerDependencies: - supports-color @@ -7089,7 +7092,7 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss@8.5.15: + postcss@8.5.16: dependencies: nanoid: 3.3.15 picocolors: 1.1.1 @@ -7097,7 +7100,7 @@ snapshots: prelude-ls@1.2.1: {} - prettier@3.8.4: {} + prettier@3.9.3: {} pretty-ms@9.3.0: dependencies: @@ -7572,7 +7575,7 @@ snapshots: tagged-tag@1.0.0: {} - tar@7.5.16: + tar@7.5.19: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 @@ -7619,11 +7622,11 @@ snapshots: tinyrainbow@3.1.0: {} - tldts-core@7.4.3: {} + tldts-core@7.4.5: {} - tldts@7.4.3: + tldts@7.4.5: dependencies: - tldts-core: 7.4.3 + tldts-core: 7.4.5 to-regex-range@5.0.1: dependencies: @@ -7631,7 +7634,7 @@ snapshots: tough-cookie@6.0.1: dependencies: - tldts: 7.4.3 + tldts: 7.4.5 tr46@6.0.0: dependencies: @@ -7790,10 +7793,10 @@ snapshots: validate-npm-package-name@7.0.2: {} - validate-package-exports@1.1.0: + validate-package-exports@1.1.1: dependencies: - '@npmcli/arborist': 9.8.0 - '@webdeveric/utils': 0.79.0 + '@npmcli/arborist': 9.9.0 + '@webdeveric/utils': 0.81.0 npm-packlist: 11.3.0 transitivePeerDependencies: - supports-color @@ -7802,7 +7805,7 @@ snapshots: dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 - postcss: 8.5.15 + postcss: 8.5.16 rolldown: 1.0.3 tinyglobby: 0.2.17 optionalDependencies: @@ -7820,8 +7823,8 @@ snapshots: '@vitest/snapshot': 4.1.9 '@vitest/spy': 4.1.9 '@vitest/utils': 4.1.9 - es-module-lexer: 2.1.0 - expect-type: 1.3.0 + es-module-lexer: 2.2.0 + expect-type: 1.4.0 magic-string: 0.30.21 obug: 2.1.3 pathe: 2.0.3 diff --git a/src/constants.ts b/src/constants.ts new file mode 100644 index 0000000..893ae96 --- /dev/null +++ b/src/constants.ts @@ -0,0 +1,5 @@ +// Longest-alternative-first so a lone `\r` from a CRLF pair is never matched on its own. +export const NEWLINE_RAW_PATTERN = String.raw`\r\n|\r|\n`; + +// Whitespace excluding line breaks, since those are matched separately via `NEWLINE`. +export const INDENT_CHAR_RAW_PATTERN = String.raw`[^\S\r\n]`; diff --git a/src/dedent.ts b/src/dedent.ts new file mode 100644 index 0000000..6b05945 --- /dev/null +++ b/src/dedent.ts @@ -0,0 +1,39 @@ +import { INDENT_CHAR_RAW_PATTERN, NEWLINE_RAW_PATTERN } from './constants.js'; +import { findIndentation } from './findIndentation.js'; +import { stripIndent } from './stripIndent.js'; + +/** + * This is a tagged template function that removes common leading indentation from + * each line, re-indents any interpolated multi-line values to match, and trims + * leading/trailing whitespace from the result. + * + * @example + * ```ts + * const value = 'World'; + * + * dedent` + * Hello, ${value}! + * `; // 'Hello, World!' + * ``` + */ +export const dedent = (raw: readonly string[], ...values: unknown[]): string => { + const indent = findIndentation(raw); + + if (!indent) { + return String.raw({ raw }, ...values).trim(); + } + + const trailingWhitespace = new RegExp(String.raw`(?:${NEWLINE_RAW_PATTERN})(?${INDENT_CHAR_RAW_PATTERN}*)$`); + const newlinePattern = new RegExp(NEWLINE_RAW_PATTERN, 'g'); + + const lines = raw.map((line) => stripIndent(line, indent)); + + return String.raw( + { raw: lines }, + ...values.map((value, index) => { + const extraIndent = lines[index]?.match(trailingWhitespace)?.groups?.['indent']; + + return extraIndent ? String(value).replaceAll(newlinePattern, `$&${extraIndent}`) : value; + }), + ).trim(); +}; diff --git a/src/findIndentation.ts b/src/findIndentation.ts new file mode 100644 index 0000000..b45d13b --- /dev/null +++ b/src/findIndentation.ts @@ -0,0 +1,12 @@ +import { INDENT_CHAR_RAW_PATTERN, NEWLINE_RAW_PATTERN } from './constants.js'; + +/** + * Find indentation on first line that isn't whitespace only. + */ +export function findIndentation(lines: readonly string[]): string | undefined { + return lines + .find((line) => !/^\s*$/.test(line)) + ?.match(new RegExp(String.raw`^(?:${NEWLINE_RAW_PATTERN})?(?${INDENT_CHAR_RAW_PATTERN}+)`))?.groups?.[ + 'whiteSpace' + ]; +} diff --git a/src/index.ts b/src/index.ts index 636a2c1..78c33c0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -18,6 +18,7 @@ export * from './convert.js'; export * from './countCharacter.js'; export * from './countCharCode.js'; export * from './counter.js'; +export * from './dedent.js'; export * from './deepDecodeURI.js'; export * from './deepFreeze.js'; export * from './delay.js'; @@ -25,6 +26,7 @@ export * from './delayAnimationFrame.js'; export * from './delayAnimationFrames.js'; export * from './describeInput.js'; export * from './escapeRegExp.js'; +export * from './findIndentation.js'; export * from './get.js'; export * from './getDateString.js'; export * from './getISODateString.js'; @@ -58,6 +60,7 @@ export * from './redactCredentialsInURL.js'; export * from './resultify.js'; export * from './secToString.js'; export * from './set.js'; +export * from './stripIndent.js'; export * from './stripWhitespace.js'; export * from './suffix.js'; export * from './toPascalCase.js'; diff --git a/src/stripIndent.ts b/src/stripIndent.ts new file mode 100644 index 0000000..a720792 --- /dev/null +++ b/src/stripIndent.ts @@ -0,0 +1,8 @@ +import { NEWLINE_RAW_PATTERN } from './constants.js'; + +/** + * Remove `indent` immediately following every line break in `input`. + */ +export function stripIndent(input: string, indent: string): string { + return input.replaceAll(new RegExp(String.raw`(?${NEWLINE_RAW_PATTERN})${indent}`, 'g'), '$'); +} diff --git a/src/trimIndentation.ts b/src/trimIndentation.ts index 98cf8d0..3856639 100644 --- a/src/trimIndentation.ts +++ b/src/trimIndentation.ts @@ -1,16 +1,9 @@ -export function trimIndentation(input: string): string { - const lines = input.split('\n'); - // Find indentation on first line that isn't whitespace only. - const whiteSpace = lines.find((line) => !/^\s*$/.test(line))?.match(/^(?\s*)/)?.groups?.['whiteSpace']; - - if (whiteSpace) { - const wsPattern = new RegExp(`^${whiteSpace}`); +import { NEWLINE_RAW_PATTERN } from './constants.js'; +import { findIndentation } from './findIndentation.js'; +import { stripIndent } from './stripIndent.js'; - return lines - .map((line) => line.replace(wsPattern, '')) - .join('\n') - .trim(); - } +export function trimIndentation(input: string): string { + const whiteSpace = findIndentation(input.split(new RegExp(NEWLINE_RAW_PATTERN))); - return input; + return (whiteSpace ? stripIndent(input, whiteSpace) : input).trim(); } diff --git a/test/dedent.test.ts b/test/dedent.test.ts new file mode 100644 index 0000000..436fa10 --- /dev/null +++ b/test/dedent.test.ts @@ -0,0 +1,34 @@ +import { describe, it, expect } from 'vitest'; + +import { dedent } from '../src/dedent.js'; + +describe('dedent()', () => { + it('Trims indentation from a string', () => { + const description = 'line 2\nline 3'; + + const now = Date.now(); + + const obj = { + toString(): string { + return 'test'; + }, + }; + + const output = dedent` + line 1 + ${description} + now: ${now} + obj: ${obj} + `; + + expect(output).toBe(`line 1\n line 2\n line 3\nnow: ${now}\nobj: test`); + }); + + it('Does not trim if no indentation is found', () => { + const now = Date.now(); + + const output = dedent`The time is ${now}`; + + expect(output).toBe(`The time is ${now}`); + }); +}); diff --git a/test/findIndentation.test.ts b/test/findIndentation.test.ts new file mode 100644 index 0000000..6fcd8a9 --- /dev/null +++ b/test/findIndentation.test.ts @@ -0,0 +1,45 @@ +import { describe, it, expect } from 'vitest'; + +import { findIndentation } from '../src/findIndentation.js'; + +describe('findIndentation()', () => { + it('Finds the indentation of the first non-blank line', () => { + expect(findIndentation([' line 1', ' line 2'])).toBe(' '); + }); + + it('Skips leading blank lines', () => { + expect(findIndentation(['', ' ', ' line 1'])).toBe(' '); + }); + + it('Returns undefined when the first non-blank line has no indentation', () => { + expect(findIndentation(['line 1', ' line 2'])).toBeUndefined(); + }); + + it('Returns undefined when all lines are blank', () => { + expect(findIndentation(['', ' ', ''])).toBeUndefined(); + }); + + it('Returns undefined for an empty array', () => { + expect(findIndentation([])).toBeUndefined(); + }); + + it('Handles tabs as indentation', () => { + expect(findIndentation(['\tline 1', '\tline 2'])).toBe('\t'); + }); + + it('Handles mixed tabs and spaces as indentation', () => { + expect(findIndentation(['\t line 1'])).toBe('\t '); + }); + + it('Skips a leading line break before matching indentation', () => { + expect(findIndentation(['\n line 1'])).toBe(' '); + }); + + it('Skips a leading CRLF line break before matching indentation', () => { + expect(findIndentation(['\r\n line 1'])).toBe(' '); + }); + + it('Skips a leading CR line break before matching indentation', () => { + expect(findIndentation(['\r line 1'])).toBe(' '); + }); +}); diff --git a/test/stripIndent.test.ts b/test/stripIndent.test.ts new file mode 100644 index 0000000..4be4f6a --- /dev/null +++ b/test/stripIndent.test.ts @@ -0,0 +1,49 @@ +import { describe, it, expect } from 'vitest'; + +import { stripIndent } from '../src/stripIndent.js'; + +describe('stripIndent()', () => { + it('Removes the given indent after each line break', () => { + expect(stripIndent('line 1\n line 2\n line 3', ' ')).toBe('line 1\nline 2\nline 3'); + }); + + it('Only removes the indent immediately following a line break, not elsewhere in the line', () => { + expect(stripIndent(' line 1\n line 2', ' ')).toBe(' line 1\nline 2'); + }); + + it('Only removes indent that exactly matches', () => { + expect(stripIndent('line 1\n line 2', ' ')).toBe('line 1\n line 2'); + }); + + it('Does not remove indentation shorter than the given indent', () => { + expect(stripIndent('line 1\n line 2', ' ')).toBe('line 1\n line 2'); + }); + + it('Handles CRLF line breaks', () => { + expect(stripIndent('line 1\r\n line 2\r\n line 3', ' ')).toBe('line 1\r\nline 2\r\nline 3'); + }); + + it('Handles CR line breaks', () => { + expect(stripIndent('line 1\r line 2\r line 3', ' ')).toBe('line 1\rline 2\rline 3'); + }); + + it('Handles tabs as the indent', () => { + expect(stripIndent('line 1\n\tline 2\n\tline 3', '\t')).toBe('line 1\nline 2\nline 3'); + }); + + it('Returns the input unchanged when the indent is an empty string', () => { + expect(stripIndent('line 1\n line 2', '')).toBe('line 1\n line 2'); + }); + + it('Returns the input unchanged when there is nothing to strip', () => { + expect(stripIndent('line 1\nline 2', ' ')).toBe('line 1\nline 2'); + }); + + it('Returns an empty string for empty input', () => { + expect(stripIndent('', ' ')).toBe(''); + }); + + it('Strips indentation from multiple consecutive line breaks', () => { + expect(stripIndent('line 1\n \n line 2', ' ')).toBe('line 1\n\nline 2'); + }); +});