@hominis/fireforge 0.49.2 → 0.51.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/CHANGELOG.md +87 -1
- package/README.md +1 -1
- package/dist/bin/fireforge.js +6 -0
- package/dist/build-info.json +4 -4
- package/dist/src/commands/build-prelock.d.ts +20 -0
- package/dist/src/commands/build-prelock.js +50 -0
- package/dist/src/commands/build.d.ts +3 -1
- package/dist/src/commands/build.js +13 -6
- package/dist/src/commands/check-report.d.ts +41 -0
- package/dist/src/commands/check-report.js +91 -0
- package/dist/src/commands/check-run.d.ts +33 -0
- package/dist/src/commands/check-run.js +112 -0
- package/dist/src/commands/check-steps.d.ts +75 -0
- package/dist/src/commands/check-steps.js +200 -0
- package/dist/src/commands/check.d.ts +32 -0
- package/dist/src/commands/check.js +160 -0
- package/dist/src/commands/config.js +5 -6
- package/dist/src/commands/declarations-report.d.ts +43 -0
- package/dist/src/commands/declarations-report.js +76 -0
- package/dist/src/commands/doctor-engine-eslint.js +6 -1
- package/dist/src/commands/doctor-source-pin.js +4 -1
- package/dist/src/commands/export-adopt-check.d.ts +38 -0
- package/dist/src/commands/export-adopt-check.js +98 -0
- package/dist/src/commands/export-flow.js +29 -14
- package/dist/src/commands/export-placement-gate.d.ts +6 -2
- package/dist/src/commands/export-placement-gate.js +8 -0
- package/dist/src/commands/export-shared.d.ts +2 -1
- package/dist/src/commands/export-staged-registration.d.ts +46 -0
- package/dist/src/commands/export-staged-registration.js +91 -0
- package/dist/src/commands/forward-import-remedy.d.ts +32 -0
- package/dist/src/commands/forward-import-remedy.js +63 -0
- package/dist/src/commands/furnace/apply.js +3 -3
- package/dist/src/commands/furnace/chrome-doc-remove.d.ts +2 -1
- package/dist/src/commands/furnace/chrome-doc-remove.js +2 -2
- package/dist/src/commands/furnace/chrome-doc.d.ts +2 -1
- package/dist/src/commands/furnace/chrome-doc.js +2 -2
- package/dist/src/commands/furnace/create.js +2 -2
- package/dist/src/commands/furnace/deploy-named.d.ts +48 -0
- package/dist/src/commands/furnace/deploy-named.js +107 -0
- package/dist/src/commands/furnace/deploy.d.ts +3 -2
- package/dist/src/commands/furnace/deploy.js +50 -86
- package/dist/src/commands/furnace/diff.js +26 -3
- package/dist/src/commands/furnace/index.js +66 -41
- package/dist/src/commands/furnace/init.js +13 -6
- package/dist/src/commands/furnace/override.js +4 -2
- package/dist/src/commands/furnace/preview.js +4 -3
- package/dist/src/commands/furnace/refresh.js +2 -2
- package/dist/src/commands/furnace/remove.js +4 -3
- package/dist/src/commands/furnace/rename-dry-run.d.ts +29 -0
- package/dist/src/commands/furnace/rename-dry-run.js +127 -0
- package/dist/src/commands/furnace/rename-helpers.d.ts +7 -0
- package/dist/src/commands/furnace/rename-helpers.js +15 -1
- package/dist/src/commands/furnace/rename-registrations.d.ts +41 -0
- package/dist/src/commands/furnace/rename-registrations.js +98 -0
- package/dist/src/commands/furnace/rename.d.ts +2 -1
- package/dist/src/commands/furnace/rename.js +28 -66
- package/dist/src/commands/furnace/scan.d.ts +9 -4
- package/dist/src/commands/furnace/scan.js +11 -9
- package/dist/src/commands/furnace/sync.js +3 -2
- package/dist/src/commands/furnace/validate-report.d.ts +45 -0
- package/dist/src/commands/furnace/validate-report.js +91 -0
- package/dist/src/commands/furnace/validate.d.ts +1 -1
- package/dist/src/commands/furnace/validate.js +151 -113
- package/dist/src/commands/furnace/validation-output.js +14 -3
- package/dist/src/commands/lint-per-patch.js +36 -61
- package/dist/src/commands/lint-per-run-checkjs.js +2 -2
- package/dist/src/commands/lint-report.d.ts +8 -4
- package/dist/src/commands/lint-report.js +20 -5
- package/dist/src/commands/lint.js +15 -34
- package/dist/src/commands/manifest.js +4 -0
- package/dist/src/commands/park.d.ts +22 -0
- package/dist/src/commands/park.js +232 -0
- package/dist/src/commands/patch/delete-gap-notice.js +3 -1
- package/dist/src/commands/patch/delete.d.ts +1 -1
- package/dist/src/commands/patch/delete.js +24 -104
- package/dist/src/commands/patch/index.d.ts +3 -3
- package/dist/src/commands/patch/index.js +10 -4
- package/dist/src/commands/patch/lint-ignore-from.d.ts +44 -0
- package/dist/src/commands/patch/lint-ignore-from.js +142 -0
- package/dist/src/commands/patch/lint-ignore.d.ts +5 -1
- package/dist/src/commands/patch/lint-ignore.js +78 -31
- package/dist/src/commands/patch/move-files-create.js +34 -18
- package/dist/src/commands/patch/move-files-into.js +15 -7
- package/dist/src/commands/patch/move-files.js +6 -2
- package/dist/src/commands/patch/removal-created-files.d.ts +48 -0
- package/dist/src/commands/patch/removal-created-files.js +83 -0
- package/dist/src/commands/patch/removal-dependents.d.ts +63 -0
- package/dist/src/commands/patch/removal-dependents.js +133 -0
- package/dist/src/commands/patch/rename.js +20 -1
- package/dist/src/commands/patch/reserve.d.ts +33 -0
- package/dist/src/commands/patch/reserve.js +152 -0
- package/dist/src/commands/patch/retire.d.ts +34 -0
- package/dist/src/commands/patch/retire.js +133 -0
- package/dist/src/commands/patch/split-plan.d.ts +17 -8
- package/dist/src/commands/patch/split-plan.js +60 -28
- package/dist/src/commands/patch/split-staged.d.ts +108 -0
- package/dist/src/commands/patch/split-staged.js +202 -0
- package/dist/src/commands/patch/split.d.ts +5 -0
- package/dist/src/commands/patch/split.js +62 -17
- package/dist/src/commands/patch/stage.d.ts +34 -0
- package/dist/src/commands/patch/stage.js +153 -0
- package/dist/src/commands/patch/staged-dependency-batch.d.ts +48 -0
- package/dist/src/commands/patch/staged-dependency-batch.js +176 -0
- package/dist/src/commands/patch/staged-dependency-entries.d.ts +36 -0
- package/dist/src/commands/patch/staged-dependency-entries.js +52 -0
- package/dist/src/commands/patch/staged-dependency-from.d.ts +14 -0
- package/dist/src/commands/patch/staged-dependency-from.js +108 -0
- package/dist/src/commands/patch/staged-dependency-remove.d.ts +31 -0
- package/dist/src/commands/patch/staged-dependency-remove.js +80 -0
- package/dist/src/commands/patch/staged-dependency.js +54 -139
- package/dist/src/commands/re-export-adjacent-registrations.d.ts +20 -0
- package/dist/src/commands/re-export-adjacent-registrations.js +75 -0
- package/dist/src/commands/re-export-adjacent.d.ts +50 -2
- package/dist/src/commands/re-export-adjacent.js +160 -40
- package/dist/src/commands/re-export-bulk-scan.d.ts +2 -1
- package/dist/src/commands/re-export-bulk-scan.js +22 -7
- package/dist/src/commands/re-export-drift.d.ts +36 -8
- package/dist/src/commands/re-export-drift.js +73 -49
- package/dist/src/commands/re-export-files.js +11 -8
- package/dist/src/commands/re-export-hunks.d.ts +35 -0
- package/dist/src/commands/re-export-hunks.js +220 -0
- package/dist/src/commands/re-export-lint.d.ts +2 -1
- package/dist/src/commands/re-export-lint.js +23 -10
- package/dist/src/commands/re-export-options.js +74 -6
- package/dist/src/commands/re-export-preflight.d.ts +23 -0
- package/dist/src/commands/re-export-preflight.js +160 -0
- package/dist/src/commands/re-export-purity-scope.d.ts +18 -0
- package/dist/src/commands/re-export-purity-scope.js +131 -0
- package/dist/src/commands/re-export-register.js +56 -17
- package/dist/src/commands/re-export-removed.d.ts +13 -2
- package/dist/src/commands/re-export-removed.js +57 -12
- package/dist/src/commands/re-export-scan-owner.d.ts +44 -0
- package/dist/src/commands/re-export-scan-owner.js +116 -0
- package/dist/src/commands/re-export-scan.d.ts +19 -9
- package/dist/src/commands/re-export-scan.js +60 -24
- package/dist/src/commands/re-export-single.js +122 -46
- package/dist/src/commands/re-export-stale-registrations.d.ts +18 -0
- package/dist/src/commands/re-export-stale-registrations.js +62 -0
- package/dist/src/commands/re-export-summary.d.ts +28 -0
- package/dist/src/commands/re-export-summary.js +36 -0
- package/dist/src/commands/re-export.js +71 -57
- package/dist/src/commands/rebase/index.js +17 -17
- package/dist/src/commands/run.js +16 -2
- package/dist/src/commands/status-check.d.ts +55 -16
- package/dist/src/commands/status-check.js +92 -37
- package/dist/src/commands/status-json.d.ts +22 -9
- package/dist/src/commands/status-json.js +47 -32
- package/dist/src/commands/status-output.js +3 -1
- package/dist/src/commands/status-scope.d.ts +37 -0
- package/dist/src/commands/status-scope.js +54 -0
- package/dist/src/commands/status.js +66 -23
- package/dist/src/commands/test-browser-preflight.js +19 -3
- package/dist/src/commands/test-build-furnace.d.ts +22 -0
- package/dist/src/commands/test-build-furnace.js +54 -0
- package/dist/src/commands/test-build-phase.js +64 -41
- package/dist/src/commands/test-checkjs.js +10 -2
- package/dist/src/commands/test-diagnose.js +7 -0
- package/dist/src/commands/test-dispatch.d.ts +39 -0
- package/dist/src/commands/test-dispatch.js +211 -0
- package/dist/src/commands/test-furnace-reach.d.ts +37 -0
- package/dist/src/commands/test-furnace-reach.js +132 -0
- package/dist/src/commands/test-modes.d.ts +16 -1
- package/dist/src/commands/test-modes.js +24 -1
- package/dist/src/commands/test-multi-verdict.d.ts +61 -0
- package/dist/src/commands/test-multi-verdict.js +111 -0
- package/dist/src/commands/test-orchestrate.d.ts +52 -0
- package/dist/src/commands/test-orchestrate.js +240 -0
- package/dist/src/commands/test-perf-scope.d.ts +50 -0
- package/dist/src/commands/test-perf-scope.js +138 -0
- package/dist/src/commands/test-prelock.d.ts +51 -0
- package/dist/src/commands/test-prelock.js +273 -0
- package/dist/src/commands/test-register.js +69 -10
- package/dist/src/commands/test-results.d.ts +62 -0
- package/dist/src/commands/test-results.js +62 -0
- package/dist/src/commands/test-run.d.ts +13 -55
- package/dist/src/commands/test-run.js +74 -99
- package/dist/src/commands/test-shards.d.ts +110 -0
- package/dist/src/commands/test-shards.js +255 -0
- package/dist/src/commands/test-stale-gate.d.ts +5 -1
- package/dist/src/commands/test-stale-gate.js +60 -28
- package/dist/src/commands/test-verdict.d.ts +11 -1
- package/dist/src/commands/test-verdict.js +28 -1
- package/dist/src/commands/test.d.ts +6 -1
- package/dist/src/commands/test.js +120 -124
- package/dist/src/commands/token-lint.d.ts +14 -0
- package/dist/src/commands/token-lint.js +151 -0
- package/dist/src/commands/token.js +10 -0
- package/dist/src/commands/verify-scope.d.ts +28 -0
- package/dist/src/commands/verify-scope.js +67 -0
- package/dist/src/commands/verify.d.ts +10 -2
- package/dist/src/commands/verify.js +67 -36
- package/dist/src/core/build-baseline-types.d.ts +46 -0
- package/dist/src/core/build-baseline-validate.js +19 -0
- package/dist/src/core/build-baseline.d.ts +5 -1
- package/dist/src/core/build-baseline.js +3 -1
- package/dist/src/core/build-overwrite-guard.d.ts +50 -0
- package/dist/src/core/build-overwrite-guard.js +84 -4
- package/dist/src/core/build-prepare.d.ts +13 -0
- package/dist/src/core/build-prepare.js +42 -10
- package/dist/src/core/build-run-record.d.ts +74 -0
- package/dist/src/core/build-run-record.js +136 -0
- package/dist/src/core/checkjs-support-heads.d.ts +41 -0
- package/dist/src/core/checkjs-support-heads.js +104 -0
- package/dist/src/core/config-paths.d.ts +2 -2
- package/dist/src/core/config-paths.js +10 -0
- package/dist/src/core/config-validate-check.d.ts +8 -0
- package/dist/src/core/config-validate-check.js +219 -0
- package/dist/src/core/config-validate-file-size.d.ts +9 -6
- package/dist/src/core/config-validate-file-size.js +91 -2
- package/dist/src/core/config-validate-history.d.ts +11 -0
- package/dist/src/core/config-validate-history.js +38 -0
- package/dist/src/core/config-validate-patch-policy.js +100 -0
- package/dist/src/core/config-validate-test-toolchains.js +21 -0
- package/dist/src/core/config-validate-token-scales.d.ts +9 -0
- package/dist/src/core/config-validate-token-scales.js +92 -0
- package/dist/src/core/config-validate.js +20 -5
- package/dist/src/core/config.d.ts +5 -0
- package/dist/src/core/config.js +16 -0
- package/dist/src/core/coverage-dispatch.d.ts +24 -0
- package/dist/src/core/coverage-dispatch.js +44 -0
- package/dist/src/core/coverage-extend.d.ts +70 -45
- package/dist/src/core/coverage-extend.js +199 -144
- package/dist/src/core/coverage-records.d.ts +108 -0
- package/dist/src/core/coverage-records.js +384 -0
- package/dist/src/core/destructive.d.ts +7 -4
- package/dist/src/core/destructive.js +10 -10
- package/dist/src/core/engine-session-lock.d.ts +16 -1
- package/dist/src/core/engine-session-lock.js +38 -10
- package/dist/src/core/export-moved-code-shape.d.ts +49 -11
- package/dist/src/core/export-moved-code-shape.js +135 -44
- package/dist/src/core/file-lock-queue.d.ts +67 -0
- package/dist/src/core/file-lock-queue.js +221 -0
- package/dist/src/core/file-lock-shared.d.ts +57 -0
- package/dist/src/core/file-lock-shared.js +117 -0
- package/dist/src/core/file-lock.d.ts +13 -25
- package/dist/src/core/file-lock.js +163 -140
- package/dist/src/core/furnace-apply-output.d.ts +10 -0
- package/dist/src/core/furnace-apply-output.js +31 -1
- package/dist/src/core/furnace-apply.js +22 -12
- package/dist/src/core/furnace-composed-source.d.ts +76 -0
- package/dist/src/core/furnace-composed-source.js +167 -0
- package/dist/src/core/furnace-config-validate-exceptions.d.ts +16 -0
- package/dist/src/core/furnace-config-validate-exceptions.js +102 -0
- package/dist/src/core/furnace-config-validate.js +14 -0
- package/dist/src/core/furnace-css-fragments.d.ts +10 -0
- package/dist/src/core/furnace-css-fragments.js +26 -0
- package/dist/src/core/furnace-operation.d.ts +3 -3
- package/dist/src/core/furnace-registration-jar-inplace.d.ts +12 -0
- package/dist/src/core/furnace-registration-jar-inplace.js +80 -0
- package/dist/src/core/furnace-registration-remove.d.ts +22 -1
- package/dist/src/core/furnace-registration-remove.js +53 -17
- package/dist/src/core/furnace-registration-rename.d.ts +26 -0
- package/dist/src/core/furnace-registration-rename.js +77 -0
- package/dist/src/core/furnace-registration.d.ts +14 -4
- package/dist/src/core/furnace-registration.js +44 -10
- package/dist/src/core/furnace-staleness.d.ts +7 -0
- package/dist/src/core/furnace-staleness.js +34 -24
- package/dist/src/core/furnace-validate-accessibility.d.ts +8 -4
- package/dist/src/core/furnace-validate-accessibility.js +71 -28
- package/dist/src/core/furnace-validate-exceptions.d.ts +48 -0
- package/dist/src/core/furnace-validate-exceptions.js +80 -0
- package/dist/src/core/furnace-validate-icon-button.d.ts +7 -0
- package/dist/src/core/furnace-validate-icon-button.js +78 -0
- package/dist/src/core/furnace-validate.js +1 -1
- package/dist/src/core/harness-port-fallback.d.ts +60 -0
- package/dist/src/core/harness-port-fallback.js +96 -0
- package/dist/src/core/history-log-file.d.ts +61 -0
- package/dist/src/core/history-log-file.js +164 -0
- package/dist/src/core/history-log.d.ts +2 -1
- package/dist/src/core/history-log.js +2 -1
- package/dist/src/core/json-preserving-edit.d.ts +22 -0
- package/dist/src/core/json-preserving-edit.js +199 -0
- package/dist/src/core/line-prefixer.d.ts +18 -0
- package/dist/src/core/line-prefixer.js +34 -0
- package/dist/src/core/mach.d.ts +7 -0
- package/dist/src/core/mach.js +32 -10
- package/dist/src/core/module-resolution-preflight.d.ts +19 -3
- package/dist/src/core/module-resolution-preflight.js +24 -6
- package/dist/src/core/negative-control-compiled.d.ts +27 -0
- package/dist/src/core/negative-control-compiled.js +73 -0
- package/dist/src/core/negative-control-diff.d.ts +51 -0
- package/dist/src/core/negative-control-diff.js +179 -0
- package/dist/src/core/negative-control.d.ts +150 -0
- package/dist/src/core/negative-control.js +399 -0
- package/dist/src/core/objdir-install-manifests.d.ts +73 -0
- package/dist/src/core/objdir-install-manifests.js +226 -0
- package/dist/src/core/park-store.d.ts +63 -0
- package/dist/src/core/park-store.js +216 -0
- package/dist/src/core/patch-export-update.d.ts +6 -0
- package/dist/src/core/patch-export-update.js +13 -3
- package/dist/src/core/patch-export.d.ts +3 -2
- package/dist/src/core/patch-export.js +22 -16
- package/dist/src/core/patch-files.js +26 -8
- package/dist/src/core/patch-lint-checkjs-any-import.d.ts +39 -0
- package/dist/src/core/patch-lint-checkjs-any-import.js +63 -0
- package/dist/src/core/patch-lint-checkjs-diagnostics.d.ts +17 -0
- package/dist/src/core/patch-lint-checkjs-diagnostics.js +32 -0
- package/dist/src/core/patch-lint-checkjs.d.ts +10 -1
- package/dist/src/core/patch-lint-checkjs.js +20 -13
- package/dist/src/core/patch-lint-code-lines.d.ts +59 -0
- package/dist/src/core/patch-lint-code-lines.js +105 -0
- package/dist/src/core/patch-lint-cross.d.ts +3 -1
- package/dist/src/core/patch-lint-cross.js +17 -4
- package/dist/src/core/patch-lint-css.d.ts +8 -2
- package/dist/src/core/patch-lint-css.js +24 -14
- package/dist/src/core/patch-lint-file-size.d.ts +12 -5
- package/dist/src/core/patch-lint-file-size.js +22 -11
- package/dist/src/core/patch-lint-forward-registration-extended.d.ts +23 -0
- package/dist/src/core/patch-lint-forward-registration-extended.js +36 -11
- package/dist/src/core/patch-lint-forward-registration.js +10 -0
- package/dist/src/core/patch-lint-ignore.d.ts +196 -0
- package/dist/src/core/patch-lint-ignore.js +429 -0
- package/dist/src/core/patch-lint-ownership.d.ts +10 -0
- package/dist/src/core/patch-lint-ownership.js +26 -0
- package/dist/src/core/patch-lint-size-thresholds.d.ts +52 -0
- package/dist/src/core/patch-lint-size-thresholds.js +110 -0
- package/dist/src/core/patch-lint-size.d.ts +117 -0
- package/dist/src/core/patch-lint-size.js +331 -0
- package/dist/src/core/patch-lint-staged-registration.d.ts +18 -1
- package/dist/src/core/patch-lint-staged-registration.js +20 -0
- package/dist/src/core/patch-lint-token-scale.d.ts +57 -0
- package/dist/src/core/patch-lint-token-scale.js +286 -0
- package/dist/src/core/patch-lint.d.ts +11 -83
- package/dist/src/core/patch-lint.js +66 -288
- package/dist/src/core/patch-lock.js +7 -6
- package/dist/src/core/patch-manifest-consistency.js +7 -6
- package/dist/src/core/patch-manifest-io.d.ts +6 -3
- package/dist/src/core/patch-manifest-io.js +27 -9
- package/dist/src/core/patch-manifest-key-order.d.ts +24 -0
- package/dist/src/core/patch-manifest-key-order.js +61 -0
- package/dist/src/core/patch-manifest-stage.d.ts +46 -0
- package/dist/src/core/patch-manifest-stage.js +96 -0
- package/dist/src/core/patch-manifest-validate.js +61 -3
- package/dist/src/core/patch-order-legal.d.ts +26 -0
- package/dist/src/core/patch-order-legal.js +88 -0
- package/dist/src/core/patch-policy-content.d.ts +40 -0
- package/dist/src/core/patch-policy-content.js +216 -0
- package/dist/src/core/patch-policy.d.ts +22 -5
- package/dist/src/core/patch-policy.js +26 -12
- package/dist/src/core/patch-retired.d.ts +57 -0
- package/dist/src/core/patch-retired.js +92 -0
- package/dist/src/core/patch-subset.d.ts +16 -0
- package/dist/src/core/patch-subset.js +66 -0
- package/dist/src/core/preflight-wait.d.ts +20 -0
- package/dist/src/core/preflight-wait.js +38 -0
- package/dist/src/core/rebase-from-version.d.ts +46 -0
- package/dist/src/core/rebase-from-version.js +71 -0
- package/dist/src/core/run-log.d.ts +26 -0
- package/dist/src/core/run-log.js +106 -4
- package/dist/src/core/run-profile.d.ts +7 -0
- package/dist/src/core/run-profile.js +7 -1
- package/dist/src/core/smoke-patterns.d.ts +5 -0
- package/dist/src/core/smoke-patterns.js +13 -0
- package/dist/src/core/test-harness-crash.d.ts +19 -1
- package/dist/src/core/test-harness-crash.js +8 -9
- package/dist/src/core/test-harness-signature.d.ts +33 -0
- package/dist/src/core/test-harness-signature.js +23 -1
- package/dist/src/core/test-raw-log.d.ts +66 -0
- package/dist/src/core/test-raw-log.js +122 -0
- package/dist/src/core/test-run-completeness.d.ts +90 -0
- package/dist/src/core/test-run-completeness.js +184 -0
- package/dist/src/core/test-stale-check.d.ts +27 -1
- package/dist/src/core/test-stale-check.js +39 -49
- package/dist/src/core/test-stale-exempt.d.ts +40 -0
- package/dist/src/core/test-stale-exempt.js +70 -0
- package/dist/src/core/test-xpcshell-retry.d.ts +2 -0
- package/dist/src/core/test-xpcshell-retry.js +2 -1
- package/dist/src/core/token-lint.d.ts +53 -0
- package/dist/src/core/token-lint.js +131 -0
- package/dist/src/core/token-sibling-sheets.d.ts +46 -0
- package/dist/src/core/token-sibling-sheets.js +119 -0
- package/dist/src/core/tree-guard.js +5 -0
- package/dist/src/core/typecheck-shim.d.ts +6 -2
- package/dist/src/core/typecheck-shim.js +205 -4
- package/dist/src/core/typecheck.js +3 -1
- package/dist/src/index.d.ts +14 -3
- package/dist/src/index.js +6 -1
- package/dist/src/types/commands/index.d.ts +2 -2
- package/dist/src/types/commands/options.d.ts +212 -24
- package/dist/src/types/commands/patches.d.ts +118 -1
- package/dist/src/types/config.d.ts +264 -0
- package/dist/src/types/config.js +9 -0
- package/dist/src/types/furnace.d.ts +63 -1
- package/dist/src/types/furnace.js +7 -0
- package/dist/src/types/index.d.ts +1 -1
- package/dist/src/utils/options.d.ts +36 -7
- package/dist/src/utils/options.js +94 -8
- package/dist/src/utils/path-glob.d.ts +15 -0
- package/dist/src/utils/path-glob.js +47 -0
- package/dist/src/utils/regex.d.ts +15 -3
- package/dist/src/utils/regex.js +37 -16
- package/docs/configuration.md +369 -11
- package/docs/exit-codes.md +18 -1
- package/docs/furnace.md +139 -3
- package/docs/lifecycle-invariants.md +65 -30
- package/docs/machine-output.md +120 -12
- package/docs/patch-workflow.md +458 -22
- package/docs/run-logs.md +20 -1
- package/docs/testing.md +346 -21
- package/package.json +3 -3
|
@@ -68,9 +68,14 @@ export function stringListOption() {
|
|
|
68
68
|
const DEFAULT_WAIT_LOCK_SECONDS = 60;
|
|
69
69
|
/** Environment variable naming a standing wait budget for the whole session. */
|
|
70
70
|
export const WAIT_LOCK_ENV_VAR = 'FIREFORGE_WAIT_LOCK';
|
|
71
|
-
/**
|
|
71
|
+
/**
|
|
72
|
+
* Bounds shared by the flag and the environment variable. The ceiling is a
|
|
73
|
+
* day: on a shared engine a re-export or `test --build` queued behind a
|
|
74
|
+
* peer's long series can need more than the hour the cap used to be, and a
|
|
75
|
+
* longer wait then had to be a requeue after exit 15.
|
|
76
|
+
*/
|
|
72
77
|
const MIN_WAIT_LOCK_SECONDS = 1;
|
|
73
|
-
const MAX_WAIT_LOCK_SECONDS =
|
|
78
|
+
export const MAX_WAIT_LOCK_SECONDS = 86_400;
|
|
74
79
|
/**
|
|
75
80
|
* Parses a wait budget from text, or undefined when it is not an integer in
|
|
76
81
|
* range. Shared by the flag and {@link WAIT_LOCK_ENV_VAR} so the two cannot
|
|
@@ -115,7 +120,7 @@ function waitLockSecondsFromEnv() {
|
|
|
115
120
|
* - absent (`undefined`) → {@link WAIT_LOCK_ENV_VAR} if set, else `undefined`
|
|
116
121
|
* (the ~1 s fail-fast),
|
|
117
122
|
* - bare flag (`true`) → {@link DEFAULT_WAIT_LOCK_SECONDS},
|
|
118
|
-
* - explicit value → integer validated into 1..
|
|
123
|
+
* - explicit value → integer validated into 1..86400.
|
|
119
124
|
*
|
|
120
125
|
* The flag always wins over the environment: the environment expresses a
|
|
121
126
|
* default for a session, and an invocation that names a budget has said
|
|
@@ -151,11 +156,11 @@ export function resolveWaitLockSeconds(value) {
|
|
|
151
156
|
* `--wait-lock` flag was threaded to. A furnace mutation takes the engine
|
|
152
157
|
* session lock and then `.fireforge/furnace.lock`. Only the first had a
|
|
153
158
|
* budget, so a contended deploy died on the file lock's fixed 30 s while
|
|
154
|
-
* its operator believed a much larger budget was in force.
|
|
155
|
-
*
|
|
156
|
-
* the
|
|
157
|
-
*
|
|
158
|
-
*
|
|
159
|
+
* its operator believed a much larger budget was in force. Every furnace
|
|
160
|
+
* leaf that takes the furnace lock threads its own `--wait-lock` into it;
|
|
161
|
+
* this is the fallback when the flag is absent, and the only budget for
|
|
162
|
+
* callers that do not thread one (doctor's furnace repair, the
|
|
163
|
+
* pre-build apply).
|
|
159
164
|
*
|
|
160
165
|
* Env-only: a flag belongs to one invocation and is passed
|
|
161
166
|
* explicitly where it applies, while the environment is exactly the place a
|
|
@@ -204,9 +209,90 @@ export function ensureWaitLockOptionEverywhere(command) {
|
|
|
204
209
|
// action can see it. Register the uniform flag only on actionable leaves.
|
|
205
210
|
if (sub.commands.length === 0 && !hasWaitLockOption(sub))
|
|
206
211
|
addAcceptedWaitLockOption(sub);
|
|
212
|
+
releasePathShapedOptionalValues(sub);
|
|
207
213
|
ensureWaitLockOptionEverywhere(sub);
|
|
208
214
|
}
|
|
209
215
|
}
|
|
216
|
+
/**
|
|
217
|
+
* Optional-value flags whose value is a number and therefore never a path.
|
|
218
|
+
* `--canary [path]` is the counter-example that must stay out: its value IS
|
|
219
|
+
* a path.
|
|
220
|
+
*/
|
|
221
|
+
const NUMERIC_OPTIONAL_VALUE_FLAGS = new Set([
|
|
222
|
+
'--wait-lock',
|
|
223
|
+
'--wait-browser',
|
|
224
|
+
'--wait-port',
|
|
225
|
+
'--shuffle',
|
|
226
|
+
]);
|
|
227
|
+
/**
|
|
228
|
+
* True for a token that reads as a path rather than a number: it has a
|
|
229
|
+
* path separator or a file extension, or is `.`/`..`. A bare word such as
|
|
230
|
+
* `nonsense` is not path-shaped, so `--wait-lock nonsense` stays the usage
|
|
231
|
+
* error it always was.
|
|
232
|
+
*/
|
|
233
|
+
export function isPathShapedArgument(token) {
|
|
234
|
+
if (/^\d+(?:\.\d+)?$/.test(token))
|
|
235
|
+
return false;
|
|
236
|
+
return token === '.' || token === '..' || /[\\/]/.test(token) || /\.[A-Za-z][\w-]*$/.test(token);
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Rewrites a command's option tokens so a path-shaped argument after a
|
|
240
|
+
* numeric optional-value flag is an operand, and the flag takes its
|
|
241
|
+
* default.
|
|
242
|
+
*
|
|
243
|
+
* Commander binds the next non-dash token to an optional value, so
|
|
244
|
+
* `fireforge test --build --wait-lock browser_x.js` failed with
|
|
245
|
+
* "--wait-lock must be an integer in 1..86400 (got "browser_x.js")": the
|
|
246
|
+
* help says the value is optional, and the obvious spelling refused. The
|
|
247
|
+
* released flag moves to the end of the option section (before any `--`),
|
|
248
|
+
* where nothing follows it, so commander reads it bare. Operands keep their
|
|
249
|
+
* relative order. The value of a required-value option (`--mach-arg
|
|
250
|
+
* --wait-lock`) is never mistaken for a flag.
|
|
251
|
+
*
|
|
252
|
+
* @param argv - The tokens commander passes to `parseOptions`
|
|
253
|
+
* @param requiredValueFlags - This command's flags that always take a value
|
|
254
|
+
* @returns The rewritten tokens
|
|
255
|
+
*/
|
|
256
|
+
export function releasePathShapedValues(argv, requiredValueFlags) {
|
|
257
|
+
const kept = [];
|
|
258
|
+
const released = [];
|
|
259
|
+
let index = 0;
|
|
260
|
+
for (; index < argv.length; index += 1) {
|
|
261
|
+
const token = argv[index] ?? '';
|
|
262
|
+
if (token === '--')
|
|
263
|
+
break;
|
|
264
|
+
const next = argv[index + 1];
|
|
265
|
+
if (requiredValueFlags.has(token) && next !== undefined) {
|
|
266
|
+
kept.push(token, next);
|
|
267
|
+
index += 1;
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
if (NUMERIC_OPTIONAL_VALUE_FLAGS.has(token) &&
|
|
271
|
+
next !== undefined &&
|
|
272
|
+
!next.startsWith('-') &&
|
|
273
|
+
isPathShapedArgument(next)) {
|
|
274
|
+
released.push(token);
|
|
275
|
+
continue;
|
|
276
|
+
}
|
|
277
|
+
kept.push(token);
|
|
278
|
+
}
|
|
279
|
+
return [...kept, ...released, ...argv.slice(index)];
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Installs {@link releasePathShapedValues} on `command` when it registers
|
|
283
|
+
* any numeric optional-value flag.
|
|
284
|
+
*/
|
|
285
|
+
function releasePathShapedOptionalValues(command) {
|
|
286
|
+
const flags = command.options.filter((option) => option.long !== undefined && NUMERIC_OPTIONAL_VALUE_FLAGS.has(option.long));
|
|
287
|
+
if (flags.length === 0)
|
|
288
|
+
return;
|
|
289
|
+
const requiredValueFlags = new Set(command.options
|
|
290
|
+
.filter((option) => option.required)
|
|
291
|
+
.flatMap((option) => [option.long, option.short])
|
|
292
|
+
.filter((flag) => flag !== undefined));
|
|
293
|
+
const parseOptions = command.parseOptions.bind(command);
|
|
294
|
+
command.parseOptions = (argv) => parseOptions(releasePathShapedValues(argv, requiredValueFlags));
|
|
295
|
+
}
|
|
210
296
|
/**
|
|
211
297
|
* Registers the shared `--wait-lock [seconds]` flag on a lock-taking
|
|
212
298
|
* command (the engine session lock for engine-mutating commands, the patch
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal path globs for policy config: `*` matches within one path segment,
|
|
3
|
+
* `?` one character of a segment, and `**` any number of whole segments
|
|
4
|
+
* (`a/**` is everything under `a/`, `**\/x` is `x` in any directory). A
|
|
5
|
+
* pattern is anchored at both ends against an engine-relative POSIX path;
|
|
6
|
+
* there is no basename-anywhere matching, so `*.toml` matches only top-level
|
|
7
|
+
* files and `**\/*.toml` matches them everywhere.
|
|
8
|
+
*
|
|
9
|
+
* Hand-rolled because the policy surface needs exactly this much and the
|
|
10
|
+
* package keeps its dependency list short.
|
|
11
|
+
*/
|
|
12
|
+
/** Compiles one glob to an anchored regular expression. */
|
|
13
|
+
export declare function globToRegExp(glob: string): RegExp;
|
|
14
|
+
/** True when `path` matches at least one of `globs`. */
|
|
15
|
+
export declare function matchesAnyGlob(path: string, globs: readonly string[]): boolean;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EUPL-1.2
|
|
2
|
+
/**
|
|
3
|
+
* Minimal path globs for policy config: `*` matches within one path segment,
|
|
4
|
+
* `?` one character of a segment, and `**` any number of whole segments
|
|
5
|
+
* (`a/**` is everything under `a/`, `**\/x` is `x` in any directory). A
|
|
6
|
+
* pattern is anchored at both ends against an engine-relative POSIX path;
|
|
7
|
+
* there is no basename-anywhere matching, so `*.toml` matches only top-level
|
|
8
|
+
* files and `**\/*.toml` matches them everywhere.
|
|
9
|
+
*
|
|
10
|
+
* Hand-rolled because the policy surface needs exactly this much and the
|
|
11
|
+
* package keeps its dependency list short.
|
|
12
|
+
*/
|
|
13
|
+
import { escapeRegex } from './regex.js';
|
|
14
|
+
/** Compiles one glob to an anchored regular expression. */
|
|
15
|
+
export function globToRegExp(glob) {
|
|
16
|
+
let source = '';
|
|
17
|
+
for (let i = 0; i < glob.length; i++) {
|
|
18
|
+
const char = glob[i] ?? '';
|
|
19
|
+
if (char === '*' && glob[i + 1] === '*') {
|
|
20
|
+
const atSegmentStart = i === 0 || glob[i - 1] === '/';
|
|
21
|
+
const followedBySlash = glob[i + 2] === '/';
|
|
22
|
+
if (atSegmentStart && followedBySlash) {
|
|
23
|
+
// `**/` : zero or more leading directories.
|
|
24
|
+
source += '(?:[^/]+/)*';
|
|
25
|
+
i += 2;
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
source += '.*';
|
|
29
|
+
i += 1;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
else if (char === '*') {
|
|
33
|
+
source += '[^/]*';
|
|
34
|
+
}
|
|
35
|
+
else if (char === '?') {
|
|
36
|
+
source += '[^/]';
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
source += escapeRegex(char);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return new RegExp(`^${source}$`);
|
|
43
|
+
}
|
|
44
|
+
/** True when `path` matches at least one of `globs`. */
|
|
45
|
+
export function matchesAnyGlob(path, globs) {
|
|
46
|
+
return globs.some((glob) => globToRegExp(glob).test(path));
|
|
47
|
+
}
|
|
@@ -16,11 +16,23 @@ export declare function hasRawCssColors(content: string): boolean;
|
|
|
16
16
|
* implementation does not model them, so two adjacent slashes inside a regex
|
|
17
17
|
* (the tail of `/https?:\/\//`) read as a `//` line comment and the rest of
|
|
18
18
|
* the line is blanked, corrupting whatever lint pass consumes the stripped
|
|
19
|
-
* text.
|
|
20
|
-
*
|
|
21
|
-
* regex strip, which handles strings but not
|
|
19
|
+
* text. The source is tokenized as a module, then as a script. Firefox
|
|
20
|
+
* chrome sources can contain constructs acorn tokenizes under neither goal.
|
|
21
|
+
* Those fall back to the legacy regex strip, which handles strings but not
|
|
22
|
+
* regex literals.
|
|
22
23
|
*/
|
|
23
24
|
export declare function stripJsComments(source: string): string;
|
|
25
|
+
/**
|
|
26
|
+
* The tokenizer half of {@link stripJsComments}: the stripped source, or
|
|
27
|
+
* `null` when acorn can tokenize it neither as a module nor as a script.
|
|
28
|
+
*
|
|
29
|
+
* Module first, then script, because chrome subscripts are scripts: a
|
|
30
|
+
* legacy octal escape is a tokenizer error only under the module goal.
|
|
31
|
+
* Callers that must not under-count when tokenizing fails (the code-line
|
|
32
|
+
* size metric) read the `null` and pick their own fallback rather than the
|
|
33
|
+
* legacy regex strip, which can blank code.
|
|
34
|
+
*/
|
|
35
|
+
export declare function stripJsCommentsParsed(source: string): string | null;
|
|
24
36
|
/**
|
|
25
37
|
* Counts the total number of raw CSS color values (hex, rgb, hsl) in content.
|
|
26
38
|
*/
|
package/dist/src/utils/regex.js
CHANGED
|
@@ -32,16 +32,47 @@ export function hasRawCssColors(content) {
|
|
|
32
32
|
* implementation does not model them, so two adjacent slashes inside a regex
|
|
33
33
|
* (the tail of `/https?:\/\//`) read as a `//` line comment and the rest of
|
|
34
34
|
* the line is blanked, corrupting whatever lint pass consumes the stripped
|
|
35
|
-
* text.
|
|
36
|
-
*
|
|
37
|
-
* regex strip, which handles strings but not
|
|
35
|
+
* text. The source is tokenized as a module, then as a script. Firefox
|
|
36
|
+
* chrome sources can contain constructs acorn tokenizes under neither goal.
|
|
37
|
+
* Those fall back to the legacy regex strip, which handles strings but not
|
|
38
|
+
* regex literals.
|
|
38
39
|
*/
|
|
39
40
|
export function stripJsComments(source) {
|
|
41
|
+
return stripJsCommentsParsed(source) ?? stripJsCommentsLegacy(source);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* The tokenizer half of {@link stripJsComments}: the stripped source, or
|
|
45
|
+
* `null` when acorn can tokenize it neither as a module nor as a script.
|
|
46
|
+
*
|
|
47
|
+
* Module first, then script, because chrome subscripts are scripts: a
|
|
48
|
+
* legacy octal escape is a tokenizer error only under the module goal.
|
|
49
|
+
* Callers that must not under-count when tokenizing fails (the code-line
|
|
50
|
+
* size metric) read the `null` and pick their own fallback rather than the
|
|
51
|
+
* legacy regex strip, which can blank code.
|
|
52
|
+
*/
|
|
53
|
+
export function stripJsCommentsParsed(source) {
|
|
54
|
+
const comments = collectJsComments(source, 'module') ?? collectJsComments(source, 'script');
|
|
55
|
+
if (comments === null)
|
|
56
|
+
return null;
|
|
57
|
+
if (comments.length === 0)
|
|
58
|
+
return source;
|
|
59
|
+
const chars = source.split('');
|
|
60
|
+
for (const { start, end } of comments) {
|
|
61
|
+
for (let i = start; i < end; i++) {
|
|
62
|
+
if (chars[i] !== '\n' && chars[i] !== '\r') {
|
|
63
|
+
chars[i] = ' ';
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return chars.join('');
|
|
68
|
+
}
|
|
69
|
+
/** Comment ranges of `source` under one parse goal, or `null` on a tokenizer error. */
|
|
70
|
+
function collectJsComments(source, sourceType) {
|
|
40
71
|
const comments = [];
|
|
41
72
|
try {
|
|
42
73
|
const t = acornTokenizer(source, {
|
|
43
74
|
ecmaVersion: 'latest',
|
|
44
|
-
sourceType
|
|
75
|
+
sourceType,
|
|
45
76
|
allowHashBang: true,
|
|
46
77
|
onComment: (_isBlock, _text, start, end) => {
|
|
47
78
|
comments.push({ start, end });
|
|
@@ -55,19 +86,9 @@ export function stripJsComments(source) {
|
|
|
55
86
|
}
|
|
56
87
|
}
|
|
57
88
|
catch {
|
|
58
|
-
return
|
|
89
|
+
return null;
|
|
59
90
|
}
|
|
60
|
-
|
|
61
|
-
return source;
|
|
62
|
-
const chars = source.split('');
|
|
63
|
-
for (const { start, end } of comments) {
|
|
64
|
-
for (let i = start; i < end; i++) {
|
|
65
|
-
if (chars[i] !== '\n' && chars[i] !== '\r') {
|
|
66
|
-
chars[i] = ' ';
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return chars.join('');
|
|
91
|
+
return comments;
|
|
71
92
|
}
|
|
72
93
|
/**
|
|
73
94
|
* Legacy pure-regex comment strip, used only when acorn cannot tokenize
|