@mnaoumov/typescript-dev-toolkit 0.0.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +15 -1
- package/bundlers/esbuild-impl/change-extension-plugin/package.json +6 -0
- package/bundlers/esbuild-impl/custom-esbuild-options-plugin/package.json +6 -0
- package/bundlers/esbuild-impl/fix-esm-plugin/package.json +6 -0
- package/bundlers/esbuild-impl/index/package.json +6 -0
- package/bundlers/esbuild-impl/package.json +6 -0
- package/bundlers/esbuild-impl/preprocess-plugin/package.json +6 -0
- package/bundlers/esbuild-impl/svelte-wrapper-plugin/package.json +6 -0
- package/bundlers/index/package.json +6 -0
- package/bundlers/package.json +6 -0
- package/dist/lib/cjs/build.cjs +191 -0
- package/dist/lib/cjs/build.d.cts +59 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/change-extension-plugin.cjs +139 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/change-extension-plugin.d.cts +25 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/custom-esbuild-options-plugin.cjs +96 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/custom-esbuild-options-plugin.d.cts +14 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/fix-esm-plugin.cjs +106 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/fix-esm-plugin.d.cts +13 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/index.cjs +111 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/index.d.cts +6 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.cjs +211 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.d.cts +143 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/svelte-wrapper-plugin.cjs +129 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/svelte-wrapper-plugin.d.cts +14 -0
- package/dist/lib/cjs/bundlers/index.cjs +99 -0
- package/dist/lib/cjs/bundlers/index.d.cts +2 -0
- package/dist/lib/cjs/check-project-types.cjs +163 -0
- package/dist/lib/cjs/check-project-types.d.cts +92 -0
- package/dist/lib/cjs/cli-utils.cjs +276 -0
- package/dist/lib/cjs/cli-utils.d.cts +123 -0
- package/dist/lib/cjs/code-generator.cjs +96 -0
- package/dist/lib/cjs/code-generator.d.cts +14 -0
- package/dist/lib/cjs/commitlint-config.cjs +110 -0
- package/dist/lib/cjs/commitlint-config.d.cts +14 -0
- package/dist/lib/cjs/commitlint-forbidden-patterns.cjs +110 -0
- package/dist/lib/cjs/commitlint-forbidden-patterns.d.cts +37 -0
- package/dist/lib/cjs/commitlint-spellcheck-header.cjs +126 -0
- package/dist/lib/cjs/commitlint-spellcheck-header.d.cts +40 -0
- package/dist/lib/cjs/env-toggle.cjs +133 -0
- package/dist/lib/cjs/env-toggle.d.cts +42 -0
- package/dist/lib/cjs/exec.cjs +455 -0
- package/dist/lib/cjs/exec.d.cts +162 -0
- package/dist/lib/cjs/forbidden-patterns.cjs +157 -0
- package/dist/lib/cjs/forbidden-patterns.d.cts +57 -0
- package/dist/lib/cjs/formatters/dprint.cjs +108 -0
- package/dist/lib/cjs/formatters/dprint.d.cts +33 -0
- package/dist/lib/cjs/formatters/index.cjs +99 -0
- package/dist/lib/cjs/formatters/index.d.cts +2 -0
- package/dist/lib/cjs/fs.cjs +123 -0
- package/dist/lib/cjs/fs.d.cts +80 -0
- package/dist/lib/cjs/gate.cjs +140 -0
- package/dist/lib/cjs/gate.d.cts +93 -0
- package/dist/lib/cjs/git.cjs +109 -0
- package/dist/lib/cjs/git.d.cts +37 -0
- package/dist/lib/cjs/index.cjs +186 -0
- package/dist/lib/cjs/index.d.cts +35 -0
- package/dist/lib/cjs/json.cjs +141 -0
- package/dist/lib/cjs/json.d.cts +102 -0
- package/dist/lib/cjs/library-build.cjs +475 -0
- package/dist/lib/cjs/library-build.d.cts +97 -0
- package/dist/lib/cjs/linters/cspell-content.cjs +124 -0
- package/dist/lib/cjs/linters/cspell-content.d.cts +46 -0
- package/dist/lib/cjs/linters/cspell.cjs +103 -0
- package/dist/lib/cjs/linters/cspell.d.cts +36 -0
- package/dist/lib/cjs/linters/eslint-agnostic-core-boundary.cjs +94 -0
- package/dist/lib/cjs/linters/eslint-agnostic-core-boundary.d.cts +49 -0
- package/dist/lib/cjs/linters/eslint-config.cjs +1068 -0
- package/dist/lib/cjs/linters/eslint-config.d.cts +123 -0
- package/dist/lib/cjs/linters/eslint-no-restricted-syntax.cjs +130 -0
- package/dist/lib/cjs/linters/eslint-no-restricted-syntax.d.cts +27 -0
- package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.cjs +116 -0
- package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.d.cts +26 -0
- package/dist/lib/cjs/linters/eslint-rules/index.cjs +132 -0
- package/dist/lib/cjs/linters/eslint-rules/index.d.cts +13 -0
- package/dist/lib/cjs/linters/eslint-rules/no-async-callback-to-unsafe-return.cjs +175 -0
- package/dist/lib/cjs/linters/eslint-rules/no-async-callback-to-unsafe-return.d.cts +10 -0
- package/dist/lib/cjs/linters/eslint-rules/no-unresolved-jsdoc-link.cjs +290 -0
- package/dist/lib/cjs/linters/eslint-rules/no-unresolved-jsdoc-link.d.cts +10 -0
- package/dist/lib/cjs/linters/eslint-rules/no-unused-params-members.cjs +265 -0
- package/dist/lib/cjs/linters/eslint-rules/no-unused-params-members.d.cts +41 -0
- package/dist/lib/cjs/linters/eslint-rules/no-used-underscore-variables.cjs +134 -0
- package/dist/lib/cjs/linters/eslint-rules/no-used-underscore-variables.d.cts +20 -0
- package/dist/lib/cjs/linters/eslint-rules/params-options-name-match.cjs +217 -0
- package/dist/lib/cjs/linters/eslint-rules/params-options-name-match.d.cts +36 -0
- package/dist/lib/cjs/linters/eslint-rules/prefer-noop-async.cjs +126 -0
- package/dist/lib/cjs/linters/eslint-rules/prefer-noop-async.d.cts +10 -0
- package/dist/lib/cjs/linters/eslint-rules/readonly-params-options-result-members.cjs +125 -0
- package/dist/lib/cjs/linters/eslint-rules/readonly-params-options-result-members.d.cts +20 -0
- package/dist/lib/cjs/linters/eslint-rules/require-method-template.cjs +181 -0
- package/dist/lib/cjs/linters/eslint-rules/require-method-template.d.cts +14 -0
- package/dist/lib/cjs/linters/eslint-rules/require-super-call.cjs +217 -0
- package/dist/lib/cjs/linters/eslint-rules/require-super-call.d.cts +10 -0
- package/dist/lib/cjs/linters/eslint-rules/rule-tester-helper.cjs +92 -0
- package/dist/lib/cjs/linters/eslint-rules/rule-tester-helper.d.cts +18 -0
- package/dist/lib/cjs/linters/eslint-rules/ts-estree-node.cjs +92 -0
- package/dist/lib/cjs/linters/eslint-rules/ts-estree-node.d.cts +23 -0
- package/dist/lib/cjs/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs.d.cts +20 -0
- package/dist/lib/cjs/linters/eslint-types/@types/eslint-plugin-verify-tsdoc.d.cts +17 -0
- package/dist/lib/cjs/linters/eslint.cjs +122 -0
- package/dist/lib/cjs/linters/eslint.d.cts +35 -0
- package/dist/lib/cjs/linters/index.cjs +138 -0
- package/dist/lib/cjs/linters/index.d.cts +15 -0
- package/dist/lib/cjs/linters/lint-ignores.cjs +91 -0
- package/dist/lib/cjs/linters/lint-ignores.d.cts +30 -0
- package/dist/lib/cjs/linters/markdownlint-cli2-config.cjs +169 -0
- package/dist/lib/cjs/linters/markdownlint-cli2-config.d.cts +11 -0
- package/dist/lib/cjs/linters/markdownlint-content.cjs +120 -0
- package/dist/lib/cjs/linters/markdownlint-content.d.cts +47 -0
- package/dist/lib/cjs/linters/markdownlint-ignores.cjs +95 -0
- package/dist/lib/cjs/linters/markdownlint-ignores.d.cts +35 -0
- package/dist/lib/cjs/linters/markdownlint-rules/index.cjs +99 -0
- package/dist/lib/cjs/linters/markdownlint-rules/index.d.cts +2 -0
- package/dist/lib/cjs/linters/markdownlint-rules/no-soft-break-in-paragraph.cjs +152 -0
- package/dist/lib/cjs/linters/markdownlint-rules/no-soft-break-in-paragraph.d.cts +35 -0
- package/dist/lib/cjs/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.cts +1344 -0
- package/dist/lib/cjs/linters/markdownlint-types/@types/markdownlint-cli2.d.cts +67 -0
- package/dist/lib/cjs/linters/markdownlint.cjs +151 -0
- package/dist/lib/cjs/linters/markdownlint.d.cts +32 -0
- package/dist/lib/cjs/linters/over-exposure.cjs +685 -0
- package/dist/lib/cjs/linters/over-exposure.d.cts +357 -0
- package/dist/lib/cjs/nano-staged-config.cjs +148 -0
- package/dist/lib/cjs/nano-staged-config.d.cts +54 -0
- package/dist/lib/cjs/npm-publish.cjs +93 -0
- package/dist/lib/cjs/npm-publish.d.cts +19 -0
- package/dist/lib/cjs/npm-run.cjs +120 -0
- package/dist/lib/cjs/npm-run.d.cts +34 -0
- package/dist/lib/cjs/npm.cjs +200 -0
- package/dist/lib/cjs/npm.d.cts +168 -0
- package/dist/lib/cjs/package-lock-integrity.cjs +134 -0
- package/dist/lib/cjs/package-lock-integrity.d.cts +38 -0
- package/dist/lib/cjs/package-manager.cjs +291 -0
- package/dist/lib/cjs/package-manager.d.cts +93 -0
- package/dist/lib/cjs/released-issues.cjs +178 -0
- package/dist/lib/cjs/released-issues.d.cts +79 -0
- package/dist/lib/cjs/repo-paths.cjs +167 -0
- package/dist/lib/cjs/repo-paths.d.cts +318 -0
- package/dist/lib/cjs/root.cjs +150 -0
- package/dist/lib/cjs/root.d.cts +107 -0
- package/dist/lib/cjs/test-runners/index.cjs +102 -0
- package/dist/lib/cjs/test-runners/index.d.cts +3 -0
- package/dist/lib/cjs/test-runners/vitest-config.cjs +126 -0
- package/dist/lib/cjs/test-runners/vitest-config.d.cts +90 -0
- package/dist/lib/cjs/test-runners/vitest.cjs +115 -0
- package/dist/lib/cjs/test-runners/vitest.d.cts +52 -0
- package/dist/lib/cjs/validate-declarations.cjs +120 -0
- package/dist/lib/cjs/validate-declarations.d.cts +37 -0
- package/dist/lib/cjs/version.cjs +758 -0
- package/dist/lib/cjs/version.d.cts +418 -0
- package/dist/lib/esm/build.d.mts +59 -0
- package/dist/lib/esm/build.mjs +165 -0
- package/dist/lib/esm/bundlers/esbuild-impl/change-extension-plugin.d.mts +25 -0
- package/dist/lib/esm/bundlers/esbuild-impl/change-extension-plugin.mjs +101 -0
- package/dist/lib/esm/bundlers/esbuild-impl/custom-esbuild-options-plugin.d.mts +14 -0
- package/dist/lib/esm/bundlers/esbuild-impl/custom-esbuild-options-plugin.mjs +59 -0
- package/dist/lib/esm/bundlers/esbuild-impl/fix-esm-plugin.d.mts +13 -0
- package/dist/lib/esm/bundlers/esbuild-impl/fix-esm-plugin.mjs +69 -0
- package/dist/lib/esm/bundlers/esbuild-impl/index.d.mts +6 -0
- package/dist/lib/esm/bundlers/esbuild-impl/index.mjs +60 -0
- package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.d.mts +143 -0
- package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.mjs +176 -0
- package/dist/lib/esm/bundlers/esbuild-impl/svelte-wrapper-plugin.d.mts +14 -0
- package/dist/lib/esm/bundlers/esbuild-impl/svelte-wrapper-plugin.mjs +82 -0
- package/dist/lib/esm/bundlers/index.d.mts +2 -0
- package/dist/lib/esm/bundlers/index.mjs +52 -0
- package/dist/lib/esm/check-project-types.d.mts +92 -0
- package/dist/lib/esm/check-project-types.mjs +123 -0
- package/dist/lib/esm/cli-utils.d.mts +123 -0
- package/dist/lib/esm/cli-utils.mjs +225 -0
- package/dist/lib/esm/code-generator.d.mts +14 -0
- package/dist/lib/esm/code-generator.mjs +59 -0
- package/dist/lib/esm/commitlint-config.d.mts +14 -0
- package/dist/lib/esm/commitlint-config.mjs +79 -0
- package/dist/lib/esm/commitlint-forbidden-patterns.d.mts +37 -0
- package/dist/lib/esm/commitlint-forbidden-patterns.mjs +75 -0
- package/dist/lib/esm/commitlint-spellcheck-header.d.mts +40 -0
- package/dist/lib/esm/commitlint-spellcheck-header.mjs +87 -0
- package/dist/lib/esm/env-toggle.d.mts +42 -0
- package/dist/lib/esm/env-toggle.mjs +84 -0
- package/dist/lib/esm/exec.d.mts +162 -0
- package/dist/lib/esm/exec.mjs +410 -0
- package/dist/lib/esm/forbidden-patterns.d.mts +57 -0
- package/dist/lib/esm/forbidden-patterns.mjs +108 -0
- package/dist/lib/esm/formatters/dprint.d.mts +33 -0
- package/dist/lib/esm/formatters/dprint.mjs +75 -0
- package/dist/lib/esm/formatters/index.d.mts +2 -0
- package/dist/lib/esm/formatters/index.mjs +52 -0
- package/dist/lib/esm/fs.d.mts +80 -0
- package/dist/lib/esm/fs.mjs +89 -0
- package/dist/lib/esm/gate.d.mts +93 -0
- package/dist/lib/esm/gate.mjs +106 -0
- package/dist/lib/esm/git.d.mts +37 -0
- package/dist/lib/esm/git.mjs +72 -0
- package/dist/lib/esm/index.d.mts +35 -0
- package/dist/lib/esm/index.mjs +110 -0
- package/dist/lib/esm/json.d.mts +102 -0
- package/dist/lib/esm/json.mjs +106 -0
- package/dist/lib/esm/library-build.d.mts +97 -0
- package/dist/lib/esm/library-build.mjs +435 -0
- package/dist/lib/esm/linters/cspell-content.d.mts +46 -0
- package/dist/lib/esm/linters/cspell-content.mjs +87 -0
- package/dist/lib/esm/linters/cspell.d.mts +36 -0
- package/dist/lib/esm/linters/cspell.mjs +69 -0
- package/dist/lib/esm/linters/eslint-agnostic-core-boundary.d.mts +49 -0
- package/dist/lib/esm/linters/eslint-agnostic-core-boundary.mjs +57 -0
- package/dist/lib/esm/linters/eslint-config.d.mts +123 -0
- package/dist/lib/esm/linters/eslint-config.mjs +1022 -0
- package/dist/lib/esm/linters/eslint-no-restricted-syntax.d.mts +27 -0
- package/dist/lib/esm/linters/eslint-no-restricted-syntax.mjs +93 -0
- package/dist/lib/esm/linters/eslint-rules/in-house-plugin.d.mts +26 -0
- package/dist/lib/esm/linters/eslint-rules/in-house-plugin.mjs +77 -0
- package/dist/lib/esm/linters/eslint-rules/index.d.mts +13 -0
- package/dist/lib/esm/linters/eslint-rules/index.mjs +74 -0
- package/dist/lib/esm/linters/eslint-rules/no-async-callback-to-unsafe-return.d.mts +10 -0
- package/dist/lib/esm/linters/eslint-rules/no-async-callback-to-unsafe-return.mjs +144 -0
- package/dist/lib/esm/linters/eslint-rules/no-unresolved-jsdoc-link.d.mts +10 -0
- package/dist/lib/esm/linters/eslint-rules/no-unresolved-jsdoc-link.mjs +277 -0
- package/dist/lib/esm/linters/eslint-rules/no-unused-params-members.d.mts +41 -0
- package/dist/lib/esm/linters/eslint-rules/no-unused-params-members.mjs +227 -0
- package/dist/lib/esm/linters/eslint-rules/no-used-underscore-variables.d.mts +20 -0
- package/dist/lib/esm/linters/eslint-rules/no-used-underscore-variables.mjs +96 -0
- package/dist/lib/esm/linters/eslint-rules/params-options-name-match.d.mts +36 -0
- package/dist/lib/esm/linters/eslint-rules/params-options-name-match.mjs +179 -0
- package/dist/lib/esm/linters/eslint-rules/prefer-noop-async.d.mts +10 -0
- package/dist/lib/esm/linters/eslint-rules/prefer-noop-async.mjs +88 -0
- package/dist/lib/esm/linters/eslint-rules/readonly-params-options-result-members.d.mts +20 -0
- package/dist/lib/esm/linters/eslint-rules/readonly-params-options-result-members.mjs +87 -0
- package/dist/lib/esm/linters/eslint-rules/require-method-template.d.mts +14 -0
- package/dist/lib/esm/linters/eslint-rules/require-method-template.mjs +142 -0
- package/dist/lib/esm/linters/eslint-rules/require-super-call.d.mts +10 -0
- package/dist/lib/esm/linters/eslint-rules/require-super-call.mjs +183 -0
- package/dist/lib/esm/linters/eslint-rules/rule-tester-helper.d.mts +18 -0
- package/dist/lib/esm/linters/eslint-rules/rule-tester-helper.mjs +55 -0
- package/dist/lib/esm/linters/eslint-rules/ts-estree-node.d.mts +23 -0
- package/dist/lib/esm/linters/eslint-rules/ts-estree-node.mjs +55 -0
- package/dist/lib/esm/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs.d.mts +20 -0
- package/dist/lib/esm/linters/eslint-types/@types/eslint-plugin-verify-tsdoc.d.mts +17 -0
- package/dist/lib/esm/linters/eslint.d.mts +35 -0
- package/dist/lib/esm/linters/eslint.mjs +88 -0
- package/dist/lib/esm/linters/index.d.mts +15 -0
- package/dist/lib/esm/linters/index.mjs +78 -0
- package/dist/lib/esm/linters/lint-ignores.d.mts +30 -0
- package/dist/lib/esm/linters/lint-ignores.mjs +54 -0
- package/dist/lib/esm/linters/markdownlint-cli2-config.d.mts +11 -0
- package/dist/lib/esm/linters/markdownlint-cli2-config.mjs +122 -0
- package/dist/lib/esm/linters/markdownlint-content.d.mts +47 -0
- package/dist/lib/esm/linters/markdownlint-content.mjs +83 -0
- package/dist/lib/esm/linters/markdownlint-ignores.d.mts +35 -0
- package/dist/lib/esm/linters/markdownlint-ignores.mjs +57 -0
- package/dist/lib/esm/linters/markdownlint-rules/index.d.mts +2 -0
- package/dist/lib/esm/linters/markdownlint-rules/index.mjs +52 -0
- package/dist/lib/esm/linters/markdownlint-rules/no-soft-break-in-paragraph.d.mts +35 -0
- package/dist/lib/esm/linters/markdownlint-rules/no-soft-break-in-paragraph.mjs +114 -0
- package/dist/lib/esm/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.mts +1344 -0
- package/dist/lib/esm/linters/markdownlint-types/@types/markdownlint-cli2.d.mts +67 -0
- package/dist/lib/esm/linters/markdownlint.d.mts +32 -0
- package/dist/lib/esm/linters/markdownlint.mjs +124 -0
- package/dist/lib/esm/linters/over-exposure.d.mts +357 -0
- package/dist/lib/esm/linters/over-exposure.mjs +672 -0
- package/dist/lib/esm/nano-staged-config.d.mts +54 -0
- package/dist/lib/esm/nano-staged-config.mjs +103 -0
- package/dist/lib/esm/npm-publish.d.mts +19 -0
- package/dist/lib/esm/npm-publish.mjs +56 -0
- package/dist/lib/esm/npm-run.d.mts +34 -0
- package/dist/lib/esm/npm-run.mjs +81 -0
- package/dist/lib/esm/npm.d.mts +168 -0
- package/dist/lib/esm/npm.mjs +155 -0
- package/dist/lib/esm/package-lock-integrity.d.mts +38 -0
- package/dist/lib/esm/package-lock-integrity.mjs +99 -0
- package/dist/lib/esm/package-manager.d.mts +93 -0
- package/dist/lib/esm/package-manager.mjs +245 -0
- package/dist/lib/esm/released-issues.d.mts +79 -0
- package/dist/lib/esm/released-issues.mjs +143 -0
- package/dist/lib/esm/repo-paths.d.mts +318 -0
- package/dist/lib/esm/repo-paths.mjs +130 -0
- package/dist/lib/esm/root.d.mts +107 -0
- package/dist/lib/esm/root.mjs +115 -0
- package/dist/lib/esm/test-runners/index.d.mts +3 -0
- package/dist/lib/esm/test-runners/index.mjs +54 -0
- package/dist/lib/esm/test-runners/vitest-config.d.mts +90 -0
- package/dist/lib/esm/test-runners/vitest-config.mjs +86 -0
- package/dist/lib/esm/test-runners/vitest.d.mts +52 -0
- package/dist/lib/esm/test-runners/vitest.mjs +76 -0
- package/dist/lib/esm/validate-declarations.d.mts +37 -0
- package/dist/lib/esm/validate-declarations.mjs +87 -0
- package/dist/lib/esm/version.d.mts +418 -0
- package/dist/lib/esm/version.mjs +723 -0
- package/formatters/dprint/package.json +6 -0
- package/formatters/index/package.json +6 -0
- package/formatters/package.json +6 -0
- package/linters/cspell/package.json +6 -0
- package/linters/cspell-content/package.json +6 -0
- package/linters/eslint/package.json +6 -0
- package/linters/eslint-agnostic-core-boundary/package.json +6 -0
- package/linters/eslint-config/package.json +6 -0
- package/linters/eslint-no-restricted-syntax/package.json +6 -0
- package/linters/eslint-rules/in-house-plugin/package.json +6 -0
- package/linters/eslint-rules/index/package.json +6 -0
- package/linters/eslint-rules/no-async-callback-to-unsafe-return/package.json +6 -0
- package/linters/eslint-rules/no-unresolved-jsdoc-link/package.json +6 -0
- package/linters/eslint-rules/no-unused-params-members/package.json +6 -0
- package/linters/eslint-rules/no-used-underscore-variables/package.json +6 -0
- package/linters/eslint-rules/package.json +6 -0
- package/linters/eslint-rules/params-options-name-match/package.json +6 -0
- package/linters/eslint-rules/prefer-noop-async/package.json +6 -0
- package/linters/eslint-rules/readonly-params-options-result-members/package.json +6 -0
- package/linters/eslint-rules/require-method-template/package.json +6 -0
- package/linters/eslint-rules/require-super-call/package.json +6 -0
- package/linters/eslint-rules/rule-tester-helper/package.json +6 -0
- package/linters/eslint-rules/ts-estree-node/package.json +6 -0
- package/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs/package.json +4 -0
- package/linters/eslint-types/@types/eslint-plugin-verify-tsdoc/package.json +4 -0
- package/linters/index/package.json +6 -0
- package/linters/lint-ignores/package.json +6 -0
- package/linters/markdownlint/package.json +6 -0
- package/linters/markdownlint-cli2-config/package.json +6 -0
- package/linters/markdownlint-content/package.json +6 -0
- package/linters/markdownlint-ignores/package.json +6 -0
- package/linters/markdownlint-rules/index/package.json +6 -0
- package/linters/markdownlint-rules/no-soft-break-in-paragraph/package.json +6 -0
- package/linters/markdownlint-rules/package.json +6 -0
- package/linters/markdownlint-types/@types/markdownlint-cli2/package.json +4 -0
- package/linters/markdownlint-types/@types/markdownlint-cli2-config-schema/package.json +4 -0
- package/linters/over-exposure/package.json +6 -0
- package/linters/package.json +6 -0
- package/package.json +329 -13
- package/test-runners/index/package.json +6 -0
- package/test-runners/package.json +6 -0
- package/test-runners/vitest/package.json +6 -0
- package/test-runners/vitest-config/package.json +6 -0
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
(function () {
|
|
7
|
+
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
+
symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
|
|
9
|
+
symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function ensureBrowserProcess() {
|
|
13
|
+
const browserProcess = {
|
|
14
|
+
browser: true,
|
|
15
|
+
cwd() {
|
|
16
|
+
return '/';
|
|
17
|
+
},
|
|
18
|
+
env: {},
|
|
19
|
+
platform: 'android'
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const existingProcess = globalThis.process;
|
|
23
|
+
|
|
24
|
+
if (!existingProcess) {
|
|
25
|
+
globalThis.process = browserProcess;
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (existingProcess.versions?.node) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const existingProcessRecord = existingProcess;
|
|
34
|
+
|
|
35
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
36
|
+
existingProcessRecord[key] ??= value;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
existingProcessRecord['browser'] = true;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function keepName($unknown) {
|
|
43
|
+
return $unknown;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
(function initCjs() {
|
|
47
|
+
const globalThisRecord = globalThis;
|
|
48
|
+
ensureDisposeSymbols();
|
|
49
|
+
globalThisRecord['__name'] ??= keepName;
|
|
50
|
+
globalThisRecord['__extractDefault'] ??= extractDefault;
|
|
51
|
+
|
|
52
|
+
ensureBrowserProcess();
|
|
53
|
+
|
|
54
|
+
// eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
|
|
55
|
+
function extractDefault(module) {
|
|
56
|
+
return module && module.__esModule && 'default' in module ? module.default : module;
|
|
57
|
+
}
|
|
58
|
+
})();
|
|
59
|
+
})();
|
|
60
|
+
|
|
61
|
+
"use strict";
|
|
62
|
+
var __defProp = Object.defineProperty;
|
|
63
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
64
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
65
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
66
|
+
var __export = (target, all) => {
|
|
67
|
+
for (var name in all)
|
|
68
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
69
|
+
};
|
|
70
|
+
var __copyProps = (to, from, except, desc) => {
|
|
71
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
72
|
+
for (let key of __getOwnPropNames(from))
|
|
73
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
74
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
75
|
+
}
|
|
76
|
+
return to;
|
|
77
|
+
};
|
|
78
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
79
|
+
var no_unused_params_members_exports = {};
|
|
80
|
+
__export(no_unused_params_members_exports, {
|
|
81
|
+
MESSAGE_ID: () => MESSAGE_ID,
|
|
82
|
+
noUnusedParamsMembers: () => noUnusedParamsMembers
|
|
83
|
+
});
|
|
84
|
+
module.exports = __toCommonJS(no_unused_params_members_exports);
|
|
85
|
+
var import_type_guards = require('@mnaoumov/typescript-lib/type-guards');
|
|
86
|
+
const PARAMS_OPTIONS_SUFFIX_PATTERN = /(?:Params|Options)$/;
|
|
87
|
+
const MESSAGE_ID = "unusedParamsMember";
|
|
88
|
+
const noUnusedParamsMembers = {
|
|
89
|
+
create(context) {
|
|
90
|
+
const interfaceKeyNodes = /* @__PURE__ */ new Map();
|
|
91
|
+
const usageByInterface = /* @__PURE__ */ new Map();
|
|
92
|
+
return {
|
|
93
|
+
":function"(node) {
|
|
94
|
+
for (const parameter of record(node)["params"]) {
|
|
95
|
+
const info = getParameterInfo(parameter);
|
|
96
|
+
if (!info) {
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
const usage = getOrCreateUsage(info.typeName);
|
|
100
|
+
if (info.binding.type === "pattern") {
|
|
101
|
+
collectPatternMembers(info.binding.pattern, usage);
|
|
102
|
+
} else {
|
|
103
|
+
collectReferenceMembers({
|
|
104
|
+
parameterName: info.binding.name,
|
|
105
|
+
scope: context.sourceCode.getScope(node),
|
|
106
|
+
usage
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
"Program:exit"() {
|
|
112
|
+
for (const [typeName, keyNodes] of interfaceKeyNodes) {
|
|
113
|
+
const usage = usageByInterface.get(typeName);
|
|
114
|
+
if (!usage || usage.usesAll) {
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
for (const [memberName, keyNode] of keyNodes) {
|
|
118
|
+
if (!usage.used.has(memberName)) {
|
|
119
|
+
context.report({
|
|
120
|
+
data: {
|
|
121
|
+
interfaceName: typeName,
|
|
122
|
+
member: memberName
|
|
123
|
+
},
|
|
124
|
+
messageId: MESSAGE_ID,
|
|
125
|
+
node: keyNode
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
TSInterfaceDeclaration(node) {
|
|
132
|
+
const name = getInterfaceName(node);
|
|
133
|
+
if (!PARAMS_OPTIONS_SUFFIX_PATTERN.test(name)) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
interfaceKeyNodes.set(name, getInterfaceMembers(node));
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
function getOrCreateUsage(typeName) {
|
|
140
|
+
let usage = usageByInterface.get(typeName);
|
|
141
|
+
if (!usage) {
|
|
142
|
+
usage = { used: /* @__PURE__ */ new Set(), usesAll: false };
|
|
143
|
+
usageByInterface.set(typeName, usage);
|
|
144
|
+
}
|
|
145
|
+
return usage;
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
meta: {
|
|
149
|
+
docs: {
|
|
150
|
+
description: "Flag `*Params`/`*Options` interface members never accessed by the function that receives them"
|
|
151
|
+
},
|
|
152
|
+
messages: {
|
|
153
|
+
[MESSAGE_ID]: 'Member "{{ member }}" of "{{ interfaceName }}" is never accessed by the function that receives it. Remove it (the compiler will catch it if it is still needed elsewhere).'
|
|
154
|
+
},
|
|
155
|
+
schema: [],
|
|
156
|
+
type: "suggestion"
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
function classifyReference(reference, usage) {
|
|
160
|
+
const parent = record(reference)["parent"];
|
|
161
|
+
if (parent.type === "MemberExpression" && record(parent)["object"] === reference) {
|
|
162
|
+
collectMemberAccess(parent, usage);
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
if (parent.type === "VariableDeclarator" && record(parent)["init"] === reference && record(parent)["id"].type === "ObjectPattern") {
|
|
166
|
+
collectPatternMembers(record(parent)["id"], usage);
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
usage.usesAll = true;
|
|
170
|
+
}
|
|
171
|
+
function collectMemberAccess(node, usage) {
|
|
172
|
+
const isComputed = record(node)["computed"] === true;
|
|
173
|
+
const property = record(node)["property"];
|
|
174
|
+
if (property.type === "Identifier") {
|
|
175
|
+
if (!isComputed) {
|
|
176
|
+
usage.used.add(record(property)["name"]);
|
|
177
|
+
}
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (property.type !== "Literal") {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
const value = record(property)["value"];
|
|
184
|
+
if (typeof value === "string") {
|
|
185
|
+
usage.used.add(value);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
function collectPatternMembers(pattern, usage) {
|
|
189
|
+
for (const property of record(pattern)["properties"]) {
|
|
190
|
+
if (property.type !== "Property") {
|
|
191
|
+
usage.usesAll = true;
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
if (record(property)["computed"] === true) {
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
const key = record(property)["key"];
|
|
198
|
+
if (key.type === "Identifier") {
|
|
199
|
+
usage.used.add(record(key)["name"]);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
function collectReferenceMembers(params) {
|
|
204
|
+
const { parameterName, scope, usage } = params;
|
|
205
|
+
const variable = (0, import_type_guards.ensureNonNullable)(scope.set.get(parameterName));
|
|
206
|
+
for (const reference of variable.references) {
|
|
207
|
+
classifyReference(reference.identifier, usage);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
function getInterfaceMembers(node) {
|
|
211
|
+
const members = /* @__PURE__ */ new Map();
|
|
212
|
+
const interfaceBody = record(node)["body"];
|
|
213
|
+
for (const signature of record(interfaceBody)["body"]) {
|
|
214
|
+
if (nodeType(signature) !== "TSPropertySignature" && nodeType(signature) !== "TSMethodSignature" || record(signature)["computed"] === true) {
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
const key = record(signature)["key"];
|
|
218
|
+
if (key.type === "Identifier") {
|
|
219
|
+
members.set(record(key)["name"], key);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return members;
|
|
223
|
+
}
|
|
224
|
+
function getInterfaceName(node) {
|
|
225
|
+
const id = record(node)["id"];
|
|
226
|
+
return record(id)["name"];
|
|
227
|
+
}
|
|
228
|
+
function getParameterInfo(parameter) {
|
|
229
|
+
const actualParameter = nodeType(parameter) === "TSParameterProperty" ? record(parameter)["parameter"] : parameter;
|
|
230
|
+
const typeName = getTypeReferenceName(actualParameter);
|
|
231
|
+
if (!typeName || !PARAMS_OPTIONS_SUFFIX_PATTERN.test(typeName)) {
|
|
232
|
+
return void 0;
|
|
233
|
+
}
|
|
234
|
+
if (actualParameter.type === "Identifier") {
|
|
235
|
+
return { binding: { name: record(actualParameter)["name"], type: "identifier" }, typeName };
|
|
236
|
+
}
|
|
237
|
+
return actualParameter.type === "ObjectPattern" ? { binding: { pattern: actualParameter, type: "pattern" }, typeName } : void 0;
|
|
238
|
+
}
|
|
239
|
+
function getTypeReferenceName(parameter) {
|
|
240
|
+
const annotation = record(parameter)["typeAnnotation"];
|
|
241
|
+
if (!isNode(annotation)) {
|
|
242
|
+
return void 0;
|
|
243
|
+
}
|
|
244
|
+
const typeNode = record(annotation)["typeAnnotation"];
|
|
245
|
+
if (nodeType(typeNode) !== "TSTypeReference") {
|
|
246
|
+
return void 0;
|
|
247
|
+
}
|
|
248
|
+
const typeName = record(typeNode)["typeName"];
|
|
249
|
+
return typeName.type === "Identifier" ? record(typeName)["name"] : void 0;
|
|
250
|
+
}
|
|
251
|
+
function isNode(value) {
|
|
252
|
+
return typeof value === "object" && value !== null && typeof value.type === "string";
|
|
253
|
+
}
|
|
254
|
+
function nodeType(node) {
|
|
255
|
+
return record(node)["type"];
|
|
256
|
+
}
|
|
257
|
+
function record(node) {
|
|
258
|
+
return node;
|
|
259
|
+
}
|
|
260
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
261
|
+
0 && (module.exports = {
|
|
262
|
+
MESSAGE_ID,
|
|
263
|
+
noUnusedParamsMembers
|
|
264
|
+
});
|
|
265
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL25vLXVudXNlZC1wYXJhbXMtbWVtYmVycy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEVTTGludCBydWxlOiBuby11bnVzZWQtcGFyYW1zLW1lbWJlcnNcbiAqXG4gKiBGbGFncyBtZW1iZXJzIG9mIGEgYCpQYXJhbXNgIC8gYCpPcHRpb25zYCBwYXJhbWV0ZXItYmFnIGludGVyZmFjZSB0aGF0IGFyZVxuICogbmV2ZXIgYWNjZXNzZWQgd2l0aGluIHRoZSBmdW5jdGlvbi9tZXRob2QvY29uc3RydWN0b3IgdGhhdCByZWNlaXZlcyB0aGVcbiAqIGludGVyZmFjZSBhcyBhIHBhcmFtZXRlci5cbiAqXG4gKiBEZXRlY3Rpb24gaXMgcGVyLWZ1bmN0aW9uLCB1c2luZyBzY29wZSBhbmFseXNpcyB0byBmaW5kIHRoZSByZWFsIHJlZmVyZW5jZXNcbiAqIHRvIHRoZSBwYXJhbWV0ZXIgKG5vdCB1bnJlbGF0ZWQgc2FtZS1uYW1lZCBpZGVudGlmaWVycykuIEEgbWVtYmVyIGNvdW50cyBhc1xuICogdXNlZCB3aGVuIGl0IGlzIHJlZmVyZW5jZWQgYnkgbmFtZSBcdTIwMTQgYHBhcmFtcy5tZW1iZXJgLCBgcGFyYW1zWydtZW1iZXInXWAsIG9yXG4gKiBgY29uc3QgeyBtZW1iZXIgfSA9IHBhcmFtc2AgKHBsdXMgYSBkZXN0cnVjdHVyZWQgc2lnbmF0dXJlXG4gKiBgZm4oeyBtZW1iZXIgfTogRm9vUGFyYW1zKWApLlxuICpcbiAqIENydWNpYWxseSwgaWYgdGhlIG9iamVjdCBldmVyIEVTQ0FQRVMgd2hvbGUgXHUyMDE0IHNwcmVhZCAoYHsgLi4ucGFyYW1zIH1gKSwgcmVzdFxuICogKGBjb25zdCB7IC4uLnJlc3QgfSA9IHBhcmFtc2ApLCBwYXNzZWQgYXMgYW4gYXJndW1lbnQgKGBmKHBhcmFtcylgKSwgcmV0dXJuZWQsXG4gKiBvciBzdG9yZWQgKGB0aGlzLnBhcmFtcyA9IHBhcmFtc2ApIFx1MjAxNCBldmVyeSBtZW1iZXIgaXMgdHJlYXRlZCBhcyB1c2VkIGFuZFxuICogbm90aGluZyBpcyByZXBvcnRlZCBmb3IgdGhhdCBpbnRlcmZhY2UuIFN1Y2ggYW4gZXNjYXBlIGVpdGhlciByZWFkcyBldmVyeVxuICogbWVtYmVyIChzcHJlYWQvcmVzdCkgb3IgaGFuZHMgdGhlIG9iamVjdCB0byBjb2RlIHRoaXMgcnVsZSBjYW5ub3Qgc2VlLCBzb1xuICogbWVtYmVyIGRlYWRuZXNzIGNhbm5vdCBiZSBkZWNpZGVkIGxvY2FsbHkuXG4gKlxuICogQSBtZW1iZXIgaXMgdGhlcmVmb3JlIGZsYWdnZWQgb25seSB3aGVuIGl0IGlzIG5ldmVyIHJlZmVyZW5jZWQgYnkgbmFtZSBBTkRcbiAqIHRoZSBvYmplY3QgbmV2ZXIgZXNjYXBlcyBcdTIwMTQgaS5lLiB0aGUgXCJhIGBwYXJhbXMueGAgdXNhZ2Ugd2FzIGRlbGV0ZWQgYnV0IGB4YFxuICogd2FzIGxlZnQgb24gdGhlIGludGVyZmFjZVwiIGNhc2UuIEEgbWVtYmVyIHRoYXQgaXMgYWN0dWFsbHkgc3RpbGwgbmVlZGVkIChyZWFkXG4gKiB2aWEgYW4gZXNjYXBlKSBpcyBuZXZlciB3cm9uZ2x5IGZsYWdnZWQ7IGEgbWVtYmVyIHRoYXQgaXMgZXNjYXBlZCBidXQgZGVhZFxuICogZG93bnN0cmVhbSBpcyBhIHRvbGVyYXRlZCBmYWxzZSBuZWdhdGl2ZSAoaXRzIGRlYWRuZXNzIGlzIG5vdCBsb2NhbCkuXG4gKlxuICogT25seSBpbnRlcmZhY2VzIGRlY2xhcmVkIGluIHRoZSBzYW1lIGZpbGUgYXJlIGNoZWNrZWQ7IGFuIGltcG9ydGVkIHBhcmFtZXRlclxuICogdHlwZSBpcyBza2lwcGVkLiBPbmx5IGlkZW50aWZpZXItbmFtZWQgbWVtYmVycyBhcmUgdHJhY2tlZC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIFJ1bGUsXG4gIFNjb3BlXG59IGZyb20gJ2VzbGludCc7XG5cbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcblxuY29uc3QgUEFSQU1TX09QVElPTlNfU1VGRklYX1BBVFRFUk4gPSAvKD86UGFyYW1zfE9wdGlvbnMpJC87XG5cbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIGEgYCpQYXJhbXNgL2AqT3B0aW9uc2AgaW50ZXJmYWNlIG1lbWJlciBpcyBuZXZlciBhY2Nlc3NlZCBieSB0aGUgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSUQgPSAndW51c2VkUGFyYW1zTWVtYmVyJztcblxuaW50ZXJmYWNlIElkZW50aWZpZXJCaW5kaW5nIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiAnaWRlbnRpZmllcic7XG59XG5cbmludGVyZmFjZSBJbnRlcmZhY2VVc2FnZSB7XG4gIHJlYWRvbmx5IHVzZWQ6IFNldDxzdHJpbmc+O1xuICB1c2VzQWxsOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgTWF5YmVUeXBlZE5vZGUge1xuICB0eXBlPzogdW5rbm93bjtcbn1cblxudHlwZSBQYXJhbWV0ZXJCaW5kaW5nID0gSWRlbnRpZmllckJpbmRpbmcgfCBQYXR0ZXJuQmluZGluZztcblxuaW50ZXJmYWNlIFBhcmFtZXRlckluZm8ge1xuICByZWFkb25seSBiaW5kaW5nOiBQYXJhbWV0ZXJCaW5kaW5nO1xuICByZWFkb25seSB0eXBlTmFtZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUGF0dGVybkJpbmRpbmcge1xuICBwYXR0ZXJuOiBSdWxlLk5vZGU7XG4gIHR5cGU6ICdwYXR0ZXJuJztcbn1cblxuLyoqXG4gKiBFU0xpbnQgcnVsZSBmbGFnZ2luZyBgKlBhcmFtc2AvYCpPcHRpb25zYCBpbnRlcmZhY2UgbWVtYmVycyB0aGF0IHRoZSBmdW5jdGlvbiByZWNlaXZpbmcgdGhlbSBuZXZlciBhY2Nlc3Nlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vVW51c2VkUGFyYW1zTWVtYmVyczogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IGludGVyZmFjZUtleU5vZGVzID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIFJ1bGUuTm9kZT4+KCk7XG4gICAgY29uc3QgdXNhZ2VCeUludGVyZmFjZSA9IG5ldyBNYXA8c3RyaW5nLCBJbnRlcmZhY2VVc2FnZT4oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAnOmZ1bmN0aW9uJyhub2RlOiBSdWxlLk5vZGUpOiB2b2lkIHtcbiAgICAgICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgcmVjb3JkKG5vZGUpWydwYXJhbXMnXSBhcyBSdWxlLk5vZGVbXSkge1xuICAgICAgICAgIGNvbnN0IGluZm8gPSBnZXRQYXJhbWV0ZXJJbmZvKHBhcmFtZXRlcik7XG4gICAgICAgICAgaWYgKCFpbmZvKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB1c2FnZSA9IGdldE9yQ3JlYXRlVXNhZ2UoaW5mby50eXBlTmFtZSk7XG4gICAgICAgICAgaWYgKGluZm8uYmluZGluZy50eXBlID09PSAncGF0dGVybicpIHtcbiAgICAgICAgICAgIGNvbGxlY3RQYXR0ZXJuTWVtYmVycyhpbmZvLmJpbmRpbmcucGF0dGVybiwgdXNhZ2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb2xsZWN0UmVmZXJlbmNlTWVtYmVycyh7XG4gICAgICAgICAgICAgIHBhcmFtZXRlck5hbWU6IGluZm8uYmluZGluZy5uYW1lLFxuICAgICAgICAgICAgICBzY29wZTogY29udGV4dC5zb3VyY2VDb2RlLmdldFNjb3BlKG5vZGUpLFxuICAgICAgICAgICAgICB1c2FnZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgJ1Byb2dyYW06ZXhpdCcoKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgW3R5cGVOYW1lLCBrZXlOb2Rlc10gb2YgaW50ZXJmYWNlS2V5Tm9kZXMpIHtcbiAgICAgICAgICBjb25zdCB1c2FnZSA9IHVzYWdlQnlJbnRlcmZhY2UuZ2V0KHR5cGVOYW1lKTtcbiAgICAgICAgICBpZiAoIXVzYWdlIHx8IHVzYWdlLnVzZXNBbGwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAoY29uc3QgW21lbWJlck5hbWUsIGtleU5vZGVdIG9mIGtleU5vZGVzKSB7XG4gICAgICAgICAgICBpZiAoIXVzYWdlLnVzZWQuaGFzKG1lbWJlck5hbWUpKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICBpbnRlcmZhY2VOYW1lOiB0eXBlTmFtZSxcbiAgICAgICAgICAgICAgICAgIG1lbWJlcjogbWVtYmVyTmFtZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lELFxuICAgICAgICAgICAgICAgIG5vZGU6IGtleU5vZGVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgVFNJbnRlcmZhY2VEZWNsYXJhdGlvbihub2RlOiBSdWxlLk5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGdldEludGVyZmFjZU5hbWUobm9kZSk7XG4gICAgICAgIGlmICghUEFSQU1TX09QVElPTlNfU1VGRklYX1BBVFRFUk4udGVzdChuYW1lKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpbnRlcmZhY2VLZXlOb2Rlcy5zZXQobmFtZSwgZ2V0SW50ZXJmYWNlTWVtYmVycyhub2RlKSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGdldE9yQ3JlYXRlVXNhZ2UodHlwZU5hbWU6IHN0cmluZyk6IEludGVyZmFjZVVzYWdlIHtcbiAgICAgIGxldCB1c2FnZSA9IHVzYWdlQnlJbnRlcmZhY2UuZ2V0KHR5cGVOYW1lKTtcbiAgICAgIGlmICghdXNhZ2UpIHtcbiAgICAgICAgdXNhZ2UgPSB7IHVzZWQ6IG5ldyBTZXQ8c3RyaW5nPigpLCB1c2VzQWxsOiBmYWxzZSB9O1xuICAgICAgICB1c2FnZUJ5SW50ZXJmYWNlLnNldCh0eXBlTmFtZSwgdXNhZ2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVzYWdlO1xuICAgIH1cbiAgfSxcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnRmxhZyBgKlBhcmFtc2AvYCpPcHRpb25zYCBpbnRlcmZhY2UgbWVtYmVycyBuZXZlciBhY2Nlc3NlZCBieSB0aGUgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyB0aGVtJ1xuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIFtNRVNTQUdFX0lEXTogJ01lbWJlciBcInt7IG1lbWJlciB9fVwiIG9mIFwie3sgaW50ZXJmYWNlTmFtZSB9fVwiIGlzIG5ldmVyIGFjY2Vzc2VkIGJ5IHRoZSBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGl0LiBSZW1vdmUgaXQgKHRoZSBjb21waWxlciB3aWxsIGNhdGNoIGl0IGlmIGl0IGlzIHN0aWxsIG5lZWRlZCBlbHNld2hlcmUpLidcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nXG4gIH1cbn07XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNvbGxlY3RSZWZlcmVuY2VNZW1iZXJzfS5cbiAqL1xuaW50ZXJmYWNlIENvbGxlY3RSZWZlcmVuY2VNZW1iZXJzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIgd2hvc2UgcmVmZXJlbmNlcyBhcmUgaW5zcGVjdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyYW1ldGVyTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2NvcGUgaW4gd2hpY2ggdGhlIHBhcmFtZXRlciBpcyBib3VuZC5cbiAgICovXG4gIHJlYWRvbmx5IHNjb3BlOiBTY29wZS5TY29wZTtcblxuICAvKipcbiAgICogVGhlIHVzYWdlIGFjY3VtdWxhdG9yIHRvIHJlY29yZCBhY2Nlc3NlZCBtZW1iZXJzIGludG8uXG4gICAqL1xuICByZWFkb25seSB1c2FnZTogSW50ZXJmYWNlVXNhZ2U7XG59XG5cbmZ1bmN0aW9uIGNsYXNzaWZ5UmVmZXJlbmNlKHJlZmVyZW5jZTogb2JqZWN0LCB1c2FnZTogSW50ZXJmYWNlVXNhZ2UpOiB2b2lkIHtcbiAgY29uc3QgcGFyZW50ID0gcmVjb3JkKHJlZmVyZW5jZSlbJ3BhcmVudCddIGFzIFJ1bGUuTm9kZTtcbiAgaWYgKHBhcmVudC50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicgJiYgcmVjb3JkKHBhcmVudClbJ29iamVjdCddID09PSByZWZlcmVuY2UpIHtcbiAgICBjb2xsZWN0TWVtYmVyQWNjZXNzKHBhcmVudCwgdXNhZ2UpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRvcicgJiYgcmVjb3JkKHBhcmVudClbJ2luaXQnXSA9PT0gcmVmZXJlbmNlICYmIChyZWNvcmQocGFyZW50KVsnaWQnXSBhcyBSdWxlLk5vZGUpLnR5cGUgPT09ICdPYmplY3RQYXR0ZXJuJykge1xuICAgIGNvbGxlY3RQYXR0ZXJuTWVtYmVycyhyZWNvcmQocGFyZW50KVsnaWQnXSBhcyBSdWxlLk5vZGUsIHVzYWdlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBUaGUgb2JqZWN0IGVzY2FwZXMgd2hvbGUgKHBhc3NlZCBhcyBhbiBhcmd1bWVudCwgcmV0dXJuZWQsIHN0b3JlZCwgc3ByZWFkLCAuLi4pOiBldmVyeSBtZW1iZXIgbWF5IGJlIHJlYWQgZWxzZXdoZXJlLlxuICB1c2FnZS51c2VzQWxsID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29sbGVjdE1lbWJlckFjY2Vzcyhub2RlOiBSdWxlLk5vZGUsIHVzYWdlOiBJbnRlcmZhY2VVc2FnZSk6IHZvaWQge1xuICBjb25zdCBpc0NvbXB1dGVkID0gcmVjb3JkKG5vZGUpWydjb21wdXRlZCddID09PSB0cnVlO1xuICBjb25zdCBwcm9wZXJ0eSA9IHJlY29yZChub2RlKVsncHJvcGVydHknXSBhcyBSdWxlLk5vZGU7XG4gIGlmIChwcm9wZXJ0eS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICBpZiAoIWlzQ29tcHV0ZWQpIHtcbiAgICAgIHVzYWdlLnVzZWQuYWRkKHJlY29yZChwcm9wZXJ0eSlbJ25hbWUnXSBhcyBzdHJpbmcpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocHJvcGVydHkudHlwZSAhPT0gJ0xpdGVyYWwnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgdmFsdWUgPSByZWNvcmQocHJvcGVydHkpWyd2YWx1ZSddO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHVzYWdlLnVzZWQuYWRkKHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb2xsZWN0UGF0dGVybk1lbWJlcnMocGF0dGVybjogUnVsZS5Ob2RlLCB1c2FnZTogSW50ZXJmYWNlVXNhZ2UpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiByZWNvcmQocGF0dGVybilbJ3Byb3BlcnRpZXMnXSBhcyBSdWxlLk5vZGVbXSkge1xuICAgIGlmIChwcm9wZXJ0eS50eXBlICE9PSAnUHJvcGVydHknKSB7XG4gICAgICAvLyBgY29uc3QgeyAuLi5yZXN0IH0gPSBwYXJhbXNgIHJlYWRzIGV2ZXJ5IHJlbWFpbmluZyBtZW1iZXIuXG4gICAgICB1c2FnZS51c2VzQWxsID0gdHJ1ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAocmVjb3JkKHByb3BlcnR5KVsnY29tcHV0ZWQnXSA9PT0gdHJ1ZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGtleSA9IHJlY29yZChwcm9wZXJ0eSlbJ2tleSddIGFzIFJ1bGUuTm9kZTtcbiAgICBpZiAoa2V5LnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgdXNhZ2UudXNlZC5hZGQocmVjb3JkKGtleSlbJ25hbWUnXSBhcyBzdHJpbmcpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb2xsZWN0UmVmZXJlbmNlTWVtYmVycyhwYXJhbXM6IENvbGxlY3RSZWZlcmVuY2VNZW1iZXJzUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHsgcGFyYW1ldGVyTmFtZSwgc2NvcGUsIHVzYWdlIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHZhcmlhYmxlID0gZW5zdXJlTm9uTnVsbGFibGUoc2NvcGUuc2V0LmdldChwYXJhbWV0ZXJOYW1lKSk7XG4gIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIHZhcmlhYmxlLnJlZmVyZW5jZXMpIHtcbiAgICBjbGFzc2lmeVJlZmVyZW5jZShyZWZlcmVuY2UuaWRlbnRpZmllciwgdXNhZ2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEludGVyZmFjZU1lbWJlcnMobm9kZTogUnVsZS5Ob2RlKTogTWFwPHN0cmluZywgUnVsZS5Ob2RlPiB7XG4gIGNvbnN0IG1lbWJlcnMgPSBuZXcgTWFwPHN0cmluZywgUnVsZS5Ob2RlPigpO1xuICBjb25zdCBpbnRlcmZhY2VCb2R5ID0gcmVjb3JkKG5vZGUpWydib2R5J10gYXMgUnVsZS5Ob2RlO1xuICBmb3IgKGNvbnN0IHNpZ25hdHVyZSBvZiByZWNvcmQoaW50ZXJmYWNlQm9keSlbJ2JvZHknXSBhcyBSdWxlLk5vZGVbXSkge1xuICAgIGlmICgobm9kZVR5cGUoc2lnbmF0dXJlKSAhPT0gJ1RTUHJvcGVydHlTaWduYXR1cmUnICYmIG5vZGVUeXBlKHNpZ25hdHVyZSkgIT09ICdUU01ldGhvZFNpZ25hdHVyZScpIHx8IChyZWNvcmQoc2lnbmF0dXJlKVsnY29tcHV0ZWQnXSA9PT0gdHJ1ZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSByZWNvcmQoc2lnbmF0dXJlKVsna2V5J10gYXMgUnVsZS5Ob2RlO1xuICAgIGlmIChrZXkudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICBtZW1iZXJzLnNldChyZWNvcmQoa2V5KVsnbmFtZSddIGFzIHN0cmluZywga2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1lbWJlcnM7XG59XG5cbmZ1bmN0aW9uIGdldEludGVyZmFjZU5hbWUobm9kZTogUnVsZS5Ob2RlKTogc3RyaW5nIHtcbiAgY29uc3QgaWQgPSByZWNvcmQobm9kZSlbJ2lkJ10gYXMgUnVsZS5Ob2RlO1xuICByZXR1cm4gcmVjb3JkKGlkKVsnbmFtZSddIGFzIHN0cmluZztcbn1cblxuZnVuY3Rpb24gZ2V0UGFyYW1ldGVySW5mbyhwYXJhbWV0ZXI6IFJ1bGUuTm9kZSk6IFBhcmFtZXRlckluZm8gfCB1bmRlZmluZWQge1xuICBjb25zdCBhY3R1YWxQYXJhbWV0ZXIgPSBub2RlVHlwZShwYXJhbWV0ZXIpID09PSAnVFNQYXJhbWV0ZXJQcm9wZXJ0eScgPyByZWNvcmQocGFyYW1ldGVyKVsncGFyYW1ldGVyJ10gYXMgUnVsZS5Ob2RlIDogcGFyYW1ldGVyO1xuXG4gIGNvbnN0IHR5cGVOYW1lID0gZ2V0VHlwZVJlZmVyZW5jZU5hbWUoYWN0dWFsUGFyYW1ldGVyKTtcbiAgaWYgKCF0eXBlTmFtZSB8fCAhUEFSQU1TX09QVElPTlNfU1VGRklYX1BBVFRFUk4udGVzdCh0eXBlTmFtZSkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKGFjdHVhbFBhcmFtZXRlci50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICByZXR1cm4geyBiaW5kaW5nOiB7IG5hbWU6IHJlY29yZChhY3R1YWxQYXJhbWV0ZXIpWyduYW1lJ10gYXMgc3RyaW5nLCB0eXBlOiAnaWRlbnRpZmllcicgfSwgdHlwZU5hbWUgfTtcbiAgfVxuXG4gIHJldHVybiBhY3R1YWxQYXJhbWV0ZXIudHlwZSA9PT0gJ09iamVjdFBhdHRlcm4nID8geyBiaW5kaW5nOiB7IHBhdHRlcm46IGFjdHVhbFBhcmFtZXRlciwgdHlwZTogJ3BhdHRlcm4nIH0sIHR5cGVOYW1lIH0gOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldFR5cGVSZWZlcmVuY2VOYW1lKHBhcmFtZXRlcjogUnVsZS5Ob2RlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYW5ub3RhdGlvbiA9IHJlY29yZChwYXJhbWV0ZXIpWyd0eXBlQW5ub3RhdGlvbiddO1xuICBpZiAoIWlzTm9kZShhbm5vdGF0aW9uKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCB0eXBlTm9kZSA9IHJlY29yZChhbm5vdGF0aW9uKVsndHlwZUFubm90YXRpb24nXSBhcyBSdWxlLk5vZGU7XG4gIGlmIChub2RlVHlwZSh0eXBlTm9kZSkgIT09ICdUU1R5cGVSZWZlcmVuY2UnKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHR5cGVOYW1lID0gcmVjb3JkKHR5cGVOb2RlKVsndHlwZU5hbWUnXSBhcyBSdWxlLk5vZGU7XG4gIHJldHVybiB0eXBlTmFtZS50eXBlID09PSAnSWRlbnRpZmllcicgPyAocmVjb3JkKHR5cGVOYW1lKVsnbmFtZSddIGFzIHN0cmluZykgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzTm9kZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJ1bGUuTm9kZSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiAodmFsdWUgYXMgTWF5YmVUeXBlZE5vZGUpLnR5cGUgPT09ICdzdHJpbmcnO1xufVxuXG5mdW5jdGlvbiBub2RlVHlwZShub2RlOiBSdWxlLk5vZGUpOiBzdHJpbmcge1xuICByZXR1cm4gcmVjb3JkKG5vZGUpWyd0eXBlJ10gYXMgc3RyaW5nO1xufVxuXG5mdW5jdGlvbiByZWNvcmQobm9kZTogb2JqZWN0KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gbm9kZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXFDQSx5QkFBa0M7QUFFbEMsTUFBTSxnQ0FBZ0M7QUFLL0IsTUFBTSxhQUFhO0FBK0JuQixNQUFNLHdCQUF5QztBQUFBLEVBQ3BELE9BQU8sU0FBUztBQUNkLFVBQU0sb0JBQW9CLG9CQUFJLElBQW9DO0FBQ2xFLFVBQU0sbUJBQW1CLG9CQUFJLElBQTRCO0FBRXpELFdBQU87QUFBQSxNQUNMLFlBQVksTUFBdUI7QUFDakMsbUJBQVcsYUFBYSxPQUFPLElBQUksRUFBRSxRQUFRLEdBQWtCO0FBQzdELGdCQUFNLE9BQU8saUJBQWlCLFNBQVM7QUFDdkMsY0FBSSxDQUFDLE1BQU07QUFDVDtBQUFBLFVBQ0Y7QUFFQSxnQkFBTSxRQUFRLGlCQUFpQixLQUFLLFFBQVE7QUFDNUMsY0FBSSxLQUFLLFFBQVEsU0FBUyxXQUFXO0FBQ25DLGtDQUFzQixLQUFLLFFBQVEsU0FBUyxLQUFLO0FBQUEsVUFDbkQsT0FBTztBQUNMLG9DQUF3QjtBQUFBLGNBQ3RCLGVBQWUsS0FBSyxRQUFRO0FBQUEsY0FDNUIsT0FBTyxRQUFRLFdBQVcsU0FBUyxJQUFJO0FBQUEsY0FDdkM7QUFBQSxZQUNGLENBQUM7QUFBQSxVQUNIO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGlCQUF1QjtBQUNyQixtQkFBVyxDQUFDLFVBQVUsUUFBUSxLQUFLLG1CQUFtQjtBQUNwRCxnQkFBTSxRQUFRLGlCQUFpQixJQUFJLFFBQVE7QUFDM0MsY0FBSSxDQUFDLFNBQVMsTUFBTSxTQUFTO0FBQzNCO0FBQUEsVUFD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
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/// <reference path="../../index.d.cts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* ESLint rule: no-unused-params-members
|
|
6
|
+
*
|
|
7
|
+
* Flags members of a `*Params` / `*Options` parameter-bag interface that are
|
|
8
|
+
* never accessed within the function/method/constructor that receives the
|
|
9
|
+
* interface as a parameter.
|
|
10
|
+
*
|
|
11
|
+
* Detection is per-function, using scope analysis to find the real references
|
|
12
|
+
* to the parameter (not unrelated same-named identifiers). A member counts as
|
|
13
|
+
* used when it is referenced by name — `params.member`, `params['member']`, or
|
|
14
|
+
* `const { member } = params` (plus a destructured signature
|
|
15
|
+
* `fn({ member }: FooParams)`).
|
|
16
|
+
*
|
|
17
|
+
* Crucially, if the object ever ESCAPES whole — spread (`{ ...params }`), rest
|
|
18
|
+
* (`const { ...rest } = params`), passed as an argument (`f(params)`), returned,
|
|
19
|
+
* or stored (`this.params = params`) — every member is treated as used and
|
|
20
|
+
* nothing is reported for that interface. Such an escape either reads every
|
|
21
|
+
* member (spread/rest) or hands the object to code this rule cannot see, so
|
|
22
|
+
* member deadness cannot be decided locally.
|
|
23
|
+
*
|
|
24
|
+
* A member is therefore flagged only when it is never referenced by name AND
|
|
25
|
+
* the object never escapes — i.e. the "a `params.x` usage was deleted but `x`
|
|
26
|
+
* was left on the interface" case. A member that is actually still needed (read
|
|
27
|
+
* via an escape) is never wrongly flagged; a member that is escaped but dead
|
|
28
|
+
* downstream is a tolerated false negative (its deadness is not local).
|
|
29
|
+
*
|
|
30
|
+
* Only interfaces declared in the same file are checked; an imported parameter
|
|
31
|
+
* type is skipped. Only identifier-named members are tracked.
|
|
32
|
+
*/
|
|
33
|
+
import type { Rule } from 'eslint' with { 'resolution-mode': 'import' };
|
|
34
|
+
/**
|
|
35
|
+
Message ID reported when a `*Params`/`*Options` interface member is never accessed by the function that receives it.
|
|
36
|
+
*/
|
|
37
|
+
export declare const MESSAGE_ID = "unusedParamsMember";
|
|
38
|
+
/**
|
|
39
|
+
* ESLint rule flagging `*Params`/`*Options` interface members that the function receiving them never accesses.
|
|
40
|
+
*/
|
|
41
|
+
export declare const noUnusedParamsMembers: Rule.RuleModule;
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
(function () {
|
|
7
|
+
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
+
symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
|
|
9
|
+
symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function ensureBrowserProcess() {
|
|
13
|
+
const browserProcess = {
|
|
14
|
+
browser: true,
|
|
15
|
+
cwd() {
|
|
16
|
+
return '/';
|
|
17
|
+
},
|
|
18
|
+
env: {},
|
|
19
|
+
platform: 'android'
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const existingProcess = globalThis.process;
|
|
23
|
+
|
|
24
|
+
if (!existingProcess) {
|
|
25
|
+
globalThis.process = browserProcess;
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (existingProcess.versions?.node) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const existingProcessRecord = existingProcess;
|
|
34
|
+
|
|
35
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
36
|
+
existingProcessRecord[key] ??= value;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
existingProcessRecord['browser'] = true;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function keepName($unknown) {
|
|
43
|
+
return $unknown;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
(function initCjs() {
|
|
47
|
+
const globalThisRecord = globalThis;
|
|
48
|
+
ensureDisposeSymbols();
|
|
49
|
+
globalThisRecord['__name'] ??= keepName;
|
|
50
|
+
globalThisRecord['__extractDefault'] ??= extractDefault;
|
|
51
|
+
|
|
52
|
+
ensureBrowserProcess();
|
|
53
|
+
|
|
54
|
+
// eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
|
|
55
|
+
function extractDefault(module) {
|
|
56
|
+
return module && module.__esModule && 'default' in module ? module.default : module;
|
|
57
|
+
}
|
|
58
|
+
})();
|
|
59
|
+
})();
|
|
60
|
+
|
|
61
|
+
"use strict";
|
|
62
|
+
var __defProp = Object.defineProperty;
|
|
63
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
64
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
65
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
66
|
+
var __export = (target, all) => {
|
|
67
|
+
for (var name in all)
|
|
68
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
69
|
+
};
|
|
70
|
+
var __copyProps = (to, from, except, desc) => {
|
|
71
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
72
|
+
for (let key of __getOwnPropNames(from))
|
|
73
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
74
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
75
|
+
}
|
|
76
|
+
return to;
|
|
77
|
+
};
|
|
78
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
79
|
+
var no_used_underscore_variables_exports = {};
|
|
80
|
+
__export(no_used_underscore_variables_exports, {
|
|
81
|
+
MESSAGE_ID: () => MESSAGE_ID,
|
|
82
|
+
noUsedUnderscoreVariables: () => noUsedUnderscoreVariables
|
|
83
|
+
});
|
|
84
|
+
module.exports = __toCommonJS(no_used_underscore_variables_exports);
|
|
85
|
+
var import_type_guards = require('@mnaoumov/typescript-lib/type-guards');
|
|
86
|
+
const MESSAGE_ID = "noUsedUnderscoreVariables";
|
|
87
|
+
const noUsedUnderscoreVariables = {
|
|
88
|
+
create(context) {
|
|
89
|
+
return {
|
|
90
|
+
":function"(node) {
|
|
91
|
+
const scope = context.sourceCode.getScope(node);
|
|
92
|
+
for (const variable of scope.variables) {
|
|
93
|
+
if (!variable.name.startsWith("_")) {
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
const definitionNode = variable.defs[0];
|
|
97
|
+
(0, import_type_guards.assertNonNullable)(definitionNode, "User-declared _-prefixed variables always have at least one definition");
|
|
98
|
+
const functionBody = node.body;
|
|
99
|
+
const bodyRange = functionBody?.range;
|
|
100
|
+
const isParameter = definitionNode.type === "Parameter";
|
|
101
|
+
const hasBodyReferences = variable.references.some((reference) => {
|
|
102
|
+
if (!reference.isRead()) {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
return !isParameter || !bodyRange || !reference.identifier.range || reference.identifier.range[0] >= bodyRange[0] && reference.identifier.range[1] <= bodyRange[1];
|
|
106
|
+
});
|
|
107
|
+
if (hasBodyReferences) {
|
|
108
|
+
context.report({
|
|
109
|
+
data: { name: variable.name },
|
|
110
|
+
messageId: MESSAGE_ID,
|
|
111
|
+
node: definitionNode.name
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
},
|
|
118
|
+
meta: {
|
|
119
|
+
docs: {
|
|
120
|
+
description: "Disallow `_`-prefixed parameters and local variables that are actually used"
|
|
121
|
+
},
|
|
122
|
+
messages: {
|
|
123
|
+
[MESSAGE_ID]: '"{{ name }}" has a `_` prefix but is used. Remove the `_` prefix since it is not unused.'
|
|
124
|
+
},
|
|
125
|
+
schema: [],
|
|
126
|
+
type: "problem"
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
130
|
+
0 && (module.exports = {
|
|
131
|
+
MESSAGE_ID,
|
|
132
|
+
noUsedUnderscoreVariables
|
|
133
|
+
});
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL25vLXVzZWQtdW5kZXJzY29yZS12YXJpYWJsZXMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgcnVsZTogbm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlc1xuICpcbiAqIFJlcG9ydHMgYW4gZXJyb3Igd2hlbiBhIHBhcmFtZXRlciBvciBsb2NhbCB2YXJpYWJsZSB3aXRoIGEgYF9gIHByZWZpeCBpc1xuICogYWN0dWFsbHkgcmVmZXJlbmNlZCBpbiB0aGUgZnVuY3Rpb24gYm9keS4gVGhlIGBfYCBwcmVmaXggY29udmVudGlvbiBzaWduYWxzXG4gKiBcInRoaXMgaWRlbnRpZmllciBpcyBpbnRlbnRpb25hbGx5IHVudXNlZFwiIFx1MjAxNCBpZiBpdCBJUyB1c2VkLCB0aGUgcHJlZml4IGlzXG4gKiBtaXNsZWFkaW5nIGFuZCBzaG91bGQgYmUgcmVtb3ZlZC5cbiAqL1xuaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSAnZXNsaW50JztcblxuaW1wb3J0IHsgYXNzZXJ0Tm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuXG5pbnRlcmZhY2UgTm9kZVdpdGhCb2R5IHtcbiAgYm9keT86IFJ1bGUuTm9kZTtcbn1cblxuLyoqXG5NZXNzYWdlIElEIHJlcG9ydGVkIHdoZW4gYSB2YXJpYWJsZSBjYXJyaWVzIGEgYF9gIHByZWZpeCAoc2lnbmFsbGluZyB1bnVzZWQpIGJ1dCBpcyBhY3R1YWxseSB1c2VkLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRCA9ICdub1VzZWRVbmRlcnNjb3JlVmFyaWFibGVzJztcblxuLyoqXG4gKiBFU0xpbnQgcnVsZSBkaXNhbGxvd2luZyBgX2AtcHJlZml4ZWQgcGFyYW1ldGVycyBhbmQgbG9jYWwgdmFyaWFibGVzIHRoYXQgYXJlIGFjdHVhbGx5IHVzZWQsIHNpbmNlIHRoZSBwcmVmaXggYWR2ZXJ0aXNlcyB0aGVtIGFzIHVudXNlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vVXNlZFVuZGVyc2NvcmVWYXJpYWJsZXM6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJzpmdW5jdGlvbicobm9kZTogUnVsZS5Ob2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gY29udGV4dC5zb3VyY2VDb2RlLmdldFNjb3BlKG5vZGUpO1xuXG4gICAgICAgIGZvciAoY29uc3QgdmFyaWFibGUgb2Ygc2NvcGUudmFyaWFibGVzKSB7XG4gICAgICAgICAgaWYgKCF2YXJpYWJsZS5uYW1lLnN0YXJ0c1dpdGgoJ18nKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZGVmaW5pdGlvbk5vZGUgPSB2YXJpYWJsZS5kZWZzWzBdO1xuICAgICAgICAgIGFzc2VydE5vbk51bGxhYmxlKGRlZmluaXRpb25Ob2RlLCAnVXNlci1kZWNsYXJlZCBfLXByZWZpeGVkIHZhcmlhYmxlcyBhbHdheXMgaGF2ZSBhdCBsZWFzdCBvbmUgZGVmaW5pdGlvbicpO1xuXG4gICAgICAgICAgLy8gRm9yIHBhcmFtZXRlcnMsIG9ubHkgY291bnQgcmVmZXJlbmNlcyBpbnNpZGUgdGhlIGZ1bmN0aW9uIGJvZHlcbiAgICAgICAgICAvLyAobm90IGluIHR5cGUgYW5ub3RhdGlvbnMgbGlrZSBgYXNzZXJ0cyBfb2JqIGlzIFRgKS5cbiAgICAgICAgICAvLyBGb3IgbG9jYWwgdmFyaWFibGVzLCBhbnkgcmVhZCByZWZlcmVuY2UgY291bnRzLlxuICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uQm9keSA9IChub2RlIGFzIE5vZGVXaXRoQm9keSkuYm9keTtcbiAgICAgICAgICBjb25zdCBib2R5UmFuZ2UgPSBmdW5jdGlvbkJvZHk/LnJhbmdlO1xuICAgICAgICAgIGNvbnN0IGlzUGFyYW1ldGVyID0gZGVmaW5pdGlvbk5vZGUudHlwZSA9PT0gJ1BhcmFtZXRlcic7XG4gICAgICAgICAgY29uc3QgaGFzQm9keVJlZmVyZW5jZXMgPSB2YXJpYWJsZS5yZWZlcmVuY2VzLnNvbWUoKHJlZmVyZW5jZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZWZlcmVuY2UuaXNSZWFkKCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTG9jYWwgdmFyaWFibGVzIG9yIGZhbGxiYWNrOiBjb3VudCBhbGwgcmVhZHNcbiAgICAgICAgICAgIHJldHVybiAhaXNQYXJhbWV0ZXIgfHwgIWJvZHlSYW5nZSB8fCAhcmVmZXJlbmNlLmlkZW50aWZpZXIucmFuZ2VcbiAgICAgICAgICAgICAgfHwgKHJlZmVyZW5jZS5pZGVudGlmaWVyLnJhbmdlWzBdID49IGJvZHlSYW5nZVswXSAmJiByZWZlcmVuY2UuaWRlbnRpZmllci5yYW5nZVsxXSA8PSBib2R5UmFuZ2VbMV0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChoYXNCb2R5UmVmZXJlbmNlcykge1xuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgICBkYXRhOiB7IG5hbWU6IHZhcmlhYmxlLm5hbWUgfSxcbiAgICAgICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lELFxuICAgICAgICAgICAgICBub2RlOiBkZWZpbml0aW9uTm9kZS5uYW1lXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdEaXNhbGxvdyBgX2AtcHJlZml4ZWQgcGFyYW1ldGVycyBhbmQgbG9jYWwgdmFyaWFibGVzIHRoYXQgYXJlIGFjdHVhbGx5IHVzZWQnXG4gICAgfSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW01FU1NBR0VfSURdOiAnXCJ7eyBuYW1lIH19XCIgaGFzIGEgYF9gIHByZWZpeCBidXQgaXMgdXNlZC4gUmVtb3ZlIHRoZSBgX2AgcHJlZml4IHNpbmNlIGl0IGlzIG5vdCB1bnVzZWQuJ1xuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgICB0eXBlOiAncHJvYmxlbSdcbiAgfVxufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVlBLHlCQUFrQztBQVMzQixNQUFNLGFBQWE7QUFLbkIsTUFBTSw0QkFBNkM7QUFBQSxFQUN4RCxPQUFPLFNBQVM7QUFDZCxXQUFPO0FBQUEsTUFDTCxZQUFZLE1BQXVCO0FBQ2pDLGNBQU0sUUFBUSxRQUFRLFdBQVcsU0FBUyxJQUFJO0FBRTlDLG1CQUFXLFlBQVksTUFBTSxXQUFXO0FBQ3RDLGNBQUksQ0FBQyxTQUFTLEtBQUssV0FBVyxHQUFHLEdBQUc7QUFDbEM7QUFBQSxVQUNGO0FBRUEsZ0JBQU0saUJBQWlCLFNBQVMsS0FBSyxDQUFDO0FBQ3RDLG9EQUFrQixnQkFBZ0Isd0VBQXdFO0FBSzFHLGdCQUFNLGVBQWdCLEtBQXNCO0FBQzVDLGdCQUFNLFlBQVksY0FBYztBQUNoQyxnQkFBTSxjQUFjLGVBQWUsU0FBUztBQUM1QyxnQkFBTSxvQkFBb0IsU0FBUyxXQUFXLEtBQUssQ0FBQyxjQUFjO0FBQ2hFLGdCQUFJLENBQUMsVUFBVSxPQUFPLEdBQUc7QUFDdkIscUJBQU87QUFBQSxZQUNUO0FBRUEsbUJBQU8sQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLFVBQVUsV0FBVyxTQUNyRCxVQUFVLFdBQVcsTUFBTSxDQUFDLEtBQUssVUFBVSxDQUFDLEtBQUssVUFBVSxXQUFXLE1BQU0sQ0FBQyxLQUFLLFVBQVUsQ0FBQztBQUFBLFVBQ3JHLENBQUM7QUFDRCxjQUFJLG1CQUFtQjtBQUNyQixvQkFBUSxPQUFPO0FBQUEsY0FDYixNQUFNLEVBQUUsTUFBTSxTQUFTLEtBQUs7QUFBQSxjQUM1QixXQUFXO0FBQUEsY0FDWCxNQUFNLGVBQWU7QUFBQSxZQUN2QixDQUFDO0FBQUEsVUFDSDtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLE1BQU07QUFBQSxJQUNKLE1BQU07QUFBQSxNQUNKLGFBQWE7QUFBQSxJQUNmO0FBQUEsSUFDQSxVQUFVO0FBQUEsTUFDUixDQUFDLFVBQVUsR0FBRztBQUFBLElBQ2hCO0FBQUEsSUFDQSxRQUFRLENBQUM7QUFBQSxJQUNULE1BQU07QUFBQSxFQUNSO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/// <reference path="../../index.d.cts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* ESLint rule: no-used-underscore-variables
|
|
6
|
+
*
|
|
7
|
+
* Reports an error when a parameter or local variable with a `_` prefix is
|
|
8
|
+
* actually referenced in the function body. The `_` prefix convention signals
|
|
9
|
+
* "this identifier is intentionally unused" — if it IS used, the prefix is
|
|
10
|
+
* misleading and should be removed.
|
|
11
|
+
*/
|
|
12
|
+
import type { Rule } from 'eslint' with { 'resolution-mode': 'import' };
|
|
13
|
+
/**
|
|
14
|
+
Message ID reported when a variable carries a `_` prefix (signalling unused) but is actually used.
|
|
15
|
+
*/
|
|
16
|
+
export declare const MESSAGE_ID = "noUsedUnderscoreVariables";
|
|
17
|
+
/**
|
|
18
|
+
* ESLint rule disallowing `_`-prefixed parameters and local variables that are actually used, since the prefix advertises them as unused.
|
|
19
|
+
*/
|
|
20
|
+
export declare const noUsedUnderscoreVariables: Rule.RuleModule;
|