@cplieger/deadset-ts 8.0.0-dev.2 → 8.0.0-dev.20
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/README.md +3 -1
- package/THIRD_PARTY_NOTICES.md +27 -0
- package/dist/bin/mapper-connection.js +2 -1
- package/dist/bin/node-host.js +24 -5
- package/dist/src/alias-chain.js +2 -7
- package/dist/src/amd.js +81 -0
- package/dist/src/analysis.js +269 -432
- package/dist/src/augmentations.js +64 -3
- package/dist/src/automatic-types.js +10 -29
- package/dist/src/bindings.js +382 -0
- package/dist/src/calls.js +279 -43
- package/dist/src/commands/held.js +499 -0
- package/dist/src/commands/read.js +161 -0
- package/dist/src/commands/shell.js +169 -0
- package/dist/src/commands/tools.js +1847 -0
- package/dist/src/component-files.js +3 -2
- package/dist/src/component-layer.js +4 -2
- package/dist/src/config.js +6 -82
- package/dist/src/conformance-record.js +1 -1
- package/dist/src/consumers.js +10 -38
- package/dist/src/contextual-uses.js +57 -26
- package/dist/src/contract/config.generated.js +561 -0
- package/dist/src/contract/contract.generated.js +1369 -0
- package/dist/src/contract/report.generated.js +866 -0
- package/dist/src/dependencies.js +164 -121
- package/dist/src/destructuring.js +1 -19
- package/dist/src/edges.js +38 -122
- package/dist/src/element-access.js +181 -168
- package/dist/src/entries/build-scripts.js +222 -0
- package/dist/src/{configuration-files.js → entries/configuration-files.js} +52 -256
- package/dist/src/{convention-rows.js → entries/convention-rows.js} +170 -30
- package/dist/src/entries/conventions.js +740 -0
- package/dist/src/{html-entries.js → entries/html-entries.js} +12 -42
- package/dist/src/{mdx-entries.js → entries/mdx-entries.js} +5 -28
- package/dist/src/entries/run-directories.js +77 -0
- package/dist/src/entries/sources.js +144 -0
- package/dist/src/entries/static-module.js +670 -0
- package/dist/src/entries/test-runners.js +650 -0
- package/dist/src/entries/workflow-steps.js +345 -0
- package/dist/src/enum-group.js +3 -10
- package/dist/src/erased-stores.js +4 -6
- package/dist/src/exempt-classes.js +1 -63
- package/dist/src/exempt.js +21 -66
- package/dist/src/exposure.js +400 -0
- package/dist/src/extensions.js +37 -0
- package/dist/src/facts.js +38 -0
- package/dist/src/failure.js +36 -0
- package/dist/src/file-facts.js +3 -26
- package/dist/src/findings/completion.js +109 -56
- package/dist/src/findings/dependencies-and-module-machinery.js +4 -5
- package/dist/src/findings/emitters.js +27 -41
- package/dist/src/{implementations.js → findings/implementations.js} +3 -3
- package/dist/src/{in-operands.js → findings/in-operands.js} +3 -2
- package/dist/src/findings/interfaces.js +4 -5
- package/dist/src/findings/intra-function.js +16 -13
- package/dist/src/findings/non-code-artifacts.js +17 -12
- package/dist/src/findings/reads-and-writes.js +86 -27
- package/dist/src/findings/self-check.js +44 -30
- package/dist/src/findings/unused-declarations.js +29 -45
- package/dist/src/findings/visibility-narrowing.js +23 -31
- package/dist/src/findings-pass.js +13 -21
- package/dist/src/framework-lifecycle.js +46 -19
- package/dist/src/fs/document.js +52 -0
- package/dist/src/fs/manifest.js +67 -0
- package/dist/src/fs/tree.js +88 -0
- package/dist/src/generated-file.js +174 -28
- package/dist/src/git-ignore.js +39 -26
- package/dist/src/import-bindings.js +73 -28
- package/dist/src/index/sites.js +557 -0
- package/dist/src/index.js +2 -2
- package/dist/src/indexed-access.js +523 -478
- package/dist/src/injection-container.js +2 -2
- package/dist/src/interface-satisfaction.js +1 -1
- package/dist/src/intra-function-parts.js +63 -43
- package/dist/src/inventory/commonjs.js +507 -0
- package/dist/src/inventory/enumerate.js +167 -0
- package/dist/src/inventory/syntax.js +236 -0
- package/dist/src/inventory.js +323 -724
- package/dist/src/javascript-file.js +48 -0
- package/dist/src/json-document.js +198 -67
- package/dist/src/keyof-comparisons.js +126 -107
- package/dist/src/kinds.js +3 -366
- package/dist/src/{components.js → liveness/components.js} +2 -3
- package/dist/src/{graph.js → liveness/graph.js} +52 -28
- package/dist/src/liveness/matrix.js +99 -0
- package/dist/src/liveness/sweep.js +558 -0
- package/dist/src/load/classify.js +289 -0
- package/dist/src/load/diagnostics.js +87 -0
- package/dist/src/load/discover.js +285 -0
- package/dist/src/{emit-map.js → load/emit-map.js} +1 -1
- package/dist/src/load/expected-module.js +136 -0
- package/dist/src/load/load.js +27 -0
- package/dist/src/load/module-lookup.js +37 -0
- package/dist/src/load/package-scope.js +56 -0
- package/dist/src/load/plan.js +313 -0
- package/dist/src/load/specifiers.js +113 -0
- package/dist/src/load/synthesize.js +152 -0
- package/dist/src/load/test-globals.js +207 -0
- package/dist/src/load/test-joins.js +82 -0
- package/dist/src/{workspace-manifests.js → load/workspace-manifests.js} +4 -4
- package/dist/src/{workspace-programs.js → load/workspace-programs.js} +89 -66
- package/dist/src/{workspace-resolution.js → load/workspace-resolution.js} +24 -66
- package/dist/src/{workspace-run.js → load/workspace-run.js} +7 -7
- package/dist/src/{workspace.js → load/workspace.js} +62 -124
- package/dist/src/module-declarations.js +70 -85
- package/dist/src/overrides.js +134 -112
- package/dist/src/partial.js +2 -1
- package/dist/src/paths.js +82 -16
- package/dist/src/platform-calls.js +78 -0
- package/dist/src/platform-symbols.js +134 -0
- package/dist/src/position.js +43 -1
- package/dist/src/print.js +11 -79
- package/dist/src/product.js +13 -0
- package/dist/src/query.js +47 -0
- package/dist/src/ref.js +12 -20
- package/dist/src/references/read-rule.js +1 -0
- package/dist/src/references/read-rules.js +48 -0
- package/dist/src/references/sink.js +237 -0
- package/dist/src/references/sources.js +450 -0
- package/dist/src/references.js +117 -1074
- package/dist/src/report-schema.js +51 -0
- package/dist/src/report.js +57 -41
- package/dist/src/reporters/annotations.js +15 -8
- package/dist/src/reporters/sarif.js +16 -10
- package/dist/src/reporters/template.js +4 -19
- package/dist/src/resolve.js +246 -730
- package/dist/src/{configured-declarations.js → roots/configured-declarations.js} +22 -24
- package/dist/src/{entry-point-gaps.js → roots/entry-point-gaps.js} +6 -15
- package/dist/src/roots/manifest.js +216 -0
- package/dist/src/roots/published-reach.js +412 -0
- package/dist/src/roots/root-set.js +487 -0
- package/dist/src/roots/unseen-loads.js +236 -0
- package/dist/src/run.js +66 -77
- package/dist/src/schema.js +320 -343
- package/dist/src/scope.js +38 -115
- package/dist/src/serialization-contract.js +601 -22
- package/dist/src/session.js +37 -29
- package/dist/src/source-files.js +6 -10
- package/dist/src/stores.js +4 -2
- package/dist/src/suppress-file.js +25 -28
- package/dist/src/suppress-inline.js +36 -83
- package/dist/src/suppress.js +50 -71
- package/dist/src/symbol-keys.js +92 -88
- package/dist/src/template-field.js +9 -19
- package/dist/src/tests/file-class.js +76 -0
- package/dist/src/{outside-tests.js → tests/outside.js} +7 -7
- package/dist/src/{test-support.js → tests/support.js} +5 -12
- package/dist/src/text/compare.js +26 -0
- package/dist/src/text/glob.js +194 -0
- package/dist/src/text/named-files.js +298 -0
- package/dist/src/text/yaml.js +684 -0
- package/dist/src/type-errors.js +11 -232
- package/dist/src/type-parameter-reads.js +178 -139
- package/dist/src/unimplemented-callees.js +262 -242
- package/dist/src/unwrap.js +23 -0
- package/dist/src/usage.js +10 -0
- package/dist/src/vendor/unbash/ansi-c.js +132 -0
- package/dist/src/vendor/unbash/arithmetic-parts.js +37 -0
- package/dist/src/vendor/unbash/arithmetic.js +591 -0
- package/dist/src/vendor/unbash/assignment.js +131 -0
- package/dist/src/vendor/unbash/chars.js +48 -0
- package/dist/src/vendor/unbash/command.js +41 -0
- package/dist/src/vendor/unbash/expansion.js +80 -0
- package/dist/src/vendor/unbash/glob.js +268 -0
- package/dist/src/vendor/unbash/heredoc.js +27 -0
- package/dist/src/vendor/unbash/internal-types.js +1 -0
- package/dist/src/vendor/unbash/lexer.js +4274 -0
- package/dist/src/vendor/unbash/limits.js +3 -0
- package/dist/src/vendor/unbash/parser.js +1366 -0
- package/dist/src/vendor/unbash/parts.js +57 -0
- package/dist/src/vendor/unbash/substitution-context.js +8 -0
- package/dist/src/vendor/unbash/traversal.js +212 -0
- package/dist/src/vendor/unbash/types.js +1 -0
- package/dist/src/vendor/unbash/word-value.js +61 -0
- package/dist/src/vendor/unbash/word.js +40 -0
- package/dist/src/verbs/analyze.js +194 -127
- package/dist/src/verbs/describe.js +13 -18
- package/dist/src/verbs/explain.js +85 -139
- package/dist/src/verbs/print-config.js +2 -1
- package/dist/src/verbs/print-projects.js +6 -4
- package/dist/src/verbs/print-retained.js +7 -5
- package/dist/src/verbs/print-roots.js +4 -2
- package/dist/src/verbs/verb.js +1 -5
- package/dist/src/verbs/version.js +14 -3
- package/jsr.json +2 -1
- package/package.json +14 -8
- package/src/alias-chain.ts +2 -9
- package/src/amd.ts +130 -0
- package/src/analysis.ts +424 -650
- package/src/augmentations.ts +93 -4
- package/src/automatic-types.ts +12 -30
- package/src/bindings.ts +460 -0
- package/src/calls.ts +338 -46
- package/src/commands/held.ts +632 -0
- package/src/commands/read.ts +242 -0
- package/src/commands/shell.ts +228 -0
- package/src/commands/tools.ts +2382 -0
- package/src/component-files.ts +4 -2
- package/src/component-layer.ts +4 -2
- package/src/config.ts +31 -302
- package/src/conformance-record.ts +1 -1
- package/src/consumers.ts +16 -66
- package/src/contextual-uses.ts +66 -34
- package/src/contract/config.generated.ts +821 -0
- package/src/contract/contract.generated.ts +1452 -0
- package/src/contract/report.generated.ts +1241 -0
- package/src/dependencies.ts +222 -127
- package/src/destructuring.ts +1 -31
- package/src/edges.ts +41 -140
- package/src/element-access.ts +190 -187
- package/src/entries/build-scripts.ts +292 -0
- package/src/{configuration-files.ts → entries/configuration-files.ts} +68 -278
- package/src/{convention-rows.ts → entries/convention-rows.ts} +227 -31
- package/src/{conventions.ts → entries/conventions.ts} +367 -583
- package/src/{html-entries.ts → entries/html-entries.ts} +22 -48
- package/src/{mdx-entries.ts → entries/mdx-entries.ts} +7 -30
- package/src/entries/run-directories.ts +108 -0
- package/src/entries/sources.ts +266 -0
- package/src/entries/static-module.ts +858 -0
- package/src/entries/test-runners.ts +835 -0
- package/src/entries/workflow-steps.ts +432 -0
- package/src/enum-group.ts +2 -11
- package/src/erased-stores.ts +3 -7
- package/src/exempt-classes.ts +1 -75
- package/src/exempt.ts +70 -98
- package/src/exposure.ts +492 -0
- package/src/extensions.ts +45 -0
- package/src/facts.ts +46 -0
- package/src/failure.ts +63 -0
- package/src/file-facts.ts +15 -25
- package/src/finding.ts +10 -10
- package/src/findings/boundary.ts +11 -0
- package/src/findings/completion.ts +133 -64
- package/src/findings/dependencies-and-module-machinery.ts +4 -7
- package/src/findings/emitter.ts +9 -10
- package/src/findings/emitters.ts +38 -52
- package/src/{implementations.ts → findings/implementations.ts} +4 -4
- package/src/{in-operands.ts → findings/in-operands.ts} +4 -3
- package/src/findings/interfaces.ts +7 -9
- package/src/findings/intra-function.ts +16 -14
- package/src/findings/non-code-artifacts.ts +24 -15
- package/src/findings/reads-and-writes.ts +118 -41
- package/src/findings/self-check.ts +51 -38
- package/src/findings/unused-declarations.ts +31 -49
- package/src/findings/visibility-narrowing.ts +36 -40
- package/src/findings-pass.ts +15 -31
- package/src/framework-lifecycle.ts +47 -19
- package/src/fs/document.ts +70 -0
- package/src/fs/manifest.ts +96 -0
- package/src/fs/tree.ts +110 -0
- package/src/generated-file.ts +242 -35
- package/src/git-ignore.ts +50 -26
- package/src/host.ts +12 -5
- package/src/import-bindings.ts +98 -29
- package/src/index/sites.ts +781 -0
- package/src/index.ts +2 -2
- package/src/indexed-access.ts +570 -527
- package/src/injection-container.ts +2 -2
- package/src/interface-satisfaction.ts +2 -2
- package/src/intra-function-parts.ts +73 -44
- package/src/inventory/commonjs.ts +696 -0
- package/src/inventory/enumerate.ts +203 -0
- package/src/inventory/syntax.ts +311 -0
- package/src/inventory.ts +442 -895
- package/src/javascript-file.ts +54 -0
- package/src/json-document.ts +241 -76
- package/src/keyof-comparisons.ts +133 -122
- package/src/kinds.ts +5 -413
- package/src/{components.ts → liveness/components.ts} +4 -6
- package/src/{graph.ts → liveness/graph.ts} +100 -35
- package/src/liveness/matrix.ts +162 -0
- package/src/liveness/sweep.ts +855 -0
- package/src/load/classify.ts +433 -0
- package/src/load/diagnostics.ts +154 -0
- package/src/load/discover.ts +471 -0
- package/src/{emit-map.ts → load/emit-map.ts} +1 -1
- package/src/load/expected-module.ts +194 -0
- package/src/load/load.ts +73 -0
- package/src/load/module-lookup.ts +50 -0
- package/src/load/package-scope.ts +74 -0
- package/src/load/plan.ts +513 -0
- package/src/load/specifiers.ts +171 -0
- package/src/load/synthesize.ts +230 -0
- package/src/load/test-globals.ts +251 -0
- package/src/load/test-joins.ts +98 -0
- package/src/{workspace-manifests.ts → load/workspace-manifests.ts} +5 -5
- package/src/{workspace-programs.ts → load/workspace-programs.ts} +128 -85
- package/src/{workspace-resolution.ts → load/workspace-resolution.ts} +41 -77
- package/src/{workspace-run.ts → load/workspace-run.ts} +18 -16
- package/src/{workspace.ts → load/workspace.ts} +90 -134
- package/src/module-declarations.ts +74 -98
- package/src/overrides.ts +162 -134
- package/src/partial.ts +3 -2
- package/src/paths.ts +92 -16
- package/src/platform-calls.ts +119 -0
- package/src/platform-symbols.ts +189 -0
- package/src/position.ts +44 -1
- package/src/print.ts +12 -92
- package/src/product.ts +18 -0
- package/src/query.ts +92 -0
- package/src/ref.ts +12 -20
- package/src/references/read-rule.ts +60 -0
- package/src/references/read-rules.ts +55 -0
- package/src/references/sink.ts +314 -0
- package/src/references/sources.ts +632 -0
- package/src/references.ts +187 -1450
- package/src/report-schema.ts +68 -0
- package/src/report.ts +103 -226
- package/src/reporters/annotations.ts +22 -11
- package/src/reporters/json.ts +1 -1
- package/src/reporters/reporter.ts +2 -4
- package/src/reporters/reporters.ts +1 -1
- package/src/reporters/sarif.ts +29 -16
- package/src/reporters/template.ts +4 -20
- package/src/reporters/text.ts +3 -3
- package/src/resolve.ts +284 -1115
- package/src/{configured-declarations.ts → roots/configured-declarations.ts} +27 -29
- package/src/{entry-point-gaps.ts → roots/entry-point-gaps.ts} +7 -16
- package/src/roots/manifest.ts +303 -0
- package/src/roots/published-reach.ts +486 -0
- package/src/{roots.ts → roots/root-set.ts} +286 -469
- package/src/roots/unseen-loads.ts +345 -0
- package/src/run.ts +75 -91
- package/src/schema.ts +391 -388
- package/src/scope.ts +46 -138
- package/src/serialization-contract.ts +769 -23
- package/src/session.ts +87 -55
- package/src/source-files.ts +6 -11
- package/src/stores.ts +15 -3
- package/src/suppress-file.ts +24 -33
- package/src/suppress-inline.ts +55 -91
- package/src/suppress.ts +78 -79
- package/src/symbol-keys.ts +104 -107
- package/src/template-field.ts +15 -25
- package/src/tests/file-class.ts +135 -0
- package/src/{outside-tests.ts → tests/outside.ts} +16 -10
- package/src/{test-support.ts → tests/support.ts} +15 -21
- package/src/text/compare.ts +27 -0
- package/src/text/glob.ts +210 -0
- package/src/text/named-files.ts +388 -0
- package/src/text/yaml.ts +747 -0
- package/src/type-errors.ts +18 -288
- package/src/type-parameter-reads.ts +187 -158
- package/src/unimplemented-callees.ts +297 -280
- package/src/unwrap.ts +34 -0
- package/src/usage.ts +10 -0
- package/src/vendor/unbash/LICENSE +15 -0
- package/src/vendor/unbash/VENDORED.md +16 -0
- package/src/vendor/unbash/ansi-c.ts +132 -0
- package/src/vendor/unbash/arithmetic-parts.ts +53 -0
- package/src/vendor/unbash/arithmetic.ts +641 -0
- package/src/vendor/unbash/assignment.ts +163 -0
- package/src/vendor/unbash/chars.ts +48 -0
- package/src/vendor/unbash/command.ts +47 -0
- package/src/vendor/unbash/expansion.ts +144 -0
- package/src/vendor/unbash/glob.ts +284 -0
- package/src/vendor/unbash/heredoc.ts +34 -0
- package/src/vendor/unbash/internal-types.ts +94 -0
- package/src/vendor/unbash/lexer.ts +4352 -0
- package/src/vendor/unbash/limits.ts +3 -0
- package/src/vendor/unbash/parser.ts +1612 -0
- package/src/vendor/unbash/parts.ts +96 -0
- package/src/vendor/unbash/substitution-context.ts +20 -0
- package/src/vendor/unbash/traversal.ts +182 -0
- package/src/vendor/unbash/types.ts +660 -0
- package/src/vendor/unbash/word-value.ts +64 -0
- package/src/vendor/unbash/word.ts +50 -0
- package/src/verbs/analyze.ts +255 -164
- package/src/verbs/describe.ts +19 -17
- package/src/verbs/explain.ts +93 -169
- package/src/verbs/print-config.ts +2 -1
- package/src/verbs/print-projects.ts +6 -4
- package/src/verbs/print-retained.ts +7 -5
- package/src/verbs/print-roots.ts +4 -2
- package/src/verbs/verb.ts +2 -8
- package/src/verbs/version.ts +15 -3
- package/dist/src/base-url.js +0 -18
- package/dist/src/conventions.js +0 -937
- package/dist/src/discover.js +0 -468
- package/dist/src/entry-points.js +0 -529
- package/dist/src/glob.js +0 -65
- package/dist/src/manifest.js +0 -165
- package/dist/src/matrix.js +0 -246
- package/dist/src/pnpm-workspace.js +0 -120
- package/dist/src/roots.js +0 -672
- package/dist/src/setup-failure.js +0 -23
- package/dist/src/sweep.js +0 -224
- package/dist/src/test-joins.js +0 -101
- package/dist/src/version.js +0 -7
- package/dist/src/workflow-steps.js +0 -185
- package/src/base-url.ts +0 -24
- package/src/discover.ts +0 -653
- package/src/entry-points.ts +0 -687
- package/src/glob.ts +0 -67
- package/src/manifest.ts +0 -234
- package/src/matrix.ts +0 -423
- package/src/pnpm-workspace.ts +0 -135
- package/src/setup-failure.ts +0 -39
- package/src/sweep.ts +0 -347
- package/src/test-joins.ts +0 -120
- package/src/version.ts +0 -7
- package/src/workflow-steps.ts +0 -216
package/dist/src/dependencies.js
CHANGED
|
@@ -7,20 +7,28 @@
|
|
|
7
7
|
* itself is that dependency's need, not the target's.
|
|
8
8
|
*/
|
|
9
9
|
import { isArrayLiteralExpression, isCallExpression, isExportDeclaration, isExpressionStatement, isExternalModuleReference, isIdentifier, isImportDeclaration, isImportEqualsDeclaration, isMetaProperty, isNamespaceExport, isObjectLiteralExpression, isPropertyAccessExpression, isPropertyAssignment, isShorthandPropertyAssignment, isStringLiteral, isNoSubstitutionTemplateLiteral, SyntaxKind, } from "@typescript/native/ast";
|
|
10
|
+
import { amdLoadOf, amdPlatform } from "./amd.js";
|
|
10
11
|
import { automaticTypes } from "./automatic-types.js";
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
12
|
+
import { declaredIn as declaredBeside, dependenciesNamed, moduleStrings, outsideChain, } from "./entries/configuration-files.js";
|
|
13
|
+
import { declarationBindings } from "./import-bindings.js";
|
|
14
|
+
import { nodeKey } from "./inventory.js";
|
|
15
|
+
import { packageScope } from "./load/package-scope.js";
|
|
16
|
+
import { ancestors, cannotStartPackageName, dirnamePath, joinPath, relativePath, resolvePath, } from "./paths.js";
|
|
15
17
|
import { UNANSWERED } from "./query.js";
|
|
16
18
|
import { sourceFilesOf } from "./source-files.js";
|
|
17
|
-
import {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
import { manifestCommands, nodemonTexts } from "./roots/manifest.js";
|
|
20
|
+
import { writtenName } from "./platform-calls.js";
|
|
21
|
+
import { callsPlatform } from "./platform-symbols.js";
|
|
22
|
+
import { parenthesesRemoved } from "./unwrap.js";
|
|
23
|
+
import { pathsNamed, preloadedPackages, readCommands, } from "./commands/read.js";
|
|
24
|
+
import { heldNames } from "./text/named-files.js";
|
|
25
|
+
import { bytewise } from "./text/compare.js";
|
|
26
|
+
import { isRecord } from "./json-document.js";
|
|
27
|
+
import { inInstalledPackages, INSTALLED_PACKAGES, MANIFEST, readDocument } from "./fs/manifest.js";
|
|
28
|
+
const MODULES_SEGMENT = `/${INSTALLED_PACKAGES}/`;
|
|
21
29
|
const TYPES_SCOPE = "@types/";
|
|
22
|
-
/** A
|
|
23
|
-
const SCRIPT_FILE =
|
|
30
|
+
/** A path a command names that is a JavaScript file's. */
|
|
31
|
+
const SCRIPT_FILE = /\.(?:js|mjs|cjs)$/u;
|
|
24
32
|
/** The manifest sections a dependency is declared in, each by the selector its reference spells. */
|
|
25
33
|
const SECTIONS = [
|
|
26
34
|
["dependencies", "dependency"],
|
|
@@ -39,25 +47,6 @@ export function configurationNeeds(packages) {
|
|
|
39
47
|
}
|
|
40
48
|
/** The key of {@link ProjectNeeds.at} for a use no file of the target governs. */
|
|
41
49
|
const ANYWHERE = "";
|
|
42
|
-
function isRecord(value) {
|
|
43
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
44
|
-
}
|
|
45
|
-
/** One JSON document's decoded value, or undefined where it cannot be read or parsed. */
|
|
46
|
-
function readJSON(host, path) {
|
|
47
|
-
let text;
|
|
48
|
-
try {
|
|
49
|
-
text = host.readFile(path);
|
|
50
|
-
}
|
|
51
|
-
catch {
|
|
52
|
-
return undefined;
|
|
53
|
-
}
|
|
54
|
-
try {
|
|
55
|
-
return { text, value: JSON.parse(text) };
|
|
56
|
-
}
|
|
57
|
-
catch {
|
|
58
|
-
return undefined;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
50
|
/**
|
|
62
51
|
* The package a bare module specifier names: its first segment, or its first two
|
|
63
52
|
* where it starts with a scope. A relative, absolute or scheme-prefixed specifier and
|
|
@@ -166,7 +155,7 @@ function configurationPackages(host, configFile, options, programPackages, parse
|
|
|
166
155
|
}
|
|
167
156
|
seen.add(file);
|
|
168
157
|
for (const entry of extendsOf(host, file, parse)) {
|
|
169
|
-
if (
|
|
158
|
+
if (cannotStartPackageName(entry)) {
|
|
170
159
|
const local = resolvePath(dirnamePath(file), entry);
|
|
171
160
|
pending.push(local.endsWith(".json") ? local : `${local}.json`);
|
|
172
161
|
}
|
|
@@ -191,36 +180,19 @@ function importOf(specifier) {
|
|
|
191
180
|
}
|
|
192
181
|
/** The local names one import declaration binds. */
|
|
193
182
|
function bindingsOf(node) {
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
if (isImportEqualsDeclaration(node)) {
|
|
198
|
-
return [node.name];
|
|
199
|
-
}
|
|
200
|
-
if (!isImportDeclaration(node) || node.importClause === undefined) {
|
|
201
|
-
return [];
|
|
202
|
-
}
|
|
203
|
-
const clause = node.importClause;
|
|
204
|
-
const names = clause.name === undefined ? [] : [clause.name];
|
|
205
|
-
const bindings = clause.namedBindings;
|
|
206
|
-
if (bindings !== undefined) {
|
|
207
|
-
if (bindings.kind === SyntaxKind.NamespaceImport) {
|
|
208
|
-
names.push(bindings.name);
|
|
209
|
-
}
|
|
210
|
-
else {
|
|
211
|
-
names.push(...bindings.elements.map((element) => element.name));
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
return names;
|
|
183
|
+
return node !== undefined && (isImportDeclaration(node) || isImportEqualsDeclaration(node))
|
|
184
|
+
? declarationBindings(node).map((binding) => binding.name)
|
|
185
|
+
: [];
|
|
215
186
|
}
|
|
216
187
|
/**
|
|
217
188
|
* Every package one project needs, and which declaration each use is written in.
|
|
218
189
|
* One local walk and one batched resolution per file: a use of an import binding is
|
|
219
190
|
* an identifier resolving to the binding's own symbol, so a local declaration that
|
|
220
|
-
* shadows the name is not one. A string of a configuration file
|
|
221
|
-
* the manifest beside the file
|
|
191
|
+
* shadows the name is not one. A string of a configuration file, as the entry sources
|
|
192
|
+
* read them in `configuration`, uses each dependency the manifest beside the file
|
|
193
|
+
* declares that it spells.
|
|
222
194
|
*/
|
|
223
|
-
export function projectNeeds(project, held, host, targetRoot, parse) {
|
|
195
|
+
export function projectNeeds(project, held, host, targetRoot, parse, configuration, workflows) {
|
|
224
196
|
const programPackages = new Set();
|
|
225
197
|
for (const name of project.program.getSourceFileNames()) {
|
|
226
198
|
const named = packageOfPath(name);
|
|
@@ -271,7 +243,6 @@ export function projectNeeds(project, held, host, targetRoot, parse) {
|
|
|
271
243
|
return names;
|
|
272
244
|
};
|
|
273
245
|
const files = sourceFilesOf(project, targetRoot);
|
|
274
|
-
const configuration = configurationFiles(host, targetRoot, files, parse);
|
|
275
246
|
for (const { file, manifestDir } of configuration.modules) {
|
|
276
247
|
const names = declaredAt(joinPath(manifestDir, MANIFEST));
|
|
277
248
|
for (const { node, text } of moduleStrings(file)) {
|
|
@@ -280,16 +251,16 @@ export function projectNeeds(project, held, host, targetRoot, parse) {
|
|
|
280
251
|
}
|
|
281
252
|
for (const { strings, manifestDirs } of configuration.documents) {
|
|
282
253
|
for (const manifestDir of manifestDirs) {
|
|
283
|
-
const names = declaredAt(joinPath(manifestDir,
|
|
254
|
+
const names = declaredAt(joinPath(manifestDir, MANIFEST));
|
|
284
255
|
for (const text of strings) {
|
|
285
256
|
use([PROJECT_OWNER], dependenciesNamed(text, names), joinPath(manifestDir, MANIFEST));
|
|
286
257
|
}
|
|
287
258
|
}
|
|
288
259
|
}
|
|
289
|
-
const ranFiles = outsideChain(host, targetRoot, files, parse, scriptRunFiles(host, targetRoot, files));
|
|
260
|
+
const ranFiles = outsideChain(host, targetRoot, files, parse, scriptRunFiles(host, targetRoot, files, workflows));
|
|
290
261
|
for (const { file, manifestDirs } of [...configuration.outside, ...ranFiles]) {
|
|
291
262
|
for (const manifestDir of manifestDirs) {
|
|
292
|
-
const names = declaredAt(joinPath(manifestDir,
|
|
263
|
+
const names = declaredAt(joinPath(manifestDir, MANIFEST));
|
|
293
264
|
for (const { text } of moduleStrings(file)) {
|
|
294
265
|
use([PROJECT_OWNER], dependenciesNamed(text, names), joinPath(manifestDir, MANIFEST));
|
|
295
266
|
}
|
|
@@ -298,39 +269,40 @@ export function projectNeeds(project, held, host, targetRoot, parse) {
|
|
|
298
269
|
return { uses, at, unanswered };
|
|
299
270
|
}
|
|
300
271
|
/**
|
|
301
|
-
* The JavaScript files no program holds that a
|
|
302
|
-
* project's files runs, each with the directory of that manifest, and those a
|
|
303
|
-
* step or git hook
|
|
304
|
-
* target root and in no `node_modules
|
|
272
|
+
* The JavaScript files no program holds that a command string of a manifest at or above one of
|
|
273
|
+
* the project's files runs or names, each with the directory of that manifest, and those a
|
|
274
|
+
* workflow step or git hook names, with the target root's: a path `pathsNamed` reads, below the
|
|
275
|
+
* target root and in no `node_modules`.
|
|
305
276
|
*/
|
|
306
|
-
function scriptRunFiles(host, targetRoot, files) {
|
|
277
|
+
function scriptRunFiles(host, targetRoot, files, workflows) {
|
|
307
278
|
const root = resolvePath(host.workingDirectory(), targetRoot);
|
|
308
279
|
const dirs = new Set([root]);
|
|
309
280
|
for (const name of files.byName.keys()) {
|
|
310
|
-
for (
|
|
311
|
-
if (
|
|
281
|
+
for (const dir of ancestors(dirnamePath(name), root)) {
|
|
282
|
+
if (dirs.has(dir)) {
|
|
312
283
|
break;
|
|
313
284
|
}
|
|
314
285
|
dirs.add(dir);
|
|
315
286
|
}
|
|
316
287
|
}
|
|
317
|
-
const
|
|
318
|
-
[root,
|
|
288
|
+
const named = new Map([
|
|
289
|
+
[root, workflows.readings.flatMap(pathsNamed).map((one) => one.path)],
|
|
319
290
|
]);
|
|
320
291
|
for (const dir of dirs) {
|
|
321
|
-
const read =
|
|
292
|
+
const read = readDocument(host, joinPath(dir, MANIFEST));
|
|
322
293
|
if (read !== undefined && isRecord(read.value)) {
|
|
323
|
-
const own =
|
|
324
|
-
|
|
294
|
+
const own = manifestReadings(host, dir, read.value)
|
|
295
|
+
.flatMap(pathsNamed)
|
|
296
|
+
.map((one) => one.path);
|
|
297
|
+
named.set(dir, [...own, ...(named.get(dir) ?? [])]);
|
|
325
298
|
}
|
|
326
299
|
}
|
|
327
300
|
const found = [];
|
|
328
|
-
for (const [manifestDir,
|
|
329
|
-
for (const
|
|
330
|
-
const
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
below?.split("/").includes(MODULES_DIR) === false &&
|
|
301
|
+
for (const [manifestDir, paths] of named) {
|
|
302
|
+
for (const path of new Set(paths)) {
|
|
303
|
+
const below = SCRIPT_FILE.test(path) ? relativePath(root, path) : undefined;
|
|
304
|
+
if (below !== undefined &&
|
|
305
|
+
!inInstalledPackages(below) &&
|
|
334
306
|
!files.byName.has(path) &&
|
|
335
307
|
host.kindOf(path) === "file") {
|
|
336
308
|
found.push({ path, manifestDir });
|
|
@@ -339,6 +311,30 @@ function scriptRunFiles(host, targetRoot, files) {
|
|
|
339
311
|
}
|
|
340
312
|
return found;
|
|
341
313
|
}
|
|
314
|
+
/** What the command strings of one manifest, its scripts and nodemon's command, run. */
|
|
315
|
+
function manifestReadings(host, dir, manifest) {
|
|
316
|
+
return manifestCommands(host, dir, manifest).map(({ command }) => readCommands(command, dir));
|
|
317
|
+
}
|
|
318
|
+
/** What one manifest's command strings use, held with the whole text of nodemon's configuration. */
|
|
319
|
+
function manifestUses(host, dir, manifest) {
|
|
320
|
+
const uses = usesOf(manifestReadings(host, dir, manifest));
|
|
321
|
+
const texts = nodemonTexts(host, dir, manifest).map(({ text }) => text);
|
|
322
|
+
return { ...uses, held: [uses.held, ...texts].join("\n") };
|
|
323
|
+
}
|
|
324
|
+
/** What the target root's workflow steps, git hooks and recipes use, held with their files' whole text. */
|
|
325
|
+
function workflowUses(workflows) {
|
|
326
|
+
const uses = usesOf(workflows.readings);
|
|
327
|
+
return { ...uses, held: [uses.held, ...workflows.texts].join("\n") };
|
|
328
|
+
}
|
|
329
|
+
function usesOf(readings) {
|
|
330
|
+
return {
|
|
331
|
+
words: new Set(readings.flatMap((one) => one.commands.flatMap((command) => command.words.flatMap((word) => word ?? [])))),
|
|
332
|
+
preloads: new Set(readings
|
|
333
|
+
.flatMap((one) => one.runs.flatMap(preloadedPackages))
|
|
334
|
+
.flatMap((specifier) => packageOfSpecifier(specifier) ?? [])),
|
|
335
|
+
held: readings.map((one) => one.held).join("\n"),
|
|
336
|
+
};
|
|
337
|
+
}
|
|
342
338
|
/** The declarations of the inventory a use written at one node belongs to. */
|
|
343
339
|
function ownersOf(file, held, node) {
|
|
344
340
|
const parent = node.parent;
|
|
@@ -414,7 +410,16 @@ function fileNeeds(project, held, file, { programPackages, automatic }, use) {
|
|
|
414
410
|
if (names.size > 0 || automatic.globals.size > 0) {
|
|
415
411
|
visit(file);
|
|
416
412
|
}
|
|
417
|
-
const
|
|
413
|
+
const loads = runtimeLoads(file);
|
|
414
|
+
const callees = loads.flatMap((load) => load.callees);
|
|
415
|
+
const amdCallees = new Set(loads.flatMap((load) => (load.amd ? load.callees : [])));
|
|
416
|
+
const asked = [
|
|
417
|
+
...specifiers,
|
|
418
|
+
...bindings.map(({ node }) => node),
|
|
419
|
+
...candidates,
|
|
420
|
+
...globals,
|
|
421
|
+
...callees,
|
|
422
|
+
];
|
|
418
423
|
const handles = asked.map((node) => project.handle(node));
|
|
419
424
|
const resolved = project.symbolsAt(handles);
|
|
420
425
|
const packagesOf = new Map();
|
|
@@ -485,33 +490,80 @@ function fileNeeds(project, held, file, { programPackages, automatic }, use) {
|
|
|
485
490
|
for (const reference of file.typeReferenceDirectives) {
|
|
486
491
|
use(ownersOf(file, held, file), typePackages(reference.fileName, programPackages));
|
|
487
492
|
}
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
493
|
+
// A callee the checker leaves unanswered may be a require, so its call holds the
|
|
494
|
+
// dependency it names by live code, as program.33 holds one.
|
|
495
|
+
const calleesAt = unresolvedAt + globals.length;
|
|
496
|
+
const decided = new Map();
|
|
497
|
+
const requires = new Set();
|
|
498
|
+
const unansweredCallees = new Set();
|
|
499
|
+
callees.forEach((callee, index) => {
|
|
500
|
+
const symbol = resolved[calleesAt + index];
|
|
501
|
+
if (symbol === UNANSWERED) {
|
|
502
|
+
unansweredCallees.add(callee);
|
|
503
|
+
return;
|
|
504
|
+
}
|
|
505
|
+
// The decision reads the callee's symbol, its written name and its platform name, and nothing else.
|
|
506
|
+
const platform = amdCallees.has(callee) ? amdPlatform(callee) : "require";
|
|
507
|
+
const key = symbol === undefined ? undefined : `${symbol.id}\u0000${platform}\u0000${callee.text}`;
|
|
508
|
+
const answer = (key === undefined ? undefined : decided.get(key)) ??
|
|
509
|
+
callsPlatform(project, platform, callee, symbol);
|
|
510
|
+
if (key !== undefined) {
|
|
511
|
+
decided.set(key, answer);
|
|
512
|
+
}
|
|
513
|
+
if (answer) {
|
|
514
|
+
requires.add(callee);
|
|
515
|
+
}
|
|
516
|
+
});
|
|
517
|
+
for (const { specifier, named, callees: through } of loads) {
|
|
518
|
+
if (through.length === 0 || through.some((one) => requires.has(one))) {
|
|
491
519
|
use(ownersOf(file, held, specifier), [named]);
|
|
492
520
|
}
|
|
521
|
+
else if (through.some((one) => unansweredCallees.has(one))) {
|
|
522
|
+
use([PROJECT_OWNER], [named]);
|
|
523
|
+
}
|
|
493
524
|
}
|
|
494
525
|
return resolved.slice(0, specifiers.length).includes(UNANSWERED);
|
|
495
526
|
}
|
|
496
527
|
/**
|
|
497
|
-
* The
|
|
498
|
-
*
|
|
528
|
+
* The calls one file may load or resolve a package with at run time, each of whose first
|
|
529
|
+
* argument is literal text naming a package: a `require()` call, which the compiler lists among
|
|
530
|
+
* a file's imports only in a JavaScript file and only through the bare name; a `.resolve` of
|
|
531
|
+
* another name, which needs it where that name is a `require`; and `import.meta.resolve` or
|
|
532
|
+
* a `.resolve` of the name `require`, whatever it names, a use where it stands; and each id of
|
|
533
|
+
* an AMD dependency list (references-ts.37), which needs it where the call is AMD's.
|
|
499
534
|
*/
|
|
500
|
-
function
|
|
535
|
+
function runtimeLoads(file) {
|
|
501
536
|
const found = [];
|
|
502
|
-
if (!file.text.includes(".resolve(")) {
|
|
503
|
-
return found;
|
|
504
|
-
}
|
|
505
537
|
const visit = (node) => {
|
|
506
|
-
|
|
507
|
-
|
|
538
|
+
const amd = amdLoadOf(node);
|
|
539
|
+
if (amd !== undefined) {
|
|
540
|
+
for (const { id } of amd.ids) {
|
|
541
|
+
const named = packageOfSpecifier(id.text);
|
|
542
|
+
if (named !== undefined) {
|
|
543
|
+
found.push({ specifier: id, named, callees: [amd.callee], amd: true });
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
else if (isCallExpression(node)) {
|
|
508
548
|
const [argument] = node.arguments;
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
549
|
+
if (argument !== undefined && isLiteralText(argument)) {
|
|
550
|
+
const named = packageOfSpecifier(argument.text);
|
|
551
|
+
const callee = parenthesesRemoved(node.expression);
|
|
552
|
+
const receiver = isPropertyAccessExpression(callee) && callee.name.text === "resolve"
|
|
553
|
+
? parenthesesRemoved(callee.expression)
|
|
554
|
+
: undefined;
|
|
555
|
+
const stands = receiver !== undefined &&
|
|
556
|
+
((isMetaProperty(receiver) && receiver.name.text === "meta") ||
|
|
557
|
+
(isIdentifier(receiver) && receiver.text === "require"));
|
|
558
|
+
const callees = stands
|
|
559
|
+
? []
|
|
560
|
+
: [
|
|
561
|
+
writtenName(callee),
|
|
562
|
+
receiver === undefined ? undefined : writtenName(receiver),
|
|
563
|
+
].filter((one) => one !== undefined);
|
|
564
|
+
if (named !== undefined && (stands || callees.length > 0)) {
|
|
565
|
+
found.push({ specifier: argument, named, callees, amd: false });
|
|
566
|
+
}
|
|
515
567
|
}
|
|
516
568
|
}
|
|
517
569
|
node.forEachChild(visit);
|
|
@@ -600,8 +652,8 @@ function lineAndColumn(text, offset) {
|
|
|
600
652
|
}
|
|
601
653
|
/** The installed copy of one dependency, read where the package manager puts it for the target. */
|
|
602
654
|
function installedOf(host, root, name) {
|
|
603
|
-
for (
|
|
604
|
-
const read =
|
|
655
|
+
for (const dir of ancestors(root)) {
|
|
656
|
+
const read = readDocument(host, joinPath(dir, INSTALLED_PACKAGES, name, MANIFEST));
|
|
605
657
|
if (read !== undefined && isRecord(read.value)) {
|
|
606
658
|
const bin = read.value["bin"];
|
|
607
659
|
const peers = read.value["peerDependencies"];
|
|
@@ -617,10 +669,8 @@ function installedOf(host, root, name) {
|
|
|
617
669
|
: [],
|
|
618
670
|
};
|
|
619
671
|
}
|
|
620
|
-
if (dirnamePath(dir) === dir) {
|
|
621
|
-
return undefined;
|
|
622
|
-
}
|
|
623
672
|
}
|
|
673
|
+
return undefined;
|
|
624
674
|
}
|
|
625
675
|
/** Every dependency the manifest text at `path` declares, in the order the text writes them. */
|
|
626
676
|
function declaredIn(text, manifest, path, scope) {
|
|
@@ -651,19 +701,6 @@ function declaredIn(text, manifest, path, scope) {
|
|
|
651
701
|
export function declarationKey(dependency) {
|
|
652
702
|
return `${dependency.position.path}\u0000${dependency.name}`;
|
|
653
703
|
}
|
|
654
|
-
/** Every token of every value of one manifest's `scripts` member. */
|
|
655
|
-
function scriptTokensOf(manifest) {
|
|
656
|
-
const scripts = manifest["scripts"];
|
|
657
|
-
const found = new Set();
|
|
658
|
-
if (isRecord(scripts)) {
|
|
659
|
-
for (const command of Object.values(scripts)) {
|
|
660
|
-
if (typeof command === "string") {
|
|
661
|
-
scriptTokens(command).forEach((token) => found.add(token));
|
|
662
|
-
}
|
|
663
|
-
}
|
|
664
|
-
}
|
|
665
|
-
return found;
|
|
666
|
-
}
|
|
667
704
|
/** Whether a path below the target root lies in the directory `dir` below it, `""` being the root. */
|
|
668
705
|
function isInside(path, dir) {
|
|
669
706
|
return dir === "" || path.startsWith(`${dir}/`);
|
|
@@ -717,7 +754,7 @@ function addNeededPeers(declared, peers, needed, ran) {
|
|
|
717
754
|
* manifest declares nothing, nor does a nested package's uninstalled dependency, because
|
|
718
755
|
* no run requires a nested package to be installed.
|
|
719
756
|
*/
|
|
720
|
-
export function dependenciesOf(host, targetRoot, perProject, candidates, members = [], unbuiltMembers = [], nested = []) {
|
|
757
|
+
export function dependenciesOf(host, targetRoot, workflows, perProject, candidates, members = [], unbuiltMembers = [], nested = []) {
|
|
721
758
|
const root = resolvePath(host.workingDirectory(), targetRoot);
|
|
722
759
|
const scopeOf = packageScope(host, targetRoot);
|
|
723
760
|
const manifests = new Map([[root, MANIFEST]]);
|
|
@@ -734,29 +771,35 @@ export function dependenciesOf(host, targetRoot, perProject, candidates, members
|
|
|
734
771
|
unbuilt.add(path);
|
|
735
772
|
}
|
|
736
773
|
}
|
|
737
|
-
const workflow =
|
|
774
|
+
const workflow = workflowUses(workflows);
|
|
738
775
|
const declared = [];
|
|
739
776
|
const ran = new Set();
|
|
740
777
|
const peers = new Map();
|
|
741
778
|
const uninstalledHere = new Set(nested);
|
|
742
779
|
for (const [dir, path] of manifests) {
|
|
743
|
-
const read =
|
|
780
|
+
const read = readDocument(host, joinPath(dir, MANIFEST));
|
|
744
781
|
if (read === undefined || !isRecord(read.value)) {
|
|
745
782
|
continue;
|
|
746
783
|
}
|
|
747
|
-
const
|
|
784
|
+
const own = manifestUses(host, dir, read.value);
|
|
785
|
+
const held = `${own.held}\n${workflow.held}`;
|
|
748
786
|
for (const dependency of declaredIn(read.text, read.value, path, scopeOf(path))) {
|
|
749
787
|
const found = installedOf(host, dir, dependency.name);
|
|
750
788
|
if (found === undefined && uninstalledHere.has(dir)) {
|
|
751
789
|
continue;
|
|
752
790
|
}
|
|
753
791
|
declared.push(dependency);
|
|
792
|
+
if (own.preloads.has(dependency.name) ||
|
|
793
|
+
workflow.preloads.has(dependency.name) ||
|
|
794
|
+
heldNames(held, [dependency.name]).size > 0) {
|
|
795
|
+
ran.add(declarationKey(dependency));
|
|
796
|
+
}
|
|
754
797
|
if (found === undefined) {
|
|
755
798
|
continue;
|
|
756
799
|
}
|
|
757
800
|
peers.set(declarationKey(dependency), found.peers);
|
|
758
|
-
const runs = (command) =>
|
|
759
|
-
if (found.commands.some(runs)) {
|
|
801
|
+
const runs = (command) => own.words.has(command) || workflow.words.has(command);
|
|
802
|
+
if (found.commands.some(runs) || heldNames(held, found.commands).size > 0) {
|
|
760
803
|
ran.add(declarationKey(dependency));
|
|
761
804
|
}
|
|
762
805
|
}
|
|
@@ -812,7 +855,7 @@ export function dependenciesOf(host, targetRoot, perProject, candidates, members
|
|
|
812
855
|
const heldBy = new Map();
|
|
813
856
|
for (const [key, held] of holders) {
|
|
814
857
|
if (!live.has(key) && !ran.has(key)) {
|
|
815
|
-
heldBy.set(key, [...held].sort(
|
|
858
|
+
heldBy.set(key, [...held].sort(bytewise));
|
|
816
859
|
}
|
|
817
860
|
}
|
|
818
861
|
const users = new Map();
|
|
@@ -824,7 +867,7 @@ export function dependenciesOf(host, targetRoot, perProject, candidates, members
|
|
|
824
867
|
for (const id of candidates) {
|
|
825
868
|
const sole = [...(uses.get(id) ?? [])].filter((one) => users.get(one) === 1 && names.has(one));
|
|
826
869
|
if (sole.length > 0) {
|
|
827
|
-
lastUses.set(id, sole.sort(
|
|
870
|
+
lastUses.set(id, sole.sort(bytewise));
|
|
828
871
|
}
|
|
829
872
|
}
|
|
830
873
|
const owners = new Map();
|
|
@@ -836,7 +879,7 @@ export function dependenciesOf(host, targetRoot, perProject, candidates, members
|
|
|
836
879
|
}
|
|
837
880
|
}
|
|
838
881
|
const fileLastUses = new Map();
|
|
839
|
-
for (const [one, held] of [...owners].sort(([a], [b]) => (a
|
|
882
|
+
for (const [one, held] of [...owners].sort(([a], [b]) => bytewise(a, b))) {
|
|
840
883
|
const paths = new Set([...held].map((owner) => owner.replace(/:\d+:\d+$/u, "")));
|
|
841
884
|
const [path] = paths;
|
|
842
885
|
if (paths.size === 1 && path !== undefined && path !== PROJECT_OWNER) {
|
|
@@ -156,8 +156,6 @@ function sourceOf(target) {
|
|
|
156
156
|
export function destructuring(project, cap, properties = propertyTables(project.queries)) {
|
|
157
157
|
const queries = project.queries;
|
|
158
158
|
const tables = new Map();
|
|
159
|
-
let patternBatches = 0;
|
|
160
|
-
let patternLookups = 0;
|
|
161
159
|
const tableOf = (type) => {
|
|
162
160
|
const known = tables.get(type.id);
|
|
163
161
|
if (known !== undefined) {
|
|
@@ -166,7 +164,6 @@ export function destructuring(project, cap, properties = propertyTables(project.
|
|
|
166
164
|
let table = new Map();
|
|
167
165
|
if ((type.flags & TypeFlags.AnyOrUnknown) === 0) {
|
|
168
166
|
const read = properties.of(type);
|
|
169
|
-
patternLookups += read.asked ? 1 : 0;
|
|
170
167
|
table = isAnswered(read.properties)
|
|
171
168
|
? new Map(read.properties.map((property) => [property.name, property]))
|
|
172
169
|
: UNANSWERED;
|
|
@@ -178,7 +175,6 @@ export function destructuring(project, cap, properties = propertyTables(project.
|
|
|
178
175
|
if ((type.flags & TypeFlags.Union) === 0) {
|
|
179
176
|
return type;
|
|
180
177
|
}
|
|
181
|
-
patternLookups += 1;
|
|
182
178
|
return queries.nonNullable(type);
|
|
183
179
|
};
|
|
184
180
|
/**
|
|
@@ -193,11 +189,9 @@ export function destructuring(project, cap, properties = propertyTables(project.
|
|
|
193
189
|
if (index === undefined) {
|
|
194
190
|
return undefined;
|
|
195
191
|
}
|
|
196
|
-
patternLookups += 1;
|
|
197
192
|
const elements = queries.typeArguments(type);
|
|
198
193
|
return isAnswered(elements) ? elements[index] : UNANSWERED;
|
|
199
194
|
}
|
|
200
|
-
patternLookups += 1;
|
|
201
195
|
const array = queries.isArray(type);
|
|
202
196
|
if (!isAnswered(array)) {
|
|
203
197
|
return UNANSWERED;
|
|
@@ -205,7 +199,6 @@ export function destructuring(project, cap, properties = propertyTables(project.
|
|
|
205
199
|
if (!array) {
|
|
206
200
|
return undefined;
|
|
207
201
|
}
|
|
208
|
-
patternLookups += 1;
|
|
209
202
|
const elements = queries.typeArguments(type);
|
|
210
203
|
return isAnswered(elements) ? elements[0] : UNANSWERED;
|
|
211
204
|
};
|
|
@@ -222,14 +215,12 @@ export function destructuring(project, cap, properties = propertyTables(project.
|
|
|
222
215
|
if (more.length > 0) {
|
|
223
216
|
return UNANSWERED;
|
|
224
217
|
}
|
|
225
|
-
patternLookups += 1;
|
|
226
218
|
return queries.typeOfSymbol(property);
|
|
227
219
|
};
|
|
228
220
|
const resultOf = (callee) => {
|
|
229
221
|
if (callee === undefined || callee === UNANSWERED) {
|
|
230
222
|
return callee;
|
|
231
223
|
}
|
|
232
|
-
patternLookups += 1;
|
|
233
224
|
const signatures = queries.signaturesOf(callee, SignatureKind.Call);
|
|
234
225
|
if (!isAnswered(signatures)) {
|
|
235
226
|
return UNANSWERED;
|
|
@@ -238,7 +229,6 @@ export function destructuring(project, cap, properties = propertyTables(project.
|
|
|
238
229
|
if (signature === undefined) {
|
|
239
230
|
return undefined;
|
|
240
231
|
}
|
|
241
|
-
patternLookups += 1;
|
|
242
232
|
return queries.returnTypeOf(signature);
|
|
243
233
|
};
|
|
244
234
|
const iterations = new Map();
|
|
@@ -266,7 +256,6 @@ export function destructuring(project, cap, properties = propertyTables(project.
|
|
|
266
256
|
if (result !== undefined && result !== UNANSWERED) {
|
|
267
257
|
let parts = [result];
|
|
268
258
|
if (result.isUnionType()) {
|
|
269
|
-
patternLookups += 1;
|
|
270
259
|
parts = queries.constituents(result);
|
|
271
260
|
}
|
|
272
261
|
const values = isAnswered(parts)
|
|
@@ -296,7 +285,6 @@ export function destructuring(project, cap, properties = propertyTables(project.
|
|
|
296
285
|
if (property === undefined) {
|
|
297
286
|
return undefined;
|
|
298
287
|
}
|
|
299
|
-
patternLookups += 1;
|
|
300
288
|
return queries.typeOfSymbol(property);
|
|
301
289
|
}
|
|
302
290
|
return elementOf(defined, next.index);
|
|
@@ -317,7 +305,6 @@ export function destructuring(project, cap, properties = propertyTables(project.
|
|
|
317
305
|
}
|
|
318
306
|
}
|
|
319
307
|
const asked = [...asking];
|
|
320
|
-
patternBatches += Math.ceil(asked.length / cap);
|
|
321
308
|
const answered = new Map();
|
|
322
309
|
queries.typesAt(asked, cap).forEach((type, index) => {
|
|
323
310
|
const node = asked[index];
|
|
@@ -347,10 +334,5 @@ export function destructuring(project, cap, properties = propertyTables(project.
|
|
|
347
334
|
return isAnswered(table) ? table.get(read.name) : UNANSWERED;
|
|
348
335
|
});
|
|
349
336
|
};
|
|
350
|
-
return {
|
|
351
|
-
resolve,
|
|
352
|
-
get cost() {
|
|
353
|
-
return { patternBatches, patternLookups };
|
|
354
|
-
},
|
|
355
|
-
};
|
|
337
|
+
return { resolve };
|
|
356
338
|
}
|