@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
|
@@ -2,29 +2,43 @@ import type { PatchesManifest, PatchLintIssue } from '../types/commands/index.js
|
|
|
2
2
|
import type { ExportOptions, PatchCategory } from '../types/commands/index.js';
|
|
3
3
|
import type { FireForgeConfig } from '../types/config.js';
|
|
4
4
|
import type { SpinnerHandle } from '../utils/logger.js';
|
|
5
|
+
export interface RunPatchLintOptions {
|
|
6
|
+
/** Engine root directory. */
|
|
7
|
+
engineDir: string;
|
|
8
|
+
/** Files touched by the patch. */
|
|
9
|
+
filesAffected: string[];
|
|
10
|
+
/** Raw unified diff string. */
|
|
11
|
+
diffContent: string;
|
|
12
|
+
/** Project configuration. */
|
|
13
|
+
config: FireForgeConfig;
|
|
14
|
+
/** If true, downgrade errors to warnings. */
|
|
15
|
+
skipLint?: boolean | undefined;
|
|
16
|
+
/** Optional cross-patch context for ownership resolution. */
|
|
17
|
+
patchQueueCtx?: import('../core/patch-lint-cross.js').PatchQueueContext | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Optional per-patch set of `check` IDs to suppress (threaded from
|
|
20
|
+
* `PatchMetadata.lintIgnore`). Surgical alternative to `--skip-lint` when
|
|
21
|
+
* exactly one advisory rule does not apply to a specific patch, e.g.
|
|
22
|
+
* `large-patch-lines` on a cohesive branding bundle that genuinely cannot
|
|
23
|
+
* be split.
|
|
24
|
+
*/
|
|
25
|
+
ignoreChecks?: ReadonlySet<string> | undefined;
|
|
26
|
+
/**
|
|
27
|
+
* Optional explicit tier override (threaded from `PatchMetadata.tier`).
|
|
28
|
+
* Forces the branding-tier thresholds when set, independent of the
|
|
29
|
+
* auto-detect allowlist. When the branding tier is applied, a single
|
|
30
|
+
* `info()` line surfaces the choice so the tier decision is visible rather
|
|
31
|
+
* than silent.
|
|
32
|
+
*/
|
|
33
|
+
patchTier?: 'branding' | undefined;
|
|
34
|
+
}
|
|
5
35
|
/**
|
|
6
36
|
* Runs the full patch lint pipeline and reports results. Warnings are always
|
|
7
37
|
* displayed. Errors block the export unless skipLint is true.
|
|
8
38
|
*
|
|
9
|
-
* @param
|
|
10
|
-
* @param filesAffected - Files touched by the patch
|
|
11
|
-
* @param diffContent - Raw unified diff string
|
|
12
|
-
* @param config - Project configuration
|
|
13
|
-
* @param skipLint - If true, downgrade errors to warnings
|
|
14
|
-
* @param patchQueueCtx - Optional cross-patch context for ownership
|
|
15
|
-
* resolution
|
|
16
|
-
* @param ignoreChecks - Optional per-patch set of `check` IDs to suppress
|
|
17
|
-
* (threaded from `PatchMetadata.lintIgnore`). Surgical alternative to
|
|
18
|
-
* `--skip-lint` when exactly one advisory rule does not apply to a
|
|
19
|
-
* specific patch — e.g. `large-patch-lines` on a cohesive branding bundle
|
|
20
|
-
* that genuinely cannot be split.
|
|
21
|
-
* @param patchTier - Optional explicit tier override (threaded from
|
|
22
|
-
* `PatchMetadata.tier`). Forces the branding-tier thresholds when set,
|
|
23
|
-
* independent of the auto-detect allowlist. When the branding tier is
|
|
24
|
-
* applied, a single `info()` line surfaces the choice so the tier decision
|
|
25
|
-
* is visible rather than silent.
|
|
39
|
+
* @param options - See {@link RunPatchLintOptions}
|
|
26
40
|
*/
|
|
27
|
-
export declare function runPatchLint(
|
|
41
|
+
export declare function runPatchLint(options: RunPatchLintOptions): Promise<void>;
|
|
28
42
|
/**
|
|
29
43
|
* Prints a patch-lint issue list with `runPatchLint`'s exact severity
|
|
30
44
|
* buckets and skip-lint semantics, throwing on errors unless `skipLint`.
|
|
@@ -32,17 +46,22 @@ export declare function runPatchLint(engineDir: string, filesAffected: string[],
|
|
|
32
46
|
* stored issues through the identical reporter without re-linting.
|
|
33
47
|
*/
|
|
34
48
|
export declare function reportPatchLintOutcome(issues: PatchLintIssue[], skipLint?: boolean): void;
|
|
49
|
+
/** Patch identity resolved for an export, from flags or interactive prompts. */
|
|
50
|
+
export interface ExportPatchMetadata {
|
|
51
|
+
/** Normalized patch name (without order prefix or extension). */
|
|
52
|
+
patchName: string;
|
|
53
|
+
/** Category the patch is filed under. */
|
|
54
|
+
selectedCategory: PatchCategory;
|
|
55
|
+
/** Human-readable patch description. */
|
|
56
|
+
description: string;
|
|
57
|
+
}
|
|
35
58
|
/**
|
|
36
59
|
* Resolves patch metadata interactively or from flags, with shared validation.
|
|
37
60
|
* @param options - Export command options
|
|
38
61
|
* @param isInteractive - Whether interactive prompts are allowed
|
|
39
62
|
* @param commandName - Command name for error/help text
|
|
40
63
|
*/
|
|
41
|
-
export declare function promptExportPatchMetadata(options: ExportOptions, isInteractive: boolean, commandName: 'export' | 'export-all', config?: FireForgeConfig): Promise<
|
|
42
|
-
patchName: string;
|
|
43
|
-
selectedCategory: PatchCategory;
|
|
44
|
-
description: string;
|
|
45
|
-
} | null>;
|
|
64
|
+
export declare function promptExportPatchMetadata(options: ExportOptions, isInteractive: boolean, commandName: 'export' | 'export-all', config?: FireForgeConfig): Promise<ExportPatchMetadata | null>;
|
|
46
65
|
/**
|
|
47
66
|
* Confirms whether an export may supersede existing patches.
|
|
48
67
|
* @param patchesDir - Patches directory
|
|
@@ -56,14 +75,14 @@ export declare function confirmSupersedePatches(patchesDir: string, filesAffecte
|
|
|
56
75
|
* Detects new files missing license headers and offers to add them.
|
|
57
76
|
*
|
|
58
77
|
* In interactive mode the user is prompted before any files are modified. In
|
|
59
|
-
* non-interactive mode the function is a no-op
|
|
78
|
+
* non-interactive mode the function is a no-op. The existing lint error
|
|
60
79
|
* blocks the export instead.
|
|
61
80
|
*
|
|
62
81
|
* @param engineDir - Absolute path to engine directory
|
|
63
82
|
* @param diffContent - Current unified diff
|
|
64
83
|
* @param config - Project configuration
|
|
65
84
|
* @param isInteractive - Whether interactive prompts are available
|
|
66
|
-
* @param dryRun - When true, only
|
|
85
|
+
* @param dryRun - When true, only report missing headers, never prompt or
|
|
67
86
|
* write. Dry-run must stay read-only: without this flag an interactive
|
|
68
87
|
* `export --dry-run` prompts (default Yes), writes license headers into
|
|
69
88
|
* engine/ files, and then closes with "no changes made".
|
|
@@ -77,23 +96,23 @@ export declare function autoFixLicenseHeaders(engineDir: string, diffContent: st
|
|
|
77
96
|
*
|
|
78
97
|
* Returns an empty map when no overlap exists. Used by the overlap gate in
|
|
79
98
|
* `export` and `export-all` to refuse a default-mode export that would
|
|
80
|
-
* silently create cross-patch ownership conflicts
|
|
99
|
+
* silently create cross-patch ownership conflicts, the same class of
|
|
81
100
|
* conflict `verify` immediately fails with.
|
|
82
101
|
*/
|
|
83
102
|
export declare function findPartialOwnershipOverlap(manifest: PatchesManifest, filesAffected: string[], excludeFilenames: ReadonlySet<string>): Map<string, string[]>;
|
|
84
103
|
/**
|
|
85
104
|
* Gate that refuses the default export path when the new patch would
|
|
86
105
|
* silently claim files already tracked by other non-superseded patches.
|
|
87
|
-
* `findAllPatchesForFiles` catches the full-coverage supersede case
|
|
88
|
-
* fills the gap for
|
|
106
|
+
* `findAllPatchesForFiles` catches the full-coverage supersede case. This
|
|
107
|
+
* fills the gap for partial overlap: two patches both claiming e.g.
|
|
89
108
|
* `browser/themes/shared/jar.inc.mn` after a second export with `--before`.
|
|
90
109
|
*
|
|
91
110
|
* Proceeds silently when there is no overlap, or when the caller passed
|
|
92
111
|
* `--allow-overlap`. In interactive mode the caller is prompted to
|
|
93
112
|
* acknowledge the overlap (the proper fix path is `re-export --files` to
|
|
94
113
|
* repartition ownership, so the prompt surfaces that pointer). In
|
|
95
|
-
* non-interactive mode it throws
|
|
96
|
-
* fall out of sync with verify.
|
|
114
|
+
* non-interactive mode it throws, since failing fast beats letting the
|
|
115
|
+
* queue fall out of sync with verify.
|
|
97
116
|
*/
|
|
98
117
|
export declare function guardOwnershipOverlap(args: {
|
|
99
118
|
patchesDir: string;
|
|
@@ -108,7 +127,7 @@ export declare function guardOwnershipOverlap(args: {
|
|
|
108
127
|
* order: the supersede confirmation, then the cross-patch ownership overlap
|
|
109
128
|
* guard. The overlap guard receives the filenames of the patches the export
|
|
110
129
|
* would fully supersede so it does not flag a file claimed by a patch that
|
|
111
|
-
* is about to be removed. Catching only
|
|
130
|
+
* is about to be removed. Catching only full-coverage supersedes leaves a
|
|
112
131
|
* second export targeting a shared file creating a queue where two patches
|
|
113
132
|
* both claim it and `verify` fails immediately.
|
|
114
133
|
*
|
|
@@ -119,7 +138,7 @@ export declare function guardOwnershipOverlap(args: {
|
|
|
119
138
|
* @param args.allowOverlap - The command's `--allow-overlap` flag
|
|
120
139
|
* @param args.isInteractive - Whether prompting the operator is possible
|
|
121
140
|
* @param args.s - Active spinner, stopped before any prompt
|
|
122
|
-
* @returns `true` when both gates passed
|
|
141
|
+
* @returns `true` when both gates passed, `false` when the operator declined
|
|
123
142
|
* (the caller returns without committing)
|
|
124
143
|
*/
|
|
125
144
|
export declare function runSupersedeAndOverlapGates(args: {
|
|
@@ -15,27 +15,12 @@ import { describePatchNameProblem, normalizePatchDisplayName, PATCH_CATEGORIES,
|
|
|
15
15
|
* Runs the full patch lint pipeline and reports results. Warnings are always
|
|
16
16
|
* displayed. Errors block the export unless skipLint is true.
|
|
17
17
|
*
|
|
18
|
-
* @param
|
|
19
|
-
* @param filesAffected - Files touched by the patch
|
|
20
|
-
* @param diffContent - Raw unified diff string
|
|
21
|
-
* @param config - Project configuration
|
|
22
|
-
* @param skipLint - If true, downgrade errors to warnings
|
|
23
|
-
* @param patchQueueCtx - Optional cross-patch context for ownership
|
|
24
|
-
* resolution
|
|
25
|
-
* @param ignoreChecks - Optional per-patch set of `check` IDs to suppress
|
|
26
|
-
* (threaded from `PatchMetadata.lintIgnore`). Surgical alternative to
|
|
27
|
-
* `--skip-lint` when exactly one advisory rule does not apply to a
|
|
28
|
-
* specific patch — e.g. `large-patch-lines` on a cohesive branding bundle
|
|
29
|
-
* that genuinely cannot be split.
|
|
30
|
-
* @param patchTier - Optional explicit tier override (threaded from
|
|
31
|
-
* `PatchMetadata.tier`). Forces the branding-tier thresholds when set,
|
|
32
|
-
* independent of the auto-detect allowlist. When the branding tier is
|
|
33
|
-
* applied, a single `info()` line surfaces the choice so the tier decision
|
|
34
|
-
* is visible rather than silent.
|
|
18
|
+
* @param options - See {@link RunPatchLintOptions}
|
|
35
19
|
*/
|
|
36
|
-
export async function runPatchLint(
|
|
20
|
+
export async function runPatchLint(options) {
|
|
21
|
+
const { engineDir, filesAffected, diffContent, config, skipLint, patchQueueCtx, ignoreChecks, patchTier, } = options;
|
|
37
22
|
// Compute the tier decision independently of the lint pipeline so it can
|
|
38
|
-
// be surfaced even when the rule body emitted no issues
|
|
23
|
+
// be surfaced even when the rule body emitted no issues. A branding patch
|
|
39
24
|
// under the soft threshold still benefits from operators knowing which
|
|
40
25
|
// tier governed the run. The same helper is reused inside `lintPatchSize`,
|
|
41
26
|
// so the surfaced tier and the tier that actually drove the thresholds
|
|
@@ -115,8 +100,8 @@ export function reportPatchLintOutcome(issues, skipLint) {
|
|
|
115
100
|
*/
|
|
116
101
|
export async function promptExportPatchMetadata(options, isInteractive, commandName, config) {
|
|
117
102
|
const categories = config !== undefined ? getPatchPolicyCategories(config) : [...PATCH_CATEGORIES];
|
|
118
|
-
// A filename-shaped `--name foo.patch` must not die on the dot rule
|
|
119
|
-
// strip the extension before validation
|
|
103
|
+
// A filename-shaped `--name foo.patch` must not die on the dot rule, so
|
|
104
|
+
// strip the extension before validation and the one-step flow works for
|
|
120
105
|
// both name shapes.
|
|
121
106
|
let patchName = options.name?.trim().replace(/\.patch$/i, '');
|
|
122
107
|
if (patchName) {
|
|
@@ -173,7 +158,7 @@ export async function promptExportPatchMetadata(options, isInteractive, commandN
|
|
|
173
158
|
description = descResult;
|
|
174
159
|
}
|
|
175
160
|
}
|
|
176
|
-
// The filename slug pipeline strips redundant category prefixes
|
|
161
|
+
// The filename slug pipeline strips redundant category prefixes. The
|
|
177
162
|
// manifest display name must agree, or every `export --name ui-foo`
|
|
178
163
|
// needs a follow-up `patch rename` to satisfy bare-slug naming policy.
|
|
179
164
|
const normalized = normalizePatchDisplayName(patchName, category);
|
|
@@ -223,14 +208,14 @@ export async function confirmSupersedePatches(patchesDir, filesAffected, superse
|
|
|
223
208
|
* Detects new files missing license headers and offers to add them.
|
|
224
209
|
*
|
|
225
210
|
* In interactive mode the user is prompted before any files are modified. In
|
|
226
|
-
* non-interactive mode the function is a no-op
|
|
211
|
+
* non-interactive mode the function is a no-op. The existing lint error
|
|
227
212
|
* blocks the export instead.
|
|
228
213
|
*
|
|
229
214
|
* @param engineDir - Absolute path to engine directory
|
|
230
215
|
* @param diffContent - Current unified diff
|
|
231
216
|
* @param config - Project configuration
|
|
232
217
|
* @param isInteractive - Whether interactive prompts are available
|
|
233
|
-
* @param dryRun - When true, only
|
|
218
|
+
* @param dryRun - When true, only report missing headers, never prompt or
|
|
234
219
|
* write. Dry-run must stay read-only: without this flag an interactive
|
|
235
220
|
* `export --dry-run` prompts (default Yes), writes license headers into
|
|
236
221
|
* engine/ files, and then closes with "no changes made".
|
|
@@ -308,7 +293,7 @@ export async function autoFixLicenseHeaders(engineDir, diffContent, config, isIn
|
|
|
308
293
|
*
|
|
309
294
|
* Returns an empty map when no overlap exists. Used by the overlap gate in
|
|
310
295
|
* `export` and `export-all` to refuse a default-mode export that would
|
|
311
|
-
* silently create cross-patch ownership conflicts
|
|
296
|
+
* silently create cross-patch ownership conflicts, the same class of
|
|
312
297
|
* conflict `verify` immediately fails with.
|
|
313
298
|
*/
|
|
314
299
|
export function findPartialOwnershipOverlap(manifest, filesAffected, excludeFilenames) {
|
|
@@ -330,16 +315,16 @@ export function findPartialOwnershipOverlap(manifest, filesAffected, excludeFile
|
|
|
330
315
|
/**
|
|
331
316
|
* Gate that refuses the default export path when the new patch would
|
|
332
317
|
* silently claim files already tracked by other non-superseded patches.
|
|
333
|
-
* `findAllPatchesForFiles` catches the full-coverage supersede case
|
|
334
|
-
* fills the gap for
|
|
318
|
+
* `findAllPatchesForFiles` catches the full-coverage supersede case. This
|
|
319
|
+
* fills the gap for partial overlap: two patches both claiming e.g.
|
|
335
320
|
* `browser/themes/shared/jar.inc.mn` after a second export with `--before`.
|
|
336
321
|
*
|
|
337
322
|
* Proceeds silently when there is no overlap, or when the caller passed
|
|
338
323
|
* `--allow-overlap`. In interactive mode the caller is prompted to
|
|
339
324
|
* acknowledge the overlap (the proper fix path is `re-export --files` to
|
|
340
325
|
* repartition ownership, so the prompt surfaces that pointer). In
|
|
341
|
-
* non-interactive mode it throws
|
|
342
|
-
* fall out of sync with verify.
|
|
326
|
+
* non-interactive mode it throws, since failing fast beats letting the
|
|
327
|
+
* queue fall out of sync with verify.
|
|
343
328
|
*/
|
|
344
329
|
export async function guardOwnershipOverlap(args) {
|
|
345
330
|
const { patchesDir, filesAffected, supersedingFilenames, allowOverlap, isInteractive, s } = args;
|
|
@@ -353,7 +338,7 @@ export async function guardOwnershipOverlap(args) {
|
|
|
353
338
|
return true;
|
|
354
339
|
s.stop();
|
|
355
340
|
const entries = [...overlap.entries()].sort(([a], [b]) => a.localeCompare(b));
|
|
356
|
-
warn(`This export would create cross-patch ownership overlap on ${
|
|
341
|
+
warn(`This export would create cross-patch ownership overlap on ${entries.length} file${entries.length === 1 ? '' : 's'}:`);
|
|
357
342
|
for (const [file, owners] of entries) {
|
|
358
343
|
warn(` - ${file} already claimed by: ${owners.join(', ')}`);
|
|
359
344
|
}
|
|
@@ -379,7 +364,7 @@ export async function guardOwnershipOverlap(args) {
|
|
|
379
364
|
* order: the supersede confirmation, then the cross-patch ownership overlap
|
|
380
365
|
* guard. The overlap guard receives the filenames of the patches the export
|
|
381
366
|
* would fully supersede so it does not flag a file claimed by a patch that
|
|
382
|
-
* is about to be removed. Catching only
|
|
367
|
+
* is about to be removed. Catching only full-coverage supersedes leaves a
|
|
383
368
|
* second export targeting a shared file creating a queue where two patches
|
|
384
369
|
* both claim it and `verify` fails immediately.
|
|
385
370
|
*
|
|
@@ -390,7 +375,7 @@ export async function guardOwnershipOverlap(args) {
|
|
|
390
375
|
* @param args.allowOverlap - The command's `--allow-overlap` flag
|
|
391
376
|
* @param args.isInteractive - Whether prompting the operator is possible
|
|
392
377
|
* @param args.s - Active spinner, stopped before any prompt
|
|
393
|
-
* @returns `true` when both gates passed
|
|
378
|
+
* @returns `true` when both gates passed, `false` when the operator declined
|
|
394
379
|
* (the caller returns without committing)
|
|
395
380
|
*/
|
|
396
381
|
export async function runSupersedeAndOverlapGates(args) {
|
|
@@ -88,11 +88,11 @@ async function collectExportFiles(paths, files) {
|
|
|
88
88
|
return { files: [...collectedFiles].sort(), fromDirectory };
|
|
89
89
|
}
|
|
90
90
|
/**
|
|
91
|
-
* Auto-excludes directory-derived files already owned by
|
|
91
|
+
* Auto-excludes directory-derived files already owned by other patches.
|
|
92
92
|
*
|
|
93
93
|
* A directory export otherwise plans files owned by earlier patches into the
|
|
94
94
|
* new patch, and the duplicate-new-file-creation refusal surfaces only at
|
|
95
|
-
* placement lint, suggesting `--force-unsafe
|
|
95
|
+
* placement lint, suggesting `--force-unsafe`, the wrong tool for "leave
|
|
96
96
|
* that file with its owner". Explicitly named files are never excluded (the
|
|
97
97
|
* overlap gates still confront the operator with those). Prints one notice
|
|
98
98
|
* per exclusion.
|
|
@@ -217,7 +217,7 @@ async function prepareExport(projectRoot, files, options) {
|
|
|
217
217
|
}
|
|
218
218
|
const config = await loadConfig(projectRoot);
|
|
219
219
|
const isInteractive = stdioIsInteractive();
|
|
220
|
-
// Auto-fix missing license headers on new files (interactive only
|
|
220
|
+
// Auto-fix missing license headers on new files (interactive only, and
|
|
221
221
|
// report-only under --dry-run so the preview never mutates engine/)
|
|
222
222
|
const headersAdded = await autoFixLicenseHeaders(paths.engine, diff, config, isInteractive, options.dryRun ?? false);
|
|
223
223
|
if (headersAdded) {
|
|
@@ -258,9 +258,18 @@ export async function exportCommand(projectRoot, files, options) {
|
|
|
258
258
|
const patchQueueCtx = (await pathExists(paths.patches))
|
|
259
259
|
? await buildPatchQueueContext(paths.patches)
|
|
260
260
|
: undefined;
|
|
261
|
-
await runPatchLint(
|
|
261
|
+
await runPatchLint({
|
|
262
|
+
engineDir: paths.engine,
|
|
263
|
+
filesAffected,
|
|
264
|
+
diffContent: diff,
|
|
265
|
+
config,
|
|
266
|
+
skipLint: options.skipLint,
|
|
267
|
+
patchQueueCtx,
|
|
268
|
+
ignoreChecks: exportIgnoreChecks,
|
|
269
|
+
patchTier: options.tier,
|
|
270
|
+
});
|
|
262
271
|
// Resolve placement (if any flag was given). Placement is mutually
|
|
263
|
-
// exclusive with supersede
|
|
272
|
+
// exclusive with supersede, because the semantics overlap confusingly.
|
|
264
273
|
let placementPlan = null;
|
|
265
274
|
if (placementFlagCount > 0) {
|
|
266
275
|
const gated = await gatePlacementPlan({
|
|
@@ -29,7 +29,7 @@ async function snapshotWatchedChecksums(watchDirs) {
|
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
catch {
|
|
32
|
-
// Directory may have been removed between iterations
|
|
32
|
+
// Directory may have been removed between iterations, so ignore.
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
return combined;
|
|
@@ -46,7 +46,7 @@ function checksumMapsEqual(a, b) {
|
|
|
46
46
|
/**
|
|
47
47
|
* Builds a watch-loop apply-failure message tailored to the error class so
|
|
48
48
|
* transient filesystem errors (EACCES, ENOSPC, lock timeout) look different
|
|
49
|
-
* from genuine apply-level failures
|
|
49
|
+
* from genuine apply-level failures. The previous generic "Apply failed: ..."
|
|
50
50
|
* collapsed all causes into one string and made diagnosis difficult.
|
|
51
51
|
*/
|
|
52
52
|
function classifyWatchApplyError(err) {
|
|
@@ -74,8 +74,8 @@ function classifyWatchApplyError(err) {
|
|
|
74
74
|
}
|
|
75
75
|
async function runWatchLoop(projectRoot) {
|
|
76
76
|
const furnacePaths = getFurnacePaths(projectRoot);
|
|
77
|
-
// Both categories are eligible targets. The set is fixed
|
|
78
|
-
// varies over time
|
|
77
|
+
// Both categories are eligible targets. The set is fixed. Only existence
|
|
78
|
+
// varies over time: a component dir created after watch started (the user
|
|
79
79
|
// running `furnace create` in another terminal) must be picked up without
|
|
80
80
|
// restarting watch. A one-shot `pathExists` check at startup captures only
|
|
81
81
|
// the dirs that existed then, leaving any later creation invisible.
|
|
@@ -115,8 +115,8 @@ async function runWatchLoop(projectRoot) {
|
|
|
115
115
|
// for changes that are already reflected in the engine.
|
|
116
116
|
lastChecksums = await snapshotWatchedChecksums(watchDirs);
|
|
117
117
|
}
|
|
118
|
-
// Another change arrived while we were applying
|
|
119
|
-
// is not silently absorbed into the post-apply checksum bump.
|
|
118
|
+
// Another change arrived while we were applying, so run again and the
|
|
119
|
+
// edit is not silently absorbed into the post-apply checksum bump.
|
|
120
120
|
if (pendingChange) {
|
|
121
121
|
pendingChange = false;
|
|
122
122
|
await runApplyCycle();
|
|
@@ -124,7 +124,7 @@ async function runWatchLoop(projectRoot) {
|
|
|
124
124
|
};
|
|
125
125
|
const triggerApply = () => {
|
|
126
126
|
if (applyInFlight) {
|
|
127
|
-
// An apply is already running
|
|
127
|
+
// An apply is already running. Record the change so runApplyCycle
|
|
128
128
|
// re-runs after it completes. Do not schedule a new debounce: the
|
|
129
129
|
// in-flight apply will observe this flag when it finishes.
|
|
130
130
|
pendingChange = true;
|
|
@@ -136,7 +136,7 @@ async function runWatchLoop(projectRoot) {
|
|
|
136
136
|
debounceTimer = null;
|
|
137
137
|
if (applyInFlight) {
|
|
138
138
|
// Race with a change that started its own apply between the debounce
|
|
139
|
-
// scheduling and the timer firing. Record the pending change
|
|
139
|
+
// scheduling and the timer firing. Record the pending change. The
|
|
140
140
|
// in-flight apply will pick it up.
|
|
141
141
|
pendingChange = true;
|
|
142
142
|
return;
|
|
@@ -188,7 +188,7 @@ async function runWatchLoop(projectRoot) {
|
|
|
188
188
|
}
|
|
189
189
|
return added;
|
|
190
190
|
};
|
|
191
|
-
// Register signal-driven cleanup
|
|
191
|
+
// Register signal-driven cleanup before creating watchers so there is no
|
|
192
192
|
// race window where a SIGINT could arrive after watchers exist but before
|
|
193
193
|
// cleanup handlers are registered.
|
|
194
194
|
const cleanup = () => {
|
|
@@ -229,7 +229,7 @@ async function runWatchLoop(projectRoot) {
|
|
|
229
229
|
}
|
|
230
230
|
}
|
|
231
231
|
catch {
|
|
232
|
-
// Best effort
|
|
232
|
+
// Best effort: errors here are transient filesystem issues.
|
|
233
233
|
}
|
|
234
234
|
})();
|
|
235
235
|
}, WATCH_POLL_INTERVAL_MS);
|
|
@@ -277,14 +277,14 @@ export async function furnaceApplyCommand(projectRoot, name, options = {}) {
|
|
|
277
277
|
}
|
|
278
278
|
const applySpinner = dryRun ? undefined : spinner('Applying components to engine...');
|
|
279
279
|
const result = await runFurnaceMutation(projectRoot, 'apply-rollback', async (ctx) => {
|
|
280
|
-
// `persistState: false` for a
|
|
281
|
-
//
|
|
282
|
-
//
|
|
283
|
-
//
|
|
284
|
-
//
|
|
280
|
+
// `persistState: false` for a named apply matters: the batch persist
|
|
281
|
+
// path replaces `appliedChecksums` wholesale with only this run's
|
|
282
|
+
// entries, and the batch loops filter to the named component, so
|
|
283
|
+
// routing a named apply through it persists a state file containing
|
|
284
|
+
// only that component and wipes every other component's checksums.
|
|
285
285
|
// Orphan detection and deleted-file undeploy both key on that state,
|
|
286
286
|
// so the wiped components' stale engine files become invisible to
|
|
287
|
-
// apply
|
|
287
|
+
// apply and to `furnace validate`. Named apply merges per-component
|
|
288
288
|
// state below, exactly like `furnace deploy <name>`.
|
|
289
289
|
const applyResult = await applyAllComponents(projectRoot, dryRun, {
|
|
290
290
|
operationContext: ctx,
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { FurnaceConfig } from '../../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Loads `furnace.json` for an authoring command, defaulting to an empty
|
|
4
|
+
* configuration when the project has none yet.
|
|
5
|
+
*
|
|
6
|
+
* `furnace create` and `furnace override` both need this: they are the two
|
|
7
|
+
* commands that may run before any furnace configuration exists, and both must
|
|
8
|
+
* treat "no file" as "nothing registered yet" rather than an error. They had a
|
|
9
|
+
* byte-identical private copy each.
|
|
10
|
+
* @param projectRoot - Project root to load from.
|
|
11
|
+
* @returns The parsed configuration, or a fresh default.
|
|
12
|
+
*/
|
|
13
|
+
export declare function loadAuthoringFurnaceConfig(projectRoot: string): Promise<FurnaceConfig>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EUPL-1.2
|
|
2
|
+
import { createDefaultFurnaceConfig, furnaceConfigExists, loadFurnaceConfig, } from '../../core/furnace-config.js';
|
|
3
|
+
/**
|
|
4
|
+
* Loads `furnace.json` for an authoring command, defaulting to an empty
|
|
5
|
+
* configuration when the project has none yet.
|
|
6
|
+
*
|
|
7
|
+
* `furnace create` and `furnace override` both need this: they are the two
|
|
8
|
+
* commands that may run before any furnace configuration exists, and both must
|
|
9
|
+
* treat "no file" as "nothing registered yet" rather than an error. They had a
|
|
10
|
+
* byte-identical private copy each.
|
|
11
|
+
* @param projectRoot - Project root to load from.
|
|
12
|
+
* @returns The parsed configuration, or a fresh default.
|
|
13
|
+
*/
|
|
14
|
+
export async function loadAuthoringFurnaceConfig(projectRoot) {
|
|
15
|
+
if (await furnaceConfigExists(projectRoot)) {
|
|
16
|
+
return loadFurnaceConfig(projectRoot);
|
|
17
|
+
}
|
|
18
|
+
return createDefaultFurnaceConfig();
|
|
19
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
2
|
/**
|
|
3
|
-
* `fireforge furnace chrome-doc remove <name>`
|
|
3
|
+
* `fireforge furnace chrome-doc remove <name>` removes the files and
|
|
4
4
|
* registrations created by `furnace chrome-doc create`.
|
|
5
5
|
*/
|
|
6
6
|
import { readdir } from 'node:fs/promises';
|
|
@@ -10,7 +10,7 @@ import { loadConfig } from '../../core/config.js';
|
|
|
10
10
|
import { stdioIsInteractive } from '../../core/destructive.js';
|
|
11
11
|
import { completeJournalRollback, runFurnaceMutation, } from '../../core/furnace-operation.js';
|
|
12
12
|
import { assertFurnaceEngineReady } from '../../core/furnace-precondition.js';
|
|
13
|
-
import { createRollbackJournal, snapshotDir, snapshotFile } from '../../core/furnace-rollback.js';
|
|
13
|
+
import { createRollbackJournal, snapshotDir, snapshotFile, } from '../../core/furnace-rollback.js';
|
|
14
14
|
import { FurnaceError } from '../../errors/furnace.js';
|
|
15
15
|
import { pathExists, readText, removeDir, removeFile, writeText } from '../../utils/fs.js';
|
|
16
16
|
import { cancel, info, intro, isCancel, note, outro } from '../../utils/logger.js';
|
|
@@ -41,21 +41,21 @@
|
|
|
41
41
|
*/
|
|
42
42
|
export declare function generateChromeDocXhtml(name: string, withTitlebar: boolean, license: string): string;
|
|
43
43
|
/**
|
|
44
|
-
* browser.xhtml-like scaffold for the document that ships as the fork's
|
|
45
|
-
*
|
|
44
|
+
* browser.xhtml-like scaffold for the document that ships as the fork's main
|
|
45
|
+
* browser window.
|
|
46
46
|
*
|
|
47
47
|
* The generic dialog-shaped `<window>` scaffold is wrong for the
|
|
48
48
|
* `tokenHostDocuments[0]` / BROWSER_CHROME_URL target: platform C++ reads
|
|
49
|
-
* the root element
|
|
49
|
+
* the root element before any script runs, and expects the `browser.xhtml`
|
|
50
50
|
* shape:
|
|
51
51
|
*
|
|
52
|
-
* - `<html id="main-window">` root (not `<window id="<name>-window">`)
|
|
52
|
+
* - `<html id="main-window">` root (not `<window id="<name>-window">`):
|
|
53
53
|
* upstream code from nsXULWindow sizing to session restore looks up
|
|
54
|
-
* `main-window` by id
|
|
54
|
+
* `main-window` by id.
|
|
55
55
|
* - `windowtype="navigator:browser"`, `chromehidden=""` and the geometry
|
|
56
|
-
* `persist` allowlist declared as
|
|
56
|
+
* `persist` allowlist declared as root attributes so the platform's
|
|
57
57
|
* pre-script pass (window tracking, XULStore geometry, chrome flags) sees
|
|
58
|
-
* them
|
|
58
|
+
* them.
|
|
59
59
|
* - the same head/bootstrap wiring (customElements.js, per-doc subscript,
|
|
60
60
|
* CSS + Fluent links) and `data-furnace-chrome-doc` sentinel as the
|
|
61
61
|
* generic scaffold, so jar.mn registration and the platform-module guard
|
|
@@ -89,7 +89,7 @@ export declare function generateChromeDocJs(name: string, licenseHeader: string)
|
|
|
89
89
|
* the platform window controls that `global.css` applies by default.
|
|
90
90
|
*/
|
|
91
91
|
export declare function generateChromeDocCss(name: string, withTitlebar: boolean, licenseHeader: string): string;
|
|
92
|
-
/** Fluent stub
|
|
92
|
+
/** Fluent stub with one placeholder message keyed to the window title. */
|
|
93
93
|
export declare function generateChromeDocFtl(name: string, licenseHeader: string): string;
|
|
94
94
|
/**
|
|
95
95
|
* Single-line jar.mn entry that registers an xhtml + js pair under
|
|
@@ -110,7 +110,7 @@ export declare function jarMnEntriesForChromeDoc(name: string): string[];
|
|
|
110
110
|
* The source path is `../shared/<name>-chrome.css` because `jar.inc.mn` is
|
|
111
111
|
* included from each theme-specific manifest (`browser/themes/osx/jar.mn`,
|
|
112
112
|
* `.../linux/`, `.../windows/`), and every existing entry in those manifests
|
|
113
|
-
* resolves paths relative to the
|
|
113
|
+
* resolves paths relative to the including manifest's directory. A bare
|
|
114
114
|
* `(shared/…)` path resolves to
|
|
115
115
|
* `obj-.../browser/themes/osx/shared/<name>-chrome.css`, which does not
|
|
116
116
|
* exist.
|
|
@@ -120,7 +120,7 @@ export declare function jarIncMnEntryForChromeDoc(name: string): string;
|
|
|
120
120
|
* locales/jar.mn entry that registers the `.ftl` under the browser locale
|
|
121
121
|
* bundle. The source path is resolved by mach-locale-jar relative to the
|
|
122
122
|
* per-locale root (e.g. `engine/browser/locales/en-US/`), and the FTL file
|
|
123
|
-
* is scaffolded at `browser/${name}.ftl` under that root
|
|
123
|
+
* is scaffolded at `browser/${name}.ftl` under that root. The `%` prefix
|
|
124
124
|
* means "per-locale content" and the `browser/` subdirectory matches where
|
|
125
125
|
* the scaffolder writes. A bare `(%${name}.ftl)` points at
|
|
126
126
|
* `en-US/${name}.ftl` and breaks the first post-scaffold build with
|
|
@@ -132,11 +132,11 @@ export declare function localeJarMnEntryForChromeDoc(name: string): string;
|
|
|
132
132
|
* wildcard rooted at `%browser/` whose pattern would already pick up a
|
|
133
133
|
* scaffolded `browser/<name>.ftl` file. Recognises:
|
|
134
134
|
*
|
|
135
|
-
* - `(%browser/**\/*.ftl)
|
|
136
|
-
* - `(%browser/*.ftl)
|
|
135
|
+
* - `(%browser/**\/*.ftl)`: recursive (the upstream shape).
|
|
136
|
+
* - `(%browser/*.ftl)`: flat.
|
|
137
137
|
*
|
|
138
138
|
* Forks that have migrated entirely to `[localization]` wildcards typically
|
|
139
|
-
* keep no per-file `locale/...` entries for FTL at all
|
|
139
|
+
* keep no per-file `locale/...` entries for FTL at all. Appending one
|
|
140
140
|
* there is dead weight at best, and an outright build break when the fork
|
|
141
141
|
* has also dropped the `% locale browser …` registration. The chrome-doc
|
|
142
142
|
* scaffolder consults this predicate before its locales/jar.mn append and
|
|
@@ -146,7 +146,7 @@ export declare function localeJarMnEntryForChromeDoc(name: string): string;
|
|
|
146
146
|
* Conservative by design: only wildcards rooted at `%browser/` count, and
|
|
147
147
|
* a `(%browser/foo.ftl)`-style explicit reference (no `*`) is not treated
|
|
148
148
|
* as a capture. A fork with a narrower wildcard (e.g. `(%browser/about/*.ftl)`)
|
|
149
|
-
* is correctly
|
|
149
|
+
* is correctly not captured by this predicate, because that wildcard would
|
|
150
150
|
* not pick up the top-level `browser/<name>.ftl` the scaffold writes.
|
|
151
151
|
*/
|
|
152
152
|
export declare function localesFtlWildcardCapturesScaffoldedName(jarMnContents: string): boolean;
|