@mnaoumov/typescript-dev-toolkit 0.0.0 → 1.1.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 +483 -0
- package/dist/lib/cjs/library-build.d.cts +101 -0
- package/dist/lib/cjs/library-references.d.cts +5 -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 +196 -0
- package/dist/lib/cjs/linters/eslint.d.cts +74 -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 +101 -0
- package/dist/lib/esm/library-build.mjs +443 -0
- package/dist/lib/esm/library-references.d.mts +5 -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 +74 -0
- package/dist/lib/esm/linters/eslint.mjs +159 -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,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 package_lock_integrity_exports = {};
|
|
80
|
+
__export(package_lock_integrity_exports, {
|
|
81
|
+
assertPackageLockIntegrity: () => assertPackageLockIntegrity,
|
|
82
|
+
findPackageLockEntriesMissingIntegrity: () => findPackageLockEntriesMissingIntegrity
|
|
83
|
+
});
|
|
84
|
+
module.exports = __toCommonJS(package_lock_integrity_exports);
|
|
85
|
+
var import_node_fs = require('node:fs');
|
|
86
|
+
var import_npm = require('./npm.cjs');
|
|
87
|
+
const MAX_REPORTED_KEYS = 5;
|
|
88
|
+
const NODE_MODULES_SEGMENT = "node_modules/";
|
|
89
|
+
const REGISTRY_RESOLVED_REG_EXP = /^https?:\/\//;
|
|
90
|
+
async function assertPackageLockIntegrity(cwd) {
|
|
91
|
+
const packageLockJsonPath = (0, import_npm.getPackageLockJsonPath)(cwd);
|
|
92
|
+
if (!(0, import_node_fs.existsSync)(packageLockJsonPath)) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const keys = findPackageLockEntriesMissingIntegrity(await (0, import_npm.readPackageLockJson)(cwd));
|
|
96
|
+
if (keys.length === 0) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const shownKeys = keys.slice(0, MAX_REPORTED_KEYS).map((key) => ` ${key}`);
|
|
100
|
+
const remainingCount = keys.length - shownKeys.length;
|
|
101
|
+
if (remainingCount > 0) {
|
|
102
|
+
shownKeys.push(` ... and ${String(remainingCount)} more`);
|
|
103
|
+
}
|
|
104
|
+
throw new Error(
|
|
105
|
+
[
|
|
106
|
+
`${packageLockJsonPath}: ${String(keys.length)} installed package(s) have no \`resolved\` or no \`integrity\`, so \`npm ci\` cannot verify them:`,
|
|
107
|
+
...shownKeys,
|
|
108
|
+
"npm never adds these fields back by itself, and regenerating the lock would change versions. Fill each entry from the registry",
|
|
109
|
+
"metadata for the version already locked: GET https://registry.npmjs.org/<name, with / written as %2f>/<version>, and copy",
|
|
110
|
+
"`dist.tarball` into `resolved` and `dist.integrity` into `integrity`. The name is the entry's `name` field, or else the text",
|
|
111
|
+
"after the key's last `node_modules/`. Then check that `npm install --package-lock-only` leaves the file byte-identical.",
|
|
112
|
+
"To skip this check for one run, set PACKAGE_LOCK_INTEGRITY=0."
|
|
113
|
+
].join("\n")
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
function findPackageLockEntriesMissingIntegrity(packageLockJson) {
|
|
117
|
+
const keys = [];
|
|
118
|
+
for (const [key, value] of Object.entries(packageLockJson.packages ?? {})) {
|
|
119
|
+
const entry = value;
|
|
120
|
+
if (key === "" || !key.includes(NODE_MODULES_SEGMENT) || entry.link || entry.inBundle) {
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
if (entry.resolved === void 0 || entry.integrity === void 0 && REGISTRY_RESOLVED_REG_EXP.test(entry.resolved)) {
|
|
124
|
+
keys.push(key);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return keys;
|
|
128
|
+
}
|
|
129
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
130
|
+
0 && (module.exports = {
|
|
131
|
+
assertPackageLockIntegrity,
|
|
132
|
+
findPackageLockEntriesMissingIntegrity
|
|
133
|
+
});
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3BhY2thZ2UtbG9jay1pbnRlZ3JpdHkudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBSZWZ1c2VzIGEgYHBhY2thZ2UtbG9jay5qc29uYCB3aG9zZSBpbnN0YWxsZWQgZW50cmllcyBoYXZlIGxvc3QgdGhlaXIgYHJlc29sdmVkYCBvciBgaW50ZWdyaXR5YCBmaWVsZC5cbiAqXG4gKiBZb3UgZ2V0IHN1Y2ggYSBsb2NrIGJ5IGRlbGV0aW5nIGBwYWNrYWdlLWxvY2suanNvbmAgd2hpbGUgYG5vZGVfbW9kdWxlc2AgaXMgc3RpbGwgaW5zdGFsbGVkIGFuZCB0aGVuXG4gKiBydW5uaW5nIGBucG0gaW5zdGFsbGAuIG5wbSByZWNvcmRzIGV2ZXJ5IHBhY2thZ2UgaXQgcmV1c2VzIGZyb20gYG5vZGVfbW9kdWxlc2Agd2l0aCBpdHMgdmVyc2lvbiBvbmx5LlxuICogT25lIG1lYXN1cmVkIGxvY2sgd2VudCBmcm9tIDcgc3VjaCBlbnRyaWVzIHRvIDEwNjQgb2YgMTIzNCBpbiBhIHNpbmdsZSByZWdlbmVyYXRpb24uICoqbnBtIG5ldmVyIGZpbGxzXG4gKiB0aGUgdHdvIGZpZWxkcyBiYWNrIGluIGFmdGVyd2FyZHMqKjogYSBjbGVhbiBpbnN0YWxsIGludG8gYW4gZW1wdHkgZGlyZWN0b3J5IGRvZXMgbm90LCBhbmQgbmVpdGhlciBkb2VzXG4gKiBgbnBtIGluc3RhbGwgLS1wYWNrYWdlLWxvY2stb25seWAuIGBucG0gY2lgIHNraXBzIGludGVncml0eSB2ZXJpZmljYXRpb24gZm9yIHRob3NlIHBhY2thZ2VzLCBzbyB0aGVcbiAqIGRlZmVjdCBpcyBwZXJtYW5lbnQgYW5kIGV2ZXJ5IG90aGVyIGNoZWNrIHN0YXlzIGdyZWVuLlxuICpcbiAqIFRoZSBjaGVjayByZWFkcyB0aGUgSlNPTiBhbmQgbm90aGluZyBlbHNlLiBJdCBtYWtlcyBubyBuZXR3b3JrIGNhbGwgYW5kIGZpbmlzaGVzIGluIHdlbGwgdW5kZXIgYSBzZWNvbmQsXG4gKiB3aGljaCBpcyB3aHkgYGdhdGUoKWAgcnVucyBpdCBiZWZvcmUgYW55dGhpbmcgZWxzZS5cbiAqL1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5cbmltcG9ydCB0eXBlIHsgUGFja2FnZUxvY2tKc29uIH0gZnJvbSAnLi9ucG0udHMnO1xuXG5pbXBvcnQge1xuICBnZXRQYWNrYWdlTG9ja0pzb25QYXRoLFxuICByZWFkUGFja2FnZUxvY2tKc29uXG59IGZyb20gJy4vbnBtLnRzJztcblxuLyoqXG4gKiBIb3cgbWFueSBvZmZlbmRpbmcga2V5cyB0aGUgZXJyb3IgbmFtZXMgYmVmb3JlIGl0IHN1bW1hcml6ZXMgdGhlIHJlc3QgYXMgYSBjb3VudC5cbiAqL1xuY29uc3QgTUFYX1JFUE9SVEVEX0tFWVMgPSA1O1xuXG5jb25zdCBOT0RFX01PRFVMRVNfU0VHTUVOVCA9ICdub2RlX21vZHVsZXMvJztcbmNvbnN0IFJFR0lTVFJZX1JFU09MVkVEX1JFR19FWFAgPSAvXmh0dHBzPzpcXC9cXC8vO1xuXG4vKipcbiAqIFRoZSBmaWVsZHMgb2YgYSBgcGFja2FnZXNgIGVudHJ5IHRoaXMgY2hlY2sgcmVhZHMuIFRoZXkgYXJlIG5vdCBvbiBgUGFja2FnZUpzb25gLCBiZWNhdXNlIHRoZXkgZXhpc3Qgb25seVxuICogaW4gYSBsb2NrZmlsZS5cbiAqL1xuaW50ZXJmYWNlIFBhY2thZ2VMb2NrRW50cnkge1xuICByZWFkb25seSBpbkJ1bmRsZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGludGVncml0eT86IHN0cmluZztcbiAgcmVhZG9ubHkgbGluaz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHJlc29sdmVkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRocm93cyB3aGVuIHRoZSBwcm9qZWN0J3MgYHBhY2thZ2UtbG9jay5qc29uYCBoYXMgYW4gaW5zdGFsbGVkIGVudHJ5IHdpdGhvdXQgYHJlc29sdmVkYCBvciBgaW50ZWdyaXR5YC5cbiAqIEEgcHJvamVjdCB3aXRoIG5vIGBwYWNrYWdlLWxvY2suanNvbmAsIHN1Y2ggYXMgb25lIG9uIGFub3RoZXIgcGFja2FnZSBtYW5hZ2VyLCBwYXNzZXMuXG4gKlxuICogQHBhcmFtIGN3ZCAtIFRoZSBmb2xkZXIgdG8gcmVzb2x2ZSB0aGUgcHJvamVjdCByb290IGZyb20uIERlZmF1bHRzIHRvIHRoZSBjdXJyZW50IG9uZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbG9jayBpcyBjb21wbGV0ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzc2VydFBhY2thZ2VMb2NrSW50ZWdyaXR5KGN3ZD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwYWNrYWdlTG9ja0pzb25QYXRoID0gZ2V0UGFja2FnZUxvY2tKc29uUGF0aChjd2QpO1xuICBpZiAoIWV4aXN0c1N5bmMocGFja2FnZUxvY2tKc29uUGF0aCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBrZXlzID0gZmluZFBhY2thZ2VMb2NrRW50cmllc01pc3NpbmdJbnRlZ3JpdHkoYXdhaXQgcmVhZFBhY2thZ2VMb2NrSnNvbihjd2QpKTtcbiAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc2hvd25LZXlzID0ga2V5cy5zbGljZSgwLCBNQVhfUkVQT1JURURfS0VZUykubWFwKChrZXkpID0+IGAgICR7a2V5fWApO1xuICBjb25zdCByZW1haW5pbmdDb3VudCA9IGtleXMubGVuZ3RoIC0gc2hvd25LZXlzLmxlbmd0aDtcbiAgaWYgKHJlbWFpbmluZ0NvdW50ID4gMCkge1xuICAgIHNob3duS2V5cy5wdXNoKGAgIC4uLiBhbmQgJHtTdHJpbmcocmVtYWluaW5nQ291bnQpfSBtb3JlYCk7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgW1xuICAgICAgYCR7cGFja2FnZUxvY2tKc29uUGF0aH06ICR7U3RyaW5nKGtleXMubGVuZ3RoKX0gaW5zdGFsbGVkIHBhY2thZ2UocykgaGF2ZSBubyBcXGByZXNvbHZlZFxcYCBvciBubyBcXGBpbnRlZ3JpdHlcXGAsIHNvIFxcYG5wbSBjaVxcYCBjYW5ub3QgdmVyaWZ5IHRoZW06YCxcbiAgICAgIC4uLnNob3duS2V5cyxcbiAgICAgICducG0gbmV2ZXIgYWRkcyB0aGVzZSBmaWVsZHMgYmFjayBieSBpdHNlbGYsIGFuZCByZWdlbmVyYXRpbmcgdGhlIGxvY2sgd291bGQgY2hhbmdlIHZlcnNpb25zLiBGaWxsIGVhY2ggZW50cnkgZnJvbSB0aGUgcmVnaXN0cnknLFxuICAgICAgJ21ldGFkYXRhIGZvciB0aGUgdmVyc2lvbiBhbHJlYWR5IGxvY2tlZDogR0VUIGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLzxuYW1lLCB3aXRoIC8gd3JpdHRlbiBhcyAlMmY+Lzx2ZXJzaW9uPiwgYW5kIGNvcHknLFxuICAgICAgJ2BkaXN0LnRhcmJhbGxgIGludG8gYHJlc29sdmVkYCBhbmQgYGRpc3QuaW50ZWdyaXR5YCBpbnRvIGBpbnRlZ3JpdHlgLiBUaGUgbmFtZSBpcyB0aGUgZW50cnlcXCdzIGBuYW1lYCBmaWVsZCwgb3IgZWxzZSB0aGUgdGV4dCcsXG4gICAgICAnYWZ0ZXIgdGhlIGtleVxcJ3MgbGFzdCBgbm9kZV9tb2R1bGVzL2AuIFRoZW4gY2hlY2sgdGhhdCBgbnBtIGluc3RhbGwgLS1wYWNrYWdlLWxvY2stb25seWAgbGVhdmVzIHRoZSBmaWxlIGJ5dGUtaWRlbnRpY2FsLicsXG4gICAgICAnVG8gc2tpcCB0aGlzIGNoZWNrIGZvciBvbmUgcnVuLCBzZXQgUEFDS0FHRV9MT0NLX0lOVEVHUklUWT0wLidcbiAgICBdLmpvaW4oJ1xcbicpXG4gICk7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIGBwYWNrYWdlc2AgZW50cmllcyBvZiBhIGxvY2tmaWxlIHRoYXQgaGF2ZSBubyBgcmVzb2x2ZWRgIGZpZWxkLCBvciB0aGF0IGhhdmUgYSByZWdpc3RyeVxuICogYHJlc29sdmVkYCBmaWVsZCBhbmQgbm8gYGludGVncml0eWAgZmllbGQuXG4gKlxuICogU29tZSBlbnRyaWVzIG5ldmVyIGhhdmUgdGhlc2UgZmllbGRzIGluIGEgaGVhbHRoeSBsb2NrLCBzbyB0aGV5IGFyZSBza2lwcGVkOiB0aGUgcm9vdCAoYCcnYCksIGEgYGxpbmtgLFxuICogYSB3b3Jrc3BhY2Ugc291cmNlIGZvbGRlciAoaXRzIGtleSBoYXMgbm8gYG5vZGVfbW9kdWxlcy9gIHNlZ21lbnQpLCBhbmQgYSBidW5kbGVkIGRlcGVuZGVuY3kgKGBpbkJ1bmRsZWApLFxuICogd2hpY2ggY29tZXMgaW5zaWRlIGl0cyBwYXJlbnQncyB0YXJiYWxsLiBgaW50ZWdyaXR5YCBpcyBvbmx5IHJlcXVpcmVkIHdoZW4gYHJlc29sdmVkYCBpcyBhIHJlZ2lzdHJ5IFVSTCxcbiAqIGJlY2F1c2UgbnBtIHJlY29yZHMgbm8gaW50ZWdyaXR5IGZvciBhIGdpdCBkZXBlbmRlbmN5LlxuICpcbiAqIEBwYXJhbSBwYWNrYWdlTG9ja0pzb24gLSBUaGUgcGFyc2VkIGBwYWNrYWdlLWxvY2suanNvbmAuXG4gKiBAcmV0dXJucyBUaGUga2V5cyBvZiB0aGUgb2ZmZW5kaW5nIGVudHJpZXMsIGluIGxvY2tmaWxlIG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZFBhY2thZ2VMb2NrRW50cmllc01pc3NpbmdJbnRlZ3JpdHkocGFja2FnZUxvY2tKc29uOiBQYWNrYWdlTG9ja0pzb24pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFja2FnZUxvY2tKc29uLnBhY2thZ2VzID8/IHt9KSkge1xuICAgIGNvbnN0IGVudHJ5ID0gdmFsdWUgYXMgUGFja2FnZUxvY2tFbnRyeTtcbiAgICBpZiAoa2V5ID09PSAnJyB8fCAha2V5LmluY2x1ZGVzKE5PREVfTU9EVUxFU19TRUdNRU5UKSB8fCBlbnRyeS5saW5rIHx8IGVudHJ5LmluQnVuZGxlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoZW50cnkucmVzb2x2ZWQgPT09IHVuZGVmaW5lZCB8fCAoZW50cnkuaW50ZWdyaXR5ID09PSB1bmRlZmluZWQgJiYgUkVHSVNUUllfUkVTT0xWRURfUkVHX0VYUC50ZXN0KGVudHJ5LnJlc29sdmVkKSkpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZ0JBLHFCQUEyQjtBQUkzQixpQkFHTztBQUtQLE1BQU0sb0JBQW9CO0FBRTFCLE1BQU0sdUJBQXVCO0FBQzdCLE1BQU0sNEJBQTRCO0FBb0JsQyxlQUFzQiwyQkFBMkIsS0FBNkI7QUFDNUUsUUFBTSwwQkFBc0IsbUNBQXVCLEdBQUc7QUFDdEQsTUFBSSxLQUFDLDJCQUFXLG1CQUFtQixHQUFHO0FBQ3BDO0FBQUEsRUFDRjtBQUVBLFFBQU0sT0FBTyx1Q0FBdUMsVUFBTSxnQ0FBb0IsR0FBRyxDQUFDO0FBQ2xGLE1BQUksS0FBSyxXQUFXLEdBQUc7QUFDckI7QUFBQSxFQUNGO0FBRUEsUUFBTSxZQUFZLEtBQUssTUFBTSxHQUFHLGlCQUFpQixFQUFFLElBQUksQ0FBQyxRQUFRLEtBQUssR0FBRyxFQUFFO0FBQzFFLFFBQU0saUJBQWlCLEtBQUssU0FBUyxVQUFVO0FBQy9DLE1BQUksaUJBQWlCLEdBQUc7QUFDdEIsY0FBVSxLQUFLLGFBQWEsT0FBTyxjQUFjLENBQUMsT0FBTztBQUFBLEVBQzNEO0FBRUEsUUFBTSxJQUFJO0FBQUEsSUFDUjtBQUFBLE1BQ0UsR0FBRyxtQkFBbUIsS0FBSyxPQUFPLEtBQUssTUFBTSxDQUFDO0FBQUEsTUFDOUMsR0FBRztBQUFBLE1BQ0g7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixFQUFFLEtBQUssSUFBSTtBQUFBLEVBQ2I7QUFDRjtBQWNPLFNBQVMsdUNBQXVDLGlCQUE0QztBQUNqRyxRQUFNLE9BQWlCLENBQUM7QUFFeEIsYUFBVyxDQUFDLEtBQUssS0FBSyxLQUFLLE9BQU8sUUFBUSxnQkFBZ0IsWUFBWSxDQUFDLENBQUMsR0FBRztBQUN6RSxVQUFNLFFBQVE7QUFDZCxRQUFJLFFBQVEsTUFBTSxDQUFDLElBQUksU0FBUyxvQkFBb0IsS0FBSyxNQUFNLFFBQVEsTUFBTSxVQUFVO0FBQ3JGO0FBQUEsSUFDRjtBQUVBLFFBQUksTUFBTSxhQUFhLFVBQWMsTUFBTSxjQUFjLFVBQWEsMEJBQTBCLEtBQUssTUFBTSxRQUFRLEdBQUk7QUFDckgsV0FBSyxLQUFLLEdBQUc7QUFBQSxJQUNmO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/// <reference path="./library-references.d.cts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Refuses a `package-lock.json` whose installed entries have lost their `resolved` or `integrity` field.
|
|
6
|
+
*
|
|
7
|
+
* You get such a lock by deleting `package-lock.json` while `node_modules` is still installed and then
|
|
8
|
+
* running `npm install`. npm records every package it reuses from `node_modules` with its version only.
|
|
9
|
+
* One measured lock went from 7 such entries to 1064 of 1234 in a single regeneration. **npm never fills
|
|
10
|
+
* the two fields back in afterwards**: a clean install into an empty directory does not, and neither does
|
|
11
|
+
* `npm install --package-lock-only`. `npm ci` skips integrity verification for those packages, so the
|
|
12
|
+
* defect is permanent and every other check stays green.
|
|
13
|
+
*
|
|
14
|
+
* The check reads the JSON and nothing else. It makes no network call and finishes in well under a second,
|
|
15
|
+
* which is why `gate()` runs it before anything else.
|
|
16
|
+
*/
|
|
17
|
+
import type { PackageLockJson } from './npm.cjs';
|
|
18
|
+
/**
|
|
19
|
+
* Throws when the project's `package-lock.json` has an installed entry without `resolved` or `integrity`.
|
|
20
|
+
* A project with no `package-lock.json`, such as one on another package manager, passes.
|
|
21
|
+
*
|
|
22
|
+
* @param cwd - The folder to resolve the project root from. Defaults to the current one.
|
|
23
|
+
* @returns A {@link Promise} that resolves when the lock is complete.
|
|
24
|
+
*/
|
|
25
|
+
export declare function assertPackageLockIntegrity(cwd?: string): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Finds the `packages` entries of a lockfile that have no `resolved` field, or that have a registry
|
|
28
|
+
* `resolved` field and no `integrity` field.
|
|
29
|
+
*
|
|
30
|
+
* Some entries never have these fields in a healthy lock, so they are skipped: the root (`''`), a `link`,
|
|
31
|
+
* a workspace source folder (its key has no `node_modules/` segment), and a bundled dependency (`inBundle`),
|
|
32
|
+
* which comes inside its parent's tarball. `integrity` is only required when `resolved` is a registry URL,
|
|
33
|
+
* because npm records no integrity for a git dependency.
|
|
34
|
+
*
|
|
35
|
+
* @param packageLockJson - The parsed `package-lock.json`.
|
|
36
|
+
* @returns The keys of the offending entries, in lockfile order.
|
|
37
|
+
*/
|
|
38
|
+
export declare function findPackageLockEntriesMissingIntegrity(packageLockJson: PackageLockJson): string[];
|
|
@@ -0,0 +1,291 @@
|
|
|
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 __create = Object.create;
|
|
63
|
+
var __defProp = Object.defineProperty;
|
|
64
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
65
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
66
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
67
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
68
|
+
var __export = (target, all) => {
|
|
69
|
+
for (var name in all)
|
|
70
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
71
|
+
};
|
|
72
|
+
var __copyProps = (to, from, except, desc) => {
|
|
73
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
74
|
+
for (let key of __getOwnPropNames(from))
|
|
75
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
76
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
77
|
+
}
|
|
78
|
+
return to;
|
|
79
|
+
};
|
|
80
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
81
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
82
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
83
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
84
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
85
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
86
|
+
mod
|
|
87
|
+
));
|
|
88
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
89
|
+
var package_manager_exports = {};
|
|
90
|
+
__export(package_manager_exports, {
|
|
91
|
+
PackageManager: () => PackageManager,
|
|
92
|
+
getPackageManager: () => getPackageManager,
|
|
93
|
+
getPackageManagerRunCommand: () => getPackageManagerRunCommand,
|
|
94
|
+
resolveToolCommand: () => resolveToolCommand
|
|
95
|
+
});
|
|
96
|
+
module.exports = __toCommonJS(package_manager_exports);
|
|
97
|
+
var import_path = require('@mnaoumov/typescript-lib/path');
|
|
98
|
+
var import_reg_exp = require('@mnaoumov/typescript-lib/reg-exp');
|
|
99
|
+
var import_type_guards = require('@mnaoumov/typescript-lib/type-guards');
|
|
100
|
+
var import_node_fs = require('node:fs');
|
|
101
|
+
var import_node_process = __toESM(__extractDefault(require('node:process')), 1);
|
|
102
|
+
var import_json = require('./json.cjs');
|
|
103
|
+
var import_repo_paths = require('./repo-paths.cjs');
|
|
104
|
+
var import_root = require('./root.cjs');
|
|
105
|
+
var PackageManager = /* @__PURE__ */ ((PackageManager2) => {
|
|
106
|
+
PackageManager2["Bun"] = "bun";
|
|
107
|
+
PackageManager2["Npm"] = "npm";
|
|
108
|
+
PackageManager2["Pnpm"] = "pnpm";
|
|
109
|
+
PackageManager2["Yarn"] = "yarn";
|
|
110
|
+
return PackageManager2;
|
|
111
|
+
})(PackageManager || {});
|
|
112
|
+
function getPackageManager(cwd) {
|
|
113
|
+
const root = getStartFolder(cwd);
|
|
114
|
+
const declaredPackageManager = detectPackageManagerFromPackageJson(root);
|
|
115
|
+
const lockfiles = LOCKFILES.filter((lockfile) => (0, import_node_fs.existsSync)((0, import_path.join)(root, lockfile.fileName)));
|
|
116
|
+
const claimants = new Set(lockfiles.map((lockfile) => lockfile.packageManager));
|
|
117
|
+
if (declaredPackageManager !== null) {
|
|
118
|
+
claimants.add(declaredPackageManager);
|
|
119
|
+
}
|
|
120
|
+
const packageManager = resolvePackageManager({
|
|
121
|
+
claimants,
|
|
122
|
+
declaredPackageManager
|
|
123
|
+
});
|
|
124
|
+
if (claimants.size > 1) {
|
|
125
|
+
warnAboutSeveralClaimants({
|
|
126
|
+
declaredPackageManager,
|
|
127
|
+
lockfiles,
|
|
128
|
+
packageManager,
|
|
129
|
+
root
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
return packageManager;
|
|
133
|
+
}
|
|
134
|
+
function getPackageManagerRunCommand(cwd) {
|
|
135
|
+
return [getPackageManager(cwd), "run"];
|
|
136
|
+
}
|
|
137
|
+
function resolveToolCommand(params) {
|
|
138
|
+
const { cwd, tool } = params;
|
|
139
|
+
const shimPath = findBinShim({ cwd, tool });
|
|
140
|
+
return shimPath === null ? [...getPackageManagerExecCommand(cwd), tool] : [shimPath];
|
|
141
|
+
}
|
|
142
|
+
const DECLARATION_NAME_REG_EXP = /^(?<name>[^@\s]+)@/;
|
|
143
|
+
const LOCKFILES = [
|
|
144
|
+
{ fileName: import_repo_paths.RepoPaths.BunLock, packageManager: "bun" /* Bun */ },
|
|
145
|
+
{ fileName: import_repo_paths.RepoPaths.BunLockb, packageManager: "bun" /* Bun */ },
|
|
146
|
+
{ fileName: import_repo_paths.RepoPaths.PnpmLockYaml, packageManager: "pnpm" /* Pnpm */ },
|
|
147
|
+
{ fileName: import_repo_paths.RepoPaths.YarnLock, packageManager: "yarn" /* Yarn */ },
|
|
148
|
+
{ fileName: import_repo_paths.RepoPaths.PackageLockJson, packageManager: "npm" /* Npm */ }
|
|
149
|
+
];
|
|
150
|
+
const USER_AGENT_NAME_REG_EXP = /^(?<name>[^/\s]+)\//;
|
|
151
|
+
const reportedDisagreements = /* @__PURE__ */ new Set();
|
|
152
|
+
function detectPackageManagerFromPackageJson(root) {
|
|
153
|
+
const packageJsonPath = (0, import_path.join)(root, import_repo_paths.RepoPaths.PackageJson);
|
|
154
|
+
if (!(0, import_node_fs.existsSync)(packageJsonPath)) {
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
let packageJson;
|
|
158
|
+
try {
|
|
159
|
+
packageJson = (0, import_json.readJsonSync)(packageJsonPath);
|
|
160
|
+
} catch {
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
const declaration = packageJson.packageManager;
|
|
164
|
+
if (!declaration) {
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
const match = DECLARATION_NAME_REG_EXP.exec(declaration);
|
|
168
|
+
return match ? parsePackageManagerName((0, import_reg_exp.getMandatoryNamedGroup)(match, "name")) : null;
|
|
169
|
+
}
|
|
170
|
+
function detectPackageManagerFromUserAgent() {
|
|
171
|
+
const userAgent = import_node_process.default.env["npm_config_user_agent"];
|
|
172
|
+
if (!userAgent) {
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
const match = USER_AGENT_NAME_REG_EXP.exec(userAgent);
|
|
176
|
+
return match ? parsePackageManagerName((0, import_reg_exp.getMandatoryNamedGroup)(match, "name")) : null;
|
|
177
|
+
}
|
|
178
|
+
function findBinShim(params) {
|
|
179
|
+
const { cwd, tool } = params;
|
|
180
|
+
const candidates = getShimCandidates(tool);
|
|
181
|
+
let currentFolder = getStartFolder(cwd);
|
|
182
|
+
while (currentFolder !== import_repo_paths.RepoPaths.CurrentFolder && currentFolder !== import_repo_paths.RepoPaths.RootFolder) {
|
|
183
|
+
for (const candidate of candidates) {
|
|
184
|
+
const shimPath = (0, import_path.join)(currentFolder, import_repo_paths.RepoPaths.NodeModules, import_repo_paths.RepoPaths.Bin, candidate);
|
|
185
|
+
if ((0, import_node_fs.existsSync)(shimPath)) {
|
|
186
|
+
return shimPath;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
currentFolder = (0, import_path.dirname)(currentFolder);
|
|
190
|
+
}
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
function getPackageManagerExecCommand(cwd) {
|
|
194
|
+
const packageManager = getPackageManager(cwd);
|
|
195
|
+
switch (packageManager) {
|
|
196
|
+
case "bun" /* Bun */: {
|
|
197
|
+
return ["bun", "x"];
|
|
198
|
+
}
|
|
199
|
+
case "npm" /* Npm */: {
|
|
200
|
+
return ["npx"];
|
|
201
|
+
}
|
|
202
|
+
case "pnpm" /* Pnpm */: {
|
|
203
|
+
return ["pnpm", "exec"];
|
|
204
|
+
}
|
|
205
|
+
case "yarn" /* Yarn */: {
|
|
206
|
+
return ["yarn", "exec"];
|
|
207
|
+
}
|
|
208
|
+
/* v8 ignore start -- Exhaustive switch guard; default branch is unreachable. */
|
|
209
|
+
default: {
|
|
210
|
+
return (0, import_type_guards.assertNever)(packageManager);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
function getShimCandidates(tool) {
|
|
215
|
+
return import_node_process.default.platform === "win32" ? [
|
|
216
|
+
`${tool}${import_repo_paths.RepoPaths.CommandExtension}`,
|
|
217
|
+
`${tool}${import_repo_paths.RepoPaths.ExeExtension}`,
|
|
218
|
+
`${tool}${import_repo_paths.RepoPaths.BatExtension}`
|
|
219
|
+
] : [tool];
|
|
220
|
+
}
|
|
221
|
+
function getStartFolder(cwd) {
|
|
222
|
+
return (0, import_root.getRootFolder)(cwd) ?? (0, import_path.toPosixPath)(cwd ?? import_node_process.default.cwd());
|
|
223
|
+
}
|
|
224
|
+
function parsePackageManagerName(name) {
|
|
225
|
+
switch (name) {
|
|
226
|
+
case "bun" /* Bun */: {
|
|
227
|
+
return "bun" /* Bun */;
|
|
228
|
+
}
|
|
229
|
+
case "npm" /* Npm */: {
|
|
230
|
+
return "npm" /* Npm */;
|
|
231
|
+
}
|
|
232
|
+
case "pnpm" /* Pnpm */: {
|
|
233
|
+
return "pnpm" /* Pnpm */;
|
|
234
|
+
}
|
|
235
|
+
case "yarn" /* Yarn */: {
|
|
236
|
+
return "yarn" /* Yarn */;
|
|
237
|
+
}
|
|
238
|
+
default: {
|
|
239
|
+
return null;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
function resolvePackageManager(params) {
|
|
244
|
+
const {
|
|
245
|
+
claimants,
|
|
246
|
+
declaredPackageManager
|
|
247
|
+
} = params;
|
|
248
|
+
if (declaredPackageManager !== null) {
|
|
249
|
+
return declaredPackageManager;
|
|
250
|
+
}
|
|
251
|
+
const lockfileOwners = [...claimants];
|
|
252
|
+
const [firstLockfileOwner] = lockfileOwners;
|
|
253
|
+
if (firstLockfileOwner === void 0) {
|
|
254
|
+
return detectPackageManagerFromUserAgent() ?? "npm" /* Npm */;
|
|
255
|
+
}
|
|
256
|
+
if (lockfileOwners.length === 1) {
|
|
257
|
+
return firstLockfileOwner;
|
|
258
|
+
}
|
|
259
|
+
const launchedBy = detectPackageManagerFromUserAgent();
|
|
260
|
+
return launchedBy !== null && claimants.has(launchedBy) ? launchedBy : firstLockfileOwner;
|
|
261
|
+
}
|
|
262
|
+
function warnAboutSeveralClaimants(params) {
|
|
263
|
+
const {
|
|
264
|
+
declaredPackageManager,
|
|
265
|
+
lockfiles,
|
|
266
|
+
packageManager,
|
|
267
|
+
root
|
|
268
|
+
} = params;
|
|
269
|
+
const lockfileNames = lockfiles.map((lockfile) => lockfile.fileName).join(", ");
|
|
270
|
+
const advice = declaredPackageManager === null ? 'Delete the stale lockfile, or declare "packageManager" in package.json, to settle it.' : "Delete the stale lockfile to settle it.";
|
|
271
|
+
const message = [
|
|
272
|
+
`obsidian-dev-utils: more than one package manager claims ${root}.`,
|
|
273
|
+
`Lockfiles: ${lockfileNames}.`,
|
|
274
|
+
`package.json "packageManager": ${declaredPackageManager ?? "not set"}.`,
|
|
275
|
+
`Using ${packageManager}.`,
|
|
276
|
+
advice
|
|
277
|
+
].join(" ");
|
|
278
|
+
if (reportedDisagreements.has(message)) {
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
reportedDisagreements.add(message);
|
|
282
|
+
console.warn(message);
|
|
283
|
+
}
|
|
284
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
285
|
+
0 && (module.exports = {
|
|
286
|
+
PackageManager,
|
|
287
|
+
getPackageManager,
|
|
288
|
+
getPackageManagerRunCommand,
|
|
289
|
+
resolveToolCommand
|
|
290
|
+
});
|
|
291
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3BhY2thZ2UtbWFuYWdlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFJlc29sdmVzIGxvY2FsbHktaW5zdGFsbGVkIHRvb2wgYmluYXJpZXMgYW5kIHBhY2thZ2Utc2NyaXB0IHJ1bm5lcnMgd2l0aG91dCBhc3N1bWluZyBgbnBtYC5cbiAqXG4gKiBEZWxlZ2F0aW5nIHRvIGBucHhgIHNpbGVudGx5IGFzc3VtZXMgYW4gbnBtLWluc3RhbGxlZCB0cmVlLiBPbiBXaW5kb3dzIHRoYXQgYXNzdW1wdGlvbiBpcyBmYXRhbCB1bmRlclxuICogYGJ1bmA6IGBidW4gaW5zdGFsbGAgd3JpdGVzIGBub2RlX21vZHVsZXMvLmJpbi88dG9vbD4uZXhlYCwgbm90IHRoZSBgPHRvb2w+LmNtZGAgdGhhdCBucG0ncyBgbnB4YCBsb29rc1xuICogZm9yLCBzbyBgbnB4YCBtaXNzZXMgdGhlIGxvY2FsIGluc3RhbGwgZW50aXJlbHkgYW5kIGRvd25sb2FkcyB0aGUgdG9vbCBmcm9tIHRoZSByZWdpc3RyeSBpbnN0ZWFkIFx1MjAxNCB3aGljaFxuICogZm9yIGB0c2NgIGlzIHRoZSB3ZWxsLWtub3duIGRlY295IHBhY2thZ2UsIG5vdCBUeXBlU2NyaXB0LiBSZXNvbHZpbmcgdGhlIHNoaW0gZnJvbSBgbm9kZV9tb2R1bGVzLy5iaW5gXG4gKiBvdXJzZWx2ZXMgc2lkZXN0ZXBzIHRoZSB3aG9sZSBzaGltLWZvcm1hdCBxdWVzdGlvbiwgYmVjYXVzZSBldmVyeSBwYWNrYWdlIG1hbmFnZXIgd3JpdGVzIG9uZSB0aGVyZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFBhY2thZ2VKc29uIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pbixcbiAgdG9Qb3NpeFBhdGhcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuaW1wb3J0IHsgZ2V0TWFuZGF0b3J5TmFtZWRHcm91cCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9yZWctZXhwJztcbmltcG9ydCB7IGFzc2VydE5ldmVyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB7IHJlYWRKc29uU3luYyB9IGZyb20gJy4vanNvbi50cyc7XG5pbXBvcnQgeyBSZXBvUGF0aHMgfSBmcm9tICcuL3JlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHsgZ2V0Um9vdEZvbGRlciB9IGZyb20gJy4vcm9vdC50cyc7XG5cbi8qKlxuICogQSBwYWNrYWdlIG1hbmFnZXIgdGhhdCBjYW4gb3duIGEgcHJvamVjdCdzIGRlcGVuZGVuY3kgdHJlZS5cbiAqL1xuZXhwb3J0IGVudW0gUGFja2FnZU1hbmFnZXIge1xuICAvKipcbiAgICogVGhlIGBidW5gIHBhY2thZ2UgbWFuYWdlci5cbiAgICovXG4gIEJ1biA9ICdidW4nLFxuXG4gIC8qKlxuICAgKiBUaGUgYG5wbWAgcGFja2FnZSBtYW5hZ2VyLlxuICAgKi9cbiAgTnBtID0gJ25wbScsXG5cbiAgLyoqXG4gICAqIFRoZSBgcG5wbWAgcGFja2FnZSBtYW5hZ2VyLlxuICAgKi9cbiAgUG5wbSA9ICdwbnBtJyxcblxuICAvKipcbiAgICogVGhlIGB5YXJuYCBwYWNrYWdlIG1hbmFnZXIuXG4gICAqL1xuICBZYXJuID0gJ3lhcm4nXG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVUb29sQ29tbWFuZH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZVRvb2xDb21tYW5kUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHdvcmtpbmcgZm9sZGVyIHRvIHJlc29sdmUgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IGN3ZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGxvY2FsbHktaW5zdGFsbGVkIHRvb2wsIGFzIGl0IGFwcGVhcnMgaW4gYG5vZGVfbW9kdWxlcy8uYmluYC5cbiAgICovXG4gIHJlYWRvbmx5IHRvb2w6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoaWNoIHBhY2thZ2UgbWFuYWdlciBvd25zIHRoZSBwcm9qZWN0J3MgZGVwZW5kZW5jeSB0cmVlLlxuICpcbiAqIEV2ZXJ5IHNpZ25hbCBpcyBjb2xsZWN0ZWQgYmVmb3JlIGFueSBvZiB0aGVtIGlzIGJlbGlldmVkLCBiZWNhdXNlIGEgcmVwbyBjYXJyeWluZyB0d28gbG9ja2ZpbGVzIHVzZWQgdG9cbiAqIHJlc29sdmUgdG8gd2hpY2hldmVyIHNhdCBlYXJsaWVyIGluIGEgZml4ZWQgbGlzdCBcdTIwMTQgc2lsZW50bHkgcmVhc3NpZ25pbmcgZXZlcnkgcGFja2FnZSBzY3JpcHQgYW5kIGV2ZXJ5XG4gKiB0b29sIGludm9jYXRpb24gdG8gYSBtYW5hZ2VyIHRoYXQgbmV2ZXIgaW5zdGFsbGVkIHRoZSB0cmVlLlxuICpcbiAqIFRoZSBvcmRlciBpczpcbiAqXG4gKiAxLiBUaGUgYHBhY2thZ2VNYW5hZ2VyYCBmaWVsZCBvZiBgcGFja2FnZS5qc29uYC4gSXQgaXMgYSBkZWxpYmVyYXRlIGRlY2xhcmF0aW9uIGJ5IHRoZSByZXBvJ3MgYXV0aG9yXG4gKiAgICByYXRoZXIgdGhhbiBhbiBhcnRpZmFjdCBsZWZ0IGJlaGluZCBieSB3aGF0ZXZlciByYW4gbGFzdCwgc28gaXQgb3V0cmFua3MgZXZlcnkgbG9ja2ZpbGUgXHUyMDE0IGFuZCBpdCBpc1xuICogICAgdGhlIG9ubHkgc2lnbmFsIHRoYXQgaGVscHMgYXQgYWxsIGJlZm9yZSB0aGUgZmlyc3QgaW5zdGFsbCwgd2hlbiBubyBsb2NrZmlsZSBleGlzdHMgeWV0LlxuICogMi4gVGhlIHNvbGUgbG9ja2ZpbGUsIHdoZW4gZXhhY3RseSBvbmUgbWFuYWdlciBjbGFpbXMgdGhlIHRyZWUuXG4gKiAzLiBBbW9uZyBzZXZlcmFsIGxvY2tmaWxlcywgdGhlIG1hbmFnZXIgdGhhdCBsYXVuY2hlZCB1cyAoYG5wbV9jb25maWdfdXNlcl9hZ2VudGApLCB3aGVuIGl0IG93bnMgb25lIG9mXG4gKiAgICB0aGVtIFx1MjAxNCBhIGxpdmUgc2lnbmFsIGJlYXRzIGEgZmlsZSB0aGF0IG1heSBoYXZlIGJlZW4gYWJhbmRvbmVkIG1pZC1taWdyYXRpb24uIE90aGVyd2lzZSB0aGVcbiAqICAgIGRvY3VtZW50ZWQgZmFsbGJhY2sgb3JkZXIgaW4ge0BsaW5rIExPQ0tGSUxFU30gZGVjaWRlcy4gTm90ZSB0aGlzIGlzIGRlbGliZXJhdGVseSBOT1QgXCJ0aGUgbW9zdFxuICogICAgcmVjZW50bHkgbW9kaWZpZWQgbG9ja2ZpbGVcIjogYSBzdHJheSBsb2NrZmlsZSBpcyB0eXBpY2FsbHkgdGhlIG5ld2VzdCBmaWxlLCBzbyBtdGltZSBwaWNrcyBwcmVjaXNlbHlcbiAqICAgIHRoZSB3cm9uZyBvbmUuXG4gKiA0LiBgbnBtX2NvbmZpZ191c2VyX2FnZW50YCBvbiBpdHMgb3duLCB3aGVuIHRoZXJlIGlzIG5vIGxvY2tmaWxlLlxuICogNS4ge0BsaW5rIFBhY2thZ2VNYW5hZ2VyLk5wbX0uXG4gKlxuICogV2hlbmV2ZXIgbW9yZSB0aGFuIG9uZSBtYW5hZ2VyIGNsYWltcyB0aGUgdHJlZSwgdGhlIGRpc2FncmVlbWVudCBpcyByZXBvcnRlZCBvbmNlIHBlciBwcm9qZWN0IHRocm91Z2hcbiAqIHtAbGluayB3YXJuQWJvdXRTZXZlcmFsQ2xhaW1hbnRzfSBcdTIwMTQgdGhlIHJlc29sdXRpb24gc3RheXMgZGV0ZXJtaW5pc3RpYywgYnV0IGl0IHN0b3BzIGJlaW5nIHNpbGVudC5cbiAqXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgdG8gcmVzb2x2ZSBmcm9tLlxuICogQHJldHVybnMgVGhlIGRldGVjdGVkIHBhY2thZ2UgbWFuYWdlciwgb3Ige0BsaW5rIFBhY2thZ2VNYW5hZ2VyLk5wbX0gd2hlbiBub3RoaW5nIGluZGljYXRlcyBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWNrYWdlTWFuYWdlcihjd2Q/OiBzdHJpbmcpOiBQYWNrYWdlTWFuYWdlciB7XG4gIGNvbnN0IHJvb3QgPSBnZXRTdGFydEZvbGRlcihjd2QpO1xuICBjb25zdCBkZWNsYXJlZFBhY2thZ2VNYW5hZ2VyID0gZGV0ZWN0UGFja2FnZU1hbmFnZXJGcm9tUGFja2FnZUpzb24ocm9vdCk7XG4gIGNvbnN0IGxvY2tmaWxlcyA9IExPQ0tGSUxFUy5maWx0ZXIoKGxvY2tmaWxlKSA9PiBleGlzdHNTeW5jKGpvaW4ocm9vdCwgbG9ja2ZpbGUuZmlsZU5hbWUpKSk7XG4gIGNvbnN0IGNsYWltYW50cyA9IG5ldyBTZXQobG9ja2ZpbGVzLm1hcCgobG9ja2ZpbGUpID0+IGxvY2tmaWxlLnBhY2thZ2VNYW5hZ2VyKSk7XG5cbiAgaWYgKGRlY2xhcmVkUGFja2FnZU1hbmFnZXIgIT09IG51bGwpIHtcbiAgICBjbGFpbWFudHMuYWRkKGRlY2xhcmVkUGFja2FnZU1hbmFnZXIpO1xuICB9XG5cbiAgY29uc3QgcGFja2FnZU1hbmFnZXIgPSByZXNvbHZlUGFja2FnZU1hbmFnZXIoe1xuICAgIGNsYWltYW50cyxcbiAgICBkZWNsYXJlZFBhY2thZ2VNYW5hZ2VyXG4gIH0pO1xuXG4gIGlmIChjbGFpbWFudHMuc2l6ZSA+IDEpIHtcbiAgICB3YXJuQWJvdXRTZXZlcmFsQ2xhaW1hbnRzKHtcbiAgICAgIGRlY2xhcmVkUGFja2FnZU1hbmFnZXIsXG4gICAgICBsb2NrZmlsZXMsXG4gICAgICBwYWNrYWdlTWFuYWdlcixcbiAgICAgIHJvb3RcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBwYWNrYWdlTWFuYWdlcjtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGNvbW1hbmQgcGFydHMgdGhhdCBydW4gYSBwYWNrYWdlIHNjcmlwdCB0aHJvdWdoIHRoZSBtYW5hZ2VyIHRoYXQgb3ducyB0aGUgdHJlZS5cbiAqXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgdG8gcmVzb2x2ZSBmcm9tLlxuICogQHJldHVybnMgVGhlIGNvbW1hbmQgcGFydHMsIGUuZy4gYFsnYnVuJywgJ3J1biddYC4gVGhlIHNjcmlwdCBuYW1lIGlzIGFwcGVuZGVkIGJ5IHRoZSBjYWxsZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWNrYWdlTWFuYWdlclJ1bkNvbW1hbmQoY3dkPzogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gW2dldFBhY2thZ2VNYW5hZ2VyKGN3ZCksICdydW4nXTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGNvbW1hbmQgcGFydHMgdGhhdCBydW4gYSBsb2NhbGx5LWluc3RhbGxlZCB0b29sLCB3aXRoIHRoZSB0b29sIGl0c2VsZiBhbHJlYWR5IGluY2x1ZGVkLlxuICpcbiAqIFByZWZlcnMgdGhlIHNoaW0gaW4gdGhlIG5lYXJlc3QgYG5vZGVfbW9kdWxlcy8uYmluYCwgd2Fsa2luZyB1cCB0aHJvdWdoIGFuY2VzdG9yIGZvbGRlcnMgc28gYSBob2lzdGVkXG4gKiB3b3Jrc3BhY2UgaW5zdGFsbCBpcyBzdGlsbCBmb3VuZC4gRmFsbHMgYmFjayB0byB0aGUgb3duaW5nIG1hbmFnZXIncyBleGVjIGZvcm0gd2hlbiBubyBzaGltIHJlc29sdmVzIFx1MjAxNFxuICogd2hpY2ggaXMgYm90aCB0aGUgcHJldmlvdXMgYmVoYXZpb3IgYW5kIHRoZSBvbmx5IHRoaW5nIHRoYXQgd29ya3MgdW5kZXIgeWFybidzIFBsdWcnbidQbGF5LCB3aGVyZVxuICogYG5vZGVfbW9kdWxlcy8uYmluYCBkb2VzIG5vdCBleGlzdCBhdCBhbGwuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgcmVzb2x1dGlvbi5cbiAqIEByZXR1cm5zIFRoZSBjb21tYW5kIHBhcnRzLCBlLmcuIGBbJy9wcm9qZWN0L25vZGVfbW9kdWxlcy8uYmluL3RzYyddYCBvciBgWydidW4nLCAneCcsICd0c2MnXWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVG9vbENvbW1hbmQocGFyYW1zOiBSZXNvbHZlVG9vbENvbW1hbmRQYXJhbXMpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHsgY3dkLCB0b29sIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHNoaW1QYXRoID0gZmluZEJpblNoaW0oeyBjd2QsIHRvb2wgfSk7XG5cbiAgcmV0dXJuIHNoaW1QYXRoID09PSBudWxsID8gWy4uLmdldFBhY2thZ2VNYW5hZ2VyRXhlY0NvbW1hbmQoY3dkKSwgdG9vbF0gOiBbc2hpbVBhdGhdO1xufVxuXG4vKipcbiAqIE1hdGNoZXMgdGhlIGxlYWRpbmcgYDxuYW1lPkBgIHRva2VuIG9mIGEgYHBhY2thZ2UuanNvbmAgYHBhY2thZ2VNYW5hZ2VyYCB2YWx1ZS5cbiAqXG4gKiBUaGUgYEBgIGlzIHJlcXVpcmVkLCBiZWNhdXNlIGNvcmVwYWNrJ3MgZm9ybWF0IGlzIGA8bmFtZT5APHZlcnNpb24+YCBcdTIwMTQgYSBiYXJlIG5hbWUgaXMgYSBtYWxmb3JtZWRcbiAqIGRlY2xhcmF0aW9uIHJhdGhlciB0aGFuIGEgc2hvcnRoYW5kLCBhbmQgaXMgaWdub3JlZCBpbnN0ZWFkIG9mIGd1ZXNzZWQgYXQuXG4gKi9cbmNvbnN0IERFQ0xBUkFUSU9OX05BTUVfUkVHX0VYUCA9IC9eKD88bmFtZT5bXkBcXHNdKylALztcblxuLyoqXG4gKiBUaGUgbG9ja2ZpbGVzIHRoYXQgaWRlbnRpZnkgYSBwYWNrYWdlIG1hbmFnZXIsIGluIHRoZSBvcmRlciB0aGV5IGRlY2lkZSBhIHRpZSBubyBvdGhlciBzaWduYWwgc2V0dGxlcy5cbiAqXG4gKiBCb3RoIGJ1biBsb2NrZmlsZSBmb3JtYXRzIG1hcCB0byB0aGUgc2FtZSBtYW5hZ2VyLCBzbyBhIHJlcG8gaG9sZGluZyBib3RoIGlzIG9uZSBjbGFpbWFudCwgbm90IHR3by5cbiAqL1xuY29uc3QgTE9DS0ZJTEVTOiBMb2NrZmlsZUNsYWltW10gPSBbXG4gIHsgZmlsZU5hbWU6IFJlcG9QYXRocy5CdW5Mb2NrLCBwYWNrYWdlTWFuYWdlcjogUGFja2FnZU1hbmFnZXIuQnVuIH0sXG4gIHsgZmlsZU5hbWU6IFJlcG9QYXRocy5CdW5Mb2NrYiwgcGFja2FnZU1hbmFnZXI6IFBhY2thZ2VNYW5hZ2VyLkJ1biB9LFxuICB7IGZpbGVOYW1lOiBSZXBvUGF0aHMuUG5wbUxvY2tZYW1sLCBwYWNrYWdlTWFuYWdlcjogUGFja2FnZU1hbmFnZXIuUG5wbSB9LFxuICB7IGZpbGVOYW1lOiBSZXBvUGF0aHMuWWFybkxvY2ssIHBhY2thZ2VNYW5hZ2VyOiBQYWNrYWdlTWFuYWdlci5ZYXJuIH0sXG4gIHsgZmlsZU5hbWU6IFJlcG9QYXRocy5QYWNrYWdlTG9ja0pzb24sIHBhY2thZ2VNYW5hZ2VyOiBQYWNrYWdlTWFuYWdlci5OcG0gfVxuXTtcblxuLyoqXG4gKiBNYXRjaGVzIHRoZSBsZWFkaW5nIGA8bmFtZT4vYCB0b2tlbiBvZiBhbiBgbnBtX2NvbmZpZ191c2VyX2FnZW50YCB2YWx1ZS5cbiAqL1xuY29uc3QgVVNFUl9BR0VOVF9OQU1FX1JFR19FWFAgPSAvXig/PG5hbWU+W14vXFxzXSspXFwvLztcblxuLyoqXG4gKiBUaGUgZGlzYWdyZWVtZW50cyBhbHJlYWR5IHJlcG9ydGVkLCBzbyBhIGJ1aWxkIHRoYXQgcmVzb2x2ZXMgdGhlIG1hbmFnZXIgb25jZSBwZXIgc2NyaXB0IGhvcCBhbmQgb25jZVxuICogcGVyIHRvb2wgaW52b2NhdGlvbiBzdGlsbCBzYXlzIGl0IG9ubHkgb25jZS5cbiAqL1xuY29uc3QgcmVwb3J0ZWREaXNhZ3JlZW1lbnRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGZpbmRCaW5TaGltfS5cbiAqL1xuaW50ZXJmYWNlIEZpbmRCaW5TaGltUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHdvcmtpbmcgZm9sZGVyIHRvIHJlc29sdmUgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IGN3ZD86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGxvY2FsbHktaW5zdGFsbGVkIHRvb2wuXG4gICAqL1xuICByZWFkb25seSB0b29sOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBsb2NrZmlsZSBhbmQgdGhlIHBhY2thZ2UgbWFuYWdlciB3aG9zZSBwcmVzZW5jZSBpdCBwcm92ZXMuXG4gKi9cbmludGVyZmFjZSBMb2NrZmlsZUNsYWltIHtcbiAgLyoqXG4gICAqIFRoZSBsb2NrZmlsZSBuYW1lLCBhcyBpdCBhcHBlYXJzIGF0IHRoZSBwcm9qZWN0IHJvb3QuXG4gICAqL1xuICByZWFkb25seSBmaWxlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFja2FnZSBtYW5hZ2VyIHRoYXQgd3JpdGVzIHRoaXMgbG9ja2ZpbGUuXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlTWFuYWdlcjogUGFja2FnZU1hbmFnZXI7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVQYWNrYWdlTWFuYWdlcn0uXG4gKi9cbmludGVyZmFjZSBSZXNvbHZlUGFja2FnZU1hbmFnZXJQYXJhbXMge1xuICAvKipcbiAgICogRXZlcnkgcGFja2FnZSBtYW5hZ2VyIGNsYWltaW5nIHRoZSB0cmVlIFx1MjAxNCB0aGUgbG9ja2ZpbGUgb3duZXJzIGluIHtAbGluayBMT0NLRklMRVN9IG9yZGVyLCBwbHVzIHRoZVxuICAgKiBkZWNsYXJlZCBvbmUuIE9ubHkgY29uc3VsdGVkIHdoZW4gbm90aGluZyBpcyBkZWNsYXJlZCwgaW4gd2hpY2ggY2FzZSBpdCBob2xkcyBleGFjdGx5IHRoZSBsb2NrZmlsZVxuICAgKiBvd25lcnMuXG4gICAqL1xuICByZWFkb25seSBjbGFpbWFudHM6IFJlYWRvbmx5U2V0PFBhY2thZ2VNYW5hZ2VyPjtcblxuICAvKipcbiAgICogVGhlIHBhY2thZ2UgbWFuYWdlciBkZWNsYXJlZCBpbiBgcGFja2FnZS5qc29uYCwgb3IgYG51bGxgIHdoZW4gbm9uZSBpcy5cbiAgICovXG4gIHJlYWRvbmx5IGRlY2xhcmVkUGFja2FnZU1hbmFnZXI6IG51bGwgfCBQYWNrYWdlTWFuYWdlcjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgd2FybkFib3V0U2V2ZXJhbENsYWltYW50c30uXG4gKi9cbmludGVyZmFjZSBXYXJuQWJvdXRTZXZlcmFsQ2xhaW1hbnRzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBwYWNrYWdlIG1hbmFnZXIgZGVjbGFyZWQgaW4gYHBhY2thZ2UuanNvbmAsIG9yIGBudWxsYCB3aGVuIG5vbmUgaXMuXG4gICAqL1xuICByZWFkb25seSBkZWNsYXJlZFBhY2thZ2VNYW5hZ2VyOiBudWxsIHwgUGFja2FnZU1hbmFnZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2NrZmlsZXMgYWN0dWFsbHkgZm91bmQgYXQgdGhlIHByb2plY3Qgcm9vdC5cbiAgICovXG4gIHJlYWRvbmx5IGxvY2tmaWxlczogcmVhZG9ubHkgTG9ja2ZpbGVDbGFpbVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFja2FnZSBtYW5hZ2VyIHRoYXQgd29uLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZU1hbmFnZXI6IFBhY2thZ2VNYW5hZ2VyO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvamVjdCByb290IHRoZSBsb2NrZmlsZXMgd2VyZSBmb3VuZCBpbi5cbiAgICovXG4gIHJlYWRvbmx5IHJvb3Q6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgcGFja2FnZSBtYW5hZ2VyIG91dCBvZiB0aGUgYHBhY2thZ2VNYW5hZ2VyYCBmaWVsZCBvZiB0aGUgcHJvamVjdCdzIGBwYWNrYWdlLmpzb25gLCB3aGljaCBpc1xuICogY29yZXBhY2sncyBgPG5hbWU+QDx2ZXJzaW9uPmAgZGVjbGFyYXRpb24uXG4gKlxuICogQHBhcmFtIHJvb3QgLSBUaGUgcHJvamVjdCByb290IHRvIHJlYWQgYHBhY2thZ2UuanNvbmAgZnJvbS5cbiAqIEByZXR1cm5zIFRoZSBkZWNsYXJlZCBwYWNrYWdlIG1hbmFnZXIsIG9yIGBudWxsYCB3aGVuIHRoZXJlIGlzIG5vIGBwYWNrYWdlLmpzb25gLCBpdCBjYW5ub3QgYmUgcGFyc2VkLFxuICogdGhlIGZpZWxkIGlzIGFic2VudCBvciBtYWxmb3JtZWQsIG9yIGl0IG5hbWVzIGEgbWFuYWdlciB3ZSBkbyBub3QgaGFuZGxlLlxuICovXG5mdW5jdGlvbiBkZXRlY3RQYWNrYWdlTWFuYWdlckZyb21QYWNrYWdlSnNvbihyb290OiBzdHJpbmcpOiBudWxsIHwgUGFja2FnZU1hbmFnZXIge1xuICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSBqb2luKHJvb3QsIFJlcG9QYXRocy5QYWNrYWdlSnNvbik7XG5cbiAgaWYgKCFleGlzdHNTeW5jKHBhY2thZ2VKc29uUGF0aCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxldCBwYWNrYWdlSnNvbjogUGFja2FnZUpzb247XG5cbiAgdHJ5IHtcbiAgICBwYWNrYWdlSnNvbiA9IHJlYWRKc29uU3luYzxQYWNrYWdlSnNvbj4ocGFja2FnZUpzb25QYXRoKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBkZWNsYXJhdGlvbiA9IHBhY2thZ2VKc29uLnBhY2thZ2VNYW5hZ2VyO1xuXG4gIGlmICghZGVjbGFyYXRpb24pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoID0gREVDTEFSQVRJT05fTkFNRV9SRUdfRVhQLmV4ZWMoZGVjbGFyYXRpb24pO1xuXG4gIHJldHVybiBtYXRjaCA/IHBhcnNlUGFja2FnZU1hbmFnZXJOYW1lKGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICduYW1lJykpIDogbnVsbDtcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgcGFja2FnZSBtYW5hZ2VyIG91dCBvZiBgbnBtX2NvbmZpZ191c2VyX2FnZW50YCwgd2hpY2ggZXZlcnkgbWFuYWdlciBzZXRzIGZvciB0aGUgcHJvY2Vzc2VzIGl0XG4gKiBsYXVuY2hlcy5cbiAqXG4gKiBAcmV0dXJucyBUaGUgZGV0ZWN0ZWQgcGFja2FnZSBtYW5hZ2VyLCBvciBgbnVsbGAgd2hlbiB0aGUgdmFyaWFibGUgaXMgYWJzZW50LCBtYWxmb3JtZWQsIG9yIG5hbWVzIGFcbiAqIHJ1bnRpbWUgd2UgZG8gbm90IGhhbmRsZS5cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0UGFja2FnZU1hbmFnZXJGcm9tVXNlckFnZW50KCk6IG51bGwgfCBQYWNrYWdlTWFuYWdlciB7XG4gIGNvbnN0IHVzZXJBZ2VudCA9IHByb2Nlc3MuZW52WyducG1fY29uZmlnX3VzZXJfYWdlbnQnXTtcblxuICBpZiAoIXVzZXJBZ2VudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbWF0Y2ggPSBVU0VSX0FHRU5UX05BTUVfUkVHX0VYUC5leGVjKHVzZXJBZ2VudCk7XG5cbiAgcmV0dXJuIG1hdGNoID8gcGFyc2VQYWNrYWdlTWFuYWdlck5hbWUoZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ25hbWUnKSkgOiBudWxsO1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBgbm9kZV9tb2R1bGVzLy5iaW5gIHNoaW0gZm9yIGEgdG9vbCwgd2Fsa2luZyB1cCBmcm9tIHRoZSBwcm9qZWN0IHJvb3QgdGhyb3VnaCBhbmNlc3RvciBmb2xkZXJzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGxvb2t1cC5cbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBzaGltLCBvciBgbnVsbGAgd2hlbiBub25lIGV4aXN0cy5cbiAqL1xuZnVuY3Rpb24gZmluZEJpblNoaW0ocGFyYW1zOiBGaW5kQmluU2hpbVBhcmFtcyk6IG51bGwgfCBzdHJpbmcge1xuICBjb25zdCB7IGN3ZCwgdG9vbCB9ID0gcGFyYW1zO1xuICBjb25zdCBjYW5kaWRhdGVzID0gZ2V0U2hpbUNhbmRpZGF0ZXModG9vbCk7XG4gIGxldCBjdXJyZW50Rm9sZGVyID0gZ2V0U3RhcnRGb2xkZXIoY3dkKTtcblxuICB3aGlsZSAoXG4gICAgY3VycmVudEZvbGRlciAhPT0gUmVwb1BhdGhzLkN1cnJlbnRGb2xkZXIgYXMgc3RyaW5nXG4gICAgJiYgY3VycmVudEZvbGRlciAhPT0gUmVwb1BhdGhzLlJvb3RGb2xkZXIgYXMgc3RyaW5nXG4gICkge1xuICAgIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIGNhbmRpZGF0ZXMpIHtcbiAgICAgIGNvbnN0IHNoaW1QYXRoID0gam9pbihjdXJyZW50Rm9sZGVyLCBSZXBvUGF0aHMuTm9kZU1vZHVsZXMsIFJlcG9QYXRocy5CaW4sIGNhbmRpZGF0ZSk7XG4gICAgICBpZiAoZXhpc3RzU3luYyhzaGltUGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHNoaW1QYXRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIGN1cnJlbnRGb2xkZXIgPSBkaXJuYW1lKGN1cnJlbnRGb2xkZXIpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBjb21tYW5kIHBhcnRzIHRoYXQgcnVuIGEgb25lLW9mZiB0b29sIHRocm91Z2ggdGhlIG1hbmFnZXIgdGhhdCBvd25zIHRoZSB0cmVlLlxuICpcbiAqIEBwYXJhbSBjd2QgLSBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB0byByZXNvbHZlIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgY29tbWFuZCBwYXJ0cywgZS5nLiBgWydidW4nLCAneCddYC4gVGhlIHRvb2wgbmFtZSBpcyBhcHBlbmRlZCBieSB0aGUgY2FsbGVyLlxuICovXG5mdW5jdGlvbiBnZXRQYWNrYWdlTWFuYWdlckV4ZWNDb21tYW5kKGN3ZD86IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcGFja2FnZU1hbmFnZXIgPSBnZXRQYWNrYWdlTWFuYWdlcihjd2QpO1xuXG4gIHN3aXRjaCAocGFja2FnZU1hbmFnZXIpIHtcbiAgICBjYXNlIFBhY2thZ2VNYW5hZ2VyLkJ1bjoge1xuICAgICAgcmV0dXJuIFsnYnVuJywgJ3gnXTtcbiAgICB9XG4gICAgY2FzZSBQYWNrYWdlTWFuYWdlci5OcG06IHtcbiAgICAgIHJldHVybiBbJ25weCddO1xuICAgIH1cbiAgICBjYXNlIFBhY2thZ2VNYW5hZ2VyLlBucG06IHtcbiAgICAgIHJldHVybiBbJ3BucG0nLCAnZXhlYyddO1xuICAgIH1cbiAgICBjYXNlIFBhY2thZ2VNYW5hZ2VyLllhcm46IHtcbiAgICAgIHJldHVybiBbJ3lhcm4nLCAnZXhlYyddO1xuICAgIH1cbiAgICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gRXhoYXVzdGl2ZSBzd2l0Y2ggZ3VhcmQ7IGRlZmF1bHQgYnJhbmNoIGlzIHVucmVhY2hhYmxlLiAqL1xuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBhc3NlcnROZXZlcihwYWNrYWdlTWFuYWdlcik7XG4gICAgfVxuICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgfVxufVxuXG4vKipcbiAqIExpc3RzIHRoZSBzaGltIGZpbGUgbmFtZXMgdG8gdHJ5IGZvciBhIHRvb2wsIG1vc3Qgc3BlY2lmaWMgZmlyc3QuXG4gKlxuICogT24gV2luZG93cyBvbmx5IHRoZSBleGVjdXRhYmxlIGZvcm1zIGFyZSB2aWFibGU6IG5wbSBhbmQgcG5wbSBhbHNvIHdyaXRlIGEgc2hpbSB3aXRoIG5vIGV4dGVuc2lvbiwgYnV0XG4gKiB0aGF0IG9uZSBpcyBhIGBzaGAgc2NyaXB0IHRoYXQgYGNtZC5leGVgIGNhbm5vdCBydW4sIHNvIGl0IG11c3QgbmV2ZXIgYmUgY2hvc2VuIHRoZXJlLlxuICpcbiAqIEBwYXJhbSB0b29sIC0gVGhlIG5hbWUgb2YgdGhlIGxvY2FsbHktaW5zdGFsbGVkIHRvb2wuXG4gKiBAcmV0dXJucyBUaGUgY2FuZGlkYXRlIGZpbGUgbmFtZXMsIGluIHRoZSBvcmRlciB0aGV5IHNob3VsZCBiZSB0cmllZC5cbiAqL1xuZnVuY3Rpb24gZ2V0U2hpbUNhbmRpZGF0ZXModG9vbDogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJ1xuICAgID8gW1xuICAgICAgYCR7dG9vbH0ke1JlcG9QYXRocy5Db21tYW5kRXh0ZW5zaW9ufWAsXG4gICAgICBgJHt0b29sfSR7UmVwb1BhdGhzLkV4ZUV4dGVuc2lvbn1gLFxuICAgICAgYCR7dG9vbH0ke1JlcG9QYXRocy5CYXRFeHRlbnNpb259YFxuICAgIF1cbiAgICA6IFt0b29sXTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgZm9sZGVyIHRvIHN0YXJ0IGEgbG9va3VwIGZyb20gXHUyMDE0IHRoZSBwcm9qZWN0IHJvb3Qgd2hlbiB0aGVyZSBpcyBvbmUsIHRoZSB3b3JraW5nIGZvbGRlclxuICogb3RoZXJ3aXNlLlxuICpcbiAqIEBwYXJhbSBjd2QgLSBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB0byByZXNvbHZlIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgZm9sZGVyIHRvIHN0YXJ0IGZyb20uXG4gKi9cbmZ1bmN0aW9uIGdldFN0YXJ0Rm9sZGVyKGN3ZD86IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRSb290Rm9sZGVyKGN3ZCkgPz8gdG9Qb3NpeFBhdGgoY3dkID8/IHByb2Nlc3MuY3dkKCkpO1xufVxuXG4vKipcbiAqIE1hcHMgdGhlIGJhcmUgbmFtZSBhIGxvY2tmaWxlIGRlY2xhcmF0aW9uIG9yIGEgdXNlciBhZ2VudCByZXBvcnRzIG9udG8gdGhlIHBhY2thZ2UgbWFuYWdlciBpdCBuYW1lcy5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSByZXBvcnRlZCBuYW1lLlxuICogQHJldHVybnMgVGhlIG1hdGNoaW5nIHBhY2thZ2UgbWFuYWdlciwgb3IgYG51bGxgIGZvciBhIHJ1bnRpbWUgd2UgZG8gbm90IGhhbmRsZS5cbiAqL1xuZnVuY3Rpb24gcGFyc2VQYWNrYWdlTWFuYWdlck5hbWUobmFtZTogc3RyaW5nKTogbnVsbCB8IFBhY2thZ2VNYW5hZ2VyIHtcbiAgc3dpdGNoIChuYW1lKSB7XG4gICAgY2FzZSBQYWNrYWdlTWFuYWdlci5CdW4gYXMgc3RyaW5nOiB7XG4gICAgICByZXR1cm4gUGFja2FnZU1hbmFnZXIuQnVuO1xuICAgIH1cbiAgICBjYXNlIFBhY2thZ2VNYW5hZ2VyLk5wbSBhcyBzdHJpbmc6IHtcbiAgICAgIHJldHVybiBQYWNrYWdlTWFuYWdlci5OcG07XG4gICAgfVxuICAgIGNhc2UgUGFja2FnZU1hbmFnZXIuUG5wbSBhcyBzdHJpbmc6IHtcbiAgICAgIHJldHVybiBQYWNrYWdlTWFuYWdlci5QbnBtO1xuICAgIH1cbiAgICBjYXNlIFBhY2thZ2VNYW5hZ2VyLllhcm4gYXMgc3RyaW5nOiB7XG4gICAgICByZXR1cm4gUGFja2FnZU1hbmFnZXIuWWFybjtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUGlja3MgdGhlIHdpbm5lciBvdXQgb2YgdGhlIGNvbGxlY3RlZCBzaWduYWxzLCBwZXIgdGhlIG9yZGVyIGRvY3VtZW50ZWQgb24ge0BsaW5rIGdldFBhY2thZ2VNYW5hZ2VyfS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSByZXNvbHV0aW9uLlxuICogQHJldHVybnMgVGhlIHBhY2thZ2UgbWFuYWdlciB0aGF0IG93bnMgdGhlIHRyZWUuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVQYWNrYWdlTWFuYWdlcihwYXJhbXM6IFJlc29sdmVQYWNrYWdlTWFuYWdlclBhcmFtcyk6IFBhY2thZ2VNYW5hZ2VyIHtcbiAgY29uc3Qge1xuICAgIGNsYWltYW50cyxcbiAgICBkZWNsYXJlZFBhY2thZ2VNYW5hZ2VyXG4gIH0gPSBwYXJhbXM7XG5cbiAgaWYgKGRlY2xhcmVkUGFja2FnZU1hbmFnZXIgIT09IG51bGwpIHtcbiAgICByZXR1cm4gZGVjbGFyZWRQYWNrYWdlTWFuYWdlcjtcbiAgfVxuXG4gIGNvbnN0IGxvY2tmaWxlT3duZXJzID0gWy4uLmNsYWltYW50c107XG4gIGNvbnN0IFtmaXJzdExvY2tmaWxlT3duZXJdID0gbG9ja2ZpbGVPd25lcnM7XG5cbiAgaWYgKGZpcnN0TG9ja2ZpbGVPd25lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGRldGVjdFBhY2thZ2VNYW5hZ2VyRnJvbVVzZXJBZ2VudCgpID8/IFBhY2thZ2VNYW5hZ2VyLk5wbTtcbiAgfVxuXG4gIGlmIChsb2NrZmlsZU93bmVycy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gZmlyc3RMb2NrZmlsZU93bmVyO1xuICB9XG5cbiAgY29uc3QgbGF1bmNoZWRCeSA9IGRldGVjdFBhY2thZ2VNYW5hZ2VyRnJvbVVzZXJBZ2VudCgpO1xuXG4gIHJldHVybiBsYXVuY2hlZEJ5ICE9PSBudWxsICYmIGNsYWltYW50cy5oYXMobGF1bmNoZWRCeSkgPyBsYXVuY2hlZEJ5IDogZmlyc3RMb2NrZmlsZU93bmVyO1xufVxuXG4vKipcbiAqIFJlcG9ydHMgdGhhdCBzZXZlcmFsIHBhY2thZ2UgbWFuYWdlcnMgY2xhaW0gdGhlIHNhbWUgdHJlZSwgbmFtaW5nIGVhY2ggbG9ja2ZpbGUgZm91bmQsIHdoYXRcbiAqIGBwYWNrYWdlLmpzb25gIGRlY2xhcmVzLCBhbmQgd2hpY2ggbWFuYWdlciB3b24uXG4gKlxuICogYGNvbnNvbGUud2FybmAgcmF0aGVyIHRoYW4gYSBkZWJ1ZyBjaGFubmVsOiB0aGlzIHJ1bnMgaW4gdGhlIGJ1aWxkJ3Mgb3duIHRlcm1pbmFsLCBhbmQgYSBtZXNzYWdlIG5vYm9keVxuICogc2VlcyB1bmxlc3MgdGhleSBhbHJlYWR5IHN1c3BlY3QgdGhlIHByb2JsZW0gbGVhdmVzIHRoZSBmYWlsdXJlIGV4YWN0bHkgYXMgc2lsZW50IGFzIGl0IHdhcy4gRWFjaFxuICogZGlzdGluY3QgbWVzc2FnZSBpcyBwcmludGVkIG9uY2UsIGJlY2F1c2UgdGhlIG1hbmFnZXIgaXMgcmVzb2x2ZWQgb25jZSBwZXIgcGFja2FnZS1zY3JpcHQgaG9wIGFuZCBvbmNlXG4gKiBwZXIgdG9vbCBpbnZvY2F0aW9uLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHJlcG9ydC5cbiAqL1xuZnVuY3Rpb24gd2FybkFib3V0U2V2ZXJhbENsYWltYW50cyhwYXJhbXM6IFdhcm5BYm91dFNldmVyYWxDbGFpbWFudHNQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3Qge1xuICAgIGRlY2xhcmVkUGFja2FnZU1hbmFnZXIsXG4gICAgbG9ja2ZpbGVzLFxuICAgIHBhY2thZ2VNYW5hZ2VyLFxuICAgIHJvb3RcbiAgfSA9IHBhcmFtcztcblxuICBjb25zdCBsb2NrZmlsZU5hbWVzID0gbG9ja2ZpbGVzLm1hcCgobG9ja2ZpbGUpID0+IGxvY2tmaWxlLmZpbGVOYW1lKS5qb2luKCcsICcpO1xuICBjb25zdCBhZHZpY2UgPSBkZWNsYXJlZFBhY2thZ2VNYW5hZ2VyID09PSBudWxsXG4gICAgPyAnRGVsZXRlIHRoZSBzdGFsZSBsb2NrZmlsZSwgb3IgZGVjbGFyZSBcInBhY2thZ2VNYW5hZ2VyXCIgaW4gcGFja2FnZS5qc29uLCB0byBzZXR0bGUgaXQuJ1xuICAgIDogJ0RlbGV0ZSB0aGUgc3RhbGUgbG9ja2ZpbGUgdG8gc2V0dGxlIGl0Lic7XG4gIGNvbnN0IG1lc3NhZ2UgPSBbXG4gICAgYG9ic2lkaWFuLWRldi11dGlsczogbW9yZSB0aGFuIG9uZSBwYWNrYWdlIG1hbmFnZXIgY2xhaW1zICR7cm9vdH0uYCxcbiAgICBgTG9ja2ZpbGVzOiAke2xvY2tmaWxlTmFtZXN9LmAsXG4gICAgYHBhY2thZ2UuanNvbiBcInBhY2thZ2VNYW5hZ2VyXCI6ICR7ZGVjbGFyZWRQYWNrYWdlTWFuYWdlciA/PyAnbm90IHNldCd9LmAsXG4gICAgYFVzaW5nICR7cGFja2FnZU1hbmFnZXJ9LmAsXG4gICAgYWR2aWNlXG4gIF0uam9pbignICcpO1xuXG4gIGlmIChyZXBvcnRlZERpc2FncmVlbWVudHMuaGFzKG1lc3NhZ2UpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmVwb3J0ZWREaXNhZ3JlZW1lbnRzLmFkZChtZXNzYWdlKTtcbiAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFjQSxrQkFJTztBQUNQLHFCQUF1QztBQUN2Qyx5QkFBNEI7QUFDNUIscUJBQTJCO0FBQzNCLDBCQUFvQjtBQUVwQixrQkFBNkI7QUFDN0Isd0JBQTBCO0FBQzFCLGtCQUE4QjtBQUt2QixJQUFLLGlCQUFMLGtCQUFLQSxvQkFBTDtBQUlMLEVBQUFBLGdCQUFBLFNBQU07QUFLTixFQUFBQSxnQkFBQSxTQUFNO0FBS04sRUFBQUEsZ0JBQUEsVUFBTztBQUtQLEVBQUFBLGdCQUFBLFVBQU87QUFuQkcsU0FBQUE7QUFBQSxHQUFBO0FBZ0VMLFNBQVMsa0JBQWtCLEtBQThCO0FBQzlELFFBQU0sT0FBTyxlQUFlLEdBQUc7QUFDL0IsUUFBTSx5QkFBeUIsb0NBQW9DLElBQUk7QUFDdkUsUUFBTSxZQUFZLFVBQVUsT0FBTyxDQUFDLGlCQUFhLCtCQUFXLGtCQUFLLE1BQU0sU0FBUyxRQUFRLENBQUMsQ0FBQztBQUMxRixRQUFNLFlBQVksSUFBSSxJQUFJLFVBQVUsSUFBSSxDQUFDLGFBQWEsU0FBUyxjQUFjLENBQUM7QUFFOUUsTUFBSSwyQkFBMkIsTUFBTTtBQUNuQyxjQUFVLElBQUksc0JBQXNCO0FBQUEsRUFDdEM7QUFFQSxRQUFNLGlCQUFpQixzQkFBc0I7QUFBQSxJQUMzQztBQUFBLElBQ0E7QUFBQSxFQUNGLENBQUM7QUFFRCxNQUFJLFVBQVUsT0FBTyxHQUFHO0FBQ3RCLDhCQUEwQjtBQUFBLE1BQ3hCO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixDQUFDO0FBQUEs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SSxhQUFhO0FBQ3pFO0FBYUEsU0FBUywwQkFBMEIsUUFBK0M7QUFDaEYsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLElBQUk7QUFFSixRQUFNLGdCQUFnQixVQUFVLElBQUksQ0FBQyxhQUFhLFNBQVMsUUFBUSxFQUFFLEtBQUssSUFBSTtBQUM5RSxRQUFNLFNBQVMsMkJBQTJCLE9BQ3RDLDBGQUNBO0FBQ0osUUFBTSxVQUFVO0FBQUEsSUFDZCw0REFBNEQsSUFBSTtBQUFBLElBQ2hFLGNBQWMsYUFBYTtBQUFBLElBQzNCLGtDQUFrQywwQkFBMEIsU0FBUztBQUFBLElBQ3JFLFNBQVMsY0FBYztBQUFBLElBQ3ZCO0FBQUEsRUFDRixFQUFFLEtBQUssR0FBRztBQUVWLE1BQUksc0JBQXNCLElBQUksT0FBTyxHQUFHO0FBQ3RDO0FBQUEsRUFDRjtBQUVBLHdCQUFzQixJQUFJLE9BQU87QUFDakMsVUFBUSxLQUFLLE9BQU87QUFDdEI7IiwKICAibmFtZXMiOiBbIlBhY2thZ2VNYW5hZ2VyIiwgInByb2Nlc3MiXQp9Cg==
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/// <reference path="./library-references.d.cts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Resolves locally-installed tool binaries and package-script runners without assuming `npm`.
|
|
6
|
+
*
|
|
7
|
+
* Delegating to `npx` silently assumes an npm-installed tree. On Windows that assumption is fatal under
|
|
8
|
+
* `bun`: `bun install` writes `node_modules/.bin/<tool>.exe`, not the `<tool>.cmd` that npm's `npx` looks
|
|
9
|
+
* for, so `npx` misses the local install entirely and downloads the tool from the registry instead — which
|
|
10
|
+
* for `tsc` is the well-known decoy package, not TypeScript. Resolving the shim from `node_modules/.bin`
|
|
11
|
+
* ourselves sidesteps the whole shim-format question, because every package manager writes one there.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* A package manager that can own a project's dependency tree.
|
|
15
|
+
*/
|
|
16
|
+
export declare enum PackageManager {
|
|
17
|
+
/**
|
|
18
|
+
* The `bun` package manager.
|
|
19
|
+
*/
|
|
20
|
+
Bun = "bun",
|
|
21
|
+
/**
|
|
22
|
+
* The `npm` package manager.
|
|
23
|
+
*/
|
|
24
|
+
Npm = "npm",
|
|
25
|
+
/**
|
|
26
|
+
* The `pnpm` package manager.
|
|
27
|
+
*/
|
|
28
|
+
Pnpm = "pnpm",
|
|
29
|
+
/**
|
|
30
|
+
* The `yarn` package manager.
|
|
31
|
+
*/
|
|
32
|
+
Yarn = "yarn"
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Parameters for {@link resolveToolCommand}.
|
|
36
|
+
*/
|
|
37
|
+
export interface ResolveToolCommandParams {
|
|
38
|
+
/**
|
|
39
|
+
* The current working folder to resolve from.
|
|
40
|
+
*/
|
|
41
|
+
readonly cwd?: string;
|
|
42
|
+
/**
|
|
43
|
+
* The name of the locally-installed tool, as it appears in `node_modules/.bin`.
|
|
44
|
+
*/
|
|
45
|
+
readonly tool: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Determines which package manager owns the project's dependency tree.
|
|
49
|
+
*
|
|
50
|
+
* Every signal is collected before any of them is believed, because a repo carrying two lockfiles used to
|
|
51
|
+
* resolve to whichever sat earlier in a fixed list — silently reassigning every package script and every
|
|
52
|
+
* tool invocation to a manager that never installed the tree.
|
|
53
|
+
*
|
|
54
|
+
* The order is:
|
|
55
|
+
*
|
|
56
|
+
* 1. The `packageManager` field of `package.json`. It is a deliberate declaration by the repo's author
|
|
57
|
+
* rather than an artifact left behind by whatever ran last, so it outranks every lockfile — and it is
|
|
58
|
+
* the only signal that helps at all before the first install, when no lockfile exists yet.
|
|
59
|
+
* 2. The sole lockfile, when exactly one manager claims the tree.
|
|
60
|
+
* 3. Among several lockfiles, the manager that launched us (`npm_config_user_agent`), when it owns one of
|
|
61
|
+
* them — a live signal beats a file that may have been abandoned mid-migration. Otherwise the
|
|
62
|
+
* documented fallback order in {@link LOCKFILES} decides. Note this is deliberately NOT "the most
|
|
63
|
+
* recently modified lockfile": a stray lockfile is typically the newest file, so mtime picks precisely
|
|
64
|
+
* the wrong one.
|
|
65
|
+
* 4. `npm_config_user_agent` on its own, when there is no lockfile.
|
|
66
|
+
* 5. {@link PackageManager.Npm}.
|
|
67
|
+
*
|
|
68
|
+
* Whenever more than one manager claims the tree, the disagreement is reported once per project through
|
|
69
|
+
* {@link warnAboutSeveralClaimants} — the resolution stays deterministic, but it stops being silent.
|
|
70
|
+
*
|
|
71
|
+
* @param cwd - The current working folder to resolve from.
|
|
72
|
+
* @returns The detected package manager, or {@link PackageManager.Npm} when nothing indicates otherwise.
|
|
73
|
+
*/
|
|
74
|
+
export declare function getPackageManager(cwd?: string): PackageManager;
|
|
75
|
+
/**
|
|
76
|
+
* Builds the command parts that run a package script through the manager that owns the tree.
|
|
77
|
+
*
|
|
78
|
+
* @param cwd - The current working folder to resolve from.
|
|
79
|
+
* @returns The command parts, e.g. `['bun', 'run']`. The script name is appended by the caller.
|
|
80
|
+
*/
|
|
81
|
+
export declare function getPackageManagerRunCommand(cwd?: string): string[];
|
|
82
|
+
/**
|
|
83
|
+
* Builds the command parts that run a locally-installed tool, with the tool itself already included.
|
|
84
|
+
*
|
|
85
|
+
* Prefers the shim in the nearest `node_modules/.bin`, walking up through ancestor folders so a hoisted
|
|
86
|
+
* workspace install is still found. Falls back to the owning manager's exec form when no shim resolves —
|
|
87
|
+
* which is both the previous behavior and the only thing that works under yarn's Plug'n'Play, where
|
|
88
|
+
* `node_modules/.bin` does not exist at all.
|
|
89
|
+
*
|
|
90
|
+
* @param params - The parameters for the resolution.
|
|
91
|
+
* @returns The command parts, e.g. `['/project/node_modules/.bin/tsc']` or `['bun', 'x', 'tsc']`.
|
|
92
|
+
*/
|
|
93
|
+
export declare function resolveToolCommand(params: ResolveToolCommandParams): string[];
|