@cplieger/deadset-ts 8.0.0-dev.2 → 8.0.0-dev.21
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 +35 -9
- package/dist/src/amd.js +81 -0
- package/dist/src/analysis.js +274 -496
- 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/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 +2 -2
- 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 +1370 -0
- package/dist/src/contract/report.generated.js +866 -0
- package/dist/src/dependencies.js +165 -122
- 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/exemptions/argument-places.js +131 -0
- package/dist/src/exemptions/calls.js +338 -0
- package/dist/src/exemptions/classes.js +13 -0
- package/dist/src/{decorator.js → exemptions/decorator.js} +19 -30
- package/dist/src/exemptions/detectors.js +48 -0
- package/dist/src/{enum-group.js → exemptions/enum-group.js} +9 -16
- package/dist/src/{erased-stores.js → exemptions/erased-stores.js} +7 -11
- package/dist/src/{framework-lifecycle.js → exemptions/framework-lifecycle.js} +76 -54
- package/dist/src/exemptions/generated-file.js +241 -0
- package/dist/src/{injection-container.js → exemptions/injection-container.js} +20 -26
- package/dist/src/exemptions/installed-globals.js +173 -0
- package/dist/src/{interface-satisfaction.js → exemptions/interface-satisfaction.js} +52 -121
- package/dist/src/exemptions/lifecycle.js +150 -0
- package/dist/src/{reflective-lookup.js → exemptions/reflective-lookup.js} +3 -3
- package/dist/src/exemptions/serialization-contract.js +1276 -0
- package/dist/src/exemptions/sites.js +182 -0
- package/dist/src/{template-field.js → exemptions/template-field.js} +13 -23
- package/dist/src/{value-reach.js → exemptions/value-reach.js} +14 -7
- 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/fs/document.js +52 -0
- package/dist/src/fs/manifest.js +67 -0
- package/dist/src/fs/tree.js +88 -0
- 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/values.js +124 -0
- package/dist/src/index.js +2 -2
- package/dist/src/indexed-access.js +523 -478
- 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 +95 -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/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/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 +30 -6
- 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 +40 -11
- package/src/amd.ts +130 -0
- package/src/analysis.ts +426 -733
- package/src/augmentations.ts +93 -4
- package/src/automatic-types.ts +12 -30
- package/src/bindings.ts +460 -0
- 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 +2 -2
- 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 +1453 -0
- package/src/contract/report.generated.ts +1241 -0
- package/src/dependencies.ts +223 -128
- 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/exemptions/argument-places.ts +198 -0
- package/src/exemptions/calls.ts +483 -0
- package/src/exemptions/classes.ts +49 -0
- package/src/exemptions/decorator.ts +56 -0
- package/src/exemptions/detectors.ts +75 -0
- package/src/{enum-group.ts → exemptions/enum-group.ts} +10 -19
- package/src/{erased-stores.ts → exemptions/erased-stores.ts} +7 -14
- package/src/{framework-lifecycle.ts → exemptions/framework-lifecycle.ts} +85 -66
- package/src/exemptions/generated-file.ts +318 -0
- package/src/{injection-container.ts → exemptions/injection-container.ts} +29 -34
- package/src/exemptions/installed-globals.ts +255 -0
- package/src/{interface-satisfaction.ts → exemptions/interface-satisfaction.ts} +69 -160
- package/src/exemptions/lifecycle.ts +286 -0
- package/src/{reflective-lookup.ts → exemptions/reflective-lookup.ts} +5 -5
- package/src/exemptions/serialization-contract.ts +1729 -0
- package/src/exemptions/sites.ts +293 -0
- package/src/{template-field.ts → exemptions/template-field.ts} +22 -32
- package/src/{value-reach.ts → exemptions/value-reach.ts} +16 -8
- 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/fs/document.ts +70 -0
- package/src/fs/manifest.ts +96 -0
- package/src/fs/tree.ts +110 -0
- 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/values.ts +170 -0
- package/src/index.ts +2 -2
- package/src/indexed-access.ts +570 -527
- 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 +201 -10
- 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} +26 -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/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/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 +36 -6
- 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/calls.js +0 -155
- 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/exempt-classes.js +0 -75
- package/dist/src/exempt.js +0 -209
- package/dist/src/generated-file.js +0 -95
- 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/serialization-contract.js +0 -611
- 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/value-flow.js +0 -74
- package/dist/src/version.js +0 -7
- package/dist/src/workflow-steps.js +0 -185
- package/src/base-url.ts +0 -24
- package/src/calls.ts +0 -225
- package/src/decorator.ts +0 -78
- package/src/discover.ts +0 -653
- package/src/entry-points.ts +0 -687
- package/src/exempt-classes.ts +0 -123
- package/src/exempt.ts +0 -323
- package/src/generated-file.ts +0 -111
- 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/serialization-contract.ts +0 -849
- package/src/setup-failure.ts +0 -39
- package/src/sweep.ts +0 -347
- package/src/test-joins.ts +0 -120
- package/src/value-flow.ts +0 -104
- package/src/version.ts +0 -7
- package/src/workflow-steps.ts +0 -216
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* of the module is the same position of the file. A default export and the imports a `src`
|
|
6
6
|
* attribute names are appended past the file's end.
|
|
7
7
|
*/
|
|
8
|
+
import { isPathRelativeURL, startsRelativePath } from "./paths.js";
|
|
8
9
|
const LANGUAGES = new Map([
|
|
9
10
|
["ts", "ts"],
|
|
10
11
|
["tsx", "tsx"],
|
|
@@ -346,10 +347,10 @@ function actionOf(text) {
|
|
|
346
347
|
/** Whether a `src` value names a file: no scheme, no root-relative path, not empty. */
|
|
347
348
|
function specifierOf(value) {
|
|
348
349
|
const trimmed = value.trim();
|
|
349
|
-
if (
|
|
350
|
+
if (!isPathRelativeURL(trimmed)) {
|
|
350
351
|
return undefined;
|
|
351
352
|
}
|
|
352
|
-
return
|
|
353
|
+
return startsRelativePath(trimmed) ? trimmed : `./${trimmed}`;
|
|
353
354
|
}
|
|
354
355
|
/** The line-start `<script` tags one block's content holds. */
|
|
355
356
|
function scriptsInside(text, from, to) {
|
|
@@ -5,9 +5,11 @@
|
|
|
5
5
|
* member wins over one it extends. The mapper resolves as a package linked into the
|
|
6
6
|
* `node_modules` beside each configuration, to a directory holding only its manifest.
|
|
7
7
|
*/
|
|
8
|
+
import { INSTALLED_PACKAGES } from "./fs/manifest.js";
|
|
8
9
|
import { dirnamePath, joinPath } from "./paths.js";
|
|
10
|
+
import { PRODUCT } from "./product.js";
|
|
9
11
|
/** The name the mapper's manifest declares and every configuration's entry names. */
|
|
10
|
-
const MAPPER_PACKAGE =
|
|
12
|
+
const MAPPER_PACKAGE = `${PRODUCT}-component-files`;
|
|
11
13
|
/** The manifest of the mapper's package, which runs `command`. */
|
|
12
14
|
export function mapperManifest(command) {
|
|
13
15
|
return `${JSON.stringify({
|
|
@@ -122,7 +124,7 @@ export function componentLayer(host, configFiles, mapper, written = new Map()) {
|
|
|
122
124
|
for (const configFile of configFiles) {
|
|
123
125
|
files[configFile] = withContentMappers(written.get(configFile) ?? host.readFile(configFile), mappers);
|
|
124
126
|
if (mapper !== undefined) {
|
|
125
|
-
symlinks[joinPath(dirnamePath(configFile),
|
|
127
|
+
symlinks[joinPath(dirnamePath(configFile), INSTALLED_PACKAGES, MAPPER_PACKAGE)] = {
|
|
126
128
|
target: mapper.packageDirectory,
|
|
127
129
|
host: true,
|
|
128
130
|
};
|
package/dist/src/config.js
CHANGED
|
@@ -1,74 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SEVERITIES } from "./contract/contract.generated.js";
|
|
2
|
+
import { LANGUAGE } from "./product.js";
|
|
2
3
|
/**
|
|
3
4
|
* The name of the repository configuration at the target root, which is also the
|
|
4
5
|
* document a finding about the configuration names where no document of the
|
|
5
6
|
* target supplied the setting it is about.
|
|
6
7
|
*/
|
|
7
8
|
export const REPOSITORY_DOCUMENT = "deadset.json";
|
|
8
|
-
/** The kind a target kind setting gives
|
|
9
|
-
export function kindOf(
|
|
10
|
-
return typeof
|
|
9
|
+
/** The kind a target kind setting gives this analyzer's declarations. */
|
|
10
|
+
export function kindOf(kind) {
|
|
11
|
+
return typeof kind === "string" ? kind : kind[LANGUAGE];
|
|
11
12
|
}
|
|
12
|
-
/** The severities ranked, the strongest highest. */
|
|
13
|
-
const SEVERITY_RANK = { allow: 0, warn: 1, deny: 2 };
|
|
14
13
|
/** Whether a finding at one severity fails a run under the failing severity. */
|
|
15
14
|
export function fails(severity, failOn) {
|
|
16
|
-
return
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* The configuration every documented default states. `targetKind` is empty: the
|
|
20
|
-
* field has no default and is never inferred.
|
|
21
|
-
*/
|
|
22
|
-
export function defaultConfig() {
|
|
23
|
-
return {
|
|
24
|
-
contractVersion: CONTRACT_VERSION,
|
|
25
|
-
targetKind: "",
|
|
26
|
-
analysis: {
|
|
27
|
-
languages: [],
|
|
28
|
-
minConfidence: "probable",
|
|
29
|
-
generatedFiles: "exclude",
|
|
30
|
-
consumerTests: "test",
|
|
31
|
-
configurations: [],
|
|
32
|
-
matrixComplete: false,
|
|
33
|
-
templateDirs: [],
|
|
34
|
-
templateDelimiters: { left: "{{", right: "}}" },
|
|
35
|
-
},
|
|
36
|
-
consumersComplete: false,
|
|
37
|
-
rootPatterns: [],
|
|
38
|
-
severity: new Map(),
|
|
39
|
-
exemptionsDisabled: [],
|
|
40
|
-
reporters: {
|
|
41
|
-
formats: ["text"],
|
|
42
|
-
sort: "position",
|
|
43
|
-
cascade: "roots",
|
|
44
|
-
maxFindings: 0,
|
|
45
|
-
failOn: "deny",
|
|
46
|
-
},
|
|
47
|
-
providers: {
|
|
48
|
-
analyzers: [
|
|
49
|
-
{ shape: "installed", name: "deadset-go", languages: ["go"], command: "deadset-go" },
|
|
50
|
-
{ shape: "installed", name: "deadset-ts", languages: ["ts"], command: "deadset-ts" },
|
|
51
|
-
],
|
|
52
|
-
},
|
|
53
|
-
ts: {
|
|
54
|
-
testFiles: [
|
|
55
|
-
"**/*.test.{ts,tsx,mts,cts}",
|
|
56
|
-
"**/*.test-d.{ts,tsx,mts,cts}",
|
|
57
|
-
"**/*.spec-d.{ts,tsx,mts,cts}",
|
|
58
|
-
"**/*.spec.*",
|
|
59
|
-
"**/__tests__/**",
|
|
60
|
-
"**/__mocks__/**",
|
|
61
|
-
"**/test-d/**",
|
|
62
|
-
],
|
|
63
|
-
entryFiles: [],
|
|
64
|
-
componentExtensions: [".vue", ".svelte", ".astro"],
|
|
65
|
-
disabledConventions: [],
|
|
66
|
-
injectionRegistrations: [],
|
|
67
|
-
lifecycleContracts: [],
|
|
68
|
-
serializers: [],
|
|
69
|
-
rootsComplete: false,
|
|
70
|
-
},
|
|
71
|
-
};
|
|
15
|
+
return SEVERITIES.indexOf(severity) >= SEVERITIES.indexOf(failOn);
|
|
72
16
|
}
|
|
73
17
|
/**
|
|
74
18
|
* Renders the origin as the provenance value the Contract declares: `default`,
|
|
@@ -77,23 +21,3 @@ export function defaultConfig() {
|
|
|
77
21
|
export function renderOrigin(origin) {
|
|
78
22
|
return origin.source === "default" ? "default" : `${origin.source}: ${origin.label}`;
|
|
79
23
|
}
|
|
80
|
-
/**
|
|
81
|
-
* Every refusal configuration resolution makes. Each maps to the usage exit
|
|
82
|
-
* code, and each is thrown rather than returned: a refusal ends the run, and the
|
|
83
|
-
* one caller that turns it into an exit code is the command line.
|
|
84
|
-
*/
|
|
85
|
-
export class ConfigError extends Error {
|
|
86
|
-
/** Which refusal this is. */
|
|
87
|
-
kind;
|
|
88
|
-
/**
|
|
89
|
-
* The key or field the message names, spelled as the document spells it. It is
|
|
90
|
-
* empty when the refusal names none.
|
|
91
|
-
*/
|
|
92
|
-
key;
|
|
93
|
-
constructor(kind, key, message) {
|
|
94
|
-
super(message);
|
|
95
|
-
this.name = "ConfigError";
|
|
96
|
-
this.kind = kind;
|
|
97
|
-
this.key = key;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
// Regenerate it with `UPDATE_GOLDEN=1 npx vitest --run src/conformance.corpus.test.ts`.
|
|
3
3
|
export const RECORD = {
|
|
4
4
|
conformance: {
|
|
5
|
-
corpusVersion: "6.
|
|
5
|
+
corpusVersion: "6.1.0",
|
|
6
6
|
result: "pass",
|
|
7
|
-
digest: "sha256:
|
|
7
|
+
digest: "sha256:352b870acbc05213d4869bc18611137d0782cc0c9a8379e7a998a3d9cea2d966",
|
|
8
8
|
},
|
|
9
9
|
gaps: [],
|
|
10
10
|
};
|
package/dist/src/consumers.js
CHANGED
|
@@ -1,49 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
* local filesystem whose compiler configurations open as projects of the run's one
|
|
4
|
-
* snapshot, and whose references to the target's declarations count against them.
|
|
5
|
-
*/
|
|
6
|
-
import { consumerProjects } from "./discover.js";
|
|
7
|
-
import { inventory, packageScope } from "./inventory.js";
|
|
1
|
+
import { runDirectories } from "./entries/run-directories.js";
|
|
2
|
+
import { inventory } from "./inventory/enumerate.js";
|
|
8
3
|
import { relativePath } from "./paths.js";
|
|
9
4
|
import { references } from "./references.js";
|
|
10
5
|
import { narrowedTo } from "./session.js";
|
|
11
|
-
|
|
12
|
-
export function moduleIdentity(host, module) {
|
|
13
|
-
return module.id === "" ? packageScope(host, module.path)("index.ts").package : module.id;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Every consumer the scope declares, in its order, with the projects it opens as. A
|
|
17
|
-
* configuration that is also one of the target's projects, or an earlier consumer's, is
|
|
18
|
-
* that project's alone. A consumer whose directory is absent, is no directory or holds
|
|
19
|
-
* no configuration ends the run naming it, before any project opens.
|
|
20
|
-
*/
|
|
21
|
-
export function consumerLoads(engine, host, scope, targetConfigFiles) {
|
|
22
|
-
const opened = new Set(targetConfigFiles);
|
|
23
|
-
return scope.consumers.map((module) => {
|
|
24
|
-
const configFiles = consumerProjects(engine, host, module.path).filter((configFile) => {
|
|
25
|
-
const fresh = !opened.has(configFile);
|
|
26
|
-
opened.add(configFile);
|
|
27
|
-
return fresh;
|
|
28
|
-
});
|
|
29
|
-
return { consumer: { id: moduleIdentity(host, module), path: module.path }, configFiles };
|
|
30
|
-
});
|
|
31
|
-
}
|
|
6
|
+
import { patternTestFile } from "./tests/file-class.js";
|
|
32
7
|
/**
|
|
33
8
|
* Every reference one consumer project's own files make to a declaration of the target.
|
|
34
9
|
* The target's declarations are enumerated over the target's files the consumer's
|
|
35
10
|
* program holds, against the target root, so each carries the identifier the target's
|
|
36
|
-
* own projects give it. A reference from a consumer's test file is a test reference
|
|
37
|
-
*
|
|
11
|
+
* own projects give it. A reference from a consumer's test file is a test reference;
|
|
12
|
+
* whether the run counts it as a production one is the sweep's mode.
|
|
38
13
|
*/
|
|
39
|
-
export function consumerReferences(project, host, targetRoot, consumer, config) {
|
|
14
|
+
export function consumerReferences(project, host, targetRoot, consumer, config, parse) {
|
|
40
15
|
const held = inventory(narrowedTo(project, (file) => relativePath(targetRoot, file.fileName) !== undefined), host, targetRoot);
|
|
41
|
-
|
|
42
|
-
|
|
16
|
+
return references(project, held, targetRoot, {
|
|
17
|
+
testFile: patternTestFile(config.ts.test_files, consumer.root),
|
|
43
18
|
consumer,
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
return found;
|
|
47
|
-
}
|
|
48
|
-
return found.map((reference) => (reference.test ? { ...reference, test: false } : reference));
|
|
19
|
+
directories: runDirectories(host, consumer.root, parse),
|
|
20
|
+
});
|
|
49
21
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The uses contextual types make of the target's members, which no name node resolves to.
|
|
3
3
|
* An object-literal property writes the member of its name on each constituent of the
|
|
4
|
-
* literal's contextual type that declares one
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* the
|
|
4
|
+
* literal's contextual type that declares one, and so does a property of a literal whose
|
|
5
|
+
* type is inferred, where a value of that type reaches such a position. A value reaching a
|
|
6
|
+
* position typed by another object type reads each of its members that type declares,
|
|
7
|
+
* through array elements and the parameters and results of functions and constructors
|
|
8
|
+
* too; a class instance there is the interface-satisfaction class's evidence instead.
|
|
8
9
|
*/
|
|
9
10
|
import { isClassDeclaration, isClassExpression, isComputedPropertyName, isGetAccessorDeclaration, isIdentifier, isMethodDeclaration, isMethodSignatureDeclaration, isNoSubstitutionTemplateLiteral, isNumericLiteral, isObjectLiteralExpression, isPropertyAssignment, isSetAccessorDeclaration, isShorthandPropertyAssignment, isSpreadAssignment, isStringLiteral, } from "@typescript/native/ast";
|
|
10
11
|
import { SignatureKind } from "@typescript/native/sync";
|
|
@@ -62,9 +63,6 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
|
|
|
62
63
|
const privateNames = new Set(held.symbols
|
|
63
64
|
.filter((symbol) => symbol.visibility === "private-name")
|
|
64
65
|
.map((symbol) => symbol.id));
|
|
65
|
-
let batches = 0;
|
|
66
|
-
let lookups = 0;
|
|
67
|
-
const batchesOf = (count) => Math.ceil(count / cap);
|
|
68
66
|
const parts = new Map();
|
|
69
67
|
/** The object types one type is: itself, or its constituents at any depth. */
|
|
70
68
|
const partsOf = (type) => {
|
|
@@ -74,7 +72,6 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
|
|
|
74
72
|
}
|
|
75
73
|
let found = [];
|
|
76
74
|
if (type.isUnionType() || type.isIntersectionType()) {
|
|
77
|
-
lookups += 1;
|
|
78
75
|
const constituents = queries.constituents(type);
|
|
79
76
|
found = isAnswered(constituents) ? constituents.flatMap(partsOf) : [];
|
|
80
77
|
}
|
|
@@ -93,7 +90,6 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
|
|
|
93
90
|
}
|
|
94
91
|
const table = new Map();
|
|
95
92
|
const read = properties.of(type);
|
|
96
|
-
lookups += read.asked ? 1 : 0;
|
|
97
93
|
for (const property of isAnswered(read.properties) ? read.properties : []) {
|
|
98
94
|
table.set(property.name, {
|
|
99
95
|
ids: chains
|
|
@@ -111,7 +107,6 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
|
|
|
111
107
|
return table;
|
|
112
108
|
};
|
|
113
109
|
const writes = [];
|
|
114
|
-
batches += batchesOf(literals.length);
|
|
115
110
|
const contexts = queries.contextualTypes(literals.map((one) => one.literal), cap);
|
|
116
111
|
// A computed name that is not literal text names the property the literal declares
|
|
117
112
|
// under the checker's own key, which is how a type declares a member a unique symbol
|
|
@@ -122,7 +117,6 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
|
|
|
122
117
|
const name = propertyName(property);
|
|
123
118
|
return name !== undefined && name.text === undefined ? [name.node] : [];
|
|
124
119
|
}));
|
|
125
|
-
batches += batchesOf(computed.length);
|
|
126
120
|
const keys = new Map();
|
|
127
121
|
(computed.length === 0
|
|
128
122
|
? []
|
|
@@ -151,7 +145,6 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
|
|
|
151
145
|
}
|
|
152
146
|
});
|
|
153
147
|
const carried = flows.filter((flow) => !isObjectLiteralExpression(flow.value));
|
|
154
|
-
batches += batchesOf(carried.length);
|
|
155
148
|
const types = queries.typesAt(carried.map((flow) => flow.value), cap);
|
|
156
149
|
/** The members a position may read structurally: those of object types, not of classes. */
|
|
157
150
|
const readable = (member) => [
|
|
@@ -164,17 +157,42 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
|
|
|
164
157
|
const members = [...membersOf(part).values()];
|
|
165
158
|
return members.length > 0 && members.every((member) => !member.own);
|
|
166
159
|
};
|
|
160
|
+
const literalTypes = new Map();
|
|
161
|
+
/**
|
|
162
|
+
* Whether an object type is an object literal's own, inferred where no contextual type
|
|
163
|
+
* names it: every member a property an object literal of the target writes.
|
|
164
|
+
*/
|
|
165
|
+
const literalTyped = (part) => {
|
|
166
|
+
let known = literalTypes.get(part.id);
|
|
167
|
+
if (known === undefined) {
|
|
168
|
+
const members = [...membersOf(part).values()];
|
|
169
|
+
known =
|
|
170
|
+
members.length > 0 &&
|
|
171
|
+
members.every((member) => member.ids.length === 0 &&
|
|
172
|
+
member.declarations.length > 0 &&
|
|
173
|
+
member.declarations.every((handle) => literalProperty(handle) !== undefined));
|
|
174
|
+
literalTypes.set(part.id, known);
|
|
175
|
+
}
|
|
176
|
+
return known;
|
|
177
|
+
};
|
|
178
|
+
/** The name node of the object literal property one declaration handle names, if it is one. */
|
|
179
|
+
const literalProperty = (handle) => {
|
|
180
|
+
const node = project.declarationAt(handle)?.node;
|
|
181
|
+
return node !== undefined &&
|
|
182
|
+
(isPropertyAssignment(node) || isShorthandPropertyAssignment(node)) &&
|
|
183
|
+
isObjectLiteralExpression(node.parent)
|
|
184
|
+
? node.name
|
|
185
|
+
: undefined;
|
|
186
|
+
};
|
|
167
187
|
const elements = new Map();
|
|
168
188
|
/** The element type of an array type, read once per type. */
|
|
169
189
|
const elementOf = (type) => {
|
|
170
190
|
if (elements.has(type.id)) {
|
|
171
191
|
return elements.get(type.id);
|
|
172
192
|
}
|
|
173
|
-
lookups += 1;
|
|
174
193
|
const isArray = queries.isArray(type);
|
|
175
194
|
let element;
|
|
176
195
|
if (isAnswered(isArray) && isArray) {
|
|
177
|
-
lookups += 1;
|
|
178
196
|
const held = queries.typeArguments(type);
|
|
179
197
|
element = isAnswered(held) ? held[0] : undefined;
|
|
180
198
|
}
|
|
@@ -188,7 +206,6 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
|
|
|
188
206
|
if (known !== undefined) {
|
|
189
207
|
return known;
|
|
190
208
|
}
|
|
191
|
-
lookups += type.isTypeReference() ? 1 : 0;
|
|
192
209
|
const held = queries.typeArguments(type);
|
|
193
210
|
const found = isAnswered(held) ? held : [];
|
|
194
211
|
argumentsOf.set(type.id, found);
|
|
@@ -204,18 +221,15 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
|
|
|
204
221
|
if (known !== undefined) {
|
|
205
222
|
return known;
|
|
206
223
|
}
|
|
207
|
-
lookups += 1;
|
|
208
224
|
let kind = SignatureKind.Call;
|
|
209
225
|
let signatures = queries.signaturesOf(type, kind);
|
|
210
226
|
if (isAnswered(signatures) && signatures.length === 0) {
|
|
211
|
-
lookups += 1;
|
|
212
227
|
kind = SignatureKind.Construct;
|
|
213
228
|
signatures = queries.signaturesOf(type, kind);
|
|
214
229
|
}
|
|
215
230
|
const called = (isAnswered(signatures) ? signatures : []).map((signature) => {
|
|
216
231
|
const parameters = signature.parameters.map((_parameter, index) => queries.parameterType(signature, index));
|
|
217
232
|
const result = queries.returnTypeOf(signature);
|
|
218
|
-
lookups += parameters.length + 1;
|
|
219
233
|
return {
|
|
220
234
|
kind,
|
|
221
235
|
parameters: parameters.map((one) => (isAnswered(one) ? one : undefined)),
|
|
@@ -246,10 +260,13 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
|
|
|
246
260
|
const sources = partsOf(source).filter((one) => !targets.some((part) => part.id === one.id));
|
|
247
261
|
for (const one of sources) {
|
|
248
262
|
if (carries(one)) {
|
|
249
|
-
into.push({ source: one, targets,
|
|
263
|
+
into.push({ source: one, targets, sourceKind: "members" });
|
|
250
264
|
}
|
|
251
265
|
else if (outside(one)) {
|
|
252
|
-
into.push({ source: one, targets,
|
|
266
|
+
into.push({ source: one, targets, sourceKind: "outside" });
|
|
267
|
+
}
|
|
268
|
+
else if (literalTyped(one)) {
|
|
269
|
+
into.push({ source: one, targets, sourceKind: "literal" });
|
|
253
270
|
}
|
|
254
271
|
const element = elementOf(one);
|
|
255
272
|
const called = element === undefined ? callsOf(one) : [];
|
|
@@ -290,7 +307,7 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
|
|
|
290
307
|
}
|
|
291
308
|
seen.add(type.id);
|
|
292
309
|
return partsOf(type).some((part) => {
|
|
293
|
-
if (carries(part) || outside(part)) {
|
|
310
|
+
if (carries(part) || outside(part) || literalTyped(part)) {
|
|
294
311
|
return true;
|
|
295
312
|
}
|
|
296
313
|
const element = elementOf(part);
|
|
@@ -304,9 +321,10 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
|
|
|
304
321
|
const type = types[index];
|
|
305
322
|
return type === undefined || !isAnswered(type) || !mayCarry(type) ? [] : [{ flow, type }];
|
|
306
323
|
});
|
|
307
|
-
batches += batchesOf(sourced.length);
|
|
308
324
|
const positions = queries.contextualTypes(sourced.map((one) => one.flow.value), cap);
|
|
309
325
|
const reads = [];
|
|
326
|
+
// A literal property writes a position's members once, however many values carry it there.
|
|
327
|
+
const carriedWrites = new Set();
|
|
310
328
|
sourced.forEach(({ flow, type }, index) => {
|
|
311
329
|
const position = positions[index];
|
|
312
330
|
if (position === undefined || !isAnswered(position)) {
|
|
@@ -315,10 +333,24 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
|
|
|
315
333
|
const checked = [];
|
|
316
334
|
compared(type, position, checked, new Set());
|
|
317
335
|
const ids = new Set();
|
|
318
|
-
for (const { source, targets,
|
|
336
|
+
for (const { source, targets, sourceKind } of checked) {
|
|
319
337
|
const tables = targets.map(membersOf);
|
|
320
338
|
const sourceMembers = membersOf(source);
|
|
321
|
-
if (
|
|
339
|
+
if (sourceKind === "literal") {
|
|
340
|
+
for (const [name, member] of sourceMembers) {
|
|
341
|
+
const written = [...new Set(tables.flatMap((table) => table.get(name)?.ids ?? []))];
|
|
342
|
+
for (const at of written.length === 0 ? [] : member.declarations) {
|
|
343
|
+
const node = literalProperty(at);
|
|
344
|
+
const key = `${at.path}#${String(at.index)}>${written.join(",")}`;
|
|
345
|
+
if (node !== undefined && !carriedWrites.has(key)) {
|
|
346
|
+
carriedWrites.add(key);
|
|
347
|
+
writes.push({ at: node, from: flow.from, ids: written });
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
continue;
|
|
352
|
+
}
|
|
353
|
+
if (sourceKind === "outside") {
|
|
322
354
|
for (const table of tables) {
|
|
323
355
|
for (const [name, member] of table) {
|
|
324
356
|
if (sourceMembers.has(name)) {
|
|
@@ -361,7 +393,6 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
|
|
|
361
393
|
return known;
|
|
362
394
|
};
|
|
363
395
|
const spreads = literals.flatMap(({ literal, from }) => literal.properties.flatMap((property) => isSpreadAssignment(property) ? [{ value: property.expression, from }] : []));
|
|
364
|
-
batches += batchesOf(spreads.length);
|
|
365
396
|
const spreadTypes = queries.typesAt(spreads.map((one) => one.value), cap);
|
|
366
397
|
spreads.forEach(({ value, from }, index) => {
|
|
367
398
|
const type = spreadTypes[index];
|
|
@@ -379,5 +410,5 @@ export function contextualUses(project, held, chains, literals, flows, cap, prop
|
|
|
379
410
|
reads.push({ at: value, from, ids });
|
|
380
411
|
}
|
|
381
412
|
});
|
|
382
|
-
return { writes, reads
|
|
413
|
+
return { writes, reads };
|
|
383
414
|
}
|