@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,396 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EUPL-1.2
|
|
2
|
+
/**
|
|
3
|
+
* The Firefox source archive of a pin: where Mozilla publishes it, the
|
|
4
|
+
* verified copy in the host cache, and its extraction.
|
|
5
|
+
*
|
|
6
|
+
* The archive becomes the commit every owned change is measured against, so
|
|
7
|
+
* its digest is always checked: against `firefox.sha256` when the project
|
|
8
|
+
* pins one, otherwise against the `SHA256SUMS` Mozilla publishes beside it.
|
|
9
|
+
* A digest that cannot be fetched fails the download unless the project
|
|
10
|
+
* opted into `firefox.allowUnverifiedDownload`, and a cached archive records
|
|
11
|
+
* how it was verified, so removing that opt-in re-verifies the cache.
|
|
12
|
+
*/
|
|
13
|
+
import { basename, dirname, join } from 'node:path';
|
|
14
|
+
import { ExitCode, FireForgeError, toError } from '../kernel/errors.js';
|
|
15
|
+
import { ensureDir, listDir, makeTempDir, move, pathInfo, remove, writeFileFromStream, } from '../kernel/fs.js';
|
|
16
|
+
import { hashFile } from '../kernel/hash.js';
|
|
17
|
+
import { readJsonIfExists, writeJson } from '../kernel/json.js';
|
|
18
|
+
import { verbose, warn } from '../kernel/log.js';
|
|
19
|
+
import { findExecutable, run } from '../kernel/process/index.js';
|
|
20
|
+
import { s } from '../kernel/schema.js';
|
|
21
|
+
import { tailLines } from '../kernel/text.js';
|
|
22
|
+
import { sleep } from '../kernel/time.js';
|
|
23
|
+
/**
|
|
24
|
+
* Resolves a pin to its source archive.
|
|
25
|
+
*
|
|
26
|
+
* @param pin - The pin
|
|
27
|
+
*/
|
|
28
|
+
export function sourceArchive(pin) {
|
|
29
|
+
const base = pin.product === 'firefox-devedition'
|
|
30
|
+
? 'https://archive.mozilla.org/pub/devedition'
|
|
31
|
+
: 'https://archive.mozilla.org/pub/firefox';
|
|
32
|
+
const directory = pin.candidate === undefined
|
|
33
|
+
? `${base}/releases/${pin.version}`
|
|
34
|
+
: `${base}/candidates/${pin.version}-candidates/${pin.candidate}`;
|
|
35
|
+
const pathInChecksums = `source/firefox-${pin.version}.source.tar.xz`;
|
|
36
|
+
const candidate = pin.candidate === undefined ? '' : `-${pin.candidate}`;
|
|
37
|
+
return {
|
|
38
|
+
url: `${directory}/${pathInChecksums}`,
|
|
39
|
+
filename: `firefox-${pin.product}-${pin.version}${candidate}.source.tar.xz`,
|
|
40
|
+
checksumsUrl: `${directory}/SHA256SUMS`,
|
|
41
|
+
pathInChecksums,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function downloadError(code, message, hint, cause) {
|
|
45
|
+
return new FireForgeError(code, message, {
|
|
46
|
+
exitCode: ExitCode.DOWNLOAD_ERROR,
|
|
47
|
+
...(hint === undefined ? {} : { hint }),
|
|
48
|
+
...(cause === undefined ? {} : { cause }),
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
const RETRYABLE_STATUS = new Set([429, 500, 502, 503, 504]);
|
|
52
|
+
const ATTEMPTS = 3;
|
|
53
|
+
/**
|
|
54
|
+
* Requests a URL and hands the response to `consume`, with one deadline over
|
|
55
|
+
* both, up to three times. A 429 or 5xx status, a network failure, a failing
|
|
56
|
+
* `consume` and an expired deadline are retried; any other response reaches
|
|
57
|
+
* `consume` on the first attempt. The deadline holds even when the body
|
|
58
|
+
* ignores the abort signal.
|
|
59
|
+
*
|
|
60
|
+
* @param url - What to request
|
|
61
|
+
* @param consume - Reads the response; its result is returned
|
|
62
|
+
* @param options - See {@link RetryOptions}
|
|
63
|
+
* @throws `download-failed` (exit code 3) once every attempt has failed
|
|
64
|
+
*/
|
|
65
|
+
export async function fetchWithRetry(url, consume, options = {}) {
|
|
66
|
+
const request = options.fetch ?? fetch;
|
|
67
|
+
const timeoutMs = options.timeoutMs ?? 60_000;
|
|
68
|
+
let failure;
|
|
69
|
+
for (let attempt = 1; attempt <= ATTEMPTS; attempt += 1) {
|
|
70
|
+
const controller = new AbortController();
|
|
71
|
+
let timer;
|
|
72
|
+
const deadline = new Promise((_resolve, reject) => {
|
|
73
|
+
timer = setTimeout(() => {
|
|
74
|
+
controller.abort();
|
|
75
|
+
reject(new Error(`the request or its response body timed out after ${timeoutMs} ms`));
|
|
76
|
+
}, timeoutMs);
|
|
77
|
+
});
|
|
78
|
+
try {
|
|
79
|
+
return await Promise.race([
|
|
80
|
+
deadline,
|
|
81
|
+
(async () => {
|
|
82
|
+
const response = await request(url, { signal: controller.signal });
|
|
83
|
+
if (RETRYABLE_STATUS.has(response.status)) {
|
|
84
|
+
throw new Error(`HTTP ${response.status} ${response.statusText}`.trim());
|
|
85
|
+
}
|
|
86
|
+
return consume(response);
|
|
87
|
+
})(),
|
|
88
|
+
]);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
// A refusal `consume` already worded is final: retrying cannot change it.
|
|
92
|
+
if (error instanceof FireForgeError)
|
|
93
|
+
throw error;
|
|
94
|
+
failure = error;
|
|
95
|
+
}
|
|
96
|
+
finally {
|
|
97
|
+
clearTimeout(timer);
|
|
98
|
+
}
|
|
99
|
+
if (attempt < ATTEMPTS)
|
|
100
|
+
await sleep((options.retryDelayMs ?? 1_000) * attempt ** 2);
|
|
101
|
+
}
|
|
102
|
+
throw downloadError('download-failed', `Could not fetch ${url}: ${toError(failure).message}`, 'Check the network connection and retry.', failure);
|
|
103
|
+
}
|
|
104
|
+
/** No data for this long ends a transfer. */
|
|
105
|
+
const STALL_MS = 30_000;
|
|
106
|
+
/** The body's chunks, failing when none arrives within `stallMs`. */
|
|
107
|
+
async function* unstalled(body, url, stallMs, onChunk) {
|
|
108
|
+
const reader = body.getReader();
|
|
109
|
+
try {
|
|
110
|
+
for (;;) {
|
|
111
|
+
let timer;
|
|
112
|
+
const stalled = new Promise((_resolve, reject) => {
|
|
113
|
+
timer = setTimeout(() => {
|
|
114
|
+
reject(downloadError('download-failed', `The download of ${url} stalled: no data for ${Math.round(stallMs / 1000)} seconds`, 'Retry the command; the transfer starts over.'));
|
|
115
|
+
}, stallMs);
|
|
116
|
+
});
|
|
117
|
+
const next = await Promise.race([reader.read(), stalled]).finally(() => {
|
|
118
|
+
clearTimeout(timer);
|
|
119
|
+
});
|
|
120
|
+
if (next.done)
|
|
121
|
+
return;
|
|
122
|
+
onChunk(next.value.byteLength);
|
|
123
|
+
yield next.value;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
finally {
|
|
127
|
+
void reader.cancel().catch(() => undefined);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/** Downloads the archive to `target`, which appears only once the transfer is complete. */
|
|
131
|
+
async function downloadArchive(archive, target, options) {
|
|
132
|
+
const response = await fetchWithRetry(archive.url, (reply) => Promise.resolve(reply), options);
|
|
133
|
+
if (response.status === 404) {
|
|
134
|
+
throw downloadError('version-not-found', `Mozilla publishes no source archive at ${archive.url}`, 'Check firefox.version, firefox.product and firefox.candidate in fireforge.json.');
|
|
135
|
+
}
|
|
136
|
+
if (!response.ok || response.body === null) {
|
|
137
|
+
throw downloadError('download-failed', `Could not download ${archive.url}: HTTP ${response.status} ${response.statusText}`.trim());
|
|
138
|
+
}
|
|
139
|
+
const total = Number(response.headers.get('content-length') ?? 0);
|
|
140
|
+
let received = 0;
|
|
141
|
+
let reported = 0;
|
|
142
|
+
return writeFileFromStream(target, unstalled(response.body, archive.url, STALL_MS, (bytes) => {
|
|
143
|
+
received += bytes;
|
|
144
|
+
const tenth = total > 0 ? Math.floor((received / total) * 10) : 0;
|
|
145
|
+
if (tenth > reported) {
|
|
146
|
+
reported = tenth;
|
|
147
|
+
options.onProgress?.(`Downloading ${archive.filename}: ${tenth * 10}%`);
|
|
148
|
+
}
|
|
149
|
+
}));
|
|
150
|
+
}
|
|
151
|
+
/** The digest `SHA256SUMS` lists for the archive, or why there is none. */
|
|
152
|
+
async function publishedDigest(archive, options) {
|
|
153
|
+
let reply;
|
|
154
|
+
try {
|
|
155
|
+
reply = await fetchWithRetry(archive.checksumsUrl, async (response) => ({
|
|
156
|
+
ok: response.ok,
|
|
157
|
+
status: response.status,
|
|
158
|
+
body: response.ok ? await response.text() : '',
|
|
159
|
+
}), options);
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
return { sha256: undefined, reason: toError(error).message };
|
|
163
|
+
}
|
|
164
|
+
if (!reply.ok)
|
|
165
|
+
return { sha256: undefined, reason: `HTTP ${reply.status} fetching SHA256SUMS` };
|
|
166
|
+
for (const line of reply.body.split('\n')) {
|
|
167
|
+
// `<digest> <path>` or `<digest> *<path>`.
|
|
168
|
+
const match = /^([0-9a-f]{64})\s+\*?(.+)$/.exec(line.trim());
|
|
169
|
+
if (match?.[1] !== undefined && match[2] === archive.pathInChecksums) {
|
|
170
|
+
return { sha256: match[1] };
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return {
|
|
174
|
+
sha256: undefined,
|
|
175
|
+
reason: `SHA256SUMS does not list ${archive.pathInChecksums} (the wrong file, or a response that is not Mozilla's)`,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
function mismatch(archive, expected, actual, source) {
|
|
179
|
+
return downloadError('checksum-mismatch', `${archive.filename} has SHA-256 ${actual}, but ${source} says ${expected}`, 'The archive is not the one that was pinned or published. Do not build on it; retry the download, and check firefox.sha256.');
|
|
180
|
+
}
|
|
181
|
+
/** Holds a digest to the project's pin, or else to the published one. */
|
|
182
|
+
async function verifyDigest(archive, pin, actual, options) {
|
|
183
|
+
if (pin.sha256 !== undefined) {
|
|
184
|
+
if (actual !== pin.sha256)
|
|
185
|
+
throw mismatch(archive, pin.sha256, actual, 'firefox.sha256');
|
|
186
|
+
return 'pinned';
|
|
187
|
+
}
|
|
188
|
+
options.onProgress?.(`Verifying ${archive.filename} against the published SHA256SUMS`);
|
|
189
|
+
const published = await publishedDigest(archive, options);
|
|
190
|
+
if (published.sha256 !== undefined) {
|
|
191
|
+
if (actual !== published.sha256) {
|
|
192
|
+
throw mismatch(archive, published.sha256, actual, archive.checksumsUrl);
|
|
193
|
+
}
|
|
194
|
+
return 'published';
|
|
195
|
+
}
|
|
196
|
+
if (!pin.allowUnverifiedDownload) {
|
|
197
|
+
throw downloadError('checksum-unavailable', `Could not verify ${archive.filename}: ${published.reason} (${archive.checksumsUrl})`, 'Retry when the SHA256SUMS file is reachable, pin firefox.sha256, or set firefox.allowUnverifiedDownload to trust TLS alone.');
|
|
198
|
+
}
|
|
199
|
+
warn(`Could not verify ${archive.filename} against the published SHA256SUMS (${published.reason}). ` +
|
|
200
|
+
'firefox.allowUnverifiedDownload is set, so the download is trusted on TLS alone.');
|
|
201
|
+
return 'unverified';
|
|
202
|
+
}
|
|
203
|
+
const ArchiveRecord = s.object({
|
|
204
|
+
url: s.string(),
|
|
205
|
+
size: s.int({ min: 0 }),
|
|
206
|
+
sha256: s.string({ pattern: /^[a-f0-9]{64}$/ }),
|
|
207
|
+
verification: s.enum(['pinned', 'published', 'unverified']),
|
|
208
|
+
downloadedAt: s.string(),
|
|
209
|
+
});
|
|
210
|
+
/** The cached archive's record when the file on disk is the one it describes. */
|
|
211
|
+
async function validCacheEntry(archive, path) {
|
|
212
|
+
let record;
|
|
213
|
+
try {
|
|
214
|
+
record = await readJsonIfExists(`${path}.json`, ArchiveRecord);
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
verbose(`Ignoring the cache record of ${path}: ${toError(error).message}`);
|
|
218
|
+
return undefined;
|
|
219
|
+
}
|
|
220
|
+
const info = await pathInfo(path);
|
|
221
|
+
if (record === undefined || info?.kind !== 'file')
|
|
222
|
+
return undefined;
|
|
223
|
+
if (record.url !== archive.url || record.size !== info.size)
|
|
224
|
+
return undefined;
|
|
225
|
+
return (await hashFile(path)) === record.sha256 ? record : undefined;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* The pin's source archive in the host cache, downloaded if it is not there
|
|
229
|
+
* and verified either way. Callers serialise per pin; `ensurePristine` does.
|
|
230
|
+
*
|
|
231
|
+
* @param host - The host locations
|
|
232
|
+
* @param pin - The pin
|
|
233
|
+
* @param options - See {@link DownloadOptions}
|
|
234
|
+
* @returns The archive's path
|
|
235
|
+
* @throws `version-not-found`, `download-failed`, `checksum-mismatch` or
|
|
236
|
+
* `checksum-unavailable` (exit code 3)
|
|
237
|
+
*/
|
|
238
|
+
export async function ensureArchive(host, pin, options = {}) {
|
|
239
|
+
const archive = sourceArchive(pin);
|
|
240
|
+
const path = join(host.cache, archive.filename);
|
|
241
|
+
const cached = await validCacheEntry(archive, path);
|
|
242
|
+
if (cached !== undefined) {
|
|
243
|
+
// A pin is checked on every use; a published digest once. An entry that
|
|
244
|
+
// was accepted unverified is held to the current rule again.
|
|
245
|
+
if (pin.sha256 !== undefined || cached.verification !== 'published') {
|
|
246
|
+
const verification = await verifyDigest(archive, pin, cached.sha256, options);
|
|
247
|
+
if (verification !== cached.verification) {
|
|
248
|
+
await writeJson(`${path}.json`, { ...cached, verification });
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
options.onProgress?.(`Using the cached ${archive.filename}`);
|
|
252
|
+
return path;
|
|
253
|
+
}
|
|
254
|
+
await discardArchive(path);
|
|
255
|
+
await ensureDir(host.cache);
|
|
256
|
+
options.onProgress?.(`Downloading ${archive.url}`);
|
|
257
|
+
const size = await downloadArchive(archive, path, options);
|
|
258
|
+
try {
|
|
259
|
+
const sha256 = await hashFile(path);
|
|
260
|
+
const verification = await verifyDigest(archive, pin, sha256, options);
|
|
261
|
+
const record = {
|
|
262
|
+
url: archive.url,
|
|
263
|
+
size,
|
|
264
|
+
sha256,
|
|
265
|
+
verification,
|
|
266
|
+
downloadedAt: new Date().toISOString(),
|
|
267
|
+
};
|
|
268
|
+
await writeJson(`${path}.json`, record);
|
|
269
|
+
}
|
|
270
|
+
catch (error) {
|
|
271
|
+
await discardArchive(path);
|
|
272
|
+
throw error;
|
|
273
|
+
}
|
|
274
|
+
return path;
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Removes an archive and its record from the cache.
|
|
278
|
+
*
|
|
279
|
+
* @param path - The archive's path
|
|
280
|
+
*/
|
|
281
|
+
async function discardArchive(path) {
|
|
282
|
+
await remove(path);
|
|
283
|
+
await remove(`${path}.json`);
|
|
284
|
+
}
|
|
285
|
+
function escapes(path) {
|
|
286
|
+
if (path.startsWith('/') || path.startsWith('\\') || /^[A-Za-z]:[\\/]/.test(path))
|
|
287
|
+
return true;
|
|
288
|
+
return path.split(/[\\/]/).includes('..');
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Why a member name from a `tar -tf` listing must not be extracted, or
|
|
292
|
+
* undefined: an absolute or `..` path lands outside the extraction root, and
|
|
293
|
+
* a `.git` segment at any depth would seed configuration or hooks into the
|
|
294
|
+
* repository the tree is about to become.
|
|
295
|
+
*
|
|
296
|
+
* @param name - One listing line
|
|
297
|
+
*/
|
|
298
|
+
export function unsafeArchiveMember(name) {
|
|
299
|
+
const member = name.trim();
|
|
300
|
+
if (member === '')
|
|
301
|
+
return undefined;
|
|
302
|
+
if (escapes(member))
|
|
303
|
+
return `member ${member} leaves the extraction root`;
|
|
304
|
+
return member.split(/[\\/]/).some((segment) => segment.toLowerCase() === '.git')
|
|
305
|
+
? `member ${member} would seed a .git directory`
|
|
306
|
+
: undefined;
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Why a line of a `tar -tvf` listing names a link that must not be
|
|
310
|
+
* extracted, or undefined: a symlink (` -> target`) or hard link
|
|
311
|
+
* (` link to target`) whose target is absolute or climbs with `..`.
|
|
312
|
+
*
|
|
313
|
+
* @param line - One verbose listing line
|
|
314
|
+
*/
|
|
315
|
+
export function unsafeArchiveLink(line) {
|
|
316
|
+
const arrow = line.startsWith('l') ? line.lastIndexOf(' -> ') : -1;
|
|
317
|
+
const hard = line.lastIndexOf(' link to ');
|
|
318
|
+
const target = arrow !== -1
|
|
319
|
+
? line.slice(arrow + 4).trim()
|
|
320
|
+
: hard !== -1
|
|
321
|
+
? line.slice(hard + 9).trim()
|
|
322
|
+
: undefined;
|
|
323
|
+
return target !== undefined && escapes(target)
|
|
324
|
+
? `link target ${target} leaves the extraction root`
|
|
325
|
+
: undefined;
|
|
326
|
+
}
|
|
327
|
+
function extractError(archivePath, why, hint) {
|
|
328
|
+
return downloadError('extract-failed', `Could not extract ${basename(archivePath)}: ${why}`, hint ?? 'Retry the command; a damaged archive is downloaded again.');
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Scans one listing of the archive. Member names come from `-tf`, where the
|
|
332
|
+
* whole line is the name; link targets only appear in `-tvf`. Names are never
|
|
333
|
+
* parsed out of the verbose columns, whose owner fields an archive controls.
|
|
334
|
+
*/
|
|
335
|
+
async function scanListing(archivePath, flag, check) {
|
|
336
|
+
let unsafe;
|
|
337
|
+
const listing = await run('tar', [flag, archivePath], {
|
|
338
|
+
env: { LC_ALL: 'C', LANG: 'C' },
|
|
339
|
+
onLine: (line, stream) => {
|
|
340
|
+
if (stream === 'stdout')
|
|
341
|
+
unsafe ??= check(line);
|
|
342
|
+
},
|
|
343
|
+
});
|
|
344
|
+
if (listing.exitCode !== 0) {
|
|
345
|
+
const tail = tailLines(listing.stderr, 5).join('\n');
|
|
346
|
+
throw extractError(archivePath, `tar ${flag} exited ${listing.exitCode}\n${tail}`);
|
|
347
|
+
}
|
|
348
|
+
if (unsafe !== undefined)
|
|
349
|
+
throw extractError(archivePath, `the archive is refused: ${unsafe}`);
|
|
350
|
+
}
|
|
351
|
+
const ENVIRONMENTAL = /No space left on device|Permission denied|Disk quota exceeded/i;
|
|
352
|
+
/**
|
|
353
|
+
* Extracts a source archive so that `destination` becomes the source tree:
|
|
354
|
+
* the archive's single `firefox-*` directory, or its root when it has none.
|
|
355
|
+
* Every member is checked first, so nothing can be written outside the tree
|
|
356
|
+
* and no `.git` can be planted in it. A failure that indicts the archive
|
|
357
|
+
* removes it from the cache; one of the environment (a full disk, a missing
|
|
358
|
+
* `tar`) keeps it for the retry.
|
|
359
|
+
*
|
|
360
|
+
* @param archivePath - The archive, in the host cache
|
|
361
|
+
* @param destination - The directory to create; must not exist
|
|
362
|
+
* @throws `extract-failed` (exit code 3)
|
|
363
|
+
*/
|
|
364
|
+
export async function extractArchive(archivePath, destination) {
|
|
365
|
+
if ((await findExecutable('tar')) === undefined) {
|
|
366
|
+
throw new FireForgeError('command-not-found', 'Extracting the Firefox source needs "tar"', {
|
|
367
|
+
exitCode: ExitCode.MISSING_DEPENDENCY,
|
|
368
|
+
hint: 'Install tar and make sure it is on PATH.',
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
const staging = await makeTempDir(`${basename(destination)}.extract-`, dirname(destination));
|
|
372
|
+
try {
|
|
373
|
+
// Each listing decompresses the whole archive, so the two run side by side.
|
|
374
|
+
await Promise.all([
|
|
375
|
+
scanListing(archivePath, '-tf', unsafeArchiveMember),
|
|
376
|
+
scanListing(archivePath, '-tvf', unsafeArchiveLink),
|
|
377
|
+
]).catch(async (error) => {
|
|
378
|
+
await discardArchive(archivePath);
|
|
379
|
+
throw error;
|
|
380
|
+
});
|
|
381
|
+
const extracted = await run('tar', ['-xf', archivePath, '-C', staging]);
|
|
382
|
+
if (extracted.exitCode !== 0) {
|
|
383
|
+
const tail = tailLines(extracted.stderr, 5).join('\n');
|
|
384
|
+
if (ENVIRONMENTAL.test(extracted.stderr)) {
|
|
385
|
+
throw extractError(archivePath, `tar could not write the source tree\n${tail}`, 'Free disk space or fix the permissions, then retry; the downloaded archive is kept.');
|
|
386
|
+
}
|
|
387
|
+
await discardArchive(archivePath);
|
|
388
|
+
throw extractError(archivePath, `tar exited ${extracted.exitCode}\n${tail}`);
|
|
389
|
+
}
|
|
390
|
+
const top = (await listDir(staging)).filter((entry) => entry.kind === 'directory' && entry.name.startsWith('firefox-'));
|
|
391
|
+
await move(top.length === 1 ? join(staging, top[0]?.name ?? '') : staging, destination);
|
|
392
|
+
}
|
|
393
|
+
finally {
|
|
394
|
+
await remove(staging);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EUPL-1.2
|
|
2
|
+
/**
|
|
3
|
+
* The post-build packaging audit: front-end files that changed since the
|
|
4
|
+
* previous build and that nothing packages. Such a file builds without
|
|
5
|
+
* complaint and is simply absent from the browser. Warn-only: the audit can
|
|
6
|
+
* be wrong about a file reached some other way, which is what
|
|
7
|
+
* `buildAudit.unpackaged` declares.
|
|
8
|
+
*/
|
|
9
|
+
import { join, posix } from 'node:path';
|
|
10
|
+
import { captureWorktree, changedPaths, resolveRevision } from '../git/index.js';
|
|
11
|
+
import { exists, readTextIfExists } from '../kernel/fs.js';
|
|
12
|
+
import { matchesGlob } from '../kernel/glob.js';
|
|
13
|
+
import { manifestReferencesFile } from '../mozbuild/index.js';
|
|
14
|
+
import { deliveryOf, readInstallIndex } from './installManifests.js';
|
|
15
|
+
import { buildInputClass, isTestPath } from './staleness.js';
|
|
16
|
+
/** Files a registered document pulls in itself, and files only a development tool reads. */
|
|
17
|
+
const NEVER_PACKAGED = /\.inc\.xhtml$|\.stories\.mjs$/;
|
|
18
|
+
/**
|
|
19
|
+
* The changed front-end files that no install manifest of the finished build
|
|
20
|
+
* installs and no `jar.mn` or `moz.build` in their directory or above it
|
|
21
|
+
* names, leaving out those the project declares in `buildAudit.unpackaged`.
|
|
22
|
+
*
|
|
23
|
+
* @param workspace - The workspace, after a successful build
|
|
24
|
+
* @param since - Tree-ish of the previous build's snapshot; default the engine's HEAD
|
|
25
|
+
* @returns Engine-relative paths, sorted
|
|
26
|
+
*/
|
|
27
|
+
export async function unpackagedChanges(workspace, since) {
|
|
28
|
+
const { engineDir, objDir, project } = workspace;
|
|
29
|
+
const base = since !== undefined && (await resolveRevision(engineDir, since, 'commit')) !== undefined
|
|
30
|
+
? since
|
|
31
|
+
: 'HEAD';
|
|
32
|
+
const declared = (project.config.buildAudit?.unpackaged ?? []).map((entry) => entry.path);
|
|
33
|
+
const index = await readInstallIndex(engineDir, objDir);
|
|
34
|
+
const manifests = new Map();
|
|
35
|
+
const manifest = async (path) => {
|
|
36
|
+
if (!manifests.has(path))
|
|
37
|
+
manifests.set(path, await readTextIfExists(join(engineDir, path)));
|
|
38
|
+
return manifests.get(path);
|
|
39
|
+
};
|
|
40
|
+
const named = async (file) => {
|
|
41
|
+
for (let directory = posix.dirname(file);; directory = posix.dirname(directory)) {
|
|
42
|
+
for (const name of ['jar.mn', 'moz.build']) {
|
|
43
|
+
const path = directory === '.' ? name : `${directory}/${name}`;
|
|
44
|
+
const text = await manifest(path);
|
|
45
|
+
if (text !== undefined && manifestReferencesFile(path, text, file))
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
if (directory === '.')
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
const unpackaged = [];
|
|
53
|
+
for (const path of await changedPaths(engineDir, base, await captureWorktree(engineDir))) {
|
|
54
|
+
if (buildInputClass(path) !== 'ui' || isTestPath(path) || NEVER_PACKAGED.test(path))
|
|
55
|
+
continue;
|
|
56
|
+
if (declared.some((glob) => matchesGlob(path, glob)))
|
|
57
|
+
continue;
|
|
58
|
+
if (!(await exists(join(engineDir, path))))
|
|
59
|
+
continue;
|
|
60
|
+
if (index !== undefined && (await deliveryOf(index, engineDir, path)) !== 'unlisted')
|
|
61
|
+
continue;
|
|
62
|
+
if (!(await named(path)))
|
|
63
|
+
unpackaged.push(path);
|
|
64
|
+
}
|
|
65
|
+
return unpackaged;
|
|
66
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EUPL-1.2
|
|
2
|
+
/**
|
|
3
|
+
* Building a workspace: write the mozconfig, discard an object directory
|
|
4
|
+
* that was configured at another path, pick the smallest build that is
|
|
5
|
+
* correct, run it under a host build slot, and record the baseline staleness
|
|
6
|
+
* is measured from.
|
|
7
|
+
*/
|
|
8
|
+
import { constants as osConstants } from 'node:os';
|
|
9
|
+
import { ExitCode, FireForgeError, toError } from '../kernel/errors.js';
|
|
10
|
+
import { exists, freeDiskSpace } from '../kernel/fs.js';
|
|
11
|
+
import { info, verbose, warn } from '../kernel/log.js';
|
|
12
|
+
import { formatDuration } from '../kernel/time.js';
|
|
13
|
+
import { unpackagedChanges } from './audit.js';
|
|
14
|
+
import { withBuildSlot } from './hostLocks.js';
|
|
15
|
+
import { machFailure, runMach } from './mach.js';
|
|
16
|
+
import { writeMozconfig } from './mozconfig.js';
|
|
17
|
+
import { discardMovedObjdir } from './objdir.js';
|
|
18
|
+
import { buildStaleness, readBuildBaseline, recordBuild, snapshotEngine, } from './staleness.js';
|
|
19
|
+
/** A first full build writes about this much. */
|
|
20
|
+
const FULL_BUILD_BYTES = 20 * 1024 ** 3;
|
|
21
|
+
/**
|
|
22
|
+
* An exit status of 128 + N means the process died of signal N: it was
|
|
23
|
+
* interrupted from outside rather than failing, and its log may stop mid-step.
|
|
24
|
+
*/
|
|
25
|
+
function signalNote(exitCode) {
|
|
26
|
+
if (exitCode <= 128 || exitCode > 192)
|
|
27
|
+
return '';
|
|
28
|
+
const signal = Object.entries(osConstants.signals).find(([, value]) => value === exitCode - 128);
|
|
29
|
+
return ` (killed by ${signal?.[0] ?? `signal ${exitCode - 128}`}: interrupted from outside, not a compile error)`;
|
|
30
|
+
}
|
|
31
|
+
function buildFailure(command, result, durationMs) {
|
|
32
|
+
const how = result.timedOut
|
|
33
|
+
? 'timed out'
|
|
34
|
+
: `exited ${result.exitCode}${signalNote(result.exitCode)}`;
|
|
35
|
+
return new FireForgeError('build-failed', `${command} ${how} after ${formatDuration(durationMs)}`, { exitCode: ExitCode.BUILD_ERROR, hint: 'The first error in the output above is the cause.' });
|
|
36
|
+
}
|
|
37
|
+
/** What changed since the build, with the first few paths. */
|
|
38
|
+
function describeStaleness(staleness) {
|
|
39
|
+
const sample = staleness.paths.slice(0, 5).join(', ');
|
|
40
|
+
return `${staleness.why}${sample === '' ? '' : ` (${sample}${staleness.paths.length > 5 ? ', ...' : ''})`}`;
|
|
41
|
+
}
|
|
42
|
+
/** The build that is correct for what was asked: a UI build only when nothing needs more. */
|
|
43
|
+
async function chooseBuild(workspace, ui) {
|
|
44
|
+
if (!ui)
|
|
45
|
+
return { kind: 'full' };
|
|
46
|
+
const staleness = await buildStaleness(workspace);
|
|
47
|
+
if (staleness.state === 'fresh' || staleness.needs === 'ui')
|
|
48
|
+
return { kind: 'ui' };
|
|
49
|
+
const escalated = describeStaleness(staleness);
|
|
50
|
+
warn(`Running a full build instead of a UI build: ${escalated}.`);
|
|
51
|
+
return { kind: 'full', escalated };
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Builds the workspace's engine.
|
|
55
|
+
*
|
|
56
|
+
* @param workspace - The workspace
|
|
57
|
+
* @param options - See {@link BuildOptions}
|
|
58
|
+
* @throws `build-failed` (exit code 5) when mach fails, `mozconfig-invalid`
|
|
59
|
+
* (exit code 2), `lock-timeout` (exit code 15) when no build slot came free
|
|
60
|
+
*/
|
|
61
|
+
export async function build(workspace, options = {}) {
|
|
62
|
+
const { project } = workspace;
|
|
63
|
+
await writeMozconfig(workspace);
|
|
64
|
+
const discardedObjdirOf = await discardMovedObjdir(workspace);
|
|
65
|
+
if (discardedObjdirOf !== undefined) {
|
|
66
|
+
warn(`The object directory of workspace "${workspace.name}" was configured for ${discardedObjdirOf}, ` +
|
|
67
|
+
`not ${workspace.engineDir}. A build cannot be moved to another path, so it was removed and this is a full build from nothing.`);
|
|
68
|
+
}
|
|
69
|
+
const { kind, escalated } = await chooseBuild(workspace, options.ui === true);
|
|
70
|
+
const previous = await readBuildBaseline(workspace);
|
|
71
|
+
if (kind === 'full' && !(await exists(workspace.objDir))) {
|
|
72
|
+
const free = await freeDiskSpace(workspace.engineDir);
|
|
73
|
+
if (free !== undefined && free < FULL_BUILD_BYTES) {
|
|
74
|
+
warn(`Only ${Math.floor(free / 1024 ** 3)} GB are free at ${workspace.engineDir}; a first full build needs about 20 GB.`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const jobs = options.jobs ?? project.config.build?.jobs;
|
|
78
|
+
const args = kind === 'ui'
|
|
79
|
+
? ['build', 'faster']
|
|
80
|
+
: ['build', ...(jobs === undefined ? [] : ['-j', String(jobs)])];
|
|
81
|
+
const startedAt = Date.now();
|
|
82
|
+
const { result, snapshot } = await withBuildSlot(project.host, options.waitMs, async () => {
|
|
83
|
+
const taken = await snapshotEngine(workspace);
|
|
84
|
+
info(`Running mach ${args.join(' ')} in workspace "${workspace.name}".`);
|
|
85
|
+
return { result: await runMach(workspace, args), snapshot: taken };
|
|
86
|
+
});
|
|
87
|
+
const durationMs = Date.now() - startedAt;
|
|
88
|
+
if (result.exitCode !== 0)
|
|
89
|
+
throw buildFailure(`mach ${args.join(' ')}`, result, durationMs);
|
|
90
|
+
let unpackaged = [];
|
|
91
|
+
try {
|
|
92
|
+
unpackaged = await unpackagedChanges(workspace, previous?.tree);
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
verbose(`The packaging audit did not run: ${toError(error).message}`);
|
|
96
|
+
}
|
|
97
|
+
if (unpackaged.length > 0) {
|
|
98
|
+
warn(`${unpackaged.length} changed file(s) are not packaged into the browser: ${unpackaged.join(', ')}. ` +
|
|
99
|
+
'Register each in a jar.mn or moz.build ("fireforge register <path>"), or declare it in buildAudit.unpackaged.');
|
|
100
|
+
}
|
|
101
|
+
await recordBuild(workspace, kind, snapshot);
|
|
102
|
+
return {
|
|
103
|
+
kind,
|
|
104
|
+
...(escalated === undefined ? {} : { escalated }),
|
|
105
|
+
...(discardedObjdirOf === undefined ? {} : { discardedObjdirOf }),
|
|
106
|
+
durationMs,
|
|
107
|
+
unpackaged,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Installs Firefox's build dependencies with `mach bootstrap`, which prompts
|
|
112
|
+
* and may ask for elevated rights, so it gets the terminal.
|
|
113
|
+
*
|
|
114
|
+
* @param workspace - Any workspace on the project's pin
|
|
115
|
+
* @throws `mach-failed` (exit code 5) when mach fails
|
|
116
|
+
*/
|
|
117
|
+
export async function bootstrap(workspace) {
|
|
118
|
+
const result = await runMach(workspace, ['bootstrap', '--application-choice', 'browser'], {
|
|
119
|
+
terminal: true,
|
|
120
|
+
});
|
|
121
|
+
if (result.exitCode !== 0) {
|
|
122
|
+
throw machFailure('mach bootstrap', result, 'Fix what the output above names, then run "fireforge bootstrap" again.');
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Makes sure the workspace's build matches its engine before a command uses
|
|
127
|
+
* it. A stale build is refused with the command that fixes it, unless
|
|
128
|
+
* `build` asks for that build to run now, once, as the smallest one that
|
|
129
|
+
* catches up.
|
|
130
|
+
*
|
|
131
|
+
* @param workspace - The workspace
|
|
132
|
+
* @param options - `build` builds instead of refusing; `waitMs` is for the host build slot
|
|
133
|
+
* @returns The build that ran, or undefined when the build was fresh
|
|
134
|
+
* @throws `build-stale` naming what changed and the build that catches up
|
|
135
|
+
*/
|
|
136
|
+
export async function ensureBuilt(workspace, options = {}) {
|
|
137
|
+
const staleness = await buildStaleness(workspace);
|
|
138
|
+
if (staleness.state === 'fresh')
|
|
139
|
+
return undefined;
|
|
140
|
+
const why = describeStaleness(staleness);
|
|
141
|
+
const ui = staleness.needs === 'ui';
|
|
142
|
+
if (options.build === true) {
|
|
143
|
+
info(`Building first: ${why}.`);
|
|
144
|
+
return build(workspace, { ui, waitMs: options.waitMs });
|
|
145
|
+
}
|
|
146
|
+
throw new FireForgeError('build-stale', `The build of workspace "${workspace.name}" is older than its engine: ${why}.`, {
|
|
147
|
+
exitCode: ExitCode.GENERAL_ERROR,
|
|
148
|
+
hint: `Run "fireforge build${ui ? ' --ui' : ''}", or pass --build to build first.`,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EUPL-1.2
|
|
2
|
+
/**
|
|
3
|
+
* What every project and checkout on one host shares besides the workspace
|
|
4
|
+
* pool: the host configuration file, and the two locks that keep parallel
|
|
5
|
+
* sessions from fighting over the screen and the CPU.
|
|
6
|
+
*/
|
|
7
|
+
import { isAbsolute, join } from 'node:path';
|
|
8
|
+
import { ExitCode } from '../kernel/errors.js';
|
|
9
|
+
import { readJsonIfExists } from '../kernel/json.js';
|
|
10
|
+
import { COMMAND_WAIT_MS, withLock } from '../kernel/lock.js';
|
|
11
|
+
import { s } from '../kernel/schema.js';
|
|
12
|
+
const HostConfigSchema = s.object({
|
|
13
|
+
buildSlots: s
|
|
14
|
+
.int({ min: 1 })
|
|
15
|
+
.describe('How many compiles may run at once on this host')
|
|
16
|
+
.default(1),
|
|
17
|
+
releaseSecrets: s
|
|
18
|
+
.string({ min: 1 })
|
|
19
|
+
.refine((path) => (isAbsolute(path) ? undefined : 'must be an absolute path'))
|
|
20
|
+
.describe('Directory holding the secret files release builds read')
|
|
21
|
+
.optional(),
|
|
22
|
+
});
|
|
23
|
+
/**
|
|
24
|
+
* Reads `host.json`. A host without one has the defaults.
|
|
25
|
+
*
|
|
26
|
+
* @param host - The host locations
|
|
27
|
+
* @throws `host-config-invalid` (exit code 2) when the file does not match its schema
|
|
28
|
+
*/
|
|
29
|
+
export async function readHostConfig(host) {
|
|
30
|
+
const path = join(host.root, 'host.json');
|
|
31
|
+
const config = await readJsonIfExists(path, HostConfigSchema, {
|
|
32
|
+
code: 'host-config-invalid',
|
|
33
|
+
exitCode: ExitCode.CONFIG_ERROR,
|
|
34
|
+
hint: `Fix ${path}: it takes "buildSlots" (a count) and "releaseSecrets" (a directory).`,
|
|
35
|
+
});
|
|
36
|
+
return config ?? HostConfigSchema.parse({});
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Runs `body` as the one command on this host showing a browser window.
|
|
40
|
+
*
|
|
41
|
+
* @param host - The host locations
|
|
42
|
+
* @param waitMs - How long to wait for the display (default {@link COMMAND_WAIT_MS})
|
|
43
|
+
* @param body - The work
|
|
44
|
+
* @throws `lock-timeout` (exit code 15) naming the holder when the wait expires
|
|
45
|
+
*/
|
|
46
|
+
export function withDisplay(host, waitMs, body) {
|
|
47
|
+
return withLock(join(host.locks, 'display'), { label: 'display', waitMs: waitMs ?? COMMAND_WAIT_MS }, body);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Runs `body` holding one of the host's build slots, so no more compiles run
|
|
51
|
+
* at once than `host.json` allows.
|
|
52
|
+
*
|
|
53
|
+
* @param host - The host locations
|
|
54
|
+
* @param waitMs - How long to wait for a slot (default {@link COMMAND_WAIT_MS})
|
|
55
|
+
* @param body - The compile
|
|
56
|
+
* @throws `lock-timeout` (exit code 15) naming the holders when the wait expires
|
|
57
|
+
*/
|
|
58
|
+
export async function withBuildSlot(host, waitMs, body) {
|
|
59
|
+
const { buildSlots } = await readHostConfig(host);
|
|
60
|
+
return withLock(join(host.locks, 'build'), {
|
|
61
|
+
mode: 'shared',
|
|
62
|
+
limit: buildSlots,
|
|
63
|
+
label: 'build',
|
|
64
|
+
waitMs: waitMs ?? COMMAND_WAIT_MS,
|
|
65
|
+
}, body);
|
|
66
|
+
}
|