From 8d98d111ff019c047ec06e19232db3a895f068c9 Mon Sep 17 00:00:00 2001 From: alexander-akait Date: Wed, 17 Dec 2025 13:58:13 +0300 Subject: [PATCH 01/10] chore(deps): update --- package-lock.json | 891 +++++++++-------------- package.json | 13 +- src/index.js | 25 +- src/utils/compatibleAPI.js | 18 +- src/utils/memorize.js | 10 +- test/utils/ready.test.js | 6 +- test/utils/setupHooks.test.js | 22 +- test/utils/setupOutputFileSystem.test.js | 2 +- test/utils/setupWriteToDisk.test.js | 20 +- test/validation-options.test.js | 9 +- 10 files changed, 399 insertions(+), 617 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8aa52194d..23c69270c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,8 +20,8 @@ "@babel/cli": "^7.16.7", "@babel/core": "^7.16.7", "@babel/preset-env": "^7.16.7", - "@commitlint/cli": "^19.0.3", - "@commitlint/config-conventional": "^19.0.3", + "@commitlint/cli": "^20.2.0", + "@commitlint/config-conventional": "^20.2.0", "@eslint/js": "^9.28.0", "@eslint/markdown": "^7.1.0", "@fastify/express": "^4.0.2", @@ -35,7 +35,6 @@ "@types/on-finished": "^2.3.4", "babel-jest": "^30.1.2", "connect": "^3.7.0", - "cross-env": "^7.0.3", "cspell": "^8.3.2", "deepmerge": "^4.2.2", "del-cli": "^6.0.0", @@ -44,10 +43,10 @@ "eslint-config-webpack": "^4.5.0", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jest": "^29.0.1", - "eslint-plugin-jsdoc": "^56.1.2", + "eslint-plugin-jsdoc": "^61.5.0", "eslint-plugin-n": "^17.19.0", "eslint-plugin-prettier": "^5.4.1", - "eslint-plugin-unicorn": "^61.0.2", + "eslint-plugin-unicorn": "^62.0.0", "execa": "^5.1.1", "express": "^5.1.0", "express-4": "npm:express@^4", @@ -145,7 +144,6 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -1860,17 +1858,17 @@ "license": "MIT" }, "node_modules/@commitlint/cli": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.8.1.tgz", - "integrity": "sha512-LXUdNIkspyxrlV6VDHWBmCZRtkEVRpBKxi2Gtw3J54cGWhLCTouVD/Q6ZSaSvd2YaDObWK8mDjrz3TIKtaQMAA==", + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-20.2.0.tgz", + "integrity": "sha512-l37HkrPZ2DZy26rKiTUvdq/LZtlMcxz+PeLv9dzK9NzoFGuJdOQyYU7IEkEQj0pO++uYue89wzOpZ0hcTtoqUA==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/format": "^19.8.1", - "@commitlint/lint": "^19.8.1", - "@commitlint/load": "^19.8.1", - "@commitlint/read": "^19.8.1", - "@commitlint/types": "^19.8.1", + "@commitlint/format": "^20.2.0", + "@commitlint/lint": "^20.2.0", + "@commitlint/load": "^20.2.0", + "@commitlint/read": "^20.2.0", + "@commitlint/types": "^20.2.0", "tinyexec": "^1.0.0", "yargs": "^17.0.0" }, @@ -1882,13 +1880,13 @@ } }, "node_modules/@commitlint/config-conventional": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.8.1.tgz", - "integrity": "sha512-/AZHJL6F6B/G959CsMAzrPKKZjeEiAVifRyEwXxcT6qtqbPwGw+iQxmNS+Bu+i09OCtdNRW6pNpBvgPrtMr9EQ==", + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-20.2.0.tgz", + "integrity": "sha512-MsRac+yNIbTB4Q/psstKK4/ciVzACHicSwz+04Sxve+4DW+PiJeTjU0JnS4m/oOnulrXYN+yBPlKaBSGemRfgQ==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^19.8.1", + "@commitlint/types": "^20.2.0", "conventional-changelog-conventionalcommits": "^7.0.2" }, "engines": { @@ -1896,13 +1894,13 @@ } }, "node_modules/@commitlint/config-validator": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-19.8.1.tgz", - "integrity": "sha512-0jvJ4u+eqGPBIzzSdqKNX1rvdbSU1lPNYlfQQRIFnBgLy26BtC0cFnr7c/AyuzExMxWsMOte6MkTi9I3SQ3iGQ==", + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-20.2.0.tgz", + "integrity": "sha512-SQCBGsL9MFk8utWNSthdxd9iOD1pIVZSHxGBwYIGfd67RTjxqzFOSAYeQVXOu3IxRC3YrTOH37ThnTLjUlyF2w==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^19.8.1", + "@commitlint/types": "^20.2.0", "ajv": "^8.11.0" }, "engines": { @@ -1910,13 +1908,13 @@ } }, "node_modules/@commitlint/ensure": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-19.8.1.tgz", - "integrity": "sha512-mXDnlJdvDzSObafjYrOSvZBwkD01cqB4gbnnFuVyNpGUM5ijwU/r/6uqUmBXAAOKRfyEjpkGVZxaDsCVnHAgyw==", + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-20.2.0.tgz", + "integrity": "sha512-+8TgIGv89rOWyt3eC6lcR1H7hqChAKkpawytlq9P1i/HYugFRVqgoKJ8dhd89fMnlrQTLjA5E97/4sF09QwdoA==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^19.8.1", + "@commitlint/types": "^20.2.0", "lodash.camelcase": "^4.3.0", "lodash.kebabcase": "^4.1.1", "lodash.snakecase": "^4.1.1", @@ -1928,9 +1926,9 @@ } }, "node_modules/@commitlint/execute-rule": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-19.8.1.tgz", - "integrity": "sha512-YfJyIqIKWI64Mgvn/sE7FXvVMQER/Cd+s3hZke6cI1xgNT/f6ZAz5heND0QtffH+KbcqAwXDEE1/5niYayYaQA==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-20.0.0.tgz", + "integrity": "sha512-xyCoOShoPuPL44gVa+5EdZsBVao/pNzpQhkzq3RdtlFdKZtjWcLlUFQHSWBuhk5utKYykeJPSz2i8ABHQA+ZZw==", "dev": true, "license": "MIT", "engines": { @@ -1938,13 +1936,13 @@ } }, "node_modules/@commitlint/format": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-19.8.1.tgz", - "integrity": "sha512-kSJj34Rp10ItP+Eh9oCItiuN/HwGQMXBnIRk69jdOwEW9llW9FlyqcWYbHPSGofmjsqeoxa38UaEA5tsbm2JWw==", + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-20.2.0.tgz", + "integrity": "sha512-PhNoLNhxpfIBlW/i90uZ3yG3hwSSYx7n4d9Yc+2FAorAHS0D9btYRK4ZZXX+Gm3W5tDtu911ow/eWRfcRVgNWg==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^19.8.1", + "@commitlint/types": "^20.2.0", "chalk": "^5.3.0" }, "engines": { @@ -1952,13 +1950,13 @@ } }, "node_modules/@commitlint/is-ignored": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.8.1.tgz", - "integrity": "sha512-AceOhEhekBUQ5dzrVhDDsbMaY5LqtN8s1mqSnT2Kz1ERvVZkNihrs3Sfk1Je/rxRNbXYFzKZSHaPsEJJDJV8dg==", + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-20.2.0.tgz", + "integrity": "sha512-Lz0OGeZCo/QHUDLx5LmZc0EocwanneYJUM8z0bfWexArk62HKMLfLIodwXuKTO5y0s6ddXaTexrYHs7v96EOmw==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^19.8.1", + "@commitlint/types": "^20.2.0", "semver": "^7.6.0" }, "engines": { @@ -1979,32 +1977,32 @@ } }, "node_modules/@commitlint/lint": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.8.1.tgz", - "integrity": "sha512-52PFbsl+1EvMuokZXLRlOsdcLHf10isTPlWwoY1FQIidTsTvjKXVXYb7AvtpWkDzRO2ZsqIgPK7bI98x8LRUEw==", + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-20.2.0.tgz", + "integrity": "sha512-cQEEB+jlmyQbyiji/kmh8pUJSDeUmPiWq23kFV0EtW3eM+uAaMLMuoTMajbrtWYWQpPzOMDjYltQ8jxHeHgITg==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/is-ignored": "^19.8.1", - "@commitlint/parse": "^19.8.1", - "@commitlint/rules": "^19.8.1", - "@commitlint/types": "^19.8.1" + "@commitlint/is-ignored": "^20.2.0", + "@commitlint/parse": "^20.2.0", + "@commitlint/rules": "^20.2.0", + "@commitlint/types": "^20.2.0" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/load": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.8.1.tgz", - "integrity": "sha512-9V99EKG3u7z+FEoe4ikgq7YGRCSukAcvmKQuTtUyiYPnOd9a2/H9Ak1J9nJA1HChRQp9OA/sIKPugGS+FK/k1A==", + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-20.2.0.tgz", + "integrity": "sha512-iAK2GaBM8sPFTSwtagI67HrLKHIUxQc2BgpgNc/UMNme6LfmtHpIxQoN1TbP+X1iz58jq32HL1GbrFTCzcMi6g==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/config-validator": "^19.8.1", - "@commitlint/execute-rule": "^19.8.1", - "@commitlint/resolve-extends": "^19.8.1", - "@commitlint/types": "^19.8.1", + "@commitlint/config-validator": "^20.2.0", + "@commitlint/execute-rule": "^20.0.0", + "@commitlint/resolve-extends": "^20.2.0", + "@commitlint/types": "^20.2.0", "chalk": "^5.3.0", "cosmiconfig": "^9.0.0", "cosmiconfig-typescript-loader": "^6.1.0", @@ -2017,9 +2015,9 @@ } }, "node_modules/@commitlint/message": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-19.8.1.tgz", - "integrity": "sha512-+PMLQvjRXiU+Ae0Wc+p99EoGEutzSXFVwQfa3jRNUZLNW5odZAyseb92OSBTKCu+9gGZiJASt76Cj3dLTtcTdg==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-20.0.0.tgz", + "integrity": "sha512-gLX4YmKnZqSwkmSB9OckQUrI5VyXEYiv3J5JKZRxIp8jOQsWjZgHSG/OgEfMQBK9ibdclEdAyIPYggwXoFGXjQ==", "dev": true, "license": "MIT", "engines": { @@ -2027,13 +2025,13 @@ } }, "node_modules/@commitlint/parse": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-19.8.1.tgz", - "integrity": "sha512-mmAHYcMBmAgJDKWdkjIGq50X4yB0pSGpxyOODwYmoexxxiUCy5JJT99t1+PEMK7KtsCtzuWYIAXYAiKR+k+/Jw==", + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-20.2.0.tgz", + "integrity": "sha512-LXStagGU1ivh07X7sM+hnEr4BvzFYn1iBJ6DRg2QsIN8lBfSzyvkUcVCDwok9Ia4PWiEgei5HQjju6xfJ1YaSQ==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^19.8.1", + "@commitlint/types": "^20.2.0", "conventional-changelog-angular": "^7.0.0", "conventional-commits-parser": "^5.0.0" }, @@ -2042,14 +2040,14 @@ } }, "node_modules/@commitlint/read": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.8.1.tgz", - "integrity": "sha512-03Jbjb1MqluaVXKHKRuGhcKWtSgh3Jizqy2lJCRbRrnWpcM06MYm8th59Xcns8EqBYvo0Xqb+2DoZFlga97uXQ==", + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-20.2.0.tgz", + "integrity": "sha512-+SjF9mxm5JCbe+8grOpXCXMMRzAnE0WWijhhtasdrpJoAFJYd5UgRTj/oCq5W3HJTwbvTOsijEJ0SUGImECD7Q==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/top-level": "^19.8.1", - "@commitlint/types": "^19.8.1", + "@commitlint/top-level": "^20.0.0", + "@commitlint/types": "^20.2.0", "git-raw-commits": "^4.0.0", "minimist": "^1.2.8", "tinyexec": "^1.0.0" @@ -2059,14 +2057,14 @@ } }, "node_modules/@commitlint/resolve-extends": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-19.8.1.tgz", - "integrity": "sha512-GM0mAhFk49I+T/5UCYns5ayGStkTt4XFFrjjf0L4S26xoMTSkdCf9ZRO8en1kuopC4isDFuEm7ZOm/WRVeElVg==", + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-20.2.0.tgz", + "integrity": "sha512-KVoLDi9BEuqeq+G0wRABn4azLRiCC22/YHR2aCquwx6bzCHAIN8hMt3Nuf1VFxq/c8ai6s8qBxE8+ZD4HeFTlQ==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/config-validator": "^19.8.1", - "@commitlint/types": "^19.8.1", + "@commitlint/config-validator": "^20.2.0", + "@commitlint/types": "^20.2.0", "global-directory": "^4.0.1", "import-meta-resolve": "^4.0.0", "lodash.mergewith": "^4.6.2", @@ -2077,25 +2075,25 @@ } }, "node_modules/@commitlint/rules": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.8.1.tgz", - "integrity": "sha512-Hnlhd9DyvGiGwjfjfToMi1dsnw1EXKGJNLTcsuGORHz6SS9swRgkBsou33MQ2n51/boIDrbsg4tIBbRpEWK2kw==", + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-20.2.0.tgz", + "integrity": "sha512-27rHGpeAjnYl/A+qUUiYDa7Yn1WIjof/dFJjYW4gA1Ug+LUGa1P0AexzGZ5NBxTbAlmDgaxSZkLLxtLVqtg8PQ==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/ensure": "^19.8.1", - "@commitlint/message": "^19.8.1", - "@commitlint/to-lines": "^19.8.1", - "@commitlint/types": "^19.8.1" + "@commitlint/ensure": "^20.2.0", + "@commitlint/message": "^20.0.0", + "@commitlint/to-lines": "^20.0.0", + "@commitlint/types": "^20.2.0" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/to-lines": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-19.8.1.tgz", - "integrity": "sha512-98Mm5inzbWTKuZQr2aW4SReY6WUukdWXuZhrqf1QdKPZBCCsXuG87c+iP0bwtD6DBnmVVQjgp4whoHRVixyPBg==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-20.0.0.tgz", + "integrity": "sha512-2l9gmwiCRqZNWgV+pX1X7z4yP0b3ex/86UmUFgoRt672Ez6cAM2lOQeHFRUTuE6sPpi8XBCGnd8Kh3bMoyHwJw==", "dev": true, "license": "MIT", "engines": { @@ -2103,9 +2101,9 @@ } }, "node_modules/@commitlint/top-level": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-19.8.1.tgz", - "integrity": "sha512-Ph8IN1IOHPSDhURCSXBz44+CIu+60duFwRsg6HqaISFHQHbmBtxVw4ZrFNIYUzEP7WwrNPxa2/5qJ//NK1FGcw==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-20.0.0.tgz", + "integrity": "sha512-drXaPSP2EcopukrUXvUXmsQMu3Ey/FuJDc/5oiW4heoCfoE5BdLQyuc7veGeE3aoQaTVqZnh4D5WTWe2vefYKg==", "dev": true, "license": "MIT", "dependencies": { @@ -2116,9 +2114,9 @@ } }, "node_modules/@commitlint/types": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-19.8.1.tgz", - "integrity": "sha512-/yCrWGCoA1SVKOks25EGadP9Pnj0oAIHGpl2wH2M2Y46dPM2ueb8wyCVOD7O3WCTkaJ0IkKvzhl1JY7+uCT2Dw==", + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.2.0.tgz", + "integrity": "sha512-KTy0OqRDLR5y/zZMnizyx09z/rPlPC/zKhYgH8o/q6PuAjoQAKlRfY4zzv0M64yybQ//6//4H1n14pxaLZfUnA==", "dev": true, "license": "MIT", "dependencies": { @@ -2308,24 +2306,23 @@ "license": "MIT" }, "node_modules/@cspell/dict-csharp": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-4.0.7.tgz", - "integrity": "sha512-H16Hpu8O/1/lgijFt2lOk4/nnldFtQ4t8QHbyqphqZZVE5aS4J/zD/WvduqnLY21aKhZS6jo/xF5PX9jyqPKUA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-4.0.8.tgz", + "integrity": "sha512-qmk45pKFHSxckl5mSlbHxmDitSsGMlk/XzFgt7emeTJWLNSTUK//MbYAkBNRtfzB4uD7pAFiKgpKgtJrTMRnrQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-css": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.18.tgz", - "integrity": "sha512-EF77RqROHL+4LhMGW5NTeKqfUd/e4OOv6EDFQ/UQQiFyWuqkEKyEz0NDILxOFxWUEVdjT2GQ2cC7t12B6pESwg==", + "version": "4.0.19", + "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.19.tgz", + "integrity": "sha512-VYHtPnZt/Zd/ATbW3rtexWpBnHUohUrQOHff/2JBhsVgxOrksAxJnLAO43Q1ayLJBJUUwNVo+RU0sx0aaysZfg==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@cspell/dict-dart": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-dart/-/dict-dart-2.3.1.tgz", - "integrity": "sha512-xoiGnULEcWdodXI6EwVyqpZmpOoh8RA2Xk9BNdR7DLamV/QMvEYn8KJ7NlRiTSauJKPNkHHQ5EVHRM6sTS7jdg==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-dart/-/dict-dart-2.3.2.tgz", + "integrity": "sha512-sUiLW56t9gfZcu8iR/5EUg+KYyRD83Cjl3yjDEA2ApVuJvK1HhX+vn4e4k4YfjpUQMag8XO2AaRhARE09+/rqw==", "dev": true, "license": "MIT" }, @@ -2337,16 +2334,16 @@ "license": "MIT" }, "node_modules/@cspell/dict-django": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-django/-/dict-django-4.1.5.tgz", - "integrity": "sha512-AvTWu99doU3T8ifoMYOMLW2CXKvyKLukPh1auOPwFGHzueWYvBBN+OxF8wF7XwjTBMMeRleVdLh3aWCDEX/ZWg==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-django/-/dict-django-4.1.6.tgz", + "integrity": "sha512-SdbSFDGy9ulETqNz15oWv2+kpWLlk8DJYd573xhIkeRdcXOjskRuxjSZPKfW7O3NxN/KEf3gm3IevVOiNuFS+w==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-docker": { - "version": "1.1.16", - "resolved": "https://registry.npmjs.org/@cspell/dict-docker/-/dict-docker-1.1.16.tgz", - "integrity": "sha512-UiVQ5RmCg6j0qGIxrBnai3pIB+aYKL3zaJGvXk1O/ertTKJif9RZikKXCEgqhaCYMweM4fuLqWSVmw3hU164Iw==", + "version": "1.1.17", + "resolved": "https://registry.npmjs.org/@cspell/dict-docker/-/dict-docker-1.1.17.tgz", + "integrity": "sha512-OcnVTIpHIYYKhztNTyK8ShAnXTfnqs43hVH6p0py0wlcwRIXe5uj4f12n7zPf2CeBI7JAlPjEsV0Rlf4hbz/xQ==", "dev": true, "license": "MIT" }, @@ -2365,9 +2362,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-en_us": { - "version": "4.4.25", - "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.4.25.tgz", - "integrity": "sha512-cEdLVSjwfFHK+QmsGYzh8a4QUqXP6B5UPiFlbkIV+eolD5hWuhBaFtaXM6+/kD47/hV2UDYj4yUdD9xsMnlBBQ==", + "version": "4.4.26", + "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.4.26.tgz", + "integrity": "sha512-rpjM87n2e3PN3mx9SbzQOIniEWUKewZj0xFA796Pzeu3gJlYsHsSkZZC6Jxdea2992EfrzJZYwJb+mjxa3gWGg==", "dev": true, "license": "MIT" }, @@ -2456,20 +2453,18 @@ "license": "MIT" }, "node_modules/@cspell/dict-html": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.13.tgz", - "integrity": "sha512-vHzk2xfqQYPvoXtQtywa6ekIonPrUEwe2uftjry3UNRNl89TtzLJVSkiymKJ3WMb+W/DwKXKIb1tKzcIS8ccIg==", + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.14.tgz", + "integrity": "sha512-2bf7n+kS92g+cMKV0wr9o/Oq9n8JzU7CcrB96gIh2GHgnF+0xDOqO2W/1KeFAqOfqosoOVE48t+4dnEMkkoJ2Q==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@cspell/dict-html-symbol-entities": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.4.tgz", - "integrity": "sha512-afea+0rGPDeOV9gdO06UW183Qg6wRhWVkgCFwiO3bDupAoyXRuvupbb5nUyqSTsLXIKL8u8uXQlJ9pkz07oVXw==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.5.tgz", + "integrity": "sha512-429alTD4cE0FIwpMucvSN35Ld87HCyuM8mF731KU5Rm4Je2SG6hmVx7nkBsLyrmH3sQukTcr1GaiZsiEg8svPA==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@cspell/dict-java": { "version": "5.0.12", @@ -2528,22 +2523,22 @@ "license": "MIT" }, "node_modules/@cspell/dict-markdown": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@cspell/dict-markdown/-/dict-markdown-2.0.13.tgz", - "integrity": "sha512-rFeGikf+lVlywEp7giATUfi8myFeee6jqgbUgtdIdl/OBmRBPe5m7mKNk7yMItMZe8ICrwMxFwJy5OeTnrr6QA==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@cspell/dict-markdown/-/dict-markdown-2.0.14.tgz", + "integrity": "sha512-uLKPNJsUcumMQTsZZgAK9RgDLyQhUz/uvbQTEkvF/Q4XfC1i/BnA8XrOrd0+Vp6+tPOKyA+omI5LRWfMu5K/Lw==", "dev": true, "license": "MIT", "peerDependencies": { - "@cspell/dict-css": "^4.0.18", - "@cspell/dict-html": "^4.0.13", - "@cspell/dict-html-symbol-entities": "^4.0.4", + "@cspell/dict-css": "^4.0.19", + "@cspell/dict-html": "^4.0.14", + "@cspell/dict-html-symbol-entities": "^4.0.5", "@cspell/dict-typescript": "^3.2.3" } }, "node_modules/@cspell/dict-monkeyc": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@cspell/dict-monkeyc/-/dict-monkeyc-1.0.11.tgz", - "integrity": "sha512-7Q1Ncu0urALI6dPTrEbSTd//UK0qjRBeaxhnm8uY5fgYNFYAG+u4gtnTIo59S6Bw5P++4H3DiIDYoQdY/lha8w==", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@cspell/dict-monkeyc/-/dict-monkeyc-1.0.12.tgz", + "integrity": "sha512-MN7Vs11TdP5mbdNFQP5x2Ac8zOBm97ARg6zM5Sb53YQt/eMvXOMvrep7+/+8NJXs0jkp70bBzjqU4APcqBFNAw==", "dev": true, "license": "MIT" }, @@ -2555,9 +2550,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-npm": { - "version": "5.2.26", - "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.2.26.tgz", - "integrity": "sha512-jtjp/wE/4KRTWjtiosAakDwdvrU4lTF3djOaI0tPDPytxou6QTHSm5A7FzU+MzLqvNfdYHUsCcdvx1FE1T/6pg==", + "version": "5.2.27", + "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.2.27.tgz", + "integrity": "sha512-REy2vRQ9BJkjoW8cEr8ewoJAZ0DsTh+TimJ58KgIG1d81caanNgdvKLSgDkPd8OlGxPfLKHe7o2TJuk/l7VqhA==", "dev": true, "license": "MIT" }, @@ -2628,9 +2623,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-software-terms": { - "version": "5.1.16", - "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-5.1.16.tgz", - "integrity": "sha512-AJQ8KZyU9vi2XhEehh2ECkq/jyib0aHOjWYFeHx/2AIrn9LsYJwXI1aD7FFyQ3qixevp+ceAPJ0MVeWLL6LTTw==", + "version": "5.1.17", + "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-5.1.17.tgz", + "integrity": "sha512-Dxea28iyreQSxChRLWH9TFYXHMWKEt68H0DRD+urZpWtzzMRXxqh1xHX0itGw0OpgR/aJBETNWLrxebdu0Dl+Q==", "dev": true, "license": "MIT" }, @@ -2667,8 +2662,7 @@ "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.2.3.tgz", "integrity": "sha512-zXh1wYsNljQZfWWdSPYwQhpwiuW0KPW1dSd8idjMRvSD0aSvWWHoWlrMsmZeRl4qM4QCEAjua8+cjflm41cQBg==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@cspell/dict-vue": { "version": "3.0.5", @@ -2756,22 +2750,32 @@ } }, "node_modules/@es-joy/jsdoccomment": { - "version": "0.58.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.58.0.tgz", - "integrity": "sha512-smMc5pDht/UVsCD3hhw/a/e/p8m0RdRYiluXToVfd+d4yaQQh7nn9bACjkk6nXJvat7EWPAxuFkMEFfrxeGa3Q==", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.76.0.tgz", + "integrity": "sha512-g+RihtzFgGTx2WYCuTHbdOXJeAlGnROws0TeALx9ow/ZmOROOZkVg5wp/B44n0WJgI4SQFP1eWM2iRPlU2Y14w==", "dev": true, "license": "MIT", "dependencies": { "@types/estree": "^1.0.8", - "@typescript-eslint/types": "^8.43.0", + "@typescript-eslint/types": "^8.46.0", "comment-parser": "1.4.1", "esquery": "^1.6.0", - "jsdoc-type-pratt-parser": "~5.4.0" + "jsdoc-type-pratt-parser": "~6.10.0" }, "engines": { "node": ">=20.11.0" } }, + "node_modules/@es-joy/resolve.exports": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@es-joy/resolve.exports/-/resolve.exports-1.2.0.tgz", + "integrity": "sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.9.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", @@ -2942,7 +2946,6 @@ "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -2956,7 +2959,6 @@ "integrity": "sha512-R8uZemG9dKTbru/DQRPblbJyXpObwKzo8rv1KYGGuPUPtjM4LXBYM9q5CIZAComzZupws3tWbDwam5AFpPLyJQ==", "dev": true, "license": "MIT", - "peer": true, "workspaces": [ "examples/*" ], @@ -3307,9 +3309,9 @@ } }, "node_modules/@fastify/express/node_modules/send": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.1.tgz", - "integrity": "sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", "dev": true, "license": "MIT", "dependencies": { @@ -3319,123 +3321,34 @@ "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "range-parser": "~1.2.1", - "statuses": "2.0.1" + "statuses": "~2.0.2" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/@fastify/express/node_modules/send/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@fastify/express/node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/@fastify/express/node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", "dev": true, "license": "MIT", "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.19.0" + "send": "~0.19.1" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/@fastify/express/node_modules/serve-static/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@fastify/express/node_modules/serve-static/node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/@fastify/express/node_modules/serve-static/node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@fastify/express/node_modules/serve-static/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/@fastify/express/node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -5174,6 +5087,19 @@ "dev": true, "license": "MIT" }, + "node_modules/@sindresorhus/base62": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/base62/-/base62-1.0.0.tgz", + "integrity": "sha512-TeheYy0ILzBEI/CO55CP6zJCSdSWeRtGnHy8U8dWSUH4I68iqTsy7HkMktR4xakThc9jotkPQUXT4ITdbV7cHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@sindresorhus/merge-streams": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", @@ -5213,7 +5139,6 @@ "integrity": "sha512-JCs+MqoXfXrRPGbGmho/zGS/jMcn3ieKl/A8YImqib76C8kjgZwq5uUFzc30lJkMvcchuRn6/v8IApLxli3Jyw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.9.0", "@typescript-eslint/types": "^8.47.0", @@ -5332,7 +5257,6 @@ "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -5465,7 +5389,6 @@ "integrity": "sha512-1N9SBnWYOJTrNZCdh/yJE+t910Y128BoyY+zBLWhL3r0TYzlTmFdXrPwHL9DyFZmlEXNQQolTZh3KHV31QDhyA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~6.21.0" } @@ -5554,14 +5477,14 @@ "license": "MIT" }, "node_modules/@typescript-eslint/project-service": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.49.0.tgz", - "integrity": "sha512-/wJN0/DKkmRUMXjZUXYZpD1NEQzQAAn9QWfGwo+Ai8gnzqH7tvqS7oNVdTjKqOcPyVIdZdyCMoqN66Ia789e7g==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.50.0.tgz", + "integrity": "sha512-Cg/nQcL1BcoTijEWyx4mkVC56r8dj44bFDvBdygifuS20f3OZCHmFbjF34DPSi07kwlFvqfv/xOLnJ5DquxSGQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.49.0", - "@typescript-eslint/types": "^8.49.0", + "@typescript-eslint/tsconfig-utils": "^8.50.0", + "@typescript-eslint/types": "^8.50.0", "debug": "^4.3.4" }, "engines": { @@ -5576,14 +5499,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.49.0.tgz", - "integrity": "sha512-npgS3zi+/30KSOkXNs0LQXtsg9ekZ8OISAOLGWA/ZOEn0ZH74Ginfl7foziV8DT+D98WfQ5Kopwqb/PZOaIJGg==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.50.0.tgz", + "integrity": "sha512-xCwfuCZjhIqy7+HKxBLrDVT5q/iq7XBVBXLn57RTIIpelLtEIZHXAF/Upa3+gaCpeV1NNS5Z9A+ID6jn50VD4A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.49.0", - "@typescript-eslint/visitor-keys": "8.49.0" + "@typescript-eslint/types": "8.50.0", + "@typescript-eslint/visitor-keys": "8.50.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5594,9 +5517,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.49.0.tgz", - "integrity": "sha512-8prixNi1/6nawsRYxet4YOhnbW+W9FK/bQPxsGB1D3ZrDzbJ5FXw5XmzxZv82X3B+ZccuSxo/X8q9nQ+mFecWA==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.50.0.tgz", + "integrity": "sha512-vxd3G/ybKTSlm31MOA96gqvrRGv9RJ7LGtZCn2Vrc5htA0zCDvcMqUkifcjrWNNKXHUU3WCkYOzzVSFBd0wa2w==", "dev": true, "license": "MIT", "engines": { @@ -5611,9 +5534,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.49.0.tgz", - "integrity": "sha512-e9k/fneezorUo6WShlQpMxXh8/8wfyc+biu6tnAqA81oWrEic0k21RHzP9uqqpyBBeBKu4T+Bsjy9/b8u7obXQ==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.50.0.tgz", + "integrity": "sha512-iX1mgmGrXdANhhITbpp2QQM2fGehBse9LbTf0sidWK6yg/NE+uhV5dfU1g6EYPlcReYmkE9QLPq/2irKAmtS9w==", "dev": true, "license": "MIT", "engines": { @@ -5625,16 +5548,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.49.0.tgz", - "integrity": "sha512-jrLdRuAbPfPIdYNppHJ/D0wN+wwNfJ32YTAm10eJVsFmrVpXQnDWBn8niCSMlWjvml8jsce5E/O+86IQtTbJWA==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.50.0.tgz", + "integrity": "sha512-W7SVAGBR/IX7zm1t70Yujpbk+zdPq/u4soeFSknWFdXIFuWsBGBOUu/Tn/I6KHSKvSh91OiMuaSnYp3mtPt5IQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.49.0", - "@typescript-eslint/tsconfig-utils": "8.49.0", - "@typescript-eslint/types": "8.49.0", - "@typescript-eslint/visitor-keys": "8.49.0", + "@typescript-eslint/project-service": "8.50.0", + "@typescript-eslint/tsconfig-utils": "8.50.0", + "@typescript-eslint/types": "8.50.0", + "@typescript-eslint/visitor-keys": "8.50.0", "debug": "^4.3.4", "minimatch": "^9.0.4", "semver": "^7.6.0", @@ -5692,16 +5615,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.49.0.tgz", - "integrity": "sha512-N3W7rJw7Rw+z1tRsHZbK395TWSYvufBXumYtEGzypgMUthlg0/hmCImeA8hgO2d2G4pd7ftpxxul2J8OdtdaFA==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.50.0.tgz", + "integrity": "sha512-87KgUXET09CRjGCi2Ejxy3PULXna63/bMYv72tCAlDJC3Yqwln0HiFJ3VJMst2+mEtNtZu5oFvX4qJGjKsnAgg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.49.0", - "@typescript-eslint/types": "8.49.0", - "@typescript-eslint/typescript-estree": "8.49.0" + "@typescript-eslint/scope-manager": "8.50.0", + "@typescript-eslint/types": "8.50.0", + "@typescript-eslint/typescript-estree": "8.50.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5716,13 +5639,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.49.0.tgz", - "integrity": "sha512-LlKaciDe3GmZFphXIc79THF/YYBugZ7FS1pO581E/edlVVNbZKDy93evqmrfQ9/Y4uN0vVhX4iuchq26mK/iiA==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.50.0.tgz", + "integrity": "sha512-Xzmnb58+Db78gT/CCj/PVCvK+zxbnsw6F+O1oheYszJbBSdEjVhQi3C/Xttzxgi/GLmpvOggRs1RFpiJ8+c34Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.49.0", + "@typescript-eslint/types": "8.50.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -6211,7 +6134,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -6254,7 +6176,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -6811,9 +6732,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.9.7", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.7.tgz", - "integrity": "sha512-k9xFKplee6KIio3IDbwj+uaCLpqzOwakOgmqzPezM0sFJlFKcg30vk2wOiAJtkTSfx0SSQDSe8q+mWA/fSH5Zg==", + "version": "2.9.8", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.8.tgz", + "integrity": "sha512-Y1fOuNDowLfgKOypdc9SPABfoWXuZHBOyCS4cD52IeZBhr4Md6CLLs6atcxVrzRmQ06E7hSlm5bHHApPKR/byA==", "dev": true, "license": "Apache-2.0", "bin": { @@ -6913,7 +6834,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -9021,25 +8941,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.1" - }, - "bin": { - "cross-env": "src/bin/cross-env.js", - "cross-env-shell": "src/bin/cross-env-shell.js" - }, - "engines": { - "node": ">=10.14", - "npm": ">=6", - "yarn": ">=1" - } - }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -9419,9 +9320,9 @@ } }, "node_modules/dedent": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.0.tgz", - "integrity": "sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.1.tgz", + "integrity": "sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==", "dev": true, "license": "MIT", "peerDependencies": { @@ -9976,9 +9877,9 @@ } }, "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", "dev": true, "license": "MIT" }, @@ -10078,7 +9979,6 @@ "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -10168,7 +10068,6 @@ "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", - "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -10180,16 +10079,16 @@ } }, "node_modules/eslint-config-webpack": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/eslint-config-webpack/-/eslint-config-webpack-4.6.3.tgz", - "integrity": "sha512-nKUWDmJ1SYwibd/zI5ntk6alKQ26e5ly0d5EQpDDRWtBJuBqvCyJtvphBtS0m58EsLLkQgCrSaWJVU4yGjSneg==", + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/eslint-config-webpack/-/eslint-config-webpack-4.7.3.tgz", + "integrity": "sha512-SxM6fm1IG/YP9Jays5XNYvrKAYAn8B+0D2J8kNyBgEAFvZ28uENxcTFKAJ45hp0Uuv/lwtXMZIK2BvDSGk+H3A==", "dev": true, "license": "MIT", "dependencies": { - "detect-indent": "^7.0.1", - "jsonc-eslint-parser": "^2.4.0", - "semver": "^7.7.2", - "sort-package-json": "^3.4.0" + "detect-indent": "^7.0.2", + "jsonc-eslint-parser": "^2.4.2", + "semver": "^7.7.3", + "sort-package-json": "^3.6.0" }, "engines": { "node": ">= 20.9.0" @@ -10207,10 +10106,10 @@ "eslint-plugin-prettier": ">= 5.5.3", "eslint-plugin-react": ">= 7.37.5", "eslint-plugin-unicorn": ">= 60.0.0", - "globals": ">= 16.2.0", + "globals": ">= 16.5.0", "prettier": ">= 3.5.3", "typescript": ">= 5.0.0", - "typescript-eslint": ">= 8.34.0" + "typescript-eslint": ">= 8.50.0" }, "peerDependenciesMeta": { "@eslint/markdown": { @@ -10327,7 +10226,6 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -10372,7 +10270,6 @@ "integrity": "sha512-DAi9H8xN/TUuNOt+xDP1RqpCJLsSxBb5u1zXSpCyp0VAWGL8MBAg5t7/Dk+76iX7d1LhWu4DDH77IQNUolLDyg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/utils": "^8.0.0" }, @@ -10394,24 +10291,26 @@ } }, "node_modules/eslint-plugin-jsdoc": { - "version": "56.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-56.1.2.tgz", - "integrity": "sha512-g30LmgNkpKsKNge4NKtoARCvGvGYHeCQjEWCs5xlNwHxdwVvd0rZaovHmD/D0of0H1bqcyFYv6WXDVAezndstw==", + "version": "61.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-61.5.0.tgz", + "integrity": "sha512-PR81eOGq4S7diVnV9xzFSBE4CDENRQGP0Lckkek8AdHtbj+6Bm0cItwlFnxsLFriJHspiE3mpu8U20eODyToIg==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { - "@es-joy/jsdoccomment": "~0.58.0", + "@es-joy/jsdoccomment": "~0.76.0", + "@es-joy/resolve.exports": "1.2.0", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", - "debug": "^4.4.1", + "debug": "^4.4.3", "escape-string-regexp": "^4.0.0", "espree": "^10.4.0", "esquery": "^1.6.0", - "object-deep-merge": "^1.0.5", + "html-entities": "^2.6.0", + "object-deep-merge": "^2.0.0", "parse-imports-exports": "^0.2.4", - "semver": "^7.7.2", - "spdx-expression-parse": "^4.0.0" + "semver": "^7.7.3", + "spdx-expression-parse": "^4.0.0", + "to-valid-identifier": "^1.0.0" }, "engines": { "node": ">=20.11.0" @@ -10439,7 +10338,6 @@ "integrity": "sha512-68PealUpYoHOBh332JLLD9Sj7OQUDkFpmcfqt8R9sySfFSeuGJjMTJQvCRRB96zO3A/PELRLkPrzsHmzEFQQ5A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.5.0", "enhanced-resolve": "^5.17.1", @@ -10493,7 +10391,6 @@ "integrity": "sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "prettier-linter-helpers": "^1.0.0", "synckit": "^0.11.7" @@ -10520,31 +10417,30 @@ } }, "node_modules/eslint-plugin-unicorn": { - "version": "61.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-61.0.2.tgz", - "integrity": "sha512-zLihukvneYT7f74GNbVJXfWIiNQmkc/a9vYBTE4qPkQZswolWNdu+Wsp9sIXno1JOzdn6OUwLPd19ekXVkahRA==", + "version": "62.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-62.0.0.tgz", + "integrity": "sha512-HIlIkGLkvf29YEiS/ImuDZQbP12gWyx5i3C6XrRxMvVdqMroCI9qoVYCoIl17ChN+U89pn9sVwLxhIWj5nEc7g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "@eslint-community/eslint-utils": "^4.7.0", - "@eslint/plugin-kit": "^0.3.3", + "@babel/helper-validator-identifier": "^7.28.5", + "@eslint-community/eslint-utils": "^4.9.0", + "@eslint/plugin-kit": "^0.4.0", "change-case": "^5.4.4", - "ci-info": "^4.3.0", + "ci-info": "^4.3.1", "clean-regexp": "^1.0.0", - "core-js-compat": "^3.44.0", + "core-js-compat": "^3.46.0", "esquery": "^1.6.0", "find-up-simple": "^1.0.1", - "globals": "^16.3.0", + "globals": "^16.4.0", "indent-string": "^5.0.0", "is-builtin-module": "^5.0.0", "jsesc": "^3.1.0", "pluralize": "^8.0.0", "regexp-tree": "^0.1.27", - "regjsparser": "^0.12.0", - "semver": "^7.7.2", - "strip-indent": "^4.0.0" + "regjsparser": "^0.13.0", + "semver": "^7.7.3", + "strip-indent": "^4.1.1" }, "engines": { "node": "^20.10.0 || >=21.0.0" @@ -10553,34 +10449,7 @@ "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" }, "peerDependencies": { - "eslint": ">=9.29.0" - } - }, - "node_modules/eslint-plugin-unicorn/node_modules/@eslint/core": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", - "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/eslint-plugin-unicorn/node_modules/@eslint/plugin-kit": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", - "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.15.2", - "levn": "^0.4.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "eslint": ">=9.38.0" } }, "node_modules/eslint-plugin-unicorn/node_modules/semver": { @@ -11252,9 +11121,9 @@ } }, "node_modules/express-4/node_modules/send": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.1.tgz", - "integrity": "sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", "dev": true, "license": "MIT", "dependencies": { @@ -11264,123 +11133,34 @@ "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "range-parser": "~1.2.1", - "statuses": "2.0.1" + "statuses": "~2.0.2" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/express-4/node_modules/send/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express-4/node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/express-4/node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", "dev": true, "license": "MIT", "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.19.0" + "send": "~0.19.1" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/express-4/node_modules/serve-static/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express-4/node_modules/serve-static/node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/express-4/node_modules/serve-static/node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express-4/node_modules/serve-static/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/express-4/node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -11696,7 +11476,6 @@ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -12882,7 +12661,6 @@ "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -13123,7 +12901,6 @@ "integrity": "sha512-KsFcH0xxHes0J4zaQgWbYwmz3UPOOskdqZmItstUG93+Wk1ePBLkLGwbP9zlmh1BFUiL8Qp+Xfu9P7feJWpGNg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=16.9.0" } @@ -13135,6 +12912,23 @@ "dev": true, "license": "ISC" }, + "node_modules/html-entities": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", + "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -14107,7 +13901,6 @@ "integrity": "sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jest/core": "30.2.0", "@jest/types": "30.2.0", @@ -15613,13 +15406,13 @@ } }, "node_modules/jsdoc-type-pratt-parser": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-5.4.0.tgz", - "integrity": "sha512-F9GQ+F1ZU6qvSrZV8fNFpjDNf614YzR2eF6S0+XbDjAcUI28FSoXnYZFjQmb1kFx3rrJb5PnxUH3/Yti6fcM+g==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-6.10.0.tgz", + "integrity": "sha512-+LexoTRyYui5iOhJGn13N9ZazL23nAHGkXsa1p/C8yeq79WRfLBag6ZZ0FQG2aRoc9yfo59JT9EYCQonOkHKkQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=12.0.0" + "node": ">=20.0.0" } }, "node_modules/jsesc": { @@ -17971,27 +17764,11 @@ } }, "node_modules/object-deep-merge": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/object-deep-merge/-/object-deep-merge-1.0.5.tgz", - "integrity": "sha512-3DioFgOzetbxbeUq8pB2NunXo8V0n4EvqsWM/cJoI6IA9zghd7cl/2pBOuWRf4dlvA+fcg5ugFMZaN2/RuoaGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "4.2.0" - } - }, - "node_modules/object-deep-merge/node_modules/type-fest": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.2.0.tgz", - "integrity": "sha512-5zknd7Dss75pMSED270A1RQS3KloqRJA9XbXLe0eCxyw7xXFb3rd+9B0UQ/0E+LQT6lnrLviEolYORlRWamn4w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/object-deep-merge/-/object-deep-merge-2.0.0.tgz", + "integrity": "sha512-3DC3UMpeffLTHiuXSy/UG4NOIYTLlY9u3V82+djSCLYClWobZiS4ivYzpIUWrRY/nfsJ8cWsKyG3QfyLePmhvg==", "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, "node_modules/object-inspect": { "version": "1.13.4", @@ -18626,7 +18403,6 @@ "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", "dev": true, "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -19168,19 +18944,6 @@ "node": ">=4" } }, - "node_modules/regexpu-core/node_modules/regjsparser": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", - "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~3.1.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, "node_modules/regjsgen": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", @@ -19189,31 +18952,18 @@ "license": "MIT" }, "node_modules/regjsparser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", + "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "jsesc": "~3.0.2" + "jsesc": "~3.1.0" }, "bin": { "regjsparser": "bin/parser" } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -19233,6 +18983,19 @@ "node": ">=0.10.0" } }, + "node_modules/reserved-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/reserved-identifiers/-/reserved-identifiers-1.2.0.tgz", + "integrity": "sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/resolve": { "version": "1.22.11", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", @@ -19590,26 +19353,30 @@ } }, "node_modules/send": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", - "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", "dev": true, "license": "MIT", "dependencies": { - "debug": "^4.3.5", + "debug": "^4.4.3", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "mime-types": "^3.0.1", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", - "statuses": "^2.0.1" + "statuses": "^2.0.2" }, "engines": { "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/serialize-javascript": { @@ -19623,9 +19390,9 @@ } }, "node_modules/serve-static": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", "dev": true, "license": "MIT", "dependencies": { @@ -19636,6 +19403,10 @@ }, "engines": { "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/set-cookie-parser": { @@ -21009,6 +20780,23 @@ "node": ">=8.0" } }, + "node_modules/to-valid-identifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-valid-identifier/-/to-valid-identifier-1.0.0.tgz", + "integrity": "sha512-41wJyvKep3yT2tyPqX/4blcfybknGB4D+oETKLs7Q76UiPqRpUJK3hr1nxelyYO0PHKVzJwlu0aCeEAsGI6rpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/base62": "^1.0.0", + "reserved-identifiers": "^1.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/toad-cache": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz", @@ -21131,8 +20919,7 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD", - "peer": true + "license": "0BSD" }, "node_modules/tsscmp": { "version": "1.0.6", @@ -21286,7 +21073,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -21497,9 +21283,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz", - "integrity": "sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -21640,12 +21426,11 @@ } }, "node_modules/webpack": { - "version": "5.103.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.103.0.tgz", - "integrity": "sha512-HU1JOuV1OavsZ+mfigY0j8d1TgQgbZ6M+J75zDkpEAwYeXjWSqrGJtgnPblJjd/mAyTNQ7ygw0MiKOn6etz8yw==", + "version": "5.104.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.0.tgz", + "integrity": "sha512-5DeICTX8BVgNp6afSPYXAFjskIgWGlygQH58bcozPOXgo2r/6xx39Y1+cULZ3gTxUYQP88jmwLj2anu4Xaq84g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -21655,10 +21440,10 @@ "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.15.0", "acorn-import-phases": "^1.0.3", - "browserslist": "^4.26.3", + "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.3", - "es-module-lexer": "^1.2.1", + "enhanced-resolve": "^5.17.4", + "es-module-lexer": "^2.0.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", @@ -21669,7 +21454,7 @@ "neo-async": "^2.6.2", "schema-utils": "^4.3.3", "tapable": "^2.3.0", - "terser-webpack-plugin": "^5.3.11", + "terser-webpack-plugin": "^5.3.16", "watchpack": "^2.4.4", "webpack-sources": "^3.3.3" }, diff --git a/package.json b/package.json index 6a762c3fd..9444626ca 100644 --- a/package.json +++ b/package.json @@ -36,9 +36,9 @@ "clean": "del-cli dist types", "prebuild": "npm run clean", "build:types": "tsc --declaration --emitDeclarationOnly --outDir types && prettier \"types/**/*.ts\" --write", - "build:code": "cross-env NODE_ENV=production babel src -d dist --copy-files", + "build:code": "babel src -d dist --copy-files", "build": "npm-run-all -p \"build:**\"", - "test:only": "cross-env NODE_ENV=test jest", + "test:only": "jest", "test:watch": "npm run test:only -- --watch", "test:coverage": "npm run test:only -- --collectCoverageFrom=\"src/**/*.js\" --coverage", "pretest": "npm run lint", @@ -60,8 +60,8 @@ "@babel/preset-env": "^7.16.7", "@eslint/js": "^9.28.0", "@eslint/markdown": "^7.1.0", - "@commitlint/cli": "^19.0.3", - "@commitlint/config-conventional": "^19.0.3", + "@commitlint/cli": "^20.2.0", + "@commitlint/config-conventional": "^20.2.0", "@fastify/express": "^4.0.2", "@hapi/hapi": "^21.3.7", "@hono/node-server": "^1.12.0", @@ -73,7 +73,6 @@ "@types/on-finished": "^2.3.4", "babel-jest": "^30.1.2", "connect": "^3.7.0", - "cross-env": "^7.0.3", "cspell": "^8.3.2", "deepmerge": "^4.2.2", "del-cli": "^6.0.0", @@ -83,10 +82,10 @@ "eslint-config-prettier": "^10.1.5", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jest": "^29.0.1", - "eslint-plugin-jsdoc": "^56.1.2", + "eslint-plugin-jsdoc": "^61.5.0", "eslint-plugin-n": "^17.19.0", "eslint-plugin-prettier": "^5.4.1", - "eslint-plugin-unicorn": "^61.0.2", + "eslint-plugin-unicorn": "^62.0.0", "execa": "^5.1.1", "express-4": "npm:express@^4", "express": "^5.1.0", diff --git a/src/index.js b/src/index.js index 7cbdeddee..e6a57867e 100644 --- a/src/index.js +++ b/src/index.js @@ -27,10 +27,14 @@ const noop = () => {}; /** @typedef {import("http").IncomingMessage} IncomingMessage */ /** @typedef {import("http").ServerResponse & ExtendedServerResponse} ServerResponse */ -// eslint-disable-next-line jsdoc/no-restricted-syntax +// eslint-disable-next-line jsdoc/reject-any-type +/** @typedef {any} EXPECTED_ANY */ +// eslint-disable-next-line jsdoc/reject-function-type +/** @typedef {Function} EXPECTED_FUNCTION */ + /** * @callback NextFunction - * @param {any=} err error + * @param {EXPECTED_ANY=} err error * @returns {void} */ @@ -386,21 +390,19 @@ function hapiWrapper() { wdm.hapiWrapper = hapiWrapper; -// eslint-disable-next-line jsdoc/no-restricted-syntax /** * @template {IncomingMessage} [RequestInternal=IncomingMessage] * @template {ServerResponse} [ResponseInternal=ServerResponse] * @param {Compiler | MultiCompiler} compiler compiler * @param {Options=} options options - * @returns {(ctx: any, next: Function) => Promise | void} kow wrapper + * @returns {(ctx: EXPECTED_ANY, next: EXPECTED_FUNCTION) => Promise | void} kow wrapper */ function koaWrapper(compiler, options) { const devMiddleware = wdm(compiler, options); - // eslint-disable-next-line jsdoc/no-restricted-syntax /** * @param {{req: RequestInternal, res: ResponseInternal & import("./utils/compatibleAPI").ExpectedServerResponse, status: number, body: string | Buffer | import("fs").ReadStream | {message: string}, state: object}} ctx context - * @param {Function} next next + * @param {EXPECTED_FUNCTION} next next * @returns {Promise} */ async function webpackDevMiddleware(ctx, next) { @@ -501,21 +503,19 @@ function koaWrapper(compiler, options) { wdm.koaWrapper = koaWrapper; -// eslint-disable-next-line jsdoc/no-restricted-syntax /** * @template {IncomingMessage} [RequestInternal=IncomingMessage] * @template {ServerResponse} [ResponseInternal=ServerResponse] * @param {Compiler | MultiCompiler} compiler compiler * @param {Options=} options options - * @returns {(ctx: any, next: Function) => Promise | void} hono wrapper + * @returns {(ctx: EXPECTED_ANY, next: EXPECTED_FUNCTION) => Promise | void} hono wrapper */ function honoWrapper(compiler, options) { const devMiddleware = wdm(compiler, options); - // eslint-disable-next-line jsdoc/no-restricted-syntax /** - * @param {{ env: any, body: any, json: any, status: any, set: any, req: RequestInternal & import("./utils/compatibleAPI").ExpectedIncomingMessage & { header: (name: string) => string }, res: ResponseInternal & import("./utils/compatibleAPI").ExpectedServerResponse & { headers: any, status: any } }} context context - * @param {Function} next next function + * @param {{ env: EXPECTED_ANY, body: EXPECTED_ANY, json: EXPECTED_ANY, status: EXPECTED_ANY, set: EXPECTED_ANY, req: RequestInternal & import("./utils/compatibleAPI").ExpectedIncomingMessage & { header: (name: string) => string }, res: ResponseInternal & import("./utils/compatibleAPI").ExpectedServerResponse & { headers: EXPECTED_ANY, status: EXPECTED_ANY } }} context context + * @param {EXPECTED_FUNCTION} next next function * @returns {Promise} */ async function webpackDevMiddleware(context, next) { @@ -559,11 +559,10 @@ function honoWrapper(compiler, options) { */ res.getHeader = (name) => context.res.headers.get(name); - // eslint-disable-next-line jsdoc/no-restricted-syntax /** * @param {string} name header name * @param {string | number | Readonly} value value - * @returns {ResponseInternal & import("./utils/compatibleAPI").ExpectedServerResponse & { headers: any, status: any }} response + * @returns {ResponseInternal & import("./utils/compatibleAPI").ExpectedServerResponse & { headers: EXPECTED_ANY, status: EXPECTED_ANY }} response */ res.setHeader = (name, value) => { context.res.headers.append(name, value); diff --git a/src/utils/compatibleAPI.js b/src/utils/compatibleAPI.js index 4cd1da15c..a9450d548 100644 --- a/src/utils/compatibleAPI.js +++ b/src/utils/compatibleAPI.js @@ -1,6 +1,7 @@ -/** @typedef {import("../index.js").IncomingMessage} IncomingMessage */ -/** @typedef {import("../index.js").ServerResponse} ServerResponse */ +/** @typedef {import("../index").IncomingMessage} IncomingMessage */ +/** @typedef {import("../index").ServerResponse} ServerResponse */ /** @typedef {import("../index").OutputFileSystem} OutputFileSystem */ +/** @typedef {import("../index").EXPECTED_ANY} EXPECTED_ANY */ /** * @typedef {object} ExpectedIncomingMessage @@ -9,7 +10,6 @@ * @property {(() => string | undefined)=} getURL get URL extra method */ -// eslint-disable-next-line jsdoc/no-restricted-syntax /** * @typedef {object} ExpectedServerResponse * @property {((status: number) => void)=} setStatusCode set status code @@ -21,9 +21,9 @@ * @property {((data?: string | Buffer) => void)=} finish finish * @property {(() => string[])=} getResponseHeaders get response header * @property {(() => boolean)=} getHeadersSent get headers sent - * @property {((data: any) => void)=} stream stream - * @property {(() => any)=} getOutgoing get outgoing - * @property {((name: string, value: any) => void)=} setState set state + * @property {((data: EXPECTED_ANY) => void)=} stream stream + * @property {(() => EXPECTED_ANY)=} getOutgoing get outgoing + * @property {((name: string, value: EXPECTED_ANY) => void)=} setState set state */ /** @@ -280,12 +280,11 @@ function initState(res) { res.locals ||= {}; } -// eslint-disable-next-line jsdoc/no-restricted-syntax /** * @template {ServerResponse & ExpectedServerResponse} Response * @param {Response} res res * @param {string} name name - * @param {any} value state + * @param {EXPECTED_ANY} value state * @returns {void} */ function setState(res, name, value) { @@ -295,8 +294,7 @@ function setState(res, name, value) { return; } - // eslint-disable-next-line jsdoc/no-restricted-syntax - /** @type {any} */ + /** @type {Record} */ (res.locals)[name] = value; } diff --git a/src/utils/memorize.js b/src/utils/memorize.js index 8a1ba674b..2a0ae25a2 100644 --- a/src/utils/memorize.js +++ b/src/utils/memorize.js @@ -1,9 +1,10 @@ +/** @typedef {import("../index").EXPECTED_ANY} EXPECTED_ANY */ + const cacheStore = new WeakMap(); -// eslint-disable-next-line jsdoc/no-restricted-syntax /** * @template T - * @typedef {(...args: any) => T} FunctionReturning + * @typedef {(...args: EXPECTED_ANY) => T} FunctionReturning */ /** @@ -14,10 +15,9 @@ const cacheStore = new WeakMap(); * @returns {FunctionReturning} new function */ function memorize(fn, { cache = new Map() } = {}, callback = undefined) { - // eslint-disable-next-line jsdoc/no-restricted-syntax /** - * @param {any} arguments_ args - * @returns {any} result + * @param {EXPECTED_ANY[]} arguments_ args + * @returns {EXPECTED_ANY} result */ const memoized = (...arguments_) => { const [key] = arguments_; diff --git a/test/utils/ready.test.js b/test/utils/ready.test.js index 6e4bbd956..05487372e 100644 --- a/test/utils/ready.test.js +++ b/test/utils/ready.test.js @@ -9,7 +9,7 @@ describe("ready", () => { }; ready(context, cb); - expect(cb.mock.calls).toHaveLength(1); + expect(cb).toHaveBeenCalledTimes(1); expect(cb.mock.calls[0]).toEqual(["stats"]); }); @@ -29,7 +29,7 @@ describe("ready", () => { ready(context, cb, req); expect(cb).not.toHaveBeenCalled(); - expect(context.logger.info.mock.calls).toHaveLength(1); + expect(context.logger.info).toHaveBeenCalledTimes(1); expect(context.logger.info.mock.calls[0]).toEqual([ "wait until bundle finished: url", ]); @@ -49,7 +49,7 @@ describe("ready", () => { ready(context, cb); expect(cb).not.toHaveBeenCalled(); - expect(context.logger.info.mock.calls).toHaveLength(1); + expect(context.logger.info).toHaveBeenCalledTimes(1); // mockConstructor is the name of the jest.fn() function expect(context.logger.info.mock.calls[0]).toEqual([ "wait until bundle finished: mockConstructor", diff --git a/test/utils/setupHooks.test.js b/test/utils/setupHooks.test.js index 65c6bd0fa..8aaaa263f 100644 --- a/test/utils/setupHooks.test.js +++ b/test/utils/setupHooks.test.js @@ -59,9 +59,9 @@ describe("setupHooks", () => { it("taps watchRun, invalid, and done", () => { setupHooks(context); - expect(watchRunHook.mock.calls).toHaveLength(1); - expect(invalidHook.mock.calls).toHaveLength(1); - expect(doneHook.mock.calls).toHaveLength(1); + expect(watchRunHook).toHaveBeenCalledTimes(1); + expect(invalidHook).toHaveBeenCalledTimes(1); + expect(doneHook).toHaveBeenCalledTimes(1); }); it("watchRun hook invalidates", () => { @@ -70,7 +70,7 @@ describe("setupHooks", () => { watchRunHook.mock.calls[0][1](); expect(context.state).toBe(false); expect(context.stats).toBeUndefined(); - expect(loggerInfo.mock.calls).toHaveLength(0); + expect(loggerInfo).not.toHaveBeenCalled(); }); it("invalid hook invalidates", () => { @@ -79,7 +79,7 @@ describe("setupHooks", () => { invalidHook.mock.calls[0][1](); expect(context.state).toBe(false); expect(context.stats).toBeUndefined(); - expect(loggerInfo.mock.calls).toHaveLength(0); + expect(loggerInfo).not.toHaveBeenCalled(); }); it("logs if state is set on invalidate", () => { @@ -101,12 +101,12 @@ describe("setupHooks", () => { }); expect(context.stats).toBeTruthy(); expect(context.state).toBeTruthy(); - expect(nextTick.mock.calls).toHaveLength(1); + expect(nextTick).toHaveBeenCalledTimes(1); nextTick.mock.calls[0][0](); expect(loggerInfo.mock.calls).toMatchSnapshot(); - expect(loggerError.mock.calls).toHaveLength(0); - expect(loggerWarn.mock.calls).toHaveLength(0); + expect(loggerError).not.toHaveBeenCalled(); + expect(loggerWarn).not.toHaveBeenCalled(); expect(cb1.mock.calls[0][0]).toEqual(context.stats); expect(cb2.mock.calls[0][0]).toEqual(context.stats); @@ -117,10 +117,10 @@ describe("setupHooks", () => { doneHook.mock.calls[0][1]("stats"); expect(context.stats).toBe("stats"); expect(context.state).toBeTruthy(); - expect(nextTick.mock.calls).toHaveLength(1); + expect(nextTick).toHaveBeenCalledTimes(1); context.state = false; nextTick.mock.calls[0][0](); - expect(loggerInfo.mock.calls).toHaveLength(0); + expect(loggerInfo).not.toHaveBeenCalled(); }); it("handles multi compiler", () => { @@ -155,7 +155,7 @@ describe("setupHooks", () => { }); expect(context.stats).toBeTruthy(); expect(context.state).toBeTruthy(); - expect(nextTick.mock.calls).toHaveLength(1); + expect(nextTick).toHaveBeenCalledTimes(1); nextTick.mock.calls[0][0](); expect(loggerInfo.mock.calls).toMatchSnapshot(); diff --git a/test/utils/setupOutputFileSystem.test.js b/test/utils/setupOutputFileSystem.test.js index ce0c8a8df..45ab3e200 100644 --- a/test/utils/setupOutputFileSystem.test.js +++ b/test/utils/setupOutputFileSystem.test.js @@ -24,7 +24,7 @@ describe("setupOutputFileSystem", () => { // make sure that this is the default fs created expect(context.compiler.outputFileSystem.testFs).toBeTruthy(); expect(context.outputFileSystem.testFs).toBeTruthy(); - expect(createFsFromVolume.mock.calls).toHaveLength(1); + expect(createFsFromVolume).toHaveBeenCalledTimes(1); }); it("should set fs for multi compiler", () => { diff --git a/test/utils/setupWriteToDisk.test.js b/test/utils/setupWriteToDisk.test.js index d25d8aba8..6f1640d69 100644 --- a/test/utils/setupWriteToDisk.test.js +++ b/test/utils/setupWriteToDisk.test.js @@ -56,7 +56,7 @@ describe("setupWriteToDisk", () => { // this simulates the emit hook being called twice emitHook.mock.calls[0][1](); emitHook.mock.calls[0][1](); - expect(assetEmittedHook.mock.calls).toHaveLength(1); + expect(assetEmittedHook).toHaveBeenCalledTimes(1); }); it("filters out unwanted emits with writeToDisk", () => { @@ -77,14 +77,14 @@ describe("setupWriteToDisk", () => { ); // the getPath helper is not needed for webpack@5 - expect(getPath.mock.calls).toHaveLength(0); + expect(getPath).not.toHaveBeenCalled(); - expect(filter.mock.calls).toHaveLength(1); + expect(filter).toHaveBeenCalledTimes(1); expect(filter.mock.calls[0][0]).toBe("targetPath"); // the callback should always be called - expect(cb.mock.calls).toHaveLength(1); + expect(cb).toHaveBeenCalledTimes(1); // the filter prevents a directory from being made - expect(mkdirSpy.mock.calls).toHaveLength(0); + expect(mkdirSpy).not.toHaveBeenCalled(); }); const writeErrors = [ @@ -123,18 +123,18 @@ describe("setupWriteToDisk", () => { ); // the getPath helper is not needed for webpack@5 - expect(getPath.mock.calls).toHaveLength(0); + expect(getPath).not.toHaveBeenCalled(); - expect(mkdirSpy.mock.calls).toHaveLength(1); + expect(mkdirSpy).toHaveBeenCalledTimes(1); expect(mkdirSpy.mock.calls[0][0]).toBe("/target/path"); // simulates the mkdir callback being called mkdirSpy.mock.calls[0][2](writeError.mkdirError); if (writeError.mkdirError) { - expect(writeFileSpy.mock.calls).toHaveLength(0); + expect(writeFileSpy).not.toHaveBeenCalled(); } else { - expect(writeFileSpy.mock.calls).toHaveLength(1); + expect(writeFileSpy).toHaveBeenCalledTimes(1); expect(writeFileSpy.mock.calls[0][0]).toBe("/target/path/file"); expect(writeFileSpy.mock.calls[0][1]).toBe("content"); @@ -147,7 +147,7 @@ describe("setupWriteToDisk", () => { expect(context.logger.log.mock.calls).toMatchSnapshot(); // the callback should always be called - expect(cb.mock.calls).toHaveLength(1); + expect(cb).toHaveBeenCalledTimes(1); // no errors are expected expect(cb.mock.calls).toMatchSnapshot(); }); diff --git a/test/validation-options.test.js b/test/validation-options.test.js index 7cdd85b30..79bb801b3 100644 --- a/test/validation-options.test.js +++ b/test/validation-options.test.js @@ -87,9 +87,11 @@ describe("validation", () => { }, }; - // eslint-disable-next-line jsdoc/no-restricted-syntax + // eslint-disable-next-line jsdoc/reject-any-type + /** @typedef {any} EXPECTED_ANY */ + /** - * @param {any} value value + * @param {EXPECTED_ANY} value value * @returns {string} stringified value */ function stringifyValue(value) { @@ -103,10 +105,9 @@ describe("validation", () => { return value; } - // eslint-disable-next-line jsdoc/no-restricted-syntax /** * @param {string} key key - * @param {any} value value + * @param {EXPECTED_ANY} value value * @param {"success" | "failure"} type type */ function createTestCase(key, value, type) { From f33256f3ad565858fe87da00c7be834b382a947b Mon Sep 17 00:00:00 2001 From: alexander-akait Date: Wed, 17 Dec 2025 14:01:41 +0300 Subject: [PATCH 02/10] chore: types update --- types/index.d.ts | 18 ++++++++++++------ types/utils/compatibleAPI.d.ts | 26 ++++++++++++++------------ types/utils/memorize.d.ts | 7 ++++--- 3 files changed, 30 insertions(+), 21 deletions(-) diff --git a/types/index.d.ts b/types/index.d.ts index ec4c9f169..9c5190599 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -12,9 +12,11 @@ export = wdm; */ /** @typedef {import("http").IncomingMessage} IncomingMessage */ /** @typedef {import("http").ServerResponse & ExtendedServerResponse} ServerResponse */ +/** @typedef {any} EXPECTED_ANY */ +/** @typedef {Function} EXPECTED_FUNCTION */ /** * @callback NextFunction - * @param {any=} err error + * @param {EXPECTED_ANY=} err error * @returns {void} */ /** @@ -175,6 +177,8 @@ declare namespace wdm { ExtendedServerResponse, IncomingMessage, ServerResponse, + EXPECTED_ANY, + EXPECTED_FUNCTION, NextFunction, WatchOptions, Watching, @@ -232,7 +236,7 @@ declare function hapiWrapper< * @template {ServerResponse} [ResponseInternal=ServerResponse] * @param {Compiler | MultiCompiler} compiler compiler * @param {Options=} options options - * @returns {(ctx: any, next: Function) => Promise | void} kow wrapper + * @returns {(ctx: EXPECTED_ANY, next: EXPECTED_FUNCTION) => Promise | void} kow wrapper */ declare function koaWrapper< RequestInternal extends IncomingMessage = import("http").IncomingMessage, @@ -240,13 +244,13 @@ declare function koaWrapper< >( compiler: Compiler | MultiCompiler, options?: Options | undefined, -): (ctx: any, next: Function) => Promise | void; +): (ctx: EXPECTED_ANY, next: EXPECTED_FUNCTION) => Promise | void; /** * @template {IncomingMessage} [RequestInternal=IncomingMessage] * @template {ServerResponse} [ResponseInternal=ServerResponse] * @param {Compiler | MultiCompiler} compiler compiler * @param {Options=} options options - * @returns {(ctx: any, next: Function) => Promise | void} hono wrapper + * @returns {(ctx: EXPECTED_ANY, next: EXPECTED_FUNCTION) => Promise | void} hono wrapper */ declare function honoWrapper< RequestInternal extends IncomingMessage = import("http").IncomingMessage, @@ -254,7 +258,7 @@ declare function honoWrapper< >( compiler: Compiler | MultiCompiler, options?: Options | undefined, -): (ctx: any, next: Function) => Promise | void; +): (ctx: EXPECTED_ANY, next: EXPECTED_FUNCTION) => Promise | void; type Schema = import("schema-utils/declarations/validate").Schema; type Compiler = import("webpack").Compiler; type MultiCompiler = import("webpack").MultiCompiler; @@ -276,7 +280,9 @@ type ExtendedServerResponse = { }; type IncomingMessage = import("http").IncomingMessage; type ServerResponse = import("http").ServerResponse & ExtendedServerResponse; -type NextFunction = (err?: any | undefined) => void; +type EXPECTED_ANY = any; +type EXPECTED_FUNCTION = Function; +type NextFunction = (err?: EXPECTED_ANY | undefined) => void; type WatchOptions = NonNullable; type Watching = Compiler["watching"]; type MultiWatching = ReturnType; diff --git a/types/utils/compatibleAPI.d.ts b/types/utils/compatibleAPI.d.ts index 87b2905bd..463e7454b 100644 --- a/types/utils/compatibleAPI.d.ts +++ b/types/utils/compatibleAPI.d.ts @@ -1,6 +1,7 @@ -export type IncomingMessage = import("../index.js").IncomingMessage; -export type ServerResponse = import("../index.js").ServerResponse; +export type IncomingMessage = import("../index").IncomingMessage; +export type ServerResponse = import("../index").ServerResponse; export type OutputFileSystem = import("../index").OutputFileSystem; +export type EXPECTED_ANY = import("../index").EXPECTED_ANY; export type ExpectedIncomingMessage = { /** * get header extra method @@ -60,15 +61,15 @@ export type ExpectedServerResponse = { /** * stream */ - stream?: ((data: any) => void) | undefined; + stream?: ((data: EXPECTED_ANY) => void) | undefined; /** * get outgoing */ - getOutgoing?: (() => any) | undefined; + getOutgoing?: (() => EXPECTED_ANY) | undefined; /** * set state */ - setState?: ((name: string, value: any) => void) | undefined; + setState?: ((name: string, value: EXPECTED_ANY) => void) | undefined; }; /** * @param {string} filename filename @@ -110,9 +111,10 @@ export function getHeadersSent< export function getOutgoing< Response extends ServerResponse & ExpectedServerResponse, >(res: Response): Response; -/** @typedef {import("../index.js").IncomingMessage} IncomingMessage */ -/** @typedef {import("../index.js").ServerResponse} ServerResponse */ +/** @typedef {import("../index").IncomingMessage} IncomingMessage */ +/** @typedef {import("../index").ServerResponse} ServerResponse */ /** @typedef {import("../index").OutputFileSystem} OutputFileSystem */ +/** @typedef {import("../index").EXPECTED_ANY} EXPECTED_ANY */ /** * @typedef {object} ExpectedIncomingMessage * @property {((name: string) => string | string[] | undefined)=} getHeader get header extra method @@ -130,9 +132,9 @@ export function getOutgoing< * @property {((data?: string | Buffer) => void)=} finish finish * @property {(() => string[])=} getResponseHeaders get response header * @property {(() => boolean)=} getHeadersSent get headers sent - * @property {((data: any) => void)=} stream stream - * @property {(() => any)=} getOutgoing get outgoing - * @property {((name: string, value: any) => void)=} setState set state + * @property {((data: EXPECTED_ANY) => void)=} stream stream + * @property {(() => EXPECTED_ANY)=} getOutgoing get outgoing + * @property {((name: string, value: EXPECTED_ANY) => void)=} setState set state */ /** * @template {IncomingMessage & ExpectedIncomingMessage} Request @@ -237,12 +239,12 @@ export function setResponseHeader< * @template {ServerResponse & ExpectedServerResponse} Response * @param {Response} res res * @param {string} name name - * @param {any} value state + * @param {EXPECTED_ANY} value state * @returns {void} */ export function setState< Response extends ServerResponse & ExpectedServerResponse, ->(res: Response, name: string, value: any): void; +>(res: Response, name: string, value: EXPECTED_ANY): void; /** * @template {ServerResponse & ExpectedServerResponse} Response * @param {Response} res res diff --git a/types/utils/memorize.d.ts b/types/utils/memorize.d.ts index f4d210781..3f75ab5ed 100644 --- a/types/utils/memorize.d.ts +++ b/types/utils/memorize.d.ts @@ -1,7 +1,7 @@ export = memorize; /** * @template T - * @typedef {(...args: any) => T} FunctionReturning + * @typedef {(...args: EXPECTED_ANY) => T} FunctionReturning */ /** * @template T @@ -30,6 +30,7 @@ declare function memorize( callback?: ((value: T) => T) | undefined, ): FunctionReturning; declare namespace memorize { - export { FunctionReturning }; + export { FunctionReturning, EXPECTED_ANY }; } -type FunctionReturning = (...args: any) => T; +type FunctionReturning = (...args: EXPECTED_ANY) => T; +type EXPECTED_ANY = import("../index").EXPECTED_ANY; From 9b92cd3e473bc94938147bea15af6a5f50db2f7d Mon Sep 17 00:00:00 2001 From: alexander-akait Date: Thu, 18 Dec 2025 17:16:57 +0300 Subject: [PATCH 03/10] test: debug --- test/middleware.test.js | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/test/middleware.test.js b/test/middleware.test.js index f6b59b03a..d6edcca41 100644 --- a/test/middleware.test.js +++ b/test/middleware.test.js @@ -33,7 +33,7 @@ import getCompiler from "./helpers/getCompiler"; import getCompilerHooks from "./helpers/getCompilerHooks"; // Suppress unnecessary stats output -jest.spyOn(globalThis.console, "log").mockImplementation(); +// jest.spyOn(globalThis.console, "log").mockImplementation(); async function startServer(name, app) { return new Promise((resolve, reject) => { @@ -315,13 +315,13 @@ function parseHttpDate(date) { } describe.each([ - ["connect", connect], - ["express", express], - ["express-v4", expressOld], - ["router", router], - ["fastify", fastify], - ["koa", koa], - ["hapi", Hapi], + // ["connect", connect], + // ["express", express], + // ["express-v4", expressOld], + // ["router", router], + // ["fastify", fastify], + // ["koa", koa], + // ["hapi", Hapi], ["hono", Hono], ])("%s framework:", (name, framework) => { describe("middleware", () => { @@ -3159,8 +3159,9 @@ describe.each([ }); }); - describe("should handle custom fs errors and response 500 code without `fs.createReadStream`", () => { + describe.skip("should handle custom fs errors and response 500 code without `fs.createReadStream`", () => { let compiler; + // Try to disable this const outputPath = path.resolve( __dirname, From 7a92c2cebced61869ab86a78ead16425fa12044c Mon Sep 17 00:00:00 2001 From: alexander-akait Date: Thu, 18 Dec 2025 17:30:26 +0300 Subject: [PATCH 04/10] test: debug --- test/middleware.test.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/middleware.test.js b/test/middleware.test.js index d6edcca41..0d74f0660 100644 --- a/test/middleware.test.js +++ b/test/middleware.test.js @@ -33,7 +33,7 @@ import getCompiler from "./helpers/getCompiler"; import getCompilerHooks from "./helpers/getCompilerHooks"; // Suppress unnecessary stats output -// jest.spyOn(globalThis.console, "log").mockImplementation(); +jest.spyOn(globalThis.console, "log").mockImplementation(); async function startServer(name, app) { return new Promise((resolve, reject) => { @@ -3159,7 +3159,7 @@ describe.each([ }); }); - describe.skip("should handle custom fs errors and response 500 code without `fs.createReadStream`", () => { + describe("should handle custom fs errors and response 500 code without `fs.createReadStream`", () => { let compiler; // Try to disable this @@ -4913,7 +4913,7 @@ describe.each([ }); }); - describe("outputFileSystem option", () => { + describe.skip("outputFileSystem option", () => { describe("should work with an unspecified value", () => { let compiler; From b371a29feac9881d438297e0c3c353cd8607b623 Mon Sep 17 00:00:00 2001 From: alexander-akait Date: Thu, 18 Dec 2025 18:10:26 +0300 Subject: [PATCH 05/10] test: debug --- test/middleware.test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/middleware.test.js b/test/middleware.test.js index 0d74f0660..1cfce12c8 100644 --- a/test/middleware.test.js +++ b/test/middleware.test.js @@ -4004,7 +4004,7 @@ describe.each([ }); }); - describe("writeToDisk option", () => { + describe.skip("writeToDisk option", () => { describe('should work with "true" value', () => { let compiler; @@ -4913,7 +4913,7 @@ describe.each([ }); }); - describe.skip("outputFileSystem option", () => { + describe("outputFileSystem option", () => { describe("should work with an unspecified value", () => { let compiler; From 5392b20ba568ad217b97c86987bda693e0a9f336 Mon Sep 17 00:00:00 2001 From: alexander-akait Date: Thu, 18 Dec 2025 18:31:23 +0300 Subject: [PATCH 06/10] test: debug --- test/middleware.test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/middleware.test.js b/test/middleware.test.js index 1cfce12c8..a956b685f 100644 --- a/test/middleware.test.js +++ b/test/middleware.test.js @@ -832,7 +832,7 @@ describe.each([ }); }); - describe("basic", () => { + describe.skip("basic", () => { describe("should work", () => { let compiler; let codeContent; @@ -4004,7 +4004,7 @@ describe.each([ }); }); - describe.skip("writeToDisk option", () => { + describe("writeToDisk option", () => { describe('should work with "true" value', () => { let compiler; From fbb53a0f0bc09f45c613caee390d5456f33e5d79 Mon Sep 17 00:00:00 2001 From: alexander-akait Date: Thu, 18 Dec 2025 19:18:35 +0300 Subject: [PATCH 07/10] test: debug --- test/middleware.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/middleware.test.js b/test/middleware.test.js index a956b685f..b5388e444 100644 --- a/test/middleware.test.js +++ b/test/middleware.test.js @@ -832,7 +832,7 @@ describe.each([ }); }); - describe.skip("basic", () => { + describe("basic", () => { describe("should work", () => { let compiler; let codeContent; From ac0e16b8312b8c74ca55b578f0d9269d821e7cbd Mon Sep 17 00:00:00 2001 From: alexander-akait Date: Thu, 18 Dec 2025 19:22:52 +0300 Subject: [PATCH 08/10] test: debug --- test/middleware.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/middleware.test.js b/test/middleware.test.js index b5388e444..1cfce12c8 100644 --- a/test/middleware.test.js +++ b/test/middleware.test.js @@ -4004,7 +4004,7 @@ describe.each([ }); }); - describe("writeToDisk option", () => { + describe.skip("writeToDisk option", () => { describe('should work with "true" value', () => { let compiler; From b7d4d5e5b570cf01f4283947a91e407b6660a00c Mon Sep 17 00:00:00 2001 From: alexander-akait Date: Thu, 18 Dec 2025 20:00:00 +0300 Subject: [PATCH 09/10] test: debug --- test/middleware.test.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/test/middleware.test.js b/test/middleware.test.js index 1cfce12c8..aaf9b45f9 100644 --- a/test/middleware.test.js +++ b/test/middleware.test.js @@ -315,13 +315,13 @@ function parseHttpDate(date) { } describe.each([ - // ["connect", connect], - // ["express", express], - // ["express-v4", expressOld], - // ["router", router], - // ["fastify", fastify], - // ["koa", koa], - // ["hapi", Hapi], + ["connect", connect], + ["express", express], + ["express-v4", expressOld], + ["router", router], + ["fastify", fastify], + ["koa", koa], + ["hapi", Hapi], ["hono", Hono], ])("%s framework:", (name, framework) => { describe("middleware", () => { @@ -4004,8 +4004,8 @@ describe.each([ }); }); - describe.skip("writeToDisk option", () => { - describe('should work with "true" value', () => { + describe("writeToDisk option", () => { + (name === "hono" ? describe.only : describe)('should work with "true" value', () => { let compiler; const outputPath = path.resolve( From 90c08d1d65f8f06eeddf941211475ea9cbabd5bc Mon Sep 17 00:00:00 2001 From: alexander-akait Date: Thu, 18 Dec 2025 20:09:28 +0300 Subject: [PATCH 10/10] test: debug --- test/middleware.test.js | 135 +++++++++++++++++++++------------------- 1 file changed, 70 insertions(+), 65 deletions(-) diff --git a/test/middleware.test.js b/test/middleware.test.js index aaf9b45f9..d384e8b6a 100644 --- a/test/middleware.test.js +++ b/test/middleware.test.js @@ -4005,83 +4005,87 @@ describe.each([ }); describe("writeToDisk option", () => { - (name === "hono" ? describe.only : describe)('should work with "true" value', () => { - let compiler; + (name === "hono" ? describe.only : describe)( + 'should work with "true" value', + () => { + let compiler; - const outputPath = path.resolve( - __dirname, - "./outputs/write-to-disk-true", - ); + const outputPath = path.resolve( + __dirname, + "./outputs/write-to-disk-true", + ); - beforeAll(async () => { - compiler = getCompiler({ - ...webpackConfig, - output: { - filename: "bundle.js", - path: outputPath, - publicPath: "/public/", - }, - }); + beforeAll(async () => { + compiler = getCompiler({ + ...webpackConfig, + output: { + filename: "bundle.js", + path: outputPath, + publicPath: "/public/", + }, + }); - [server, req, instance] = await frameworkFactory( - name, - framework, - compiler, - { writeToDisk: true }, - ); - }); + [server, req, instance] = await frameworkFactory( + name, + framework, + compiler, + { writeToDisk: true }, + ); + }); - afterAll(async () => { - await fs.promises.rm(outputPath, { - recursive: true, - force: true, + afterAll(async () => { + await fs.promises.rm(outputPath, { + recursive: true, + force: true, + }); + await close(server, instance); }); - await close(server, instance); - }); - it("should find the bundle file on disk", (done) => { - req.get("/public/bundle.js").expect(200, (error) => { - if (error) { - return done(error); - } + it("should find the bundle file on disk", (done) => { + req.get("/public/bundle.js").expect(200, (error) => { + if (error) { + return done(error); + } - const bundlePath = path.resolve( - __dirname, - "./outputs/write-to-disk-true/bundle.js", - ); + const bundlePath = path.resolve( + __dirname, + "./outputs/write-to-disk-true/bundle.js", + ); - expect( - compiler.hooks.assetEmitted.taps.filter( - (hook) => hook.name === "DevMiddleware", - ), - ).toHaveLength(1); - expect(fs.existsSync(bundlePath)).toBe(true); + expect( + compiler.hooks.assetEmitted.taps.filter( + (hook) => hook.name === "DevMiddleware", + ), + ).toHaveLength(1); + expect(fs.existsSync(bundlePath)).toBe(true); - instance.invalidate(); + instance.invalidate(); - return compiler.hooks.done.tap( - "DevMiddlewareWriteToDiskTest", - () => { - expect( - compiler.hooks.assetEmitted.taps.filter( - (hook) => hook.name === "DevMiddleware", - ), - ).toHaveLength(1); + return compiler.hooks.done.tap( + "DevMiddlewareWriteToDiskTest", + () => { + expect( + compiler.hooks.assetEmitted.taps.filter( + (hook) => hook.name === "DevMiddleware", + ), + ).toHaveLength(1); - done(); - }, - ); + done(); + }, + ); + }); }); - }); - it("should not allow to get files above root", async () => { - const response = await req.get("/public/..%2f../middleware.test.js"); + it("should not allow to get files above root", async () => { + const response = await req.get( + "/public/..%2f../middleware.test.js", + ); - expect(response.statusCode).toBe(403); - expect(response.headers["content-type"]).toBe( - "text/html; charset=utf-8", - ); - expect(response.text).toBe(` + expect(response.statusCode).toBe(403); + expect(response.headers["content-type"]).toBe( + "text/html; charset=utf-8", + ); + expect(response.text).toBe(` @@ -4091,8 +4095,9 @@ describe.each([
Forbidden
`); - }); - }); + }); + }, + ); describe('should work with "true" value when the `output.clean` is `true`', () => { const outputPath = path.resolve(