@descryy/core 0.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/dist/capabilities/index.d.ts +3 -0
- package/dist/capabilities/index.d.ts.map +1 -0
- package/dist/capabilities/index.js +2 -0
- package/dist/capabilities/index.js.map +1 -0
- package/dist/capabilities/preconditions.d.ts +99 -0
- package/dist/capabilities/preconditions.d.ts.map +1 -0
- package/dist/capabilities/preconditions.js +94 -0
- package/dist/capabilities/preconditions.js.map +1 -0
- package/dist/contracts/engine.d.ts +90 -0
- package/dist/contracts/engine.d.ts.map +1 -0
- package/dist/contracts/engine.js +291 -0
- package/dist/contracts/engine.js.map +1 -0
- package/dist/contracts/index.d.ts +9 -0
- package/dist/contracts/index.d.ts.map +1 -0
- package/dist/contracts/index.js +5 -0
- package/dist/contracts/index.js.map +1 -0
- package/dist/contracts/orphans.d.ts +96 -0
- package/dist/contracts/orphans.d.ts.map +1 -0
- package/dist/contracts/orphans.js +241 -0
- package/dist/contracts/orphans.js.map +1 -0
- package/dist/contracts/paths.d.ts +132 -0
- package/dist/contracts/paths.d.ts.map +1 -0
- package/dist/contracts/paths.js +245 -0
- package/dist/contracts/paths.js.map +1 -0
- package/dist/contracts/shapes.d.ts +99 -0
- package/dist/contracts/shapes.d.ts.map +1 -0
- package/dist/contracts/shapes.js +196 -0
- package/dist/contracts/shapes.js.map +1 -0
- package/dist/governance/budget.d.ts +89 -0
- package/dist/governance/budget.d.ts.map +1 -0
- package/dist/governance/budget.js +101 -0
- package/dist/governance/budget.js.map +1 -0
- package/dist/governance/candidate-boundary.d.ts +49 -0
- package/dist/governance/candidate-boundary.d.ts.map +1 -0
- package/dist/governance/candidate-boundary.js +51 -0
- package/dist/governance/candidate-boundary.js.map +1 -0
- package/dist/governance/escalation.d.ts +63 -0
- package/dist/governance/escalation.d.ts.map +1 -0
- package/dist/governance/escalation.js +72 -0
- package/dist/governance/escalation.js.map +1 -0
- package/dist/governance/fact-boundary.d.ts +77 -0
- package/dist/governance/fact-boundary.d.ts.map +1 -0
- package/dist/governance/fact-boundary.js +91 -0
- package/dist/governance/fact-boundary.js.map +1 -0
- package/dist/governance/finding-funnel.d.ts +109 -0
- package/dist/governance/finding-funnel.d.ts.map +1 -0
- package/dist/governance/finding-funnel.js +137 -0
- package/dist/governance/finding-funnel.js.map +1 -0
- package/dist/governance/index.d.ts +11 -0
- package/dist/governance/index.d.ts.map +1 -0
- package/dist/governance/index.js +6 -0
- package/dist/governance/index.js.map +1 -0
- package/dist/graph/build.d.ts +127 -0
- package/dist/graph/build.d.ts.map +1 -0
- package/dist/graph/build.js +0 -0
- package/dist/graph/build.js.map +1 -0
- package/dist/graph/cross-language.d.ts +70 -0
- package/dist/graph/cross-language.d.ts.map +1 -0
- package/dist/graph/cross-language.js +104 -0
- package/dist/graph/cross-language.js.map +1 -0
- package/dist/graph/index.d.ts +11 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +6 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/merge.d.ts +95 -0
- package/dist/graph/merge.d.ts.map +1 -0
- package/dist/graph/merge.js +131 -0
- package/dist/graph/merge.js.map +1 -0
- package/dist/graph/persist.d.ts +42 -0
- package/dist/graph/persist.d.ts.map +1 -0
- package/dist/graph/persist.js +52 -0
- package/dist/graph/persist.js.map +1 -0
- package/dist/graph/runtime-confirmation.d.ts +169 -0
- package/dist/graph/runtime-confirmation.d.ts.map +1 -0
- package/dist/graph/runtime-confirmation.js +318 -0
- package/dist/graph/runtime-confirmation.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/ledger/index.d.ts +5 -0
- package/dist/ledger/index.d.ts.map +1 -0
- package/dist/ledger/index.js +3 -0
- package/dist/ledger/index.js.map +1 -0
- package/dist/ledger/mint.d.ts +81 -0
- package/dist/ledger/mint.d.ts.map +1 -0
- package/dist/ledger/mint.js +138 -0
- package/dist/ledger/mint.js.map +1 -0
- package/dist/ledger/resolve.d.ts +124 -0
- package/dist/ledger/resolve.d.ts.map +1 -0
- package/dist/ledger/resolve.js +290 -0
- package/dist/ledger/resolve.js.map +1 -0
- package/dist/multipr/fingerprint.d.ts +56 -0
- package/dist/multipr/fingerprint.d.ts.map +1 -0
- package/dist/multipr/fingerprint.js +169 -0
- package/dist/multipr/fingerprint.js.map +1 -0
- package/dist/multipr/hidden-dependency.d.ts +120 -0
- package/dist/multipr/hidden-dependency.d.ts.map +1 -0
- package/dist/multipr/hidden-dependency.js +185 -0
- package/dist/multipr/hidden-dependency.js.map +1 -0
- package/dist/multipr/index.d.ts +14 -0
- package/dist/multipr/index.d.ts.map +1 -0
- package/dist/multipr/index.js +8 -0
- package/dist/multipr/index.js.map +1 -0
- package/dist/multipr/mechanical.d.ts +239 -0
- package/dist/multipr/mechanical.d.ts.map +1 -0
- package/dist/multipr/mechanical.js +333 -0
- package/dist/multipr/mechanical.js.map +1 -0
- package/dist/multipr/migration-heads.d.ts +160 -0
- package/dist/multipr/migration-heads.d.ts.map +1 -0
- package/dist/multipr/migration-heads.js +212 -0
- package/dist/multipr/migration-heads.js.map +1 -0
- package/dist/multipr/overlap.d.ts +186 -0
- package/dist/multipr/overlap.d.ts.map +1 -0
- package/dist/multipr/overlap.js +254 -0
- package/dist/multipr/overlap.js.map +1 -0
- package/dist/multipr/scope-store.d.ts +105 -0
- package/dist/multipr/scope-store.d.ts.map +1 -0
- package/dist/multipr/scope-store.js +182 -0
- package/dist/multipr/scope-store.js.map +1 -0
- package/dist/multipr/superseded.d.ts +133 -0
- package/dist/multipr/superseded.d.ts.map +1 -0
- package/dist/multipr/superseded.js +128 -0
- package/dist/multipr/superseded.js.map +1 -0
- package/dist/query/confirmed-facts.d.ts +56 -0
- package/dist/query/confirmed-facts.d.ts.map +1 -0
- package/dist/query/confirmed-facts.js +64 -0
- package/dist/query/confirmed-facts.js.map +1 -0
- package/dist/query/declared-value-closure.d.ts +126 -0
- package/dist/query/declared-value-closure.d.ts.map +1 -0
- package/dist/query/declared-value-closure.js +156 -0
- package/dist/query/declared-value-closure.js.map +1 -0
- package/dist/query/index.d.ts +28 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +15 -0
- package/dist/query/index.js.map +1 -0
- package/dist/query/memory.d.ts +20 -0
- package/dist/query/memory.d.ts.map +1 -0
- package/dist/query/memory.js +55 -0
- package/dist/query/memory.js.map +1 -0
- package/dist/query/provider.d.ts +127 -0
- package/dist/query/provider.d.ts.map +1 -0
- package/dist/query/provider.js +54 -0
- package/dist/query/provider.js.map +1 -0
- package/dist/query/queries.d.ts +119 -0
- package/dist/query/queries.d.ts.map +1 -0
- package/dist/query/queries.js +267 -0
- package/dist/query/queries.js.map +1 -0
- package/dist/query/refusal-fetch.d.ts +114 -0
- package/dist/query/refusal-fetch.d.ts.map +1 -0
- package/dist/query/refusal-fetch.js +200 -0
- package/dist/query/refusal-fetch.js.map +1 -0
- package/dist/query/refusal-questions.d.ts +123 -0
- package/dist/query/refusal-questions.d.ts.map +1 -0
- package/dist/query/refusal-questions.js +122 -0
- package/dist/query/refusal-questions.js.map +1 -0
- package/dist/query/root-cause-score.d.ts +218 -0
- package/dist/query/root-cause-score.d.ts.map +1 -0
- package/dist/query/root-cause-score.js +251 -0
- package/dist/query/root-cause-score.js.map +1 -0
- package/dist/query/row-closure-picture.d.ts +108 -0
- package/dist/query/row-closure-picture.d.ts.map +1 -0
- package/dist/query/row-closure-picture.js +131 -0
- package/dist/query/row-closure-picture.js.map +1 -0
- package/dist/query/similar-incidents.d.ts +76 -0
- package/dist/query/similar-incidents.d.ts.map +1 -0
- package/dist/query/similar-incidents.js +169 -0
- package/dist/query/similar-incidents.js.map +1 -0
- package/dist/query/sqlite.d.ts +13 -0
- package/dist/query/sqlite.d.ts.map +1 -0
- package/dist/query/sqlite.js +54 -0
- package/dist/query/sqlite.js.map +1 -0
- package/dist/query/traverse.d.ts +110 -0
- package/dist/query/traverse.d.ts.map +1 -0
- package/dist/query/traverse.js +0 -0
- package/dist/query/traverse.js.map +1 -0
- package/dist/query/unresolved.d.ts +195 -0
- package/dist/query/unresolved.d.ts.map +1 -0
- package/dist/query/unresolved.js +225 -0
- package/dist/query/unresolved.js.map +1 -0
- package/dist/query/verification-status.d.ts +134 -0
- package/dist/query/verification-status.d.ts.map +1 -0
- package/dist/query/verification-status.js +163 -0
- package/dist/query/verification-status.js.map +1 -0
- package/dist/recording/index.d.ts +26 -0
- package/dist/recording/index.d.ts.map +1 -0
- package/dist/recording/index.js +30 -0
- package/dist/recording/index.js.map +1 -0
- package/dist/recording/migrate.d.ts +22 -0
- package/dist/recording/migrate.d.ts.map +1 -0
- package/dist/recording/migrate.js +51 -0
- package/dist/recording/migrate.js.map +1 -0
- package/dist/recording/reader.d.ts +27 -0
- package/dist/recording/reader.d.ts.map +1 -0
- package/dist/recording/reader.js +55 -0
- package/dist/recording/reader.js.map +1 -0
- package/dist/recording/redact.d.ts +63 -0
- package/dist/recording/redact.d.ts.map +1 -0
- package/dist/recording/redact.js +98 -0
- package/dist/recording/redact.js.map +1 -0
- package/dist/recording/schema.d.ts +41 -0
- package/dist/recording/schema.d.ts.map +1 -0
- package/dist/recording/schema.js +104 -0
- package/dist/recording/schema.js.map +1 -0
- package/dist/recording/writer.d.ts +120 -0
- package/dist/recording/writer.d.ts.map +1 -0
- package/dist/recording/writer.js +81 -0
- package/dist/recording/writer.js.map +1 -0
- package/dist/scoping/fanout.d.ts +86 -0
- package/dist/scoping/fanout.d.ts.map +1 -0
- package/dist/scoping/fanout.js +95 -0
- package/dist/scoping/fanout.js.map +1 -0
- package/dist/scoping/index.d.ts +10 -0
- package/dist/scoping/index.d.ts.map +1 -0
- package/dist/scoping/index.js +6 -0
- package/dist/scoping/index.js.map +1 -0
- package/dist/scoping/score.d.ts +83 -0
- package/dist/scoping/score.d.ts.map +1 -0
- package/dist/scoping/score.js +125 -0
- package/dist/scoping/score.js.map +1 -0
- package/dist/scoping/tiers.d.ts +32 -0
- package/dist/scoping/tiers.d.ts.map +1 -0
- package/dist/scoping/tiers.js +35 -0
- package/dist/scoping/tiers.js.map +1 -0
- package/dist/scoping/traverse.d.ts +60 -0
- package/dist/scoping/traverse.d.ts.map +1 -0
- package/dist/scoping/traverse.js +172 -0
- package/dist/scoping/traverse.js.map +1 -0
- package/dist/scoping/weights.d.ts +97 -0
- package/dist/scoping/weights.d.ts.map +1 -0
- package/dist/scoping/weights.js +167 -0
- package/dist/scoping/weights.js.map +1 -0
- package/dist/sources/git/diff.d.ts +53 -0
- package/dist/sources/git/diff.d.ts.map +1 -0
- package/dist/sources/git/diff.js +140 -0
- package/dist/sources/git/diff.js.map +1 -0
- package/dist/sources/git/env.d.ts +2 -0
- package/dist/sources/git/env.d.ts.map +1 -0
- package/dist/sources/git/env.js +21 -0
- package/dist/sources/git/env.js.map +1 -0
- package/dist/sources/git/history.d.ts +140 -0
- package/dist/sources/git/history.d.ts.map +1 -0
- package/dist/sources/git/history.js +314 -0
- package/dist/sources/git/history.js.map +1 -0
- package/dist/sources/git/index.d.ts +7 -0
- package/dist/sources/git/index.d.ts.map +1 -0
- package/dist/sources/git/index.js +4 -0
- package/dist/sources/git/index.js.map +1 -0
- package/dist/sources/git/source.d.ts +95 -0
- package/dist/sources/git/source.d.ts.map +1 -0
- package/dist/sources/git/source.js +0 -0
- package/dist/sources/git/source.js.map +1 -0
- package/dist/sources/migrations/dialects.d.ts +59 -0
- package/dist/sources/migrations/dialects.d.ts.map +1 -0
- package/dist/sources/migrations/dialects.js +84 -0
- package/dist/sources/migrations/dialects.js.map +1 -0
- package/dist/sources/migrations/index.d.ts +3 -0
- package/dist/sources/migrations/index.d.ts.map +1 -0
- package/dist/sources/migrations/index.js +2 -0
- package/dist/sources/migrations/index.js.map +1 -0
- package/dist/sources/migrations/read.d.ts +113 -0
- package/dist/sources/migrations/read.d.ts.map +1 -0
- package/dist/sources/migrations/read.js +270 -0
- package/dist/sources/migrations/read.js.map +1 -0
- package/dist/sources/workspace/index.d.ts +3 -0
- package/dist/sources/workspace/index.d.ts.map +1 -0
- package/dist/sources/workspace/index.js +2 -0
- package/dist/sources/workspace/index.js.map +1 -0
- package/dist/sources/workspace/workspace.d.ts +64 -0
- package/dist/sources/workspace/workspace.d.ts.map +1 -0
- package/dist/sources/workspace/workspace.js +294 -0
- package/dist/sources/workspace/workspace.js.map +1 -0
- package/dist/store/driver/driver.d.ts +82 -0
- package/dist/store/driver/driver.d.ts.map +1 -0
- package/dist/store/driver/driver.js +31 -0
- package/dist/store/driver/driver.js.map +1 -0
- package/dist/store/driver/node-sqlite.d.ts +28 -0
- package/dist/store/driver/node-sqlite.d.ts.map +1 -0
- package/dist/store/driver/node-sqlite.js +188 -0
- package/dist/store/driver/node-sqlite.js.map +1 -0
- package/dist/store/index.d.ts +33 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +46 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/migrate.d.ts +68 -0
- package/dist/store/migrate.d.ts.map +1 -0
- package/dist/store/migrate.js +140 -0
- package/dist/store/migrate.js.map +1 -0
- package/dist/store/reader.d.ts +127 -0
- package/dist/store/reader.d.ts.map +1 -0
- package/dist/store/reader.js +269 -0
- package/dist/store/reader.js.map +1 -0
- package/dist/store/schema.d.ts +87 -0
- package/dist/store/schema.d.ts.map +1 -0
- package/dist/store/schema.js +322 -0
- package/dist/store/schema.js.map +1 -0
- package/dist/store/writer.d.ts +116 -0
- package/dist/store/writer.d.ts.map +1 -0
- package/dist/store/writer.js +279 -0
- package/dist/store/writer.js.map +1 -0
- package/dist/tiers/certify.d.ts +375 -0
- package/dist/tiers/certify.d.ts.map +1 -0
- package/dist/tiers/certify.js +434 -0
- package/dist/tiers/certify.js.map +1 -0
- package/dist/tiers/index.d.ts +5 -0
- package/dist/tiers/index.d.ts.map +1 -0
- package/dist/tiers/index.js +3 -0
- package/dist/tiers/index.js.map +1 -0
- package/dist/tiers/ladder.d.ts +73 -0
- package/dist/tiers/ladder.d.ts.map +1 -0
- package/dist/tiers/ladder.js +197 -0
- package/dist/tiers/ladder.js.map +1 -0
- package/dist/validation/config-graph.d.ts +104 -0
- package/dist/validation/config-graph.d.ts.map +1 -0
- package/dist/validation/config-graph.js +205 -0
- package/dist/validation/config-graph.js.map +1 -0
- package/dist/validation/env.d.ts +243 -0
- package/dist/validation/env.d.ts.map +1 -0
- package/dist/validation/env.js +447 -0
- package/dist/validation/env.js.map +1 -0
- package/dist/validation/index.d.ts +16 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +9 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/join-substitution.d.ts +186 -0
- package/dist/validation/join-substitution.d.ts.map +1 -0
- package/dist/validation/join-substitution.js +191 -0
- package/dist/validation/join-substitution.js.map +1 -0
- package/dist/validation/migrations.d.ts +133 -0
- package/dist/validation/migrations.d.ts.map +1 -0
- package/dist/validation/migrations.js +315 -0
- package/dist/validation/migrations.js.map +1 -0
- package/dist/validation/nodes.d.ts +32 -0
- package/dist/validation/nodes.d.ts.map +1 -0
- package/dist/validation/nodes.js +45 -0
- package/dist/validation/nodes.js.map +1 -0
- package/dist/validation/rollback.d.ts +124 -0
- package/dist/validation/rollback.d.ts.map +1 -0
- package/dist/validation/rollback.js +302 -0
- package/dist/validation/rollback.js.map +1 -0
- package/dist/validation/route-drift.d.ts +108 -0
- package/dist/validation/route-drift.d.ts.map +1 -0
- package/dist/validation/route-drift.js +103 -0
- package/dist/validation/route-drift.js.map +1 -0
- package/dist/validation/sources.d.ts +153 -0
- package/dist/validation/sources.d.ts.map +1 -0
- package/dist/validation/sources.js +409 -0
- package/dist/validation/sources.js.map +1 -0
- package/dist/worker/index.d.ts +5 -0
- package/dist/worker/index.d.ts.map +1 -0
- package/dist/worker/index.js +3 -0
- package/dist/worker/index.js.map +1 -0
- package/dist/worker/pool.d.ts +73 -0
- package/dist/worker/pool.d.ts.map +1 -0
- package/dist/worker/pool.js +203 -0
- package/dist/worker/pool.js.map +1 -0
- package/dist/worker/protocol.d.ts +91 -0
- package/dist/worker/protocol.d.ts.map +1 -0
- package/dist/worker/protocol.js +19 -0
- package/dist/worker/protocol.js.map +1 -0
- package/dist/worker/traversal.worker.d.ts +25 -0
- package/dist/worker/traversal.worker.d.ts.map +1 -0
- package/dist/worker/traversal.worker.js +124 -0
- package/dist/worker/traversal.worker.js.map +1 -0
- package/package.json +29 -0
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The declaration side of §15's env/config check — read from the repository, not
|
|
3
|
+
* from the graph.
|
|
4
|
+
*
|
|
5
|
+
* ## Why this is not an adapter, and why it is legal here
|
|
6
|
+
*
|
|
7
|
+
* §15.3's own wording is *"cross-check against declared variables **or the
|
|
8
|
+
* deploy target's actual state**"*. The deploy target's state is not in the graph
|
|
9
|
+
* and never will be. What holds it is `.env`, a container manifest, a CI
|
|
10
|
+
* workflow, an image build file — **formats, not languages.** Reading
|
|
11
|
+
* `KEY=value` and an indented `env:` block names no language, so it does not
|
|
12
|
+
* cross the Canonical IR boundary; it is legal above it for the same reason
|
|
13
|
+
* reading a commit log is (`sources/git`).
|
|
14
|
+
*
|
|
15
|
+
* That is what lets the check produce findings with no adapter change at all.
|
|
16
|
+
* See DEC-120.
|
|
17
|
+
*
|
|
18
|
+
* ## Precision over recall, three times, because a misparse here is a wrong finding
|
|
19
|
+
*
|
|
20
|
+
* A name invented by a sloppy scan becomes a confident sentence about somebody's
|
|
21
|
+
* configuration. So:
|
|
22
|
+
*
|
|
23
|
+
* 1. **Two different name rules, on purpose.** In a dotenv file `KEY=` is
|
|
24
|
+
* unambiguous, so any identifier shape is taken. Inside a structured document
|
|
25
|
+
* an `env:` block is indistinguishable from any other mapping once the scan
|
|
26
|
+
* loses its place, so only `UPPER_SNAKE` is accepted. The cost is a lowercase
|
|
27
|
+
* variable in a manifest, which is rare; the alternative is turning a stray
|
|
28
|
+
* key into a declaration.
|
|
29
|
+
* 2. **A block ends at the first line indented no deeper than its header.** No
|
|
30
|
+
* document model, no continuation handling, no anchors. A construct this scan
|
|
31
|
+
* cannot follow ends the block early, which *loses* names — a disclosed gap
|
|
32
|
+
* rather than a wrong one.
|
|
33
|
+
* 3. **A commented-out declaration counts, and is marked.** `# STRIPE_KEY=` in a
|
|
34
|
+
* sample file documents that the variable exists, which is exactly the
|
|
35
|
+
* question being asked. Treating it as absent would report every well
|
|
36
|
+
* documented optional setting as undeclared.
|
|
37
|
+
*
|
|
38
|
+
* ## The example/supply distinction
|
|
39
|
+
*
|
|
40
|
+
* `.env.example` **documents**; `.env.development` and a container manifest
|
|
41
|
+
* **supply**. Both are declarations for the purpose of "does this repository know
|
|
42
|
+
* this variable exists", and they are not interchangeable for anything else, so
|
|
43
|
+
* the distinction is carried on the surface rather than flattened.
|
|
44
|
+
*/
|
|
45
|
+
/** What a surface is evidence *of*. */
|
|
46
|
+
export type SurfaceRole =
|
|
47
|
+
/** The repository's own statement that a variable exists. */
|
|
48
|
+
"declaration"
|
|
49
|
+
/** Something that actually sets a value on a path to production. */
|
|
50
|
+
| "deployTarget";
|
|
51
|
+
export type SurfaceFormat = "dotenv" | "structured" | "imageBuild" | "wranglerVars";
|
|
52
|
+
export interface EnvDeclaration {
|
|
53
|
+
readonly name: string;
|
|
54
|
+
/** 1-indexed, so a finding can cite it. */
|
|
55
|
+
readonly line: number;
|
|
56
|
+
/** Documented but not active — a commented-out assignment. */
|
|
57
|
+
readonly commented: boolean;
|
|
58
|
+
}
|
|
59
|
+
export interface ConfigSurface {
|
|
60
|
+
/** Repo-relative, with forward slashes. */
|
|
61
|
+
readonly file: string;
|
|
62
|
+
readonly format: SurfaceFormat;
|
|
63
|
+
readonly role: SurfaceRole;
|
|
64
|
+
/** True for `.env.example` / `.sample` / `.template` — documents, does not supply. */
|
|
65
|
+
readonly example: boolean;
|
|
66
|
+
readonly declarations: readonly EnvDeclaration[];
|
|
67
|
+
}
|
|
68
|
+
export interface SurfaceScan {
|
|
69
|
+
readonly surfaces: readonly ConfigSurface[];
|
|
70
|
+
/** Paths that looked like a surface and could not be read. Never silent. */
|
|
71
|
+
readonly unreadable: readonly string[];
|
|
72
|
+
/** True when the walk hit its file budget before finishing. */
|
|
73
|
+
readonly truncated: boolean;
|
|
74
|
+
/**
|
|
75
|
+
* The noise directories this walk actually used, echoed back.
|
|
76
|
+
*
|
|
77
|
+
* Empty means no adapter declared any, and the walk therefore descended into
|
|
78
|
+
* whatever vendored trees the repository holds. Reporting it is what keeps an
|
|
79
|
+
* undeclared scan from reading like a complete one (rule 7) — the caller can
|
|
80
|
+
* see that the surface count is inflated rather than inferring it from a number
|
|
81
|
+
* that looks fine.
|
|
82
|
+
*/
|
|
83
|
+
readonly noiseDirectories: readonly string[];
|
|
84
|
+
}
|
|
85
|
+
export interface ScanOptions {
|
|
86
|
+
/** Directory budget depth. Beyond it the walk stops and says so. */
|
|
87
|
+
readonly maxDepth?: number;
|
|
88
|
+
/** Total files a walk may consider. */
|
|
89
|
+
readonly maxFiles?: number;
|
|
90
|
+
/**
|
|
91
|
+
* Directories this repository's ecosystems install dependencies or build output
|
|
92
|
+
* into — `node_modules`, `vendor`, `target`. **Supplied by the caller from the
|
|
93
|
+
* active adapters' `CapabilityMatrix.noiseDirectories`, never known here**
|
|
94
|
+
* (DEC-110). Undeclared, they are walked, and `SurfaceScan` says so.
|
|
95
|
+
*/
|
|
96
|
+
readonly noiseDirectories?: readonly string[];
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Shared with the migration scan, so the two walks cannot disagree about what
|
|
100
|
+
* counts as vendored. A second copy of this rule is a second place to forget the
|
|
101
|
+
* next ecosystem.
|
|
102
|
+
*/
|
|
103
|
+
export declare function skipDirectory(name: string, noiseDirectories?: readonly string[]): boolean;
|
|
104
|
+
/**
|
|
105
|
+
* Read every configuration surface a repository exposes.
|
|
106
|
+
*
|
|
107
|
+
* Structured documents are only opened when their path says they are a manifest
|
|
108
|
+
* or a workflow. Opening every YAML file in a repository would pull in test
|
|
109
|
+
* data, schema definitions and dependency lockfiles, and an `env:` key inside a
|
|
110
|
+
* schema definition is a description of a variable rather than a declaration of
|
|
111
|
+
* one.
|
|
112
|
+
*/
|
|
113
|
+
export declare function scanConfigSurfaces(root: string, options?: ScanOptions): SurfaceScan;
|
|
114
|
+
/** `KEY=value`, and `# KEY=value`, which documents the same variable. */
|
|
115
|
+
export declare function readDotenv(text: string): readonly EnvDeclaration[];
|
|
116
|
+
/** `ENV K=V`, the legacy `ENV K V`, and `ARG K`. */
|
|
117
|
+
export declare function readImageBuild(text: string): readonly EnvDeclaration[];
|
|
118
|
+
/**
|
|
119
|
+
* `env:` / `environment:` blocks in an indented document, in both forms.
|
|
120
|
+
*
|
|
121
|
+
* Mapping — `KEY: value` — and sequence — `- KEY=value` or a bare `- KEY`. The
|
|
122
|
+
* bare sequence form declares a pass-through from the host, which is still the
|
|
123
|
+
* document stating that the variable exists.
|
|
124
|
+
*/
|
|
125
|
+
export declare function readStructured(text: string): readonly EnvDeclaration[];
|
|
126
|
+
/** One `KEY = "value"` line inside a `wrangler.toml` `[vars]` or `[env.<name>.vars]` table. */
|
|
127
|
+
export interface WranglerVarsEntry {
|
|
128
|
+
/** `"default"` for the top-level `[vars]` table — the same tag `resolve.ts`'s `environmentOf` gives a bare `.env` file. */
|
|
129
|
+
readonly environment: string;
|
|
130
|
+
readonly name: string;
|
|
131
|
+
/** `null` for a commented-out line — documented, not active, same rule `readDotenv` applies. */
|
|
132
|
+
readonly value: string | null;
|
|
133
|
+
readonly line: number;
|
|
134
|
+
readonly commented: boolean;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Walk a `wrangler.toml`'s `[vars]` and `[env.<name>.vars]` tables only.
|
|
138
|
+
*
|
|
139
|
+
* Every other table — `[[kv_namespaces]]`, `[assets]`, `[env.<name>]` itself
|
|
140
|
+
* (the deploy target's own settings, not its vars) — is out of scope by
|
|
141
|
+
* construction rather than by exclusion list: entering *any* table this
|
|
142
|
+
* function does not recognise as a vars table resets tracking to "outside",
|
|
143
|
+
* so a line that merely looks like `KEY = value` inside `[[kv_namespaces]]`
|
|
144
|
+
* (e.g. `binding = "HOSTNAMES"`) is never mistaken for a declared variable.
|
|
145
|
+
* `[[...]]` array-of-tables headers are matched and reset scope the same way,
|
|
146
|
+
* rather than silently falling through as an unrecognised line — an
|
|
147
|
+
* `[[env.staging.kv_namespaces]]` line right after `[env.staging.vars]` must
|
|
148
|
+
* end that table, not extend it.
|
|
149
|
+
*/
|
|
150
|
+
export declare function readWranglerVarsEntries(text: string): readonly WranglerVarsEntry[];
|
|
151
|
+
/** The declaration-only projection `scanConfigSurfaces` uses. See `readWranglerVarsEntries` for the value-carrying form `resolve.ts` reads. */
|
|
152
|
+
export declare function readWranglerVars(text: string): readonly EnvDeclaration[];
|
|
153
|
+
//# sourceMappingURL=sources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sources.d.ts","sourceRoot":"","sources":["../../src/validation/sources.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAKH,uCAAuC;AACvC,MAAM,MAAM,WAAW;AACrB,6DAA6D;AAC3D,aAAa;AACf,oEAAoE;GAClE,cAAc,CAAC;AAEnB,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,YAAY,GAAG,YAAY,GAAG,cAAc,CAAC;AAEpF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2CAA2C;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,2CAA2C;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,sFAAsF;IACtF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,SAAS,cAAc,EAAE,CAAC;CAClD;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IAC5C,4EAA4E;IAC5E,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,+DAA+D;IAC/D,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B;;;;;;;;OAQG;IACH,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C;AAED,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,uCAAuC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/C;AA4DD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,gBAAgB,GAAE,SAAS,MAAM,EAAO,GACvC,OAAO,CAMT;AAgBD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,WAAW,CAmDvF;AAqED,yEAAyE;AACzE,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,cAAc,EAAE,CAgBlE;AAED,oDAAoD;AACpD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,cAAc,EAAE,CAwBtE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,cAAc,EAAE,CA4BtE;AAED,+FAA+F;AAC/F,MAAM,WAAW,iBAAiB;IAChC,2HAA2H;IAC3H,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,gGAAgG;IAChG,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAWD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,iBAAiB,EAAE,CAoClF;AAED,+IAA+I;AAC/I,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,cAAc,EAAE,CAGxE"}
|
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The declaration side of §15's env/config check — read from the repository, not
|
|
3
|
+
* from the graph.
|
|
4
|
+
*
|
|
5
|
+
* ## Why this is not an adapter, and why it is legal here
|
|
6
|
+
*
|
|
7
|
+
* §15.3's own wording is *"cross-check against declared variables **or the
|
|
8
|
+
* deploy target's actual state**"*. The deploy target's state is not in the graph
|
|
9
|
+
* and never will be. What holds it is `.env`, a container manifest, a CI
|
|
10
|
+
* workflow, an image build file — **formats, not languages.** Reading
|
|
11
|
+
* `KEY=value` and an indented `env:` block names no language, so it does not
|
|
12
|
+
* cross the Canonical IR boundary; it is legal above it for the same reason
|
|
13
|
+
* reading a commit log is (`sources/git`).
|
|
14
|
+
*
|
|
15
|
+
* That is what lets the check produce findings with no adapter change at all.
|
|
16
|
+
* See DEC-120.
|
|
17
|
+
*
|
|
18
|
+
* ## Precision over recall, three times, because a misparse here is a wrong finding
|
|
19
|
+
*
|
|
20
|
+
* A name invented by a sloppy scan becomes a confident sentence about somebody's
|
|
21
|
+
* configuration. So:
|
|
22
|
+
*
|
|
23
|
+
* 1. **Two different name rules, on purpose.** In a dotenv file `KEY=` is
|
|
24
|
+
* unambiguous, so any identifier shape is taken. Inside a structured document
|
|
25
|
+
* an `env:` block is indistinguishable from any other mapping once the scan
|
|
26
|
+
* loses its place, so only `UPPER_SNAKE` is accepted. The cost is a lowercase
|
|
27
|
+
* variable in a manifest, which is rare; the alternative is turning a stray
|
|
28
|
+
* key into a declaration.
|
|
29
|
+
* 2. **A block ends at the first line indented no deeper than its header.** No
|
|
30
|
+
* document model, no continuation handling, no anchors. A construct this scan
|
|
31
|
+
* cannot follow ends the block early, which *loses* names — a disclosed gap
|
|
32
|
+
* rather than a wrong one.
|
|
33
|
+
* 3. **A commented-out declaration counts, and is marked.** `# STRIPE_KEY=` in a
|
|
34
|
+
* sample file documents that the variable exists, which is exactly the
|
|
35
|
+
* question being asked. Treating it as absent would report every well
|
|
36
|
+
* documented optional setting as undeclared.
|
|
37
|
+
*
|
|
38
|
+
* ## The example/supply distinction
|
|
39
|
+
*
|
|
40
|
+
* `.env.example` **documents**; `.env.development` and a container manifest
|
|
41
|
+
* **supply**. Both are declarations for the purpose of "does this repository know
|
|
42
|
+
* this variable exists", and they are not interchangeable for anything else, so
|
|
43
|
+
* the distinction is carried on the surface rather than flattened.
|
|
44
|
+
*/
|
|
45
|
+
import { readFileSync, readdirSync, statSync } from "node:fs";
|
|
46
|
+
import { join, relative, sep } from "node:path";
|
|
47
|
+
const DEFAULT_MAX_DEPTH = 5;
|
|
48
|
+
const DEFAULT_MAX_FILES = 20_000;
|
|
49
|
+
/**
|
|
50
|
+
* Directories a configuration scan must not descend into.
|
|
51
|
+
*
|
|
52
|
+
* Vendored code carries its own `.env.example` files, and a dependency's sample
|
|
53
|
+
* configuration is not this repository's declaration of anything. Including one
|
|
54
|
+
* would put another project's variable names into the denominator of the
|
|
55
|
+
* coverage guard, which is the number that decides whether anything is reported
|
|
56
|
+
* at all.
|
|
57
|
+
*
|
|
58
|
+
* **The rule is structural, not a list of ecosystems' cache directories.** The
|
|
59
|
+
* first version of this was such a list and the boundary lint rejected it, which
|
|
60
|
+
* was the correct call: engine code that knows one ecosystem's build cache by
|
|
61
|
+
* name is engine code that will be missing the next one's. Every dotted directory
|
|
62
|
+
* is skipped apart from the ones that hold pipeline definitions.
|
|
63
|
+
*
|
|
64
|
+
* **`node_modules`, `vendor`, `target`, `dist`, `build`, `out` and `coverage`
|
|
65
|
+
* used to sit here too**, and DEC-110 recorded them as the unfinished half of its
|
|
66
|
+
* own ruling — *"three ecosystems' names in the skip list"* — while naming the end
|
|
67
|
+
* state: `noiseDirectories` on `CapabilityMatrix`, declared per adapter. They are
|
|
68
|
+
* gone from the engine now and arrive through `ScanOptions.noiseDirectories`
|
|
69
|
+
* instead. **The knowledge moved to the layer that has it; a second list was not
|
|
70
|
+
* created** — DEC-110's *"what must not happen is a third list."*
|
|
71
|
+
*
|
|
72
|
+
* The cost is real and disclosed rather than hidden: with nothing declared, a
|
|
73
|
+
* dependency tree in an undotted directory is walked and a sample inside it is
|
|
74
|
+
* read. `SurfaceScan.noiseDirectories` reports the set actually used, so an empty
|
|
75
|
+
* declaration cannot pass for a complete one (rule 7), and
|
|
76
|
+
* `bench/env-precision.mjs` still reports the surface count per repository.
|
|
77
|
+
*/
|
|
78
|
+
/**
|
|
79
|
+
* Dotted directories that are walked anyway, because **configuration lives in
|
|
80
|
+
* them**.
|
|
81
|
+
*
|
|
82
|
+
* The list started as pipelines only and that was too narrow — found by the
|
|
83
|
+
* decisions denominator, not by reasoning. `dispatch` keeps a real
|
|
84
|
+
* `.devcontainer/.env.example` documenting five variables; skipping it made the
|
|
85
|
+
* declaration surface incomplete, which moved the coverage guard *and* made
|
|
86
|
+
* three variables look undocumented when the repository documents all three. A
|
|
87
|
+
* missing declaration source does not fail loudly here: it silently turns
|
|
88
|
+
* correct suppressions into findings.
|
|
89
|
+
*
|
|
90
|
+
* These are directories a human authors configuration in, as opposed to ones a
|
|
91
|
+
* tool writes state into — which is the distinction the dotted-skip rule is
|
|
92
|
+
* reaching for and cannot express structurally. DEC-110 records the end state:
|
|
93
|
+
* the adapter declares its own noise directories and this list goes away.
|
|
94
|
+
*/
|
|
95
|
+
const CONFIG_DIRECTORIES = new Set([
|
|
96
|
+
".github",
|
|
97
|
+
".circleci",
|
|
98
|
+
".buildkite",
|
|
99
|
+
".devcontainer",
|
|
100
|
+
".config",
|
|
101
|
+
]);
|
|
102
|
+
/**
|
|
103
|
+
* Shared with the migration scan, so the two walks cannot disagree about what
|
|
104
|
+
* counts as vendored. A second copy of this rule is a second place to forget the
|
|
105
|
+
* next ecosystem.
|
|
106
|
+
*/
|
|
107
|
+
export function skipDirectory(name, noiseDirectories = []) {
|
|
108
|
+
// The structural rule is checked first, and deliberately: a declaration cannot
|
|
109
|
+
// re-admit a dotted state directory, and cannot exclude `.github`. The adapter
|
|
110
|
+
// declares what its ecosystem installs, not what the engine's own rule means.
|
|
111
|
+
if (name.startsWith("."))
|
|
112
|
+
return !CONFIG_DIRECTORIES.has(name);
|
|
113
|
+
return noiseDirectories.includes(name);
|
|
114
|
+
}
|
|
115
|
+
/** `.env`, `.env.local`, `.env.test` — but not `.env.d.ts` or `.envrc`. */
|
|
116
|
+
const DOTENV = /^\.env(\.[A-Za-z0-9_.-]+)?$/;
|
|
117
|
+
const EXAMPLE_SUFFIX = /\.(example|sample|template|dist|defaults?)$/i;
|
|
118
|
+
const CONTAINER_MANIFEST = /^(docker-)?compose([.-][A-Za-z0-9_.-]+)?\.ya?ml$/i;
|
|
119
|
+
const IMAGE_BUILD = /^(Containerfile|Dockerfile)([.-][A-Za-z0-9_.-]+)?$/i;
|
|
120
|
+
const STRUCTURED = /\.ya?ml$/i;
|
|
121
|
+
/** Cloudflare Workers' own config file — the exact filename, not a general TOML reader. */
|
|
122
|
+
const WRANGLER_TOML = /^wrangler\.toml$/;
|
|
123
|
+
/** POSIX-conventional variable name. Deliberately strict — see the header. */
|
|
124
|
+
const UPPER_SNAKE = /^[A-Z][A-Z0-9_]*$/;
|
|
125
|
+
/** Any identifier shape, for the unambiguous `KEY=` form. */
|
|
126
|
+
const ANY_NAME = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
127
|
+
/**
|
|
128
|
+
* Read every configuration surface a repository exposes.
|
|
129
|
+
*
|
|
130
|
+
* Structured documents are only opened when their path says they are a manifest
|
|
131
|
+
* or a workflow. Opening every YAML file in a repository would pull in test
|
|
132
|
+
* data, schema definitions and dependency lockfiles, and an `env:` key inside a
|
|
133
|
+
* schema definition is a description of a variable rather than a declaration of
|
|
134
|
+
* one.
|
|
135
|
+
*/
|
|
136
|
+
export function scanConfigSurfaces(root, options = {}) {
|
|
137
|
+
const maxDepth = options.maxDepth ?? DEFAULT_MAX_DEPTH;
|
|
138
|
+
const maxFiles = options.maxFiles ?? DEFAULT_MAX_FILES;
|
|
139
|
+
const noiseDirectories = options.noiseDirectories ?? [];
|
|
140
|
+
const surfaces = [];
|
|
141
|
+
const unreadable = [];
|
|
142
|
+
let seen = 0;
|
|
143
|
+
let truncated = false;
|
|
144
|
+
const walk = (dir, depth) => {
|
|
145
|
+
if (truncated || depth > maxDepth)
|
|
146
|
+
return;
|
|
147
|
+
let entries;
|
|
148
|
+
try {
|
|
149
|
+
entries = readdirSync(dir).sort();
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
unreadable.push(rel(root, dir));
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
for (const entry of entries) {
|
|
156
|
+
if (truncated)
|
|
157
|
+
return;
|
|
158
|
+
const full = join(dir, entry);
|
|
159
|
+
let directory = false;
|
|
160
|
+
try {
|
|
161
|
+
directory = statSync(full).isDirectory();
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
if (directory) {
|
|
167
|
+
if (skipDirectory(entry, noiseDirectories))
|
|
168
|
+
continue;
|
|
169
|
+
walk(full, depth + 1);
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
if (++seen > maxFiles) {
|
|
173
|
+
truncated = true;
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
const surface = classify(root, dir, entry);
|
|
177
|
+
if (surface === null)
|
|
178
|
+
continue;
|
|
179
|
+
const parsed = read(root, full, surface);
|
|
180
|
+
if (parsed === null)
|
|
181
|
+
unreadable.push(rel(root, full));
|
|
182
|
+
else if (parsed.declarations.length > 0)
|
|
183
|
+
surfaces.push(parsed);
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
walk(root, 0);
|
|
187
|
+
surfaces.sort((a, b) => a.file.localeCompare(b.file));
|
|
188
|
+
return { surfaces, unreadable, truncated, noiseDirectories };
|
|
189
|
+
}
|
|
190
|
+
function classify(root, dir, entry) {
|
|
191
|
+
if (DOTENV.test(entry)) {
|
|
192
|
+
const example = EXAMPLE_SUFFIX.test(entry) || entry === ".env.example";
|
|
193
|
+
// An example file states what exists; a concrete one states what is set.
|
|
194
|
+
// Neither is on a path to production by itself, so both are declarations —
|
|
195
|
+
// the deploy target is the manifest that mounts them.
|
|
196
|
+
return { format: "dotenv", role: "declaration", example };
|
|
197
|
+
}
|
|
198
|
+
if (WRANGLER_TOML.test(entry)) {
|
|
199
|
+
// Same status `.env.development` holds: the repository's own statement of
|
|
200
|
+
// what it runs with, not a deploy pipeline's manifest of it. `[vars]` and
|
|
201
|
+
// `.env.development` are read the same way for the same reason.
|
|
202
|
+
return { format: "wranglerVars", role: "declaration", example: false };
|
|
203
|
+
}
|
|
204
|
+
if (IMAGE_BUILD.test(entry)) {
|
|
205
|
+
return { format: "imageBuild", role: "deployTarget", example: false };
|
|
206
|
+
}
|
|
207
|
+
if (CONTAINER_MANIFEST.test(entry)) {
|
|
208
|
+
return { format: "structured", role: "deployTarget", example: false };
|
|
209
|
+
}
|
|
210
|
+
if (STRUCTURED.test(entry) && isPipelineDirectory(rel(root, dir))) {
|
|
211
|
+
return { format: "structured", role: "deployTarget", example: false };
|
|
212
|
+
}
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Only structured documents whose *path* declares them a pipeline are opened.
|
|
217
|
+
*
|
|
218
|
+
* Named rather than pattern-matched on content: a document that happens to
|
|
219
|
+
* contain an `env:` key is not necessarily setting one, and guessing from
|
|
220
|
+
* content is how a schema fragment becomes a declaration.
|
|
221
|
+
*/
|
|
222
|
+
function isPipelineDirectory(dir) {
|
|
223
|
+
const parts = dir.split("/");
|
|
224
|
+
return (parts.includes("workflows") ||
|
|
225
|
+
parts.includes(".circleci") ||
|
|
226
|
+
parts.includes(".buildkite") ||
|
|
227
|
+
parts.includes("pipelines"));
|
|
228
|
+
}
|
|
229
|
+
function read(root, full, kind) {
|
|
230
|
+
let text;
|
|
231
|
+
try {
|
|
232
|
+
text = readFileSync(full, "utf8");
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
return null;
|
|
236
|
+
}
|
|
237
|
+
const declarations = kind.format === "dotenv"
|
|
238
|
+
? readDotenv(text)
|
|
239
|
+
: kind.format === "imageBuild"
|
|
240
|
+
? readImageBuild(text)
|
|
241
|
+
: kind.format === "wranglerVars"
|
|
242
|
+
? readWranglerVars(text)
|
|
243
|
+
: readStructured(text);
|
|
244
|
+
return { file: rel(root, full), ...kind, declarations };
|
|
245
|
+
}
|
|
246
|
+
/** `KEY=value`, and `# KEY=value`, which documents the same variable. */
|
|
247
|
+
export function readDotenv(text) {
|
|
248
|
+
const out = [];
|
|
249
|
+
const lines = text.split(/\r?\n/);
|
|
250
|
+
for (let i = 0; i < lines.length; i += 1) {
|
|
251
|
+
const raw = lines[i] ?? "";
|
|
252
|
+
const commented = /^\s*#/.test(raw);
|
|
253
|
+
// `export KEY=value` is the shell-sourceable form of the same file and is
|
|
254
|
+
// common in deployment scripts.
|
|
255
|
+
const match = /^\s*(?:#\s*)?(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*=/.exec(raw);
|
|
256
|
+
if (match === null)
|
|
257
|
+
continue;
|
|
258
|
+
const name = match[1];
|
|
259
|
+
if (name === undefined || !ANY_NAME.test(name))
|
|
260
|
+
continue;
|
|
261
|
+
out.push({ name, line: i + 1, commented });
|
|
262
|
+
}
|
|
263
|
+
return dedupe(out);
|
|
264
|
+
}
|
|
265
|
+
/** `ENV K=V`, the legacy `ENV K V`, and `ARG K`. */
|
|
266
|
+
export function readImageBuild(text) {
|
|
267
|
+
const out = [];
|
|
268
|
+
const lines = text.split(/\r?\n/);
|
|
269
|
+
for (let i = 0; i < lines.length; i += 1) {
|
|
270
|
+
const raw = lines[i] ?? "";
|
|
271
|
+
const directive = /^\s*(ENV|ARG)\s+(.*)$/i.exec(raw);
|
|
272
|
+
if (directive === null)
|
|
273
|
+
continue;
|
|
274
|
+
const rest = (directive[2] ?? "").trim();
|
|
275
|
+
if (rest === "")
|
|
276
|
+
continue;
|
|
277
|
+
if (rest.includes("=")) {
|
|
278
|
+
// `ENV A=1 B=2` — take every assignment on the line.
|
|
279
|
+
for (const m of rest.matchAll(/(?:^|\s)([A-Z][A-Z0-9_]*)=/g)) {
|
|
280
|
+
const name = m[1];
|
|
281
|
+
if (name !== undefined)
|
|
282
|
+
out.push({ name, line: i + 1, commented: false });
|
|
283
|
+
}
|
|
284
|
+
continue;
|
|
285
|
+
}
|
|
286
|
+
// `ENV KEY value` / `ARG KEY`.
|
|
287
|
+
const name = /^([A-Z][A-Z0-9_]*)(\s|$)/.exec(rest)?.[1];
|
|
288
|
+
if (name !== undefined)
|
|
289
|
+
out.push({ name, line: i + 1, commented: false });
|
|
290
|
+
}
|
|
291
|
+
return dedupe(out);
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* `env:` / `environment:` blocks in an indented document, in both forms.
|
|
295
|
+
*
|
|
296
|
+
* Mapping — `KEY: value` — and sequence — `- KEY=value` or a bare `- KEY`. The
|
|
297
|
+
* bare sequence form declares a pass-through from the host, which is still the
|
|
298
|
+
* document stating that the variable exists.
|
|
299
|
+
*/
|
|
300
|
+
export function readStructured(text) {
|
|
301
|
+
const out = [];
|
|
302
|
+
const lines = text.split(/\r?\n/);
|
|
303
|
+
for (let i = 0; i < lines.length; i += 1) {
|
|
304
|
+
const header = /^(\s*)(env|environment):\s*(#.*)?$/.exec(lines[i] ?? "");
|
|
305
|
+
if (header === null)
|
|
306
|
+
continue;
|
|
307
|
+
const headerIndent = (header[1] ?? "").length;
|
|
308
|
+
for (let j = i + 1; j < lines.length; j += 1) {
|
|
309
|
+
const line = lines[j] ?? "";
|
|
310
|
+
if (line.trim() === "" || /^\s*#/.test(line))
|
|
311
|
+
continue;
|
|
312
|
+
const indent = line.length - line.trimStart().length;
|
|
313
|
+
// The block ends at the first line that is not deeper than its header.
|
|
314
|
+
if (indent <= headerIndent)
|
|
315
|
+
break;
|
|
316
|
+
const mapping = /^\s*([A-Z][A-Z0-9_]*)\s*:/.exec(line);
|
|
317
|
+
if (mapping?.[1] !== undefined && UPPER_SNAKE.test(mapping[1])) {
|
|
318
|
+
out.push({ name: mapping[1], line: j + 1, commented: false });
|
|
319
|
+
continue;
|
|
320
|
+
}
|
|
321
|
+
const sequence = /^\s*-\s*"?([A-Z][A-Z0-9_]*)"?\s*(=|$)/.exec(line);
|
|
322
|
+
if (sequence?.[1] !== undefined && UPPER_SNAKE.test(sequence[1])) {
|
|
323
|
+
out.push({ name: sequence[1], line: j + 1, commented: false });
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
return dedupe(out);
|
|
328
|
+
}
|
|
329
|
+
const WRANGLER_ENV_VARS_TABLE = /^env\.([A-Za-z0-9_-]+)\.vars$/;
|
|
330
|
+
/** `null` for every table that is not itself a vars table — `[env.staging]` names an environment but is not scoped to it. */
|
|
331
|
+
function wranglerTableEnvironment(table) {
|
|
332
|
+
const trimmed = table.trim();
|
|
333
|
+
if (trimmed === "vars")
|
|
334
|
+
return "default";
|
|
335
|
+
return WRANGLER_ENV_VARS_TABLE.exec(trimmed)?.[1] ?? null;
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Walk a `wrangler.toml`'s `[vars]` and `[env.<name>.vars]` tables only.
|
|
339
|
+
*
|
|
340
|
+
* Every other table — `[[kv_namespaces]]`, `[assets]`, `[env.<name>]` itself
|
|
341
|
+
* (the deploy target's own settings, not its vars) — is out of scope by
|
|
342
|
+
* construction rather than by exclusion list: entering *any* table this
|
|
343
|
+
* function does not recognise as a vars table resets tracking to "outside",
|
|
344
|
+
* so a line that merely looks like `KEY = value` inside `[[kv_namespaces]]`
|
|
345
|
+
* (e.g. `binding = "HOSTNAMES"`) is never mistaken for a declared variable.
|
|
346
|
+
* `[[...]]` array-of-tables headers are matched and reset scope the same way,
|
|
347
|
+
* rather than silently falling through as an unrecognised line — an
|
|
348
|
+
* `[[env.staging.kv_namespaces]]` line right after `[env.staging.vars]` must
|
|
349
|
+
* end that table, not extend it.
|
|
350
|
+
*/
|
|
351
|
+
export function readWranglerVarsEntries(text) {
|
|
352
|
+
const out = [];
|
|
353
|
+
const lines = text.split(/\r?\n/);
|
|
354
|
+
let currentEnvironment = null;
|
|
355
|
+
for (let i = 0; i < lines.length; i += 1) {
|
|
356
|
+
const trimmed = (lines[i] ?? "").trim();
|
|
357
|
+
if (trimmed === "")
|
|
358
|
+
continue;
|
|
359
|
+
if (/^\[\[[^[\]]+\]\]/.test(trimmed)) {
|
|
360
|
+
currentEnvironment = null;
|
|
361
|
+
continue;
|
|
362
|
+
}
|
|
363
|
+
const table = /^\[([^[\]]+)\]/.exec(trimmed);
|
|
364
|
+
if (table !== null) {
|
|
365
|
+
currentEnvironment = wranglerTableEnvironment(table[1] ?? "");
|
|
366
|
+
continue;
|
|
367
|
+
}
|
|
368
|
+
if (currentEnvironment === null)
|
|
369
|
+
continue;
|
|
370
|
+
const commented = trimmed.startsWith("#");
|
|
371
|
+
const body = commented ? trimmed.slice(1).trim() : trimmed;
|
|
372
|
+
const assignment = /^([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)$/.exec(body);
|
|
373
|
+
const name = assignment?.[1];
|
|
374
|
+
if (name === undefined || !ANY_NAME.test(name))
|
|
375
|
+
continue;
|
|
376
|
+
if (commented) {
|
|
377
|
+
out.push({ environment: currentEnvironment, name, value: null, line: i + 1, commented: true });
|
|
378
|
+
continue;
|
|
379
|
+
}
|
|
380
|
+
const rawValue = (assignment?.[2] ?? "").trim();
|
|
381
|
+
const quoted = /^"([^"]*)"/.exec(rawValue) ?? /^'([^']*)'/.exec(rawValue);
|
|
382
|
+
const value = quoted?.[1] ?? rawValue.replace(/\s*#.*$/, "").trim();
|
|
383
|
+
out.push({ environment: currentEnvironment, name, value, line: i + 1, commented: false });
|
|
384
|
+
}
|
|
385
|
+
return out;
|
|
386
|
+
}
|
|
387
|
+
/** The declaration-only projection `scanConfigSurfaces` uses. See `readWranglerVarsEntries` for the value-carrying form `resolve.ts` reads. */
|
|
388
|
+
export function readWranglerVars(text) {
|
|
389
|
+
const declarations = readWranglerVarsEntries(text).map((e) => ({ name: e.name, line: e.line, commented: e.commented }));
|
|
390
|
+
return dedupe(declarations);
|
|
391
|
+
}
|
|
392
|
+
/** First occurrence wins, so a finding cites the line a reader would look at. */
|
|
393
|
+
function dedupe(declarations) {
|
|
394
|
+
const seen = new Map();
|
|
395
|
+
for (const declaration of declarations) {
|
|
396
|
+
const existing = seen.get(declaration.name);
|
|
397
|
+
// An active assignment outranks a commented one even if it comes later:
|
|
398
|
+
// "set here" is a stronger fact than "documented here".
|
|
399
|
+
if (existing === undefined || (existing.commented && !declaration.commented)) {
|
|
400
|
+
seen.set(declaration.name, declaration);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
return [...seen.values()].sort((a, b) => a.line - b.line || a.name.localeCompare(b.name));
|
|
404
|
+
}
|
|
405
|
+
function rel(root, full) {
|
|
406
|
+
const r = relative(root, full);
|
|
407
|
+
return r === "" ? "." : r.split(sep).join("/");
|
|
408
|
+
}
|
|
409
|
+
//# sourceMappingURL=sources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sources.js","sourceRoot":"","sources":["../../src/validation/sources.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { createTraversalPool, workerEntryUrl } from "./pool.ts";
|
|
2
|
+
export type { TraversalPool, TraversalPoolOptions, PoolTraversalResult } from "./pool.ts";
|
|
3
|
+
export { weightFromTable } from "./protocol.ts";
|
|
4
|
+
export type { EdgeWeightTable, TraversalRequest, ReachedWire, WorkerMessage, MainMessage, } from "./protocol.ts";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChE,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAE1F,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,WAAW,GACZ,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGhE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
|