@telora/daemon 0.22.97 → 0.22.131
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/build-info.json +4 -3
- package/dist/cli/verify-setup-config.d.ts +4 -3
- package/dist/cli/verify-setup-config.d.ts.map +1 -1
- package/dist/cli/verify-setup-config.js.map +1 -1
- package/dist/completion/commit-verdict-release.d.ts +49 -0
- package/dist/completion/commit-verdict-release.d.ts.map +1 -0
- package/dist/completion/commit-verdict-release.js +240 -0
- package/dist/completion/commit-verdict-release.js.map +1 -0
- package/dist/completion/completion-phase-registry.d.ts +10 -4
- package/dist/completion/completion-phase-registry.d.ts.map +1 -1
- package/dist/completion/completion-phase-registry.js +19 -7
- package/dist/completion/completion-phase-registry.js.map +1 -1
- package/dist/completion/detector.d.ts.map +1 -1
- package/dist/completion/detector.js +1 -0
- package/dist/completion/detector.js.map +1 -1
- package/dist/completion/event-entry-phases.d.ts +6 -3
- package/dist/completion/event-entry-phases.d.ts.map +1 -1
- package/dist/completion/event-entry-phases.js +135 -76
- package/dist/completion/event-entry-phases.js.map +1 -1
- package/dist/completion/event-phases.d.ts +24 -3
- package/dist/completion/event-phases.d.ts.map +1 -1
- package/dist/completion/event-phases.js +9 -9
- package/dist/completion/event-phases.js.map +1 -1
- package/dist/completion/event.d.ts +8 -0
- package/dist/completion/event.d.ts.map +1 -1
- package/dist/completion/event.js +47 -21
- package/dist/completion/event.js.map +1 -1
- package/dist/completion/exit-classification.d.ts.map +1 -1
- package/dist/completion/exit-classification.js +1 -0
- package/dist/completion/exit-classification.js.map +1 -1
- package/dist/completion/merge-phase.d.ts +21 -9
- package/dist/completion/merge-phase.d.ts.map +1 -1
- package/dist/completion/merge-phase.js +35 -10
- package/dist/completion/merge-phase.js.map +1 -1
- package/dist/completion/review-auto-approval-record.d.ts +19 -0
- package/dist/completion/review-auto-approval-record.d.ts.map +1 -0
- package/dist/completion/review-auto-approval-record.js +102 -0
- package/dist/completion/review-auto-approval-record.js.map +1 -0
- package/dist/completion/review-cycle-cap.d.ts +62 -0
- package/dist/completion/review-cycle-cap.d.ts.map +1 -0
- package/dist/completion/review-cycle-cap.js +180 -0
- package/dist/completion/review-cycle-cap.js.map +1 -0
- package/dist/completion/review-exit-deps.d.ts +17 -2
- package/dist/completion/review-exit-deps.d.ts.map +1 -1
- package/dist/completion/review-exit-deps.js +19 -2
- package/dist/completion/review-exit-deps.js.map +1 -1
- package/dist/completion/review-exit-escalations.d.ts +45 -23
- package/dist/completion/review-exit-escalations.d.ts.map +1 -1
- package/dist/completion/review-exit-escalations.js +15 -74
- package/dist/completion/review-exit-escalations.js.map +1 -1
- package/dist/completion/review-exit-evidence.d.ts +9 -0
- package/dist/completion/review-exit-evidence.d.ts.map +1 -1
- package/dist/completion/review-exit-evidence.js +4 -1
- package/dist/completion/review-exit-evidence.js.map +1 -1
- package/dist/completion/review-exit-foreign-findings.d.ts +151 -0
- package/dist/completion/review-exit-foreign-findings.d.ts.map +1 -0
- package/dist/completion/review-exit-foreign-findings.js +474 -0
- package/dist/completion/review-exit-foreign-findings.js.map +1 -0
- package/dist/completion/review-exit-phase.d.ts.map +1 -1
- package/dist/completion/review-exit-phase.js +71 -64
- package/dist/completion/review-exit-phase.js.map +1 -1
- package/dist/completion/review-exit-progress.d.ts +20 -0
- package/dist/completion/review-exit-progress.d.ts.map +1 -1
- package/dist/completion/review-exit-progress.js +28 -19
- package/dist/completion/review-exit-progress.js.map +1 -1
- package/dist/completion/review-exit-rehoming.d.ts +5 -0
- package/dist/completion/review-exit-rehoming.d.ts.map +1 -1
- package/dist/completion/review-exit-rehoming.js.map +1 -1
- package/dist/completion/review-exit-verdict-gate.d.ts +202 -0
- package/dist/completion/review-exit-verdict-gate.d.ts.map +1 -0
- package/dist/completion/review-exit-verdict-gate.js +228 -0
- package/dist/completion/review-exit-verdict-gate.js.map +1 -0
- package/dist/completion/review-next-step.d.ts +62 -0
- package/dist/completion/review-next-step.d.ts.map +1 -0
- package/dist/completion/review-next-step.js +63 -0
- package/dist/completion/review-next-step.js.map +1 -0
- package/dist/completion/session-hold-sweep-deps.d.ts +17 -0
- package/dist/completion/session-hold-sweep-deps.d.ts.map +1 -0
- package/dist/completion/session-hold-sweep-deps.js +89 -0
- package/dist/completion/session-hold-sweep-deps.js.map +1 -0
- package/dist/completion/session-hold.d.ts +180 -0
- package/dist/completion/session-hold.d.ts.map +1 -0
- package/dist/completion/session-hold.js +238 -0
- package/dist/completion/session-hold.js.map +1 -0
- package/dist/completion/state-cascade.d.ts +19 -0
- package/dist/completion/state-cascade.d.ts.map +1 -1
- package/dist/completion/state-cascade.js +85 -31
- package/dist/completion/state-cascade.js.map +1 -1
- package/dist/completion/team-lifecycle.d.ts +35 -2
- package/dist/completion/team-lifecycle.d.ts.map +1 -1
- package/dist/completion/team-lifecycle.js +165 -94
- package/dist/completion/team-lifecycle.js.map +1 -1
- package/dist/completion/team-phase.d.ts +27 -15
- package/dist/completion/team-phase.d.ts.map +1 -1
- package/dist/completion/team-phase.js +34 -15
- package/dist/completion/team-phase.js.map +1 -1
- package/dist/delivery/commit-verdict-hold.d.ts +55 -0
- package/dist/delivery/commit-verdict-hold.d.ts.map +1 -0
- package/dist/delivery/commit-verdict-hold.js +118 -0
- package/dist/delivery/commit-verdict-hold.js.map +1 -0
- package/dist/directive/directive-dispatch.d.ts.map +1 -1
- package/dist/directive/directive-dispatch.js +10 -3
- package/dist/directive/directive-dispatch.js.map +1 -1
- package/dist/directive/directive-executor.d.ts.map +1 -1
- package/dist/directive/directive-executor.js +1 -0
- package/dist/directive/directive-executor.js.map +1 -1
- package/dist/directive/directive-queue.d.ts.map +1 -1
- package/dist/directive/directive-queue.js +6 -1
- package/dist/directive/directive-queue.js.map +1 -1
- package/dist/directive/phase-sync.d.ts +29 -2
- package/dist/directive/phase-sync.d.ts.map +1 -1
- package/dist/directive/phase-sync.js +30 -6
- package/dist/directive/phase-sync.js.map +1 -1
- package/dist/drift/artifact-ref-shape.d.ts +34 -0
- package/dist/drift/artifact-ref-shape.d.ts.map +1 -0
- package/dist/drift/artifact-ref-shape.js +94 -0
- package/dist/drift/artifact-ref-shape.js.map +1 -0
- package/dist/drift/drift-eval-loop.d.ts +7 -0
- package/dist/drift/drift-eval-loop.d.ts.map +1 -1
- package/dist/drift/drift-eval-loop.js +34 -5
- package/dist/drift/drift-eval-loop.js.map +1 -1
- package/dist/drift/drift-evaluator.d.ts.map +1 -1
- package/dist/drift/drift-evaluator.js +8 -3
- package/dist/drift/drift-evaluator.js.map +1 -1
- package/dist/focus/awaiting-slot.d.ts +34 -0
- package/dist/focus/awaiting-slot.d.ts.map +1 -0
- package/dist/focus/awaiting-slot.js +26 -0
- package/dist/focus/awaiting-slot.js.map +1 -0
- package/dist/focus/focus-lifecycle.js +2 -2
- package/dist/focus/focus-lifecycle.js.map +1 -1
- package/dist/focus/focus-phase.d.ts.map +1 -1
- package/dist/focus/focus-phase.js +3 -1
- package/dist/focus/focus-phase.js.map +1 -1
- package/dist/focus/focus-spawn-decision.d.ts +62 -0
- package/dist/focus/focus-spawn-decision.d.ts.map +1 -0
- package/dist/focus/focus-spawn-decision.js +41 -0
- package/dist/focus/focus-spawn-decision.js.map +1 -0
- package/dist/focus/focus-team-state.d.ts.map +1 -1
- package/dist/focus/focus-team-state.js +1 -13
- package/dist/focus/focus-team-state.js.map +1 -1
- package/dist/focus/listener-spawn.d.ts +16 -55
- package/dist/focus/listener-spawn.d.ts.map +1 -1
- package/dist/focus/listener-spawn.js +102 -64
- package/dist/focus/listener-spawn.js.map +1 -1
- package/dist/focus/listener-state.d.ts.map +1 -1
- package/dist/focus/listener-state.js +4 -1
- package/dist/focus/listener-state.js.map +1 -1
- package/dist/focus/listener.d.ts +41 -2
- package/dist/focus/listener.d.ts.map +1 -1
- package/dist/focus/listener.js +135 -83
- package/dist/focus/listener.js.map +1 -1
- package/dist/focus/pending-spawn-pass-deps.d.ts +69 -0
- package/dist/focus/pending-spawn-pass-deps.d.ts.map +1 -0
- package/dist/focus/pending-spawn-pass-deps.js +34 -0
- package/dist/focus/pending-spawn-pass-deps.js.map +1 -0
- package/dist/focus/pending-spawn-review-next-step.d.ts +83 -0
- package/dist/focus/pending-spawn-review-next-step.d.ts.map +1 -0
- package/dist/focus/pending-spawn-review-next-step.js +325 -0
- package/dist/focus/pending-spawn-review-next-step.js.map +1 -0
- package/dist/focus/review-cycle-cap-hold.d.ts +132 -0
- package/dist/focus/review-cycle-cap-hold.d.ts.map +1 -0
- package/dist/focus/review-cycle-cap-hold.js +178 -0
- package/dist/focus/review-cycle-cap-hold.js.map +1 -0
- package/dist/focus/team-actionable-work.js +2 -2
- package/dist/focus/verify-open-issues.d.ts +22 -0
- package/dist/focus/verify-open-issues.d.ts.map +1 -1
- package/dist/focus/verify-open-issues.js +118 -57
- package/dist/focus/verify-open-issues.js.map +1 -1
- package/dist/focus/verify-routing-passes.d.ts +32 -0
- package/dist/focus/verify-routing-passes.d.ts.map +1 -0
- package/dist/focus/verify-routing-passes.js +18 -0
- package/dist/focus/verify-routing-passes.js.map +1 -0
- package/dist/git/exec.d.ts.map +1 -1
- package/dist/git/exec.js +2 -1
- package/dist/git/exec.js.map +1 -1
- package/dist/git/index.d.ts.map +1 -1
- package/dist/git/index.js +9 -5
- package/dist/git/index.js.map +1 -1
- package/dist/merge/focus-merge.d.ts +16 -2
- package/dist/merge/focus-merge.d.ts.map +1 -1
- package/dist/merge/focus-merge.js +53 -30
- package/dist/merge/focus-merge.js.map +1 -1
- package/dist/merge/merge-back-loop.d.ts +5 -0
- package/dist/merge/merge-back-loop.d.ts.map +1 -1
- package/dist/merge/merge-back-loop.js +17 -8
- package/dist/merge/merge-back-loop.js.map +1 -1
- package/dist/merge/merge-gate-coverage.d.ts +94 -0
- package/dist/merge/merge-gate-coverage.d.ts.map +1 -0
- package/dist/merge/merge-gate-coverage.js +217 -0
- package/dist/merge/merge-gate-coverage.js.map +1 -0
- package/dist/prompt/focus-prompt-builder.d.ts.map +1 -1
- package/dist/prompt/focus-prompt-builder.js +6 -0
- package/dist/prompt/focus-prompt-builder.js.map +1 -1
- package/dist/prompt/prompt-listing.d.ts.map +1 -1
- package/dist/prompt/prompt-listing.js +8 -0
- package/dist/prompt/prompt-listing.js.map +1 -1
- package/dist/prompt/team-prompt-base.d.ts.map +1 -1
- package/dist/prompt/team-prompt-base.js +5 -1
- package/dist/prompt/team-prompt-base.js.map +1 -1
- package/dist/prompt-sections/execution-sections.d.ts.map +1 -1
- package/dist/prompt-sections/execution-sections.js +14 -39
- package/dist/prompt-sections/execution-sections.js.map +1 -1
- package/dist/prompt-sections/gate-ownership.d.ts +36 -0
- package/dist/prompt-sections/gate-ownership.d.ts.map +1 -0
- package/dist/prompt-sections/gate-ownership.js +68 -0
- package/dist/prompt-sections/gate-ownership.js.map +1 -0
- package/dist/prompt-sections/gate-verdict-section.d.ts +58 -0
- package/dist/prompt-sections/gate-verdict-section.d.ts.map +1 -0
- package/dist/prompt-sections/gate-verdict-section.js +88 -0
- package/dist/prompt-sections/gate-verdict-section.js.map +1 -0
- package/dist/prompt-sections/persona-sections.d.ts +10 -0
- package/dist/prompt-sections/persona-sections.d.ts.map +1 -1
- package/dist/prompt-sections/persona-sections.js +35 -11
- package/dist/prompt-sections/persona-sections.js.map +1 -1
- package/dist/prompt-sections/shared.js +1 -1
- package/dist/prompt-sections/shared.js.map +1 -1
- package/dist/queries/agent-resolvable-promotion.d.ts +6 -3
- package/dist/queries/agent-resolvable-promotion.d.ts.map +1 -1
- package/dist/queries/agent-resolvable-promotion.js +20 -9
- package/dist/queries/agent-resolvable-promotion.js.map +1 -1
- package/dist/queries/deliveries.d.ts +46 -4
- package/dist/queries/deliveries.d.ts.map +1 -1
- package/dist/queries/deliveries.js +69 -16
- package/dist/queries/deliveries.js.map +1 -1
- package/dist/queries/delivery-gate-state.d.ts +159 -1
- package/dist/queries/delivery-gate-state.d.ts.map +1 -1
- package/dist/queries/delivery-gate-state.js +95 -14
- package/dist/queries/delivery-gate-state.js.map +1 -1
- package/dist/queries/delivery-write-discipline.d.ts +65 -0
- package/dist/queries/delivery-write-discipline.d.ts.map +1 -0
- package/dist/queries/delivery-write-discipline.js +101 -0
- package/dist/queries/delivery-write-discipline.js.map +1 -0
- package/dist/queries/escalation-consumption.d.ts +11 -0
- package/dist/queries/escalation-consumption.d.ts.map +1 -1
- package/dist/queries/escalation-consumption.js +22 -0
- package/dist/queries/escalation-consumption.js.map +1 -1
- package/dist/queries/escalation-spool.d.ts +75 -0
- package/dist/queries/escalation-spool.d.ts.map +1 -0
- package/dist/queries/escalation-spool.js +232 -0
- package/dist/queries/escalation-spool.js.map +1 -0
- package/dist/queries/escalation-suppression.d.ts.map +1 -1
- package/dist/queries/escalation-suppression.js +2 -0
- package/dist/queries/escalation-suppression.js.map +1 -1
- package/dist/queries/escalations.js +1 -1
- package/dist/queries/filing-observation.d.ts.map +1 -1
- package/dist/queries/filing-observation.js +2 -0
- package/dist/queries/filing-observation.js.map +1 -1
- package/dist/queries/focus-discovery.d.ts +4 -4
- package/dist/queries/focus-discovery.d.ts.map +1 -1
- package/dist/queries/focus-discovery.js +1 -0
- package/dist/queries/focus-discovery.js.map +1 -1
- package/dist/queries/focus-review-approval.d.ts +84 -0
- package/dist/queries/focus-review-approval.d.ts.map +1 -0
- package/dist/queries/focus-review-approval.js +158 -0
- package/dist/queries/focus-review-approval.js.map +1 -0
- package/dist/queries/focuses.d.ts +6 -5
- package/dist/queries/focuses.d.ts.map +1 -1
- package/dist/queries/focuses.js +9 -5
- package/dist/queries/focuses.js.map +1 -1
- package/dist/queries/incident-correlation.d.ts +5 -4
- package/dist/queries/incident-correlation.d.ts.map +1 -1
- package/dist/queries/incident-correlation.js +11 -5
- package/dist/queries/incident-correlation.js.map +1 -1
- package/dist/queries/issues.d.ts.map +1 -1
- package/dist/queries/issues.js +2 -1
- package/dist/queries/issues.js.map +1 -1
- package/dist/queries/loop-refusal-observation.d.ts +64 -0
- package/dist/queries/loop-refusal-observation.d.ts.map +1 -0
- package/dist/queries/loop-refusal-observation.js +137 -0
- package/dist/queries/loop-refusal-observation.js.map +1 -0
- package/dist/queries/schemas.d.ts +9 -0
- package/dist/queries/schemas.d.ts.map +1 -1
- package/dist/queries/schemas.js +11 -3
- package/dist/queries/schemas.js.map +1 -1
- package/dist/queries/shared.js +1 -1
- package/dist/queries/verification.d.ts +15 -0
- package/dist/queries/verification.d.ts.map +1 -1
- package/dist/queries/verification.js +1 -14
- package/dist/queries/verification.js.map +1 -1
- package/dist/queries/wire-contract.generated.d.ts +3 -0
- package/dist/queries/wire-contract.generated.d.ts.map +1 -1
- package/dist/queries/wire-contract.generated.js +3 -0
- package/dist/queries/wire-contract.generated.js.map +1 -1
- package/dist/resolvers/assembly-engine.d.ts.map +1 -1
- package/dist/resolvers/assembly-engine.js +3 -1
- package/dist/resolvers/assembly-engine.js.map +1 -1
- package/dist/resolvers/git-diff-against-base.d.ts +5 -2
- package/dist/resolvers/git-diff-against-base.d.ts.map +1 -1
- package/dist/resolvers/git-diff-against-base.js +121 -39
- package/dist/resolvers/git-diff-against-base.js.map +1 -1
- package/dist/resolvers/shared/git-diff.d.ts +2 -0
- package/dist/resolvers/shared/git-diff.d.ts.map +1 -1
- package/dist/resolvers/shared/git-diff.js +5 -1
- package/dist/resolvers/shared/git-diff.js.map +1 -1
- package/dist/resolvers/shared/review-window-commits.d.ts +96 -0
- package/dist/resolvers/shared/review-window-commits.d.ts.map +1 -0
- package/dist/resolvers/shared/review-window-commits.js +262 -0
- package/dist/resolvers/shared/review-window-commits.js.map +1 -0
- package/dist/session/session-lineage.d.ts.map +1 -1
- package/dist/session/session-lineage.js +4 -1
- package/dist/session/session-lineage.js.map +1 -1
- package/dist/shell/config.d.ts.map +1 -1
- package/dist/shell/config.js +10 -9
- package/dist/shell/config.js.map +1 -1
- package/dist/shell/fail-stop.d.ts +18 -0
- package/dist/shell/fail-stop.d.ts.map +1 -0
- package/dist/shell/fail-stop.js +53 -0
- package/dist/shell/fail-stop.js.map +1 -0
- package/dist/shell/graceful-shutdown.d.ts +48 -0
- package/dist/shell/graceful-shutdown.d.ts.map +1 -0
- package/dist/shell/graceful-shutdown.js +152 -0
- package/dist/shell/graceful-shutdown.js.map +1 -0
- package/dist/shell/heartbeat.d.ts.map +1 -1
- package/dist/shell/heartbeat.js +5 -4
- package/dist/shell/heartbeat.js.map +1 -1
- package/dist/shell/log.d.ts.map +1 -1
- package/dist/shell/log.js +4 -1
- package/dist/shell/log.js.map +1 -1
- package/dist/shell/stop-request.d.ts.map +1 -1
- package/dist/shell/stop-request.js +2 -1
- package/dist/shell/stop-request.js.map +1 -1
- package/dist/shell/unified-shell-status.d.ts +6 -0
- package/dist/shell/unified-shell-status.d.ts.map +1 -1
- package/dist/shell/unified-shell-status.js +9 -2
- package/dist/shell/unified-shell-status.js.map +1 -1
- package/dist/shell/unified-shell.d.ts.map +1 -1
- package/dist/shell/unified-shell.js +41 -114
- package/dist/shell/unified-shell.js.map +1 -1
- package/dist/spawn/lifecycle.d.ts +12 -0
- package/dist/spawn/lifecycle.d.ts.map +1 -1
- package/dist/spawn/lifecycle.js +25 -21
- package/dist/spawn/lifecycle.js.map +1 -1
- package/dist/spawn/prompt-assembly.d.ts +19 -1
- package/dist/spawn/prompt-assembly.d.ts.map +1 -1
- package/dist/spawn/prompt-assembly.js +70 -21
- package/dist/spawn/prompt-assembly.js.map +1 -1
- package/dist/spawn/review-hold-park.d.ts.map +1 -1
- package/dist/spawn/review-hold-park.js +18 -8
- package/dist/spawn/review-hold-park.js.map +1 -1
- package/dist/spawn/spawn-cooldown.d.ts.map +1 -1
- package/dist/spawn/spawn-cooldown.js +4 -0
- package/dist/spawn/spawn-cooldown.js.map +1 -1
- package/dist/spawn/spawn-decision.d.ts.map +1 -1
- package/dist/spawn/spawn-decision.js +2 -1
- package/dist/spawn/spawn-decision.js.map +1 -1
- package/dist/spawn/worktree-session.d.ts +6 -0
- package/dist/spawn/worktree-session.d.ts.map +1 -1
- package/dist/spawn/worktree-session.js +15 -2
- package/dist/spawn/worktree-session.js.map +1 -1
- package/dist/testing/fixtures/index.d.ts +10 -1
- package/dist/testing/fixtures/index.d.ts.map +1 -1
- package/dist/testing/fixtures/index.js +59 -1
- package/dist/testing/fixtures/index.js.map +1 -1
- package/dist/testing/fixtures/pending-spawn-world.d.ts +34 -0
- package/dist/testing/fixtures/pending-spawn-world.d.ts.map +1 -0
- package/dist/testing/fixtures/pending-spawn-world.js +92 -0
- package/dist/testing/fixtures/pending-spawn-world.js.map +1 -0
- package/dist/types/config.d.ts +9 -6
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/verify/commit-gate-configured.d.ts +86 -0
- package/dist/verify/commit-gate-configured.d.ts.map +1 -0
- package/dist/verify/commit-gate-configured.js +234 -0
- package/dist/verify/commit-gate-configured.js.map +1 -0
- package/dist/verify/commit-verdict-record.d.ts +98 -0
- package/dist/verify/commit-verdict-record.d.ts.map +1 -0
- package/dist/verify/commit-verdict-record.js +297 -0
- package/dist/verify/commit-verdict-record.js.map +1 -0
- package/dist/verify/explicit-gate-outcome.d.ts +161 -0
- package/dist/verify/explicit-gate-outcome.d.ts.map +1 -0
- package/dist/verify/explicit-gate-outcome.js +215 -0
- package/dist/verify/explicit-gate-outcome.js.map +1 -0
- package/dist/verify/explicit-rearm.d.ts +27 -0
- package/dist/verify/explicit-rearm.d.ts.map +1 -0
- package/dist/verify/explicit-rearm.js +161 -0
- package/dist/verify/explicit-rearm.js.map +1 -0
- package/dist/verify/explicit-run-ledger.d.ts +26 -0
- package/dist/verify/explicit-run-ledger.d.ts.map +1 -0
- package/dist/verify/explicit-run-ledger.js +93 -0
- package/dist/verify/explicit-run-ledger.js.map +1 -0
- package/dist/verify/failure-signature.d.ts.map +1 -1
- package/dist/verify/failure-signature.js +5 -1
- package/dist/verify/failure-signature.js.map +1 -1
- package/dist/verify/gate-run-registry.d.ts +105 -0
- package/dist/verify/gate-run-registry.d.ts.map +1 -0
- package/dist/verify/gate-run-registry.js +111 -0
- package/dist/verify/gate-run-registry.js.map +1 -0
- package/dist/verify/gate-verdict-source.d.ts +68 -0
- package/dist/verify/gate-verdict-source.d.ts.map +1 -0
- package/dist/verify/gate-verdict-source.js +143 -0
- package/dist/verify/gate-verdict-source.js.map +1 -0
- package/dist/verify/judged-commit-gate.d.ts +11 -0
- package/dist/verify/judged-commit-gate.d.ts.map +1 -0
- package/dist/verify/judged-commit-gate.js +48 -0
- package/dist/verify/judged-commit-gate.js.map +1 -0
- package/dist/verify/rework-judgment.d.ts +58 -0
- package/dist/verify/rework-judgment.d.ts.map +1 -0
- package/dist/verify/rework-judgment.js +54 -0
- package/dist/verify/rework-judgment.js.map +1 -0
- package/dist/verify/verification-attribution.d.ts +105 -0
- package/dist/verify/verification-attribution.d.ts.map +1 -0
- package/dist/verify/verification-attribution.js +322 -0
- package/dist/verify/verification-attribution.js.map +1 -0
- package/dist/verify/verification-baseline-run.d.ts +123 -0
- package/dist/verify/verification-baseline-run.d.ts.map +1 -0
- package/dist/verify/verification-baseline-run.js +386 -0
- package/dist/verify/verification-baseline-run.js.map +1 -0
- package/dist/verify/verification-baseline.d.ts +117 -28
- package/dist/verify/verification-baseline.d.ts.map +1 -1
- package/dist/verify/verification-baseline.js +147 -120
- package/dist/verify/verification-baseline.js.map +1 -1
- package/dist/verify/verification-checkout.d.ts +32 -6
- package/dist/verify/verification-checkout.d.ts.map +1 -1
- package/dist/verify/verification-checkout.js +132 -8
- package/dist/verify/verification-checkout.js.map +1 -1
- package/dist/verify/verification-commit-sharing.d.ts +84 -0
- package/dist/verify/verification-commit-sharing.d.ts.map +1 -0
- package/dist/verify/verification-commit-sharing.js +416 -0
- package/dist/verify/verification-commit-sharing.js.map +1 -0
- package/dist/verify/verification-config.d.ts +76 -0
- package/dist/verify/verification-config.d.ts.map +1 -1
- package/dist/verify/verification-config.js +112 -14
- package/dist/verify/verification-config.js.map +1 -1
- package/dist/verify/verification-default-on.d.ts +102 -19
- package/dist/verify/verification-default-on.d.ts.map +1 -1
- package/dist/verify/verification-default-on.js +307 -38
- package/dist/verify/verification-default-on.js.map +1 -1
- package/dist/verify/verification-deps-default.d.ts.map +1 -1
- package/dist/verify/verification-deps-default.js +50 -43
- package/dist/verify/verification-deps-default.js.map +1 -1
- package/dist/verify/verification-deps.d.ts +86 -7
- package/dist/verify/verification-deps.d.ts.map +1 -1
- package/dist/verify/verification-deterministic.d.ts +56 -2
- package/dist/verify/verification-deterministic.d.ts.map +1 -1
- package/dist/verify/verification-deterministic.js +44 -25
- package/dist/verify/verification-deterministic.js.map +1 -1
- package/dist/verify/verification-diagnostics.d.ts +16 -0
- package/dist/verify/verification-diagnostics.d.ts.map +1 -0
- package/dist/verify/verification-diagnostics.js +219 -0
- package/dist/verify/verification-diagnostics.js.map +1 -0
- package/dist/verify/verification-engine.d.ts +12 -8
- package/dist/verify/verification-engine.d.ts.map +1 -1
- package/dist/verify/verification-engine.js +118 -102
- package/dist/verify/verification-engine.js.map +1 -1
- package/dist/verify/verification-evidence-unavailable-feedback.d.ts +2 -1
- package/dist/verify/verification-evidence-unavailable-feedback.d.ts.map +1 -1
- package/dist/verify/verification-evidence-unavailable-feedback.js +19 -5
- package/dist/verify/verification-evidence-unavailable-feedback.js.map +1 -1
- package/dist/verify/verification-feedback.d.ts +21 -34
- package/dist/verify/verification-feedback.d.ts.map +1 -1
- package/dist/verify/verification-feedback.js +37 -88
- package/dist/verify/verification-feedback.js.map +1 -1
- package/dist/verify/verification-gate-stages.d.ts +110 -0
- package/dist/verify/verification-gate-stages.d.ts.map +1 -0
- package/dist/verify/verification-gate-stages.js +179 -0
- package/dist/verify/verification-gate-stages.js.map +1 -0
- package/dist/verify/verification-history-reset.d.ts +61 -0
- package/dist/verify/verification-history-reset.d.ts.map +1 -0
- package/dist/verify/verification-history-reset.js +90 -0
- package/dist/verify/verification-history-reset.js.map +1 -0
- package/dist/verify/verification-manifest.d.ts.map +1 -1
- package/dist/verify/verification-manifest.js +3 -1
- package/dist/verify/verification-manifest.js.map +1 -1
- package/dist/verify/verification-rework-messages.d.ts +19 -0
- package/dist/verify/verification-rework-messages.d.ts.map +1 -0
- package/dist/verify/verification-rework-messages.js +52 -0
- package/dist/verify/verification-rework-messages.js.map +1 -0
- package/dist/verify/verification-timeout-fault.d.ts +147 -0
- package/dist/verify/verification-timeout-fault.d.ts.map +1 -0
- package/dist/verify/verification-timeout-fault.js +211 -0
- package/dist/verify/verification-timeout-fault.js.map +1 -0
- package/dist/verify/verify-gate-stall.d.ts +5 -1
- package/dist/verify/verify-gate-stall.d.ts.map +1 -1
- package/dist/verify/verify-gate-stall.js +10 -1
- package/dist/verify/verify-gate-stall.js.map +1 -1
- package/dist/worktree/install-inputs.d.ts +89 -0
- package/dist/worktree/install-inputs.d.ts.map +1 -0
- package/dist/worktree/install-inputs.js +625 -0
- package/dist/worktree/install-inputs.js.map +1 -0
- package/dist/worktree/install-script-effects.d.ts +30 -0
- package/dist/worktree/install-script-effects.d.ts.map +1 -0
- package/dist/worktree/install-script-effects.js +524 -0
- package/dist/worktree/install-script-effects.js.map +1 -0
- package/dist/worktree/install-script-tokens.d.ts +57 -0
- package/dist/worktree/install-script-tokens.d.ts.map +1 -0
- package/dist/worktree/install-script-tokens.js +299 -0
- package/dist/worktree/install-script-tokens.js.map +1 -0
- package/dist/worktree/provision.d.ts +27 -4
- package/dist/worktree/provision.d.ts.map +1 -1
- package/dist/worktree/provision.js +46 -7
- package/dist/worktree/provision.js.map +1 -1
- package/dist/worktree/safety.d.ts +11 -0
- package/dist/worktree/safety.d.ts.map +1 -1
- package/dist/worktree/safety.js +20 -3
- package/dist/worktree/safety.js.map +1 -1
- package/dist/worktree/verify-interlock.d.ts.map +1 -1
- package/dist/worktree/verify-interlock.js +3 -1
- package/dist/worktree/verify-interlock.js.map +1 -1
- package/dist/worktree/worktree-package-provisioning.d.ts +75 -0
- package/dist/worktree/worktree-package-provisioning.d.ts.map +1 -0
- package/dist/worktree/worktree-package-provisioning.js +362 -0
- package/dist/worktree/worktree-package-provisioning.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-inputs.js","sourceRoot":"","sources":["../../src/worktree/install-inputs.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,iEAAiE;AACjE,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8EG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAA8B,MAAM,6BAA6B,CAAC;AAKtH,2FAA2F;AAC3F,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,qBAAqB,EAAE,mBAAmB,CAAU,CAAC;AAEvF;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa;IAC5F,iBAAiB,EAAE,cAAc,EAAE,kBAAkB;CAC7C,CAAC;AAEX,mGAAmG;AACnG,MAAM,CAAC,MAAM,0BAA0B,GAAG,mBAAmB,CAAC;AAgC9D,4FAA4F;AAC5F,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,6CAA6C;AAC7C,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAC5B,MAAM,cAAc,GAAG,cAAc,CAAC;AAEtC,MAAM,aAAa,GAAG,CAAC,KAAc,EAAoC,EAAE,CACzE,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAEvE,kGAAkG;AAClG,SAAS,OAAO,CAAC,GAAW,EAAE,GAAW;IACvC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACvF,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7D,OAAO,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AACtC,CAAC;AAED,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AAE7F;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAwB,EAAE,IAAqC;IAChG,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACtG,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,UAAU,GAAG,CAAC,GAAW,EAAY,EAAE;QAC3C,IAAI,GAAG,KAAK,EAAE;YAAE,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC;QACzB,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;QACxB,OAAO,GAAG,GAAG,IAAI,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM;gBAAE,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;;gBAClC,IAAI,GAAG,GAAG,CAAC;QAClB,CAAC;QACD,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,IAAI,KAAK,GAAG,GAAG,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACjH,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IACF,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACnH,CAAC;AAED,kGAAkG;AAClG,SAAS,eAAe,CAAC,IAAY;IACnC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;QACjD,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACzD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,YAAoB,EAAE,SAAiB,UAAU;IACvF,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC;IACxD,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IACjC,OAAO,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5G,CAAC;AAED,+GAA+G;AAC/G,MAAM,UAAU,gBAAgB,CAAC,IAAsB;IACrD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;QACvC,IAAK,iBAAuC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC5E,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAChC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3B,CAAC;AA4BD,SAAS,IAAI,CAAC,IAAU,EAAE,QAAgB,EAAE,MAAc;IACxD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,IAAI,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAE/F,SAAS,QAAQ,CAAC,IAAU,EAAE,IAAY;IACxC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;AACxD,CAAC;AAED,SAAS,WAAW,CAAC,IAAU,EAAE,GAAW;IAC1C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxE,CAAC;AAED,qFAAqF;AACrF,SAAS,cAAc,CAAC,IAAU,EAAE,IAAY;IAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAClC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,IAAU,EAAE,IAAY;IACnD,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAClH,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IACzD,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC5C,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAChD,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,EAAE,CAAC;QAC7F,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,QAAQ,8DAA8D,CAAC,CAAC;QAChG,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAC/B,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7F,IAAI,GAAG,KAAK,EAAE;YAAE,SAAS;QACzB,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACtC,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI;gBAAE,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,cAAc,GAAG,CAAC,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAC/I,SAAS;QACX,CAAC;QACD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC/B,IAAI,GAAG,KAAK,IAAI;YAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,QAAQ,UAAU,GAAG,oBAAoB,CAAC,CAAC;aAChF,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AAC/B,CAAC;AAED,oGAAoG;AACpG,SAAS,aAAa,CAAC,IAAU,EAAE,GAAW,EAAE,WAAgC;IAC9E,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,IAAI,cAAc,CAAC;IACpE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,aAAa,CAAC;IAC7D,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACxD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACnD,OAAO;IACT,CAAC;IACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACpD,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACxH,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,YAAY,6DAA6D,CAAC,CAAC;QACvG,OAAO;IACT,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI;QAAE,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAChF,MAAM,KAAK,GAAiB;QAC1B,GAAG;QACH,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QAChE,OAAO,EAAE,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;QACjE,WAAW;QACX,SAAS,EAAE,IAAI,GAAG,EAAE;KACrB,CAAC;IACF,KAAK,MAAM,MAAM,IAAI,yBAAyB,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,IAAI,KAAK,SAAS;YAAE,SAAS;QACjC,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,YAAY,YAAY,MAAM,mBAAmB,CAAC,CAAC;;YACxG,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAsB,EAAE,IAAY;IACpE,MAAM,IAAI,GAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAC7G,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,iBAAiB,EAAE,QAAQ,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACjC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAChD,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI;QAAE,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9E,4EAA4E;IAC5E,qFAAqF;IACrF,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;QAAE,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACxD,OAAO,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;AACzH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAsB,EAAE,IAAY;IAC3E,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;IACrE,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAClF,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACnG,IAAI,KAAK,KAAK,IAAI;YAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,GAAG,0BAA0B,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E,iHAAiH;AACjH,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AAEhD;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAgC,IAAI,GAAG,CAAC;IAChE,CAAC,MAAM,EAAE,mFAAmF,CAAC;IAC7F,CAAC,OAAO,EAAE,eAAe,CAAC;IAC1B,CAAC,GAAG,EAAE,eAAe,CAAC;IACtB,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAC3B,CAAC,MAAM,EAAE,qEAAqE,CAAC;IAC/E,CAAC,KAAK,EAAE,+BAA+B,CAAC;IACxC,CAAC,OAAO,EAAE,qEAAqE,CAAC;IAChF,CAAC,OAAO,EAAE,6IAA6I,CAAC;CACzJ,CAAC,CAAC;AAEH,+GAA+G;AAC/G,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,MAAM,QAAQ,GAAe,EAAE,CAAC;IAChC,IAAI,KAAK,GAAa,EAAE,CAAC;IACzB,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,KAAK,GAAkB,IAAI,CAAC;IAChC,MAAM,OAAO,GAAG,GAAS,EAAE;QACzB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,GAAG,EAAE,CAAC;QACV,MAAM,GAAG,KAAK,CAAC;IACjB,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,GAAS,EAAE;QAC5B,OAAO,EAAE,CAAC;QACV,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,KAAK,GAAG,EAAE,CAAC;IACb,CAAC,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,IAAI,IAAI,KAAK,KAAK;gBAAE,KAAK,GAAG,IAAI,CAAC;;gBAC5B,IAAI,IAAI,IAAI,CAAC;QACpB,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACxC,KAAK,GAAG,IAAI,CAAC;YACb,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YACzE,UAAU,EAAE,CAAC;QACf,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,CAAC;QACZ,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,IAAI,CAAC;QACf,CAAC;IACH,CAAC;IACD,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,UAAU,EAAE,CAAC;IACb,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,cAAc,CAAC,IAAU,EAAE,KAAmB,EAAE,OAAe,EAAE,MAAc;IACtF,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,QAAQ,IAAI,MAAM,OAAO,IAAI,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC;QAC5H,OAAO;IACT,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,QAAQ;QAAE,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAU,EAAE,KAAmB,EAAE,KAAwB,EAAE,MAAc;IACrG,MAAM,CAAC,OAAO,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;IACtC,MAAM,YAAY,GAAG,CAAC,GAAW,EAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,QAAQ,IAAI,MAAM,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC3I,IAAI,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,YAAY,CAAC,wDAAwD,CAAC,CAAC;IAC5H,IAAI,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAO;IACvC,IAAI,OAAO,KAAK,MAAM;QAAE,OAAO,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAC5E,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM;QAAE,OAAO,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IACzG,IAAI,OAAO,KAAK,KAAK;QAAE,OAAO,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IACrF,IAAI,OAAO,KAAK,eAAe;QAAE,OAAO,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAC7F,IAAI,OAAO,KAAK,UAAU;QAAE,OAAO,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,6CAA6C;IAC9G,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IACtG,YAAY,CAAC,oEAAoE,CAAC,CAAC;AACrF,CAAC;AAED,qGAAqG;AACrG,SAAS,qBAAqB,CAAC,IAAU,EAAE,KAAmB,EAAE,IAAuB;IACrF,KAAK,MAAM,GAAG,IAAI,IAAI;QAAE,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACjI,CAAC;AAED,SAAS,WAAW,CAAC,IAAU,EAAE,KAAmB,EAAE,IAAuB,EAAE,YAAmC;IAChH,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAC9B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,YAAY,CAAC,yCAAyC,CAAC,CAAC;IACjH,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC5D,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,YAAY,CAAC,QAAQ,KAAK,+BAA+B,CAAC,CAAC;IACrF,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC9B,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,YAAY,CAAC,IAAU,EAAE,KAAmB,EAAE,IAAuB,EAAE,MAAc,EAAE,YAAmC;IACjI,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAC9B,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QAC5C,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAC7C,OAAO,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,YAAY,CAAC,mDAAmD,CAAC,CAAC;IAC3H,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACvC,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,YAAY,CAAC,QAAQ,KAAK,+BAA+B,CAAC,CAAC;IAC7G,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3C,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,iBAAiB,CACxB,IAAU,EAAE,KAAmB,EAAE,OAAe,EAAE,IAAuB,EAAE,MAAc,EAAE,YAAmC;IAE9H,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACzC,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,YAAY,CAAC,QAAQ,OAAO,+BAA+B,CAAC,CAAC;IAC/G,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;SAC5D,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;;QAClH,OAAO,YAAY,CAAC,QAAQ,OAAO,iDAAiD,CAAC,CAAC;IAC3F,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,0EAA0E;AAC1E,SAAS,aAAa,CAAC,IAAU,EAAE,KAAmB,EAAE,IAAuB,EAAE,MAAc,EAAE,YAAmC;IAClI,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAClC,IAAI,CAAC,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,YAAY,CAAC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;QACnI,OAAO,YAAY,CAAC,oFAAoF,CAAC,CAAC;IAC5G,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,IAAI,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI;YAAE,SAAS;QACpD,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,YAAY,CAAC,gBAAgB,MAAM,0BAA0B,CAAC,CAAC;QACpG,IAAI,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,gBAAgB;YAAE,OAAO,YAAY,CAAC,6BAA6B,CAAC,CAAC;QAChI,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5B,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,cAAc,MAAM,EAAE,CAAC,CAAC;QACnE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IACD,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,sGAAsG;AACtG,SAAS,mBAAmB,CAAC,IAAU,EAAE,KAAmB,EAAE,IAAuB,EAAE,YAAmC;IACxH,IAAI,QAAQ,GAAG,SAAS,CAAC;IACzB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,GAAG,KAAK,aAAa,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,SAAS;YAAE,QAAQ,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;aAChF,IAAI,GAAG,KAAK,iBAAiB,IAAI,GAAG,KAAK,iBAAiB;YAAE,OAAO,YAAY,CAAC,wBAAwB,GAAG,oCAAoC,CAAC,CAAC;IACxJ,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACzC,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,YAAY,CAAC,sBAAsB,QAAQ,oBAAoB,CAAC,CAAC;IAC1F,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,gDAAgD;AAChD,MAAM,eAAe,GAAG,gKAAgK,CAAC;AACzL,iHAAiH;AACjH,MAAM,iBAAiB,GAAG,gEAAgE,CAAC;AAC3F,MAAM,iBAAiB,GAAG;IACxB,2CAA2C;IAC3C,qCAAqC;IACrC,4DAA4D;IAC5D,gCAAgC;CACjC,CAAC;AACF,MAAM,eAAe,GAAG,kEAAkE,CAAC;AAC3F,MAAM,eAAe,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;AAC5I,MAAM,cAAc,GAAG,gCAAgC,CAAC;AAExD,0GAA0G;AAC1G,SAAS,iBAAiB,CAAC,IAAsB,EAAE,GAAW,EAAE,SAAiB;IAC/E,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,MAAM,EAAE,CAAC,CAAC;QACxD,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IACtF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,eAAe,CAAC,IAAU,EAAE,KAAmB,EAAE,IAAY,EAAE,MAAc;IACpF,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;QAAE,OAAO;IAC1C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7F,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,8GAA8G;AAC9G,SAAS,SAAS,CAAC,IAAU,EAAE,KAAmB,EAAE,IAAY;IAC9D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,iBAAiB;QAAE,OAAO,IAAI,CAAC;IACxD,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,QAAQ,wCAAwC,iBAAiB,QAAQ,CAAC,CAAC;IAC/G,OAAO,KAAK,CAAC;AACf,CAAC;AAED,4HAA4H;AAC5H,SAAS,UAAU,CAAC,IAAU,EAAE,KAAmB,EAAE,IAAY;IAC/D,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO;IACxF,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IACxC,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,gDAAgD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACzG,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,IAAI,cAAc,IAAI,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QAC9D,OAAO;IACT,CAAC;IACD,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;QACxC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/F,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QACnD,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QACtF,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;YAAE,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1F,CAAC;IACD,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACxD,CAAC;AAED,8GAA8G;AAC9G,SAAS,mBAAmB,CAAC,IAAU,EAAE,KAAmB,EAAE,IAAY,EAAE,IAAY,EAAE,OAA8B;IACtH,IAAI,OAAO,CAAC,aAAa;QAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7D,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1E,IAAI,IAAI,KAAK,IAAI;YAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,UAAU,IAAI,CAAC,IAAI,oBAAoB,CAAC,CAAC;;YACzF,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ;QAAE,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,SAAS,CAAC,CAAC;AACjG,CAAC;AAED,SAAS,aAAa,CAAC,IAAU,EAAE,KAAmB,EAAE,IAAY,EAAE,IAAY,EAAE,SAAiB;IACnG,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QAC7D,IAAI,MAAM,KAAK,IAAI;YAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,YAAY,SAAS,+BAA+B,CAAC,CAAC;;YACxG,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACrC,OAAO;IACT,CAAC;IACD,IAAI,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACxE,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;YACnE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,YAAY,SAAS,wDAAwD,CAAC,CAAC;QACnH,CAAC;QACD,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9G,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;WAC1G,IAAI,KAAK,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3D,mIAAmI;IACnI,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM;QAC/B,CAAC,CAAC,GAAG,IAAI,YAAY,SAAS,iEAAiE;QAC/F,CAAC,CAAC,GAAG,IAAI,YAAY,SAAS,gEAAgE,CAAC,CAAC;AACpG,CAAC;AAED,8GAA8G;AAC9G,SAAS,mBAAmB,CAAC,IAAU,EAAE,KAAmB,EAAE,IAAY,EAAE,KAAa;IACvF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO;IACjF,KAAK,MAAM,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAClC,IAAI,IAAI,KAAK,IAAI;YAAE,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;AACH,CAAC;AAED,qHAAqH;AACrH,SAAS,WAAW,CAAC,IAAU,EAAE,KAAmB,EAAE,IAAY;IAChE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;SAC7C,IAAI,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;;QACvE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/** A path a script reads, relative to its working directory (the package) or its own directory. */
|
|
2
|
+
export interface ScriptRead {
|
|
3
|
+
anchor: 'cwd' | 'script';
|
|
4
|
+
path: string;
|
|
5
|
+
}
|
|
6
|
+
/** Everything a script was followed to. */
|
|
7
|
+
export interface ResolvedScriptEffects {
|
|
8
|
+
reads: ScriptRead[];
|
|
9
|
+
/** Commands it spawns, as shell command strings (argv words single-quoted). */
|
|
10
|
+
commands: string[];
|
|
11
|
+
/** It reaches the environment, so it reads its package.json (module doc). */
|
|
12
|
+
readsManifest: boolean;
|
|
13
|
+
}
|
|
14
|
+
export type ScriptEffects = ResolvedScriptEffects | {
|
|
15
|
+
unresolvable: string;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* The builtins a scanned script may import: those whose file access the scan
|
|
19
|
+
* follows (fs, child_process, process) and those with none an install reads
|
|
20
|
+
* (pure computation, streams over a handle opened elsewhere, the network). Any
|
|
21
|
+
* other builtin (module, vm, worker_threads, sqlite, ...) is unresolvable.
|
|
22
|
+
*/
|
|
23
|
+
export declare const FOLLOWED_BUILTIN_MODULES: ReadonlySet<string>;
|
|
24
|
+
/**
|
|
25
|
+
* The reads, spawns and environment reach of one script's source (module doc),
|
|
26
|
+
* or why the scan cannot follow them. `fileName` is the script's basename (what
|
|
27
|
+
* `__filename` names under its directory).
|
|
28
|
+
*/
|
|
29
|
+
export declare function readScriptEffects(source: string, fileName: string): ScriptEffects;
|
|
30
|
+
//# sourceMappingURL=install-script-effects.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-script-effects.d.ts","sourceRoot":"","sources":["../../src/worktree/install-script-effects.ts"],"names":[],"mappings":"AA+DA,mGAAmG;AACnG,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,KAAK,GAAG,QAAQ,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,2CAA2C;AAC3C,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,6EAA6E;IAC7E,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,aAAa,GAAG,qBAAqB,GAAG;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7E;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,MAAM,CAKvD,CAAC;AA+cH;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,CAUjF"}
|
|
@@ -0,0 +1,524 @@
|
|
|
1
|
+
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
|
+
// Pinned by: packages/daemon/src/worktree/install-inputs.test.ts
|
|
3
|
+
// PINNED-BY-END
|
|
4
|
+
/**
|
|
5
|
+
* What an install script's own code does with files, child processes and the
|
|
6
|
+
* environment: the effects the install-input model (worktree/install-inputs.ts)
|
|
7
|
+
* follows beyond a script's imports and literal tokens.
|
|
8
|
+
*
|
|
9
|
+
* Why. A literal token names a file only when the path is spelled out. A script
|
|
10
|
+
* that computes its path (`const name = ['config', '.json'].join('');
|
|
11
|
+
* fs.readFileSync(name)`) or reads package metadata through the environment
|
|
12
|
+
* (`process.env.npm_package_config_mode`) consumed an input the model never saw:
|
|
13
|
+
* the data file or manifest changed behind an unchanged script, the fingerprint
|
|
14
|
+
* stayed current and parity stayed comparable.
|
|
15
|
+
*
|
|
16
|
+
* The scan reads the script's tokens (worktree/install-script-tokens.ts) and
|
|
17
|
+
* follows, soundly or not at all:
|
|
18
|
+
* - READS: every call of a builtin that reads, lists, stats or copies a path
|
|
19
|
+
* (fs / fs/promises, process.loadEnvFile). The path argument must resolve
|
|
20
|
+
* statically -- string literals and templates, `+`, a `const` bound once,
|
|
21
|
+
* a parameter every call site of its named function passes a resolvable
|
|
22
|
+
* value, `path` join/resolve/dirname, `__dirname`/`__filename`,
|
|
23
|
+
* `import.meta` dirname/filename, `process.cwd()` -- to paths under the
|
|
24
|
+
* working directory or the script's directory. A path under `os.homedir()`,
|
|
25
|
+
* `os.tmpdir()` or an absolute literal is host state, not a tracked input;
|
|
26
|
+
* - SPAWNS: every child_process call. Its command and arguments must resolve
|
|
27
|
+
* to literal strings, which the model follows as lifecycle commands; a
|
|
28
|
+
* `cwd`, `shell` or node-flag option, or options it cannot see, do not;
|
|
29
|
+
* - THE ENVIRONMENT: any reach into it (`env`, `npm_package_*`, `process` as
|
|
30
|
+
* a value) consumes the package's whole package.json. npm exports the
|
|
31
|
+
* manifest to lifecycle scripts as npm_package_* (and its path as
|
|
32
|
+
* npm_package_json); every other variable npm derives from a tracked file
|
|
33
|
+
* comes from .npmrc, already a manifest input.
|
|
34
|
+
*
|
|
35
|
+
* Fail closed: anything else touching those capabilities is UNRESOLVABLE --
|
|
36
|
+
* a path or command that does not resolve, a builtin I/O function used other
|
|
37
|
+
* than in a direct call (aliased, passed as a value, bound), the fs or
|
|
38
|
+
* child_process module used other than through a member, a glob or symlink,
|
|
39
|
+
* `require` used as a value, the global object or `Function`, `process[...]`,
|
|
40
|
+
* or source the tokenizer does not read. The caller reports it, naming the
|
|
41
|
+
* script and this reason.
|
|
42
|
+
*
|
|
43
|
+
* @module worktree/install-script-effects
|
|
44
|
+
*/
|
|
45
|
+
import { posix } from 'node:path';
|
|
46
|
+
import { VARIABLE_DECLARES, bindingsOf, expressionEnd, isBinding, isProperty, isPunct, isWord, itemsOf, readScript, wordIn, } from './install-script-tokens.js';
|
|
47
|
+
/**
|
|
48
|
+
* The builtins a scanned script may import: those whose file access the scan
|
|
49
|
+
* follows (fs, child_process, process) and those with none an install reads
|
|
50
|
+
* (pure computation, streams over a handle opened elsewhere, the network). Any
|
|
51
|
+
* other builtin (module, vm, worker_threads, sqlite, ...) is unresolvable.
|
|
52
|
+
*/
|
|
53
|
+
export const FOLLOWED_BUILTIN_MODULES = new Set([
|
|
54
|
+
'fs', 'fs/promises', 'child_process', 'process', 'path', 'path/posix', 'os', 'url', 'util', 'util/types',
|
|
55
|
+
'crypto', 'events', 'assert', 'assert/strict', 'buffer', 'string_decoder', 'querystring', 'stream',
|
|
56
|
+
'stream/promises', 'zlib', 'timers', 'timers/promises', 'console', 'perf_hooks', 'readline',
|
|
57
|
+
'readline/promises', 'http', 'https', 'net', 'dns', 'dns/promises', 'tls', 'tty', 'diagnostics_channel',
|
|
58
|
+
]);
|
|
59
|
+
/** The builtin modules whose functions the scan interprets, by specifier. */
|
|
60
|
+
const BOUND_MODULES = new Map([
|
|
61
|
+
['fs', 'fs'], ['fs/promises', 'fs'], ['path', 'path'], ['path/posix', 'path'], ['os', 'os'],
|
|
62
|
+
['child_process', 'child_process'], ['process', 'process'], ['url', 'url'],
|
|
63
|
+
]);
|
|
64
|
+
const moduleOf = (token) => (token?.kind === 'string' ? BOUND_MODULES.get(token.value.replace(/^node:/, '')) : undefined);
|
|
65
|
+
/** The plain (`a`) and aliased (`a as b` / `a: b`) names of a `{...}` import or destructuring list, as [local, exported]. */
|
|
66
|
+
function specifiers(script, open, alias) {
|
|
67
|
+
const found = [];
|
|
68
|
+
for (const { start, end } of itemsOf(script, open)) {
|
|
69
|
+
const [name, word, local] = script.tokens.slice(start, end);
|
|
70
|
+
if (end - start === 1 && name.kind === 'ident')
|
|
71
|
+
found.push([name.value, name.value]);
|
|
72
|
+
else if (end - start === 3 && name.kind === 'ident' && word.value === alias && local.kind === 'ident')
|
|
73
|
+
found.push([local.value, name.value]);
|
|
74
|
+
}
|
|
75
|
+
return found;
|
|
76
|
+
}
|
|
77
|
+
function importBindings(script, index) {
|
|
78
|
+
const { tokens, close } = script;
|
|
79
|
+
const locals = [];
|
|
80
|
+
let at = index + 1;
|
|
81
|
+
if (tokens[at]?.kind === 'ident' && !isWord(tokens[at], 'from')) {
|
|
82
|
+
locals.push([tokens[at].value, 'default']);
|
|
83
|
+
at += isPunct(tokens[at + 1], ',') ? 2 : 1;
|
|
84
|
+
}
|
|
85
|
+
if (isPunct(tokens[at], '*') && isWord(tokens[at + 1], 'as') && tokens[at + 2]?.kind === 'ident') {
|
|
86
|
+
locals.push([tokens[at + 2].value, '*']);
|
|
87
|
+
at += 3;
|
|
88
|
+
}
|
|
89
|
+
else if (isPunct(tokens[at], '{')) {
|
|
90
|
+
locals.push(...specifiers(script, at, 'as'));
|
|
91
|
+
at = close[at] + 1;
|
|
92
|
+
}
|
|
93
|
+
const module = isWord(tokens[at], 'from') ? moduleOf(tokens[at + 1]) : undefined;
|
|
94
|
+
return module === undefined ? [] : locals.map(([local, name]) => [local, { module, name }]);
|
|
95
|
+
}
|
|
96
|
+
function requireBindings(script, index) {
|
|
97
|
+
const { tokens, open } = script;
|
|
98
|
+
const module = isPunct(tokens[index + 1], '(') && script.close[index + 1] === index + 3 ? moduleOf(tokens[index + 2]) : undefined;
|
|
99
|
+
if (module === undefined || !isPunct(tokens[index - 1], '='))
|
|
100
|
+
return [];
|
|
101
|
+
const member = isPunct(tokens[index + 4], '.') && tokens[index + 5]?.kind === 'ident' ? tokens[index + 5].value : '*';
|
|
102
|
+
const target = tokens[index - 2];
|
|
103
|
+
if (target?.kind === 'ident' && wordIn(tokens[index - 3], VARIABLE_DECLARES))
|
|
104
|
+
return [[target.value, { module, name: member }]];
|
|
105
|
+
if (!isPunct(target, '}') || member !== '*' || !wordIn(tokens[open[index - 2] - 1], VARIABLE_DECLARES))
|
|
106
|
+
return [];
|
|
107
|
+
return specifiers(script, open[index - 2], ':').map(([local, name]) => [local, { module, name }]);
|
|
108
|
+
}
|
|
109
|
+
/** Every variable bound exactly once to a followed builtin module or one of its exports. */
|
|
110
|
+
function readModuleBindings(script) {
|
|
111
|
+
const found = [];
|
|
112
|
+
for (const [word, read] of [['import', importBindings], ['require', requireBindings]]) {
|
|
113
|
+
for (const index of script.variables.get(word) ?? [])
|
|
114
|
+
found.push(...read(script, index));
|
|
115
|
+
}
|
|
116
|
+
return new Map(found.filter(([local]) => bindingsOf(script, local).length === 1));
|
|
117
|
+
}
|
|
118
|
+
/** `a` or `a.b` or `a.b.c` (`?.` too) between `start` and `end`, as names; null for any other shape. */
|
|
119
|
+
function memberChain(tokens, start, end) {
|
|
120
|
+
const parts = tokens.slice(start, end);
|
|
121
|
+
const chain = parts.length % 2 === 1 && parts.every((token, offset) => (offset % 2 === 0
|
|
122
|
+
? token.kind === 'ident'
|
|
123
|
+
: isPunct(token, '.') || isPunct(token, '?.')));
|
|
124
|
+
return chain ? parts.filter((_, offset) => offset % 2 === 0).map((token) => token.value) : null;
|
|
125
|
+
}
|
|
126
|
+
const NAMESPACES = new Set(['promises', 'posix']);
|
|
127
|
+
/** The builtin export `names` (a member chain) denotes, or null. `process` counts while nothing rebinds it. */
|
|
128
|
+
function exportOf(context, names) {
|
|
129
|
+
const [head, ...members] = names;
|
|
130
|
+
const bound = context.modules.get(head)
|
|
131
|
+
?? (head === 'process' && bindingsOf(context.script, 'process').length === 0 ? { module: 'process', name: '*' } : undefined);
|
|
132
|
+
if (bound === undefined)
|
|
133
|
+
return null;
|
|
134
|
+
const whole = bound.name === '*' || bound.name === 'default';
|
|
135
|
+
if (members.length === 0)
|
|
136
|
+
return whole ? null : bound;
|
|
137
|
+
if (members.length === 1 && (whole || NAMESPACES.has(bound.name)))
|
|
138
|
+
return { module: bound.module, name: members[0] };
|
|
139
|
+
if (members.length === 2 && whole && NAMESPACES.has(members[0]))
|
|
140
|
+
return { module: bound.module, name: members[1] };
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
/** Bounds on the alternatives one value carries and on nested evaluation. */
|
|
144
|
+
const MAX_VALUES = 32;
|
|
145
|
+
const MAX_DEPTH = 24;
|
|
146
|
+
const OUTSIDE = { anchor: 'outside', text: '' };
|
|
147
|
+
function normalizeRel(path) {
|
|
148
|
+
const normalized = posix.normalize(`./${path.replace(/^\/+/, '')}`).replace(/\/+$/, '');
|
|
149
|
+
return normalized === '.' ? '' : normalized;
|
|
150
|
+
}
|
|
151
|
+
/** A plain string used as a path: absolute is outside the tree, anything else is under the working directory. */
|
|
152
|
+
function asPath(part) {
|
|
153
|
+
if (part.anchor !== 'none')
|
|
154
|
+
return part;
|
|
155
|
+
return part.text.startsWith('/') ? OUTSIDE : { anchor: 'cwd', text: normalizeRel(part.text) };
|
|
156
|
+
}
|
|
157
|
+
/** `sub` under an anchored path; null when it climbs out of an outside path (it could re-enter the tree). */
|
|
158
|
+
function descend(base, sub) {
|
|
159
|
+
if (base.anchor === 'outside')
|
|
160
|
+
return sub.split('/').includes('..') ? null : base;
|
|
161
|
+
return { anchor: base.anchor, text: normalizeRel(`${base.text}/${sub}`) };
|
|
162
|
+
}
|
|
163
|
+
function product(values) {
|
|
164
|
+
let combos = [[]];
|
|
165
|
+
for (const value of values) {
|
|
166
|
+
combos = combos.flatMap((combo) => value.texts.map((text) => [...combo, { anchor: value.anchor, text }]));
|
|
167
|
+
if (combos.length > MAX_VALUES)
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
return combos;
|
|
171
|
+
}
|
|
172
|
+
/** Alternatives as one value: all known and sharing one anchor, else null. */
|
|
173
|
+
function collect(results) {
|
|
174
|
+
const known = results.filter((result) => result !== null);
|
|
175
|
+
if (known.length === 0 || known.length !== results.length || known.some((result) => result.anchor !== known[0].anchor))
|
|
176
|
+
return null;
|
|
177
|
+
return { anchor: known[0].anchor, texts: [...new Set(known.map((result) => result.text))] };
|
|
178
|
+
}
|
|
179
|
+
function concatSingles(left, right) {
|
|
180
|
+
if (right.anchor !== 'none')
|
|
181
|
+
return left.anchor === 'none' && left.text === '' ? right : null;
|
|
182
|
+
if (left.anchor === 'none')
|
|
183
|
+
return { anchor: 'none', text: left.text + right.text };
|
|
184
|
+
return right.text === '' || right.text.startsWith('/') ? descend(left, right.text) : null;
|
|
185
|
+
}
|
|
186
|
+
function concatValues(left, right) {
|
|
187
|
+
const combos = left && right ? product([left, right]) : null;
|
|
188
|
+
return combos && collect(combos.map(([head, tail]) => concatSingles(head, tail)));
|
|
189
|
+
}
|
|
190
|
+
function joinParts([first, ...rest]) {
|
|
191
|
+
if (first === undefined || rest.some((part) => part.anchor !== 'none'))
|
|
192
|
+
return null;
|
|
193
|
+
return rest.reduce((base, part) => base && descend(base, part.text), asPath(first));
|
|
194
|
+
}
|
|
195
|
+
function resolveParts(parts) {
|
|
196
|
+
return parts.reduce((base, part) => (part.anchor !== 'none' || part.text.startsWith('/')
|
|
197
|
+
? asPath(part)
|
|
198
|
+
: base && descend(base, part.text)), { anchor: 'cwd', text: '' });
|
|
199
|
+
}
|
|
200
|
+
function dirnameOf(part) {
|
|
201
|
+
if (part.anchor === 'none')
|
|
202
|
+
return { anchor: 'none', text: posix.dirname(part.text) };
|
|
203
|
+
return part.anchor === 'outside' ? part : { anchor: part.anchor, text: normalizeRel(`${part.text}/..`) };
|
|
204
|
+
}
|
|
205
|
+
const PATH_FUNCTIONS = new Map([
|
|
206
|
+
['join', joinParts],
|
|
207
|
+
['resolve', resolveParts],
|
|
208
|
+
['dirname', (parts) => (parts.length === 1 ? dirnameOf(parts[0]) : null)],
|
|
209
|
+
]);
|
|
210
|
+
const textValue = (token) => (token.value.includes('\\') ? null : { anchor: 'none', texts: [token.value] });
|
|
211
|
+
/** `import.meta.<property>` exactly. */
|
|
212
|
+
const isImportMeta = (tokens, { start, end }, property) => memberChain(tokens, start, end)?.join('.') === `import.meta.${property}`;
|
|
213
|
+
function evaluateCall(context, callee, args) {
|
|
214
|
+
const key = `${callee.module}.${callee.name}`;
|
|
215
|
+
if (key === 'os.homedir' || key === 'os.tmpdir')
|
|
216
|
+
return args.length === 0 ? { anchor: 'outside', texts: [''] } : null;
|
|
217
|
+
if (key === 'process.cwd')
|
|
218
|
+
return args.length === 0 ? { anchor: 'cwd', texts: [''] } : null;
|
|
219
|
+
if (key === 'url.fileURLToPath') {
|
|
220
|
+
return args.length === 1 && isImportMeta(context.script.tokens, args[0], 'url') ? { anchor: 'script', texts: [context.fileName] } : null;
|
|
221
|
+
}
|
|
222
|
+
const combine = callee.module === 'path' ? PATH_FUNCTIONS.get(callee.name) : undefined;
|
|
223
|
+
const values = args.map((arg) => evaluate(context, arg.start, arg.end));
|
|
224
|
+
const combos = combine && values.length > 0 && values.every((value) => value !== null) ? product(values) : null;
|
|
225
|
+
return combine && combos ? collect(combos.map(combine)) : null;
|
|
226
|
+
}
|
|
227
|
+
function evaluateTemplate(context, head, end) {
|
|
228
|
+
const { tokens, close } = context.script;
|
|
229
|
+
let value = textValue(tokens[head]);
|
|
230
|
+
let segment = head;
|
|
231
|
+
while (value !== null && tokens[segment].kind !== 'tplTail') {
|
|
232
|
+
const next = close[segment];
|
|
233
|
+
value = concatValues(concatValues(value, evaluate(context, segment + 1, next)), textValue(tokens[next]));
|
|
234
|
+
segment = next;
|
|
235
|
+
}
|
|
236
|
+
return segment === end - 1 ? value : null;
|
|
237
|
+
}
|
|
238
|
+
function evaluateName(context, name) {
|
|
239
|
+
const unbound = bindingsOf(context.script, name).length === 0;
|
|
240
|
+
if (unbound && name === '__dirname')
|
|
241
|
+
return { anchor: 'script', texts: [''] };
|
|
242
|
+
if (unbound && name === '__filename')
|
|
243
|
+
return { anchor: 'script', texts: [context.fileName] };
|
|
244
|
+
return resolveIdentifier(context, name);
|
|
245
|
+
}
|
|
246
|
+
function evaluateTerm(context, start, end) {
|
|
247
|
+
const { tokens } = context.script;
|
|
248
|
+
const first = tokens[start];
|
|
249
|
+
if (end - start === 1 && (first.kind === 'string' || first.kind === 'template'))
|
|
250
|
+
return textValue(first);
|
|
251
|
+
if (end - start === 1 && first.kind === 'ident')
|
|
252
|
+
return evaluateName(context, first.value);
|
|
253
|
+
if (first.kind === 'tplHead')
|
|
254
|
+
return evaluateTemplate(context, start, end);
|
|
255
|
+
if (isImportMeta(tokens, { start, end }, 'dirname'))
|
|
256
|
+
return { anchor: 'script', texts: [''] };
|
|
257
|
+
if (isImportMeta(tokens, { start, end }, 'filename'))
|
|
258
|
+
return { anchor: 'script', texts: [context.fileName] };
|
|
259
|
+
const open = isPunct(tokens[end - 1], ')') ? context.script.open[end - 1] : -1;
|
|
260
|
+
const chain = open > start ? memberChain(tokens, start, open) : null;
|
|
261
|
+
const callee = chain && exportOf(context, chain);
|
|
262
|
+
return callee ? evaluateCall(context, callee, itemsOf(context.script, open)) : null;
|
|
263
|
+
}
|
|
264
|
+
/** The static value of the expression in [start, end), or null when it has none the scan can name. */
|
|
265
|
+
function evaluate(context, start, end) {
|
|
266
|
+
if (start >= end || context.depth > MAX_DEPTH)
|
|
267
|
+
return null;
|
|
268
|
+
const inner = { ...context, depth: context.depth + 1 };
|
|
269
|
+
const { tokens, close, parent } = context.script;
|
|
270
|
+
if (isPunct(tokens[start], '(') && close[start] === end - 1)
|
|
271
|
+
return evaluate(inner, start + 1, end - 1);
|
|
272
|
+
const terms = [];
|
|
273
|
+
let termStart = start;
|
|
274
|
+
for (let at = start; at < end; at++) {
|
|
275
|
+
if (parent[at] !== parent[start] || !isPunct(tokens[at], '+'))
|
|
276
|
+
continue;
|
|
277
|
+
terms.push({ start: termStart, end: at });
|
|
278
|
+
termStart = at + 1;
|
|
279
|
+
}
|
|
280
|
+
if (terms.length === 0)
|
|
281
|
+
return evaluateTerm(inner, start, end);
|
|
282
|
+
terms.push({ start: termStart, end });
|
|
283
|
+
return terms.reduce((sum, term) => concatValues(sum, evaluate(inner, term.start, term.end)), { anchor: 'none', texts: [''] });
|
|
284
|
+
}
|
|
285
|
+
/** The function a simple parameter list at `group` belongs to (`const F = (...) =>`, `function F(...)`), unless it is exported. */
|
|
286
|
+
function functionName(script, group) {
|
|
287
|
+
const { tokens, close } = script;
|
|
288
|
+
let nameAt = -1;
|
|
289
|
+
if (isPunct(tokens[close[group] + 1], '=>')) {
|
|
290
|
+
const assign = isWord(tokens[group - 1], 'async') ? group - 2 : group - 1;
|
|
291
|
+
if (isPunct(tokens[assign], '=') && isWord(tokens[assign - 2], 'const'))
|
|
292
|
+
nameAt = assign - 1;
|
|
293
|
+
}
|
|
294
|
+
else if (isWord(tokens[group - 2], 'function')) {
|
|
295
|
+
nameAt = group - 1;
|
|
296
|
+
}
|
|
297
|
+
const exported = tokens.slice(Math.max(0, nameAt - 4), Math.max(0, nameAt)).some((token) => isWord(token, 'export'));
|
|
298
|
+
return nameAt >= 0 && tokens[nameAt].kind === 'ident' && !exported ? tokens[nameAt].value : null;
|
|
299
|
+
}
|
|
300
|
+
/** A parameter's value: what every call of its named function passes in its position, when each call site resolves. */
|
|
301
|
+
function resolveParameter(context, at) {
|
|
302
|
+
const { tokens, parent } = context.script;
|
|
303
|
+
const group = parent[at];
|
|
304
|
+
const simple = group >= 0 && isPunct(tokens[group], '(')
|
|
305
|
+
&& (isPunct(tokens[at - 1], '(') || isPunct(tokens[at - 1], ','))
|
|
306
|
+
&& (isPunct(tokens[at + 1], ')') || isPunct(tokens[at + 1], ','));
|
|
307
|
+
const callee = simple ? functionName(context.script, group) : null;
|
|
308
|
+
if (callee === null)
|
|
309
|
+
return null;
|
|
310
|
+
const position = itemsOf(context.script, group).findIndex((item) => item.start === at);
|
|
311
|
+
const uses = (context.script.variables.get(callee) ?? []).filter((index) => !isBinding(context.script, index));
|
|
312
|
+
if (bindingsOf(context.script, callee).length !== 1 || uses.length === 0 || uses.some((index) => !isPunct(tokens[index + 1], '(')))
|
|
313
|
+
return null;
|
|
314
|
+
return collectValues(uses.map((index) => {
|
|
315
|
+
const argument = itemsOf(context.script, index + 1)[position];
|
|
316
|
+
return argument === undefined ? null : evaluate(context, argument.start, argument.end);
|
|
317
|
+
}));
|
|
318
|
+
}
|
|
319
|
+
function collectValues(values) {
|
|
320
|
+
const known = values.filter((value) => value !== null);
|
|
321
|
+
if (known.length !== values.length)
|
|
322
|
+
return null;
|
|
323
|
+
return collect(known.flatMap((value) => value.texts.map((text) => ({ anchor: value.anchor, text }))));
|
|
324
|
+
}
|
|
325
|
+
/** A variable's value: its one `const` initializer, or its function's call sites; null for anything else. */
|
|
326
|
+
function resolveIdentifier(context, name) {
|
|
327
|
+
const { script } = context;
|
|
328
|
+
const bindings = bindingsOf(script, name);
|
|
329
|
+
if (script.opaqueScope || bindings.length !== 1)
|
|
330
|
+
return null;
|
|
331
|
+
const [at] = bindings;
|
|
332
|
+
if (isWord(script.tokens[at - 1], 'const') && isPunct(script.tokens[at + 1], '=')) {
|
|
333
|
+
return evaluate(context, at + 2, expressionEnd(script, at + 2));
|
|
334
|
+
}
|
|
335
|
+
return resolveParameter(context, at);
|
|
336
|
+
}
|
|
337
|
+
// ---------------------------------------------------------------------------
|
|
338
|
+
// Effects
|
|
339
|
+
// ---------------------------------------------------------------------------
|
|
340
|
+
/** Builtin functions that read, list, stat or copy the path in their first argument. */
|
|
341
|
+
const PATH_READS = new Set([
|
|
342
|
+
'readFile', 'readFileSync', 'readdir', 'readdirSync', 'opendir', 'opendirSync', 'createReadStream', 'exists',
|
|
343
|
+
'existsSync', 'stat', 'statSync', 'lstat', 'lstatSync', 'statfs', 'statfsSync', 'access', 'accessSync', 'realpath',
|
|
344
|
+
'realpathSync', 'readlink', 'readlinkSync', 'open', 'openSync', 'openAsBlob', 'watch', 'watchFile', 'cp', 'cpSync',
|
|
345
|
+
'copyFile', 'copyFileSync', 'rename', 'renameSync', 'link', 'linkSync', 'loadEnvFile',
|
|
346
|
+
]);
|
|
347
|
+
/** Builtin functions whose file access the scan does not enumerate: a pattern, a link target resolved later. */
|
|
348
|
+
const OPAQUE_ACCESS = new Set(['glob', 'globSync', 'symlink', 'symlinkSync']);
|
|
349
|
+
const SHELL_SPAWNS = new Set(['exec', 'execSync']);
|
|
350
|
+
const ARGV_SPAWNS = new Set(['execFile', 'execFileSync', 'spawn', 'spawnSync', 'fork']);
|
|
351
|
+
/** Spawn options that change what a command resolves against or how it runs. */
|
|
352
|
+
const UNFOLLOWED_SPAWN_OPTIONS = new Set(['cwd', 'shell', 'argv0', 'execPath', 'execArgv']);
|
|
353
|
+
/** Names that reach code or the environment around every declaration. */
|
|
354
|
+
const GLOBAL_REACH = new Set(['globalThis', 'global', 'Function']);
|
|
355
|
+
/** The builtin module an effect function must come from. */
|
|
356
|
+
function effectModule(name) {
|
|
357
|
+
if (name === 'loadEnvFile')
|
|
358
|
+
return 'process';
|
|
359
|
+
return SHELL_SPAWNS.has(name) || ARGV_SPAWNS.has(name) ? 'child_process' : 'fs';
|
|
360
|
+
}
|
|
361
|
+
/** The delimiters a token's raw value is rendered between. */
|
|
362
|
+
const DELIMITERS = {
|
|
363
|
+
string: ["'", "'"], template: ['`', '`'], tplHead: ['`', '${'], tplMiddle: ['}', '${'], tplTail: ['}', '`'],
|
|
364
|
+
};
|
|
365
|
+
/** Source text for a message, clipped. */
|
|
366
|
+
function render(tokens) {
|
|
367
|
+
const text = tokens.map((token, index) => {
|
|
368
|
+
const spaced = index > 0 && /^[\w$]/.test(token.value) && /[\w$]$/.test(tokens[index - 1].value) ? ' ' : '';
|
|
369
|
+
const [open, close] = DELIMITERS[token.kind] ?? ['', ''];
|
|
370
|
+
return `${spaced}${open}${token.value}${close}`;
|
|
371
|
+
}).join('');
|
|
372
|
+
return text.length > 120 ? `${text.slice(0, 117)}...` : text;
|
|
373
|
+
}
|
|
374
|
+
/** A plain-text value's alternatives, or null. */
|
|
375
|
+
const plainTexts = (value) => (value?.anchor === 'none' ? value.texts : null);
|
|
376
|
+
/** Options (and callbacks) a spawn passes after its command: object literals naming no unfollowed option, or functions. */
|
|
377
|
+
function followedSpawnOptions(script, slices) {
|
|
378
|
+
return slices.every(({ start, end }) => {
|
|
379
|
+
const tokens = script.tokens.slice(start, end);
|
|
380
|
+
if (isWord(tokens[0], 'function') || tokens.some((token) => isPunct(token, '=>')))
|
|
381
|
+
return true;
|
|
382
|
+
return isPunct(tokens[0], '{') && script.close[start] === end - 1 && !tokens.some((token) => wordIn(token, UNFOLLOWED_SPAWN_OPTIONS));
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
/** The commands a spawn runs, as shell strings; null when its program, arguments or options do not resolve. */
|
|
386
|
+
function spawnedCommands(context, name, args) {
|
|
387
|
+
const { script } = context;
|
|
388
|
+
const [first, second] = args;
|
|
389
|
+
if (first === undefined)
|
|
390
|
+
return null;
|
|
391
|
+
if (SHELL_SPAWNS.has(name))
|
|
392
|
+
return followedSpawnOptions(script, args.slice(1)) ? plainTexts(evaluate(context, first.start, first.end)) : null;
|
|
393
|
+
const listed = second !== undefined && isPunct(script.tokens[second.start], '[') && script.close[second.start] === second.end - 1;
|
|
394
|
+
if (!followedSpawnOptions(script, args.slice(listed ? 2 : 1)))
|
|
395
|
+
return null;
|
|
396
|
+
const words = [first, ...(listed ? itemsOf(script, second.start) : [])].map((slice) => evaluate(context, slice.start, slice.end));
|
|
397
|
+
if (words.some((word) => plainTexts(word) === null))
|
|
398
|
+
return null;
|
|
399
|
+
const argv = product([...(name === 'fork' ? [{ anchor: 'none', texts: ['node'] }] : []), ...words]);
|
|
400
|
+
if (argv === null || argv.some((combo) => combo.some((word) => word.text.includes("'"))))
|
|
401
|
+
return null;
|
|
402
|
+
return argv.map((combo) => combo.map((word) => `'${word.text}'`).join(' '));
|
|
403
|
+
}
|
|
404
|
+
/** The paths a read's first argument names; null when it does not resolve. */
|
|
405
|
+
function readPaths(context, name, args) {
|
|
406
|
+
const [first] = args;
|
|
407
|
+
const defaulted = name === 'loadEnvFile' ? { anchor: 'none', texts: ['.env'] } : null;
|
|
408
|
+
const value = first === undefined ? defaulted : evaluate(context, first.start, first.end);
|
|
409
|
+
if (value === null)
|
|
410
|
+
return null;
|
|
411
|
+
const reads = [];
|
|
412
|
+
for (const text of value.texts) {
|
|
413
|
+
const path = asPath({ anchor: value.anchor, text });
|
|
414
|
+
if (path.anchor === 'cwd' || path.anchor === 'script')
|
|
415
|
+
reads.push({ anchor: path.anchor, path: path.text });
|
|
416
|
+
}
|
|
417
|
+
return reads;
|
|
418
|
+
}
|
|
419
|
+
/** Whether the name at `index` is a specifier of an import or `require` destructuring list, and whether it is renamed there. */
|
|
420
|
+
function specifierForm(script, index) {
|
|
421
|
+
const { tokens, close } = script;
|
|
422
|
+
const group = script.parent[index];
|
|
423
|
+
if (group < 0 || !isPunct(tokens[group], '{') || !(isPunct(tokens[index - 1], '{') || isPunct(tokens[index - 1], ',')))
|
|
424
|
+
return null;
|
|
425
|
+
const importList = isWord(tokens[group - 1], 'import') || (isPunct(tokens[group - 1], ',') && isWord(tokens[group - 3], 'import'));
|
|
426
|
+
const requireList = wordIn(tokens[group - 1], VARIABLE_DECLARES) && isPunct(tokens[close[group] + 1], '=') && isWord(tokens[close[group] + 2], 'require');
|
|
427
|
+
if (!importList && !requireList)
|
|
428
|
+
return null;
|
|
429
|
+
if (isPunct(tokens[index + 1], ',') || isPunct(tokens[index + 1], '}'))
|
|
430
|
+
return 'plain';
|
|
431
|
+
return isWord(tokens[index + 1], 'as') || isPunct(tokens[index + 1], ':') ? 'aliased' : null;
|
|
432
|
+
}
|
|
433
|
+
/** A builtin file-access or spawn function's occurrence: followed into `effects`, or why it cannot be. */
|
|
434
|
+
function followEffect(context, index, effects) {
|
|
435
|
+
const { script } = context;
|
|
436
|
+
const { tokens } = script;
|
|
437
|
+
const name = tokens[index].value;
|
|
438
|
+
const form = specifierForm(script, index);
|
|
439
|
+
if (form === 'plain')
|
|
440
|
+
return null;
|
|
441
|
+
let start = index;
|
|
442
|
+
while (isProperty(tokens, start) && tokens[start - 2]?.kind === 'ident')
|
|
443
|
+
start -= 2;
|
|
444
|
+
const chain = isPunct(tokens[index + 1], '(') && !isProperty(tokens, start) ? memberChain(tokens, start, index + 1) : null;
|
|
445
|
+
if (form === 'aliased' || chain === null)
|
|
446
|
+
return `uses \`${name}\` other than in a direct call`;
|
|
447
|
+
const call = render(tokens.slice(start, script.close[index + 1] + 1));
|
|
448
|
+
const callee = exportOf(context, chain);
|
|
449
|
+
if (callee?.name !== name || callee.module !== effectModule(name))
|
|
450
|
+
return `calls \`${call}\`, which the scan does not identify as the builtin it follows`;
|
|
451
|
+
if (OPAQUE_ACCESS.has(name))
|
|
452
|
+
return `calls \`${call}\`, whose file access the scan does not enumerate`;
|
|
453
|
+
const args = itemsOf(script, index + 1);
|
|
454
|
+
if (PATH_READS.has(name)) {
|
|
455
|
+
const reads = readPaths(context, name, args);
|
|
456
|
+
if (reads === null)
|
|
457
|
+
return `reads a path the scan cannot resolve to tracked files (\`${call}\`)`;
|
|
458
|
+
effects.reads.push(...reads);
|
|
459
|
+
return null;
|
|
460
|
+
}
|
|
461
|
+
const commands = spawnedCommands(context, name, args);
|
|
462
|
+
if (commands === null)
|
|
463
|
+
return `spawns a command the scan cannot resolve (\`${call}\`)`;
|
|
464
|
+
effects.commands.push(...commands);
|
|
465
|
+
return null;
|
|
466
|
+
}
|
|
467
|
+
/** A module object (fs, child_process, fs.promises) used other than through a member: its functions escape the scan. */
|
|
468
|
+
function escapesModule(context, index) {
|
|
469
|
+
const { tokens } = context.script;
|
|
470
|
+
const token = tokens[index];
|
|
471
|
+
const next = tokens[index + 1];
|
|
472
|
+
if (isPunct(next, '.') || isPunct(next, '?.') || isBinding(context.script, index) || specifierForm(context.script, index) !== null)
|
|
473
|
+
return false;
|
|
474
|
+
if (token.value === 'promises')
|
|
475
|
+
return true;
|
|
476
|
+
const bound = !isProperty(tokens, index) ? context.modules.get(token.value) : undefined;
|
|
477
|
+
return bound !== undefined && (bound.module === 'fs' || bound.module === 'child_process') && ['*', 'default', 'promises'].includes(bound.name);
|
|
478
|
+
}
|
|
479
|
+
/** Follow one token: an environment reach marks the manifest read; returns why it cannot be followed, or null. */
|
|
480
|
+
function followToken(context, index, effects) {
|
|
481
|
+
const { tokens } = context.script;
|
|
482
|
+
const token = tokens[index];
|
|
483
|
+
if (token.value.includes('npm_package_') || (token.kind === 'ident' && token.value === 'env'))
|
|
484
|
+
effects.readsManifest = true;
|
|
485
|
+
if (token.kind !== 'ident')
|
|
486
|
+
return null;
|
|
487
|
+
const variable = !isProperty(tokens, index);
|
|
488
|
+
const next = tokens[index + 1];
|
|
489
|
+
if (variable && GLOBAL_REACH.has(token.value))
|
|
490
|
+
return `reaches the global scope dynamically (\`${token.value}\`)`;
|
|
491
|
+
if (variable && token.value === 'require' && !isPunct(next, '(') && !isPunct(next, '.'))
|
|
492
|
+
return 'uses `require` other than as a call';
|
|
493
|
+
if (variable && token.value === 'process' && bindingsOf(context.script, 'process').length === 0) {
|
|
494
|
+
if (isPunct(next, '['))
|
|
495
|
+
return 'reads `process` members dynamically (`process[...]`)';
|
|
496
|
+
if (!isPunct(next, '.') && !isPunct(next, '?.'))
|
|
497
|
+
effects.readsManifest = true;
|
|
498
|
+
}
|
|
499
|
+
if (escapesModule(context, index))
|
|
500
|
+
return `uses \`${token.value}\` other than through a member, so its functions escape the scan`;
|
|
501
|
+
if (PATH_READS.has(token.value) || OPAQUE_ACCESS.has(token.value) || SHELL_SPAWNS.has(token.value) || ARGV_SPAWNS.has(token.value)) {
|
|
502
|
+
return followEffect(context, index, effects);
|
|
503
|
+
}
|
|
504
|
+
return null;
|
|
505
|
+
}
|
|
506
|
+
/**
|
|
507
|
+
* The reads, spawns and environment reach of one script's source (module doc),
|
|
508
|
+
* or why the scan cannot follow them. `fileName` is the script's basename (what
|
|
509
|
+
* `__filename` names under its directory).
|
|
510
|
+
*/
|
|
511
|
+
export function readScriptEffects(source, fileName) {
|
|
512
|
+
const script = readScript(source);
|
|
513
|
+
if (!script)
|
|
514
|
+
return { unresolvable: 'is not source the scan can tokenize' };
|
|
515
|
+
const context = { script, modules: readModuleBindings(script), fileName, depth: 0 };
|
|
516
|
+
const effects = { reads: [], commands: [], readsManifest: false };
|
|
517
|
+
for (let index = 0; index < script.tokens.length; index++) {
|
|
518
|
+
const reason = followToken(context, index, effects);
|
|
519
|
+
if (reason !== null)
|
|
520
|
+
return { unresolvable: reason };
|
|
521
|
+
}
|
|
522
|
+
return effects;
|
|
523
|
+
}
|
|
524
|
+
//# sourceMappingURL=install-script-effects.js.map
|