@hominis/fireforge 0.45.0 → 0.46.1
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 +409 -446
- package/dist/bin/fireforge.d.ts +1 -1
- package/dist/bin/fireforge.js +21 -15
- package/dist/build-info.json +4 -4
- package/dist/src/cli-usage-error.d.ts +46 -0
- package/dist/src/cli-usage-error.js +81 -0
- package/dist/src/cli.d.ts +7 -2
- package/dist/src/cli.js +47 -47
- package/dist/src/commands/bootstrap-checks.js +2 -1
- package/dist/src/commands/bootstrap.js +3 -4
- package/dist/src/commands/build.js +27 -17
- package/dist/src/commands/config.js +9 -9
- package/dist/src/commands/destructive-decision.d.ts +19 -0
- package/dist/src/commands/destructive-decision.js +31 -0
- package/dist/src/commands/discard.js +5 -5
- package/dist/src/commands/doctor-check-core.d.ts +4 -10
- package/dist/src/commands/doctor-check-core.js +0 -8
- package/dist/src/commands/doctor-external-toolchains.js +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.d.ts +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.js +20 -20
- package/dist/src/commands/doctor-furnace-jar.d.ts +1 -1
- package/dist/src/commands/doctor-furnace-jar.js +1 -1
- package/dist/src/commands/doctor-furnace.js +22 -22
- package/dist/src/commands/doctor-orphaned-harness.d.ts +10 -17
- package/dist/src/commands/doctor-orphaned-harness.js +14 -23
- package/dist/src/commands/doctor-patch-manifest.d.ts +2 -1
- package/dist/src/commands/doctor-patch-manifest.js +7 -6
- package/dist/src/commands/doctor-post-rebase-audit.js +3 -3
- package/dist/src/commands/doctor-source-pin.d.ts +12 -12
- package/dist/src/commands/doctor-source-pin.js +14 -14
- package/dist/src/commands/doctor-working-tree.d.ts +3 -3
- package/dist/src/commands/doctor-working-tree.js +3 -3
- package/dist/src/commands/doctor.d.ts +3 -1
- package/dist/src/commands/doctor.js +15 -16
- package/dist/src/commands/download.js +50 -37
- package/dist/src/commands/export-all.js +29 -12
- package/dist/src/commands/export-flow.d.ts +5 -5
- package/dist/src/commands/export-flow.js +29 -59
- package/dist/src/commands/export-placement-conflicts.d.ts +3 -3
- package/dist/src/commands/export-placement-conflicts.js +12 -12
- package/dist/src/commands/export-placement-gate.d.ts +2 -2
- package/dist/src/commands/export-placement-gate.js +7 -13
- package/dist/src/commands/export-placement-policy.d.ts +1 -1
- package/dist/src/commands/export-placement-policy.js +4 -6
- package/dist/src/commands/export-shared.d.ts +51 -32
- package/dist/src/commands/export-shared.js +17 -32
- package/dist/src/commands/export.js +14 -5
- package/dist/src/commands/furnace/apply.js +16 -16
- package/dist/src/commands/furnace/authoring-config.d.ts +13 -0
- package/dist/src/commands/furnace/authoring-config.js +19 -0
- package/dist/src/commands/furnace/chrome-doc-remove.d.ts +1 -1
- package/dist/src/commands/furnace/chrome-doc-remove.js +2 -2
- package/dist/src/commands/furnace/chrome-doc-templates.d.ts +14 -14
- package/dist/src/commands/furnace/chrome-doc-templates.js +17 -17
- package/dist/src/commands/furnace/chrome-doc-tests.d.ts +2 -2
- package/dist/src/commands/furnace/chrome-doc-tests.js +4 -4
- package/dist/src/commands/furnace/chrome-doc.d.ts +8 -8
- package/dist/src/commands/furnace/chrome-doc.js +18 -18
- package/dist/src/commands/furnace/create-browser-test.d.ts +1 -1
- package/dist/src/commands/furnace/create-browser-test.js +7 -12
- package/dist/src/commands/furnace/create-dry-run.d.ts +4 -4
- package/dist/src/commands/furnace/create-dry-run.js +6 -9
- package/dist/src/commands/furnace/create-features.d.ts +2 -2
- package/dist/src/commands/furnace/create-features.js +2 -2
- package/dist/src/commands/furnace/create-mochikit.d.ts +4 -4
- package/dist/src/commands/furnace/create-mochikit.js +7 -7
- package/dist/src/commands/furnace/create-templates.d.ts +31 -15
- package/dist/src/commands/furnace/create-templates.js +20 -19
- package/dist/src/commands/furnace/create-xpcshell.d.ts +5 -5
- package/dist/src/commands/furnace/create-xpcshell.js +8 -8
- package/dist/src/commands/furnace/create.d.ts +1 -1
- package/dist/src/commands/furnace/create.js +35 -29
- package/dist/src/commands/furnace/deploy.js +15 -6
- package/dist/src/commands/furnace/diff.js +7 -7
- package/dist/src/commands/furnace/index.js +1 -1
- package/dist/src/commands/furnace/init.js +17 -16
- package/dist/src/commands/furnace/list.js +2 -2
- package/dist/src/commands/furnace/override.d.ts +1 -1
- package/dist/src/commands/furnace/override.js +43 -34
- package/dist/src/commands/furnace/preview.js +17 -17
- package/dist/src/commands/furnace/refresh.js +15 -7
- package/dist/src/commands/furnace/remove-mutations.d.ts +9 -10
- package/dist/src/commands/furnace/remove-mutations.js +19 -19
- package/dist/src/commands/furnace/remove-state.d.ts +1 -1
- package/dist/src/commands/furnace/remove-state.js +1 -1
- package/dist/src/commands/furnace/remove.js +4 -8
- package/dist/src/commands/furnace/rename-browser-test.js +10 -15
- package/dist/src/commands/furnace/rename-xpcshell.d.ts +2 -2
- package/dist/src/commands/furnace/rename-xpcshell.js +3 -3
- package/dist/src/commands/furnace/rename.js +36 -36
- package/dist/src/commands/furnace/scan.js +3 -3
- package/dist/src/commands/furnace/status.js +19 -16
- package/dist/src/commands/furnace/sync.js +6 -6
- package/dist/src/commands/furnace/test-file-name.d.ts +28 -0
- package/dist/src/commands/furnace/test-file-name.js +39 -0
- package/dist/src/commands/furnace/validate.js +11 -12
- package/dist/src/commands/furnace/validation-output.d.ts +21 -9
- package/dist/src/commands/furnace/validation-output.js +3 -8
- package/dist/src/commands/import.js +22 -29
- package/dist/src/commands/lint-per-patch.d.ts +2 -2
- package/dist/src/commands/lint-per-patch.js +27 -12
- package/dist/src/commands/lint-per-run-checkjs.d.ts +14 -15
- package/dist/src/commands/lint-per-run-checkjs.js +14 -15
- package/dist/src/commands/lint-report.d.ts +3 -3
- package/dist/src/commands/lint-report.js +4 -4
- package/dist/src/commands/lint.d.ts +5 -4
- package/dist/src/commands/lint.js +36 -36
- package/dist/src/commands/manifest.d.ts +4 -4
- package/dist/src/commands/manifest.js +1 -1
- package/dist/src/commands/package.js +4 -6
- package/dist/src/commands/patch/compact.d.ts +2 -2
- package/dist/src/commands/patch/compact.js +19 -20
- package/dist/src/commands/patch/delete.d.ts +1 -1
- package/dist/src/commands/patch/delete.js +23 -33
- package/dist/src/commands/patch/entry-projection.d.ts +13 -0
- package/dist/src/commands/patch/entry-projection.js +24 -0
- package/dist/src/commands/patch/lint-ignore.d.ts +3 -12
- package/dist/src/commands/patch/lint-ignore.js +33 -44
- package/dist/src/commands/patch/move-files-create.d.ts +2 -2
- package/dist/src/commands/patch/move-files-create.js +29 -15
- package/dist/src/commands/patch/move-files-into.d.ts +2 -2
- package/dist/src/commands/patch/move-files-into.js +41 -37
- package/dist/src/commands/patch/move-files.js +5 -14
- package/dist/src/commands/patch/patch-context.d.ts +1 -1
- package/dist/src/commands/patch/rename.d.ts +4 -4
- package/dist/src/commands/patch/rename.js +35 -49
- package/dist/src/commands/patch/reorder.js +35 -48
- package/dist/src/commands/patch/split-plan.d.ts +7 -8
- package/dist/src/commands/patch/split-plan.js +10 -13
- package/dist/src/commands/patch/split.d.ts +2 -2
- package/dist/src/commands/patch/split.js +50 -48
- package/dist/src/commands/patch/staged-dependency-validate.d.ts +1 -1
- package/dist/src/commands/patch/staged-dependency-validate.js +3 -3
- package/dist/src/commands/patch/staged-dependency.d.ts +1 -1
- package/dist/src/commands/patch/staged-dependency.js +22 -28
- package/dist/src/commands/patch/tier.d.ts +2 -2
- package/dist/src/commands/patch/tier.js +20 -30
- package/dist/src/commands/patch-rename-map.d.ts +19 -0
- package/dist/src/commands/patch-rename-map.js +36 -0
- package/dist/src/commands/pending-resolution.d.ts +15 -0
- package/dist/src/commands/pending-resolution.js +25 -0
- package/dist/src/commands/re-export-adjacent.d.ts +25 -3
- package/dist/src/commands/re-export-adjacent.js +40 -24
- package/dist/src/commands/re-export-bulk-scan.d.ts +3 -3
- package/dist/src/commands/re-export-bulk-scan.js +23 -27
- package/dist/src/commands/re-export-drift.d.ts +10 -10
- package/dist/src/commands/re-export-drift.js +33 -33
- package/dist/src/commands/re-export-files.d.ts +2 -3
- package/dist/src/commands/re-export-files.js +52 -44
- package/dist/src/commands/re-export-lint.d.ts +29 -30
- package/dist/src/commands/re-export-lint.js +36 -29
- package/dist/src/commands/re-export-options.d.ts +1 -1
- package/dist/src/commands/re-export-options.js +1 -1
- package/dist/src/commands/re-export-register.d.ts +1 -1
- package/dist/src/commands/re-export-register.js +1 -1
- package/dist/src/commands/re-export-scan.d.ts +1 -1
- package/dist/src/commands/re-export-scan.js +12 -9
- package/dist/src/commands/re-export-single.d.ts +23 -4
- package/dist/src/commands/re-export-single.js +39 -31
- package/dist/src/commands/re-export.js +35 -17
- package/dist/src/commands/rebase/abort.js +9 -14
- package/dist/src/commands/rebase/continue.js +20 -19
- package/dist/src/commands/rebase/index.d.ts +1 -1
- package/dist/src/commands/rebase/index.js +5 -5
- package/dist/src/commands/rebase/patch-loop.d.ts +2 -2
- package/dist/src/commands/rebase/patch-loop.js +20 -24
- package/dist/src/commands/register.js +5 -5
- package/dist/src/commands/reset.js +1 -1
- package/dist/src/commands/resolve.d.ts +2 -2
- package/dist/src/commands/resolve.js +21 -13
- package/dist/src/commands/run.d.ts +0 -13
- package/dist/src/commands/run.js +38 -51
- package/dist/src/commands/setup-support.d.ts +16 -4
- package/dist/src/commands/setup-support.js +20 -20
- package/dist/src/commands/setup.js +4 -10
- package/dist/src/commands/source.js +9 -2
- package/dist/src/commands/status-check.d.ts +3 -3
- package/dist/src/commands/status-check.js +6 -6
- package/dist/src/commands/status-json.d.ts +14 -13
- package/dist/src/commands/status-json.js +9 -8
- package/dist/src/commands/status-output.d.ts +3 -3
- package/dist/src/commands/status-output.js +5 -5
- package/dist/src/commands/status-ownership.d.ts +3 -3
- package/dist/src/commands/status-ownership.js +3 -3
- package/dist/src/commands/status.js +25 -26
- package/dist/src/commands/test-build-phase.d.ts +3 -3
- package/dist/src/commands/test-build-phase.js +48 -24
- package/dist/src/commands/test-diagnose.d.ts +1 -1
- package/dist/src/commands/test-diagnose.js +20 -20
- package/dist/src/commands/test-modes.d.ts +4 -4
- package/dist/src/commands/test-modes.js +4 -5
- package/dist/src/commands/test-register.js +5 -3
- package/dist/src/commands/test-run.d.ts +11 -11
- package/dist/src/commands/test-run.js +40 -33
- package/dist/src/commands/test-stale-gate.d.ts +12 -12
- package/dist/src/commands/test-stale-gate.js +17 -17
- package/dist/src/commands/test-verdict.d.ts +19 -5
- package/dist/src/commands/test-verdict.js +26 -11
- package/dist/src/commands/test.d.ts +3 -3
- package/dist/src/commands/test.js +73 -36
- package/dist/src/commands/token-coverage.js +3 -3
- package/dist/src/commands/token-list.d.ts +26 -0
- package/dist/src/commands/token-list.js +153 -0
- package/dist/src/commands/token.js +26 -10
- package/dist/src/commands/tree.js +26 -21
- package/dist/src/commands/typecheck.d.ts +6 -6
- package/dist/src/commands/typecheck.js +16 -16
- package/dist/src/commands/verify.d.ts +3 -3
- package/dist/src/commands/verify.js +10 -10
- package/dist/src/commands/watch.js +11 -11
- package/dist/src/commands/wire.js +17 -16
- package/dist/src/core/ast-utils.d.ts +7 -7
- package/dist/src/core/ast-utils.js +8 -8
- package/dist/src/core/branding.d.ts +5 -12
- package/dist/src/core/branding.js +6 -5
- package/dist/src/core/browser-wire.d.ts +1 -1
- package/dist/src/core/browser-wire.js +10 -7
- package/dist/src/core/build-audit-platform.d.ts +32 -3
- package/dist/src/core/build-audit-platform.js +153 -13
- package/dist/src/core/build-audit-registration.d.ts +5 -5
- package/dist/src/core/build-audit-registration.js +10 -9
- package/dist/src/core/build-audit-resolve.d.ts +5 -5
- package/dist/src/core/build-audit-resolve.js +6 -6
- package/dist/src/core/build-audit-skip.d.ts +57 -0
- package/dist/src/core/build-audit-skip.js +112 -0
- package/dist/src/core/build-audit-transforms.d.ts +2 -2
- package/dist/src/core/build-audit-transforms.js +3 -3
- package/dist/src/core/build-audit.d.ts +21 -8
- package/dist/src/core/build-audit.js +142 -40
- package/dist/src/core/build-baseline-types.d.ts +19 -18
- package/dist/src/core/build-baseline-types.js +1 -1
- package/dist/src/core/build-baseline.d.ts +48 -31
- package/dist/src/core/build-baseline.js +20 -43
- package/dist/src/core/build-jar-escalation.d.ts +8 -8
- package/dist/src/core/build-jar-escalation.js +18 -17
- package/dist/src/core/build-overwrite-guard.d.ts +4 -4
- package/dist/src/core/build-overwrite-guard.js +14 -14
- package/dist/src/core/build-prepare.d.ts +4 -12
- package/dist/src/core/build-prepare.js +22 -26
- package/dist/src/core/config-mutate.js +4 -4
- package/dist/src/core/config-paths.d.ts +2 -6
- package/dist/src/core/config-paths.js +4 -2
- package/dist/src/core/config-state.d.ts +0 -6
- package/dist/src/core/config-state.js +3 -21
- package/dist/src/core/config-validate-build-audit.d.ts +8 -0
- package/dist/src/core/config-validate-build-audit.js +80 -0
- package/dist/src/core/config-validate-file-size.d.ts +1 -1
- package/dist/src/core/config-validate-file-size.js +3 -3
- package/dist/src/core/config-validate-patch-policy.d.ts +2 -2
- package/dist/src/core/config-validate-patch-policy.js +3 -3
- package/dist/src/core/config-validate-test-toolchains.d.ts +2 -2
- package/dist/src/core/config-validate-test-toolchains.js +4 -5
- package/dist/src/core/config-validate.js +22 -12
- package/dist/src/core/config.d.ts +12 -12
- package/dist/src/core/config.js +21 -25
- package/dist/src/core/coverage-extend.d.ts +16 -16
- package/dist/src/core/coverage-extend.js +20 -20
- package/dist/src/core/destructive.d.ts +14 -14
- package/dist/src/core/destructive.js +9 -9
- package/dist/src/core/diff-hunks.d.ts +2 -2
- package/dist/src/core/diff-hunks.js +7 -7
- package/dist/src/core/discard-baseline.d.ts +10 -10
- package/dist/src/core/discard-baseline.js +22 -23
- package/dist/src/core/display-state.d.ts +11 -11
- package/dist/src/core/display-state.js +12 -12
- package/dist/src/core/engine-changes.d.ts +2 -2
- package/dist/src/core/engine-changes.js +2 -2
- package/dist/src/core/engine-precondition.d.ts +5 -13
- package/dist/src/core/engine-precondition.js +5 -10
- package/dist/src/core/engine-session-lock.d.ts +18 -18
- package/dist/src/core/engine-session-lock.js +50 -54
- package/dist/src/core/export-moved-code-shape.d.ts +7 -7
- package/dist/src/core/export-moved-code-shape.js +10 -10
- package/dist/src/core/file-lock-owner.d.ts +103 -0
- package/dist/src/core/file-lock-owner.js +259 -0
- package/dist/src/core/file-lock.d.ts +14 -19
- package/dist/src/core/file-lock.js +90 -128
- package/dist/src/core/firefox-cache.d.ts +13 -1
- package/dist/src/core/firefox-cache.js +61 -36
- package/dist/src/core/firefox-download.d.ts +15 -0
- package/dist/src/core/firefox-download.js +38 -22
- package/dist/src/core/firefox-extract.d.ts +8 -7
- package/dist/src/core/firefox-extract.js +45 -27
- package/dist/src/core/firefox.d.ts +34 -36
- package/dist/src/core/firefox.js +13 -44
- package/dist/src/core/furnace-apply-dry-run.d.ts +1 -6
- package/dist/src/core/furnace-apply-dry-run.js +2 -8
- package/dist/src/core/furnace-apply-ftl.d.ts +5 -5
- package/dist/src/core/furnace-apply-ftl.js +8 -8
- package/dist/src/core/furnace-apply-helpers.d.ts +9 -20
- package/dist/src/core/furnace-apply-helpers.js +28 -39
- package/dist/src/core/furnace-apply-output.js +1 -1
- package/dist/src/core/furnace-apply-overwrite-warn.d.ts +9 -9
- package/dist/src/core/furnace-apply-overwrite-warn.js +13 -11
- package/dist/src/core/furnace-apply-undeploy-actions.d.ts +1 -1
- package/dist/src/core/furnace-apply-undeploy-actions.js +1 -1
- package/dist/src/core/furnace-apply.d.ts +4 -4
- package/dist/src/core/furnace-apply.js +50 -29
- package/dist/src/core/furnace-checksum-utils.d.ts +5 -5
- package/dist/src/core/furnace-checksum-utils.js +5 -5
- package/dist/src/core/furnace-config-custom.d.ts +1 -1
- package/dist/src/core/furnace-config-custom.js +2 -2
- package/dist/src/core/furnace-config-order.js +1 -1
- package/dist/src/core/furnace-config-tokens.d.ts +3 -3
- package/dist/src/core/furnace-config-tokens.js +3 -3
- package/dist/src/core/furnace-config-validate.js +2 -2
- package/dist/src/core/furnace-config.d.ts +5 -5
- package/dist/src/core/furnace-config.js +40 -53
- package/dist/src/core/furnace-constants.d.ts +6 -6
- package/dist/src/core/furnace-constants.js +9 -8
- package/dist/src/core/furnace-css-fragments.d.ts +6 -6
- package/dist/src/core/furnace-css-fragments.js +11 -11
- package/dist/src/core/furnace-dir-entry.d.ts +20 -0
- package/dist/src/core/furnace-dir-entry.js +21 -0
- package/dist/src/core/furnace-jsconfig.d.ts +7 -7
- package/dist/src/core/furnace-jsconfig.js +22 -20
- package/dist/src/core/furnace-operation.d.ts +22 -19
- package/dist/src/core/furnace-operation.js +38 -34
- package/dist/src/core/furnace-precondition.d.ts +10 -10
- package/dist/src/core/furnace-precondition.js +8 -8
- package/dist/src/core/furnace-refresh.d.ts +18 -6
- package/dist/src/core/furnace-refresh.js +5 -8
- package/dist/src/core/furnace-registration-ast.d.ts +2 -3
- package/dist/src/core/furnace-registration-ast.js +9 -12
- package/dist/src/core/furnace-registration-remove.d.ts +4 -4
- package/dist/src/core/furnace-registration-remove.js +6 -6
- package/dist/src/core/furnace-registration-validate.d.ts +2 -2
- package/dist/src/core/furnace-registration-validate.js +2 -2
- package/dist/src/core/furnace-registration.d.ts +7 -6
- package/dist/src/core/furnace-registration.js +29 -36
- package/dist/src/core/furnace-rollback.d.ts +1 -1
- package/dist/src/core/furnace-rollback.js +5 -5
- package/dist/src/core/furnace-scanner.js +3 -6
- package/dist/src/core/furnace-stale-export.d.ts +17 -16
- package/dist/src/core/furnace-stale-export.js +16 -15
- package/dist/src/core/furnace-staleness.d.ts +2 -2
- package/dist/src/core/furnace-staleness.js +2 -2
- package/dist/src/core/furnace-state-persist.d.ts +12 -12
- package/dist/src/core/furnace-state-persist.js +10 -10
- package/dist/src/core/furnace-step-errors.d.ts +6 -6
- package/dist/src/core/furnace-step-errors.js +6 -6
- package/dist/src/core/furnace-validate-accessibility.js +14 -14
- package/dist/src/core/furnace-validate-compatibility.js +9 -9
- package/dist/src/core/furnace-validate-registration.d.ts +2 -2
- package/dist/src/core/furnace-validate-registration.js +18 -20
- package/dist/src/core/furnace-validate-structure.d.ts +1 -1
- package/dist/src/core/furnace-validate-structure.js +4 -4
- package/dist/src/core/furnace-validate.js +9 -9
- package/dist/src/core/furnace-version-drift.d.ts +5 -5
- package/dist/src/core/furnace-version-drift.js +5 -5
- package/dist/src/core/git-base.d.ts +6 -4
- package/dist/src/core/git-base.js +29 -7
- package/dist/src/core/git-diff-new-file.d.ts +40 -0
- package/dist/src/core/git-diff-new-file.js +119 -0
- package/dist/src/core/git-diff.d.ts +13 -13
- package/dist/src/core/git-diff.js +121 -189
- package/dist/src/core/git-file-ops.d.ts +6 -13
- package/dist/src/core/git-file-ops.js +11 -35
- package/dist/src/core/git-readonly-index.d.ts +12 -14
- package/dist/src/core/git-readonly-index.js +12 -16
- package/dist/src/core/git-status.d.ts +9 -2
- package/dist/src/core/git-status.js +23 -11
- package/dist/src/core/git.d.ts +3 -9
- package/dist/src/core/git.js +28 -57
- package/dist/src/core/harness-orphans.d.ts +17 -17
- package/dist/src/core/harness-orphans.js +28 -27
- package/dist/src/core/history-log.d.ts +19 -0
- package/dist/src/core/history-log.js +29 -0
- package/dist/src/core/license-headers.d.ts +19 -18
- package/dist/src/core/license-headers.js +29 -28
- package/dist/src/core/mach-build-artifacts.d.ts +21 -21
- package/dist/src/core/mach-build-artifacts.js +23 -23
- package/dist/src/core/mach-error-hints.d.ts +5 -10
- package/dist/src/core/mach-error-hints.js +14 -14
- package/dist/src/core/mach-known-noise-filter.d.ts +42 -38
- package/dist/src/core/mach-known-noise-filter.js +57 -56
- package/dist/src/core/mach-mozconfig.d.ts +6 -6
- package/dist/src/core/mach-mozconfig.js +17 -16
- package/dist/src/core/mach-python.d.ts +3 -0
- package/dist/src/core/mach-python.js +13 -7
- package/dist/src/core/mach-resource-shim.d.ts +24 -12
- package/dist/src/core/mach-resource-shim.js +124 -21
- package/dist/src/core/mach.d.ts +59 -73
- package/dist/src/core/mach.js +47 -115
- package/dist/src/core/marionette-port.d.ts +15 -30
- package/dist/src/core/marionette-port.js +46 -89
- package/dist/src/core/marionette-preflight.d.ts +6 -6
- package/dist/src/core/marionette-preflight.js +32 -50
- package/dist/src/core/markdown-table.d.ts +9 -9
- package/dist/src/core/markdown-table.js +14 -14
- package/dist/src/core/mochitest-server-port.d.ts +8 -8
- package/dist/src/core/mochitest-server-port.js +17 -17
- package/dist/src/core/module-resolution-preflight.d.ts +8 -8
- package/dist/src/core/module-resolution-preflight.js +11 -11
- package/dist/src/core/moz-manifest-helpers.d.ts +7 -7
- package/dist/src/core/moz-manifest-helpers.js +7 -7
- package/dist/src/core/moz-manifest-register.d.ts +1 -1
- package/dist/src/core/moz-manifest-register.js +2 -2
- package/dist/src/core/moz-manifest-rules.js +46 -42
- package/dist/src/core/moz-manifest-tokenizers.js +1 -1
- package/dist/src/core/ownership-table.d.ts +5 -5
- package/dist/src/core/ownership-table.js +7 -7
- package/dist/src/core/parser-fallback.d.ts +3 -3
- package/dist/src/core/parser-fallback.js +3 -3
- package/dist/src/core/patch-apply-fuzz.d.ts +5 -5
- package/dist/src/core/patch-apply-fuzz.js +13 -13
- package/dist/src/core/patch-apply.d.ts +13 -14
- package/dist/src/core/patch-apply.js +36 -42
- package/dist/src/core/patch-export-coverage.d.ts +0 -9
- package/dist/src/core/patch-export-coverage.js +1 -30
- package/dist/src/core/patch-export-update.d.ts +21 -4
- package/dist/src/core/patch-export-update.js +7 -6
- package/dist/src/core/patch-export.d.ts +20 -30
- package/dist/src/core/patch-export.js +55 -77
- package/dist/src/core/patch-files.d.ts +0 -4
- package/dist/src/core/patch-files.js +0 -11
- package/dist/src/core/patch-identifier-suggest.d.ts +1 -1
- package/dist/src/core/patch-identifier-suggest.js +4 -4
- package/dist/src/core/patch-lint-binary.d.ts +12 -18
- package/dist/src/core/patch-lint-cache.d.ts +18 -2
- package/dist/src/core/patch-lint-cache.js +16 -19
- package/dist/src/core/patch-lint-checkjs.d.ts +55 -38
- package/dist/src/core/patch-lint-checkjs.js +78 -64
- package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +8 -9
- package/dist/src/core/patch-lint-chrome-jsdoc.js +10 -11
- package/dist/src/core/patch-lint-creators.d.ts +5 -9
- package/dist/src/core/patch-lint-creators.js +3 -3
- package/dist/src/core/patch-lint-cross.d.ts +27 -19
- package/dist/src/core/patch-lint-cross.js +67 -110
- package/dist/src/core/patch-lint-css.d.ts +1 -1
- package/dist/src/core/patch-lint-css.js +15 -11
- package/dist/src/core/patch-lint-diff-tag.d.ts +5 -5
- package/dist/src/core/patch-lint-diff-tag.js +5 -5
- package/dist/src/core/patch-lint-diff.d.ts +4 -4
- package/dist/src/core/patch-lint-diff.js +4 -4
- package/dist/src/core/patch-lint-file-size.d.ts +3 -3
- package/dist/src/core/patch-lint-file-size.js +6 -6
- package/dist/src/core/patch-lint-forward-registration.d.ts +58 -0
- package/dist/src/core/patch-lint-forward-registration.js +210 -0
- package/dist/src/core/patch-lint-jsdoc.d.ts +2 -2
- package/dist/src/core/patch-lint-jsdoc.js +46 -46
- package/dist/src/core/patch-lint-module-registration.d.ts +3 -9
- package/dist/src/core/patch-lint-module-registration.js +1 -1
- package/dist/src/core/patch-lint-mozbuild.d.ts +1 -1
- package/dist/src/core/patch-lint-mozbuild.js +10 -10
- package/dist/src/core/patch-lint-observer.d.ts +3 -3
- package/dist/src/core/patch-lint-observer.js +7 -7
- package/dist/src/core/patch-lint-ownership.d.ts +6 -6
- package/dist/src/core/patch-lint-ownership.js +6 -6
- package/dist/src/core/patch-lint-prettier.d.ts +6 -6
- package/dist/src/core/patch-lint-prettier.js +7 -7
- package/dist/src/core/patch-lint-queue-types.d.ts +60 -0
- package/dist/src/core/patch-lint-queue-types.js +12 -0
- package/dist/src/core/patch-lint-staged-registration.d.ts +61 -0
- package/dist/src/core/patch-lint-staged-registration.js +90 -0
- package/dist/src/core/patch-lint-unmanaged-companion.d.ts +23 -23
- package/dist/src/core/patch-lint-unmanaged-companion.js +26 -26
- package/dist/src/core/patch-lint.d.ts +41 -35
- package/dist/src/core/patch-lint.js +52 -49
- package/dist/src/core/patch-lock.d.ts +1 -1
- package/dist/src/core/patch-lock.js +11 -11
- package/dist/src/core/patch-manifest-consistency.d.ts +7 -7
- package/dist/src/core/patch-manifest-consistency.js +16 -17
- package/dist/src/core/patch-manifest-files-affected.d.ts +1 -1
- package/dist/src/core/patch-manifest-files-affected.js +3 -3
- package/dist/src/core/patch-manifest-io.d.ts +14 -14
- package/dist/src/core/patch-manifest-io.js +35 -34
- package/dist/src/core/patch-manifest-query.d.ts +1 -1
- package/dist/src/core/patch-manifest-query.js +4 -4
- package/dist/src/core/patch-manifest-resolve.d.ts +5 -5
- package/dist/src/core/patch-manifest-resolve.js +7 -7
- package/dist/src/core/patch-manifest-validate.js +3 -3
- package/dist/src/core/patch-manifest.d.ts +2 -2
- package/dist/src/core/patch-manifest.js +2 -2
- package/dist/src/core/patch-parse.d.ts +32 -21
- package/dist/src/core/patch-parse.js +40 -15
- package/dist/src/core/patch-policy.js +15 -27
- package/dist/src/core/patch-registration-refs.d.ts +4 -4
- package/dist/src/core/patch-registration-refs.js +7 -7
- package/dist/src/core/patch-source-metadata.d.ts +1 -3
- package/dist/src/core/patch-source-metadata.js +0 -4
- package/dist/src/core/patch-transform.d.ts +8 -16
- package/dist/src/core/patch-transform.js +13 -23
- package/dist/src/core/process-cpu-time.d.ts +1 -1
- package/dist/src/core/process-cpu-time.js +6 -6
- package/dist/src/core/rebase-session.d.ts +9 -15
- package/dist/src/core/rebase-session.js +13 -25
- package/dist/src/core/register-browser-content.js +3 -2
- package/dist/src/core/register-browser-test.js +2 -1
- package/dist/src/core/register-module.js +2 -1
- package/dist/src/core/register-result.d.ts +1 -1
- package/dist/src/core/register-result.js +1 -1
- package/dist/src/core/register-scaffold.d.ts +2 -2
- package/dist/src/core/register-scaffold.js +8 -7
- package/dist/src/core/register-shared-css.d.ts +3 -3
- package/dist/src/core/register-shared-css.js +6 -5
- package/dist/src/core/register-xpcshell-test.d.ts +2 -2
- package/dist/src/core/register-xpcshell-test.js +2 -2
- package/dist/src/core/run-log-redact.d.ts +38 -0
- package/dist/src/core/run-log-redact.js +69 -0
- package/dist/src/core/run-log.d.ts +21 -10
- package/dist/src/core/run-log.js +76 -27
- package/dist/src/core/shared-ftl.d.ts +2 -2
- package/dist/src/core/shared-ftl.js +6 -6
- package/dist/src/core/signal-critical.d.ts +2 -2
- package/dist/src/core/signal-critical.js +4 -6
- package/dist/src/core/smoke-patterns.d.ts +5 -6
- package/dist/src/core/smoke-patterns.js +15 -20
- package/dist/src/core/state-file.d.ts +15 -4
- package/dist/src/core/state-file.js +14 -1
- package/dist/src/core/status-binary.d.ts +8 -8
- package/dist/src/core/status-binary.js +12 -12
- package/dist/src/core/status-classify.d.ts +17 -17
- package/dist/src/core/status-classify.js +13 -12
- package/dist/src/core/test-changed-prefs.d.ts +12 -12
- package/dist/src/core/test-changed-prefs.js +40 -25
- package/dist/src/core/test-harness-crash.d.ts +39 -39
- package/dist/src/core/test-harness-crash.js +69 -69
- package/dist/src/core/test-harness-output.d.ts +7 -7
- package/dist/src/core/test-harness-output.js +7 -7
- package/dist/src/core/test-harness-verdict-notes.d.ts +13 -14
- package/dist/src/core/test-harness-verdict-notes.js +4 -4
- package/dist/src/core/test-path-scope.d.ts +8 -8
- package/dist/src/core/test-path-scope.js +11 -11
- package/dist/src/core/test-stale-check.d.ts +22 -23
- package/dist/src/core/test-stale-check.js +31 -30
- package/dist/src/core/test-stale-symlink.d.ts +1 -1
- package/dist/src/core/test-stale-symlink.js +1 -1
- package/dist/src/core/test-stall-triage.d.ts +9 -9
- package/dist/src/core/test-stall-triage.js +22 -22
- package/dist/src/core/test-xpcshell-retry.d.ts +26 -7
- package/dist/src/core/test-xpcshell-retry.js +14 -11
- package/dist/src/core/token-category.d.ts +35 -2
- package/dist/src/core/token-category.js +67 -58
- package/dist/src/core/token-coverage.js +4 -5
- package/dist/src/core/token-dark-mode.d.ts +9 -9
- package/dist/src/core/token-dark-mode.js +13 -25
- package/dist/src/core/token-docs.d.ts +1 -1
- package/dist/src/core/token-inventory.d.ts +56 -0
- package/dist/src/core/token-inventory.js +109 -0
- package/dist/src/core/token-manager.d.ts +4 -4
- package/dist/src/core/token-manager.js +22 -22
- package/dist/src/core/token-scaffold.d.ts +4 -4
- package/dist/src/core/token-scaffold.js +4 -4
- package/dist/src/core/token-variant.d.ts +14 -14
- package/dist/src/core/token-variant.js +52 -53
- package/dist/src/core/toolchain-preflight.d.ts +15 -15
- package/dist/src/core/toolchain-preflight.js +23 -23
- package/dist/src/core/tree-cow.d.ts +3 -5
- package/dist/src/core/tree-cow.js +8 -8
- package/dist/src/core/tree-guard.d.ts +3 -3
- package/dist/src/core/tree-guard.js +23 -23
- package/dist/src/core/tree-store.d.ts +15 -15
- package/dist/src/core/tree-store.js +39 -38
- package/dist/src/core/typecheck-shim.d.ts +16 -15
- package/dist/src/core/typecheck-shim.js +26 -25
- package/dist/src/core/typecheck.d.ts +12 -12
- package/dist/src/core/typecheck.js +33 -33
- package/dist/src/core/wire-destroy.d.ts +2 -2
- package/dist/src/core/wire-destroy.js +5 -5
- package/dist/src/core/wire-dom-fragment.d.ts +3 -3
- package/dist/src/core/wire-dom-fragment.js +12 -23
- package/dist/src/core/wire-init.d.ts +2 -2
- package/dist/src/core/wire-init.js +7 -7
- package/dist/src/core/wire-subscript.d.ts +1 -1
- package/dist/src/core/wire-subscript.js +3 -3
- package/dist/src/core/wire-utils.d.ts +9 -9
- package/dist/src/core/wire-utils.js +16 -28
- package/dist/src/core/xpcshell-appdir.d.ts +20 -20
- package/dist/src/core/xpcshell-appdir.js +28 -30
- package/dist/src/core/xpcshell-profile-dir.d.ts +3 -3
- package/dist/src/core/xpcshell-profile-dir.js +7 -7
- package/dist/src/errors/base.d.ts +69 -16
- package/dist/src/errors/base.js +95 -26
- package/dist/src/errors/build.d.ts +6 -6
- package/dist/src/errors/build.js +26 -34
- package/dist/src/errors/codes.d.ts +10 -10
- package/dist/src/errors/codes.js +10 -10
- package/dist/src/errors/config.d.ts +0 -14
- package/dist/src/errors/config.js +13 -34
- package/dist/src/errors/download.d.ts +13 -0
- package/dist/src/errors/download.js +53 -24
- package/dist/src/errors/furnace.d.ts +2 -2
- package/dist/src/errors/furnace.js +8 -9
- package/dist/src/errors/git.d.ts +9 -9
- package/dist/src/errors/git.js +21 -31
- package/dist/src/errors/patch.d.ts +3 -3
- package/dist/src/errors/patch.js +11 -13
- package/dist/src/errors/rebase.d.ts +1 -1
- package/dist/src/errors/rebase.js +8 -8
- package/dist/src/errors/run.d.ts +1 -1
- package/dist/src/errors/run.js +1 -1
- package/dist/src/index.d.ts +4 -4
- package/dist/src/index.js +4 -4
- package/dist/src/types/commands/options.d.ts +155 -200
- package/dist/src/types/commands/patches.d.ts +19 -19
- package/dist/src/types/commands/project.d.ts +3 -3
- package/dist/src/types/config.d.ts +52 -19
- package/dist/src/types/furnace.d.ts +17 -17
- package/dist/src/types/index.d.ts +0 -1
- package/dist/src/types/json.d.ts +3 -3
- package/dist/src/types/json.js +2 -2
- package/dist/src/types/typecheck.d.ts +3 -3
- package/dist/src/utils/assert.d.ts +4 -16
- package/dist/src/utils/assert.js +7 -24
- package/dist/src/utils/build-info.d.ts +6 -6
- package/dist/src/utils/build-info.js +6 -6
- package/dist/src/utils/child-env.d.ts +7 -6
- package/dist/src/utils/child-env.js +5 -5
- package/dist/src/utils/concurrency.d.ts +2 -2
- package/dist/src/utils/concurrency.js +2 -2
- package/dist/src/utils/elapsed.js +10 -1
- package/dist/src/utils/errors.d.ts +8 -8
- package/dist/src/utils/errors.js +8 -8
- package/dist/src/utils/fs.d.ts +1 -1
- package/dist/src/utils/fs.js +15 -20
- package/dist/src/utils/hash.d.ts +12 -0
- package/dist/src/utils/hash.js +16 -0
- package/dist/src/utils/line-dispatch.d.ts +15 -0
- package/dist/src/utils/line-dispatch.js +48 -0
- package/dist/src/utils/logger.d.ts +4 -4
- package/dist/src/utils/logger.js +11 -11
- package/dist/src/utils/machine-output.js +2 -2
- package/dist/src/utils/options.d.ts +14 -20
- package/dist/src/utils/options.js +26 -27
- package/dist/src/utils/package-root.js +5 -14
- package/dist/src/utils/paths.d.ts +4 -4
- package/dist/src/utils/paths.js +4 -4
- package/dist/src/utils/platform.d.ts +0 -4
- package/dist/src/utils/process-group.d.ts +10 -9
- package/dist/src/utils/process-group.js +37 -36
- package/dist/src/utils/process.d.ts +70 -55
- package/dist/src/utils/process.js +129 -179
- package/dist/src/utils/ps-duration.d.ts +4 -4
- package/dist/src/utils/ps-duration.js +9 -9
- package/dist/src/utils/regex.d.ts +4 -4
- package/dist/src/utils/regex.js +7 -7
- package/dist/src/utils/sleep.d.ts +26 -0
- package/dist/src/utils/sleep.js +31 -0
- package/dist/src/utils/stdio-drain.d.ts +7 -7
- package/dist/src/utils/stdio-drain.js +8 -8
- package/dist/src/utils/validation.d.ts +12 -49
- package/dist/src/utils/validation.js +26 -36
- package/docs/README.md +2 -2
- package/docs/configuration.md +163 -69
- package/docs/exit-codes.md +66 -49
- package/docs/furnace.md +20 -19
- package/docs/lifecycle-invariants.md +414 -247
- package/docs/machine-output.md +58 -34
- package/docs/patch-workflow.md +48 -44
- package/docs/run-logs.md +72 -28
- package/docs/testing.md +105 -98
- package/docs/verification-trees.md +23 -22
- package/package.json +7 -6
- package/dist/src/commands/rebase.d.ts +0 -4
- package/dist/src/commands/rebase.js +0 -5
- package/dist/src/core/patch-artifact-normalize.d.ts +0 -21
- package/dist/src/core/patch-artifact-normalize.js +0 -24
- package/dist/src/core/patch-lint-reexports.d.ts +0 -7
- package/dist/src/core/patch-lint-reexports.js +0 -8
- package/dist/src/core/wire-targets.d.ts +0 -7
- package/dist/src/core/wire-targets.js +0 -8
|
@@ -9,14 +9,14 @@ import { isNewFileInPatch, parseDiffSections, parseHunksForFile } from './patch-
|
|
|
9
9
|
/**
|
|
10
10
|
* Extracts the complete file content from a "new file" patch given a raw
|
|
11
11
|
* diff string already in memory. Callers with a patch file path should
|
|
12
|
-
* prefer {@link extractNewFileContent}
|
|
12
|
+
* prefer {@link extractNewFileContent}. This helper exists for code paths
|
|
13
13
|
* that already hold the diff (e.g. the in-flight export planner) and do
|
|
14
14
|
* not want to round-trip through the filesystem.
|
|
15
15
|
*
|
|
16
16
|
* @param diff - Raw unified-diff content
|
|
17
17
|
* @param targetFile - Optional target file to scope extraction to
|
|
18
18
|
* @returns The file content that the patch would create
|
|
19
|
-
* @throws PatchError for binary sections
|
|
19
|
+
* @throws PatchError for binary sections. A `GIT binary patch` payload is
|
|
20
20
|
* base85 (whose alphabet includes `+`), so "extract the + lines" would
|
|
21
21
|
* silently write garbage text over a binary target. Callers must treat
|
|
22
22
|
* binary new-file conflicts as unresolvable rather than auto-resolving.
|
|
@@ -37,7 +37,7 @@ export function extractNewFileContentFromDiff(diff, targetFile) {
|
|
|
37
37
|
*/
|
|
38
38
|
function contentFromSections(sections) {
|
|
39
39
|
// An empty new file is a legitimate git diff: `new file mode` with no
|
|
40
|
-
// hunks at all. It must extract as ''
|
|
40
|
+
// hunks at all. It must extract as '': the historical line-walker
|
|
41
41
|
// returned '\n' for it, creating a one-byte file that failed checksum
|
|
42
42
|
// and drift comparisons against the truly empty file the patch creates.
|
|
43
43
|
const hunks = sections.flatMap((section) => section.hunks);
|
|
@@ -61,15 +61,15 @@ function contentFromSections(sections) {
|
|
|
61
61
|
return hasNoNewlineMarker ? result : result + '\n';
|
|
62
62
|
}
|
|
63
63
|
/**
|
|
64
|
-
* Projects every
|
|
64
|
+
* Projects every text new file a diff creates into a path → content map, for
|
|
65
65
|
* the cross-patch lint projections that build a synthetic patch-queue entry.
|
|
66
66
|
*
|
|
67
|
-
* Binary new files are
|
|
68
|
-
* forward-import rule, which scans content for import statements
|
|
69
|
-
* blob authors none, so omitting it contributes exactly what
|
|
70
|
-
* would. Refusing instead (which is what
|
|
67
|
+
* Binary new files are skipped rather than refused. The map feeds only the
|
|
68
|
+
* forward-import rule, which scans content for import statements, and a
|
|
69
|
+
* binary blob authors none, so omitting it contributes exactly what
|
|
70
|
+
* including it would. Refusing instead (which is what
|
|
71
71
|
* {@link extractNewFileContentFromDiff} correctly does for a caller that
|
|
72
|
-
* named
|
|
72
|
+
* named one file) made vendoring a new binary impossible: every projection
|
|
73
73
|
* site fed it every detected new file, so `export --order`, `re-export
|
|
74
74
|
* --scan --scan-file`, `patch move-files-into` and `patch split` all died on
|
|
75
75
|
* a file the export half had just written a valid `GIT binary patch` for.
|
|
@@ -101,16 +101,6 @@ export async function extractNewFileContent(patchPath, targetFile) {
|
|
|
101
101
|
const content = await readText(patchPath);
|
|
102
102
|
return extractNewFileContentFromDiff(content, targetFile);
|
|
103
103
|
}
|
|
104
|
-
/**
|
|
105
|
-
* Applies a patch's changes to content.
|
|
106
|
-
* @param content - Original content (null for new files)
|
|
107
|
-
* @param patchPath - Path to the patch file
|
|
108
|
-
* @param targetFile - The file path within the patch
|
|
109
|
-
* @returns Modified content
|
|
110
|
-
*/
|
|
111
|
-
export async function applyPatchToContent(content, patchPath, targetFile) {
|
|
112
|
-
return applyPatchTextToContent(content, await readText(patchPath), targetFile);
|
|
113
|
-
}
|
|
114
104
|
/**
|
|
115
105
|
* Applies an already-read patch body to content. Batched callers that hold
|
|
116
106
|
* many (patch, file) pairs use this to read each patch body once instead of
|
|
@@ -144,7 +134,7 @@ export function applyPatchTextToContent(content, patchContent, targetFile) {
|
|
|
144
134
|
// The "no newline at end" marker applies to the last hunk in file order
|
|
145
135
|
// (highest oldStart), which is the *first* hunk in our reverse-sorted array.
|
|
146
136
|
// We read the new-side flag because the output we produce corresponds to
|
|
147
|
-
// the new side
|
|
137
|
+
// the new side. Asymmetric diffs (old lacks newline, new has one, or
|
|
148
138
|
// vice versa) would otherwise disagree with `git apply`.
|
|
149
139
|
const lastHunkNoNewline = sortedHunks[0]?.noNewlineAtEndNew ?? false;
|
|
150
140
|
for (const hunk of sortedHunks) {
|
|
@@ -168,10 +158,10 @@ export function applyPatchTextToContent(content, patchContent, targetFile) {
|
|
|
168
158
|
throw new PatchError(`Patch hunk header mismatch for ${targetFile}: header says ${hunk.oldCount} old lines but body has ${actualOldCount}`, targetFile);
|
|
169
159
|
}
|
|
170
160
|
// Replace the old lines with new lines. Unified-diff convention: for a
|
|
171
|
-
// pure-insertion hunk (`@@ -N,0 +M,k @@`), N names the line
|
|
172
|
-
// insertion point, so content is spliced at index N (after line N)
|
|
161
|
+
// pure-insertion hunk (`@@ -N,0 +M,k @@`), N names the line before the
|
|
162
|
+
// insertion point, so content is spliced at index N (after line N).
|
|
173
163
|
// `N - 1` inserted one line too early, and `@@ -0,0` (insert at top of
|
|
174
|
-
// file) produced splice(-1, …), which inserts before the
|
|
164
|
+
// file) produced splice(-1, …), which inserts before the last element.
|
|
175
165
|
const startIndex = hunk.oldCount === 0 ? hunk.oldStart : hunk.oldStart - 1;
|
|
176
166
|
// Verify context lines match before applying
|
|
177
167
|
let verifyIndex = startIndex;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Best-effort: a missing `ps`, an exited process, or an unparseable field
|
|
5
5
|
* yields `undefined`, which callers must render as "unknown" rather than as
|
|
6
|
-
* zero
|
|
6
|
+
* zero. Reporting a live build as having used no CPU would invert the very
|
|
7
7
|
* diagnosis this exists for.
|
|
8
8
|
*
|
|
9
9
|
* @param pid - Process to inspect
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
* Accumulated-CPU-time probe for a single PID.
|
|
4
4
|
*
|
|
5
5
|
* Exists to answer the one question `kill(pid, 0)` cannot: a lock holder
|
|
6
|
-
* that
|
|
7
|
-
* sessions on one checkout diagnosed exactly this by hand
|
|
8
|
-
* near-zero CPU is hung, not working"
|
|
6
|
+
* that exists may still be wedged. A downstream fork running five concurrent
|
|
7
|
+
* sessions on one checkout diagnosed exactly this by hand ("a holder at
|
|
8
|
+
* near-zero CPU is hung, not working") after a queue stalled behind a
|
|
9
9
|
* command that had consumed 0.3 s of CPU in eleven minutes.
|
|
10
10
|
*
|
|
11
|
-
* It is reported as
|
|
11
|
+
* It is reported as evidence, never as a verdict. A legitimately slow holder
|
|
12
12
|
* can also sit at low CPU while blocked on I/O or on a child process, so
|
|
13
13
|
* nothing keys a refusal, a kill, or a lock steal off this number.
|
|
14
14
|
*/
|
|
@@ -19,7 +19,7 @@ import { parsePsDuration } from '../utils/ps-duration.js';
|
|
|
19
19
|
*
|
|
20
20
|
* Best-effort: a missing `ps`, an exited process, or an unparseable field
|
|
21
21
|
* yields `undefined`, which callers must render as "unknown" rather than as
|
|
22
|
-
* zero
|
|
22
|
+
* zero. Reporting a live build as having used no CPU would invert the very
|
|
23
23
|
* diagnosis this exists for.
|
|
24
24
|
*
|
|
25
25
|
* @param pid - Process to inspect
|
|
@@ -34,7 +34,7 @@ export async function readProcessCpuSeconds(pid) {
|
|
|
34
34
|
'-NoProfile',
|
|
35
35
|
'-NonInteractive',
|
|
36
36
|
'-Command',
|
|
37
|
-
`(Get-Process -Id ${
|
|
37
|
+
`(Get-Process -Id ${pid} -ErrorAction SilentlyContinue).CPU`,
|
|
38
38
|
]);
|
|
39
39
|
const seconds = Number.parseFloat(result.stdout.trim());
|
|
40
40
|
return Number.isFinite(seconds) ? seconds : undefined;
|
|
@@ -12,11 +12,11 @@ export type RebasePatchStatus = 'pending' | 'applied-clean' | 'applied-fuzz' | '
|
|
|
12
12
|
* A discriminated union on `status`, so a payload can only be present on the
|
|
13
13
|
* status it belongs to. A flat-optionals shape makes
|
|
14
14
|
* `{ status: 'resolved', error, conflictingFiles }` representable, and
|
|
15
|
-
* `rebase --continue` will write it
|
|
15
|
+
* `rebase --continue` will write it, flipping the status without clearing
|
|
16
16
|
* the failure payload, then persisting that to the session file.
|
|
17
17
|
*
|
|
18
|
-
* The on-disk validator (`isValidPatchEntry`) is
|
|
19
|
-
*
|
|
18
|
+
* The on-disk validator (`isValidPatchEntry`) is not tightened to
|
|
19
|
+
* match, on purpose. The session file carries no schema version, so a stricter
|
|
20
20
|
* validator would reject an older file mid-rebase, where the only remedies
|
|
21
21
|
* discard the operator's in-progress conflict resolution. Instead
|
|
22
22
|
* {@link normalizeEntry} drops payload that does not belong to the status on
|
|
@@ -52,14 +52,16 @@ export interface RebaseSession {
|
|
|
52
52
|
/** Index of the next patch to process (resume point). */
|
|
53
53
|
currentIndex: number;
|
|
54
54
|
}
|
|
55
|
+
/** Absolute path of the session file, for messages that must name it. */
|
|
56
|
+
export declare function getRebaseSessionPath(projectRoot: string): string;
|
|
55
57
|
/**
|
|
56
58
|
* Outcome of reading the session file, following the {@link LockOwner}
|
|
57
59
|
* discriminated-union form rather than collapsing three states into `null`.
|
|
58
60
|
*
|
|
59
61
|
* Distinguishing `present: false` from `present: true, valid: false` is
|
|
60
|
-
*
|
|
62
|
+
* important. Collapsing both to `null` while reporting liveness from
|
|
61
63
|
* `pathExists` alone wedges the operator in a closed cycle: `rebase` says
|
|
62
|
-
* "already in progress
|
|
64
|
+
* "already in progress, use --continue or --abort", and both of those say
|
|
63
65
|
* "no rebase session in progress", with no CLI path deleting the file and no
|
|
64
66
|
* message naming it.
|
|
65
67
|
*/
|
|
@@ -74,8 +76,6 @@ export type RebaseSessionRead = {
|
|
|
74
76
|
valid: false;
|
|
75
77
|
reason: string;
|
|
76
78
|
};
|
|
77
|
-
/** Absolute path of the session file, for messages that must name it. */
|
|
78
|
-
export declare function getRebaseSessionPath(projectRoot: string): string;
|
|
79
79
|
/**
|
|
80
80
|
* Reads the session file, reporting absent, valid, and corrupt as three
|
|
81
81
|
* distinct outcomes. Never throws for a malformed file: `readJson` calls
|
|
@@ -86,16 +86,10 @@ export declare function getRebaseSessionPath(projectRoot: string): string;
|
|
|
86
86
|
* that read mean `absent`. A pathExists pre-probe both races deletion (a
|
|
87
87
|
* file removed between probe and read misreports an absent session as
|
|
88
88
|
* corrupt) and swallows EACCES (an unreadable `.fireforge/` misreports a
|
|
89
|
-
* session as absent)
|
|
90
|
-
* markers.
|
|
89
|
+
* session as absent). It is the same failure `readTreeMarker` avoids for
|
|
90
|
+
* tree markers.
|
|
91
91
|
*/
|
|
92
92
|
export declare function readRebaseSession(projectRoot: string): Promise<RebaseSessionRead>;
|
|
93
|
-
/**
|
|
94
|
-
* Loads an existing rebase session, or returns `null` when none exists or the
|
|
95
|
-
* file on disk is unusable. Callers that must tell those two apart — every
|
|
96
|
-
* command that reports to an operator — should use {@link readRebaseSession}.
|
|
97
|
-
*/
|
|
98
|
-
export declare function tryReadRebaseSession(projectRoot: string): Promise<RebaseSession | null>;
|
|
99
93
|
/**
|
|
100
94
|
* Persists a rebase session atomically.
|
|
101
95
|
*/
|
|
@@ -13,7 +13,8 @@ import { getProjectPaths } from './config-paths.js';
|
|
|
13
13
|
import { createSiblingLockPath, withFileLock } from './file-lock.js';
|
|
14
14
|
// ── Helpers ──
|
|
15
15
|
const SESSION_FILENAME = 'rebase-session.json';
|
|
16
|
-
|
|
16
|
+
/** Absolute path of the session file, for messages that must name it. */
|
|
17
|
+
export function getRebaseSessionPath(projectRoot) {
|
|
17
18
|
return join(getProjectPaths(projectRoot).fireforgeDir, SESSION_FILENAME);
|
|
18
19
|
}
|
|
19
20
|
const REBASE_PATCH_STATUSES = [
|
|
@@ -28,9 +29,9 @@ const REBASE_PATCH_STATUSES = [
|
|
|
28
29
|
/**
|
|
29
30
|
* Drops payload that does not belong to an entry's status.
|
|
30
31
|
*
|
|
31
|
-
* Applied on read so a session written by an older FireForge
|
|
32
|
+
* Applied on read so a session written by an older FireForge, where
|
|
32
33
|
* `rebase --continue` left `error`/`conflictingFiles` on a now-`resolved`
|
|
33
|
-
* entry
|
|
34
|
+
* entry, loads cleanly and is corrected, instead of being refused by a
|
|
34
35
|
* stricter validator mid-rebase.
|
|
35
36
|
*
|
|
36
37
|
* @param entry - A structurally valid entry, possibly carrying stale payload
|
|
@@ -73,28 +74,28 @@ function isValidOptionalProduct(value) {
|
|
|
73
74
|
}
|
|
74
75
|
/**
|
|
75
76
|
* Validates a session file against the shape the rebase commands actually
|
|
76
|
-
* consume
|
|
77
|
+
* consume, not merely against broad field types.
|
|
77
78
|
*
|
|
78
79
|
* A looser predicate that checks six `typeof`s and nothing else admits
|
|
79
80
|
* sessions the resume path then acts on. `patches: [null]` reaches
|
|
80
81
|
* `patch-loop.ts`, which reads `.filename` off each entry and hands it to
|
|
81
82
|
* `stampPatchVersions`. A `currentIndex` of `NaN` (legal for
|
|
82
83
|
* `typeof === 'number'`) makes the resume loop run zero iterations and
|
|
83
|
-
* report success
|
|
84
|
+
* report success. A negative one indexes out of range in `continue.ts`.
|
|
84
85
|
* `toVersion: ""` passes `isString` and is stamped verbatim onto every
|
|
85
86
|
* Furnace override's `baseVersion`. `fromProduct`/`toProduct` go unchecked
|
|
86
87
|
* despite being typed `FirefoxProduct`.
|
|
87
88
|
*
|
|
88
89
|
* The session file is written only by `rebase/index.ts` from validated CLI
|
|
89
90
|
* and config values, so every one of these is a corrupt-file or hand-edit
|
|
90
|
-
* case
|
|
91
|
+
* case, which is exactly what this predicate exists to catch.
|
|
91
92
|
*/
|
|
92
93
|
function isValidSession(data) {
|
|
93
94
|
if (!isObject(data))
|
|
94
95
|
return false;
|
|
95
96
|
if (!isString(data['startedAt']) || Number.isNaN(Date.parse(data['startedAt'])))
|
|
96
97
|
return false;
|
|
97
|
-
// 4 is git's own minimum abbreviation length
|
|
98
|
+
// 4 is git's own minimum abbreviation length. 40/64 are full SHA-1/SHA-256.
|
|
98
99
|
if (!isString(data['preRebaseCommit']) || !/^[0-9a-f]{4,64}$/i.test(data['preRebaseCommit'])) {
|
|
99
100
|
return false;
|
|
100
101
|
}
|
|
@@ -116,10 +117,6 @@ function isValidSession(data) {
|
|
|
116
117
|
return false;
|
|
117
118
|
return currentIndex >= 0 && currentIndex <= patches.length;
|
|
118
119
|
}
|
|
119
|
-
/** Absolute path of the session file, for messages that must name it. */
|
|
120
|
-
export function getRebaseSessionPath(projectRoot) {
|
|
121
|
-
return sessionPath(projectRoot);
|
|
122
|
-
}
|
|
123
120
|
/**
|
|
124
121
|
* Reads the session file, reporting absent, valid, and corrupt as three
|
|
125
122
|
* distinct outcomes. Never throws for a malformed file: `readJson` calls
|
|
@@ -130,11 +127,11 @@ export function getRebaseSessionPath(projectRoot) {
|
|
|
130
127
|
* that read mean `absent`. A pathExists pre-probe both races deletion (a
|
|
131
128
|
* file removed between probe and read misreports an absent session as
|
|
132
129
|
* corrupt) and swallows EACCES (an unreadable `.fireforge/` misreports a
|
|
133
|
-
* session as absent)
|
|
134
|
-
* markers.
|
|
130
|
+
* session as absent). It is the same failure `readTreeMarker` avoids for
|
|
131
|
+
* tree markers.
|
|
135
132
|
*/
|
|
136
133
|
export async function readRebaseSession(projectRoot) {
|
|
137
|
-
const path =
|
|
134
|
+
const path = getRebaseSessionPath(projectRoot);
|
|
138
135
|
let data;
|
|
139
136
|
try {
|
|
140
137
|
data = await readJson(path);
|
|
@@ -159,20 +156,11 @@ export async function readRebaseSession(projectRoot) {
|
|
|
159
156
|
session: { ...data, patches: data.patches.map(normalizeEntry) },
|
|
160
157
|
};
|
|
161
158
|
}
|
|
162
|
-
/**
|
|
163
|
-
* Loads an existing rebase session, or returns `null` when none exists or the
|
|
164
|
-
* file on disk is unusable. Callers that must tell those two apart — every
|
|
165
|
-
* command that reports to an operator — should use {@link readRebaseSession}.
|
|
166
|
-
*/
|
|
167
|
-
export async function tryReadRebaseSession(projectRoot) {
|
|
168
|
-
const result = await readRebaseSession(projectRoot);
|
|
169
|
-
return result.present && result.valid ? result.session : null;
|
|
170
|
-
}
|
|
171
159
|
/**
|
|
172
160
|
* Persists a rebase session atomically.
|
|
173
161
|
*/
|
|
174
162
|
export async function saveRebaseSession(projectRoot, session) {
|
|
175
|
-
const path =
|
|
163
|
+
const path = getRebaseSessionPath(projectRoot);
|
|
176
164
|
await withFileLock(createSiblingLockPath(path, '.rebase-session.lock'), async () => {
|
|
177
165
|
await writeJson(path, session);
|
|
178
166
|
});
|
|
@@ -181,7 +169,7 @@ export async function saveRebaseSession(projectRoot, session) {
|
|
|
181
169
|
* Removes the rebase session file.
|
|
182
170
|
*/
|
|
183
171
|
export async function clearRebaseSession(projectRoot) {
|
|
184
|
-
const path =
|
|
172
|
+
const path = getRebaseSessionPath(projectRoot);
|
|
185
173
|
if (await pathExists(path)) {
|
|
186
174
|
await removeFile(path);
|
|
187
175
|
}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import { join } from 'node:path';
|
|
6
6
|
import { GeneralError } from '../errors/base.js';
|
|
7
7
|
import { pathExists, readText, writeText } from '../utils/fs.js';
|
|
8
|
+
import { normalizePathSlashes } from '../utils/paths.js';
|
|
8
9
|
import { insertJarMnEntry } from './moz-manifest-helpers.js';
|
|
9
10
|
/**
|
|
10
11
|
* Tokenizer-based implementation for browser content registration.
|
|
@@ -30,8 +31,8 @@ export async function registerBrowserContent(engineDir, fileName, after, sourceP
|
|
|
30
31
|
if (!(await pathExists(manifestPath))) {
|
|
31
32
|
throw new GeneralError(`Manifest not found: ${manifest}`);
|
|
32
33
|
}
|
|
33
|
-
const source = (sourcePath ?? `content/${fileName}`)
|
|
34
|
-
const entry = ` content/browser/${fileName} (${source})
|
|
34
|
+
const source = normalizePathSlashes(sourcePath ?? `content/${fileName}`);
|
|
35
|
+
const entry = normalizePathSlashes(` content/browser/${fileName} (${source})`);
|
|
35
36
|
const content = await readText(manifestPath);
|
|
36
37
|
// Idempotency check
|
|
37
38
|
if (content.includes(`content/browser/${fileName}`)) {
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import { join } from 'node:path';
|
|
6
6
|
import { GeneralError } from '../errors/base.js';
|
|
7
7
|
import { pathExists, readText, writeText } from '../utils/fs.js';
|
|
8
|
+
import { normalizePathSlashes } from '../utils/paths.js';
|
|
8
9
|
import { insertMozBuildListEntry } from './moz-manifest-helpers.js';
|
|
9
10
|
/**
|
|
10
11
|
* Tokenizer-based implementation for test manifest registration.
|
|
@@ -28,7 +29,7 @@ export async function registerTestManifest(engineDir, testDir, dryRun = false) {
|
|
|
28
29
|
if (!(await pathExists(manifestPath))) {
|
|
29
30
|
throw new GeneralError(`Manifest not found: ${manifest}`);
|
|
30
31
|
}
|
|
31
|
-
const entry = ` "content/test/${testDir}/browser.toml"
|
|
32
|
+
const entry = normalizePathSlashes(` "content/test/${testDir}/browser.toml",`);
|
|
32
33
|
const content = await readText(manifestPath);
|
|
33
34
|
// Idempotency check
|
|
34
35
|
if (content.includes(`content/test/${testDir}/browser.toml`)) {
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import { join } from 'node:path';
|
|
6
6
|
import { GeneralError } from '../errors/base.js';
|
|
7
7
|
import { pathExists, readText, writeText } from '../utils/fs.js';
|
|
8
|
+
import { normalizePathSlashes } from '../utils/paths.js';
|
|
8
9
|
import { insertMozBuildListEntry } from './moz-manifest-helpers.js';
|
|
9
10
|
import { scaffoldModuleMozBuild } from './register-scaffold.js';
|
|
10
11
|
/**
|
|
@@ -41,7 +42,7 @@ export async function registerFireForgeModule(engineDir, fileName, moduleDir, dr
|
|
|
41
42
|
}
|
|
42
43
|
throw new GeneralError(`Manifest not found: ${manifest}. Pass --create-manifest to scaffold it and wire the parent DIRS entry.`);
|
|
43
44
|
}
|
|
44
|
-
const entry = ` "${fileName}"
|
|
45
|
+
const entry = normalizePathSlashes(` "${fileName}",`);
|
|
45
46
|
const content = await readText(manifestPath);
|
|
46
47
|
// Idempotency check
|
|
47
48
|
if (content.includes(`"${fileName}"`)) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared result shape for manifest registration operations, split out of
|
|
3
3
|
* the `manifest-register.ts` barrel so the `register-*` leaf modules can
|
|
4
|
-
* import it without importing the barrel that re-exports them
|
|
4
|
+
* import it without importing the barrel that re-exports them. That
|
|
5
5
|
* type-only back-edge made the registration dependency graph cyclic.
|
|
6
6
|
*/
|
|
7
7
|
/**
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Shared result shape for manifest registration operations, split out of
|
|
4
4
|
* the `manifest-register.ts` barrel so the `register-*` leaf modules can
|
|
5
|
-
* import it without importing the barrel that re-exports them
|
|
5
|
+
* import it without importing the barrel that re-exports them. That
|
|
6
6
|
* type-only back-edge made the registration dependency graph cyclic.
|
|
7
7
|
*/
|
|
8
8
|
export {};
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* - creating a directory `moz.build` (license header + the requested list
|
|
9
9
|
* directive) and wiring the parent chain's `DIRS` entries up to the
|
|
10
|
-
* nearest existing moz.build
|
|
10
|
+
* nearest existing moz.build.
|
|
11
11
|
* - wiring an `XPCSHELL_TESTS_MANIFESTS` entry for a (possibly freshly
|
|
12
12
|
* created) `xpcshell.toml` into the nearest existing moz.build.
|
|
13
13
|
*
|
|
@@ -33,7 +33,7 @@ export declare function upsertMozBuildListEntry(content: string, directive: stri
|
|
|
33
33
|
* Ensures every parent directory between `childRelDir` and the nearest
|
|
34
34
|
* existing moz.build carries a `DIRS` entry pointing at the next segment
|
|
35
35
|
* down, creating intermediate moz.build files as needed. Walks upward
|
|
36
|
-
* from the child's parent
|
|
36
|
+
* from the child's parent. Throws when no moz.build exists anywhere up
|
|
37
37
|
* to the engine root (an engine checkout always has one at the root, so
|
|
38
38
|
* this indicates a bogus path).
|
|
39
39
|
*/
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*
|
|
9
9
|
* - creating a directory `moz.build` (license header + the requested list
|
|
10
10
|
* directive) and wiring the parent chain's `DIRS` entries up to the
|
|
11
|
-
* nearest existing moz.build
|
|
11
|
+
* nearest existing moz.build.
|
|
12
12
|
* - wiring an `XPCSHELL_TESTS_MANIFESTS` entry for a (possibly freshly
|
|
13
13
|
* created) `xpcshell.toml` into the nearest existing moz.build.
|
|
14
14
|
*
|
|
@@ -19,12 +19,13 @@
|
|
|
19
19
|
import { dirname, join } from 'node:path';
|
|
20
20
|
import { GeneralError } from '../errors/base.js';
|
|
21
21
|
import { pathExists, readText, writeText } from '../utils/fs.js';
|
|
22
|
+
import { normalizePathSlashes } from '../utils/paths.js';
|
|
22
23
|
import { getLicenseHeader } from './license-headers.js';
|
|
23
24
|
import { findAlphabeticalMozBuildPosition } from './moz-manifest-helpers.js';
|
|
24
25
|
import { tokenizeMozBuildList } from './moz-manifest-tokenizers.js';
|
|
25
26
|
/**
|
|
26
27
|
* moz.build files use Firefox's canonical MPL-2.0 hash-comment header
|
|
27
|
-
* regardless of the fork's own project license
|
|
28
|
+
* regardless of the fork's own project license. They live in the engine
|
|
28
29
|
* tree among upstream MPL files.
|
|
29
30
|
*/
|
|
30
31
|
function mozBuildHeader() {
|
|
@@ -57,14 +58,14 @@ export function upsertMozBuildListEntry(content, directive, value) {
|
|
|
57
58
|
* Ensures every parent directory between `childRelDir` and the nearest
|
|
58
59
|
* existing moz.build carries a `DIRS` entry pointing at the next segment
|
|
59
60
|
* down, creating intermediate moz.build files as needed. Walks upward
|
|
60
|
-
* from the child's parent
|
|
61
|
+
* from the child's parent. Throws when no moz.build exists anywhere up
|
|
61
62
|
* to the engine root (an engine checkout always has one at the root, so
|
|
62
63
|
* this indicates a bogus path).
|
|
63
64
|
*/
|
|
64
65
|
export async function ensureParentDirsWiring(engineDir, childRelDir, dryRun) {
|
|
65
66
|
const actions = [];
|
|
66
67
|
let childName = childRelDir.split('/').at(-1) ?? childRelDir;
|
|
67
|
-
let parentRel = dirname(childRelDir)
|
|
68
|
+
let parentRel = normalizePathSlashes(dirname(childRelDir));
|
|
68
69
|
for (;;) {
|
|
69
70
|
if (parentRel === '.' || parentRel === '' || parentRel === '/') {
|
|
70
71
|
throw new GeneralError(`No moz.build found in any parent of ${childRelDir} up to the engine root; ` +
|
|
@@ -90,7 +91,7 @@ export async function ensureParentDirsWiring(engineDir, childRelDir, dryRun) {
|
|
|
90
91
|
await writeText(parentManifestPath, scaffold);
|
|
91
92
|
actions.push({ manifest: parentManifestRel, change: `created with DIRS += ["${childName}"]` });
|
|
92
93
|
childName = parentRel.split('/').at(-1) ?? parentRel;
|
|
93
|
-
parentRel = dirname(parentRel)
|
|
94
|
+
parentRel = normalizePathSlashes(dirname(parentRel));
|
|
94
95
|
}
|
|
95
96
|
}
|
|
96
97
|
/**
|
|
@@ -122,7 +123,7 @@ export async function scaffoldModuleMozBuild(engineDir, moduleDir, fileName, dry
|
|
|
122
123
|
* entry already exists).
|
|
123
124
|
*/
|
|
124
125
|
export async function ensureXpcshellManifestWiring(engineDir, manifestRelPath, dryRun) {
|
|
125
|
-
let dirRel = dirname(manifestRelPath)
|
|
126
|
+
let dirRel = normalizePathSlashes(dirname(manifestRelPath));
|
|
126
127
|
for (;;) {
|
|
127
128
|
if (dirRel === '.' || dirRel === '' || dirRel === '/') {
|
|
128
129
|
throw new GeneralError(`No moz.build found in any parent of ${manifestRelPath} up to the engine root; ` +
|
|
@@ -140,6 +141,6 @@ export async function ensureXpcshellManifestWiring(engineDir, manifestRelPath, d
|
|
|
140
141
|
await writeText(mozBuildPath, updated);
|
|
141
142
|
return [{ manifest: mozBuildRel, change: `XPCSHELL_TESTS_MANIFESTS += ["${relEntry}"]` }];
|
|
142
143
|
}
|
|
143
|
-
dirRel = dirname(dirRel)
|
|
144
|
+
dirRel = normalizePathSlashes(dirname(dirRel));
|
|
144
145
|
}
|
|
145
146
|
}
|
|
@@ -12,7 +12,7 @@ import type { RegisterResult } from './register-result.js';
|
|
|
12
12
|
* freshly registered file at the wrong column and produces avoidable
|
|
13
13
|
* formatting churn, since adjacent Firefox entries are typically padded to a
|
|
14
14
|
* wider column. Returns `undefined` when no existing entries provide an
|
|
15
|
-
* alignment signal
|
|
15
|
+
* alignment signal. Callers fall back to the four-space default.
|
|
16
16
|
*/
|
|
17
17
|
export declare function measureSourceColumn(content: string): number | undefined;
|
|
18
18
|
/**
|
|
@@ -30,7 +30,7 @@ export declare function buildEntry(name: string, sourceColumn: number | undefine
|
|
|
30
30
|
* skin/classic/browser/{name}.css (../shared/{name}.css)
|
|
31
31
|
*
|
|
32
32
|
* The gap between target and source is sized to align with adjacent
|
|
33
|
-
* entries when the manifest already uses a wider column
|
|
34
|
-
* a four-space minimum otherwise.
|
|
33
|
+
* entries when the manifest already uses a wider column. It falls back
|
|
34
|
+
* to a four-space minimum otherwise.
|
|
35
35
|
*/
|
|
36
36
|
export declare function registerSharedCSS(engineDir: string, fileName: string, after?: string, dryRun?: boolean): Promise<RegisterResult>;
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import { basename, join } from 'node:path';
|
|
6
6
|
import { GeneralError } from '../errors/base.js';
|
|
7
7
|
import { pathExists, readText, writeText } from '../utils/fs.js';
|
|
8
|
+
import { normalizePathSlashes } from '../utils/paths.js';
|
|
8
9
|
import { insertJarMnEntry } from './moz-manifest-helpers.js';
|
|
9
10
|
/**
|
|
10
11
|
* Tokenizer-based implementation for shared CSS registration.
|
|
@@ -29,7 +30,7 @@ const MIN_SOURCE_GAP = 4;
|
|
|
29
30
|
* freshly registered file at the wrong column and produces avoidable
|
|
30
31
|
* formatting churn, since adjacent Firefox entries are typically padded to a
|
|
31
32
|
* wider column. Returns `undefined` when no existing entries provide an
|
|
32
|
-
* alignment signal
|
|
33
|
+
* alignment signal. Callers fall back to the four-space default.
|
|
33
34
|
*/
|
|
34
35
|
export function measureSourceColumn(content) {
|
|
35
36
|
const lines = content.split('\n');
|
|
@@ -65,7 +66,7 @@ export function buildEntry(name, sourceColumn) {
|
|
|
65
66
|
const minColumn = target.length + MIN_SOURCE_GAP;
|
|
66
67
|
const column = sourceColumn !== undefined && sourceColumn >= minColumn ? sourceColumn : minColumn;
|
|
67
68
|
const padding = ' '.repeat(column - target.length);
|
|
68
|
-
return `${target}${padding}(../shared/${name}.css)
|
|
69
|
+
return normalizePathSlashes(`${target}${padding}(../shared/${name}.css)`);
|
|
69
70
|
}
|
|
70
71
|
/**
|
|
71
72
|
* Registers a CSS file in browser/themes/shared/jar.inc.mn.
|
|
@@ -74,8 +75,8 @@ export function buildEntry(name, sourceColumn) {
|
|
|
74
75
|
* skin/classic/browser/{name}.css (../shared/{name}.css)
|
|
75
76
|
*
|
|
76
77
|
* The gap between target and source is sized to align with adjacent
|
|
77
|
-
* entries when the manifest already uses a wider column
|
|
78
|
-
* a four-space minimum otherwise.
|
|
78
|
+
* entries when the manifest already uses a wider column. It falls back
|
|
79
|
+
* to a four-space minimum otherwise.
|
|
79
80
|
*/
|
|
80
81
|
export async function registerSharedCSS(engineDir, fileName, after, dryRun = false) {
|
|
81
82
|
const manifest = 'browser/themes/shared/jar.inc.mn';
|
|
@@ -89,7 +90,7 @@ export async function registerSharedCSS(engineDir, fileName, after, dryRun = fal
|
|
|
89
90
|
const entry = buildEntry(name, sourceColumn);
|
|
90
91
|
// Idempotency check. `furnace chrome-doc create` writes its CSS as a
|
|
91
92
|
// `content/browser/<name>.css` entry rather than the canonical
|
|
92
|
-
// `skin/classic/browser/<name>.css` form `register` produces
|
|
93
|
+
// `skin/classic/browser/<name>.css` form `register` produces. Recognise
|
|
93
94
|
// both shapes so a follow-up `register` invocation against an
|
|
94
95
|
// already-chrome-doc-registered file reports `skipped` instead of
|
|
95
96
|
// appending a duplicate `skin/classic/browser/...` row.
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* xpcshell test-file registration. Without it, xpcshell test files (e.g.
|
|
3
3
|
* `<module-dir>/test/unit/test_*.js`) are rejected by `fireforge register`
|
|
4
4
|
* as "Unknown file pattern". This writer inserts the `["test_*.js"]` section
|
|
5
|
-
* into the directory's `xpcshell.toml` (alphabetically, idempotently)
|
|
6
|
-
*
|
|
5
|
+
* into the directory's `xpcshell.toml` (alphabetically, idempotently). With
|
|
6
|
+
* `--create-manifest` it also creates the manifest and wires
|
|
7
7
|
* `XPCSHELL_TESTS_MANIFESTS` into the nearest moz.build.
|
|
8
8
|
*/
|
|
9
9
|
import type { RegisterResult } from './register-result.js';
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* xpcshell test-file registration. Without it, xpcshell test files (e.g.
|
|
4
4
|
* `<module-dir>/test/unit/test_*.js`) are rejected by `fireforge register`
|
|
5
5
|
* as "Unknown file pattern". This writer inserts the `["test_*.js"]` section
|
|
6
|
-
* into the directory's `xpcshell.toml` (alphabetically, idempotently)
|
|
7
|
-
*
|
|
6
|
+
* into the directory's `xpcshell.toml` (alphabetically, idempotently). With
|
|
7
|
+
* `--create-manifest` it also creates the manifest and wires
|
|
8
8
|
* `XPCSHELL_TESTS_MANIFESTS` into the nearest moz.build.
|
|
9
9
|
*/
|
|
10
10
|
import { join } from 'node:path';
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conservative secret redaction for the run-log FILE tee.
|
|
3
|
+
*
|
|
4
|
+
* A run log is a complete copy of mach's output, and mach echoes its
|
|
5
|
+
* environment in places (configure summaries, `mach env`, harness
|
|
6
|
+
* diagnostics that print the command line). The terminal already showed
|
|
7
|
+
* every byte to the operator who ran it. The file, by contrast, is retained
|
|
8
|
+
* twenty deep and gets attached to bug reports. So the file gets a narrow
|
|
9
|
+
* masking pass and the terminal does not.
|
|
10
|
+
*
|
|
11
|
+
* Minimal and pattern-based. See {@link redactRunLogText} for the exact
|
|
12
|
+
* contract. It is a seatbelt against the common accidental leak, not a
|
|
13
|
+
* guarantee that a log is free of secrets.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Masks the obvious secret shapes in run-log text, line by line.
|
|
17
|
+
*
|
|
18
|
+
* Redacted:
|
|
19
|
+
* - the value of an env-style assignment `KEY=value` whose KEY matches
|
|
20
|
+
* `/(TOKEN|SECRET|PASSWORD|PASSWD|API_KEY|AUTH)/i`. The value up to the
|
|
21
|
+
* next whitespace, or a whole quoted string, becomes `KEY=<redacted>`.
|
|
22
|
+
* The `--flag=value` and `-DNAME=value` spellings of the same shape are
|
|
23
|
+
* covered (`--password=x` → `--password=<redacted>`).
|
|
24
|
+
* - the credential of an `Authorization:` header (`Bearer`, `Basic` and
|
|
25
|
+
* `Token` schemes keep the scheme word, and anything else masks the
|
|
26
|
+
* whole value).
|
|
27
|
+
*
|
|
28
|
+
* Not redacted: secrets that appear without one of those key names or
|
|
29
|
+
* headers (a bare token in a URL query string, a space-separated
|
|
30
|
+
* `--password foo` CLI argument, JSON `"token": "..."` fields, cookies).
|
|
31
|
+
* Line structure and every other byte pass through unchanged. `\n`, `\r\n`
|
|
32
|
+
* and lone `\r` all delimit lines, so carriage-return-repainted progress
|
|
33
|
+
* output is masked per repaint.
|
|
34
|
+
*
|
|
35
|
+
* @param text - One or more complete lines
|
|
36
|
+
* @returns The same text with masked values
|
|
37
|
+
*/
|
|
38
|
+
export declare function redactRunLogText(text: string): string;
|