@hominis/fireforge 0.54.0 → 0.60.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 +287 -6
- package/README.md +51 -17
- package/dist/bin/fireforge.js +34 -129
- package/dist/build-info.json +4 -4
- package/dist/src/check/check.js +394 -0
- package/dist/src/check/gate.js +448 -0
- package/dist/src/check/index.js +10 -0
- package/dist/src/check/record.js +155 -0
- package/dist/src/cli/command.js +286 -0
- package/dist/src/cli/output.js +96 -0
- package/dist/src/cli/program.js +231 -0
- package/dist/src/cli/stdio.js +59 -0
- package/dist/src/cli/version.js +99 -0
- package/dist/src/commands/bootstrap.js +17 -102
- package/dist/src/commands/build.js +34 -438
- package/dist/src/commands/check.js +44 -157
- package/dist/src/commands/config.js +50 -226
- package/dist/src/commands/discard.js +38 -215
- package/dist/src/commands/doctor.js +29 -456
- package/dist/src/commands/download.js +35 -499
- package/dist/src/commands/export.js +42 -431
- package/dist/src/commands/furnace.js +220 -0
- package/dist/src/commands/gate.js +127 -0
- package/dist/src/commands/import.js +44 -445
- package/dist/src/commands/index.js +86 -0
- package/dist/src/commands/lint.js +44 -546
- package/dist/src/commands/merge-driver.js +56 -0
- package/dist/src/commands/migrate.js +75 -0
- package/dist/src/commands/override.js +43 -0
- package/dist/src/commands/package.js +48 -77
- package/dist/src/commands/patch.js +221 -0
- package/dist/src/commands/re-export.js +55 -332
- package/dist/src/commands/rebase.js +69 -0
- package/dist/src/commands/register.js +62 -103
- package/dist/src/commands/reset.js +28 -91
- package/dist/src/commands/resolve.js +20 -167
- package/dist/src/commands/restore.js +19 -0
- package/dist/src/commands/run.js +60 -420
- package/dist/src/commands/setup.js +78 -90
- package/dist/src/commands/status.js +44 -413
- package/dist/src/commands/test.js +97 -422
- package/dist/src/commands/token.js +185 -228
- package/dist/src/commands/typecheck.js +59 -208
- package/dist/src/commands/verify.js +28 -334
- package/dist/src/commands/version.js +14 -0
- package/dist/src/commands/watch.js +20 -218
- package/dist/src/commands/wire.js +60 -349
- package/dist/src/commands/workspace.js +117 -0
- package/dist/src/config/edit.js +237 -0
- package/dist/src/config/index.js +15 -0
- package/dist/src/config/load.js +59 -0
- package/dist/src/config/previous.js +404 -0
- package/dist/src/config/schema/build.js +63 -0
- package/dist/src/config/schema/check.js +113 -0
- package/dist/src/config/schema/common.js +71 -0
- package/dist/src/config/schema/export-queue.js +36 -0
- package/dist/src/config/schema/firefox.js +69 -0
- package/dist/src/config/schema/gate.js +199 -0
- package/dist/src/config/schema/identity.js +55 -0
- package/dist/src/config/schema/index.js +45 -0
- package/dist/src/config/schema/lint.js +297 -0
- package/dist/src/config/schema/policy.js +111 -0
- package/dist/src/config/schema/source.js +90 -0
- package/dist/src/config/schema/test.js +17 -0
- package/dist/src/config/schema/toolchains.js +17 -0
- package/dist/src/config/schema/typecheck.js +29 -0
- package/dist/src/config/schema/wire.js +15 -0
- package/dist/src/diff/apply.js +129 -0
- package/dist/src/diff/index.js +16 -0
- package/dist/src/diff/model.js +267 -0
- package/dist/src/diff/query.js +65 -0
- package/dist/src/doctor/index.js +240 -0
- package/dist/src/engine/archive.js +396 -0
- package/dist/src/engine/audit.js +66 -0
- package/dist/src/engine/build.js +150 -0
- package/dist/src/engine/hostLocks.js +66 -0
- package/dist/src/engine/index.js +26 -0
- package/dist/src/engine/installManifests.js +147 -0
- package/dist/src/engine/mach.js +97 -0
- package/dist/src/engine/machHints.js +80 -0
- package/dist/src/engine/mozconfig.js +110 -0
- package/dist/src/engine/objdir.js +124 -0
- package/dist/src/engine/package.js +169 -0
- package/dist/src/engine/pin.js +12 -0
- package/dist/src/engine/pool.js +423 -0
- package/dist/src/engine/pristine.js +281 -0
- package/dist/src/engine/python.js +68 -0
- package/dist/src/engine/resourceGuard.js +582 -0
- package/dist/src/engine/run.js +259 -0
- package/dist/src/engine/smoke.js +204 -0
- package/dist/src/engine/staleness.js +229 -0
- package/dist/src/engine/watch.js +82 -0
- package/dist/src/engine/workspace.js +85 -0
- package/dist/src/furnace/config.js +360 -0
- package/dist/src/furnace/deploy.js +414 -0
- package/dist/src/furnace/diff.js +59 -0
- package/dist/src/furnace/edit.js +64 -0
- package/dist/src/furnace/fragments.js +53 -0
- package/dist/src/furnace/index.js +19 -0
- package/dist/src/furnace/operations.js +283 -0
- package/dist/src/furnace/registration.js +220 -0
- package/dist/src/furnace/scaffold.js +311 -0
- package/dist/src/furnace/typing.js +252 -0
- package/dist/src/furnace/validate.js +662 -0
- package/dist/src/git/apply.js +129 -0
- package/dist/src/git/diff.js +143 -0
- package/dist/src/git/index.js +33 -0
- package/dist/src/git/objects.js +201 -0
- package/dist/src/git/refs.js +85 -0
- package/dist/src/git/repo.js +222 -0
- package/dist/src/git/run.js +242 -0
- package/dist/src/git/status.js +156 -0
- package/dist/src/kernel/errors.js +123 -0
- package/dist/src/kernel/fs.js +515 -0
- package/dist/src/kernel/glob.js +63 -0
- package/dist/src/kernel/hash.js +28 -0
- package/dist/src/kernel/journal.js +524 -0
- package/dist/src/kernel/json-edit.js +198 -0
- package/dist/src/kernel/json.js +101 -0
- package/dist/src/kernel/lock.js +589 -0
- package/dist/src/kernel/log.js +154 -0
- package/dist/src/kernel/process/identity.js +313 -0
- package/dist/src/kernel/process/index.js +8 -0
- package/dist/src/kernel/process/listing.js +128 -0
- package/dist/src/kernel/process/spawn.js +430 -0
- package/dist/src/kernel/process/tree.js +301 -0
- package/dist/src/kernel/schema.js +308 -0
- package/dist/src/kernel/signals.js +171 -0
- package/dist/src/kernel/text.js +151 -0
- package/dist/src/kernel/time.js +83 -0
- package/dist/src/kernel/tty.js +84 -0
- package/dist/src/lint/cache.js +77 -0
- package/dist/src/lint/checkjs.js +400 -0
- package/dist/src/lint/index.js +3 -0
- package/dist/src/lint/input.js +100 -0
- package/dist/src/lint/report.js +107 -0
- package/dist/src/lint/rule.js +41 -0
- package/dist/src/lint/rules/css.js +308 -0
- package/dist/src/lint/rules/javascript.js +299 -0
- package/dist/src/lint/rules/jsdoc.js +249 -0
- package/dist/src/lint/rules/license.js +93 -0
- package/dist/src/lint/rules/policy.js +201 -0
- package/dist/src/lint/rules/registration.js +264 -0
- package/dist/src/lint/rules/size.js +299 -0
- package/dist/src/lint/run.js +126 -0
- package/dist/src/lint/shim.js +323 -0
- package/dist/src/lint/typescript.js +186 -0
- package/dist/src/lint/waivers.js +93 -0
- package/dist/src/mode/changes.js +264 -0
- package/dist/src/mode/diagnose.js +173 -0
- package/dist/src/mode/export.js +147 -0
- package/dist/src/mode/index.js +23 -0
- package/dist/src/mode/migrate.js +181 -0
- package/dist/src/mode/previousWaivers.js +206 -0
- package/dist/src/mode/pristine.js +61 -0
- package/dist/src/mode/rebase.js +197 -0
- package/dist/src/mode/report.js +157 -0
- package/dist/src/mode/setup.js +103 -0
- package/dist/src/mode/tracked.js +116 -0
- package/dist/src/mode/upgrade.js +281 -0
- package/dist/src/mode/watch.js +83 -0
- package/dist/src/mode/workspace.js +189 -0
- package/dist/src/mozbuild/index.js +6 -0
- package/dist/src/mozbuild/jar.js +366 -0
- package/dist/src/mozbuild/mozbuild.js +321 -0
- package/dist/src/mozbuild/paths.js +96 -0
- package/dist/src/mozbuild/references.js +39 -0
- package/dist/src/mozbuild/testManifest.js +343 -0
- package/dist/src/mozbuild/text.js +142 -0
- package/dist/src/project/changes.js +145 -0
- package/dist/src/project/checkout.js +66 -0
- package/dist/src/project/index.js +11 -0
- package/dist/src/project/license.js +119 -0
- package/dist/src/project/project.js +111 -0
- package/dist/src/project/state.js +85 -0
- package/dist/src/project/tracked.js +1 -0
- package/dist/src/queue/apply.js +270 -0
- package/dist/src/queue/attribute.js +159 -0
- package/dist/src/queue/baseline.js +409 -0
- package/dist/src/queue/capture.js +298 -0
- package/dist/src/queue/changes.js +234 -0
- package/dist/src/queue/index.js +50 -0
- package/dist/src/queue/manifest.js +341 -0
- package/dist/src/queue/operations.js +454 -0
- package/dist/src/queue/placement.js +220 -0
- package/dist/src/queue/queue.js +359 -0
- package/dist/src/queue/restore.js +103 -0
- package/dist/src/queue/session.js +685 -0
- package/dist/src/queue/status.js +137 -0
- package/dist/src/register/files.js +39 -0
- package/dist/src/register/index.js +8 -0
- package/dist/src/register/js.js +217 -0
- package/dist/src/register/register.js +359 -0
- package/dist/src/register/wire.js +146 -0
- package/dist/src/source/adopt.js +99 -0
- package/dist/src/source/changes.js +132 -0
- package/dist/src/source/edit.js +278 -0
- package/dist/src/source/export.js +70 -0
- package/dist/src/source/groups.js +131 -0
- package/dist/src/source/index.js +20 -0
- package/dist/src/source/materialize.js +382 -0
- package/dist/src/source/merge.js +255 -0
- package/dist/src/source/objects.js +102 -0
- package/dist/src/source/previous.js +166 -0
- package/dist/src/source/records.js +138 -0
- package/dist/src/source/refresh.js +264 -0
- package/dist/src/source/tree.js +337 -0
- package/dist/src/syntax/css.js +215 -0
- package/dist/src/syntax/fragments.js +63 -0
- package/dist/src/syntax/index.js +10 -0
- package/dist/src/syntax/js.js +270 -0
- package/dist/src/test/classify.js +826 -0
- package/dist/src/test/control.js +236 -0
- package/dist/src/test/host.js +266 -0
- package/dist/src/test/index.js +11 -0
- package/dist/src/test/plan.js +347 -0
- package/dist/src/test/rawLog.js +138 -0
- package/dist/src/test/run.js +404 -0
- package/dist/src/test/verdict.js +420 -0
- package/dist/src/test/xpcshell.js +143 -0
- package/dist/src/tokens/add.js +304 -0
- package/dist/src/tokens/coverage.js +65 -0
- package/dist/src/tokens/css.js +58 -0
- package/dist/src/tokens/index.js +12 -0
- package/dist/src/tokens/lint.js +96 -0
- package/dist/src/tokens/model.js +118 -0
- package/dist/src/tokens/settings.js +87 -0
- package/dist/src/tokens/siblings.js +104 -0
- package/dist/src/typecheck/explain.js +123 -0
- package/dist/src/typecheck/index.js +8 -0
- package/dist/src/typecheck/typecheck.js +332 -0
- package/docs/README.md +23 -28
- package/docs/authoring.md +97 -0
- package/docs/configuration.md +307 -692
- package/docs/exit-codes.md +76 -94
- package/docs/furnace.md +113 -181
- package/docs/gate.md +205 -0
- package/docs/getting-started.md +165 -0
- package/docs/machine-output.md +201 -277
- package/docs/migrating.md +261 -0
- package/docs/patch-workflow.md +163 -653
- package/docs/quality.md +220 -0
- package/docs/source-workflow.md +228 -0
- package/docs/testing.md +101 -712
- package/docs/workspaces.md +187 -0
- package/package.json +22 -30
- package/templates/configs/common.mozconfig +8 -2
- package/templates/configs/darwin.mozconfig +6 -7
- package/templates/configs/linux.mozconfig +5 -8
- package/templates/configs/win32.mozconfig +3 -9
- package/dist/bin/fireforge.d.ts +0 -9
- package/dist/src/cli-usage-error.d.ts +0 -46
- package/dist/src/cli-usage-error.js +0 -81
- package/dist/src/cli.d.ts +0 -41
- package/dist/src/cli.js +0 -380
- package/dist/src/commands/bootstrap-checks.d.ts +0 -16
- package/dist/src/commands/bootstrap-checks.js +0 -66
- package/dist/src/commands/bootstrap.d.ts +0 -10
- package/dist/src/commands/build-prelock.d.ts +0 -20
- package/dist/src/commands/build-prelock.js +0 -50
- package/dist/src/commands/build.d.ts +0 -13
- package/dist/src/commands/check-report.d.ts +0 -41
- package/dist/src/commands/check-report.js +0 -91
- package/dist/src/commands/check-run.d.ts +0 -33
- package/dist/src/commands/check-run.js +0 -112
- package/dist/src/commands/check-steps.d.ts +0 -75
- package/dist/src/commands/check-steps.js +0 -200
- package/dist/src/commands/check.d.ts +0 -32
- package/dist/src/commands/config.d.ts +0 -13
- package/dist/src/commands/declarations-report.d.ts +0 -49
- package/dist/src/commands/declarations-report.js +0 -83
- package/dist/src/commands/destructive-decision.d.ts +0 -19
- package/dist/src/commands/destructive-decision.js +0 -31
- package/dist/src/commands/discard.d.ts +0 -12
- package/dist/src/commands/doctor-check-core.d.ts +0 -110
- package/dist/src/commands/doctor-check-core.js +0 -24
- package/dist/src/commands/doctor-engine-eslint.d.ts +0 -3
- package/dist/src/commands/doctor-engine-eslint.js +0 -17
- package/dist/src/commands/doctor-external-toolchains.d.ts +0 -3
- package/dist/src/commands/doctor-external-toolchains.js +0 -56
- package/dist/src/commands/doctor-furnace-config-sync.d.ts +0 -18
- package/dist/src/commands/doctor-furnace-config-sync.js +0 -295
- package/dist/src/commands/doctor-furnace-jar.d.ts +0 -14
- package/dist/src/commands/doctor-furnace-jar.js +0 -44
- package/dist/src/commands/doctor-furnace.d.ts +0 -8
- package/dist/src/commands/doctor-furnace.js +0 -514
- package/dist/src/commands/doctor-macos-sdk.d.ts +0 -8
- package/dist/src/commands/doctor-macos-sdk.js +0 -158
- package/dist/src/commands/doctor-orphaned-harness.d.ts +0 -41
- package/dist/src/commands/doctor-orphaned-harness.js +0 -98
- package/dist/src/commands/doctor-patch-manifest.d.ts +0 -9
- package/dist/src/commands/doctor-patch-manifest.js +0 -156
- package/dist/src/commands/doctor-post-rebase-audit.d.ts +0 -2
- package/dist/src/commands/doctor-post-rebase-audit.js +0 -108
- package/dist/src/commands/doctor-source-pin.d.ts +0 -29
- package/dist/src/commands/doctor-source-pin.js +0 -91
- package/dist/src/commands/doctor-working-tree.d.ts +0 -27
- package/dist/src/commands/doctor-working-tree.js +0 -89
- package/dist/src/commands/doctor.d.ts +0 -49
- package/dist/src/commands/download.d.ts +0 -11
- package/dist/src/commands/export-adopt-check.d.ts +0 -37
- package/dist/src/commands/export-adopt-check.js +0 -97
- package/dist/src/commands/export-all.d.ts +0 -11
- package/dist/src/commands/export-all.js +0 -361
- package/dist/src/commands/export-flow.d.ts +0 -124
- package/dist/src/commands/export-flow.js +0 -423
- package/dist/src/commands/export-placement-conflicts.d.ts +0 -17
- package/dist/src/commands/export-placement-conflicts.js +0 -75
- package/dist/src/commands/export-placement-gate.d.ts +0 -42
- package/dist/src/commands/export-placement-gate.js +0 -107
- package/dist/src/commands/export-placement-policy.d.ts +0 -22
- package/dist/src/commands/export-placement-policy.js +0 -54
- package/dist/src/commands/export-shared.d.ts +0 -152
- package/dist/src/commands/export-shared.js +0 -396
- package/dist/src/commands/export-staged-registration.d.ts +0 -46
- package/dist/src/commands/export-staged-registration.js +0 -91
- package/dist/src/commands/export.d.ts +0 -13
- package/dist/src/commands/forward-import-remedy.d.ts +0 -31
- package/dist/src/commands/forward-import-remedy.js +0 -62
- package/dist/src/commands/furnace/apply.d.ts +0 -8
- package/dist/src/commands/furnace/apply.js +0 -327
- package/dist/src/commands/furnace/authoring-config.d.ts +0 -13
- package/dist/src/commands/furnace/authoring-config.js +0 -19
- package/dist/src/commands/furnace/chrome-doc-remove.d.ts +0 -14
- package/dist/src/commands/furnace/chrome-doc-remove.js +0 -148
- package/dist/src/commands/furnace/chrome-doc-templates.d.ts +0 -152
- package/dist/src/commands/furnace/chrome-doc-templates.js +0 -331
- package/dist/src/commands/furnace/chrome-doc-tests.d.ts +0 -23
- package/dist/src/commands/furnace/chrome-doc-tests.js +0 -148
- package/dist/src/commands/furnace/chrome-doc.d.ts +0 -87
- package/dist/src/commands/furnace/chrome-doc.js +0 -365
- package/dist/src/commands/furnace/create-browser-test.d.ts +0 -44
- package/dist/src/commands/furnace/create-browser-test.js +0 -179
- package/dist/src/commands/furnace/create-dry-run.d.ts +0 -49
- package/dist/src/commands/furnace/create-dry-run.js +0 -107
- package/dist/src/commands/furnace/create-features.d.ts +0 -24
- package/dist/src/commands/furnace/create-features.js +0 -55
- package/dist/src/commands/furnace/create-mochikit.d.ts +0 -29
- package/dist/src/commands/furnace/create-mochikit.js +0 -75
- package/dist/src/commands/furnace/create-readback.d.ts +0 -22
- package/dist/src/commands/furnace/create-readback.js +0 -32
- package/dist/src/commands/furnace/create-templates.d.ts +0 -119
- package/dist/src/commands/furnace/create-templates.js +0 -283
- package/dist/src/commands/furnace/create-validation.d.ts +0 -6
- package/dist/src/commands/furnace/create-validation.js +0 -59
- package/dist/src/commands/furnace/create-xpcshell.d.ts +0 -27
- package/dist/src/commands/furnace/create-xpcshell.js +0 -80
- package/dist/src/commands/furnace/create.d.ts +0 -24
- package/dist/src/commands/furnace/create.js +0 -407
- package/dist/src/commands/furnace/deploy-fragment-includers.d.ts +0 -59
- package/dist/src/commands/furnace/deploy-fragment-includers.js +0 -120
- package/dist/src/commands/furnace/deploy-named.d.ts +0 -48
- package/dist/src/commands/furnace/deploy-named.js +0 -107
- package/dist/src/commands/furnace/deploy.d.ts +0 -9
- package/dist/src/commands/furnace/deploy.js +0 -218
- package/dist/src/commands/furnace/diff.d.ts +0 -11
- package/dist/src/commands/furnace/diff.js +0 -238
- package/dist/src/commands/furnace/index.d.ts +0 -4
- package/dist/src/commands/furnace/index.js +0 -282
- package/dist/src/commands/furnace/init.d.ts +0 -11
- package/dist/src/commands/furnace/init.js +0 -287
- package/dist/src/commands/furnace/list.d.ts +0 -8
- package/dist/src/commands/furnace/list.js +0 -104
- package/dist/src/commands/furnace/override.d.ts +0 -16
- package/dist/src/commands/furnace/override.js +0 -454
- package/dist/src/commands/furnace/preview.d.ts +0 -19
- package/dist/src/commands/furnace/preview.js +0 -349
- package/dist/src/commands/furnace/refresh.d.ts +0 -10
- package/dist/src/commands/furnace/refresh.js +0 -303
- package/dist/src/commands/furnace/remove-mutations.d.ts +0 -36
- package/dist/src/commands/furnace/remove-mutations.js +0 -168
- package/dist/src/commands/furnace/remove-state.d.ts +0 -20
- package/dist/src/commands/furnace/remove-state.js +0 -60
- package/dist/src/commands/furnace/remove.d.ts +0 -8
- package/dist/src/commands/furnace/remove.js +0 -415
- package/dist/src/commands/furnace/rename-browser-test.d.ts +0 -2
- package/dist/src/commands/furnace/rename-browser-test.js +0 -68
- package/dist/src/commands/furnace/rename-dry-run.d.ts +0 -29
- package/dist/src/commands/furnace/rename-dry-run.js +0 -127
- package/dist/src/commands/furnace/rename-helpers.d.ts +0 -26
- package/dist/src/commands/furnace/rename-helpers.js +0 -85
- package/dist/src/commands/furnace/rename-registrations.d.ts +0 -41
- package/dist/src/commands/furnace/rename-registrations.js +0 -98
- package/dist/src/commands/furnace/rename-xpcshell.d.ts +0 -32
- package/dist/src/commands/furnace/rename-xpcshell.js +0 -95
- package/dist/src/commands/furnace/rename.d.ts +0 -6
- package/dist/src/commands/furnace/rename.js +0 -400
- package/dist/src/commands/furnace/scan.d.ts +0 -14
- package/dist/src/commands/furnace/scan.js +0 -192
- package/dist/src/commands/furnace/status.d.ts +0 -7
- package/dist/src/commands/furnace/status.js +0 -209
- package/dist/src/commands/furnace/sync.d.ts +0 -12
- package/dist/src/commands/furnace/sync.js +0 -145
- package/dist/src/commands/furnace/test-file-name.d.ts +0 -28
- package/dist/src/commands/furnace/test-file-name.js +0 -39
- package/dist/src/commands/furnace/validate-report.d.ts +0 -45
- package/dist/src/commands/furnace/validate-report.js +0 -91
- package/dist/src/commands/furnace/validate.d.ts +0 -8
- package/dist/src/commands/furnace/validate.js +0 -309
- package/dist/src/commands/furnace/validation-output.d.ts +0 -47
- package/dist/src/commands/furnace/validation-output.js +0 -161
- package/dist/src/commands/import.d.ts +0 -11
- package/dist/src/commands/lint-per-patch.d.ts +0 -10
- package/dist/src/commands/lint-per-patch.js +0 -428
- package/dist/src/commands/lint-per-run-checkjs.d.ts +0 -66
- package/dist/src/commands/lint-per-run-checkjs.js +0 -102
- package/dist/src/commands/lint-report.d.ts +0 -25
- package/dist/src/commands/lint-report.js +0 -76
- package/dist/src/commands/lint.d.ts +0 -47
- package/dist/src/commands/manifest.d.ts +0 -38
- package/dist/src/commands/manifest.js +0 -68
- package/dist/src/commands/package.d.ts +0 -11
- package/dist/src/commands/park.d.ts +0 -22
- package/dist/src/commands/park.js +0 -232
- package/dist/src/commands/patch/compact.d.ts +0 -28
- package/dist/src/commands/patch/compact.js +0 -208
- package/dist/src/commands/patch/delete-gap-notice.d.ts +0 -24
- package/dist/src/commands/patch/delete-gap-notice.js +0 -48
- package/dist/src/commands/patch/delete.d.ts +0 -28
- package/dist/src/commands/patch/delete.js +0 -131
- package/dist/src/commands/patch/entry-projection.d.ts +0 -13
- package/dist/src/commands/patch/entry-projection.js +0 -24
- package/dist/src/commands/patch/index.d.ts +0 -16
- package/dist/src/commands/patch/index.js +0 -52
- package/dist/src/commands/patch/lint-ignore-from.d.ts +0 -43
- package/dist/src/commands/patch/lint-ignore-from.js +0 -141
- package/dist/src/commands/patch/lint-ignore.d.ts +0 -42
- package/dist/src/commands/patch/lint-ignore.js +0 -261
- package/dist/src/commands/patch/move-files-adopt.d.ts +0 -33
- package/dist/src/commands/patch/move-files-adopt.js +0 -65
- package/dist/src/commands/patch/move-files-create.d.ts +0 -19
- package/dist/src/commands/patch/move-files-create.js +0 -187
- package/dist/src/commands/patch/move-files-into.d.ts +0 -65
- package/dist/src/commands/patch/move-files-into.js +0 -325
- package/dist/src/commands/patch/move-files-retire.d.ts +0 -39
- package/dist/src/commands/patch/move-files-retire.js +0 -91
- package/dist/src/commands/patch/move-files.d.ts +0 -28
- package/dist/src/commands/patch/move-files.js +0 -224
- package/dist/src/commands/patch/move-size-tier.d.ts +0 -27
- package/dist/src/commands/patch/move-size-tier.js +0 -66
- package/dist/src/commands/patch/patch-context.d.ts +0 -40
- package/dist/src/commands/patch/patch-context.js +0 -51
- package/dist/src/commands/patch/removal-created-files.d.ts +0 -48
- package/dist/src/commands/patch/removal-created-files.js +0 -83
- package/dist/src/commands/patch/removal-dependents.d.ts +0 -63
- package/dist/src/commands/patch/removal-dependents.js +0 -133
- package/dist/src/commands/patch/rename.d.ts +0 -35
- package/dist/src/commands/patch/rename.js +0 -378
- package/dist/src/commands/patch/reorder-projection.d.ts +0 -17
- package/dist/src/commands/patch/reorder-projection.js +0 -49
- package/dist/src/commands/patch/reorder-shift.d.ts +0 -30
- package/dist/src/commands/patch/reorder-shift.js +0 -307
- package/dist/src/commands/patch/reorder.d.ts +0 -34
- package/dist/src/commands/patch/reorder.js +0 -375
- package/dist/src/commands/patch/reserve.d.ts +0 -33
- package/dist/src/commands/patch/reserve.js +0 -152
- package/dist/src/commands/patch/retire.d.ts +0 -34
- package/dist/src/commands/patch/retire.js +0 -133
- package/dist/src/commands/patch/split-plan.d.ts +0 -125
- package/dist/src/commands/patch/split-plan.js +0 -313
- package/dist/src/commands/patch/split-staged.d.ts +0 -108
- package/dist/src/commands/patch/split-staged.js +0 -202
- package/dist/src/commands/patch/split.d.ts +0 -43
- package/dist/src/commands/patch/split.js +0 -367
- package/dist/src/commands/patch/stage.d.ts +0 -34
- package/dist/src/commands/patch/stage.js +0 -153
- package/dist/src/commands/patch/staged-dependency-batch.d.ts +0 -48
- package/dist/src/commands/patch/staged-dependency-batch.js +0 -176
- package/dist/src/commands/patch/staged-dependency-entries.d.ts +0 -44
- package/dist/src/commands/patch/staged-dependency-entries.js +0 -80
- package/dist/src/commands/patch/staged-dependency-from.d.ts +0 -14
- package/dist/src/commands/patch/staged-dependency-from.js +0 -114
- package/dist/src/commands/patch/staged-dependency-remove.d.ts +0 -53
- package/dist/src/commands/patch/staged-dependency-remove.js +0 -117
- package/dist/src/commands/patch/staged-dependency-validate.d.ts +0 -15
- package/dist/src/commands/patch/staged-dependency-validate.js +0 -49
- package/dist/src/commands/patch/staged-dependency.d.ts +0 -22
- package/dist/src/commands/patch/staged-dependency.js +0 -248
- package/dist/src/commands/patch/tier.d.ts +0 -34
- package/dist/src/commands/patch/tier.js +0 -125
- package/dist/src/commands/patch-rename-map.d.ts +0 -30
- package/dist/src/commands/patch-rename-map.js +0 -54
- package/dist/src/commands/pending-resolution.d.ts +0 -15
- package/dist/src/commands/pending-resolution.js +0 -25
- package/dist/src/commands/re-export-adjacent-registrations.d.ts +0 -20
- package/dist/src/commands/re-export-adjacent-registrations.js +0 -75
- package/dist/src/commands/re-export-adjacent.d.ts +0 -111
- package/dist/src/commands/re-export-adjacent.js +0 -267
- package/dist/src/commands/re-export-bulk-scan.d.ts +0 -19
- package/dist/src/commands/re-export-bulk-scan.js +0 -233
- package/dist/src/commands/re-export-drift.d.ts +0 -110
- package/dist/src/commands/re-export-drift.js +0 -358
- package/dist/src/commands/re-export-files.d.ts +0 -15
- package/dist/src/commands/re-export-files.js +0 -307
- package/dist/src/commands/re-export-hunks.d.ts +0 -35
- package/dist/src/commands/re-export-hunks.js +0 -220
- package/dist/src/commands/re-export-lint.d.ts +0 -137
- package/dist/src/commands/re-export-lint.js +0 -303
- package/dist/src/commands/re-export-options.d.ts +0 -29
- package/dist/src/commands/re-export-options.js +0 -191
- package/dist/src/commands/re-export-preflight.d.ts +0 -23
- package/dist/src/commands/re-export-preflight.js +0 -159
- package/dist/src/commands/re-export-purity-scope.d.ts +0 -18
- package/dist/src/commands/re-export-purity-scope.js +0 -137
- package/dist/src/commands/re-export-register.d.ts +0 -12
- package/dist/src/commands/re-export-register.js +0 -99
- package/dist/src/commands/re-export-removed.d.ts +0 -15
- package/dist/src/commands/re-export-removed.js +0 -94
- package/dist/src/commands/re-export-retired-declarations.d.ts +0 -22
- package/dist/src/commands/re-export-retired-declarations.js +0 -113
- package/dist/src/commands/re-export-scan-owner.d.ts +0 -44
- package/dist/src/commands/re-export-scan-owner.js +0 -116
- package/dist/src/commands/re-export-scan.d.ts +0 -72
- package/dist/src/commands/re-export-scan.js +0 -265
- package/dist/src/commands/re-export-single.d.ts +0 -39
- package/dist/src/commands/re-export-single.js +0 -388
- package/dist/src/commands/re-export-stale-registrations.d.ts +0 -39
- package/dist/src/commands/re-export-stale-registrations.js +0 -106
- package/dist/src/commands/re-export-summary.d.ts +0 -28
- package/dist/src/commands/re-export-summary.js +0 -36
- package/dist/src/commands/re-export.d.ts +0 -8
- package/dist/src/commands/rebase/abort.d.ts +0 -7
- package/dist/src/commands/rebase/abort.js +0 -67
- package/dist/src/commands/rebase/confirm.d.ts +0 -42
- package/dist/src/commands/rebase/confirm.js +0 -36
- package/dist/src/commands/rebase/conflict-summary.d.ts +0 -12
- package/dist/src/commands/rebase/conflict-summary.js +0 -37
- package/dist/src/commands/rebase/continue.d.ts +0 -7
- package/dist/src/commands/rebase/continue.js +0 -119
- package/dist/src/commands/rebase/index.d.ts +0 -22
- package/dist/src/commands/rebase/index.js +0 -209
- package/dist/src/commands/rebase/patch-loop.d.ts +0 -15
- package/dist/src/commands/rebase/patch-loop.js +0 -289
- package/dist/src/commands/rebase/summary.d.ts +0 -8
- package/dist/src/commands/rebase/summary.js +0 -47
- package/dist/src/commands/register.d.ts +0 -13
- package/dist/src/commands/reset.d.ts +0 -11
- package/dist/src/commands/resolve.d.ts +0 -36
- package/dist/src/commands/run.d.ts +0 -10
- package/dist/src/commands/setup-support.d.ts +0 -35
- package/dist/src/commands/setup-support.js +0 -386
- package/dist/src/commands/setup.d.ts +0 -11
- package/dist/src/commands/source.d.ts +0 -9
- package/dist/src/commands/source.js +0 -120
- package/dist/src/commands/status-check.d.ts +0 -87
- package/dist/src/commands/status-check.js +0 -161
- package/dist/src/commands/status-json.d.ts +0 -45
- package/dist/src/commands/status-json.js +0 -97
- package/dist/src/commands/status-output.d.ts +0 -23
- package/dist/src/commands/status-output.js +0 -231
- package/dist/src/commands/status-ownership.d.ts +0 -54
- package/dist/src/commands/status-ownership.js +0 -59
- package/dist/src/commands/status-scope.d.ts +0 -37
- package/dist/src/commands/status-scope.js +0 -54
- package/dist/src/commands/status.d.ts +0 -11
- package/dist/src/commands/test-appdir.d.ts +0 -6
- package/dist/src/commands/test-appdir.js +0 -29
- package/dist/src/commands/test-browser-preflight.d.ts +0 -28
- package/dist/src/commands/test-browser-preflight.js +0 -197
- package/dist/src/commands/test-build-furnace.d.ts +0 -21
- package/dist/src/commands/test-build-furnace.js +0 -53
- package/dist/src/commands/test-build-phase.d.ts +0 -29
- package/dist/src/commands/test-build-phase.js +0 -290
- package/dist/src/commands/test-checkjs.d.ts +0 -3
- package/dist/src/commands/test-checkjs.js +0 -35
- package/dist/src/commands/test-control-restore.d.ts +0 -40
- package/dist/src/commands/test-control-restore.js +0 -86
- package/dist/src/commands/test-diagnose.d.ts +0 -23
- package/dist/src/commands/test-diagnose.js +0 -317
- package/dist/src/commands/test-dispatch.d.ts +0 -39
- package/dist/src/commands/test-dispatch.js +0 -281
- package/dist/src/commands/test-furnace-reach.d.ts +0 -37
- package/dist/src/commands/test-furnace-reach.js +0 -132
- package/dist/src/commands/test-harness-env.d.ts +0 -23
- package/dist/src/commands/test-harness-env.js +0 -81
- package/dist/src/commands/test-harness-teardown.d.ts +0 -62
- package/dist/src/commands/test-harness-teardown.js +0 -128
- package/dist/src/commands/test-modes.d.ts +0 -57
- package/dist/src/commands/test-modes.js +0 -158
- package/dist/src/commands/test-multi-verdict.d.ts +0 -61
- package/dist/src/commands/test-multi-verdict.js +0 -112
- package/dist/src/commands/test-orchestrate.d.ts +0 -63
- package/dist/src/commands/test-orchestrate.js +0 -274
- package/dist/src/commands/test-perf-scope.d.ts +0 -50
- package/dist/src/commands/test-perf-scope.js +0 -138
- package/dist/src/commands/test-prelock.d.ts +0 -61
- package/dist/src/commands/test-prelock.js +0 -301
- package/dist/src/commands/test-register.d.ts +0 -4
- package/dist/src/commands/test-register.js +0 -181
- package/dist/src/commands/test-results.d.ts +0 -71
- package/dist/src/commands/test-results.js +0 -79
- package/dist/src/commands/test-run.d.ts +0 -89
- package/dist/src/commands/test-run.js +0 -251
- package/dist/src/commands/test-shards.d.ts +0 -114
- package/dist/src/commands/test-shards.js +0 -272
- package/dist/src/commands/test-stale-gate.d.ts +0 -52
- package/dist/src/commands/test-stale-gate.js +0 -165
- package/dist/src/commands/test-verdict.d.ts +0 -92
- package/dist/src/commands/test-verdict.js +0 -162
- package/dist/src/commands/test.d.ts +0 -22
- package/dist/src/commands/token-coverage.d.ts +0 -5
- package/dist/src/commands/token-coverage.js +0 -170
- package/dist/src/commands/token-lint.d.ts +0 -14
- package/dist/src/commands/token-lint.js +0 -151
- package/dist/src/commands/token-list.d.ts +0 -26
- package/dist/src/commands/token-list.js +0 -153
- package/dist/src/commands/token.d.ts +0 -14
- package/dist/src/commands/tree.d.ts +0 -19
- package/dist/src/commands/tree.js +0 -341
- package/dist/src/commands/typecheck.d.ts +0 -56
- package/dist/src/commands/verify-scope.d.ts +0 -28
- package/dist/src/commands/verify-scope.js +0 -67
- package/dist/src/commands/verify.d.ts +0 -58
- package/dist/src/commands/watch.d.ts +0 -9
- package/dist/src/commands/wire.d.ts +0 -13
- package/dist/src/core/ast-utils.d.ts +0 -73
- package/dist/src/core/ast-utils.js +0 -105
- package/dist/src/core/brand-validation.d.ts +0 -7
- package/dist/src/core/brand-validation.js +0 -14
- package/dist/src/core/branding.d.ts +0 -86
- package/dist/src/core/branding.js +0 -371
- package/dist/src/core/browser-wire.d.ts +0 -48
- package/dist/src/core/browser-wire.js +0 -133
- package/dist/src/core/build-audit-platform.d.ts +0 -67
- package/dist/src/core/build-audit-platform.js +0 -373
- package/dist/src/core/build-audit-registration.d.ts +0 -80
- package/dist/src/core/build-audit-registration.js +0 -181
- package/dist/src/core/build-audit-resolve.d.ts +0 -78
- package/dist/src/core/build-audit-resolve.js +0 -240
- package/dist/src/core/build-audit-skip.d.ts +0 -57
- package/dist/src/core/build-audit-skip.js +0 -112
- package/dist/src/core/build-audit-transforms.d.ts +0 -23
- package/dist/src/core/build-audit-transforms.js +0 -92
- package/dist/src/core/build-audit.d.ts +0 -93
- package/dist/src/core/build-audit.js +0 -633
- package/dist/src/core/build-baseline-types.d.ts +0 -225
- package/dist/src/core/build-baseline-types.js +0 -10
- package/dist/src/core/build-baseline-validate.d.ts +0 -32
- package/dist/src/core/build-baseline-validate.js +0 -173
- package/dist/src/core/build-baseline.d.ts +0 -103
- package/dist/src/core/build-baseline.js +0 -261
- package/dist/src/core/build-jar-escalation.d.ts +0 -61
- package/dist/src/core/build-jar-escalation.js +0 -125
- package/dist/src/core/build-overwrite-guard.d.ts +0 -92
- package/dist/src/core/build-overwrite-guard.js +0 -235
- package/dist/src/core/build-prepare.d.ts +0 -83
- package/dist/src/core/build-prepare.js +0 -414
- package/dist/src/core/build-run-record.d.ts +0 -74
- package/dist/src/core/build-run-record.js +0 -136
- package/dist/src/core/checkjs-support-heads.d.ts +0 -41
- package/dist/src/core/checkjs-support-heads.js +0 -104
- package/dist/src/core/component-source-guard.d.ts +0 -20
- package/dist/src/core/component-source-guard.js +0 -68
- package/dist/src/core/config-mutate.d.ts +0 -16
- package/dist/src/core/config-mutate.js +0 -76
- package/dist/src/core/config-paths.d.ts +0 -16
- package/dist/src/core/config-paths.js +0 -106
- package/dist/src/core/config-state.d.ts +0 -16
- package/dist/src/core/config-state.js +0 -141
- package/dist/src/core/config-validate-build-audit.d.ts +0 -8
- package/dist/src/core/config-validate-build-audit.js +0 -80
- package/dist/src/core/config-validate-check.d.ts +0 -8
- package/dist/src/core/config-validate-check.js +0 -219
- package/dist/src/core/config-validate-file-size.d.ts +0 -15
- package/dist/src/core/config-validate-file-size.js +0 -154
- package/dist/src/core/config-validate-history.d.ts +0 -11
- package/dist/src/core/config-validate-history.js +0 -38
- package/dist/src/core/config-validate-patch-policy.d.ts +0 -7
- package/dist/src/core/config-validate-patch-policy.js +0 -274
- package/dist/src/core/config-validate-test-toolchains.d.ts +0 -8
- package/dist/src/core/config-validate-test-toolchains.js +0 -133
- package/dist/src/core/config-validate-token-scales.d.ts +0 -9
- package/dist/src/core/config-validate-token-scales.js +0 -92
- package/dist/src/core/config-validate.d.ts +0 -11
- package/dist/src/core/config-validate.js +0 -503
- package/dist/src/core/config.d.ts +0 -92
- package/dist/src/core/config.js +0 -169
- package/dist/src/core/coverage-dispatch.d.ts +0 -24
- package/dist/src/core/coverage-dispatch.js +0 -44
- package/dist/src/core/coverage-extend.d.ts +0 -89
- package/dist/src/core/coverage-extend.js +0 -239
- package/dist/src/core/coverage-records.d.ts +0 -107
- package/dist/src/core/coverage-records.js +0 -383
- package/dist/src/core/destructive.d.ts +0 -144
- package/dist/src/core/destructive.js +0 -182
- package/dist/src/core/diff-hunks.d.ts +0 -73
- package/dist/src/core/diff-hunks.js +0 -286
- package/dist/src/core/discard-baseline.d.ts +0 -60
- package/dist/src/core/discard-baseline.js +0 -247
- package/dist/src/core/display-state.d.ts +0 -50
- package/dist/src/core/display-state.js +0 -87
- package/dist/src/core/engine-changes.d.ts +0 -40
- package/dist/src/core/engine-changes.js +0 -95
- package/dist/src/core/engine-precondition.d.ts +0 -42
- package/dist/src/core/engine-precondition.js +0 -60
- package/dist/src/core/engine-session-lock.d.ts +0 -119
- package/dist/src/core/engine-session-lock.js +0 -374
- package/dist/src/core/engine-write-boundary.d.ts +0 -5
- package/dist/src/core/engine-write-boundary.js +0 -41
- package/dist/src/core/export-moved-code-shape.d.ts +0 -98
- package/dist/src/core/export-moved-code-shape.js +0 -220
- package/dist/src/core/file-lock-owner.d.ts +0 -103
- package/dist/src/core/file-lock-owner.js +0 -259
- package/dist/src/core/file-lock-queue.d.ts +0 -67
- package/dist/src/core/file-lock-queue.js +0 -219
- package/dist/src/core/file-lock-shared.d.ts +0 -57
- package/dist/src/core/file-lock-shared.js +0 -117
- package/dist/src/core/file-lock.d.ts +0 -143
- package/dist/src/core/file-lock.js +0 -531
- package/dist/src/core/firefox-archive.d.ts +0 -45
- package/dist/src/core/firefox-archive.js +0 -96
- package/dist/src/core/firefox-cache.d.ts +0 -30
- package/dist/src/core/firefox-cache.js +0 -248
- package/dist/src/core/firefox-download.d.ts +0 -30
- package/dist/src/core/firefox-download.js +0 -152
- package/dist/src/core/firefox-extract.d.ts +0 -42
- package/dist/src/core/firefox-extract.js +0 -248
- package/dist/src/core/firefox-ignorefile.d.ts +0 -17
- package/dist/src/core/firefox-ignorefile.js +0 -30
- package/dist/src/core/firefox.d.ts +0 -66
- package/dist/src/core/firefox.js +0 -121
- package/dist/src/core/forward-registrations.d.ts +0 -33
- package/dist/src/core/forward-registrations.js +0 -16
- package/dist/src/core/furnace-apply-dry-run.d.ts +0 -12
- package/dist/src/core/furnace-apply-dry-run.js +0 -99
- package/dist/src/core/furnace-apply-ftl.d.ts +0 -49
- package/dist/src/core/furnace-apply-ftl.js +0 -210
- package/dist/src/core/furnace-apply-helpers.d.ts +0 -106
- package/dist/src/core/furnace-apply-helpers.js +0 -436
- package/dist/src/core/furnace-apply-output.d.ts +0 -36
- package/dist/src/core/furnace-apply-output.js +0 -111
- package/dist/src/core/furnace-apply-overwrite-warn.d.ts +0 -62
- package/dist/src/core/furnace-apply-overwrite-warn.js +0 -124
- package/dist/src/core/furnace-apply-undeploy-actions.d.ts +0 -10
- package/dist/src/core/furnace-apply-undeploy-actions.js +0 -48
- package/dist/src/core/furnace-apply.d.ts +0 -49
- package/dist/src/core/furnace-apply.js +0 -465
- package/dist/src/core/furnace-checksum-utils.d.ts +0 -25
- package/dist/src/core/furnace-checksum-utils.js +0 -54
- package/dist/src/core/furnace-composed-source.d.ts +0 -76
- package/dist/src/core/furnace-composed-source.js +0 -167
- package/dist/src/core/furnace-config-array-utils.d.ts +0 -11
- package/dist/src/core/furnace-config-array-utils.js +0 -26
- package/dist/src/core/furnace-config-custom.d.ts +0 -15
- package/dist/src/core/furnace-config-custom.js +0 -73
- package/dist/src/core/furnace-config-order.d.ts +0 -8
- package/dist/src/core/furnace-config-order.js +0 -90
- package/dist/src/core/furnace-config-tokens.d.ts +0 -17
- package/dist/src/core/furnace-config-tokens.js +0 -42
- package/dist/src/core/furnace-config-validate-exceptions.d.ts +0 -17
- package/dist/src/core/furnace-config-validate-exceptions.js +0 -122
- package/dist/src/core/furnace-config-validate.d.ts +0 -32
- package/dist/src/core/furnace-config-validate.js +0 -146
- package/dist/src/core/furnace-config.d.ts +0 -139
- package/dist/src/core/furnace-config.js +0 -511
- package/dist/src/core/furnace-constants.d.ts +0 -79
- package/dist/src/core/furnace-constants.js +0 -123
- package/dist/src/core/furnace-css-fragments.d.ts +0 -96
- package/dist/src/core/furnace-css-fragments.js +0 -279
- package/dist/src/core/furnace-dir-entry.d.ts +0 -20
- package/dist/src/core/furnace-dir-entry.js +0 -21
- package/dist/src/core/furnace-fragment-includers.d.ts +0 -56
- package/dist/src/core/furnace-fragment-includers.js +0 -122
- package/dist/src/core/furnace-graph-utils.d.ts +0 -11
- package/dist/src/core/furnace-graph-utils.js +0 -93
- package/dist/src/core/furnace-jsconfig.d.ts +0 -61
- package/dist/src/core/furnace-jsconfig.js +0 -208
- package/dist/src/core/furnace-marker.d.ts +0 -15
- package/dist/src/core/furnace-marker.js +0 -21
- package/dist/src/core/furnace-operation.d.ts +0 -195
- package/dist/src/core/furnace-operation.js +0 -444
- package/dist/src/core/furnace-precondition.d.ts +0 -61
- package/dist/src/core/furnace-precondition.js +0 -67
- package/dist/src/core/furnace-refresh.d.ts +0 -28
- package/dist/src/core/furnace-refresh.js +0 -125
- package/dist/src/core/furnace-registration-ast.d.ts +0 -53
- package/dist/src/core/furnace-registration-ast.js +0 -402
- package/dist/src/core/furnace-registration-jar-inplace.d.ts +0 -12
- package/dist/src/core/furnace-registration-jar-inplace.js +0 -79
- package/dist/src/core/furnace-registration-remove.d.ts +0 -56
- package/dist/src/core/furnace-registration-remove.js +0 -260
- package/dist/src/core/furnace-registration-rename.d.ts +0 -26
- package/dist/src/core/furnace-registration-rename.js +0 -77
- package/dist/src/core/furnace-registration-validate.d.ts +0 -53
- package/dist/src/core/furnace-registration-validate.js +0 -110
- package/dist/src/core/furnace-registration.d.ts +0 -112
- package/dist/src/core/furnace-registration.js +0 -348
- package/dist/src/core/furnace-rollback.d.ts +0 -48
- package/dist/src/core/furnace-rollback.js +0 -170
- package/dist/src/core/furnace-scanner.d.ts +0 -47
- package/dist/src/core/furnace-scanner.js +0 -236
- package/dist/src/core/furnace-stale-export.d.ts +0 -60
- package/dist/src/core/furnace-stale-export.js +0 -125
- package/dist/src/core/furnace-staleness.d.ts +0 -24
- package/dist/src/core/furnace-staleness.js +0 -67
- package/dist/src/core/furnace-state-persist.d.ts +0 -68
- package/dist/src/core/furnace-state-persist.js +0 -116
- package/dist/src/core/furnace-step-errors.d.ts +0 -23
- package/dist/src/core/furnace-step-errors.js +0 -25
- package/dist/src/core/furnace-stories.d.ts +0 -37
- package/dist/src/core/furnace-stories.js +0 -186
- package/dist/src/core/furnace-validate-accessibility.d.ts +0 -39
- package/dist/src/core/furnace-validate-accessibility.js +0 -417
- package/dist/src/core/furnace-validate-checks.d.ts +0 -4
- package/dist/src/core/furnace-validate-checks.js +0 -6
- package/dist/src/core/furnace-validate-compatibility.d.ts +0 -6
- package/dist/src/core/furnace-validate-compatibility.js +0 -295
- package/dist/src/core/furnace-validate-exceptions.d.ts +0 -49
- package/dist/src/core/furnace-validate-exceptions.js +0 -98
- package/dist/src/core/furnace-validate-helpers.d.ts +0 -7
- package/dist/src/core/furnace-validate-helpers.js +0 -4
- package/dist/src/core/furnace-validate-icon-button.d.ts +0 -7
- package/dist/src/core/furnace-validate-icon-button.js +0 -78
- package/dist/src/core/furnace-validate-registration.d.ts +0 -67
- package/dist/src/core/furnace-validate-registration.js +0 -487
- package/dist/src/core/furnace-validate-structure.d.ts +0 -22
- package/dist/src/core/furnace-validate-structure.js +0 -122
- package/dist/src/core/furnace-validate.d.ts +0 -41
- package/dist/src/core/furnace-validate.js +0 -302
- package/dist/src/core/furnace-version-drift.d.ts +0 -57
- package/dist/src/core/furnace-version-drift.js +0 -102
- package/dist/src/core/gecko-dom-types.d.ts +0 -2
- package/dist/src/core/gecko-dom-types.js +0 -17
- package/dist/src/core/git-base.d.ts +0 -101
- package/dist/src/core/git-base.js +0 -162
- package/dist/src/core/git-diff-new-file.d.ts +0 -40
- package/dist/src/core/git-diff-new-file.js +0 -118
- package/dist/src/core/git-diff.d.ts +0 -82
- package/dist/src/core/git-diff.js +0 -539
- package/dist/src/core/git-file-ops.d.ts +0 -108
- package/dist/src/core/git-file-ops.js +0 -280
- package/dist/src/core/git-readonly-index.d.ts +0 -91
- package/dist/src/core/git-readonly-index.js +0 -177
- package/dist/src/core/git-status.d.ts +0 -84
- package/dist/src/core/git-status.js +0 -208
- package/dist/src/core/git.d.ts +0 -114
- package/dist/src/core/git.js +0 -540
- package/dist/src/core/harness-helper-pids.d.ts +0 -98
- package/dist/src/core/harness-helper-pids.js +0 -240
- package/dist/src/core/harness-orphans.d.ts +0 -118
- package/dist/src/core/harness-orphans.js +0 -268
- package/dist/src/core/harness-port-fallback.d.ts +0 -60
- package/dist/src/core/harness-port-fallback.js +0 -96
- package/dist/src/core/harness-port-reservation.d.ts +0 -60
- package/dist/src/core/harness-port-reservation.js +0 -122
- package/dist/src/core/history-log-file.d.ts +0 -61
- package/dist/src/core/history-log-file.js +0 -164
- package/dist/src/core/history-log.d.ts +0 -20
- package/dist/src/core/history-log.js +0 -30
- package/dist/src/core/json-preserving-edit.d.ts +0 -22
- package/dist/src/core/json-preserving-edit.js +0 -199
- package/dist/src/core/launchable-build.d.ts +0 -39
- package/dist/src/core/launchable-build.js +0 -85
- package/dist/src/core/license-headers.d.ts +0 -103
- package/dist/src/core/license-headers.js +0 -318
- package/dist/src/core/line-prefixer.d.ts +0 -18
- package/dist/src/core/line-prefixer.js +0 -34
- package/dist/src/core/lit-template-regions.d.ts +0 -4
- package/dist/src/core/lit-template-regions.js +0 -50
- package/dist/src/core/mach-build-artifacts.d.ts +0 -176
- package/dist/src/core/mach-build-artifacts.js +0 -436
- package/dist/src/core/mach-error-hints.d.ts +0 -24
- package/dist/src/core/mach-error-hints.js +0 -135
- package/dist/src/core/mach-known-noise-filter.d.ts +0 -122
- package/dist/src/core/mach-known-noise-filter.js +0 -257
- package/dist/src/core/mach-mozconfig.d.ts +0 -57
- package/dist/src/core/mach-mozconfig.js +0 -166
- package/dist/src/core/mach-python.d.ts +0 -19
- package/dist/src/core/mach-python.js +0 -131
- package/dist/src/core/mach-resource-shim.d.ts +0 -107
- package/dist/src/core/mach-resource-shim.js +0 -640
- package/dist/src/core/mach.d.ts +0 -284
- package/dist/src/core/mach.js +0 -445
- package/dist/src/core/marionette-port.d.ts +0 -153
- package/dist/src/core/marionette-port.js +0 -474
- package/dist/src/core/marionette-preflight.d.ts +0 -58
- package/dist/src/core/marionette-preflight.js +0 -332
- package/dist/src/core/markdown-table.d.ts +0 -104
- package/dist/src/core/markdown-table.js +0 -265
- package/dist/src/core/mochitest-server-port.d.ts +0 -81
- package/dist/src/core/mochitest-server-port.js +0 -175
- package/dist/src/core/module-resolution-preflight.d.ts +0 -65
- package/dist/src/core/module-resolution-preflight.js +0 -171
- package/dist/src/core/moz-manifest-helpers.d.ts +0 -79
- package/dist/src/core/moz-manifest-helpers.js +0 -163
- package/dist/src/core/moz-manifest-register.d.ts +0 -19
- package/dist/src/core/moz-manifest-register.js +0 -51
- package/dist/src/core/moz-manifest-rules.d.ts +0 -58
- package/dist/src/core/moz-manifest-rules.js +0 -264
- package/dist/src/core/moz-manifest-tokenizers.d.ts +0 -38
- package/dist/src/core/moz-manifest-tokenizers.js +0 -108
- package/dist/src/core/negative-control-compiled.d.ts +0 -46
- package/dist/src/core/negative-control-compiled.js +0 -109
- package/dist/src/core/negative-control-diff.d.ts +0 -51
- package/dist/src/core/negative-control-diff.js +0 -204
- package/dist/src/core/negative-control.d.ts +0 -150
- package/dist/src/core/negative-control.js +0 -399
- package/dist/src/core/objdir-install-manifests.d.ts +0 -73
- package/dist/src/core/objdir-install-manifests.js +0 -226
- package/dist/src/core/objdir-maintenance.d.ts +0 -10
- package/dist/src/core/objdir-maintenance.js +0 -167
- package/dist/src/core/ownership-table.d.ts +0 -53
- package/dist/src/core/ownership-table.js +0 -159
- package/dist/src/core/parent-exit-watchdog.d.ts +0 -62
- package/dist/src/core/parent-exit-watchdog.js +0 -69
- package/dist/src/core/park-store.d.ts +0 -63
- package/dist/src/core/park-store.js +0 -216
- package/dist/src/core/parser-fallback.d.ts +0 -50
- package/dist/src/core/parser-fallback.js +0 -61
- package/dist/src/core/patch-apply-fuzz.d.ts +0 -57
- package/dist/src/core/patch-apply-fuzz.js +0 -125
- package/dist/src/core/patch-apply.d.ts +0 -88
- package/dist/src/core/patch-apply.js +0 -435
- package/dist/src/core/patch-export-coverage.d.ts +0 -49
- package/dist/src/core/patch-export-coverage.js +0 -73
- package/dist/src/core/patch-export-metadata.d.ts +0 -46
- package/dist/src/core/patch-export-metadata.js +0 -47
- package/dist/src/core/patch-export-update.d.ts +0 -55
- package/dist/src/core/patch-export-update.js +0 -95
- package/dist/src/core/patch-export.d.ts +0 -175
- package/dist/src/core/patch-export.js +0 -312
- package/dist/src/core/patch-files.d.ts +0 -17
- package/dist/src/core/patch-files.js +0 -59
- package/dist/src/core/patch-identifier-suggest.d.ts +0 -26
- package/dist/src/core/patch-identifier-suggest.js +0 -135
- package/dist/src/core/patch-lint-binary.d.ts +0 -45
- package/dist/src/core/patch-lint-binary.js +0 -39
- package/dist/src/core/patch-lint-cache.d.ts +0 -78
- package/dist/src/core/patch-lint-cache.js +0 -233
- package/dist/src/core/patch-lint-checkjs-any-import.d.ts +0 -39
- package/dist/src/core/patch-lint-checkjs-any-import.js +0 -63
- package/dist/src/core/patch-lint-checkjs-cache.d.ts +0 -18
- package/dist/src/core/patch-lint-checkjs-cache.js +0 -45
- package/dist/src/core/patch-lint-checkjs-diagnostics.d.ts +0 -17
- package/dist/src/core/patch-lint-checkjs-diagnostics.js +0 -32
- package/dist/src/core/patch-lint-checkjs.d.ts +0 -180
- package/dist/src/core/patch-lint-checkjs.js +0 -611
- package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +0 -43
- package/dist/src/core/patch-lint-chrome-jsdoc.js +0 -90
- package/dist/src/core/patch-lint-code-lines.d.ts +0 -59
- package/dist/src/core/patch-lint-code-lines.js +0 -105
- package/dist/src/core/patch-lint-creators.d.ts +0 -26
- package/dist/src/core/patch-lint-creators.js +0 -45
- package/dist/src/core/patch-lint-cross.d.ts +0 -232
- package/dist/src/core/patch-lint-cross.js +0 -590
- package/dist/src/core/patch-lint-css.d.ts +0 -27
- package/dist/src/core/patch-lint-css.js +0 -228
- package/dist/src/core/patch-lint-diff-tag.d.ts +0 -51
- package/dist/src/core/patch-lint-diff-tag.js +0 -105
- package/dist/src/core/patch-lint-diff.d.ts +0 -42
- package/dist/src/core/patch-lint-diff.js +0 -100
- package/dist/src/core/patch-lint-file-size.d.ts +0 -57
- package/dist/src/core/patch-lint-file-size.js +0 -62
- package/dist/src/core/patch-lint-forward-registration-extended.d.ts +0 -61
- package/dist/src/core/patch-lint-forward-registration-extended.js +0 -265
- package/dist/src/core/patch-lint-forward-registration.d.ts +0 -71
- package/dist/src/core/patch-lint-forward-registration.js +0 -266
- package/dist/src/core/patch-lint-ignore.d.ts +0 -196
- package/dist/src/core/patch-lint-ignore.js +0 -429
- package/dist/src/core/patch-lint-imports.d.ts +0 -5
- package/dist/src/core/patch-lint-imports.js +0 -67
- package/dist/src/core/patch-lint-jsdoc.d.ts +0 -67
- package/dist/src/core/patch-lint-jsdoc.js +0 -471
- package/dist/src/core/patch-lint-module-registration.d.ts +0 -22
- package/dist/src/core/patch-lint-module-registration.js +0 -97
- package/dist/src/core/patch-lint-mozbuild.d.ts +0 -18
- package/dist/src/core/patch-lint-mozbuild.js +0 -192
- package/dist/src/core/patch-lint-observer.d.ts +0 -37
- package/dist/src/core/patch-lint-observer.js +0 -167
- package/dist/src/core/patch-lint-ownership.d.ts +0 -74
- package/dist/src/core/patch-lint-ownership.js +0 -125
- package/dist/src/core/patch-lint-prettier.d.ts +0 -34
- package/dist/src/core/patch-lint-prettier.js +0 -124
- package/dist/src/core/patch-lint-projection.d.ts +0 -25
- package/dist/src/core/patch-lint-projection.js +0 -43
- package/dist/src/core/patch-lint-queue-types.d.ts +0 -60
- package/dist/src/core/patch-lint-queue-types.js +0 -12
- package/dist/src/core/patch-lint-size-thresholds.d.ts +0 -52
- package/dist/src/core/patch-lint-size-thresholds.js +0 -110
- package/dist/src/core/patch-lint-size.d.ts +0 -117
- package/dist/src/core/patch-lint-size.js +0 -331
- package/dist/src/core/patch-lint-staged-registration.d.ts +0 -78
- package/dist/src/core/patch-lint-staged-registration.js +0 -110
- package/dist/src/core/patch-lint-token-scale.d.ts +0 -57
- package/dist/src/core/patch-lint-token-scale.js +0 -286
- package/dist/src/core/patch-lint-unmanaged-companion.d.ts +0 -106
- package/dist/src/core/patch-lint-unmanaged-companion.js +0 -214
- package/dist/src/core/patch-lint.d.ts +0 -191
- package/dist/src/core/patch-lint.js +0 -529
- package/dist/src/core/patch-lock.d.ts +0 -40
- package/dist/src/core/patch-lock.js +0 -129
- package/dist/src/core/patch-manifest-consistency.d.ts +0 -95
- package/dist/src/core/patch-manifest-consistency.js +0 -256
- package/dist/src/core/patch-manifest-files-affected.d.ts +0 -43
- package/dist/src/core/patch-manifest-files-affected.js +0 -77
- package/dist/src/core/patch-manifest-io.d.ts +0 -199
- package/dist/src/core/patch-manifest-io.js +0 -556
- package/dist/src/core/patch-manifest-key-order.d.ts +0 -23
- package/dist/src/core/patch-manifest-key-order.js +0 -60
- package/dist/src/core/patch-manifest-query.d.ts +0 -55
- package/dist/src/core/patch-manifest-query.js +0 -139
- package/dist/src/core/patch-manifest-resolve.d.ts +0 -21
- package/dist/src/core/patch-manifest-resolve.js +0 -35
- package/dist/src/core/patch-manifest-stage.d.ts +0 -46
- package/dist/src/core/patch-manifest-stage.js +0 -96
- package/dist/src/core/patch-manifest-validate.d.ts +0 -20
- package/dist/src/core/patch-manifest-validate.js +0 -240
- package/dist/src/core/patch-manifest.d.ts +0 -12
- package/dist/src/core/patch-manifest.js +0 -13
- package/dist/src/core/patch-order-legal.d.ts +0 -26
- package/dist/src/core/patch-order-legal.js +0 -88
- package/dist/src/core/patch-parse.d.ts +0 -161
- package/dist/src/core/patch-parse.js +0 -347
- package/dist/src/core/patch-policy-content.d.ts +0 -40
- package/dist/src/core/patch-policy-content.js +0 -216
- package/dist/src/core/patch-policy.d.ts +0 -80
- package/dist/src/core/patch-policy.js +0 -394
- package/dist/src/core/patch-registration-refs.d.ts +0 -41
- package/dist/src/core/patch-registration-refs.js +0 -107
- package/dist/src/core/patch-retired.d.ts +0 -57
- package/dist/src/core/patch-retired.js +0 -92
- package/dist/src/core/patch-source-metadata.d.ts +0 -6
- package/dist/src/core/patch-source-metadata.js +0 -12
- package/dist/src/core/patch-subset.d.ts +0 -18
- package/dist/src/core/patch-subset.js +0 -67
- package/dist/src/core/patch-transform.d.ts +0 -61
- package/dist/src/core/patch-transform.js +0 -198
- package/dist/src/core/preflight-wait.d.ts +0 -22
- package/dist/src/core/preflight-wait.js +0 -62
- package/dist/src/core/process-cpu-time.d.ts +0 -12
- package/dist/src/core/process-cpu-time.js +0 -52
- package/dist/src/core/process-owner.d.ts +0 -9
- package/dist/src/core/process-owner.js +0 -43
- package/dist/src/core/rebase-dry-run.d.ts +0 -48
- package/dist/src/core/rebase-dry-run.js +0 -105
- package/dist/src/core/rebase-from-version.d.ts +0 -46
- package/dist/src/core/rebase-from-version.js +0 -71
- package/dist/src/core/rebase-session.d.ts +0 -100
- package/dist/src/core/rebase-session.js +0 -174
- package/dist/src/core/register-browser-content.d.ts +0 -11
- package/dist/src/core/register-browser-content.js +0 -52
- package/dist/src/core/register-browser-test.d.ts +0 -18
- package/dist/src/core/register-browser-test.js +0 -66
- package/dist/src/core/register-module.d.ts +0 -11
- package/dist/src/core/register-module.js +0 -56
- package/dist/src/core/register-result.d.ts +0 -30
- package/dist/src/core/register-result.js +0 -8
- package/dist/src/core/register-scaffold.d.ts +0 -55
- package/dist/src/core/register-scaffold.js +0 -146
- package/dist/src/core/register-shared-css.d.ts +0 -36
- package/dist/src/core/register-shared-css.js +0 -112
- package/dist/src/core/register-xpcshell-test.d.ts +0 -50
- package/dist/src/core/register-xpcshell-test.js +0 -143
- package/dist/src/core/run-log-redact.d.ts +0 -38
- package/dist/src/core/run-log-redact.js +0 -69
- package/dist/src/core/run-log.d.ts +0 -97
- package/dist/src/core/run-log.js +0 -334
- package/dist/src/core/run-profile.d.ts +0 -57
- package/dist/src/core/run-profile.js +0 -137
- package/dist/src/core/shared-ftl.d.ts +0 -28
- package/dist/src/core/shared-ftl.js +0 -49
- package/dist/src/core/signal-critical.d.ts +0 -38
- package/dist/src/core/signal-critical.js +0 -62
- package/dist/src/core/smoke-patterns.d.ts +0 -81
- package/dist/src/core/smoke-patterns.js +0 -176
- package/dist/src/core/state-file.d.ts +0 -60
- package/dist/src/core/state-file.js +0 -71
- package/dist/src/core/status-binary.d.ts +0 -62
- package/dist/src/core/status-binary.js +0 -133
- package/dist/src/core/status-classify.d.ts +0 -96
- package/dist/src/core/status-classify.js +0 -244
- package/dist/src/core/test-changed-prefs.d.ts +0 -30
- package/dist/src/core/test-changed-prefs.js +0 -93
- package/dist/src/core/test-harness-crash.d.ts +0 -251
- package/dist/src/core/test-harness-crash.js +0 -780
- package/dist/src/core/test-harness-infra.d.ts +0 -32
- package/dist/src/core/test-harness-infra.js +0 -69
- package/dist/src/core/test-harness-output.d.ts +0 -45
- package/dist/src/core/test-harness-output.js +0 -119
- package/dist/src/core/test-harness-signature.d.ts +0 -57
- package/dist/src/core/test-harness-signature.js +0 -35
- package/dist/src/core/test-harness-verdict-notes.d.ts +0 -54
- package/dist/src/core/test-harness-verdict-notes.js +0 -48
- package/dist/src/core/test-host-state.d.ts +0 -14
- package/dist/src/core/test-host-state.js +0 -80
- package/dist/src/core/test-path-scope.d.ts +0 -59
- package/dist/src/core/test-path-scope.js +0 -147
- package/dist/src/core/test-profile-files.d.ts +0 -17
- package/dist/src/core/test-profile-files.js +0 -75
- package/dist/src/core/test-raw-log.d.ts +0 -66
- package/dist/src/core/test-raw-log.js +0 -122
- package/dist/src/core/test-run-completeness.d.ts +0 -97
- package/dist/src/core/test-run-completeness.js +0 -191
- package/dist/src/core/test-stale-check.d.ts +0 -213
- package/dist/src/core/test-stale-check.js +0 -396
- package/dist/src/core/test-stale-exempt.d.ts +0 -40
- package/dist/src/core/test-stale-exempt.js +0 -70
- package/dist/src/core/test-stale-symlink.d.ts +0 -12
- package/dist/src/core/test-stale-symlink.js +0 -39
- package/dist/src/core/test-stall-triage.d.ts +0 -51
- package/dist/src/core/test-stall-triage.js +0 -142
- package/dist/src/core/test-xpcshell-retry.d.ts +0 -35
- package/dist/src/core/test-xpcshell-retry.js +0 -31
- package/dist/src/core/token-category.d.ts +0 -54
- package/dist/src/core/token-category.js +0 -299
- package/dist/src/core/token-coverage.d.ts +0 -12
- package/dist/src/core/token-coverage.js +0 -96
- package/dist/src/core/token-dark-mode.d.ts +0 -64
- package/dist/src/core/token-dark-mode.js +0 -186
- package/dist/src/core/token-docs.d.ts +0 -34
- package/dist/src/core/token-docs.js +0 -102
- package/dist/src/core/token-inventory.d.ts +0 -56
- package/dist/src/core/token-inventory.js +0 -114
- package/dist/src/core/token-lint.d.ts +0 -53
- package/dist/src/core/token-lint.js +0 -131
- package/dist/src/core/token-manager.d.ts +0 -87
- package/dist/src/core/token-manager.js +0 -407
- package/dist/src/core/token-scaffold.d.ts +0 -36
- package/dist/src/core/token-scaffold.js +0 -73
- package/dist/src/core/token-sibling-sheets.d.ts +0 -46
- package/dist/src/core/token-sibling-sheets.js +0 -119
- package/dist/src/core/token-variant.d.ts +0 -90
- package/dist/src/core/token-variant.js +0 -327
- package/dist/src/core/toolchain-preflight.d.ts +0 -90
- package/dist/src/core/toolchain-preflight.js +0 -251
- package/dist/src/core/tree-cow.d.ts +0 -16
- package/dist/src/core/tree-cow.js +0 -71
- package/dist/src/core/tree-guard.d.ts +0 -35
- package/dist/src/core/tree-guard.js +0 -194
- package/dist/src/core/tree-store.d.ts +0 -143
- package/dist/src/core/tree-store.js +0 -478
- package/dist/src/core/typecheck-shim.d.ts +0 -90
- package/dist/src/core/typecheck-shim.js +0 -507
- package/dist/src/core/typecheck.d.ts +0 -75
- package/dist/src/core/typecheck.js +0 -433
- package/dist/src/core/wire-destroy.d.ts +0 -25
- package/dist/src/core/wire-destroy.js +0 -126
- package/dist/src/core/wire-dom-fragment.d.ts +0 -44
- package/dist/src/core/wire-dom-fragment.js +0 -139
- package/dist/src/core/wire-init.d.ts +0 -28
- package/dist/src/core/wire-init.js +0 -219
- package/dist/src/core/wire-subscript.d.ts +0 -23
- package/dist/src/core/wire-subscript.js +0 -145
- package/dist/src/core/wire-utils.d.ts +0 -149
- package/dist/src/core/wire-utils.js +0 -338
- package/dist/src/core/xpcshell-appdir.d.ts +0 -157
- package/dist/src/core/xpcshell-appdir.js +0 -299
- package/dist/src/core/xpcshell-profile-dir.d.ts +0 -12
- package/dist/src/core/xpcshell-profile-dir.js +0 -45
- package/dist/src/errors/base.d.ts +0 -217
- package/dist/src/errors/base.js +0 -279
- package/dist/src/errors/build.d.ts +0 -92
- package/dist/src/errors/build.js +0 -166
- package/dist/src/errors/codes.d.ts +0 -74
- package/dist/src/errors/codes.js +0 -74
- package/dist/src/errors/config.d.ts +0 -17
- package/dist/src/errors/config.js +0 -39
- package/dist/src/errors/download.d.ts +0 -66
- package/dist/src/errors/download.js +0 -160
- package/dist/src/errors/furnace.d.ts +0 -20
- package/dist/src/errors/furnace.js +0 -28
- package/dist/src/errors/git.d.ts +0 -65
- package/dist/src/errors/git.js +0 -140
- package/dist/src/errors/patch.d.ts +0 -27
- package/dist/src/errors/patch.js +0 -52
- package/dist/src/errors/rebase.d.ts +0 -42
- package/dist/src/errors/rebase.js +0 -71
- package/dist/src/errors/run.d.ts +0 -16
- package/dist/src/errors/run.js +0 -22
- package/dist/src/index.d.ts +0 -42
- package/dist/src/index.js +0 -32
- package/dist/src/types/cli.d.ts +0 -14
- package/dist/src/types/commands/index.d.ts +0 -6
- package/dist/src/types/commands/index.js +0 -5
- package/dist/src/types/commands/options.d.ts +0 -1367
- package/dist/src/types/commands/options.js +0 -5
- package/dist/src/types/commands/patches.d.ts +0 -352
- package/dist/src/types/commands/patches.js +0 -5
- package/dist/src/types/commands/project.d.ts +0 -51
- package/dist/src/types/commands/project.js +0 -5
- package/dist/src/types/config.d.ts +0 -703
- package/dist/src/types/config.js +0 -15
- package/dist/src/types/furnace.d.ts +0 -415
- package/dist/src/types/furnace.js +0 -26
- package/dist/src/types/index.d.ts +0 -5
- package/dist/src/types/index.js +0 -5
- package/dist/src/types/json.d.ts +0 -22
- package/dist/src/types/json.js +0 -11
- package/dist/src/types/typecheck.d.ts +0 -51
- package/dist/src/types/typecheck.js +0 -14
- package/dist/src/utils/assert.d.ts +0 -34
- package/dist/src/utils/assert.js +0 -61
- package/dist/src/utils/build-info.d.ts +0 -30
- package/dist/src/utils/build-info.js +0 -99
- package/dist/src/utils/child-env.d.ts +0 -28
- package/dist/src/utils/child-env.js +0 -27
- package/dist/src/utils/concurrency.d.ts +0 -8
- package/dist/src/utils/concurrency.js +0 -32
- package/dist/src/utils/elapsed.d.ts +0 -2
- package/dist/src/utils/elapsed.js +0 -23
- package/dist/src/utils/errors.d.ts +0 -39
- package/dist/src/utils/errors.js +0 -67
- package/dist/src/utils/fs.d.ts +0 -113
- package/dist/src/utils/fs.js +0 -337
- package/dist/src/utils/hash.d.ts +0 -12
- package/dist/src/utils/hash.js +0 -16
- package/dist/src/utils/line-dispatch.d.ts +0 -15
- package/dist/src/utils/line-dispatch.js +0 -48
- package/dist/src/utils/logger.d.ts +0 -109
- package/dist/src/utils/logger.js +0 -270
- package/dist/src/utils/machine-output.d.ts +0 -12
- package/dist/src/utils/machine-output.js +0 -33
- package/dist/src/utils/options.d.ts +0 -155
- package/dist/src/utils/options.js +0 -312
- package/dist/src/utils/package-root.d.ts +0 -21
- package/dist/src/utils/package-root.js +0 -70
- package/dist/src/utils/parse.d.ts +0 -117
- package/dist/src/utils/parse.js +0 -214
- package/dist/src/utils/path-glob.d.ts +0 -15
- package/dist/src/utils/path-glob.js +0 -47
- package/dist/src/utils/paths.d.ts +0 -31
- package/dist/src/utils/paths.js +0 -80
- package/dist/src/utils/platform.d.ts +0 -9
- package/dist/src/utils/platform.js +0 -14
- package/dist/src/utils/process-group.d.ts +0 -42
- package/dist/src/utils/process-group.js +0 -190
- package/dist/src/utils/process-input.d.ts +0 -27
- package/dist/src/utils/process-input.js +0 -46
- package/dist/src/utils/process.d.ts +0 -293
- package/dist/src/utils/process.js +0 -593
- package/dist/src/utils/ps-duration.d.ts +0 -31
- package/dist/src/utils/ps-duration.js +0 -70
- package/dist/src/utils/regex.d.ts +0 -39
- package/dist/src/utils/regex.js +0 -109
- package/dist/src/utils/sleep.d.ts +0 -25
- package/dist/src/utils/sleep.js +0 -30
- package/dist/src/utils/stdio-drain.d.ts +0 -28
- package/dist/src/utils/stdio-drain.js +0 -54
- package/dist/src/utils/validation.d.ts +0 -182
- package/dist/src/utils/validation.js +0 -394
- package/docs/lifecycle-invariants.md +0 -523
- package/docs/run-logs.md +0 -122
- package/docs/verification-trees.md +0 -49
- /package/dist/src/{types/cli.js → cli/context.js} +0 -0
|
@@ -1,531 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: EUPL-1.2
|
|
2
|
-
import { randomUUID } from 'node:crypto';
|
|
3
|
-
import { mkdir, rename, rm, stat } from 'node:fs/promises';
|
|
4
|
-
import { dirname } from 'node:path';
|
|
5
|
-
import { LockContentionError } from '../errors/base.js';
|
|
6
|
-
import { getNodeErrorCode, toError } from '../utils/errors.js';
|
|
7
|
-
import { ensureDir } from '../utils/fs.js';
|
|
8
|
-
import { verbose, warn } from '../utils/logger.js';
|
|
9
|
-
import { sleep } from '../utils/sleep.js';
|
|
10
|
-
import { isLockOwnerAlive, LOCK_PID_FILE, readLockOwner, writeLockOwner, } from './file-lock-owner.js';
|
|
11
|
-
import { readLockQueue, registerWaiter, } from './file-lock-queue.js';
|
|
12
|
-
import { countLiveSharedHolders, registerSharedHold, releaseSharedHoldsForSignal, } from './file-lock-shared.js';
|
|
13
|
-
export { LOCK_PID_FILE };
|
|
14
|
-
export { formatLockQueuePosition } from './file-lock-queue.js';
|
|
15
|
-
const DEFAULT_LOCK_TIMEOUT_MS = 30_000;
|
|
16
|
-
const DEFAULT_LOCK_POLL_MS = 50;
|
|
17
|
-
const DEFAULT_STALE_LOCK_MS = 5 * 60_000;
|
|
18
|
-
/**
|
|
19
|
-
* Minimum interval between stale-lock probes while a waiter polls. Probing
|
|
20
|
-
* exactly once per waiter means a holder that dies after that probe leaves
|
|
21
|
-
* the waiter polling a permanently dead lock until `timeoutMs`, up to 24
|
|
22
|
-
* hours for the build lock (see `withBuildLock` in mach.ts). Re-probing on a
|
|
23
|
-
* small interval bounds that to seconds while keeping the per-poll cost
|
|
24
|
-
* negligible: one stat plus one small read every ~5 s.
|
|
25
|
-
*/
|
|
26
|
-
const STALE_REPROBE_INTERVAL_MS = 5_000;
|
|
27
|
-
/**
|
|
28
|
-
* Default interval between wait probes (holder + queue) when a caller wants
|
|
29
|
-
* deadline extension but no progress line of its own.
|
|
30
|
-
*/
|
|
31
|
-
const WAIT_PROBE_INTERVAL_MS = 5_000;
|
|
32
|
-
/** Derives the sibling lock-directory path used to guard a file-based resource. */
|
|
33
|
-
export function createSiblingLockPath(filePath, suffix = '.fireforge.lock') {
|
|
34
|
-
return `${filePath}${suffix}`;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Inspects a lock without acquiring it. Read-only and fail-open: a missing
|
|
38
|
-
* lock is reported as free, never as an error.
|
|
39
|
-
*/
|
|
40
|
-
export async function readLockStatus(lockPath) {
|
|
41
|
-
const queue = await readLockQueue(lockPath);
|
|
42
|
-
const shared = await countLiveSharedHolders(lockPath, { reap: false });
|
|
43
|
-
const sharedPart = shared > 0 ? { sharedHolders: shared } : {};
|
|
44
|
-
let heldForMs;
|
|
45
|
-
try {
|
|
46
|
-
// Clamped: filesystem mtime resolution can round a just-created lock
|
|
47
|
-
// fractionally ahead of `Date.now()`, and a negative age is nonsense
|
|
48
|
-
// in a status report.
|
|
49
|
-
heldForMs = Math.max(0, Date.now() - (await stat(lockPath)).mtimeMs);
|
|
50
|
-
}
|
|
51
|
-
catch {
|
|
52
|
-
return { held: false, queueDepth: queue.depth, ...sharedPart };
|
|
53
|
-
}
|
|
54
|
-
const owner = await readLockOwner(lockPath);
|
|
55
|
-
const holder = owner.present
|
|
56
|
-
? { pid: owner.pid, alive: isLockOwnerAlive(owner), metadata: owner.metadata }
|
|
57
|
-
: undefined;
|
|
58
|
-
return { held: true, holder, heldForMs, queueDepth: queue.depth, ...sharedPart };
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Reads the contended lock's owner and queue in one go. One probe per cycle
|
|
62
|
-
* serves both the progress line and the deadline extension, so the two can
|
|
63
|
-
* never disagree about the position they saw. Failure to read the owner
|
|
64
|
-
* degrades to `holder: undefined`, since a diagnostic must never break the
|
|
65
|
-
* wait loop.
|
|
66
|
-
*/
|
|
67
|
-
async function probeWaitState(lockPath, self) {
|
|
68
|
-
const owner = await readLockOwner(lockPath);
|
|
69
|
-
const holder = owner.present
|
|
70
|
-
? { pid: owner.pid, alive: isLockOwnerAlive(owner), metadata: owner.metadata }
|
|
71
|
-
: undefined;
|
|
72
|
-
return { holder, queue: await readLockQueue(lockPath, self) };
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Reaps a lock directory believed to be stale, safely against concurrent
|
|
76
|
-
* reapers and a concurrent legitimate re-acquisition.
|
|
77
|
-
*
|
|
78
|
-
* A naive stat → read-PID → `rm` sequence has a TOCTOU hole: two waiters
|
|
79
|
-
* both observe the dead owner, one removes the stale dir and `mkdir`s its
|
|
80
|
-
* own lock, and the other's already-decided `rm` then deletes the fresh
|
|
81
|
-
* lock, putting two processes inside the critical section at once.
|
|
82
|
-
*
|
|
83
|
-
* Rename-aside closes it: `rename()` is atomic, so exactly one reaper wins
|
|
84
|
-
* ownership of the directory (the loser gets ENOENT and re-polls), and
|
|
85
|
-
* nothing ever deletes the live path directly. After winning the rename the
|
|
86
|
-
* owner is re-read from the renamed dir. If it is now a live process (the
|
|
87
|
-
* lock was released and re-acquired between the staleness read and the
|
|
88
|
-
* rename), it is renamed back instead of reaped.
|
|
89
|
-
*
|
|
90
|
-
* @returns true when the caller should immediately retry `mkdir` (the lock
|
|
91
|
-
* path is now free or was freed by someone else), false when the lock is
|
|
92
|
-
* legitimately held and the caller should keep waiting.
|
|
93
|
-
*/
|
|
94
|
-
async function reapStaleLock(lockPath, ageMs, onStaleLockMessage) {
|
|
95
|
-
const reapPath = `${lockPath}.reaping-${process.pid}-${randomUUID()}`;
|
|
96
|
-
try {
|
|
97
|
-
await rename(lockPath, reapPath);
|
|
98
|
-
}
|
|
99
|
-
catch (error) {
|
|
100
|
-
if (getNodeErrorCode(error) === 'ENOENT') {
|
|
101
|
-
// Another reaper won, or the owner released. Either way, retry mkdir.
|
|
102
|
-
verbose(`Stale lock disappeared before reaping completed: ${lockPath}`);
|
|
103
|
-
return true;
|
|
104
|
-
}
|
|
105
|
-
verbose(`Could not rename stale lock aside (${lockPath}): ${toError(error).message}`);
|
|
106
|
-
return false;
|
|
107
|
-
}
|
|
108
|
-
// We exclusively own reapPath now. Re-verify: the owner may have changed
|
|
109
|
-
// between the staleness probe and the rename (release + fresh acquire).
|
|
110
|
-
const owner = await readLockOwner(reapPath);
|
|
111
|
-
if (owner.present && isLockOwnerAlive(owner)) {
|
|
112
|
-
try {
|
|
113
|
-
await rename(reapPath, lockPath);
|
|
114
|
-
verbose(`Aborted stale-lock reap of ${lockPath}: owner PID ${owner.pid} is alive (lock was re-acquired mid-probe)`);
|
|
115
|
-
}
|
|
116
|
-
catch (restoreError) {
|
|
117
|
-
// Rename-back can only fail if a third process mkdir'd the lock path
|
|
118
|
-
// in this instant. The displaced live owner keeps running without its
|
|
119
|
-
// lock, so surface it loudly instead of hiding the lost exclusion.
|
|
120
|
-
warn(`Could not restore live lock for PID ${owner.pid} at ${lockPath} ` +
|
|
121
|
-
`(${toError(restoreError).message}). Displaced lock kept at ${reapPath} for inspection.`);
|
|
122
|
-
}
|
|
123
|
-
return false;
|
|
124
|
-
}
|
|
125
|
-
const staleMessage = onStaleLockMessage?.(ageMs);
|
|
126
|
-
if (staleMessage) {
|
|
127
|
-
warn(staleMessage);
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
verbose(`Removing stale lock ${lockPath} (age: ${Math.round(ageMs / 1000)}s)`);
|
|
131
|
-
}
|
|
132
|
-
await rm(reapPath, { recursive: true, force: true });
|
|
133
|
-
return true;
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Probes a contended lock for staleness and reaps it when the owner is gone.
|
|
137
|
-
*
|
|
138
|
-
* @returns true when the caller should immediately retry `mkdir`.
|
|
139
|
-
*/
|
|
140
|
-
async function removeIfStaleLock(lockPath, staleMs, onStaleLockMessage) {
|
|
141
|
-
try {
|
|
142
|
-
const lockStat = await stat(lockPath);
|
|
143
|
-
const ageMs = Date.now() - lockStat.mtimeMs;
|
|
144
|
-
// Check the PID first, independent of age. Age-gating everything means a
|
|
145
|
-
// lock younger than `staleMs` (default 5 minutes) is never removed even
|
|
146
|
-
// when its PID file points at a process that has already exited. That is
|
|
147
|
-
// the situation after SIGINT'ing `furnace preview`, where the signal handler
|
|
148
|
-
// calls `process.exit` and `withFileLock`'s release never runs. With the
|
|
149
|
-
// PID-first check an explicitly-dead owner unblocks immediately.
|
|
150
|
-
const owner = await readLockOwner(lockPath);
|
|
151
|
-
if (owner.present) {
|
|
152
|
-
if (!isLockOwnerAlive(owner)) {
|
|
153
|
-
return await reapStaleLock(lockPath, ageMs, onStaleLockMessage);
|
|
154
|
-
}
|
|
155
|
-
// The owner is alive (PID exists and, where `/proc` can tell, it is
|
|
156
|
-
// the process that acquired the lock, not a recycled PID), so respect
|
|
157
|
-
// it regardless of age. A slow `mach build` legitimately holds the
|
|
158
|
-
// lock past the stale threshold and we don't want to race-remove it.
|
|
159
|
-
verbose(`Lock at ${lockPath} is ${Math.round(ageMs / 1000)}s old but PID ${owner.pid} is still running — not removing`);
|
|
160
|
-
return false;
|
|
161
|
-
}
|
|
162
|
-
// No readable PID file. Fall back to the age-only heuristic so locks
|
|
163
|
-
// written by earlier FireForge releases (which may not have written a
|
|
164
|
-
// PID file) still clear after the staleness window elapses.
|
|
165
|
-
if (ageMs <= staleMs) {
|
|
166
|
-
return false;
|
|
167
|
-
}
|
|
168
|
-
return await reapStaleLock(lockPath, ageMs, onStaleLockMessage);
|
|
169
|
-
}
|
|
170
|
-
catch (error) {
|
|
171
|
-
const code = getNodeErrorCode(error);
|
|
172
|
-
if (code === 'ENOENT') {
|
|
173
|
-
verbose(`Stale lock disappeared before cleanup completed: ${lockPath}`);
|
|
174
|
-
return true;
|
|
175
|
-
}
|
|
176
|
-
verbose(`Stale lock check failed for ${lockPath}: ${toError(error).message}`);
|
|
177
|
-
throw toError(error);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Releases a lock previously acquired by this process, verifying ownership
|
|
182
|
-
* first. An unconditional `finally { rm }` would remove whichever lock
|
|
183
|
-
* directory is present. If a stale-lock reaper had (in a pathological race)
|
|
184
|
-
* replaced our lock, that deletes the new owner's lock and compounds the
|
|
185
|
-
* double-acquisition. When the PID file no longer names us, warn and leave
|
|
186
|
-
* the directory alone.
|
|
187
|
-
*
|
|
188
|
-
* The owner record is always present here: `writeLockOwner` is fatal, so an
|
|
189
|
-
* acquisition whose record failed to write never reached the operation.
|
|
190
|
-
*/
|
|
191
|
-
async function releaseLock(lockPath, ownerToken) {
|
|
192
|
-
const owner = await readLockOwner(lockPath);
|
|
193
|
-
if (owner.present &&
|
|
194
|
-
(owner.pid !== process.pid || (owner.token !== undefined && owner.token !== ownerToken))) {
|
|
195
|
-
warn(`Not removing lock ${lockPath}: it is now owned by PID ${owner.pid} — ` +
|
|
196
|
-
'this process no longer holds it.');
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
|
-
await rm(lockPath, { recursive: true, force: true });
|
|
200
|
-
}
|
|
201
|
-
/**
|
|
202
|
-
* Removes a lock directory only if this process still owns it, for callers
|
|
203
|
-
* that hold no acquisition token.
|
|
204
|
-
*
|
|
205
|
-
* The ownership half of {@link releaseLock}, minus the token check: a
|
|
206
|
-
* signal-time sweeper knows which lock paths its own operations opened, but
|
|
207
|
-
* not the per-acquisition UUID those acquisitions minted. The PID check is
|
|
208
|
-
* still the one that matters: it stops the sweeper deleting a lock a
|
|
209
|
-
* different process acquired in the window between our operation dying and
|
|
210
|
-
* the sweep running.
|
|
211
|
-
*
|
|
212
|
-
* Never throws: callers are shutdown paths where a slow or failing I/O must
|
|
213
|
-
* not prevent the process from exiting. Returns whether the directory was
|
|
214
|
-
* removed so callers can log accurately.
|
|
215
|
-
*
|
|
216
|
-
* @param lockPath - Lock directory to remove
|
|
217
|
-
* @returns True when the lock was removed, false when it was left in place
|
|
218
|
-
*/
|
|
219
|
-
export async function releaseLockIfOwned(lockPath) {
|
|
220
|
-
try {
|
|
221
|
-
const owner = await readLockOwner(lockPath);
|
|
222
|
-
if (owner.present && owner.pid !== process.pid) {
|
|
223
|
-
return false;
|
|
224
|
-
}
|
|
225
|
-
await rm(lockPath, { recursive: true, force: true });
|
|
226
|
-
return true;
|
|
227
|
-
}
|
|
228
|
-
catch {
|
|
229
|
-
return false;
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* Builds the contention refusal thrown when the wait budget expires.
|
|
234
|
-
*
|
|
235
|
-
* Typed as {@link LockContentionError} (a `FireForgeError`) so the CLI
|
|
236
|
-
* boundary prints the refusal as one clean line instead of an "Unexpected
|
|
237
|
-
* error" stack. Callers supplying `onTimeoutMessage` still get the holder
|
|
238
|
-
* identification appended: the reason-first copy stays theirs, the "who
|
|
239
|
-
* holds it" is ours.
|
|
240
|
-
*
|
|
241
|
-
* `queue` is read at expiry by the caller, not carried over from the last
|
|
242
|
-
* progress probe: see {@link formatQueuePositionReached}.
|
|
243
|
-
*/
|
|
244
|
-
async function buildLockTimeoutError(lockPath, onTimeoutMessage, cause, queue) {
|
|
245
|
-
const owner = await readLockOwner(lockPath);
|
|
246
|
-
const liveHolder = owner.present && isLockOwnerAlive(owner) ? owner : undefined;
|
|
247
|
-
const details = liveHolder !== undefined && liveHolder.metadata.length > 0
|
|
248
|
-
? ` (${liveHolder.metadata.join(', ')})`
|
|
249
|
-
: '';
|
|
250
|
-
const position = formatQueuePositionReached(queue);
|
|
251
|
-
if (onTimeoutMessage !== undefined) {
|
|
252
|
-
const identifiedHolder = liveHolder !== undefined ? ` The lock is held by PID ${liveHolder.pid}${details}.` : '';
|
|
253
|
-
return new LockContentionError(`${onTimeoutMessage}${identifiedHolder}${position}`, cause);
|
|
254
|
-
}
|
|
255
|
-
const holderHint = liveHolder !== undefined
|
|
256
|
-
? ` It is held by running process ${liveHolder.pid}${details} — wait for it to finish, or stop it and retry.`
|
|
257
|
-
: ' If no other FireForge process is running, remove the lock directory and retry.';
|
|
258
|
-
return new LockContentionError(`Timed out waiting for file lock ${lockPath}.${holderHint}${position}`, cause);
|
|
259
|
-
}
|
|
260
|
-
/**
|
|
261
|
-
* States the queue position the expired wait actually reached.
|
|
262
|
-
*
|
|
263
|
-
* Silence here made the worst outcome invisible: a wait that expires
|
|
264
|
-
* one position from the head has paid the whole budget for nothing, and the
|
|
265
|
-
* operator cannot tell that from a queue that never moved. Naming the
|
|
266
|
-
* position turns "raise the budget" into an informed decision instead of a
|
|
267
|
-
* guess. Omitted when no queue was observed, since an empty registry is not
|
|
268
|
-
* evidence of an empty queue.
|
|
269
|
-
*
|
|
270
|
-
* The queue is read at the moment the budget expires rather than taken from
|
|
271
|
-
* the last progress probe. A probe snapshot is up to one `waitProgressMs`
|
|
272
|
-
* stale, and it may not exist at all: a short budget can expire before the
|
|
273
|
-
* first probe lands (a slow runner's `registerWaiter` alone can outlast it),
|
|
274
|
-
* and a caller that configured no probe at all never has one.
|
|
275
|
-
*/
|
|
276
|
-
function formatQueuePositionReached(queue) {
|
|
277
|
-
if (queue.depth === 0)
|
|
278
|
-
return '';
|
|
279
|
-
if (queue.ahead === 0) {
|
|
280
|
-
return ` You were next in a queue of ${queue.depth} when the wait expired — a larger --wait-lock would very likely have got a turn.`;
|
|
281
|
-
}
|
|
282
|
-
return ` You were still ${queue.ahead} from the head of a queue of ${queue.depth} when the wait expired; re-run with a larger --wait-lock.`;
|
|
283
|
-
}
|
|
284
|
-
/**
|
|
285
|
-
* Runs one wait probe: reads holder and queue, and reports progress when the
|
|
286
|
-
* caller asked for it. Split out of the wait loop so the loop stays a
|
|
287
|
-
* readable state machine.
|
|
288
|
-
*/
|
|
289
|
-
async function runWaitProbe(lockPath, self, timeoutMs, options) {
|
|
290
|
-
const { holder, queue } = await probeWaitState(lockPath, self);
|
|
291
|
-
options.onWaitProgress?.({
|
|
292
|
-
waitedMs: Date.now() - self.startedAt,
|
|
293
|
-
timeoutMs,
|
|
294
|
-
holder,
|
|
295
|
-
queue,
|
|
296
|
-
});
|
|
297
|
-
return { queue };
|
|
298
|
-
}
|
|
299
|
-
/**
|
|
300
|
-
* Whether it is this waiter's turn to contend for the lock: no live waiter
|
|
301
|
-
* arrived before it. Ties and dead or stalled tickets are settled by
|
|
302
|
-
* {@link readLockQueue}, so every waiter agrees on who is at the head.
|
|
303
|
-
*/
|
|
304
|
-
async function isWaiterTurn(lockPath, startedAt, waiter) {
|
|
305
|
-
return (await readLockQueue(lockPath, { startedAt, ticket: waiter.ticket })).ahead === 0;
|
|
306
|
-
}
|
|
307
|
-
/**
|
|
308
|
-
* Lock directories this process currently holds.
|
|
309
|
-
*
|
|
310
|
-
* `withFileLock`'s `finally` never runs across a `process.exit`, so a
|
|
311
|
-
* SIGTERM'd command leaves its lock on disk. The next contender reclaims it
|
|
312
|
-
* immediately (the PID-first staleness check sees a dead owner), but in the
|
|
313
|
-
* window between, `fireforge status --lock` reports the lock held by a
|
|
314
|
-
* process that is not running, which is the question an operator asks after
|
|
315
|
-
* a kill. The signal sweep closes that window.
|
|
316
|
-
*
|
|
317
|
-
* Paths only: the per-acquisition token lives in `withFileLock`'s frame and
|
|
318
|
-
* a sweeper cannot see it. {@link releaseLockIfOwned} checks the PID, which
|
|
319
|
-
* is the check that matters: it stops the sweep deleting a lock a
|
|
320
|
-
* different process acquired in the meantime.
|
|
321
|
-
*/
|
|
322
|
-
const heldLocks = new Set();
|
|
323
|
-
/**
|
|
324
|
-
* Releases every lock this process still holds, for the signal path.
|
|
325
|
-
*
|
|
326
|
-
* Never throws and never rejects: a shutdown path must not be able to keep
|
|
327
|
-
* the process alive. Returns the paths actually removed so the caller can
|
|
328
|
-
* report accurately.
|
|
329
|
-
*/
|
|
330
|
-
export async function forceReleaseHeldLocksForSignal() {
|
|
331
|
-
const paths = [...heldLocks];
|
|
332
|
-
const removed = [];
|
|
333
|
-
for (const lockPath of paths) {
|
|
334
|
-
heldLocks.delete(lockPath);
|
|
335
|
-
if (await releaseLockIfOwned(lockPath)) {
|
|
336
|
-
removed.push(lockPath);
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
removed.push(...(await releaseSharedHoldsForSignal()));
|
|
340
|
-
return removed;
|
|
341
|
-
}
|
|
342
|
-
/** Runs an async operation while holding a directory lock, with stale-lock recovery. */
|
|
343
|
-
export async function withFileLock(lockPath, operation, options = {}) {
|
|
344
|
-
const timeoutMs = options.timeoutMs ?? DEFAULT_LOCK_TIMEOUT_MS;
|
|
345
|
-
const pollMs = options.pollMs ?? DEFAULT_LOCK_POLL_MS;
|
|
346
|
-
const staleMs = options.staleMs ?? DEFAULT_STALE_LOCK_MS;
|
|
347
|
-
const staleReprobeMs = options.staleReprobeMs ?? STALE_REPROBE_INTERVAL_MS;
|
|
348
|
-
const startedAt = Date.now();
|
|
349
|
-
const extend = options.extendWhileAdvancing;
|
|
350
|
-
const hardDeadline = extend !== undefined ? startedAt + extend.maxWaitMs : undefined;
|
|
351
|
-
let deadline = startedAt + timeoutMs;
|
|
352
|
-
let lastStaleProbeAt;
|
|
353
|
-
let currentPollMs = pollMs;
|
|
354
|
-
let lastProbeAt = startedAt;
|
|
355
|
-
/** Best (lowest) queue position seen so far. Used to detect an advance. */
|
|
356
|
-
let bestAhead;
|
|
357
|
-
/**
|
|
358
|
-
* This waiter's ticket in the queue. Taken on first contention, or up
|
|
359
|
-
* front when others are already queued, so an uncontended acquire never
|
|
360
|
-
* writes one.
|
|
361
|
-
*/
|
|
362
|
-
let waiter;
|
|
363
|
-
/** The last `EEXIST`, carried as the cause of a timeout refusal. */
|
|
364
|
-
let contention;
|
|
365
|
-
// One cadence drives both the progress line and the deadline extension.
|
|
366
|
-
// Either feature alone is enough to want the probe. Neither is worth a
|
|
367
|
-
// second timer.
|
|
368
|
-
const probeIntervalMs = options.waitProgressMs ?? WAIT_PROBE_INTERVAL_MS;
|
|
369
|
-
const probeWanted = (options.onWaitProgress !== undefined && options.waitProgressMs !== undefined) ||
|
|
370
|
-
extend !== undefined;
|
|
371
|
-
await ensureDir(dirname(lockPath));
|
|
372
|
-
try {
|
|
373
|
-
// Arrival order: a newcomer that finds others already queued takes a
|
|
374
|
-
// ticket behind them instead of racing them for the next free moment.
|
|
375
|
-
// Without this a fresh command could take the lock in the gap between
|
|
376
|
-
// the holder's release and the head waiter's next poll.
|
|
377
|
-
if ((await readLockQueue(lockPath)).depth > 0) {
|
|
378
|
-
waiter = await registerWaiter(lockPath, startedAt);
|
|
379
|
-
}
|
|
380
|
-
for (;;) {
|
|
381
|
-
// Only the head of the queue contends for the lock. A waiter without
|
|
382
|
-
// a ticket (no contention seen yet, or a registry that could not be
|
|
383
|
-
// written) contends as every waiter did before tickets existed.
|
|
384
|
-
if (waiter?.ticket === undefined || (await isWaiterTurn(lockPath, startedAt, waiter))) {
|
|
385
|
-
try {
|
|
386
|
-
await mkdir(lockPath);
|
|
387
|
-
break;
|
|
388
|
-
}
|
|
389
|
-
catch (error) {
|
|
390
|
-
if (getNodeErrorCode(error) !== 'EEXIST') {
|
|
391
|
-
throw error;
|
|
392
|
-
}
|
|
393
|
-
contention = error;
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
// Take a ticket so the queue is visible to the wait output and to
|
|
397
|
-
// `fireforge status --lock`, and so the grant follows arrival order.
|
|
398
|
-
waiter ??= await registerWaiter(lockPath, startedAt);
|
|
399
|
-
await waiter.heartbeat();
|
|
400
|
-
const self = { startedAt, ticket: waiter.ticket };
|
|
401
|
-
if (lastStaleProbeAt === undefined || Date.now() - lastStaleProbeAt >= staleReprobeMs) {
|
|
402
|
-
lastStaleProbeAt = Date.now();
|
|
403
|
-
if (await removeIfStaleLock(lockPath, staleMs, options.onStaleLockMessage)) {
|
|
404
|
-
continue;
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
// The probe runs before the deadline check, so a due progress line is
|
|
408
|
-
// written before the refusal that follows it, never lost to it. On a
|
|
409
|
-
// slow host (a cold Windows CI runner) the first iteration alone, with
|
|
410
|
-
// its waiter registration and stale probe, can outlast a short budget;
|
|
411
|
-
// checked the other way round, the wait timed out having reported
|
|
412
|
-
// nothing, and an advance that probe would have seen could not extend
|
|
413
|
-
// the deadline it was about to miss.
|
|
414
|
-
if (probeWanted && Date.now() - lastProbeAt >= probeIntervalMs) {
|
|
415
|
-
lastProbeAt = Date.now();
|
|
416
|
-
// Report the budget that is currently in force, not the one
|
|
417
|
-
// originally requested: once an extension has been granted, the
|
|
418
|
-
// requested figure is stale, and a progress line that keeps
|
|
419
|
-
// quoting it reads as a timeout that does not fire.
|
|
420
|
-
const probe = await runWaitProbe(lockPath, self, deadline - startedAt, options);
|
|
421
|
-
// An advance (someone ahead of us took their turn and finished)
|
|
422
|
-
// buys a fresh budget, because the wait is working. Only a queue
|
|
423
|
-
// that stops moving starves, which is the case the timeout is for.
|
|
424
|
-
//
|
|
425
|
-
// The first observation is a seed, never an advance. Counted as an
|
|
426
|
-
// advance, the opening probe would hand out a free full budget: a
|
|
427
|
-
// `--wait-lock 300` run would outlive its 300 s even against a queue
|
|
428
|
-
// that never moved once.
|
|
429
|
-
if (hardDeadline !== undefined) {
|
|
430
|
-
if (bestAhead === undefined) {
|
|
431
|
-
bestAhead = probe.queue.ahead;
|
|
432
|
-
}
|
|
433
|
-
else if (probe.queue.ahead < bestAhead) {
|
|
434
|
-
bestAhead = probe.queue.ahead;
|
|
435
|
-
deadline = Math.min(Date.now() + timeoutMs, hardDeadline);
|
|
436
|
-
options.onWaitExtended?.({
|
|
437
|
-
ahead: probe.queue.ahead,
|
|
438
|
-
budgetMs: deadline - startedAt,
|
|
439
|
-
});
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
}
|
|
443
|
-
if (Date.now() >= deadline) {
|
|
444
|
-
// The queue is read here, not carried over from the last progress
|
|
445
|
-
// probe: the position the wait reached is the one number that says
|
|
446
|
-
// whether a larger budget would have helped, and it must not depend
|
|
447
|
-
// on a probe having happened to land inside the budget. We are still
|
|
448
|
-
// registered at this point. The ticket is returned in the `finally`
|
|
449
|
-
// below, which is only entered once this refusal has been built.
|
|
450
|
-
throw await buildLockTimeoutError(lockPath, options.onTimeoutMessage, contention, await readLockQueue(lockPath, self));
|
|
451
|
-
}
|
|
452
|
-
await sleep(currentPollMs);
|
|
453
|
-
if (options.pollMaxMs !== undefined) {
|
|
454
|
-
currentPollMs = Math.min(currentPollMs * 2, options.pollMaxMs);
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
}
|
|
458
|
-
finally {
|
|
459
|
-
// Leaving the queue happens the moment we stop waiting, whether we
|
|
460
|
-
// acquired the lock or timed out.
|
|
461
|
-
await waiter?.deregister();
|
|
462
|
-
}
|
|
463
|
-
// Stamp ownership (PID + per-acquisition token + acquisition time) into
|
|
464
|
-
// the lock directory so stale-lock recovery can check liveness and release
|
|
465
|
-
// can verify the lock is still ours before removing it. Fatal on failure:
|
|
466
|
-
// an owner-less lock is reaped by the age heuristic after five minutes,
|
|
467
|
-
// which for a multi-hour build meant a second holder mid-critical-section.
|
|
468
|
-
// `writeLockOwner` removes the just-created directory before throwing.
|
|
469
|
-
const ownerToken = randomUUID();
|
|
470
|
-
await writeLockOwner(lockPath, ownerToken, options.ownerMetadata);
|
|
471
|
-
return runWhileHeld(lockPath, ownerToken, operation, options, {
|
|
472
|
-
deadline: Math.max(deadline, Date.now() + pollMs),
|
|
473
|
-
pollMs,
|
|
474
|
-
});
|
|
475
|
-
}
|
|
476
|
-
/**
|
|
477
|
-
* Runs `operation` once the turnstile is ours: as a shared holder (turnstile
|
|
478
|
-
* released at once), or exclusively once every shared holder has drained.
|
|
479
|
-
*/
|
|
480
|
-
async function runWhileHeld(lockPath, ownerToken, operation, options, drain) {
|
|
481
|
-
if (options.mode === 'shared') {
|
|
482
|
-
// The exclusive lock was only the turnstile: record the shared hold and
|
|
483
|
-
// let the next waiter in. See file-lock-shared.ts.
|
|
484
|
-
let hold;
|
|
485
|
-
try {
|
|
486
|
-
hold = await registerSharedHold(lockPath, options.ownerMetadata);
|
|
487
|
-
}
|
|
488
|
-
finally {
|
|
489
|
-
await releaseLock(lockPath, ownerToken);
|
|
490
|
-
}
|
|
491
|
-
try {
|
|
492
|
-
return await operation();
|
|
493
|
-
}
|
|
494
|
-
finally {
|
|
495
|
-
await hold.release();
|
|
496
|
-
}
|
|
497
|
-
}
|
|
498
|
-
heldLocks.add(lockPath);
|
|
499
|
-
try {
|
|
500
|
-
await waitForSharedHoldersToDrain(lockPath, drain.deadline, drain.pollMs);
|
|
501
|
-
return await operation();
|
|
502
|
-
}
|
|
503
|
-
finally {
|
|
504
|
-
heldLocks.delete(lockPath);
|
|
505
|
-
await releaseLock(lockPath, ownerToken);
|
|
506
|
-
}
|
|
507
|
-
}
|
|
508
|
-
/**
|
|
509
|
-
* Holds an exclusive acquisition until every live shared holder has gone.
|
|
510
|
-
* The turnstile is already ours, so no new shared holder can join meanwhile.
|
|
511
|
-
*
|
|
512
|
-
* @throws LockContentionError when shared holders outlast the budget
|
|
513
|
-
*/
|
|
514
|
-
async function waitForSharedHoldersToDrain(lockPath, deadline, pollMs) {
|
|
515
|
-
let announced = false;
|
|
516
|
-
for (;;) {
|
|
517
|
-
const live = await countLiveSharedHolders(lockPath);
|
|
518
|
-
if (live === 0)
|
|
519
|
-
return;
|
|
520
|
-
if (Date.now() >= deadline) {
|
|
521
|
-
throw new LockContentionError(`Timed out waiting for file lock ${lockPath}: ${live} shared holder(s) (build-less ` +
|
|
522
|
-
'test runs under a shared lock) still hold it. Wait for them to finish, or retry ' +
|
|
523
|
-
'with a larger --wait-lock.');
|
|
524
|
-
}
|
|
525
|
-
if (!announced) {
|
|
526
|
-
verbose(`Waiting for ${live} shared holder(s) of ${lockPath} to finish.`);
|
|
527
|
-
announced = true;
|
|
528
|
-
}
|
|
529
|
-
await sleep(Math.max(pollMs, 100));
|
|
530
|
-
}
|
|
531
|
-
}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Archive metadata validation and archive identity resolution.
|
|
3
|
-
*/
|
|
4
|
-
import type { FirefoxProduct } from '../types/config.js';
|
|
5
|
-
/**
|
|
6
|
-
* Resolved archive descriptor for URL generation and cache storage.
|
|
7
|
-
*/
|
|
8
|
-
export interface ResolvedArchive {
|
|
9
|
-
requestedVersion: string;
|
|
10
|
-
product: FirefoxProduct;
|
|
11
|
-
archiveVersion: string;
|
|
12
|
-
url: string;
|
|
13
|
-
filename: string;
|
|
14
|
-
metadataFilename: string;
|
|
15
|
-
/** URL of Mozilla's published SHA256SUMS file for the release. */
|
|
16
|
-
checksumsUrl: string;
|
|
17
|
-
/** The archive's path as listed inside SHA256SUMS (relative to the release dir). */
|
|
18
|
-
pathInChecksums: string;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Sidecar metadata stored alongside a cached archive.
|
|
22
|
-
*/
|
|
23
|
-
export interface ArchiveMetadata {
|
|
24
|
-
requestedVersion: string;
|
|
25
|
-
product: FirefoxProduct;
|
|
26
|
-
archiveVersion: string;
|
|
27
|
-
url: string;
|
|
28
|
-
contentLength?: number | undefined;
|
|
29
|
-
sha256?: string | undefined;
|
|
30
|
-
downloadedAt: string;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Validates raw JSON data as ArchiveMetadata.
|
|
34
|
-
* @param data - Unknown data to validate
|
|
35
|
-
* @returns Validated ArchiveMetadata
|
|
36
|
-
*/
|
|
37
|
-
export declare function validateArchiveMetadata(data: unknown): ArchiveMetadata;
|
|
38
|
-
/**
|
|
39
|
-
* Resolves archive identity for URL generation and cache storage.
|
|
40
|
-
* @param version - Requested Firefox version
|
|
41
|
-
* @param product - Firefox product type
|
|
42
|
-
* @param candidate - Optional release-candidate build directory (e.g. "build2")
|
|
43
|
-
* @returns Resolved archive descriptor
|
|
44
|
-
*/
|
|
45
|
-
export declare function resolveArchive(version: string, product?: FirefoxProduct, candidate?: string): ResolvedArchive;
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: EUPL-1.2
|
|
2
|
-
/**
|
|
3
|
-
* Archive metadata validation and archive identity resolution.
|
|
4
|
-
*/
|
|
5
|
-
import { ConfigError } from '../errors/config.js';
|
|
6
|
-
import { parseObject } from '../utils/parse.js';
|
|
7
|
-
import { isValidFirefoxCandidate, isValidFirefoxProduct } from '../utils/validation.js';
|
|
8
|
-
/**
|
|
9
|
-
* Base URLs for Firefox source archives on archive.mozilla.org.
|
|
10
|
-
*/
|
|
11
|
-
const FIREFOX_ARCHIVE_BASE_URL = 'https://archive.mozilla.org/pub/firefox';
|
|
12
|
-
const DEVEDITION_ARCHIVE_BASE_URL = 'https://archive.mozilla.org/pub/devedition';
|
|
13
|
-
function getArchiveBaseUrl(product) {
|
|
14
|
-
return product === 'firefox-devedition' ? DEVEDITION_ARCHIVE_BASE_URL : FIREFOX_ARCHIVE_BASE_URL;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Directory holding the release's artifacts: `releases/<version>/` for
|
|
18
|
-
* final releases, `candidates/<version>-candidates/<buildN>/` when a
|
|
19
|
-
* release-candidate build is requested for pre-release verification.
|
|
20
|
-
*/
|
|
21
|
-
function getArchiveDirUrl(product, archiveVersion, candidate) {
|
|
22
|
-
const base = getArchiveBaseUrl(product);
|
|
23
|
-
return candidate === undefined
|
|
24
|
-
? `${base}/releases/${archiveVersion}`
|
|
25
|
-
: `${base}/candidates/${archiveVersion}-candidates/${candidate}`;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Validates raw JSON data as ArchiveMetadata.
|
|
29
|
-
* @param data - Unknown data to validate
|
|
30
|
-
* @returns Validated ArchiveMetadata
|
|
31
|
-
*/
|
|
32
|
-
export function validateArchiveMetadata(data) {
|
|
33
|
-
const rec = parseObject(data, 'Archive metadata');
|
|
34
|
-
const requestedVersion = rec.string('requestedVersion');
|
|
35
|
-
const product = rec.stringEnum('product', (v) => isValidFirefoxProduct(v), 'a supported Firefox product');
|
|
36
|
-
const archiveVersion = rec.string('archiveVersion');
|
|
37
|
-
const url = rec.string('url');
|
|
38
|
-
const downloadedAt = rec.string('downloadedAt');
|
|
39
|
-
const contentLength = rec.optionalNonNegativeInteger('contentLength');
|
|
40
|
-
const sha256 = rec.optionalString('sha256');
|
|
41
|
-
return {
|
|
42
|
-
requestedVersion,
|
|
43
|
-
product,
|
|
44
|
-
archiveVersion,
|
|
45
|
-
url,
|
|
46
|
-
downloadedAt,
|
|
47
|
-
...(contentLength !== undefined ? { contentLength } : {}),
|
|
48
|
-
...(sha256 !== undefined ? { sha256 } : {}),
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Resolves archive identity for URL generation and cache storage.
|
|
53
|
-
* @param version - Requested Firefox version
|
|
54
|
-
* @param product - Firefox product type
|
|
55
|
-
* @param candidate - Optional release-candidate build directory (e.g. "build2")
|
|
56
|
-
* @returns Resolved archive descriptor
|
|
57
|
-
*/
|
|
58
|
-
export function resolveArchive(version, product = 'firefox', candidate) {
|
|
59
|
-
// Reject versions containing path traversal characters
|
|
60
|
-
if (version.includes('/') || version.includes('..') || version.includes('\\')) {
|
|
61
|
-
throw new ConfigError(`Invalid Firefox version "${version}": contains disallowed characters`, 'firefox.version');
|
|
62
|
-
}
|
|
63
|
-
// Defense-in-depth: config validation enforces this shape already, but a
|
|
64
|
-
// caller-supplied candidate becomes both a URL path segment and part of
|
|
65
|
-
// the cache filename, so re-validate here like the version check above.
|
|
66
|
-
if (candidate !== undefined && !isValidFirefoxCandidate(candidate)) {
|
|
67
|
-
throw new ConfigError(`Invalid Firefox candidate "${candidate}": must look like "buildN" (e.g. "build2")`, 'firefox.candidate');
|
|
68
|
-
}
|
|
69
|
-
// ESR status is determined solely by the product field. Config validation
|
|
70
|
-
// ensures product and version are consistent, so we never need to infer
|
|
71
|
-
// ESR from the version string independently.
|
|
72
|
-
const cleanVersion = version.replace(/esr$/i, '');
|
|
73
|
-
const isEsr = product === 'firefox-esr';
|
|
74
|
-
const archiveVersion = isEsr ? `${cleanVersion}esr` : cleanVersion;
|
|
75
|
-
const safeProduct = product.replace(/[^a-z0-9-]/gi, '-');
|
|
76
|
-
const dirUrl = getArchiveDirUrl(product, archiveVersion, candidate);
|
|
77
|
-
// Candidate artifacts get a `-<candidate>` filename suffix so a build2
|
|
78
|
-
// archive can never collide with the final release artifact (same
|
|
79
|
-
// archiveVersion, potentially different bytes) in .fireforge/cache.
|
|
80
|
-
const candidateSuffix = candidate === undefined ? '' : `-${candidate}`;
|
|
81
|
-
const filename = `firefox-${safeProduct}-${archiveVersion}${candidateSuffix}.source.tar.xz`;
|
|
82
|
-
return {
|
|
83
|
-
requestedVersion: version,
|
|
84
|
-
product,
|
|
85
|
-
archiveVersion,
|
|
86
|
-
url: `${dirUrl}/source/firefox-${archiveVersion}.source.tar.xz`,
|
|
87
|
-
filename,
|
|
88
|
-
metadataFilename: `${filename}.json`,
|
|
89
|
-
// Mozilla publishes one SHA256SUMS per release directory listing every
|
|
90
|
-
// artifact by its release-relative path. Downloads verify against it by
|
|
91
|
-
// default (fail closed on mismatch), so a compromised CDN response
|
|
92
|
-
// cannot silently become the trusted git baseline.
|
|
93
|
-
checksumsUrl: `${dirUrl}/SHA256SUMS`,
|
|
94
|
-
pathInChecksums: `source/firefox-${archiveVersion}.source.tar.xz`,
|
|
95
|
-
};
|
|
96
|
-
}
|