@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
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EUPL-1.2
|
|
2
|
+
/**
|
|
3
|
+
* Packaging the browser. A plain package ships the development build as it
|
|
4
|
+
* stands. A release is built for the purpose: with the project's release
|
|
5
|
+
* overlay appended to the mozconfig, in an object directory of its own that
|
|
6
|
+
* is emptied first, so nothing an earlier build left reaches it and the
|
|
7
|
+
* development build stays untouched.
|
|
8
|
+
*/
|
|
9
|
+
import { dirname, join, posix } from 'node:path';
|
|
10
|
+
import { ExitCode, FireForgeError } from '../kernel/errors.js';
|
|
11
|
+
import { cloneTree, ensureDir, exists, listDir, pathInfo, readTextIfExists, remove, writeFile, } from '../kernel/fs.js';
|
|
12
|
+
import { hash } from '../kernel/hash.js';
|
|
13
|
+
import { writeJson } from '../kernel/json.js';
|
|
14
|
+
import { info, step } from '../kernel/log.js';
|
|
15
|
+
import { escapeRegExp } from '../kernel/text.js';
|
|
16
|
+
import { readHostConfig, withBuildSlot } from './hostLocks.js';
|
|
17
|
+
import { machFailure, runMach } from './mach.js';
|
|
18
|
+
import { renderMozconfig } from './mozconfig.js';
|
|
19
|
+
import { requireBuilt } from './objdir.js';
|
|
20
|
+
/**
|
|
21
|
+
* The mozconfig of a release build: the development one, the project's
|
|
22
|
+
* overlay after it so its options win, and the object directory last.
|
|
23
|
+
*
|
|
24
|
+
* @param generated - The rendered development mozconfig
|
|
25
|
+
* @param overlay - The project's release overlay
|
|
26
|
+
* @param objDir - The release object directory
|
|
27
|
+
*/
|
|
28
|
+
export function composeReleaseMozconfig(generated, overlay, objDir) {
|
|
29
|
+
return `${generated.trimEnd()}\n\n# Release overlay\n${overlay.trimEnd()}\n\nmk_add_options MOZ_OBJDIR="${objDir}"\n`;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The paths in an object directory that one declared output names: the path
|
|
33
|
+
* itself, or what a `*` in its last segment matches.
|
|
34
|
+
*
|
|
35
|
+
* @param objDir - The object directory
|
|
36
|
+
* @param declared - A relative path as `build.release.outputs` declares it
|
|
37
|
+
* @returns The matches, relative to `objDir`, sorted
|
|
38
|
+
*/
|
|
39
|
+
export async function matchReleaseOutput(objDir, declared) {
|
|
40
|
+
const name = posix.basename(declared);
|
|
41
|
+
if (!name.includes('*'))
|
|
42
|
+
return (await exists(join(objDir, declared))) ? [declared] : [];
|
|
43
|
+
const parent = posix.dirname(declared);
|
|
44
|
+
const pattern = new RegExp(`^${name.split('*').map(escapeRegExp).join('.*')}$`);
|
|
45
|
+
return (await listDir(join(objDir, parent)))
|
|
46
|
+
.filter((entry) => pattern.test(entry.name))
|
|
47
|
+
.map((entry) => (parent === '.' ? entry.name : `${parent}/${entry.name}`));
|
|
48
|
+
}
|
|
49
|
+
function refusal(code, message, hint) {
|
|
50
|
+
return new FireForgeError(code, message, {
|
|
51
|
+
exitCode: ExitCode.BUILD_ERROR,
|
|
52
|
+
...(hint === undefined ? {} : { hint }),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
async function packageDevelopment(workspace) {
|
|
56
|
+
await requireBuilt(workspace);
|
|
57
|
+
const dist = join(workspace.objDir, 'dist');
|
|
58
|
+
const startedAt = Date.now();
|
|
59
|
+
step('Packaging the development build');
|
|
60
|
+
const result = await runMach(workspace, ['package']);
|
|
61
|
+
if (result.exitCode !== 0)
|
|
62
|
+
throw machFailure('mach package', result);
|
|
63
|
+
const outputs = [];
|
|
64
|
+
for (const entry of await listDir(dist)) {
|
|
65
|
+
if (entry.kind !== 'file')
|
|
66
|
+
continue;
|
|
67
|
+
const path = join(dist, entry.name);
|
|
68
|
+
// Second granularity on some file systems: allow the write to predate the start by one.
|
|
69
|
+
if (((await pathInfo(path))?.mtimeMs ?? 0) >= startedAt - 1_000)
|
|
70
|
+
outputs.push(path);
|
|
71
|
+
}
|
|
72
|
+
return { objDir: workspace.objDir, outputs };
|
|
73
|
+
}
|
|
74
|
+
async function releaseSecrets(workspace, secrets) {
|
|
75
|
+
if (secrets === undefined)
|
|
76
|
+
return {};
|
|
77
|
+
const directory = (await readHostConfig(workspace.project.host)).releaseSecrets;
|
|
78
|
+
if (directory === undefined) {
|
|
79
|
+
throw refusal('release-secrets-missing', 'This release declares secrets and this host names no directory for them', `Set "releaseSecrets" in ${join(workspace.project.host.root, 'host.json')} to the directory holding ${secrets.files.join(', ')}.`);
|
|
80
|
+
}
|
|
81
|
+
for (const file of secrets.files) {
|
|
82
|
+
if (!(await exists(join(directory, file)))) {
|
|
83
|
+
throw refusal('release-secrets-missing', `Release secret ${file} is not in ${directory}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return { [secrets.variable]: directory };
|
|
87
|
+
}
|
|
88
|
+
async function packageRelease(workspace, options) {
|
|
89
|
+
const { project } = workspace;
|
|
90
|
+
const release = project.config.build?.release;
|
|
91
|
+
if (release === undefined) {
|
|
92
|
+
throw new FireForgeError('release-not-configured', 'A release needs "build.release" in fireforge.json', {
|
|
93
|
+
exitCode: ExitCode.CONFIG_ERROR,
|
|
94
|
+
hint: 'Declare build.release.overlay, the mozconfig fragment a release appends.',
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
const overlay = await readTextIfExists(join(project.root, release.overlay));
|
|
98
|
+
if (overlay === undefined) {
|
|
99
|
+
throw new FireForgeError('release-overlay-missing', `The release overlay ${release.overlay} does not exist`, {
|
|
100
|
+
exitCode: ExitCode.CONFIG_ERROR,
|
|
101
|
+
hint: 'Create it, or correct build.release.overlay in fireforge.json.',
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
const secrets = await releaseSecrets(workspace, release.secrets);
|
|
105
|
+
const objDir = workspace.releaseObjDir;
|
|
106
|
+
const mozconfig = join(dirname(objDir), 'mozconfig');
|
|
107
|
+
await remove(objDir);
|
|
108
|
+
await writeFile(mozconfig, composeReleaseMozconfig(await renderMozconfig(workspace), overlay, objDir));
|
|
109
|
+
// One build date for both commands, which would otherwise mint different build ids.
|
|
110
|
+
const buildDate = new Date().toISOString().replace(/[-:T]/g, '').slice(0, 14);
|
|
111
|
+
const env = { MOZCONFIG: mozconfig, MOZ_BUILD_DATE: buildDate, ...secrets };
|
|
112
|
+
const jobs = options.jobs ?? project.config.build?.jobs;
|
|
113
|
+
await withBuildSlot(project.host, options.waitMs, async () => {
|
|
114
|
+
for (const args of [['build', ...(jobs === undefined ? [] : [`-j${jobs}`])], ['package']]) {
|
|
115
|
+
step(`Release: mach ${args.join(' ')}`);
|
|
116
|
+
const result = await runMach(workspace, args, { env });
|
|
117
|
+
if (result.exitCode !== 0)
|
|
118
|
+
throw machFailure(`mach ${args.join(' ')}`, result);
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
const outputDir = options.outputDir ?? join(project.paths.stateDir, 'release-output');
|
|
122
|
+
const outputs = [];
|
|
123
|
+
const collected = [];
|
|
124
|
+
for (const declared of release.outputs ?? []) {
|
|
125
|
+
const matches = await matchReleaseOutput(objDir, declared);
|
|
126
|
+
if (matches.length === 0) {
|
|
127
|
+
throw refusal('release-output-missing', `The release build did not produce ${declared} in ${objDir}`);
|
|
128
|
+
}
|
|
129
|
+
for (const path of matches) {
|
|
130
|
+
const target = join(outputDir, path);
|
|
131
|
+
await remove(target);
|
|
132
|
+
await ensureDir(dirname(target));
|
|
133
|
+
await cloneTree(join(objDir, path), target, { allowCopy: true });
|
|
134
|
+
outputs.push(target);
|
|
135
|
+
collected.push(path);
|
|
136
|
+
info(`Release output: ${target}`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
const { product, version, sha256 } = project.config.firefox;
|
|
140
|
+
await writeJson(join(outputDir, 'release.json'), {
|
|
141
|
+
pin: { product, version, sha256 },
|
|
142
|
+
overlay: { path: release.overlay, sha256: hash(overlay) },
|
|
143
|
+
buildDate,
|
|
144
|
+
secrets: release.secrets?.files ?? [],
|
|
145
|
+
outputs: collected,
|
|
146
|
+
});
|
|
147
|
+
return { objDir, outputs, outputDir };
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Packages the workspace's browser.
|
|
151
|
+
*
|
|
152
|
+
* Plain: runs `mach package` on the development build as it stands; the
|
|
153
|
+
* caller makes sure it matches the source first (`ensureBuilt`). Release: builds from clean with the release overlay
|
|
154
|
+
* in the release object directory, with one build date across build and
|
|
155
|
+
* package and the host's secrets directory in the declared variable, then
|
|
156
|
+
* copies the declared outputs and a `release.json` (what decided the release;
|
|
157
|
+
* secret file names, never their content) into the output directory.
|
|
158
|
+
*
|
|
159
|
+
* @param workspace - The workspace
|
|
160
|
+
* @param options - See {@link PackageOptions}
|
|
161
|
+
* @throws `build-missing`, `mach-failed`, `release-secrets-missing`,
|
|
162
|
+
* `release-output-missing` (exit code 5); `release-not-configured`,
|
|
163
|
+
* `release-overlay-missing` (exit code 2)
|
|
164
|
+
*/
|
|
165
|
+
export function packageBrowser(workspace, options = {}) {
|
|
166
|
+
return options.release === true
|
|
167
|
+
? packageRelease(workspace, options)
|
|
168
|
+
: packageDevelopment(workspace);
|
|
169
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The name host state is filed under for a pin, such as
|
|
3
|
+
* `firefox-esr-153.7.0esr`, or `firefox-esr-153.7.0esr-build2` for a release
|
|
4
|
+
* candidate, whose archive is another source than the release's: the
|
|
5
|
+
* pristine repository's directory, and what a pool workspace records as the
|
|
6
|
+
* Firefox it holds.
|
|
7
|
+
*
|
|
8
|
+
* @param pin - The pin
|
|
9
|
+
*/
|
|
10
|
+
export function pinKey(pin) {
|
|
11
|
+
return `${pin.product}-${pin.version}${pin.candidate === undefined ? '' : `-${pin.candidate}`}`;
|
|
12
|
+
}
|
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EUPL-1.2
|
|
2
|
+
/**
|
|
3
|
+
* The host workspace pool: `workspaces/<name>/` holds `engine/` (a checkout
|
|
4
|
+
* of a pin's pristine commit, with its object directory inside),
|
|
5
|
+
* `workspace.json`, and whatever else modules record about that engine's
|
|
6
|
+
* content (what was materialized and deployed into it, their journals, test
|
|
7
|
+
* runs). A command leases one workspace for its duration; the lease is a
|
|
8
|
+
* lock under the host's `locks/`, so a command that dies gives its workspace
|
|
9
|
+
* back by dying.
|
|
10
|
+
*
|
|
11
|
+
* Everything in a workspace directory describes its engine. A repair keeps
|
|
12
|
+
* only the engine (reset), the release build and the identity and build
|
|
13
|
+
* sections of `workspace.json` ({@link resetWorkspaceState}). A clone copies
|
|
14
|
+
* all of it but what is built: an object directory belongs to the path it
|
|
15
|
+
* was configured at (`objdir.ts`), so the clone starts unbuilt.
|
|
16
|
+
*/
|
|
17
|
+
import { join, sep } from 'node:path';
|
|
18
|
+
import { cleanPaths, gitResult, reset } from '../git/index.js';
|
|
19
|
+
import { ExitCode, FireForgeError } from '../kernel/errors.js';
|
|
20
|
+
import { cloneTree, exists, listDir, move, remove, tempPathFor } from '../kernel/fs.js';
|
|
21
|
+
import { readJsonIfExists, writeJson } from '../kernel/json.js';
|
|
22
|
+
import { COMMAND_WAIT_MS, PROGRESS_EVERY_MS, PROGRESS_FIRST_MS, readLockStatus, tryAcquireLock, withLock, } from '../kernel/lock.js';
|
|
23
|
+
import { info } from '../kernel/log.js';
|
|
24
|
+
import { listProcesses } from '../kernel/process/index.js';
|
|
25
|
+
import { s } from '../kernel/schema.js';
|
|
26
|
+
import { formatDuration, sleep } from '../kernel/time.js';
|
|
27
|
+
import { defineStateSection, readState, updateState, } from '../project/index.js';
|
|
28
|
+
import { pinKey } from './pin.js';
|
|
29
|
+
import { checkoutPristine, findPristine } from './pristine.js';
|
|
30
|
+
import { OBJDIR_NAME, workspaceAt } from './workspace.js';
|
|
31
|
+
const NAME = /^[a-z0-9][a-z0-9._-]{0,39}$/;
|
|
32
|
+
const recordSection = defineStateSection('workspace', s.object({
|
|
33
|
+
/** The pin key of the Firefox the engine holds. */
|
|
34
|
+
pin: s.string({ min: 1 }),
|
|
35
|
+
/** The pristine commit the engine is a checkout of. */
|
|
36
|
+
commit: s.string({ min: 1 }),
|
|
37
|
+
createdAt: s.string(),
|
|
38
|
+
/** The workspace this one was cloned from. */
|
|
39
|
+
clonedFrom: s.string().optional(),
|
|
40
|
+
/** Who leased it last: its object directory is warm for that checkout's source. */
|
|
41
|
+
lessee: s.object({ checkout: s.string(), root: s.string(), at: s.string() }).optional(),
|
|
42
|
+
}), 'fireforge workspace remove <name>');
|
|
43
|
+
/** The section of `workspace.json` holding the build baseline. */
|
|
44
|
+
const BUILD_SECTION = 'build';
|
|
45
|
+
/** The entry of a workspace directory holding the release build. */
|
|
46
|
+
const RELEASE_ENTRY = 'release';
|
|
47
|
+
/** Sections of `workspace.json` that describe the workspace and its build rather than the engine's content. */
|
|
48
|
+
const KEPT_ON_REPAIR = ['workspace', BUILD_SECTION];
|
|
49
|
+
/** Entries of a workspace directory a repair keeps besides `workspace.json`: the engine and the release build. */
|
|
50
|
+
const KEPT_ENTRIES = new Set(['engine', RELEASE_ENTRY, 'workspace.json']);
|
|
51
|
+
/** How long a pool workspace may wait to be created, which checks out a whole Firefox. */
|
|
52
|
+
const CREATE_WAIT_MS = 60 * 60 * 1000;
|
|
53
|
+
function place(host, name) {
|
|
54
|
+
const dir = join(host.workspaces, name);
|
|
55
|
+
return {
|
|
56
|
+
dir,
|
|
57
|
+
engineDir: join(dir, 'engine'),
|
|
58
|
+
paths: { state: join(dir, 'workspace.json'), stateDir: dir },
|
|
59
|
+
lock: join(host.locks, `workspace-${name}`),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function poolError(code, message, hint) {
|
|
63
|
+
return new FireForgeError(code, message, {
|
|
64
|
+
exitCode: ExitCode.GENERAL_ERROR,
|
|
65
|
+
...(hint === undefined ? {} : { hint }),
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
function describe(holders) {
|
|
69
|
+
return holders
|
|
70
|
+
.map((holder) => {
|
|
71
|
+
const details = Object.entries(holder.info).map(([key, value]) => `${key}=${value}`);
|
|
72
|
+
return `PID ${holder.pid}${details.length > 0 ? ` (${details.join(', ')})` : ''}`;
|
|
73
|
+
})
|
|
74
|
+
.join(', ');
|
|
75
|
+
}
|
|
76
|
+
async function readWorkspace(host, name) {
|
|
77
|
+
const at = place(host, name);
|
|
78
|
+
const record = await readState(at, recordSection);
|
|
79
|
+
if (record === undefined)
|
|
80
|
+
return undefined;
|
|
81
|
+
return {
|
|
82
|
+
...record,
|
|
83
|
+
name,
|
|
84
|
+
dir: at.dir,
|
|
85
|
+
engineDir: at.engineDir,
|
|
86
|
+
built: await exists(join(at.engineDir, OBJDIR_NAME, 'config.status')),
|
|
87
|
+
holders: (await readLockStatus(at.lock)).holders,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* The workspaces of the pool, by name.
|
|
92
|
+
*
|
|
93
|
+
* @param host - The host locations
|
|
94
|
+
*/
|
|
95
|
+
export async function listWorkspaces(host) {
|
|
96
|
+
const found = [];
|
|
97
|
+
for (const entry of await listDir(host.workspaces)) {
|
|
98
|
+
// A dot-name is a workspace still being created.
|
|
99
|
+
if (entry.kind !== 'directory' || entry.name.startsWith('.'))
|
|
100
|
+
continue;
|
|
101
|
+
const workspace = await readWorkspace(host, entry.name);
|
|
102
|
+
if (workspace !== undefined)
|
|
103
|
+
found.push(workspace);
|
|
104
|
+
}
|
|
105
|
+
return found;
|
|
106
|
+
}
|
|
107
|
+
async function requireWorkspace(host, name) {
|
|
108
|
+
const workspace = await readWorkspace(host, name);
|
|
109
|
+
if (workspace !== undefined)
|
|
110
|
+
return workspace;
|
|
111
|
+
const names = (await listWorkspaces(host)).map((entry) => entry.name);
|
|
112
|
+
throw poolError('workspace-not-found', `There is no workspace "${name}"`, names.length > 0
|
|
113
|
+
? `The pool has: ${names.join(', ')}.`
|
|
114
|
+
: 'The pool is empty; create one with "fireforge workspace add <name>".');
|
|
115
|
+
}
|
|
116
|
+
/** Takes a workspace's lease only if it is free, for an operation on the workspace itself. */
|
|
117
|
+
async function holdFree(host, workspace, doing) {
|
|
118
|
+
const lock = await tryAcquireLock(place(host, workspace.name).lock, { info: { command: doing } });
|
|
119
|
+
if (lock !== undefined)
|
|
120
|
+
return lock;
|
|
121
|
+
const { holders } = await readLockStatus(place(host, workspace.name).lock);
|
|
122
|
+
throw poolError('workspace-busy', `Workspace "${workspace.name}" is leased by ${describe(holders) || 'another command'}`, 'Wait for that command to finish.');
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Creates a pool workspace: a fresh checkout of the pin's pristine commit, or
|
|
126
|
+
* with `from` a copy-on-write clone of another workspace's engine on the same
|
|
127
|
+
* pin, with everything recorded about the engine's content. Either way the
|
|
128
|
+
* new workspace is unbuilt: the object directory and the release build of
|
|
129
|
+
* `from` stay behind, because a build cannot be moved to another path.
|
|
130
|
+
*
|
|
131
|
+
* @param host - The host locations
|
|
132
|
+
* @param name - The new workspace's name
|
|
133
|
+
* @param options - See {@link AddWorkspaceOptions}
|
|
134
|
+
* @throws `invalid-argument` for a bad name, `workspace-exists`,
|
|
135
|
+
* `pristine-missing` when the pin was never downloaded, `workspace-busy`
|
|
136
|
+
* when `from` is leased, `workspace-interrupted` when `from` holds an
|
|
137
|
+
* unfinished change, `clone-unsupported` when the filesystem cannot clone
|
|
138
|
+
*/
|
|
139
|
+
export async function addWorkspace(host, name, options) {
|
|
140
|
+
if (!NAME.test(name)) {
|
|
141
|
+
throw new FireForgeError('invalid-argument', `"${name}" is not a workspace name: use lowercase letters, digits, ".", "_" and "-"`, { exitCode: ExitCode.INVALID_ARGUMENT });
|
|
142
|
+
}
|
|
143
|
+
return withPoolLock(host, () => createWorkspace(host, name, options));
|
|
144
|
+
}
|
|
145
|
+
function withPoolLock(host, body) {
|
|
146
|
+
return withLock(join(host.locks, 'pool'), { label: 'workspace pool', waitMs: CREATE_WAIT_MS }, body);
|
|
147
|
+
}
|
|
148
|
+
/** Creates a workspace; the caller holds the pool lock. */
|
|
149
|
+
async function createWorkspace(host, name, options) {
|
|
150
|
+
const at = place(host, name);
|
|
151
|
+
const key = pinKey(options.pin);
|
|
152
|
+
if (await exists(at.dir))
|
|
153
|
+
throw poolError('workspace-exists', `Workspace "${name}" exists`);
|
|
154
|
+
const staging = tempPathFor(at.dir);
|
|
155
|
+
const staged = { state: join(staging, 'workspace.json'), stateDir: staging };
|
|
156
|
+
try {
|
|
157
|
+
if (options.from === undefined) {
|
|
158
|
+
const pristine = await findPristine(host, options.pin);
|
|
159
|
+
if (pristine === undefined) {
|
|
160
|
+
throw poolError('pristine-missing', `This host has no pristine source for ${key}`, 'Run "fireforge download" in the project first.');
|
|
161
|
+
}
|
|
162
|
+
await checkoutPristine(pristine, join(staging, 'engine'));
|
|
163
|
+
await updateState({ paths: staged }, recordSection, () => ({
|
|
164
|
+
pin: key,
|
|
165
|
+
commit: pristine.commit,
|
|
166
|
+
createdAt: new Date().toISOString(),
|
|
167
|
+
}));
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
await cloneWorkspace(host, options.from, key, staging);
|
|
171
|
+
}
|
|
172
|
+
await move(staging, at.dir);
|
|
173
|
+
}
|
|
174
|
+
finally {
|
|
175
|
+
await remove(staging);
|
|
176
|
+
}
|
|
177
|
+
return requireWorkspace(host, name);
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Clones the entries of `source` into `target`, each copy-on-write, leaving
|
|
181
|
+
* out the one named `except`.
|
|
182
|
+
*/
|
|
183
|
+
async function cloneEntries(source, target, except) {
|
|
184
|
+
for (const entry of await listDir(source)) {
|
|
185
|
+
if (entry.name !== except)
|
|
186
|
+
await cloneTree(join(source, entry.name), join(target, entry.name));
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/** Rewrites a workspace's state document with only the sections `keep` accepts. */
|
|
190
|
+
async function keepSections(statePath, keep) {
|
|
191
|
+
const document = (await readJsonIfExists(statePath, s.record(s.unknown()))) ?? {};
|
|
192
|
+
await writeJson(statePath, Object.fromEntries(Object.entries(document).filter(([key]) => keep(key))));
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Copies a workspace's engine and everything recorded about the engine's
|
|
196
|
+
* content, so the clone holds the source the original held for whichever
|
|
197
|
+
* checkout leases it next. Its builds are left out with their baseline.
|
|
198
|
+
*/
|
|
199
|
+
async function cloneWorkspace(host, from, key, staging) {
|
|
200
|
+
const source = await requireWorkspace(host, from);
|
|
201
|
+
if (source.pin !== key) {
|
|
202
|
+
throw poolError('workspace-pin-mismatch', `Workspace "${from}" holds ${source.pin}, not ${key}`, 'Clone a workspace on the same Firefox, or add a fresh one without --from.');
|
|
203
|
+
}
|
|
204
|
+
const lease = await holdFree(host, source, 'workspace add');
|
|
205
|
+
try {
|
|
206
|
+
// A journal names the source's absolute paths; undoing it in the clone would change the source.
|
|
207
|
+
const pending = (await listDir(source.dir)).filter((entry) => entry.name.endsWith('.journal'));
|
|
208
|
+
if (pending.length > 0) {
|
|
209
|
+
throw poolError('workspace-interrupted', `Workspace "${from}" holds an interrupted change (${pending.map((entry) => entry.name).join(', ')})`, `Run a command in it first, such as "fireforge build --workspace ${from}", which completes the undo, or repair it with "fireforge workspace repair ${from}".`);
|
|
210
|
+
}
|
|
211
|
+
const engineDir = join(staging, 'engine');
|
|
212
|
+
for (const entry of await listDir(source.dir)) {
|
|
213
|
+
if (entry.name === RELEASE_ENTRY)
|
|
214
|
+
continue;
|
|
215
|
+
const [origin, target] = [join(source.dir, entry.name), join(staging, entry.name)];
|
|
216
|
+
if (entry.name === 'engine')
|
|
217
|
+
await cloneEntries(origin, target, OBJDIR_NAME);
|
|
218
|
+
else
|
|
219
|
+
await cloneTree(origin, target);
|
|
220
|
+
}
|
|
221
|
+
await keepSections(join(staging, 'workspace.json'), (section) => section !== BUILD_SECTION);
|
|
222
|
+
await remove(join(engineDir, '.git', 'index.lock'));
|
|
223
|
+
// Every file is a new inode, so git would re-read each one on every
|
|
224
|
+
// status until the index knows them. Exit 1 only reports real changes.
|
|
225
|
+
await gitResult(['update-index', '-q', '--refresh'], { cwd: engineDir });
|
|
226
|
+
await updateState({ paths: { state: join(staging, 'workspace.json'), stateDir: staging } }, recordSection, () => ({
|
|
227
|
+
pin: key,
|
|
228
|
+
commit: source.commit,
|
|
229
|
+
createdAt: new Date().toISOString(),
|
|
230
|
+
clonedFrom: from,
|
|
231
|
+
}));
|
|
232
|
+
}
|
|
233
|
+
finally {
|
|
234
|
+
await lease.release();
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Removes a workspace and everything built in it.
|
|
239
|
+
*
|
|
240
|
+
* @param host - The host locations
|
|
241
|
+
* @param name - The workspace
|
|
242
|
+
* @throws `workspace-not-found`, or `workspace-busy` while a command leases
|
|
243
|
+
* it or a process (a browser left running) was started from inside it
|
|
244
|
+
*/
|
|
245
|
+
export async function removeWorkspace(host, name) {
|
|
246
|
+
const workspace = await requireWorkspace(host, name);
|
|
247
|
+
const lease = await holdFree(host, workspace, 'workspace remove');
|
|
248
|
+
try {
|
|
249
|
+
const inside = (await listProcesses(['pid', 'command'])).filter((row) => row.command.includes(workspace.dir + sep));
|
|
250
|
+
if (inside.length > 0) {
|
|
251
|
+
throw poolError('workspace-busy', `Workspace "${name}" still has running processes: PID ${inside.map((row) => row.pid).join(', ')}`, 'Close the browser or build started from it, then retry.');
|
|
252
|
+
}
|
|
253
|
+
await remove(workspace.dir);
|
|
254
|
+
}
|
|
255
|
+
finally {
|
|
256
|
+
await lease.release();
|
|
257
|
+
}
|
|
258
|
+
await remove(place(host, name).lock);
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Puts a workspace's engine back to the pristine commit: every tracked file
|
|
262
|
+
* restored, every untracked source file removed. The object directory and
|
|
263
|
+
* the build record stay; what other modules recorded about the engine's
|
|
264
|
+
* content is dropped, so the next lease materializes the source afresh.
|
|
265
|
+
*
|
|
266
|
+
* @param host - The host locations
|
|
267
|
+
* @param name - The workspace
|
|
268
|
+
* @throws `workspace-not-found`, or `workspace-busy` while a command leases it
|
|
269
|
+
*/
|
|
270
|
+
export async function repairWorkspace(host, name) {
|
|
271
|
+
const workspace = await requireWorkspace(host, name);
|
|
272
|
+
const lease = await holdFree(host, workspace, 'workspace repair');
|
|
273
|
+
try {
|
|
274
|
+
await remove(join(workspace.engineDir, '.git', 'index.lock'));
|
|
275
|
+
await reset(workspace.engineDir, workspace.commit, 'hard');
|
|
276
|
+
await cleanPaths(workspace.engineDir);
|
|
277
|
+
await resetWorkspaceState(place(host, name));
|
|
278
|
+
}
|
|
279
|
+
finally {
|
|
280
|
+
await lease.release();
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Forgets what was recorded about a workspace engine's content, for an
|
|
285
|
+
* engine just put back to pristine: every entry of the workspace directory
|
|
286
|
+
* but the engine and the release build goes (ledgers, deployment records,
|
|
287
|
+
* their journals, test runs), and `workspace.json` keeps only the
|
|
288
|
+
* workspace's identity and its build baseline.
|
|
289
|
+
*/
|
|
290
|
+
async function resetWorkspaceState(at) {
|
|
291
|
+
for (const entry of await listDir(at.dir)) {
|
|
292
|
+
if (!KEPT_ENTRIES.has(entry.name))
|
|
293
|
+
await remove(join(at.dir, entry.name));
|
|
294
|
+
}
|
|
295
|
+
await keepSections(at.paths.state, (section) => KEPT_ON_REPAIR.includes(section));
|
|
296
|
+
}
|
|
297
|
+
/** The workspaces a project may lease, best first: its own last one, then the least recently used. */
|
|
298
|
+
function preference(candidates, checkout) {
|
|
299
|
+
const lastUsed = (workspace) => workspace.lessee?.at ?? '';
|
|
300
|
+
return [...candidates].sort((a, b) => {
|
|
301
|
+
const [mineA, mineB] = [a.lessee?.checkout === checkout, b.lessee?.checkout === checkout];
|
|
302
|
+
if (mineA !== mineB)
|
|
303
|
+
return mineA ? -1 : 1;
|
|
304
|
+
return lastUsed(a) < lastUsed(b)
|
|
305
|
+
? -1
|
|
306
|
+
: lastUsed(a) > lastUsed(b)
|
|
307
|
+
? 1
|
|
308
|
+
: a.name < b.name
|
|
309
|
+
? -1
|
|
310
|
+
: 1;
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
async function candidates(project, name) {
|
|
314
|
+
const key = pinKey(project.config.firefox);
|
|
315
|
+
if (name !== undefined) {
|
|
316
|
+
const workspace = await requireWorkspace(project.host, name);
|
|
317
|
+
if (workspace.pin !== key) {
|
|
318
|
+
throw poolError('workspace-pin-mismatch', `Workspace "${name}" holds ${workspace.pin}, and this project builds on ${key}`, 'Lease a workspace on the project\'s Firefox, or add one with "fireforge workspace add".');
|
|
319
|
+
}
|
|
320
|
+
return [workspace];
|
|
321
|
+
}
|
|
322
|
+
const onPin = async () => (await listWorkspaces(project.host)).filter((workspace) => workspace.pin === key);
|
|
323
|
+
const found = await onPin();
|
|
324
|
+
if (found.length > 0)
|
|
325
|
+
return preference(found, project.checkout.key);
|
|
326
|
+
// The first workspace of a pin is always wanted; further ones cost tens of
|
|
327
|
+
// gigabytes each once built, so those are the operator's decision. Two
|
|
328
|
+
// commands that both find none agree under the pool lock on who creates it.
|
|
329
|
+
return withPoolLock(project.host, async () => {
|
|
330
|
+
const created = await onPin();
|
|
331
|
+
if (created.length > 0)
|
|
332
|
+
return preference(created, project.checkout.key);
|
|
333
|
+
const taken = new Set((await listDir(project.host.workspaces)).map((entry) => entry.name));
|
|
334
|
+
let index = 1;
|
|
335
|
+
while (taken.has(`w${index}`))
|
|
336
|
+
index += 1;
|
|
337
|
+
info(`The pool has no workspace for ${key}; creating "w${index}".`);
|
|
338
|
+
return [await createWorkspace(project.host, `w${index}`, { pin: project.config.firefox })];
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
async function takeLease(project, options) {
|
|
342
|
+
const waitMs = options.waitMs ?? COMMAND_WAIT_MS;
|
|
343
|
+
const startedAt = Date.now();
|
|
344
|
+
let lastProgress = startedAt;
|
|
345
|
+
let pollMs = 50;
|
|
346
|
+
for (;;) {
|
|
347
|
+
const ordered = await candidates(project, options.name);
|
|
348
|
+
for (const workspace of ordered) {
|
|
349
|
+
const lock = await tryAcquireLock(place(project.host, workspace.name).lock, {
|
|
350
|
+
info: {
|
|
351
|
+
checkout: project.root,
|
|
352
|
+
...(options.command === undefined ? {} : { command: options.command }),
|
|
353
|
+
},
|
|
354
|
+
});
|
|
355
|
+
if (lock === undefined)
|
|
356
|
+
continue;
|
|
357
|
+
// It may have been removed between the listing and the lock.
|
|
358
|
+
const current = await readWorkspace(project.host, workspace.name);
|
|
359
|
+
if (current !== undefined)
|
|
360
|
+
return { workspace: current, lock };
|
|
361
|
+
await lock.release();
|
|
362
|
+
}
|
|
363
|
+
const held = ordered
|
|
364
|
+
.map((workspace) => `"${workspace.name}" by ${describe(workspace.holders) || 'another command'}`)
|
|
365
|
+
.join('; ');
|
|
366
|
+
const waited = Date.now() - startedAt;
|
|
367
|
+
if (waited >= waitMs) {
|
|
368
|
+
throw new FireForgeError('lock-timeout', `${waitMs > 0 ? `Timed out after ${formatDuration(waitMs)} waiting for` : 'Could not take'} a free workspace: ${held}`, {
|
|
369
|
+
exitCode: ExitCode.LOCK_TIMEOUT,
|
|
370
|
+
hint: 'Wait for those commands, allow a longer wait with --wait-lock <seconds>, or add a workspace with "fireforge workspace add <name>".',
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
if (Date.now() - lastProgress >=
|
|
374
|
+
(lastProgress === startedAt ? PROGRESS_FIRST_MS : PROGRESS_EVERY_MS)) {
|
|
375
|
+
lastProgress = Date.now();
|
|
376
|
+
info(`Waiting for a free workspace (${held}): ${formatDuration(waited)} of up to ${formatDuration(waitMs)}.`);
|
|
377
|
+
}
|
|
378
|
+
await sleep(Math.max(1, Math.min(pollMs, waitMs - waited)));
|
|
379
|
+
pollMs = Math.min(pollMs * 2, 1_000);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Runs `body` in a pool workspace leased for its duration: a free workspace
|
|
384
|
+
* on the project's pin, preferring the one this checkout used last (its
|
|
385
|
+
* object directory is warm for this source), then the least recently used.
|
|
386
|
+
* When all are leased it waits, naming the holders. A pin with no workspace
|
|
387
|
+
* yet gets its first one created.
|
|
388
|
+
*
|
|
389
|
+
* @param project - The project; its pin selects the workspaces, its checkout is the lessee
|
|
390
|
+
* @param options - See {@link LeaseOptions}
|
|
391
|
+
* @param body - The command's work
|
|
392
|
+
* @throws `lock-timeout` (exit code 15) when no workspace came free in time,
|
|
393
|
+
* `workspace-not-found` or `workspace-pin-mismatch` for a named one,
|
|
394
|
+
* `pristine-missing` when the first workspace cannot be created
|
|
395
|
+
*/
|
|
396
|
+
export async function leaseWorkspace(project, options, body) {
|
|
397
|
+
const { workspace: leased, lock } = await takeLease(project, options);
|
|
398
|
+
try {
|
|
399
|
+
const at = place(project.host, leased.name);
|
|
400
|
+
await updateState(at, recordSection, (record) => record === undefined
|
|
401
|
+
? undefined
|
|
402
|
+
: {
|
|
403
|
+
...record,
|
|
404
|
+
lessee: {
|
|
405
|
+
checkout: project.checkout.key,
|
|
406
|
+
root: project.root,
|
|
407
|
+
at: new Date().toISOString(),
|
|
408
|
+
},
|
|
409
|
+
});
|
|
410
|
+
const workspace = workspaceAt(project, {
|
|
411
|
+
name: leased.name,
|
|
412
|
+
kind: 'pool',
|
|
413
|
+
engineDir: at.engineDir,
|
|
414
|
+
stateDir: at.dir,
|
|
415
|
+
stateFile: at.paths.state,
|
|
416
|
+
});
|
|
417
|
+
await options.prepare?.(workspace);
|
|
418
|
+
return await body(workspace);
|
|
419
|
+
}
|
|
420
|
+
finally {
|
|
421
|
+
await lock.release();
|
|
422
|
+
}
|
|
423
|
+
}
|