diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d90099faa8952..20846e80149a6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -83,6 +83,20 @@ jobs: - name: Linter run: npm run lint + knip: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + with: + node-version: '*' + check-latest: true + - run: npm ci + + - name: Unused exports + run: npm run knip + format: runs-on: ubuntu-latest diff --git a/Herebyfile.mjs b/Herebyfile.mjs index dac359b24de61..7939e5eafbd9e 100644 --- a/Herebyfile.mjs +++ b/Herebyfile.mjs @@ -565,6 +565,13 @@ export const checkFormat = task({ run: () => exec(process.execPath, ["node_modules/dprint/bin.js", "check"], { ignoreStdout: true }), }); +export const knip = task({ + name: "knip", + description: "Runs knip.", + dependencies: [generateDiagnostics], + run: () => exec(process.execPath, ["node_modules/knip/bin/knip.js", "--tags=+internal,-knipignore", "--exclude=duplicates,enumMembers", ...(cmdLineOptions.fix ? ["--fix"] : [])]), +}); + const { main: cancellationToken, watch: watchCancellationToken } = entrypointBuildTask({ name: "cancellation-token", project: "src/cancellationToken", diff --git a/knip.jsonc b/knip.jsonc new file mode 100644 index 0000000000000..9bca724db2ab6 --- /dev/null +++ b/knip.jsonc @@ -0,0 +1,38 @@ +{ + "$schema": "https://unpkg.com/knip@5/schema.json", + "includeEntryExports": true, + "entry": [ + "Herebyfile.mjs", + "src/cancellationToken/cancellationToken.ts", + "src/testRunner/_namespaces/Harness.ts", + "src/tsc/tsc.ts", + "src/tsserver/server.ts", + "src/typescript/typescript.ts", + "src/typingsInstaller/nodeTypingsInstaller.ts", + "src/watchGuard/watchGuard.ts", + + "src/testRunner/tests.ts", + "src/testRunner/_namespaces/Harness.ts", + + // The rest of the entry files, mostly to track used dependencies: + ".eslint-plugin-local.cjs", + ".gulp.js", + "scripts/eslint/{rules,tests}/*.cjs", + "scripts/*.{cjs,mjs}" + ], + "project": [ + "src/**", + "scripts/**", + "!src/lib/**/*.d.ts" + ], + "ignore": [ + "scripts/failed-tests.d.cts" + ], + "ignoreDependencies": ["c8", "eslint-formatter-autolinkable-stylish", "mocha-fivemat-progress-reporter"], + "ignoreExportsUsedInFile": { + "enum": true, + "interface": true, + "type": true + }, + "mocha": false +} diff --git a/package-lock.json b/package-lock.json index 64f786f955a74..e698729dc95d4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43,6 +43,7 @@ "glob": "^10.4.2", "hereby": "^1.8.9", "jsonc-parser": "^3.3.1", + "knip": "^5.23.1", "minimist": "^1.2.8", "mocha": "^10.5.2", "mocha-fivemat-progress-reporter": "^0.1.0", @@ -167,6 +168,34 @@ "win32" ] }, + "node_modules/@ericcornelissen/bash-parser": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@ericcornelissen/bash-parser/-/bash-parser-0.5.3.tgz", + "integrity": "sha512-9Z0sGuXqf6En19qmwB0Syi1Mc8TYl756dNuuaYal9mrypKa0Jq/IX6aJfh6Rk2S3z66KBisWTqloDo7weYj4zg==", + "dev": true, + "dependencies": { + "array-last": "^1.1.1", + "babylon": "^6.9.1", + "compose-function": "^3.0.3", + "filter-obj": "^1.1.0", + "has-own-property": "^0.1.0", + "identity-function": "^1.0.0", + "is-iterable": "^1.1.0", + "iterable-lookahead": "^1.0.0", + "lodash.curry": "^4.1.1", + "magic-string": "^0.16.0", + "map-obj": "^2.0.0", + "object-pairs": "^0.1.0", + "object-values": "^1.0.0", + "reverse-arguments": "^1.0.0", + "shell-quote-word": "^1.0.1", + "to-pascal-case": "^1.0.0", + "unescape-js": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", @@ -972,6 +1001,23 @@ "node": ">=14" } }, + "node_modules/@snyk/github-codeowners": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@snyk/github-codeowners/-/github-codeowners-1.1.0.tgz", + "integrity": "sha512-lGFf08pbkEac0NYgVf4hdANpAgApRjNByLXB+WBip3qj1iendOIyAwP2GKkKbQMNVy2r1xxDf0ssfWscoiC+Vw==", + "dev": true, + "dependencies": { + "commander": "^4.1.1", + "ignore": "^5.1.8", + "p-map": "^4.0.0" + }, + "bin": { + "github-codeowners": "dist/cli.js" + }, + "engines": { + "node": ">=8.10" + } + }, "node_modules/@thisismanta/pessimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@thisismanta/pessimist/-/pessimist-1.2.0.tgz", @@ -1256,6 +1302,19 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1324,6 +1383,12 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/arity-n": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", + "integrity": "sha512-fExL2kFDC1Q2DUOx3whE/9KoN66IzkY4b4zUHUBFM1ojEYjZZYDcUW3bek/ufGionX9giIKDC5redH2IlGqcQQ==", + "dev": true + }, "node_modules/array-back": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", @@ -1333,6 +1398,27 @@ "node": ">=8" } }, + "node_modules/array-last": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", + "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "dev": true, + "dependencies": { + "is-number": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-last/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -1364,6 +1450,15 @@ "node": ">= 16.0.0" } }, + "node_modules/babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true, + "bin": { + "babylon": "bin/babylon.js" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1564,6 +1659,15 @@ "fsevents": "~2.3.2" } }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -1615,6 +1719,16 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.8" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1719,6 +1833,24 @@ "node": ">=4" } }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/compose-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", + "integrity": "sha512-xzhzTJ5eC+gmIzvZq+C3kCJHsp9os6tJkrigDRZclyGtOKINbZtE8n1Tzmeh32jW+BUDPbvZpibwvJHBLGMVwg==", + "dev": true, + "dependencies": { + "arity-n": "^1.0.4" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1831,6 +1963,19 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "optional": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -1916,6 +2061,18 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, + "node_modules/easy-table": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz", + "integrity": "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "optionalDependencies": { + "wcwidth": "^1.0.1" + } + }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -2331,6 +2488,15 @@ "node": ">=8" } }, + "node_modules/filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -2567,6 +2733,12 @@ "node": ">=8" } }, + "node_modules/has-own-property": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-own-property/-/has-own-property-0.1.0.tgz", + "integrity": "sha512-14qdBKoonU99XDhWcFKZTShK+QV47qU97u8zzoVo9cL5TZ3BmBHXogItSt9qJjR0KUMFRhcCW8uGIGl8nkl7Aw==", + "dev": true + }, "node_modules/has-property-descriptors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", @@ -2650,6 +2822,12 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "node_modules/identity-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/identity-function/-/identity-function-1.0.0.tgz", + "integrity": "sha512-kNrgUK0qI+9qLTBidsH85HjDLpZfrrS0ElquKKe/fJFdB3D7VeKdXXEvOPDUHSHOzdZKCAAaQIWWyp0l2yq6pw==", + "dev": true + }, "node_modules/ignore": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", @@ -2694,6 +2872,15 @@ "node": ">=0.8.19" } }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -2732,6 +2919,18 @@ "node": ">=8" } }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -2762,6 +2961,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-iterable": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-iterable/-/is-iterable-1.1.1.tgz", + "integrity": "sha512-EdOZCr0NsGE00Pot+x1ZFx9MJK3C6wy91geZpXwvwexDLJvA4nzYyZf7r+EIwSeVsOLDdBz7ATg9NqKTzuNYuQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -2843,6 +3051,15 @@ "node": ">=8" } }, + "node_modules/iterable-lookahead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/iterable-lookahead/-/iterable-lookahead-1.0.0.tgz", + "integrity": "sha512-hJnEP2Xk4+44DDwJqUQGdXal5VbyeWLaPyDl2AQc242Zr7iqz4DgpQOrEzglWVMGHMDCkguLHEKxd1+rOsmgSQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/jackspeak": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", @@ -2861,6 +3078,15 @@ "@pkgjs/parseargs": "^0.11.0" } }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, "node_modules/js-md4": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/js-md4/-/js-md4-0.3.2.tgz", @@ -2897,6 +3123,18 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/jsonc-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", @@ -2912,6 +3150,139 @@ "json-buffer": "3.0.1" } }, + "node_modules/knip": { + "version": "5.23.1", + "resolved": "https://registry.npmjs.org/knip/-/knip-5.23.1.tgz", + "integrity": "sha512-2IhQPeo4z/6DWZJMqkFEFryJSA6cO3CSRbNrAQC8VbiRdgteCsu0+8F3anlHXyiAHH+w3sfpal+uO+N1ZhCWow==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/webpro" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/webpro" + } + ], + "dependencies": { + "@ericcornelissen/bash-parser": "0.5.3", + "@nodelib/fs.walk": "2.0.0", + "@snyk/github-codeowners": "1.1.0", + "easy-table": "1.2.0", + "fast-glob": "^3.3.2", + "jiti": "^1.21.0", + "js-yaml": "^4.1.0", + "minimist": "^1.2.8", + "picocolors": "^1.0.0", + "picomatch": "^4.0.1", + "pretty-ms": "^9.0.0", + "resolve": "^1.22.8", + "smol-toml": "^1.1.4", + "strip-json-comments": "5.0.1", + "summary": "2.1.0", + "tsconfig-paths": "^4.2.0", + "zod": "^3.22.4", + "zod-validation-error": "^3.0.3" + }, + "bin": { + "knip": "bin/knip.js", + "knip-bun": "bin/knip-bun.js" + }, + "engines": { + "node": ">=18.6.0" + }, + "peerDependencies": { + "@types/node": ">=18", + "typescript": ">=5.0.4" + } + }, + "node_modules/knip/node_modules/@nodelib/fs.scandir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-3.0.0.tgz", + "integrity": "sha512-ktI9+PxfHYtKjF3cLTUAh2N+b8MijCRPNwKJNqTVdL0gB0QxLU2rIRaZ1t71oEa3YBDE6bukH1sR0+CDnpp/Mg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "3.0.0", + "run-parallel": "^1.2.0" + }, + "engines": { + "node": ">=16.14.0" + } + }, + "node_modules/knip/node_modules/@nodelib/fs.stat": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-3.0.0.tgz", + "integrity": "sha512-2tQOI38s19P9i7X/Drt0v8iMA+KMsgdhB/dyPER+e+2Y8L1Z7QvnuRdW/uLuf5YRFUYmnj4bMA6qCuZHFI1GDQ==", + "dev": true, + "engines": { + "node": ">=16.14.0" + } + }, + "node_modules/knip/node_modules/@nodelib/fs.walk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-2.0.0.tgz", + "integrity": "sha512-54voNDBobGdMl3BUXSu7UaDh1P85PGHWlJ5e0XhPugo1JulOyCtp2I+5ri4wplGDJ8QGwPEQW7/x3yTLU7yF1A==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "3.0.0", + "fastq": "^1.15.0" + }, + "engines": { + "node": ">=16.14.0" + } + }, + "node_modules/knip/node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/knip/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/knip/node_modules/pretty-ms": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.0.0.tgz", + "integrity": "sha512-E9e9HJ9R9NasGOgPaPE8VMeiPKAyWR5jcFpNnwIejslIhWqdqOrb2wShBsncMPUb+BcCd2OPYfh7p2W6oemTng==", + "dev": true, + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/knip/node_modules/strip-json-comments": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.1.tgz", + "integrity": "sha512-0fk9zBqO67Nq5M/m45qHCJxylV/DhBlIOVExqgOMiCCrzrhU6tCibRXNqE3jwJLftzE9SNuZtYbpzcO+i9FiKw==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -2946,6 +3317,12 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "node_modules/lodash.curry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", + "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==", + "dev": true + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -2986,6 +3363,15 @@ "node": "14 || >=16.14" } }, + "node_modules/magic-string": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.16.0.tgz", + "integrity": "sha512-c4BEos3y6G2qO0B9X7K0FVLOPT9uGrjYwYRLFmDqyl5YMboUviyecnXWp94fJTSMwPw2/sf+CEYt5AGpmklkkQ==", + "dev": true, + "dependencies": { + "vlq": "^0.2.1" + } + }, "node_modules/make-dir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", @@ -3001,6 +3387,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha512-TzQSV2DiMYgoF5RycneKVUzIa9bQsj/B3tTgsE3dOGqlzHnGIDaC7XBE7grnA+8kZPnfqSGFe95VHc2oc0VFUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -3327,6 +3722,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object-pairs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-pairs/-/object-pairs-0.1.0.tgz", + "integrity": "sha512-3ECr6K831I4xX/Mduxr9UC+HPOz/d6WKKYj9p4cmC8Lg8p7g8gitzsxNX5IWlSIgFWN/a4JgrJaoAMKn20oKwA==", + "dev": true + }, + "node_modules/object-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/object-values/-/object-values-1.0.0.tgz", + "integrity": "sha512-+8hwcz/JnQ9EpLIXzN0Rs7DLsBpJNT/xYehtB/jU93tHYr5BFEO8E+JGQNOSqE7opVzz5cGksKFHt7uUJVLSjQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -3383,6 +3793,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/package-json-from-dist": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", @@ -3440,6 +3865,12 @@ "node": ">=8" } }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, "node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", @@ -3658,6 +4089,23 @@ "node": ">=0.10.0" } }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -3677,6 +4125,12 @@ "node": ">=0.10.0" } }, + "node_modules/reverse-arguments": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/reverse-arguments/-/reverse-arguments-1.0.0.tgz", + "integrity": "sha512-/x8uIPdTafBqakK0TmPNJzgkLP+3H+yxpUJhCQHsLBg1rYEVNR2D8BRYNWQhVBjyOd7oo1dZRVzIkwMY2oqfYQ==", + "dev": true + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -3838,7 +4292,13 @@ "node": ">=8" } }, - "node_modules/side-channel": { + "node_modules/shell-quote-word": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/shell-quote-word/-/shell-quote-word-1.0.1.tgz", + "integrity": "sha512-lT297f1WLAdq0A4O+AknIFRP6kkiI3s8C913eJ0XqBxJbZPGWUNkRQk2u8zk4bEAjUJ5i+fSLwB6z1HzeT+DEg==", + "dev": true + }, + "node_modules/side-channel": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", @@ -3877,6 +4337,16 @@ "node": ">=8" } }, + "node_modules/smol-toml": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.1.4.tgz", + "integrity": "sha512-Y0OT8HezWsTNeEOSVxDnKOW/AyNXHQ4BwJNbAXlLTF5wWsBvrcHhIkE5Rf8kQMLmgf7nDX3PVOlgC6/Aiggu3Q==", + "dev": true, + "engines": { + "node": ">= 18", + "pnpm": ">= 8" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -3961,6 +4431,12 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/string.fromcodepoint": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string.fromcodepoint/-/string.fromcodepoint-0.2.1.tgz", + "integrity": "sha512-n69H31OnxSGSZyZbgBlvYIXlrMhJQ0dQAX1js1QDhpaUH6zmU3QYlj07bCwCNlPOu3oRXIubGPl2gDGnHsiCqg==", + "dev": true + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -3986,6 +4462,15 @@ "node": ">=8" } }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -4004,6 +4489,12 @@ "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", "dev": true }, + "node_modules/summary": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/summary/-/summary-2.1.0.tgz", + "integrity": "sha512-nMIjMrd5Z2nuB2RZCKJfFMjgS3fygbeyGk9PxPPaJR1RIcyN9yn4A63Isovzm3ZtQuEkLBVgMdPup8UeLH7aQw==", + "dev": true + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -4016,6 +4507,18 @@ "node": ">=8" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/table-layout": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", @@ -4051,6 +4554,21 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/to-no-case": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/to-no-case/-/to-no-case-1.0.2.tgz", + "integrity": "sha512-Z3g735FxuZY8rodxV4gH7LxClE4H0hTIyHNIHdk+vpQxjLm0cwnKXq/OFVZ76SOQmto7txVcwSCwkU5kqp+FKg==", + "dev": true + }, + "node_modules/to-pascal-case": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-pascal-case/-/to-pascal-case-1.0.0.tgz", + "integrity": "sha512-QGMWHqM6xPrcQW57S23c5/3BbYb0Tbe9p+ur98ckRnGDwD4wbbtDiYI38CfmMKNB5Iv0REjs5SNDntTwvDxzZA==", + "dev": true, + "dependencies": { + "to-space-case": "^1.0.0" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -4063,6 +4581,15 @@ "node": ">=8.0" } }, + "node_modules/to-space-case": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-space-case/-/to-space-case-1.0.0.tgz", + "integrity": "sha512-rLdvwXZ39VOn1IxGL3V6ZstoTbwLRckQmn/U8ZDLuWwIXNpuZDhQ3AiRUlhTbOXFVE9C+dR51wM0CBDhk31VcA==", + "dev": true, + "dependencies": { + "to-no-case": "^1.0.0" + } + }, "node_modules/ts-api-utils": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", @@ -4075,6 +4602,20 @@ "typescript": ">=4.2.0" } }, + "node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/tslib": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", @@ -4173,6 +4714,15 @@ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true }, + "node_modules/unescape-js": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unescape-js/-/unescape-js-1.1.4.tgz", + "integrity": "sha512-42SD8NOQEhdYntEiUQdYq/1V/YHwr1HLwlHuTJB5InVVdOSbgI6xu8jK5q65yIzuFCfczzyDF/7hbGzVbyCw0g==", + "dev": true, + "dependencies": { + "string.fromcodepoint": "^0.2.1" + } + }, "node_modules/universal-user-agent": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.2.tgz", @@ -4202,6 +4752,22 @@ "node": ">=10.12.0" } }, + "node_modules/vlq": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", + "dev": true + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "optional": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, "node_modules/web-streams-polyfill": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", @@ -4436,6 +5002,27 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zod": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", + "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-validation-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-3.1.0.tgz", + "integrity": "sha512-zujS6HqJjMZCsvjfbnRs7WI3PXN39ovTcY1n8a+KTm4kOH0ZXYsNiJkH1odZf4xZKMkBDL7M2rmQ913FCS1p9w==", + "dev": true, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.18.0" + } } }, "dependencies": { @@ -4506,6 +5093,31 @@ "dev": true, "optional": true }, + "@ericcornelissen/bash-parser": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@ericcornelissen/bash-parser/-/bash-parser-0.5.3.tgz", + "integrity": "sha512-9Z0sGuXqf6En19qmwB0Syi1Mc8TYl756dNuuaYal9mrypKa0Jq/IX6aJfh6Rk2S3z66KBisWTqloDo7weYj4zg==", + "dev": true, + "requires": { + "array-last": "^1.1.1", + "babylon": "^6.9.1", + "compose-function": "^3.0.3", + "filter-obj": "^1.1.0", + "has-own-property": "^0.1.0", + "identity-function": "^1.0.0", + "is-iterable": "^1.1.0", + "iterable-lookahead": "^1.0.0", + "lodash.curry": "^4.1.1", + "magic-string": "^0.16.0", + "map-obj": "^2.0.0", + "object-pairs": "^0.1.0", + "object-values": "^1.0.0", + "reverse-arguments": "^1.0.0", + "shell-quote-word": "^1.0.1", + "to-pascal-case": "^1.0.0", + "unescape-js": "^1.0.5" + } + }, "@esbuild/aix-ppc64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", @@ -5003,6 +5615,17 @@ "dev": true, "optional": true }, + "@snyk/github-codeowners": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@snyk/github-codeowners/-/github-codeowners-1.1.0.tgz", + "integrity": "sha512-lGFf08pbkEac0NYgVf4hdANpAgApRjNByLXB+WBip3qj1iendOIyAwP2GKkKbQMNVy2r1xxDf0ssfWscoiC+Vw==", + "dev": true, + "requires": { + "commander": "^4.1.1", + "ignore": "^5.1.8", + "p-map": "^4.0.0" + } + }, "@thisismanta/pessimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@thisismanta/pessimist/-/pessimist-1.2.0.tgz", @@ -5187,6 +5810,16 @@ "dev": true, "requires": {} }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -5236,12 +5869,35 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "arity-n": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", + "integrity": "sha512-fExL2kFDC1Q2DUOx3whE/9KoN66IzkY4b4zUHUBFM1ojEYjZZYDcUW3bek/ufGionX9giIKDC5redH2IlGqcQQ==", + "dev": true + }, "array-back": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", "dev": true }, + "array-last": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", + "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "dev": true, + "requires": { + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -5264,6 +5920,12 @@ "typed-rest-client": "^2.0.1" } }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -5406,6 +6068,12 @@ "readdirp": "~3.6.0" } }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, "cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -5447,6 +6115,13 @@ } } }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "optional": true + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -5532,6 +6207,21 @@ } } }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "compose-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", + "integrity": "sha512-xzhzTJ5eC+gmIzvZq+C3kCJHsp9os6tJkrigDRZclyGtOKINbZtE8n1Tzmeh32jW+BUDPbvZpibwvJHBLGMVwg==", + "dev": true, + "requires": { + "arity-n": "^1.0.4" + } + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -5616,6 +6306,16 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "optional": true, + "requires": { + "clone": "^1.0.2" + } + }, "define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -5682,6 +6382,16 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, + "easy-table": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz", + "integrity": "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1", + "wcwidth": "^1.0.1" + } + }, "emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -5982,6 +6692,12 @@ "to-regex-range": "^5.0.1" } }, + "filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", + "dev": true + }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -6145,6 +6861,12 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "has-own-property": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-own-property/-/has-own-property-0.1.0.tgz", + "integrity": "sha512-14qdBKoonU99XDhWcFKZTShK+QV47qU97u8zzoVo9cL5TZ3BmBHXogItSt9qJjR0KUMFRhcCW8uGIGl8nkl7Aw==", + "dev": true + }, "has-property-descriptors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", @@ -6201,6 +6923,12 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "identity-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/identity-function/-/identity-function-1.0.0.tgz", + "integrity": "sha512-kNrgUK0qI+9qLTBidsH85HjDLpZfrrS0ElquKKe/fJFdB3D7VeKdXXEvOPDUHSHOzdZKCAAaQIWWyp0l2yq6pw==", + "dev": true + }, "ignore": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", @@ -6229,6 +6957,12 @@ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -6260,6 +6994,15 @@ "binary-extensions": "^2.0.0" } }, + "is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "requires": { + "hasown": "^2.0.0" + } + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -6281,6 +7024,12 @@ "is-extglob": "^2.1.1" } }, + "is-iterable": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-iterable/-/is-iterable-1.1.1.tgz", + "integrity": "sha512-EdOZCr0NsGE00Pot+x1ZFx9MJK3C6wy91geZpXwvwexDLJvA4nzYyZf7r+EIwSeVsOLDdBz7ATg9NqKTzuNYuQ==", + "dev": true + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -6338,6 +7087,12 @@ "istanbul-lib-report": "^3.0.0" } }, + "iterable-lookahead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/iterable-lookahead/-/iterable-lookahead-1.0.0.tgz", + "integrity": "sha512-hJnEP2Xk4+44DDwJqUQGdXal5VbyeWLaPyDl2AQc242Zr7iqz4DgpQOrEzglWVMGHMDCkguLHEKxd1+rOsmgSQ==", + "dev": true + }, "jackspeak": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", @@ -6348,6 +7103,12 @@ "@pkgjs/parseargs": "^0.11.0" } }, + "jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "dev": true + }, "js-md4": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/js-md4/-/js-md4-0.3.2.tgz", @@ -6381,6 +7142,12 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, "jsonc-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", @@ -6396,6 +7163,87 @@ "json-buffer": "3.0.1" } }, + "knip": { + "version": "5.23.1", + "resolved": "https://registry.npmjs.org/knip/-/knip-5.23.1.tgz", + "integrity": "sha512-2IhQPeo4z/6DWZJMqkFEFryJSA6cO3CSRbNrAQC8VbiRdgteCsu0+8F3anlHXyiAHH+w3sfpal+uO+N1ZhCWow==", + "dev": true, + "requires": { + "@ericcornelissen/bash-parser": "0.5.3", + "@nodelib/fs.walk": "2.0.0", + "@snyk/github-codeowners": "1.1.0", + "easy-table": "1.2.0", + "fast-glob": "^3.3.2", + "jiti": "^1.21.0", + "js-yaml": "^4.1.0", + "minimist": "^1.2.8", + "picocolors": "^1.0.0", + "picomatch": "^4.0.1", + "pretty-ms": "^9.0.0", + "resolve": "^1.22.8", + "smol-toml": "^1.1.4", + "strip-json-comments": "5.0.1", + "summary": "2.1.0", + "tsconfig-paths": "^4.2.0", + "zod": "^3.22.4", + "zod-validation-error": "^3.0.3" + }, + "dependencies": { + "@nodelib/fs.scandir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-3.0.0.tgz", + "integrity": "sha512-ktI9+PxfHYtKjF3cLTUAh2N+b8MijCRPNwKJNqTVdL0gB0QxLU2rIRaZ1t71oEa3YBDE6bukH1sR0+CDnpp/Mg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "3.0.0", + "run-parallel": "^1.2.0" + } + }, + "@nodelib/fs.stat": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-3.0.0.tgz", + "integrity": "sha512-2tQOI38s19P9i7X/Drt0v8iMA+KMsgdhB/dyPER+e+2Y8L1Z7QvnuRdW/uLuf5YRFUYmnj4bMA6qCuZHFI1GDQ==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-2.0.0.tgz", + "integrity": "sha512-54voNDBobGdMl3BUXSu7UaDh1P85PGHWlJ5e0XhPugo1JulOyCtp2I+5ri4wplGDJ8QGwPEQW7/x3yTLU7yF1A==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "3.0.0", + "fastq": "^1.15.0" + } + }, + "parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "dev": true + }, + "picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true + }, + "pretty-ms": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.0.0.tgz", + "integrity": "sha512-E9e9HJ9R9NasGOgPaPE8VMeiPKAyWR5jcFpNnwIejslIhWqdqOrb2wShBsncMPUb+BcCd2OPYfh7p2W6oemTng==", + "dev": true, + "requires": { + "parse-ms": "^4.0.0" + } + }, + "strip-json-comments": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.1.tgz", + "integrity": "sha512-0fk9zBqO67Nq5M/m45qHCJxylV/DhBlIOVExqgOMiCCrzrhU6tCibRXNqE3jwJLftzE9SNuZtYbpzcO+i9FiKw==", + "dev": true + } + } + }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -6421,6 +7269,12 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "lodash.curry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", + "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==", + "dev": true + }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -6452,6 +7306,15 @@ "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", "dev": true }, + "magic-string": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.16.0.tgz", + "integrity": "sha512-c4BEos3y6G2qO0B9X7K0FVLOPT9uGrjYwYRLFmDqyl5YMboUviyecnXWp94fJTSMwPw2/sf+CEYt5AGpmklkkQ==", + "dev": true, + "requires": { + "vlq": "^0.2.1" + } + }, "make-dir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", @@ -6461,6 +7324,12 @@ "semver": "^7.5.3" } }, + "map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha512-TzQSV2DiMYgoF5RycneKVUzIa9bQsj/B3tTgsE3dOGqlzHnGIDaC7XBE7grnA+8kZPnfqSGFe95VHc2oc0VFUQ==", + "dev": true + }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -6695,6 +7564,18 @@ "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", "dev": true }, + "object-pairs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-pairs/-/object-pairs-0.1.0.tgz", + "integrity": "sha512-3ECr6K831I4xX/Mduxr9UC+HPOz/d6WKKYj9p4cmC8Lg8p7g8gitzsxNX5IWlSIgFWN/a4JgrJaoAMKn20oKwA==", + "dev": true + }, + "object-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/object-values/-/object-values-1.0.0.tgz", + "integrity": "sha512-+8hwcz/JnQ9EpLIXzN0Rs7DLsBpJNT/xYehtB/jU93tHYr5BFEO8E+JGQNOSqE7opVzz5cGksKFHt7uUJVLSjQ==", + "dev": true + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -6736,6 +7617,15 @@ "p-limit": "^3.0.2" } }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, "package-json-from-dist": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", @@ -6775,6 +7665,12 @@ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, "path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", @@ -6909,6 +7805,17 @@ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true }, + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -6921,6 +7828,12 @@ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, + "reverse-arguments": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/reverse-arguments/-/reverse-arguments-1.0.0.tgz", + "integrity": "sha512-/x8uIPdTafBqakK0TmPNJzgkLP+3H+yxpUJhCQHsLBg1rYEVNR2D8BRYNWQhVBjyOd7oo1dZRVzIkwMY2oqfYQ==", + "dev": true + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -7024,6 +7937,12 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, + "shell-quote-word": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/shell-quote-word/-/shell-quote-word-1.0.1.tgz", + "integrity": "sha512-lT297f1WLAdq0A4O+AknIFRP6kkiI3s8C913eJ0XqBxJbZPGWUNkRQk2u8zk4bEAjUJ5i+fSLwB6z1HzeT+DEg==", + "dev": true + }, "side-channel": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", @@ -7048,6 +7967,12 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, + "smol-toml": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.1.4.tgz", + "integrity": "sha512-Y0OT8HezWsTNeEOSVxDnKOW/AyNXHQ4BwJNbAXlLTF5wWsBvrcHhIkE5Rf8kQMLmgf7nDX3PVOlgC6/Aiggu3Q==", + "dev": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -7111,6 +8036,12 @@ } } }, + "string.fromcodepoint": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string.fromcodepoint/-/string.fromcodepoint-0.2.1.tgz", + "integrity": "sha512-n69H31OnxSGSZyZbgBlvYIXlrMhJQ0dQAX1js1QDhpaUH6zmU3QYlj07bCwCNlPOu3oRXIubGPl2gDGnHsiCqg==", + "dev": true + }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -7129,6 +8060,12 @@ "ansi-regex": "^5.0.1" } }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -7141,6 +8078,12 @@ "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", "dev": true }, + "summary": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/summary/-/summary-2.1.0.tgz", + "integrity": "sha512-nMIjMrd5Z2nuB2RZCKJfFMjgS3fygbeyGk9PxPPaJR1RIcyN9yn4A63Isovzm3ZtQuEkLBVgMdPup8UeLH7aQw==", + "dev": true + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -7150,6 +8093,12 @@ "has-flag": "^4.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, "table-layout": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", @@ -7179,6 +8128,21 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "to-no-case": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/to-no-case/-/to-no-case-1.0.2.tgz", + "integrity": "sha512-Z3g735FxuZY8rodxV4gH7LxClE4H0hTIyHNIHdk+vpQxjLm0cwnKXq/OFVZ76SOQmto7txVcwSCwkU5kqp+FKg==", + "dev": true + }, + "to-pascal-case": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-pascal-case/-/to-pascal-case-1.0.0.tgz", + "integrity": "sha512-QGMWHqM6xPrcQW57S23c5/3BbYb0Tbe9p+ur98ckRnGDwD4wbbtDiYI38CfmMKNB5Iv0REjs5SNDntTwvDxzZA==", + "dev": true, + "requires": { + "to-space-case": "^1.0.0" + } + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -7188,6 +8152,15 @@ "is-number": "^7.0.0" } }, + "to-space-case": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-space-case/-/to-space-case-1.0.0.tgz", + "integrity": "sha512-rLdvwXZ39VOn1IxGL3V6ZstoTbwLRckQmn/U8ZDLuWwIXNpuZDhQ3AiRUlhTbOXFVE9C+dR51wM0CBDhk31VcA==", + "dev": true, + "requires": { + "to-no-case": "^1.0.0" + } + }, "ts-api-utils": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", @@ -7195,6 +8168,17 @@ "dev": true, "requires": {} }, + "tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "requires": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, "tslib": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", @@ -7265,6 +8249,15 @@ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true }, + "unescape-js": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unescape-js/-/unescape-js-1.1.4.tgz", + "integrity": "sha512-42SD8NOQEhdYntEiUQdYq/1V/YHwr1HLwlHuTJB5InVVdOSbgI6xu8jK5q65yIzuFCfczzyDF/7hbGzVbyCw0g==", + "dev": true, + "requires": { + "string.fromcodepoint": "^0.2.1" + } + }, "universal-user-agent": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.2.tgz", @@ -7291,6 +8284,22 @@ "convert-source-map": "^2.0.0" } }, + "vlq": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", + "dev": true + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "optional": true, + "requires": { + "defaults": "^1.0.3" + } + }, "web-streams-polyfill": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", @@ -7461,6 +8470,19 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true + }, + "zod": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", + "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", + "dev": true + }, + "zod-validation-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-3.1.0.tgz", + "integrity": "sha512-zujS6HqJjMZCsvjfbnRs7WI3PXN39ovTcY1n8a+KTm4kOH0ZXYsNiJkH1odZf4xZKMkBDL7M2rmQ913FCS1p9w==", + "dev": true, + "requires": {} } } } diff --git a/package.json b/package.json index 9ea98a6e76699..7b83024a0de91 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,7 @@ "glob": "^10.4.2", "hereby": "^1.8.9", "jsonc-parser": "^3.3.1", + "knip": "^5.23.1", "minimist": "^1.2.8", "mocha": "^10.5.2", "mocha-fivemat-progress-reporter": "^0.1.0", @@ -93,6 +94,7 @@ "clean": "hereby clean", "gulp": "hereby", "lint": "hereby lint", + "knip": "hereby knip", "format": "dprint fmt", "setup-hooks": "node scripts/link-hooks.mjs" }, diff --git a/src/compiler/builder.ts b/src/compiler/builder.ts index de72333bc5738..81ea3942c59ec 100644 --- a/src/compiler/builder.ts +++ b/src/compiler/builder.ts @@ -1144,8 +1144,7 @@ export interface NonIncrementalBuildInfo extends BuildInfo { checkPending: true | undefined; } -/** @internal */ -export function isNonIncrementalBuildInfo(info: BuildInfo): info is NonIncrementalBuildInfo { +function isNonIncrementalBuildInfo(info: BuildInfo): info is NonIncrementalBuildInfo { return !isIncrementalBuildInfo(info) && !!(info as NonIncrementalBuildInfo).root; } @@ -1599,8 +1598,7 @@ export function computeSignatureWithDiagnostics( } } -/** @internal */ -export function computeSignature(text: string, host: HostForComputeHash, data?: WriteFileCallbackData) { +function computeSignature(text: string, host: HostForComputeHash, data?: WriteFileCallbackData) { return (host.createHash ?? generateDjb2Hash)(getTextHandlingSourceMapForSignature(text, data)); } diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 2ca07e30f287b..a965c51d2286b 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -52131,8 +52131,7 @@ export function signatureHasRestParameter(s: Signature) { return !!(s.flags & SignatureFlags.HasRestParameter); } -/** @internal */ -export function signatureHasLiteralTypes(s: Signature) { +function signatureHasLiteralTypes(s: Signature) { return !!(s.flags & SignatureFlags.HasLiteralTypes); } diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index 5c0a33c6e46bb..f802e17beed54 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -123,8 +123,7 @@ import { WatchOptions, } from "./_namespaces/ts.js"; -/** @internal */ -export const compileOnSaveCommandLineOption: CommandLineOption = { +const compileOnSaveCommandLineOption: CommandLineOption = { name: "compileOnSave", type: "boolean", defaultValueDescription: false, @@ -1626,12 +1625,11 @@ export const optionsAffectingProgramStructure: readonly CommandLineOption[] = op /** @internal */ export const transpileOptionValueCompilerOptions: readonly CommandLineOption[] = optionDeclarations.filter(option => hasProperty(option, "transpileOptionValue")); -/** @internal */ -export const configDirTemplateSubstitutionOptions: readonly CommandLineOption[] = optionDeclarations.filter( +const configDirTemplateSubstitutionOptions: readonly CommandLineOption[] = optionDeclarations.filter( option => option.allowConfigDirTemplateSubstitution || (!option.isCommandLineOnly && option.isFilePath), ); -/** @internal */ -export const configDirTemplateSubstitutionWatchOptions: readonly CommandLineOption[] = optionsForWatch.filter( + +const configDirTemplateSubstitutionWatchOptions: readonly CommandLineOption[] = optionsForWatch.filter( option => option.allowConfigDirTemplateSubstitution || (!option.isCommandLineOnly && option.isFilePath), ); @@ -1745,8 +1743,7 @@ const compilerOptionsAlternateMode: AlternateModeDiagnostics = { getOptionsNameMap: getBuildOptionsNameMap, }; -/** @internal */ -export const defaultInitCompilerOptions: CompilerOptions = { +const defaultInitCompilerOptions: CompilerOptions = { module: ModuleKind.CommonJS, target: ScriptTarget.ES2016, strict: true, @@ -2903,8 +2900,7 @@ function directoryOfCombinedPath(fileName: string, basePath: string) { return getDirectoryPath(getNormalizedAbsolutePath(fileName, basePath)); } -/** @internal */ -export const defaultIncludeSpec = "**/*"; +const defaultIncludeSpec = "**/*"; /** * Parse the contents of a config file from json or json source file (tsconfig.json). diff --git a/src/compiler/core.ts b/src/compiler/core.ts index 977da801ed946..e40d8826ca69c 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -17,8 +17,6 @@ import { export const emptyArray: never[] = [] as never[]; /** @internal */ export const emptyMap: ReadonlyMap = new Map(); -/** @internal */ -export const emptySet: ReadonlySet = new Set(); /** @internal */ export function length(array: readonly any[] | undefined): number { @@ -218,22 +216,6 @@ export function findLastIndex(array: readonly T[] | undefined, predicate: (el return -1; } -/** - * Returns the first truthy result of `callback`, or else fails. - * This is like `forEach`, but never returns undefined. - * - * @internal - */ -export function findMap(array: readonly T[], callback: (element: T, index: number) => U | undefined): U { - for (let i = 0; i < array.length; i++) { - const result = callback(array[i], i); - if (result) { - return result; - } - } - return Debug.fail(); -} - /** @internal */ export function contains(array: readonly T[] | undefined, value: T, equalityComparer: EqualityComparer = equateValues): boolean { if (array !== undefined) { @@ -827,17 +809,6 @@ export function sortAndDeduplicate(array: readonly T[], comparer?: Comparer); } -/** @internal */ -export function arrayIsSorted(array: readonly T[], comparer: Comparer) { - if (array.length < 2) return true; - for (let i = 1, len = array.length; i < len; i++) { - if (comparer(array[i - 1], array[i]) === Comparison.GreaterThan) { - return false; - } - } - return true; -} - /** @internal */ export function arrayIsEqualTo(array1: readonly T[] | undefined, array2: readonly T[] | undefined, equalityComparer: (a: T, b: T, index: number) => boolean = equateValues): boolean { if (array1 === undefined || array2 === undefined) { @@ -1875,10 +1846,8 @@ export function identity(x: T) { /** * Returns lower case string - * - * @internal */ -export function toLowerCase(x: string) { +function toLowerCase(x: string) { return x.toLowerCase(); } @@ -1963,82 +1932,6 @@ export function memoizeOne(c }; } -/** - * A version of `memoize` that supports a single non-primitive argument, stored as keys of a WeakMap. - * - * @internal - */ -export function memoizeWeak(callback: (arg: A) => T): (arg: A) => T { - const map = new WeakMap(); - return (arg: A) => { - let value = map.get(arg); - if (value === undefined && !map.has(arg)) { - value = callback(arg); - map.set(arg, value); - } - return value!; - }; -} - -/** @internal */ -export interface MemoizeCache { - has(args: A): boolean; - get(args: A): T | undefined; - set(args: A, value: T): void; -} - -/** - * A version of `memoize` that supports multiple arguments, backed by a provided cache. - * - * @internal - */ -export function memoizeCached(callback: (...args: A) => T, cache: MemoizeCache): (...args: A) => T { - return (...args: A) => { - let value = cache.get(args); - if (value === undefined && !cache.has(args)) { - value = callback(...args); - cache.set(args, value); - } - return value!; - }; -} - -/** - * High-order function, composes functions. Note that functions are composed inside-out; - * for example, `compose(a, b)` is the equivalent of `x => b(a(x))`. - * - * @param args The functions to compose. - * - * @internal - */ -export function compose(...args: ((t: T) => T)[]): (t: T) => T; -/** @internal */ -export function compose(a: (t: T) => T, b: (t: T) => T, c: (t: T) => T, d: (t: T) => T, e: (t: T) => T): (t: T) => T { - if (!!e) { - const args: ((t: T) => T)[] = []; - for (let i = 0; i < arguments.length; i++) { - // eslint-disable-next-line prefer-rest-params - args[i] = arguments[i]; - } - - return t => reduceLeft(args, (u, f) => f(u), t); - } - else if (d) { - return t => d(c(b(a(t)))); - } - else if (c) { - return t => c(b(a(t))); - } - else if (b) { - return t => b(a(t)); - } - else if (a) { - return t => a(t); - } - else { - return t => t; - } -} /** @internal */ export const enum AssertionLevel { None = 0, @@ -2054,8 +1947,6 @@ export const enum AssertionLevel { * @internal */ export type AnyFunction = (...args: never[]) => void; -/** @internal */ -export type AnyConstructor = new (...args: unknown[]) => unknown; /** @internal */ export function equateValues(a: T, b: T) { @@ -2467,8 +2358,7 @@ export function orderedRemoveItemAt(array: T[], index: number): void { array.pop(); } -/** @internal */ -export function unorderedRemoveItemAt(array: T[], index: number): void { +function unorderedRemoveItemAt(array: T[], index: number): void { // Fill in the "hole" left at `index`. array[index] = array[array.length - 1]; array.pop(); diff --git a/src/compiler/corePublic.ts b/src/compiler/corePublic.ts index e05d10ac268e6..ed4b500aaec63 100644 --- a/src/compiler/corePublic.ts +++ b/src/compiler/corePublic.ts @@ -33,16 +33,6 @@ export interface ReadonlyCollection { keys(): IterableIterator; } -/** - * Common write methods for ES6 Map/Set. - * - * @internal - */ -export interface Collection extends ReadonlyCollection { - delete(key: K): boolean; - clear(): void; -} - /** @internal */ export type EqualityComparer = (a: T, b: T) => boolean; diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 52ecb1016e34f..c3b8babf5f954 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -503,8 +503,7 @@ export function canEmitTsBuildInfo(options: CompilerOptions) { return isIncrementalCompilation(options) || !!options.tscBuild; } -/** @internal */ -export function getOutputPathsForBundle(options: CompilerOptions, forceDtsPaths: boolean): EmitFileNames { +function getOutputPathsForBundle(options: CompilerOptions, forceDtsPaths: boolean): EmitFileNames { const outPath = options.outFile!; const jsFilePath = options.emitDeclarationOnly ? undefined : outPath; const sourceMapFilePath = jsFilePath && getSourceMapFilePath(jsFilePath, options); diff --git a/src/compiler/factory/emitHelpers.ts b/src/compiler/factory/emitHelpers.ts index 436695b1538ab..3b3dc97ddb43f 100644 --- a/src/compiler/factory/emitHelpers.ts +++ b/src/compiler/factory/emitHelpers.ts @@ -696,10 +696,8 @@ export function compareEmitHelpers(x: EmitHelper, y: EmitHelper) { /** * @param input Template string input strings * @param args Names which need to be made file-level unique - * - * @internal */ -export function helperString(input: TemplateStringsArray, ...args: string[]) { +function helperString(input: TemplateStringsArray, ...args: string[]) { return (uniqueName: EmitHelperUniqueNameCallback) => { let result = ""; for (let i = 0; i < args.length; i++) { @@ -713,8 +711,7 @@ export function helperString(input: TemplateStringsArray, ...args: string[]) { // TypeScript Helpers -/** @internal */ -export const decorateHelper: UnscopedEmitHelper = { +const decorateHelper: UnscopedEmitHelper = { name: "typescript:decorate", importName: "__decorate", scoped: false, @@ -728,8 +725,7 @@ export const decorateHelper: UnscopedEmitHelper = { };`, }; -/** @internal */ -export const metadataHelper: UnscopedEmitHelper = { +const metadataHelper: UnscopedEmitHelper = { name: "typescript:metadata", importName: "__metadata", scoped: false, @@ -740,8 +736,7 @@ export const metadataHelper: UnscopedEmitHelper = { };`, }; -/** @internal */ -export const paramHelper: UnscopedEmitHelper = { +const paramHelper: UnscopedEmitHelper = { name: "typescript:param", importName: "__param", scoped: false, @@ -753,8 +748,7 @@ export const paramHelper: UnscopedEmitHelper = { }; // ES Decorators Helpers -/** @internal */ -export const esDecorateHelper: UnscopedEmitHelper = { +const esDecorateHelper: UnscopedEmitHelper = { name: "typescript:esDecorate", importName: "__esDecorate", scoped: false, @@ -789,8 +783,7 @@ export const esDecorateHelper: UnscopedEmitHelper = { };`, }; -/** @internal */ -export const runInitializersHelper: UnscopedEmitHelper = { +const runInitializersHelper: UnscopedEmitHelper = { name: "typescript:runInitializers", importName: "__runInitializers", scoped: false, @@ -807,8 +800,7 @@ export const runInitializersHelper: UnscopedEmitHelper = { // ES2018 Helpers -/** @internal */ -export const assignHelper: UnscopedEmitHelper = { +const assignHelper: UnscopedEmitHelper = { name: "typescript:assign", importName: "__assign", scoped: false, @@ -827,8 +819,7 @@ export const assignHelper: UnscopedEmitHelper = { };`, }; -/** @internal */ -export const awaitHelper: UnscopedEmitHelper = { +const awaitHelper: UnscopedEmitHelper = { name: "typescript:await", importName: "__await", scoped: false, @@ -836,8 +827,7 @@ export const awaitHelper: UnscopedEmitHelper = { var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }`, }; -/** @internal */ -export const asyncGeneratorHelper: UnscopedEmitHelper = { +const asyncGeneratorHelper: UnscopedEmitHelper = { name: "typescript:asyncGenerator", importName: "__asyncGenerator", scoped: false, @@ -857,8 +847,7 @@ export const asyncGeneratorHelper: UnscopedEmitHelper = { };`, }; -/** @internal */ -export const asyncDelegator: UnscopedEmitHelper = { +const asyncDelegator: UnscopedEmitHelper = { name: "typescript:asyncDelegator", importName: "__asyncDelegator", scoped: false, @@ -871,8 +860,7 @@ export const asyncDelegator: UnscopedEmitHelper = { };`, }; -/** @internal */ -export const asyncValues: UnscopedEmitHelper = { +const asyncValues: UnscopedEmitHelper = { name: "typescript:asyncValues", importName: "__asyncValues", scoped: false, @@ -888,8 +876,7 @@ export const asyncValues: UnscopedEmitHelper = { // ES2018 Destructuring Helpers -/** @internal */ -export const restHelper: UnscopedEmitHelper = { +const restHelper: UnscopedEmitHelper = { name: "typescript:rest", importName: "__rest", scoped: false, @@ -909,8 +896,7 @@ export const restHelper: UnscopedEmitHelper = { // ES2017 Helpers -/** @internal */ -export const awaiterHelper: UnscopedEmitHelper = { +const awaiterHelper: UnscopedEmitHelper = { name: "typescript:awaiter", importName: "__awaiter", scoped: false, @@ -929,8 +915,7 @@ export const awaiterHelper: UnscopedEmitHelper = { // ES2015 Helpers -/** @internal */ -export const extendsHelper: UnscopedEmitHelper = { +const extendsHelper: UnscopedEmitHelper = { name: "typescript:extends", importName: "__extends", scoped: false, @@ -954,8 +939,7 @@ export const extendsHelper: UnscopedEmitHelper = { })();`, }; -/** @internal */ -export const templateObjectHelper: UnscopedEmitHelper = { +const templateObjectHelper: UnscopedEmitHelper = { name: "typescript:makeTemplateObject", importName: "__makeTemplateObject", scoped: false, @@ -967,8 +951,7 @@ export const templateObjectHelper: UnscopedEmitHelper = { };`, }; -/** @internal */ -export const readHelper: UnscopedEmitHelper = { +const readHelper: UnscopedEmitHelper = { name: "typescript:read", importName: "__read", scoped: false, @@ -991,8 +974,7 @@ export const readHelper: UnscopedEmitHelper = { };`, }; -/** @internal */ -export const spreadArrayHelper: UnscopedEmitHelper = { +const spreadArrayHelper: UnscopedEmitHelper = { name: "typescript:spreadArray", importName: "__spreadArray", scoped: false, @@ -1008,8 +990,7 @@ export const spreadArrayHelper: UnscopedEmitHelper = { };`, }; -/** @internal */ -export const propKeyHelper: UnscopedEmitHelper = { +const propKeyHelper: UnscopedEmitHelper = { name: "typescript:propKey", importName: "__propKey", scoped: false, @@ -1020,8 +1001,7 @@ export const propKeyHelper: UnscopedEmitHelper = { }; // https://tc39.es/ecma262/#sec-setfunctionname -/** @internal */ -export const setFunctionNameHelper: UnscopedEmitHelper = { +const setFunctionNameHelper: UnscopedEmitHelper = { name: "typescript:setFunctionName", importName: "__setFunctionName", scoped: false, @@ -1034,8 +1014,7 @@ export const setFunctionNameHelper: UnscopedEmitHelper = { // ES2015 Destructuring Helpers -/** @internal */ -export const valuesHelper: UnscopedEmitHelper = { +const valuesHelper: UnscopedEmitHelper = { name: "typescript:values", importName: "__values", scoped: false, @@ -1116,8 +1095,7 @@ export const valuesHelper: UnscopedEmitHelper = { // entering a finally block. // // For examples of how these are used, see the comments in ./transformers/generators.ts -/** @internal */ -export const generatorHelper: UnscopedEmitHelper = { +const generatorHelper: UnscopedEmitHelper = { name: "typescript:generator", importName: "__generator", scoped: false, @@ -1154,8 +1132,7 @@ export const generatorHelper: UnscopedEmitHelper = { // ES Module Helpers -/** @internal */ -export const createBindingHelper: UnscopedEmitHelper = { +const createBindingHelper: UnscopedEmitHelper = { name: "typescript:commonjscreatebinding", importName: "__createBinding", scoped: false, @@ -1174,8 +1151,7 @@ export const createBindingHelper: UnscopedEmitHelper = { }));`, }; -/** @internal */ -export const setModuleDefaultHelper: UnscopedEmitHelper = { +const setModuleDefaultHelper: UnscopedEmitHelper = { name: "typescript:commonjscreatevalue", importName: "__setModuleDefault", scoped: false, @@ -1189,8 +1165,7 @@ export const setModuleDefaultHelper: UnscopedEmitHelper = { }; // emit helper for `import * as Name from "foo"` -/** @internal */ -export const importStarHelper: UnscopedEmitHelper = { +const importStarHelper: UnscopedEmitHelper = { name: "typescript:commonjsimportstar", importName: "__importStar", scoped: false, @@ -1207,8 +1182,7 @@ export const importStarHelper: UnscopedEmitHelper = { }; // emit helper for `import Name from "foo"` -/** @internal */ -export const importDefaultHelper: UnscopedEmitHelper = { +const importDefaultHelper: UnscopedEmitHelper = { name: "typescript:commonjsimportdefault", importName: "__importDefault", scoped: false, @@ -1218,8 +1192,7 @@ export const importDefaultHelper: UnscopedEmitHelper = { };`, }; -/** @internal */ -export const exportStarHelper: UnscopedEmitHelper = { +const exportStarHelper: UnscopedEmitHelper = { name: "typescript:export-star", importName: "__exportStar", scoped: false, @@ -1278,10 +1251,8 @@ export const exportStarHelper: UnscopedEmitHelper = { * * Reading from a private static method (TS 4.3+): * __classPrivateFieldGet(, , "m", ) - * - * @internal */ -export const classPrivateFieldGetHelper: UnscopedEmitHelper = { +const classPrivateFieldGetHelper: UnscopedEmitHelper = { name: "typescript:classPrivateFieldGet", importName: "__classPrivateFieldGet", scoped: false, @@ -1343,10 +1314,8 @@ export const classPrivateFieldGetHelper: UnscopedEmitHelper = { * Writing to a private static method (TS 4.3+): * __classPrivateFieldSet(, , , "m", ) * NOTE: This always results in a runtime error. - * - * @internal */ -export const classPrivateFieldSetHelper: UnscopedEmitHelper = { +const classPrivateFieldSetHelper: UnscopedEmitHelper = { name: "typescript:classPrivateFieldSet", importName: "__classPrivateFieldSet", scoped: false, @@ -1370,10 +1339,8 @@ export const classPrivateFieldSetHelper: UnscopedEmitHelper = { * Usage: * This helper is used to transform `#field in expression` to * `__classPrivateFieldIn(, expression)` - * - * @internal */ -export const classPrivateFieldInHelper: UnscopedEmitHelper = { +const classPrivateFieldInHelper: UnscopedEmitHelper = { name: "typescript:classPrivateFieldIn", importName: "__classPrivateFieldIn", scoped: false, @@ -1384,10 +1351,7 @@ export const classPrivateFieldInHelper: UnscopedEmitHelper = { };`, }; -/** - * @internal - */ -export const addDisposableResourceHelper: UnscopedEmitHelper = { +const addDisposableResourceHelper: UnscopedEmitHelper = { name: "typescript:addDisposableResource", importName: "__addDisposableResource", scoped: false, @@ -1420,10 +1384,8 @@ export const addDisposableResourceHelper: UnscopedEmitHelper = { * The `s` variable represents two boolean flags from the `DisposeResources` algorithm: * - `needsAwait` (`1`) — Indicates that an `await using` for a `null` or `undefined` resource was encountered. * - `hasAwaited` (`2`) — Indicates that the algorithm has performed an Await. - * - * @internal */ -export const disposeResourcesHelper: UnscopedEmitHelper = { +const disposeResourcesHelper: UnscopedEmitHelper = { name: "typescript:disposeResources", importName: "__disposeResources", scoped: false, diff --git a/src/compiler/factory/emitNode.ts b/src/compiler/factory/emitNode.ts index 9d649979b8f24..5b90c578148d1 100644 --- a/src/compiler/factory/emitNode.ts +++ b/src/compiler/factory/emitNode.ts @@ -364,7 +364,7 @@ export function setIdentifierAutoGenerate void)[] = []; -/** @internal */ +/** @internal @knipignore */ export function addNodeFactoryPatcher(fn: (factory: NodeFactory) => void) { nodeFactoryPatchers.push(fn); } @@ -7295,10 +7295,8 @@ function aggregateChildrenFlags(children: MutableNodeArray) { /** * Gets the transform flags to exclude when unioning the transform flags of a subtree. - * - * @internal */ -export function getTransformFlagsSubtreeExclusions(kind: SyntaxKind) { +function getTransformFlagsSubtreeExclusions(kind: SyntaxKind) { if (kind >= SyntaxKind.FirstTypeNode && kind <= SyntaxKind.LastTypeNode) { return TransformFlags.TypeExcludes; } diff --git a/src/compiler/factory/utilities.ts b/src/compiler/factory/utilities.ts index 3e1ba2bf725b1..b06682c7d8718 100644 --- a/src/compiler/factory/utilities.ts +++ b/src/compiler/factory/utilities.ts @@ -17,8 +17,6 @@ import { BindingOrAssignmentPattern, BitwiseOperator, BitwiseOperatorOrHigher, - Block, - BooleanLiteral, CharacterCodes, CommaListExpression, compareStringsCaseSensitive, @@ -78,7 +76,6 @@ import { isAssignmentExpression, isAssignmentOperator, isAssignmentPattern, - isBlock, isCommaListExpression, isComputedPropertyName, isDeclarationBindingElement, @@ -91,10 +88,8 @@ import { isGeneratedPrivateIdentifier, isIdentifier, isInJSFile, - isLiteralExpression, isMemberName, isMinusToken, - isModifierKind, isObjectLiteralElementLike, isParenthesizedExpression, isPlusToken, @@ -139,7 +134,6 @@ import { NodeArray, NodeFactory, nodeIsSynthesized, - NullLiteral, NumericLiteral, ObjectLiteralElementLike, ObjectLiteralExpression, @@ -333,16 +327,6 @@ export function createForOfBindingStatement(factory: NodeFactory, node: ForIniti } } -/** @internal */ -export function insertLeadingStatement(factory: NodeFactory, dest: Statement, source: Statement): Block { - if (isBlock(dest)) { - return factory.updateBlock(dest, setTextRange(factory.createNodeArray([source, ...dest.statements]), dest.statements)); - } - else { - return factory.createBlock(factory.createNodeArray([dest, source]), /*multiLine*/ true); - } -} - /** @internal */ export function createExpressionFromEntityName(factory: NodeFactory, node: EntityName | Expression): Expression { if (isQualifiedName(node)) { @@ -679,15 +663,6 @@ export function walkUpOuterExpressions(node: Expression, kinds = OuterExpression return parent; } -/** @internal */ -export function skipAssertions(node: Expression): Expression; -/** @internal */ -export function skipAssertions(node: Node): Node; -/** @internal */ -export function skipAssertions(node: Node): Node { - return skipOuterExpressions(node, OuterExpressionKinds.Assertions); -} - /** @internal */ export function startOnNewLine(node: T): T { return setStartsOnNewLine(node, /*newLine*/ true); @@ -761,8 +736,7 @@ export function createExternalHelpersImportDeclarationIfNeeded(nodeFactory: Node } } -/** @internal */ -export function getOrCreateExternalHelpersModuleNameIfNeeded(factory: NodeFactory, node: SourceFile, compilerOptions: CompilerOptions, hasExportStarsToExportValues?: boolean, hasImportStarOrImportDefault?: boolean) { +function getOrCreateExternalHelpersModuleNameIfNeeded(factory: NodeFactory, node: SourceFile, compilerOptions: CompilerOptions, hasExportStarsToExportValues?: boolean, hasImportStarOrImportDefault?: boolean) { if (compilerOptions.importHelpers && isEffectiveExternalModule(node, compilerOptions)) { const externalHelpersModuleName = getExternalHelpersModuleName(node); if (externalHelpersModuleName) { @@ -1116,7 +1090,7 @@ export function getJSDocTypeAliasName(fullName: JSDocNamespaceBody | undefined) } } -/** @internal */ +/** @internal @knipignore */ export function canHaveIllegalType(node: Node): node is HasIllegalType { const kind = node.kind; return kind === SyntaxKind.Constructor @@ -1183,16 +1157,6 @@ export function isModuleName(node: Node): node is ModuleName { return isIdentifier(node) || isStringLiteral(node); } -/** @internal */ -export function isLiteralTypeLikeExpression(node: Node): node is NullLiteral | BooleanLiteral | LiteralExpression | PrefixUnaryExpression { - const kind = node.kind; - return kind === SyntaxKind.NullKeyword - || kind === SyntaxKind.TrueKeyword - || kind === SyntaxKind.FalseKeyword - || isLiteralExpression(node) - || isPrefixUnaryExpression(node); -} - function isExponentiationOperator(kind: SyntaxKind): kind is ExponentiationOperator { return kind === SyntaxKind.AsteriskAsteriskToken; } @@ -1521,12 +1485,6 @@ export function isExportOrDefaultModifier(node: Node): node is ExportKeyword | D return isExportOrDefaultKeywordKind(kind); } -/** @internal */ -export function isNonExportDefaultModifier(node: Node): node is Exclude { - const kind = node.kind; - return isModifierKind(kind) && !isExportOrDefaultKeywordKind(kind); -} - /** * If `nodes` is not undefined, creates an empty `NodeArray` that preserves the `pos` and `end` of `nodes`. * @internal diff --git a/src/compiler/moduleNameResolver.ts b/src/compiler/moduleNameResolver.ts index 59a352a223547..01c325c443d77 100644 --- a/src/compiler/moduleNameResolver.ts +++ b/src/compiler/moduleNameResolver.ts @@ -967,8 +967,7 @@ export interface CacheWithRedirects { /** @internal */ export type RedirectsCacheKey = string & { __compilerOptionsKey: any; }; -/** @internal */ -export function createCacheWithRedirects(ownOptions: CompilerOptions | undefined, optionsToRedirectsKey: Map): CacheWithRedirects { +function createCacheWithRedirects(ownOptions: CompilerOptions | undefined, optionsToRedirectsKey: Map): CacheWithRedirects { const redirectsMap = new Map>(); const redirectsKeyToMap = new Map>(); let ownMap = new Map(); @@ -1752,8 +1751,10 @@ function tryResolveJSModuleWorker(moduleName: string, initialDir: string, host: /*conditions*/ undefined, ); } + +// knip applies the internal marker to _all_ declarations, not just the one overload. export function bundlerModuleNameResolver(moduleName: string, containingFile: string, compilerOptions: CompilerOptions, host: ModuleResolutionHost, cache?: ModuleResolutionCache, redirectedReference?: ResolvedProjectReference): ResolvedModuleWithFailedLookupLocations; -/** @internal */ +/** @internal @knipignore */ export function bundlerModuleNameResolver(moduleName: string, containingFile: string, compilerOptions: CompilerOptions, host: ModuleResolutionHost, cache?: ModuleResolutionCache, redirectedReference?: ResolvedProjectReference, conditions?: string[]): ResolvedModuleWithFailedLookupLocations; // eslint-disable-line @typescript-eslint/unified-signatures export function bundlerModuleNameResolver(moduleName: string, containingFile: string, compilerOptions: CompilerOptions, host: ModuleResolutionHost, cache?: ModuleResolutionCache, redirectedReference?: ResolvedProjectReference, conditions?: string[]): ResolvedModuleWithFailedLookupLocations { const containingDirectory = getDirectoryPath(containingFile); @@ -2432,8 +2433,7 @@ function readPackageJsonPeerDependencies(packageJsonInfo: PackageJsonInfo, state return result; } -/** @internal */ -export function getPackageJsonInfo(packageDirectory: string, onlyRecordFailures: boolean, state: ModuleResolutionState): PackageJsonInfo | undefined { +function getPackageJsonInfo(packageDirectory: string, onlyRecordFailures: boolean, state: ModuleResolutionState): PackageJsonInfo | undefined { const { host, traceEnabled } = state; const packageJsonPath = combinePaths(packageDirectory, "package.json"); if (onlyRecordFailures) { diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 5859e7cf37190..23267f21866e7 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -424,6 +424,7 @@ let SourceFileConstructor: new (kind: SyntaxKind.SourceFile, pos: number, end: n * NOTE: You should not use this, it is only exported to support `createNode` in `~/src/deprecatedCompat/deprecations.ts`. * * @internal + * @knipignore */ export const parseBaseNodeFactory: BaseNodeFactory = { createBaseSourceFileNode: kind => new (SourceFileConstructor || (SourceFileConstructor = objectAllocator.getSourceFileConstructor()))(kind, -1, -1), diff --git a/src/compiler/path.ts b/src/compiler/path.ts index cbafbb785147f..f4841c97cdf4e 100644 --- a/src/compiler/path.ts +++ b/src/compiler/path.ts @@ -907,8 +907,7 @@ export function startsWithDirectory(fileName: string, directoryName: string, get //// Relative Paths -/** @internal */ -export function getPathComponentsRelativeTo(from: string, to: string, stringEqualityComparer: (a: string, b: string) => boolean, getCanonicalFileName: GetCanonicalFileName) { +function getPathComponentsRelativeTo(from: string, to: string, stringEqualityComparer: (a: string, b: string) => boolean, getCanonicalFileName: GetCanonicalFileName) { const fromComponents = reducePathComponents(getPathComponents(from)); const toComponents = reducePathComponents(getPathComponents(to)); diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 9893aa5a5a251..0b26847b20b12 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -1374,8 +1374,7 @@ export function getImpliedNodeFormatForFileWorker( } } -/** @internal */ -export const plainJSErrors = new Set([ +const plainJSErrors = new Set([ // binder errors Diagnostics.Cannot_redeclare_block_scoped_variable_0.code, Diagnostics.A_module_cannot_have_multiple_default_exports.code, diff --git a/src/compiler/resolutionCache.ts b/src/compiler/resolutionCache.ts index 6d160656a0780..50abd45f82fe7 100644 --- a/src/compiler/resolutionCache.ts +++ b/src/compiler/resolutionCache.ts @@ -34,7 +34,6 @@ import { getResolvedTypeReferenceDirectiveFromResolution, HasInvalidatedLibResolutions, HasInvalidatedResolutions, - hasTrailingDirectorySeparator, ignoredPaths, inferredTypesContainingFile, isDiskPathRoot, @@ -486,11 +485,6 @@ export function getRootDirectoryOfResolutionCache(rootDirForResolution: string, normalized; } -/** @internal */ -export function getRootPathSplitLength(rootPath: Path) { - return rootPath.split(directorySeparator).length - (hasTrailingDirectorySeparator(rootPath) ? 1 : 0); -} - function getModuleResolutionHost(resolutionHost: ResolutionCacheHost) { return resolutionHost.getCompilerHost?.() || resolutionHost; } diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index e404a6eb15c94..fe0a99d86488b 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -418,12 +418,12 @@ export function stringToToken(s: string): SyntaxKind | undefined { const regExpFlagCharCodes = makeReverseMap(charCodeToRegExpFlag); -/** @internal */ +/** @internal @knipignore */ export function regularExpressionFlagToCharacterCode(f: RegularExpressionFlags): CharacterCodes | undefined { return regExpFlagCharCodes[f]; } -/** @internal */ +/** @internal @knipignore */ export function characterCodeToRegularExpressionFlag(ch: CharacterCodes): RegularExpressionFlags | undefined { return charCodeToRegExpFlag.get(ch); } @@ -602,8 +602,7 @@ function isWordCharacter(ch: number): boolean { return isASCIILetter(ch) || isDigit(ch) || ch === CharacterCodes._; } -/** @internal */ -export function isOctalDigit(ch: number): boolean { +function isOctalDigit(ch: number): boolean { return ch >= CharacterCodes._0 && ch <= CharacterCodes._7; } @@ -788,15 +787,13 @@ function scanConflictMarkerTrivia(text: string, pos: number, error?: (diag: Diag const shebangTriviaRegex = /^#!.*/; -/** @internal */ -export function isShebangTrivia(text: string, pos: number) { +function isShebangTrivia(text: string, pos: number) { // Shebangs check must only be done at the start of the file Debug.assert(pos === 0); return shebangTriviaRegex.test(text); } -/** @internal */ -export function scanShebangTrivia(text: string, pos: number) { +function scanShebangTrivia(text: string, pos: number) { const shebang = shebangTriviaRegex.exec(text)![0]; pos = pos + shebang.length; return pos; diff --git a/src/compiler/sourcemap.ts b/src/compiler/sourcemap.ts index fbc30ba0c6ddd..fff807e98cf6a 100644 --- a/src/compiler/sourcemap.ts +++ b/src/compiler/sourcemap.ts @@ -405,8 +405,7 @@ function isStringOrNull(x: any) { return typeof x === "string" || x === null; } -/** @internal */ -export function isRawSourceMap(x: any): x is RawSourceMap { +function isRawSourceMap(x: any): x is RawSourceMap { return x !== null && typeof x === "object" && x.version === 3 diff --git a/src/compiler/sys.ts b/src/compiler/sys.ts index 57c945d868a1a..9c8c00859491e 100644 --- a/src/compiler/sys.ts +++ b/src/compiler/sys.ts @@ -1994,7 +1994,7 @@ export let sys: System = (() => { return sys!; })(); -/** @internal */ +/** @internal @knipignore */ export function setSys(s: System) { sys = s; } diff --git a/src/compiler/transformers/classThis.ts b/src/compiler/transformers/classThis.ts index d6678e6c082a2..e357c9b6e4f8b 100644 --- a/src/compiler/transformers/classThis.ts +++ b/src/compiler/transformers/classThis.ts @@ -29,9 +29,8 @@ import { * @param classThis The identifier to use for the captured static `this` reference, usually with the name `_classThis`. * @param thisExpression Overrides the expression to use for the actual `this` reference. This can be used to provide an * expression that has already had its `EmitFlags` set or may have been tracked to prevent substitution. - * @internal */ -export function createClassThisAssignmentBlock(factory: NodeFactory, classThis: Identifier, thisExpression = factory.createThis()): ClassThisAssignmentBlock { +function createClassThisAssignmentBlock(factory: NodeFactory, classThis: Identifier, thisExpression = factory.createThis()): ClassThisAssignmentBlock { // produces: // // static { _classThis = this; } diff --git a/src/compiler/transformers/namedEvaluation.ts b/src/compiler/transformers/namedEvaluation.ts index 785ed280c4158..ab10bc1510c96 100644 --- a/src/compiler/transformers/namedEvaluation.ts +++ b/src/compiler/transformers/namedEvaluation.ts @@ -52,9 +52,8 @@ import { /** * Gets a string literal to use as the assigned name of an anonymous class or function declaration. - * @internal */ -export function getAssignedNameOfIdentifier(factory: NodeFactory, name: Identifier, expression: WrappedExpression): StringLiteral { +function getAssignedNameOfIdentifier(factory: NodeFactory, name: Identifier, expression: WrappedExpression): StringLiteral { const original = getOriginalNode(skipOuterExpressions(expression)); if ( (isClassDeclaration(original) || isFunctionDeclaration(original)) && @@ -98,9 +97,8 @@ function getAssignedNameOfPropertyName(context: TransformationContext, name: Pro * side effects. * @param thisExpression Overrides the expression to use for the actual `this` reference. This can be used to provide an * expression that has already had its `EmitFlags` set or may have been tracked to prevent substitution. - * @internal */ -export function createClassNamedEvaluationHelperBlock(context: TransformationContext, assignedName: Expression, thisExpression: Expression = context.factory.createThis()): ClassNamedEvaluationHelperBlock { +function createClassNamedEvaluationHelperBlock(context: TransformationContext, assignedName: Expression, thisExpression: Expression = context.factory.createThis()): ClassNamedEvaluationHelperBlock { // produces: // // static { __setFunctionName(this, "C"); } diff --git a/src/compiler/transformers/utilities.ts b/src/compiler/transformers/utilities.ts index 33def985547b4..f6fc531816948 100644 --- a/src/compiler/transformers/utilities.ts +++ b/src/compiler/transformers/utilities.ts @@ -429,8 +429,7 @@ export class IdentifierNameMap { } } -/** @internal */ -export class IdentifierNameMultiMap extends IdentifierNameMap { +class IdentifierNameMultiMap extends IdentifierNameMap { add(key: Identifier, value: V): V[] { let values = this.get(key); if (values) { @@ -801,8 +800,7 @@ export interface LexicalEnvironment | undefined; } -/** @internal */ -export function walkUpLexicalEnvironments( +function walkUpLexicalEnvironments( env: LexicalEnvironment | undefined, cb: (env: LexicalEnvironment) => U, ): U | undefined { @@ -856,8 +854,7 @@ export function accessPrivateIdentifier< return walkUpLexicalEnvironments(env, env => getPrivateIdentifier(env.privateEnv, name)); } -/** @internal */ -export function isSimpleParameter(node: ParameterDeclaration) { +function isSimpleParameter(node: ParameterDeclaration) { return !node.initializer && isIdentifier(node.name); } diff --git a/src/compiler/tsbuildPublic.ts b/src/compiler/tsbuildPublic.ts index f22c3d53db239..b3bab89503dd7 100644 --- a/src/compiler/tsbuildPublic.ts +++ b/src/compiler/tsbuildPublic.ts @@ -198,10 +198,8 @@ function getOrCreateValueMapFromConfigFileMap(configFileMap /** * Helper to use now method instead of current date for testing purposes to get consistent baselines - * - * @internal */ -export function getCurrentTime(host: { now?(): Date; }) { +function getCurrentTime(host: { now?(): Date; }) { return host.now ? host.now() : new Date(); } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 33f1b459215f6..62fae4c0e57c2 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -1302,7 +1302,7 @@ export type HasExpressionInitializer = | PropertyAssignment | EnumMember; -/** @internal */ +/** @internal @knipignore */ export type HasIllegalExpressionInitializer = PropertySignature; // NOTE: Changing the following list requires changes to: @@ -2308,7 +2308,7 @@ export interface TypeOperatorNode extends TypeNode { readonly type: TypeNode; } -/** @internal */ +/** @internal @knipignore */ export interface UniqueTypeOperatorNode extends TypeOperatorNode { readonly operator: SyntaxKind.UniqueKeyword; } @@ -2660,7 +2660,7 @@ export type ObjectBindingOrAssignmentElement = | SpreadAssignment // AssignmentRestProperty ; -/** @internal */ +/** @internal @knipignore */ export type ObjectAssignmentElement = Exclude; export type ArrayBindingOrAssignmentElement = @@ -2691,7 +2691,7 @@ export type BindingOrAssignmentElementTarget = | ElementAccessExpression | OmittedExpression; -/** @internal */ +/** @internal @knipignore */ export type AssignmentElementTarget = Exclude; export type ObjectBindingOrAssignmentPattern = @@ -5493,12 +5493,6 @@ export const enum SymbolAccessibility { NotResolved, } -/** @internal */ -export const enum SyntheticSymbolKind { - UnionOrIntersection, - Spread, -} - export const enum TypePredicateKind { This, Identifier, @@ -7994,12 +7988,6 @@ export interface CompilerHost extends ModuleResolutionHost { */ export type SourceOfProjectReferenceRedirect = string | true; -/** @internal */ -export interface ResolvedProjectReferenceCallbacks { - getSourceOfProjectReferenceRedirect(fileName: string): SourceOfProjectReferenceRedirect | undefined; - forEachResolvedProjectReference(cb: (resolvedProjectReference: ResolvedProjectReference) => T | undefined): T | undefined; -} - /** @internal */ export const enum TransformFlags { None = 0, @@ -8217,9 +8205,6 @@ export interface UnscopedEmitHelper extends EmitHelperBase { export type EmitHelper = ScopedEmitHelper | UnscopedEmitHelper; -/** @internal */ -export type UniqueNameHandler = (baseName: string, checkFn?: (name: string) => boolean, optimistic?: boolean) => string; - export type EmitHelperUniqueNameCallback = (name: string) => string; /** diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 99cb0c7f869da..ea61f17250ce3 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -11,7 +11,7 @@ import { AmpersandAmpersandEqualsToken, AnyImportOrBareOrAccessedRequire, AnyImportOrReExport, - AnyImportOrRequireStatement, + type AnyImportOrRequireStatement, AnyImportSyntax, AnyValidImportOrReExport, append, @@ -150,7 +150,6 @@ import { flatMapToMutable, flatten, forEach, - forEachAncestorDirectory, forEachChild, forEachChildRecursively, ForInOrOfStatement, @@ -523,7 +522,6 @@ import { StringLiteralType, stringToToken, SuperCall, - SuperExpression, SuperProperty, SwitchStatement, Symbol, @@ -689,8 +687,7 @@ export function changesAffectModuleResolution(oldOptions: CompilerOptions, newOp optionsHaveModuleResolutionChanges(oldOptions, newOptions); } -/** @internal */ -export function optionsHaveModuleResolutionChanges(oldOptions: CompilerOptions, newOptions: CompilerOptions) { +function optionsHaveModuleResolutionChanges(oldOptions: CompilerOptions, newOptions: CompilerOptions) { return optionsHaveChanges(oldOptions, newOptions, moduleResolutionOptionDeclarations); } @@ -964,7 +961,7 @@ export function getStartPositionOfLine(line: number, sourceFile: SourceFileLike) } // This is a useful function for debugging purposes. -/** @internal */ +/** @internal @knipignore */ export function nodePosToString(node: Node): string { const file = getSourceFileOfNode(node); const loc = getLineAndCharacterOfPosition(file, node.pos); @@ -1107,6 +1104,7 @@ export function insertStatementsAfterCustomPrologue(to: T[] * Prepends statements to an array while taking care of prologue directives. * * @internal + * @knipignore */ export function insertStatementAfterStandardPrologue(to: T[], statement: T | undefined): T[] { return insertStatementAfterPrologue(to, statement, isPrologueDirective); @@ -1900,10 +1898,8 @@ export function isNonGlobalAmbientModule(node: Node): node is ModuleDeclaration * 1. An actual declaration: namespace X { ... } * 2. A Javascript declaration, which is: * An identifier in a nested property access expression: Y in `X.Y.Z = { ... }` - * - * @internal */ -export function isEffectiveModuleDeclaration(node: Node) { +function isEffectiveModuleDeclaration(node: Node) { return isModuleDeclaration(node) || isIdentifier(node); } @@ -2579,12 +2575,10 @@ export function getJSDocCommentRanges(node: Node, text: string) { text.charCodeAt(comment.pos + 3) !== CharacterCodes.slash); } -/** @internal */ -export const fullTripleSlashReferencePathRegEx = /^(\/\/\/\s*/; +const fullTripleSlashReferencePathRegEx = /^(\/\/\/\s*/; const fullTripleSlashReferenceTypeReferenceDirectiveRegEx = /^(\/\/\/\s*/; const fullTripleSlashLibReferenceRegEx = /^(\/\/\/\s*/; -/** @internal */ -export const fullTripleSlashAMDReferencePathRegEx = /^(\/\/\/\s*/; +const fullTripleSlashAMDReferencePathRegEx = /^(\/\/\/\s*/; const fullTripleSlashAMDModuleRegEx = /^\/\/\/\s*/; const defaultLibReferenceRegEx = /^(\/\/\/\s*/; @@ -2690,17 +2684,6 @@ function isPartOfTypeExpressionWithTypeArguments(node: Node) { || isHeritageClause(node.parent) && !isExpressionWithTypeArgumentsInClassExtendsClause(node); } -/** @internal */ -export function isChildOfNodeWithKind(node: Node, kind: SyntaxKind): boolean { - while (node) { - if (node.kind === kind) { - return true; - } - node = node.parent; - } - return false; -} - // Warning: This has the same semantics as the forEach family of functions, // in that traversal terminates in the event that 'visitor' supplies a truthy value. /** @internal */ @@ -3217,12 +3200,6 @@ export function getImmediatelyInvokedFunctionExpression(func: Node): CallExpress } } -/** @internal */ -export function isSuperOrSuperProperty(node: Node): node is SuperExpression | SuperProperty { - return node.kind === SyntaxKind.SuperKeyword - || isSuperProperty(node); -} - /** * Determines whether a node is a property or element access expression for `super`. * @@ -3624,11 +3601,6 @@ export function isSourceFileJS(file: SourceFile): boolean { return isInJSFile(file); } -/** @internal */ -export function isSourceFileNotJS(file: SourceFile): boolean { - return !isInJSFile(file); -} - /** @internal */ export function isInJSFile(node: Node | undefined): boolean { return !!node && !!(node.flags & NodeFlags.JavaScriptFile); @@ -3943,19 +3915,15 @@ export function isBindableObjectDefinePropertyCall(expr: CallExpression): expr i /** * x.y OR x[0] - * - * @internal */ -export function isLiteralLikeAccess(node: Node): node is LiteralLikeElementAccessExpression | PropertyAccessExpression { +function isLiteralLikeAccess(node: Node): node is LiteralLikeElementAccessExpression | PropertyAccessExpression { return isPropertyAccessExpression(node) || isLiteralLikeElementAccess(node); } /** * x[0] OR x['a'] OR x[Symbol.y] - * - * @internal */ -export function isLiteralLikeElementAccess(node: Node): node is LiteralLikeElementAccessExpression { +function isLiteralLikeElementAccess(node: Node): node is LiteralLikeElementAccessExpression { return isElementAccessExpression(node) && isStringOrNumericLiteralLike(node.argumentExpression); } @@ -4302,8 +4270,7 @@ function getSourceOfDefaultedAssignment(node: Node): Node | undefined { : undefined; } -/** @internal */ -export function getSingleInitializerOfVariableStatementOrPropertyDeclaration(node: Node): Expression | undefined { +function getSingleInitializerOfVariableStatementOrPropertyDeclaration(node: Node): Expression | undefined { switch (node.kind) { case SyntaxKind.VariableStatement: const v = getSingleVariableOfVariableStatement(node); @@ -4630,7 +4597,7 @@ export function getTypeParameterFromJsDoc(node: TypeParameterDeclaration & { par return typeParameters && find(typeParameters, p => p.name.escapedText === name); } -/** @internal */ +/** @internal @knipignore */ export function hasTypeArguments(node: Node): node is HasTypeArguments { return !!(node as HasTypeArguments).typeArguments; } @@ -4946,46 +4913,6 @@ export function isIdentifierName(node: Identifier): boolean { return false; } -// An alias symbol is created by one of the following declarations: -// import = ... -// import from ... -// import * as from ... -// import { x as } from ... -// export { x as } from ... -// export * as ns from ... -// export = -// export default -// module.exports = -// module.exports.x = -// const x = require("...") -// const { x } = require("...") -// const x = require("...").y -// const { x } = require("...").y -/** @internal */ -export function isAliasSymbolDeclaration(node: Node): boolean { - if ( - node.kind === SyntaxKind.ImportEqualsDeclaration || - node.kind === SyntaxKind.NamespaceExportDeclaration || - node.kind === SyntaxKind.ImportClause && !!(node as ImportClause).name || - node.kind === SyntaxKind.NamespaceImport || - node.kind === SyntaxKind.NamespaceExport || - node.kind === SyntaxKind.ImportSpecifier || - node.kind === SyntaxKind.ExportSpecifier || - node.kind === SyntaxKind.ExportAssignment && exportAssignmentIsAlias(node as ExportAssignment) - ) { - return true; - } - - return isInJSFile(node) && ( - isBinaryExpression(node) && getAssignmentDeclarationKind(node) === AssignmentDeclarationKind.ModuleExports && exportAssignmentIsAlias(node) || - isPropertyAccessExpression(node) - && isBinaryExpression(node.parent) - && node.parent.left === node - && node.parent.operatorToken.kind === SyntaxKind.EqualsToken - && isAliasableExpression(node.parent.right) - ); -} - /** @internal */ export function getAliasDeclarationFromName(node: EntityName): Declaration | undefined { switch (node.parent.kind) { @@ -5124,23 +5051,12 @@ export function isNonContextualKeyword(token: SyntaxKind): boolean { return isKeyword(token) && !isContextualKeyword(token); } -/** @internal */ -export function isFutureReservedKeyword(token: SyntaxKind): boolean { - return SyntaxKind.FirstFutureReservedWord <= token && token <= SyntaxKind.LastFutureReservedWord; -} - /** @internal */ export function isStringANonContextualKeyword(name: string) { const token = stringToToken(name); return token !== undefined && isNonContextualKeyword(token); } -/** @internal */ -export function isStringAKeyword(name: string) { - const token = stringToToken(name); - return token !== undefined && isKeyword(token); -} - /** @internal */ export function isIdentifierANonContextualKeyword(node: Identifier): boolean { const originalKeywordKind = identifierToKeywordKind(node); @@ -5292,11 +5208,6 @@ export function getEscapedTextOfIdentifierOrLiteral(node: PropertyNameLiteral): return isMemberName(node) ? node.escapedText : isJsxNamespacedName(node) ? getEscapedTextOfJsxNamespacedName(node) : escapeLeadingUnderscores(node.text); } -/** @internal */ -export function getPropertyNameForUniqueESSymbol(symbol: Symbol): __String { - return `__@${getSymbolId(symbol)}@${symbol.escapedName}` as __String; -} - /** @internal */ export function getSymbolNameForPrivateIdentifier(containingClassSymbol: Symbol, description: __String): __String { return `__#${getSymbolId(containingClassSymbol)}@${description}` as __String; @@ -5312,24 +5223,13 @@ export function isPrivateIdentifierSymbol(symbol: Symbol): boolean { return startsWith(symbol.escapedName as string, "__#"); } -/** - * Includes the word "Symbol" with unicode escapes - * - * @internal - */ -export function isESSymbolIdentifier(node: Node): boolean { - return node.kind === SyntaxKind.Identifier && (node as Identifier).escapedText === "Symbol"; -} - /** * Indicates whether a property name is the special `__proto__` property. * Per the ECMA-262 spec, this only matters for property assignments whose name is * the Identifier `__proto__`, or the string literal `"__proto__"`, but not for * computed property names. - * - * @internal */ -export function isProtoSetter(node: PropertyName) { +function isProtoSetter(node: PropertyName) { return isIdentifier(node) ? idText(node) === "__proto__" : isStringLiteral(node) && node.text === "__proto__"; } @@ -5344,9 +5244,8 @@ export type AnonymousFunctionDefinition = * Indicates whether an expression is an anonymous function definition. * * @see https://tc39.es/ecma262/#sec-isanonymousfunctiondefinition - * @internal */ -export function isAnonymousFunctionDefinition(node: Expression, cb?: (node: AnonymousFunctionDefinition) => boolean): node is WrappedExpression { +function isAnonymousFunctionDefinition(node: Expression, cb?: (node: AnonymousFunctionDefinition) => boolean): node is WrappedExpression { node = skipOuterExpressions(node); switch (node.kind) { case SyntaxKind.ClassExpression: @@ -5491,11 +5390,6 @@ export function nodeIsSynthesized(range: TextRange): boolean { || positionIsSynthesized(range.end); } -/** @internal */ -export function getOriginalSourceFile(sourceFile: SourceFile) { - return getParseTreeNode(sourceFile, isSourceFile) || sourceFile; -} - /** @internal */ export const enum Associativity { Left, @@ -5556,8 +5450,7 @@ export function getExpressionPrecedence(expression: Expression) { return getOperatorPrecedence(expression.kind, operator, hasArguments); } -/** @internal */ -export function getOperator(expression: Expression): SyntaxKind { +function getOperator(expression: Expression): SyntaxKind { if (expression.kind === SyntaxKind.BinaryExpression) { return (expression as BinaryExpression).operatorToken.kind; } @@ -6160,8 +6053,7 @@ export function getIndentString(level: number) { return indentStrings[level]; } -/** @internal */ -export function getIndentSize() { +function getIndentSize() { return indentStrings[1].length; } @@ -6548,8 +6440,7 @@ export function getSourceFilePathInNewDir(fileName: string, host: EmitHost, newD return getSourceFilePathInNewDirWorker(fileName, newDirPath, host.getCurrentDirectory(), host.getCommonSourceDirectory(), f => host.getCanonicalFileName(f)); } -/** @internal */ -export function getSourceFilePathInNewDirWorker(fileName: string, newDirPath: string, currentDirectory: string, commonSourceDirectory: string, getCanonicalFileName: GetCanonicalFileName): string { +function getSourceFilePathInNewDirWorker(fileName: string, newDirPath: string, currentDirectory: string, commonSourceDirectory: string, getCanonicalFileName: GetCanonicalFileName): string { let sourceFilePath = getNormalizedAbsolutePath(fileName, currentDirectory); const isSourceFileInCommonSourceDirectory = getCanonicalFileName(sourceFilePath).indexOf(getCanonicalFileName(commonSourceDirectory)) === 0; sourceFilePath = isSourceFileInCommonSourceDirectory ? sourceFilePath.substring(commonSourceDirectory.length) : sourceFilePath; @@ -6608,8 +6499,7 @@ export function getLineOfLocalPosition(sourceFile: SourceFile, pos: number) { return computeLineOfPosition(lineStarts, pos); } -/** @internal */ -export function getLineOfLocalPositionFromLineMap(lineMap: readonly number[], pos: number) { +function getLineOfLocalPositionFromLineMap(lineMap: readonly number[], pos: number) { return computeLineOfPosition(lineMap, pos); } @@ -6793,13 +6683,11 @@ export function getEffectiveSetAccessorTypeAnnotationNode(node: SetAccessorDecla return parameter && getEffectiveTypeAnnotationNode(parameter); } -/** @internal */ -export function emitNewLineBeforeLeadingComments(lineMap: readonly number[], writer: EmitTextWriter, node: TextRange, leadingComments: readonly CommentRange[] | undefined) { +function emitNewLineBeforeLeadingComments(lineMap: readonly number[], writer: EmitTextWriter, node: TextRange, leadingComments: readonly CommentRange[] | undefined) { emitNewLineBeforeLeadingCommentsOfPosition(lineMap, writer, node.pos, leadingComments); } -/** @internal */ -export function emitNewLineBeforeLeadingCommentsOfPosition(lineMap: readonly number[], writer: EmitTextWriter, pos: number, leadingComments: readonly CommentRange[] | undefined) { +function emitNewLineBeforeLeadingCommentsOfPosition(lineMap: readonly number[], writer: EmitTextWriter, pos: number, leadingComments: readonly CommentRange[] | undefined) { // If the leading comments start on different line than the start of node, write new line if ( leadingComments && leadingComments.length && pos !== leadingComments[0].pos && @@ -6820,8 +6708,7 @@ export function emitNewLineBeforeLeadingCommentOfPosition(lineMap: readonly numb } } -/** @internal */ -export function emitComments( +function emitComments( text: string, lineMap: readonly number[], writer: EmitTextWriter, @@ -7089,7 +6976,7 @@ export function getSelectedEffectiveModifierFlags(node: Node, flags: ModifierFla return getEffectiveModifierFlags(node) & flags; } -/** @internal */ +/** @internal @knipignore */ export function getSelectedSyntacticModifierFlags(node: Node, flags: ModifierFlags): ModifierFlags { return getSyntacticModifierFlags(node) & flags; } @@ -7186,6 +7073,7 @@ export function getEffectiveModifierFlagsNoCache(node: Node): ModifierFlags { * NOTE: This function does not use `parent` pointers and will not include modifiers from JSDoc. * * @internal + * @knipignore */ export function getSyntacticModifierFlagsNoCache(node: Node): ModifierFlags { let flags = canHaveModifiers(node) ? modifiersToFlags(node.modifiers) : ModifierFlags.None; @@ -7325,10 +7213,6 @@ export function isAssignmentExpression(node: Node, excludeCompoundAssignment?: b && isLeftHandSideExpression(node.left); } -/** @internal */ -export function isLeftHandSideOfAssignment(node: Node) { - return isAssignmentExpression(node.parent) && node.parent.left === node; -} /** @internal */ export function isDestructuringAssignment(node: Node): node is DestructuringAssignment { if (isAssignmentExpression(node, /*excludeCompoundAssignment*/ true)) { @@ -7739,17 +7623,6 @@ export function moveRangePastModifiers(node: Node): TextRange { : moveRangePastDecorators(node); } -/** - * Determines whether a TextRange has the same start and end positions. - * - * @param range A TextRange. - * - * @internal - */ -export function isCollapsedRange(range: TextRange) { - return range.pos === range.end; -} - /** * Creates a new TextRange for a token at the provides start position. * @@ -7781,7 +7654,7 @@ export function rangeEndPositionsAreOnSameLine(range1: TextRange, range2: TextRa return positionsAreOnSameLine(range1.end, range2.end, sourceFile); } -/** @internal */ +/** @internal @knipignore */ export function rangeStartIsOnSameLineAsRangeEnd(range1: TextRange, range2: TextRange, sourceFile: SourceFile) { return positionsAreOnSameLine(getStartPositionOfRange(range1, sourceFile, /*includeComments*/ false), range2.end, sourceFile); } @@ -7797,7 +7670,7 @@ export function getLinesBetweenRangeEndAndRangeStart(range1: TextRange, range2: return getLinesBetweenPositions(sourceFile, range1.end, range2Start); } -/** @internal */ +/** @internal @knipignore */ export function getLinesBetweenRangeEndPositions(range1: TextRange, range2: TextRange, sourceFile: SourceFile) { return getLinesBetweenPositions(sourceFile, range1.end, range2.end); } @@ -7812,7 +7685,7 @@ export function positionsAreOnSameLine(pos1: number, pos2: number, sourceFile: S return getLinesBetweenPositions(sourceFile, pos1, pos2) === 0; } -/** @internal */ +/** @internal @knipignore */ export function getStartPositionOfRange(range: TextRange, sourceFile: SourceFile, includeComments: boolean) { return positionIsSynthesized(range.pos) ? -1 : skipTrivia(sourceFile.text, range.pos, /*stopAfterLineBreak*/ false, includeComments); } @@ -8119,11 +7992,6 @@ export function getObjectFlags(type: Type): ObjectFlags { return type.flags & TypeFlags.ObjectFlagsType ? (type as ObjectFlagsType).objectFlags : 0; } -/** @internal */ -export function forSomeAncestorDirectory(directory: string, callback: (directory: string) => boolean): boolean { - return !!forEachAncestorDirectory(directory, d => callback(d) ? true : undefined); -} - /** @internal */ export function isUMDExportSymbol(symbol: Symbol | undefined): boolean { return !!symbol && !!symbol.declarations && !!symbol.declarations[0] && isNamespaceExportDeclaration(symbol.declarations[0]); @@ -8413,6 +8281,7 @@ const objectAllocatorPatchers: ((objectAllocator: ObjectAllocator) => void)[] = /** * Used by `deprecatedCompat` to patch the object allocator to apply deprecations. * @internal + * @knipignore */ export function addObjectAllocatorPatcher(fn: (objectAllocator: ObjectAllocator) => void) { objectAllocatorPatchers.push(fn); @@ -8630,8 +8499,7 @@ export function compareDiagnostics(d1: Diagnostic, d2: Diagnostic): Comparison { Comparison.EqualTo; } -/** @internal */ -export function compareDiagnosticsSkipRelatedInformation(d1: Diagnostic, d2: Diagnostic): Comparison { +function compareDiagnosticsSkipRelatedInformation(d1: Diagnostic, d2: Diagnostic): Comparison { const code1 = getDiagnosticCode(d1); const code2 = getDiagnosticCode(d2); return compareStringsCaseSensitive(getDiagnosticFilePath(d1), getDiagnosticFilePath(d2)) || @@ -9092,7 +8960,7 @@ export const getEmitScriptTarget = computedOptions.target.computeValue; export const getEmitModuleKind = computedOptions.module.computeValue; /** @internal */ export const getEmitModuleResolutionKind = computedOptions.moduleResolution.computeValue; -/** @internal */ +/** @internal @knipignore */ export const getEmitModuleDetectionKind = computedOptions.moduleDetection.computeValue; /** @internal */ export const getIsolatedModules = computedOptions.isolatedModules.computeValue; @@ -9395,8 +9263,7 @@ function escapeRegExpCharacter(match: string) { const wildcardCharCodes = [CharacterCodes.asterisk, CharacterCodes.question]; -/** @internal */ -export const commonPackageFolders: readonly string[] = ["node_modules", "bower_components", "jspm_packages"]; +const commonPackageFolders: readonly string[] = ["node_modules", "bower_components", "jspm_packages"]; const implicitExcludePathRegexPattern = `(?!(${commonPackageFolders.join("|")})(/|$))`; @@ -9758,17 +9625,14 @@ export function getScriptKindFromFileName(fileName: string): ScriptKind { /** * Groups of supported extensions in order of file resolution precedence. (eg, TS > TSX > DTS and seperately, CTS > DCTS) - * - * @internal */ -export const supportedTSExtensions: readonly Extension[][] = [[Extension.Ts, Extension.Tsx, Extension.Dts], [Extension.Cts, Extension.Dcts], [Extension.Mts, Extension.Dmts]]; +const supportedTSExtensions: readonly Extension[][] = [[Extension.Ts, Extension.Tsx, Extension.Dts], [Extension.Cts, Extension.Dcts], [Extension.Mts, Extension.Dmts]]; /** @internal */ export const supportedTSExtensionsFlat: readonly Extension[] = flatten(supportedTSExtensions); const supportedTSExtensionsWithJson: readonly Extension[][] = [...supportedTSExtensions, [Extension.Json]]; /** Must have ".d.ts" first because if ".ts" goes first, that will be detected as the extension instead of ".d.ts". */ const supportedTSExtensionsForExtractExtension: readonly Extension[] = [Extension.Dts, Extension.Dcts, Extension.Dmts, Extension.Cts, Extension.Mts, Extension.Ts, Extension.Tsx]; -/** @internal */ -export const supportedJSExtensions: readonly Extension[][] = [[Extension.Js, Extension.Jsx], [Extension.Mjs], [Extension.Cjs]]; +const supportedJSExtensions: readonly Extension[][] = [[Extension.Js, Extension.Jsx], [Extension.Mjs], [Extension.Cjs]]; /** @internal */ export const supportedJSExtensionsFlat: readonly Extension[] = flatten(supportedJSExtensions); const allSupportedExtensions: readonly Extension[][] = [[Extension.Ts, Extension.Tsx, Extension.Dts, Extension.Js, Extension.Jsx], [Extension.Cts, Extension.Dcts, Extension.Cjs], [Extension.Mts, Extension.Dmts, Extension.Mjs]]; @@ -9839,8 +9703,7 @@ export const enum ModuleSpecifierEnding { TsExtension, } -/** @internal */ -export function usesExtensionsOnImports({ imports }: SourceFile, hasExtension: (text: string) => boolean = or(hasJSFileExtension, hasTSFileExtension)): boolean { +function usesExtensionsOnImports({ imports }: SourceFile, hasExtension: (text: string) => boolean = or(hasJSFileExtension, hasTSFileExtension)): boolean { return firstDefined(imports, ({ text }) => pathIsRelative(text) && !fileExtensionIsOneOf(text, extensionsNotSupportingExtensionlessResolution) ? hasExtension(text) @@ -9969,7 +9832,7 @@ export function removeFileExtension(path: string): string { return path; } -/** @internal */ +/** @internal @knipignore */ export function tryRemoveExtension(path: string, extension: string): string | undefined { return fileExtensionIs(path, extension) ? removeExtension(path, extension) : undefined; } @@ -10454,24 +10317,6 @@ export function setParent(child: T | undefined, parent: T["paren return child; } -/** - * Bypasses immutability and directly sets the `parent` property of each `Node` in an array of nodes, if is not already set. - * - * @internal - */ -export function setEachParent(children: T, parent: T[number]["parent"]): T; -/** @internal */ -export function setEachParent(children: T | undefined, parent: T[number]["parent"]): T | undefined; -/** @internal */ -export function setEachParent(children: T | undefined, parent: T[number]["parent"]): T | undefined { - if (children) { - for (const child of children) { - setParent(child, parent); - } - } - return children; -} - /** * Bypasses immutability and directly sets the `parent` property of each `Node` recursively. * @param rootNode The root node from which to start the recursion. @@ -10786,11 +10631,6 @@ export function getNodeModulePathParts(fullPath: string): NodeModulePathParts | return state > States.NodeModules ? { topLevelNodeModulesIndex, topLevelPackageNameIndex, packageRootIndex, fileNameIndex } : undefined; } -/** @internal */ -export function getParameterTypeNode(parameter: ParameterDeclaration | JSDocParameterTag) { - return parameter.kind === SyntaxKind.JSDocParameterTag ? parameter.typeExpression?.type : parameter.type; -} - /** @internal */ export function isTypeDeclaration(node: Node): node is TypeParameterDeclaration | ClassDeclaration | InterfaceDeclaration | TypeAliasDeclaration | JSDocTypedefTag | JSDocCallbackTag | JSDocEnumTag | EnumDeclaration | ImportClause | ImportSpecifier | ExportSpecifier { switch (node.kind) { diff --git a/src/compiler/utilitiesPublic.ts b/src/compiler/utilitiesPublic.ts index 8c48394ddae26..dfc3f2d069bde 100644 --- a/src/compiler/utilitiesPublic.ts +++ b/src/compiler/utilitiesPublic.ts @@ -159,10 +159,8 @@ import { isKeyword, isModuleBlock, isNonNullExpression, - isNotEmittedStatement, isOmittedExpression, isParameter, - isPartiallyEmittedExpression, isPrivateIdentifier, isPropertyAccessExpression, isPropertyAssignment, @@ -239,7 +237,6 @@ import { NodeFlags, NonNullChain, normalizePath, - NotEmittedStatement, NullLiteral, ObjectBindingOrAssignmentElement, ObjectBindingOrAssignmentPattern, @@ -249,7 +246,6 @@ import { OptionalChainRoot, OuterExpressionKinds, ParameterDeclaration, - PartiallyEmittedExpression, pathIsRelative, PostfixUnaryExpression, PrefixUnaryExpression, @@ -258,7 +254,6 @@ import { PrivateIdentifierPropertyAccessExpression, PropertyAccessChain, PropertyAccessExpression, - PropertyDeclaration, PropertyName, QualifiedName, ScriptTarget, @@ -1265,11 +1260,6 @@ export function getJSDocTags(node: Node): readonly JSDocTag[] { return getJSDocTagsWorker(node, /*noCache*/ false); } -/** @internal */ -export function getJSDocTagsNoCache(node: Node): readonly JSDocTag[] { - return getJSDocTagsWorker(node, /*noCache*/ true); -} - /** Get the first JSDoc tag of a specified kind, or undefined if not present. */ function getFirstJSDocTag(node: Node, predicate: (tag: JSDocTag) => tag is T, noCache?: boolean): T | undefined { return find(getJSDocTagsWorker(node, noCache), predicate); @@ -1452,10 +1442,6 @@ export function isJSDocPropertyLikeTag(node: Node): node is JSDocPropertyLikeTag // // All node tests in the following list should *not* reference parent pointers so that // they may be used with transformations. -/** @internal */ -export function isNode(node: Node) { - return isNodeKind(node.kind); -} /** @internal */ export function isNodeKind(kind: SyntaxKind) { @@ -1767,19 +1753,6 @@ export function isMethodOrAccessor(node: Node): node is MethodDeclaration | Acce } } -/** @internal */ -export function isNamedClassElement(node: Node): node is MethodDeclaration | AccessorDeclaration | PropertyDeclaration { - switch (node.kind) { - case SyntaxKind.MethodDeclaration: - case SyntaxKind.GetAccessor: - case SyntaxKind.SetAccessor: - case SyntaxKind.PropertyDeclaration: - return true; - default: - return false; - } -} - // Type members export function isModifierLike(node: Node): node is ModifierLike { @@ -2114,12 +2087,6 @@ export function isAssertionExpression(node: Node): node is AssertionExpression { || kind === SyntaxKind.AsExpression; } -/** @internal */ -export function isNotEmittedOrPartiallyEmittedNode(node: Node): node is NotEmittedStatement | PartiallyEmittedExpression { - return isNotEmittedStatement(node) - || isPartiallyEmittedExpression(node); -} - // Statement export function isIterationStatement(node: Node, lookInLabeledStatements: false): node is IterationStatement; @@ -2139,8 +2106,7 @@ export function isIterationStatement(node: Node, lookInLabeledStatements: boolea return false; } -/** @internal */ -export function isScopeMarker(node: Node) { +function isScopeMarker(node: Node) { return isExportAssignment(node) || isExportDeclaration(node); } @@ -2189,14 +2155,14 @@ export function isModuleBody(node: Node): node is ModuleBody { || kind === SyntaxKind.Identifier; } -/** @internal */ +/** @internal @knipignore */ export function isNamespaceBody(node: Node): node is NamespaceBody { const kind = node.kind; return kind === SyntaxKind.ModuleBlock || kind === SyntaxKind.ModuleDeclaration; } -/** @internal */ +/** @internal @knipignore */ export function isJSDocNamespaceBody(node: Node): node is JSDocNamespaceBody { const kind = node.kind; return kind === SyntaxKind.Identifier diff --git a/src/compiler/watch.ts b/src/compiler/watch.ts index 10e0d491f481e..93385de0688a5 100644 --- a/src/compiler/watch.ts +++ b/src/compiler/watch.ts @@ -155,8 +155,7 @@ function clearScreenIfNotWatchingForFileChanges(system: System, diagnostic: Diag return false; } -/** @internal */ -export const screenStartingMessageCodes: number[] = [ +const screenStartingMessageCodes: number[] = [ Diagnostics.Starting_compilation_in_watch_mode.code, Diagnostics.File_change_detected_Starting_incremental_compilation.code, ]; diff --git a/src/deprecatedCompat/deprecations.ts b/src/deprecatedCompat/deprecations.ts index 4f4ec88e957fb..e4ec0d1a7e747 100644 --- a/src/deprecatedCompat/deprecations.ts +++ b/src/deprecatedCompat/deprecations.ts @@ -77,7 +77,7 @@ export type OverloadBinders = { [P in OverloadKey */ export type OverloadDeprecations = { [P in OverloadKeys]?: DeprecationOptions; }; -/** @internal */ +/** @internal @knipignore */ export function createOverload(name: string, overloads: T, binder: OverloadBinders, deprecations?: OverloadDeprecations) { Object.defineProperty(call, "name", { ...Object.getOwnPropertyDescriptor(call, "name"), value: name }); @@ -137,7 +137,7 @@ export interface BoundOverloadBuilder extends Fin // NOTE: We only use this "builder" because we don't infer correctly when calling `createOverload` directly in < TS 4.7, // but lib is currently at TS 4.4. We can switch to directly calling `createOverload` when we update LKG in main. -/** @internal */ +/** @internal @knipignore */ export function buildOverload(name: string): OverloadBuilder { return { overload: overloads => ({ diff --git a/src/harness/client.ts b/src/harness/client.ts index ddbaff1dff494..248624e4323b1 100644 --- a/src/harness/client.ts +++ b/src/harness/client.ts @@ -94,8 +94,7 @@ interface RenameEntry { readonly locations: RenameLocation[]; } -/** @internal */ -export function extractMessage(message: string): string { +function extractMessage(message: string): string { // Read the content length const contentLengthPrefix = "Content-Length: "; const lines = message.split(/\r?\n/); diff --git a/src/jsTyping/jsTyping.ts b/src/jsTyping/jsTyping.ts index c1d2babeab10c..48594168e9b80 100644 --- a/src/jsTyping/jsTyping.ts +++ b/src/jsTyping/jsTyping.ts @@ -111,8 +111,7 @@ const unprefixedNodeCoreModuleList = [ "zlib", ]; -/** @internal */ -export const prefixedNodeCoreModuleList = unprefixedNodeCoreModuleList.map(name => `node:${name}`); +const prefixedNodeCoreModuleList = unprefixedNodeCoreModuleList.map(name => `node:${name}`); /** @internal */ export const nodeCoreModuleList: readonly string[] = [...unprefixedNodeCoreModuleList, ...prefixedNodeCoreModuleList]; diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts index 637f038311339..c0ce4da6252a3 100644 --- a/src/server/editorServices.ts +++ b/src/server/editorServices.ts @@ -796,9 +796,8 @@ function forEachAncestorProject( * Goes through project's resolved project references and finds, creates or reloads project per kind * If project for this resolved reference exists its used immediately otherwise, * follows all references in order, deciding if references of the visited project can be loaded or not - * @internal */ -export function forEachResolvedProjectReferenceProject( +function forEachResolvedProjectReferenceProject( project: ConfiguredProject, fileName: string | undefined, cb: (child: ConfiguredProject, sentConfigFileDiag: boolean) => T | undefined, diff --git a/src/server/protocol.ts b/src/server/protocol.ts index 23ec4ab7ed6f0..0a759f70ec034 100644 --- a/src/server/protocol.ts +++ b/src/server/protocol.ts @@ -428,7 +428,7 @@ export interface OutliningSpansRequestFull extends FileRequest { /** * Response to OutliningSpansRequest request. * - * @internal + * @internal @knipignore */ export interface OutliningSpansResponseFull extends Response { body?: ts.OutliningSpan[]; @@ -1257,7 +1257,7 @@ export interface RenameFullRequest extends FileLocationRequest { readonly arguments: RenameRequestArgs; } -/** @internal */ +/** @internal @knipignore */ export interface RenameFullResponse extends Response { readonly body: readonly RenameLocation[]; } @@ -2757,7 +2757,7 @@ export interface CloseFileWatcherEventBody { readonly id: number; } -/** @internal */ +/** @internal @knipignore */ export type AnyEvent = | RequestCompletedEvent | DiagnosticEvent diff --git a/src/server/utilities.ts b/src/server/utilities.ts index fd3b221fb43e1..5ea8cd876f3e7 100644 --- a/src/server/utilities.ts +++ b/src/server/utilities.ts @@ -1,10 +1,4 @@ -import { - binarySearch, - Comparer, - getBaseFileName, - identity, - SortedArray, -} from "./_namespaces/ts.js"; +import { getBaseFileName } from "./_namespaces/ts.js"; import { Logger, LogLevel, @@ -88,20 +82,3 @@ export function getBaseConfigFileName(configFilePath: NormalizedPath): "tsconfig const base = getBaseFileName(configFilePath); return base === "tsconfig.json" || base === "jsconfig.json" ? base : undefined; } - -/** @internal */ -export function removeSorted(array: SortedArray, remove: T, compare: Comparer): void { - if (!array || array.length === 0) { - return; - } - - if (array[0] === remove) { - array.splice(0, 1); - return; - } - - const removeIndex = binarySearch(array, remove, identity, compare); - if (removeIndex >= 0) { - array.splice(removeIndex, 1); - } -} diff --git a/src/services/codefixes/helpers.ts b/src/services/codefixes/helpers.ts index aaa2df431f2d1..91a737167de59 100644 --- a/src/services/codefixes/helpers.ts +++ b/src/services/codefixes/helpers.ts @@ -610,8 +610,7 @@ function typeContainsTypeParameter(type: Type) { return type.flags & TypeFlags.TypeParameter; } -/** @internal */ -export function getArgumentTypesAndTypeParameters(checker: TypeChecker, importAdder: ImportAdder, instanceTypes: Type[], contextNode: Node | undefined, scriptTarget: ScriptTarget, flags?: NodeBuilderFlags, tracker?: SymbolTracker) { +function getArgumentTypesAndTypeParameters(checker: TypeChecker, importAdder: ImportAdder, instanceTypes: Type[], contextNode: Node | undefined, scriptTarget: ScriptTarget, flags?: NodeBuilderFlags, tracker?: SymbolTracker) { // Types to be used as the types of the parameters in the new function // E.g. from this source: // added("", 0) @@ -874,13 +873,11 @@ export function setJsonCompilerOptionValue( setJsonCompilerOptionValues(changeTracker, configFile, [[optionName, optionValue]]); } -/** @internal */ -export function createJsonPropertyAssignment(name: string, initializer: Expression) { +function createJsonPropertyAssignment(name: string, initializer: Expression) { return factory.createPropertyAssignment(factory.createStringLiteral(name), initializer); } -/** @internal */ -export function findJsonProperty(obj: ObjectLiteralExpression, name: string): PropertyAssignment | undefined { +function findJsonProperty(obj: ObjectLiteralExpression, name: string): PropertyAssignment | undefined { return find(obj.properties, (p): p is PropertyAssignment => isPropertyAssignment(p) && !!p.name && isStringLiteral(p.name) && p.name.text === name); } diff --git a/src/services/completions.ts b/src/services/completions.ts index a0f26987bb792..d240cacc2c3c3 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -398,7 +398,7 @@ import { // Exported only for tests /** @internal */ export const moduleSpecifierResolutionLimit = 100; -/** @internal */ +/** @internal @knipignore */ export const moduleSpecifierResolutionCacheAttemptLimit = 1000; /** @internal */ diff --git a/src/services/findAllReferences.ts b/src/services/findAllReferences.ts index ea1d433e891aa..6e11dac1419fd 100644 --- a/src/services/findAllReferences.ts +++ b/src/services/findAllReferences.ts @@ -322,8 +322,7 @@ export interface SpanEntry { readonly fileName: string; readonly textSpan: TextSpan; } -/** @internal */ -export function nodeEntry(node: Node, kind: NodeEntryKind = EntryKind.Node): NodeEntry { +function nodeEntry(node: Node, kind: NodeEntryKind = EntryKind.Node): NodeEntry { return { kind, node: (node as NamedDeclaration).name || node, @@ -884,8 +883,7 @@ function getTextSpan(node: Node, sourceFile: SourceFile, endNode?: Node): TextSp return createTextSpanFromBounds(start, end); } -/** @internal */ -export function getTextSpanOfEntry(entry: Entry) { +function getTextSpanOfEntry(entry: Entry) { return entry.kind === EntryKind.Span ? entry.textSpan : getTextSpan(entry.node, entry.node.getSourceFile()); } diff --git a/src/services/goToDefinition.ts b/src/services/goToDefinition.ts index 7c768d92cd025..0d388a808c628 100644 --- a/src/services/goToDefinition.ts +++ b/src/services/goToDefinition.ts @@ -716,8 +716,7 @@ function createDefinitionFromSignatureDeclaration(typeChecker: TypeChecker, decl return createDefinitionInfo(decl, typeChecker, decl.symbol, decl, /*unverified*/ false, failedAliasResolution); } -/** @internal */ -export function findReferenceInPosition(refs: readonly FileReference[], pos: number): FileReference | undefined { +function findReferenceInPosition(refs: readonly FileReference[], pos: number): FileReference | undefined { return find(refs, ref => textRangeContainsPositionInclusive(ref, pos)); } diff --git a/src/services/organizeImports.ts b/src/services/organizeImports.ts index a5b366281de57..8841ee3f2cb3a 100644 --- a/src/services/organizeImports.ts +++ b/src/services/organizeImports.ts @@ -212,8 +212,7 @@ export function organizeImports( } } -/** @internal */ -export function getDetectionLists(preferences: UserPreferences): { comparersToTest: Comparer[]; typeOrdersToTest: OrganizeImportsTypeOrder[]; } { +function getDetectionLists(preferences: UserPreferences): { comparersToTest: Comparer[]; typeOrdersToTest: OrganizeImportsTypeOrder[]; } { // Returns the possible detection outcomes, given the user's preferences. The earlier in the list, the higher the priority. return { comparersToTest: typeof preferences.organizeImportsIgnoreCase === "boolean" diff --git a/src/services/refactors/moveToFile.ts b/src/services/refactors/moveToFile.ts index 8f94d31327d4e..7f755cff12c58 100644 --- a/src/services/refactors/moveToFile.ts +++ b/src/services/refactors/moveToFile.ts @@ -287,15 +287,13 @@ export function addNewFileToTsconfig(program: Program, changes: textChanges.Chan } } -/** @internal */ -export function deleteMovedStatements(sourceFile: SourceFile, moved: readonly StatementRange[], changes: textChanges.ChangeTracker) { +function deleteMovedStatements(sourceFile: SourceFile, moved: readonly StatementRange[], changes: textChanges.ChangeTracker) { for (const { first, afterLast } of moved) { changes.deleteNodeRangeExcludingEnd(sourceFile, first, afterLast); } } -/** @internal */ -export function deleteUnusedOldImports(oldFile: SourceFile, toMove: readonly Statement[], toDelete: Set, importAdder: codefix.ImportAdder) { +function deleteUnusedOldImports(oldFile: SourceFile, toMove: readonly Statement[], toDelete: Set, importAdder: codefix.ImportAdder) { for (const statement of oldFile.statements) { if (contains(toMove, statement)) continue; forEachImportInStatement(statement, i => { @@ -328,8 +326,7 @@ export function addExportsInOldFile(oldFile: SourceFile, targetFileImportsFromOl }); } -/** @internal */ -export function updateImportsInOtherFiles( +function updateImportsInOtherFiles( changes: textChanges.ChangeTracker, program: Program, host: LanguageServiceHost, @@ -438,15 +435,13 @@ function createRequireCall(moduleSpecifier: StringLiteralLike): CallExpression { return factory.createCallExpression(factory.createIdentifier("require"), /*typeArguments*/ undefined, [moduleSpecifier]); } -/** @internal */ -export function moduleSpecifierFromImport(i: SupportedImport): StringLiteralLike { +function moduleSpecifierFromImport(i: SupportedImport): StringLiteralLike { return (i.kind === SyntaxKind.ImportDeclaration ? i.moduleSpecifier : i.kind === SyntaxKind.ImportEqualsDeclaration ? i.moduleReference.expression : i.initializer.arguments[0]); } -/** @internal */ -export function forEachImportInStatement(statement: Statement, cb: (importNode: SupportedImport) => void): void { +function forEachImportInStatement(statement: Statement, cb: (importNode: SupportedImport) => void): void { if (isImportDeclaration(statement)) { if (isStringLiteral(statement.moduleSpecifier)) cb(statement as SupportedImport); } @@ -547,8 +542,7 @@ function isExported(sourceFile: SourceFile, decl: TopLevelDeclarationStatement, getNamesToExportInCommonJS(decl).some(name => sourceFile.symbol.exports!.has(escapeLeadingUnderscores(name))); } -/** @internal */ -export function deleteUnusedImports(sourceFile: SourceFile, importDecl: SupportedImport, changes: textChanges.ChangeTracker, isUnused: (name: Identifier) => boolean): void { +function deleteUnusedImports(sourceFile: SourceFile, importDecl: SupportedImport, changes: textChanges.ChangeTracker, isUnused: (name: Identifier) => boolean): void { if (importDecl.kind === SyntaxKind.ImportDeclaration && importDecl.importClause) { const { name, namedBindings } = importDecl.importClause; if ((!name || isUnused(name)) && (!namedBindings || namedBindings.kind === SyntaxKind.NamedImports && namedBindings.elements.length !== 0 && namedBindings.elements.every(e => isUnused(e.name)))) { @@ -638,8 +632,7 @@ function getNamesToExportInCommonJS(decl: TopLevelDeclarationStatement): readonl } } -/** @internal */ -export function filterImport(i: SupportedImport, moduleSpecifier: StringLiteralLike, keep: (name: Identifier) => boolean): SupportedImportStatement | undefined { +function filterImport(i: SupportedImport, moduleSpecifier: StringLiteralLike, keep: (name: Identifier) => boolean): SupportedImportStatement | undefined { switch (i.kind) { case SyntaxKind.ImportDeclaration: { const clause = i.importClause; @@ -685,13 +678,11 @@ function filterBindingName(name: BindingName, keep: (name: Identifier) => boolea } } -/** @internal */ -export function nameOfTopLevelDeclaration(d: TopLevelDeclaration): Identifier | undefined { +function nameOfTopLevelDeclaration(d: TopLevelDeclaration): Identifier | undefined { return isExpressionStatement(d) ? tryCast(d.expression.left.name, isIdentifier) : tryCast(d.name, isIdentifier); } -/** @internal */ -export function getTopLevelDeclarationStatement(d: TopLevelDeclaration): TopLevelDeclarationStatement { +function getTopLevelDeclarationStatement(d: TopLevelDeclaration): TopLevelDeclarationStatement { switch (d.kind) { case SyntaxKind.VariableDeclaration: return d.parent.parent; @@ -704,8 +695,7 @@ export function getTopLevelDeclarationStatement(d: TopLevelDeclaration): TopLeve } } -/** @internal */ -export function addExportToChanges(sourceFile: SourceFile, decl: TopLevelDeclarationStatement, name: Identifier, changes: textChanges.ChangeTracker, useEs6Exports: boolean): void { +function addExportToChanges(sourceFile: SourceFile, decl: TopLevelDeclarationStatement, name: Identifier, changes: textChanges.ChangeTracker, useEs6Exports: boolean): void { if (isExported(sourceFile, decl, useEs6Exports, name)) return; if (useEs6Exports) { if (!isExpressionStatement(decl)) changes.insertExportModifier(sourceFile, decl); @@ -1025,8 +1015,7 @@ function isVariableDeclarationInImport(decl: VariableDeclaration) { !!decl.initializer && isRequireCall(decl.initializer, /*requireStringLiteralLikeArgument*/ true); } -/** @internal */ -export function isTopLevelDeclaration(node: Node): node is TopLevelDeclaration { +function isTopLevelDeclaration(node: Node): node is TopLevelDeclaration { return isNonVariableTopLevelDeclaration(node) && isSourceFile(node.parent) || isVariableDeclaration(node) && isSourceFile(node.parent.parent.parent); } function sourceFileOfTopLevelDeclaration(node: TopLevelDeclaration): Node { diff --git a/src/services/utilities.ts b/src/services/utilities.ts index b5e726b912e38..a34b936d7a240 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -30,7 +30,6 @@ import { ConditionalExpression, contains, ContextFlags, - createPrinterWithRemoveCommentsOmitTrailingSemicolon, createRange, createScanner, createTextSpan, @@ -53,7 +52,6 @@ import { DoStatement, ElementAccessExpression, EmitFlags, - EmitHint, emitModuleKindIsNonNodeESM, emptyArray, EndOfFileToken, @@ -177,7 +175,6 @@ import { isFunctionExpression, isFunctionLike, isGetAccessorDeclaration, - isGlobalScopeAugmentation, isHeritageClause, isIdentifier, isIdentifierPart, @@ -649,8 +646,7 @@ export function climbPastPropertyAccess(node: Node) { return isRightSideOfPropertyAccess(node) ? node.parent : node; } -/** @internal */ -export function climbPastPropertyOrElementAccess(node: Node) { +function climbPastPropertyOrElementAccess(node: Node) { return isRightSideOfPropertyAccess(node) || isArgumentExpressionOfElementAccess(node) ? node.parent : node; } @@ -1149,8 +1145,7 @@ export function findListItemInfo(node: Node): ListItemInfo | undefined { }; } -/** @internal */ -export function hasChildOfKind(n: Node, kind: SyntaxKind, sourceFile: SourceFile): boolean { +function hasChildOfKind(n: Node, kind: SyntaxKind, sourceFile: SourceFile): boolean { return !!findChildOfKind(n, kind, sourceFile); } @@ -2008,8 +2003,7 @@ export function findPrecedingMatchingToken(token: Node, matchingTokenKind: Synta } } -/** @internal */ -export function removeOptionality(type: Type, isOptionalExpression: boolean, isOptionalChain: boolean) { +function removeOptionality(type: Type, isOptionalExpression: boolean, isOptionalChain: boolean) { return isOptionalExpression ? type.getNonNullableType() : isOptionalChain ? type.getNonOptionalType() : type; @@ -2398,8 +2392,7 @@ export function isTypeKeyword(kind: SyntaxKind): boolean { return contains(typeKeywords, kind); } -/** @internal */ -export function isTypeKeywordToken(node: Node): node is Token { +function isTypeKeywordToken(node: Node): node is Token { return node.kind === SyntaxKind.TypeKeyword; } @@ -2872,8 +2865,7 @@ function getDisplayPartWriter(): DisplayPartsSymbolWriter { } } -/** @internal */ -export function symbolPart(text: string, symbol: Symbol) { +function symbolPart(text: string, symbol: Symbol) { return displayPart(text, displayPartKind(symbol)); function displayPartKind(symbol: Symbol): SymbolDisplayPartKind { @@ -2958,13 +2950,11 @@ export function typeParameterNamePart(text: string) { return displayPart(text, SymbolDisplayPartKind.typeParameterName); } -/** @internal */ -export function linkTextPart(text: string) { +function linkTextPart(text: string) { return displayPart(text, SymbolDisplayPartKind.linkText); } -/** @internal */ -export function linkNamePart(text: string, target: Declaration): JSDocLinkDisplayPart { +function linkNamePart(text: string, target: Declaration): JSDocLinkDisplayPart { return { text, kind: SymbolDisplayPartKind[SymbolDisplayPartKind.linkName], @@ -2975,8 +2965,7 @@ export function linkNamePart(text: string, target: Declaration): JSDocLinkDispla }; } -/** @internal */ -export function linkPart(text: string) { +function linkPart(text: string) { return displayPart(text, SymbolDisplayPartKind.link); } @@ -3090,15 +3079,6 @@ export function signatureToDisplayParts(typechecker: TypeChecker, signature: Sig }); } -/** @internal */ -export function nodeToDisplayParts(node: Node, enclosingDeclaration: Node): SymbolDisplayPart[] { - const file = enclosingDeclaration.getSourceFile(); - return mapToDisplayParts(writer => { - const printer = createPrinterWithRemoveCommentsOmitTrailingSemicolon(); - printer.writeNode(EmitHint.Unspecified, node, file, writer); - }); -} - /** @internal */ export function isImportOrExportSpecifierName(location: Node): location is Identifier { return !!location.parent && isImportOrExportSpecifier(location.parent) && location.parent.propertyName === location; @@ -3251,7 +3231,7 @@ export function suppressLeadingTrivia(node: Node) { /** * Sets EmitFlags to suppress trailing trivia on the node. * - * @internal + * @internal @knipignore */ export function suppressTrailingTrivia(node: Node) { addEmitFlagsRecursively(node, EmitFlags.NoTrailingComments, getLastChild); @@ -3490,8 +3470,7 @@ function syntaxRequiresTrailingModuleBlockOrSemicolonOrASI(kind: SyntaxKind) { return kind === SyntaxKind.ModuleDeclaration; } -/** @internal */ -export function syntaxRequiresTrailingSemicolonOrASI(kind: SyntaxKind) { +function syntaxRequiresTrailingSemicolonOrASI(kind: SyntaxKind) { return kind === SyntaxKind.VariableStatement || kind === SyntaxKind.ExpressionStatement || kind === SyntaxKind.DoStatement @@ -3509,8 +3488,7 @@ export function syntaxRequiresTrailingSemicolonOrASI(kind: SyntaxKind) { || kind === SyntaxKind.ExportAssignment; } -/** @internal */ -export const syntaxMayBeASICandidate = or( +const syntaxMayBeASICandidate = or( syntaxRequiresTrailingCommaOrSemicolonOrASI, syntaxRequiresTrailingFunctionBlockOrSemicolonOrASI, syntaxRequiresTrailingModuleBlockOrSemicolonOrASI, @@ -3650,8 +3628,7 @@ export function tryAndIgnoreErrors(cb: () => T): T | undefined { } } -/** @internal */ -export function tryIOAndConsumeErrors(host: unknown, toApply: ((...a: any[]) => T) | undefined, ...args: any[]) { +function tryIOAndConsumeErrors(host: unknown, toApply: ((...a: any[]) => T) | undefined, ...args: any[]) { return tryAndIgnoreErrors(() => toApply && toApply.apply(host, args)); } @@ -3683,8 +3660,7 @@ export function findPackageJson(directory: string, host: LanguageServiceHost): s return packageJson; } -/** @internal */ -export function getPackageJsonsVisibleToFile(fileName: string, host: LanguageServiceHost): readonly ProjectPackageJsonInfo[] { +function getPackageJsonsVisibleToFile(fileName: string, host: LanguageServiceHost): readonly ProjectPackageJsonInfo[] { if (!host.fileExists) { return []; } @@ -3922,8 +3898,7 @@ export function isInsideNodeModules(fileOrDirectory: string): boolean { return contains(getPathComponents(fileOrDirectory), "node_modules"); } -/** @internal */ -export function isDiagnosticWithLocation(diagnostic: Diagnostic): diagnostic is DiagnosticWithLocation { +function isDiagnosticWithLocation(diagnostic: Diagnostic): diagnostic is DiagnosticWithLocation { return diagnostic.file !== undefined && diagnostic.start !== undefined && diagnostic.length !== undefined; } @@ -4058,8 +4033,7 @@ export function getDefaultLikeExportNameFromDeclaration(symbol: Symbol): string }); } -/** @internal */ -export function getSymbolParentOrFail(symbol: Symbol) { +function getSymbolParentOrFail(symbol: Symbol) { return Debug.checkDefined( symbol.parent, `Symbol parent was undefined. Flags: ${Debug.formatSymbolFlags(symbol.flags)}. ` + @@ -4146,22 +4120,6 @@ export function startsWithUnderscore(name: string): boolean { return name.charCodeAt(0) === CharacterCodes._; } -/** @internal */ -export function isGlobalDeclaration(declaration: Declaration) { - return !isNonGlobalDeclaration(declaration); -} - -/** @internal */ -export function isNonGlobalDeclaration(declaration: Declaration) { - const sourceFile = declaration.getSourceFile(); - // If the file is not a module, the declaration is global - if (!sourceFile.externalModuleIndicator && !sourceFile.commonJsModuleIndicator) { - return false; - } - // If the file is a module written in TypeScript, it still might be in a `declare global` augmentation - return isInJSFile(declaration) || !findAncestor(declaration, d => isModuleDeclaration(d) && isGlobalScopeAugmentation(d)); -} - /** @internal */ export function isDeprecatedDeclaration(decl: Declaration) { return !!(getCombinedNodeFlagsAlwaysIncludeJSDoc(decl) & ModifierFlags.Deprecated); diff --git a/src/testRunner/_namespaces/compiler.ts b/src/testRunner/_namespaces/compiler.ts deleted file mode 100644 index fefbd43af363d..0000000000000 --- a/src/testRunner/_namespaces/compiler.ts +++ /dev/null @@ -1,3 +0,0 @@ -/* Generated file to emulate the compiler namespace. */ - -export * from "../../harness/_namespaces/compiler.js";