@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
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* Sentinel attribute emitted on every `furnace chrome-doc create`-scaffolded
|
|
13
13
|
* root element. Platform modules (`DevToolsStartup`, `PageActions`,
|
|
14
14
|
* `SessionStore`, `DownloadsButton`, …) that observe
|
|
15
|
-
* `browser-delayed-startup-finished` and walk
|
|
15
|
+
* `browser-delayed-startup-finished` and walk into the window assume the
|
|
16
16
|
* `browser.xhtml` DOM and throw on anything else. A fork-authored patch
|
|
17
17
|
* to such a module can use `hasAttribute(...)` against this sentinel as
|
|
18
18
|
* a cheap, fork-neutral guard to skip the walk on a custom chrome doc.
|
|
@@ -54,8 +54,8 @@ const FURNACE_CHROME_DOC_SENTINEL = 'data-furnace-chrome-doc';
|
|
|
54
54
|
* the README "Platform module compatibility" section for the pattern.
|
|
55
55
|
*/
|
|
56
56
|
export function generateChromeDocXhtml(name, withTitlebar, license) {
|
|
57
|
-
// navigator:browser minimum set. Carrying every attribute together
|
|
58
|
-
//
|
|
57
|
+
// navigator:browser minimum set. Carrying every attribute together, not
|
|
58
|
+
// just `windowtype`, lets a fork that uses the scaffold output
|
|
59
59
|
// verbatim launch as a real main window: `customtitlebar` opts into the
|
|
60
60
|
// platform-native title bar handling that pairs with the buttonbox
|
|
61
61
|
// markup below, the explicit width/height avoid the OS-minimum first
|
|
@@ -99,21 +99,21 @@ export function generateChromeDocXhtml(name, withTitlebar, license) {
|
|
|
99
99
|
`;
|
|
100
100
|
}
|
|
101
101
|
/**
|
|
102
|
-
* browser.xhtml-like scaffold for the document that ships as the fork's
|
|
103
|
-
*
|
|
102
|
+
* browser.xhtml-like scaffold for the document that ships as the fork's main
|
|
103
|
+
* browser window.
|
|
104
104
|
*
|
|
105
105
|
* The generic dialog-shaped `<window>` scaffold is wrong for the
|
|
106
106
|
* `tokenHostDocuments[0]` / BROWSER_CHROME_URL target: platform C++ reads
|
|
107
|
-
* the root element
|
|
107
|
+
* the root element before any script runs, and expects the `browser.xhtml`
|
|
108
108
|
* shape:
|
|
109
109
|
*
|
|
110
|
-
* - `<html id="main-window">` root (not `<window id="<name>-window">`)
|
|
110
|
+
* - `<html id="main-window">` root (not `<window id="<name>-window">`):
|
|
111
111
|
* upstream code from nsXULWindow sizing to session restore looks up
|
|
112
|
-
* `main-window` by id
|
|
112
|
+
* `main-window` by id.
|
|
113
113
|
* - `windowtype="navigator:browser"`, `chromehidden=""` and the geometry
|
|
114
|
-
* `persist` allowlist declared as
|
|
114
|
+
* `persist` allowlist declared as root attributes so the platform's
|
|
115
115
|
* pre-script pass (window tracking, XULStore geometry, chrome flags) sees
|
|
116
|
-
* them
|
|
116
|
+
* them.
|
|
117
117
|
* - the same head/bootstrap wiring (customElements.js, per-doc subscript,
|
|
118
118
|
* CSS + Fluent links) and `data-furnace-chrome-doc` sentinel as the
|
|
119
119
|
* generic scaffold, so jar.mn registration and the platform-module guard
|
|
@@ -252,7 +252,7 @@ export function generateChromeDocCss(name, withTitlebar, licenseHeader) {
|
|
|
252
252
|
}${titlebarOverrides}
|
|
253
253
|
`;
|
|
254
254
|
}
|
|
255
|
-
/** Fluent stub
|
|
255
|
+
/** Fluent stub with one placeholder message keyed to the window title. */
|
|
256
256
|
export function generateChromeDocFtl(name, licenseHeader) {
|
|
257
257
|
return `${licenseHeader}
|
|
258
258
|
|
|
@@ -283,7 +283,7 @@ export function jarMnEntriesForChromeDoc(name) {
|
|
|
283
283
|
* The source path is `../shared/<name>-chrome.css` because `jar.inc.mn` is
|
|
284
284
|
* included from each theme-specific manifest (`browser/themes/osx/jar.mn`,
|
|
285
285
|
* `.../linux/`, `.../windows/`), and every existing entry in those manifests
|
|
286
|
-
* resolves paths relative to the
|
|
286
|
+
* resolves paths relative to the including manifest's directory. A bare
|
|
287
287
|
* `(shared/…)` path resolves to
|
|
288
288
|
* `obj-.../browser/themes/osx/shared/<name>-chrome.css`, which does not
|
|
289
289
|
* exist.
|
|
@@ -295,7 +295,7 @@ export function jarIncMnEntryForChromeDoc(name) {
|
|
|
295
295
|
* locales/jar.mn entry that registers the `.ftl` under the browser locale
|
|
296
296
|
* bundle. The source path is resolved by mach-locale-jar relative to the
|
|
297
297
|
* per-locale root (e.g. `engine/browser/locales/en-US/`), and the FTL file
|
|
298
|
-
* is scaffolded at `browser/${name}.ftl` under that root
|
|
298
|
+
* is scaffolded at `browser/${name}.ftl` under that root. The `%` prefix
|
|
299
299
|
* means "per-locale content" and the `browser/` subdirectory matches where
|
|
300
300
|
* the scaffolder writes. A bare `(%${name}.ftl)` points at
|
|
301
301
|
* `en-US/${name}.ftl` and breaks the first post-scaffold build with
|
|
@@ -309,11 +309,11 @@ export function localeJarMnEntryForChromeDoc(name) {
|
|
|
309
309
|
* wildcard rooted at `%browser/` whose pattern would already pick up a
|
|
310
310
|
* scaffolded `browser/<name>.ftl` file. Recognises:
|
|
311
311
|
*
|
|
312
|
-
* - `(%browser/**\/*.ftl)
|
|
313
|
-
* - `(%browser/*.ftl)
|
|
312
|
+
* - `(%browser/**\/*.ftl)`: recursive (the upstream shape).
|
|
313
|
+
* - `(%browser/*.ftl)`: flat.
|
|
314
314
|
*
|
|
315
315
|
* Forks that have migrated entirely to `[localization]` wildcards typically
|
|
316
|
-
* keep no per-file `locale/...` entries for FTL at all
|
|
316
|
+
* keep no per-file `locale/...` entries for FTL at all. Appending one
|
|
317
317
|
* there is dead weight at best, and an outright build break when the fork
|
|
318
318
|
* has also dropped the `% locale browser …` registration. The chrome-doc
|
|
319
319
|
* scaffolder consults this predicate before its locales/jar.mn append and
|
|
@@ -323,7 +323,7 @@ export function localeJarMnEntryForChromeDoc(name) {
|
|
|
323
323
|
* Conservative by design: only wildcards rooted at `%browser/` count, and
|
|
324
324
|
* a `(%browser/foo.ftl)`-style explicit reference (no `*`) is not treated
|
|
325
325
|
* as a capture. A fork with a narrower wildcard (e.g. `(%browser/about/*.ftl)`)
|
|
326
|
-
* is correctly
|
|
326
|
+
* is correctly not captured by this predicate, because that wildcard would
|
|
327
327
|
* not pick up the top-level `browser/<name>.ftl` the scaffold writes.
|
|
328
328
|
*/
|
|
329
329
|
export function localesFtlWildcardCapturesScaffoldedName(jarMnContents) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Returns the canonical xpcshell test basename for a chrome doc packaging
|
|
3
|
-
* check (`test_<name>_packaging.js`). Hyphens in `<name>` are preserved
|
|
3
|
+
* check (`test_<name>_packaging.js`). Hyphens in `<name>` are preserved:
|
|
4
4
|
* xpcshell permits them in file basenames even though the derived task
|
|
5
5
|
* function names replace them with underscores.
|
|
6
6
|
*/
|
|
@@ -16,7 +16,7 @@ export declare function generateChromeDocPackagingTest(name: string, header: str
|
|
|
16
16
|
/**
|
|
17
17
|
* Emits the `xpcshell.toml` manifest for the packaging test directory.
|
|
18
18
|
* Sets `firefox-appdir = "browser"` so XCurProcD resolves to the browser
|
|
19
|
-
* subdir rather than the generic gecko runtime dir
|
|
19
|
+
* subdir rather than the generic gecko runtime dir. Without that, the
|
|
20
20
|
* path probe walks the wrong tree on every fork whose app directory is
|
|
21
21
|
* not the default.
|
|
22
22
|
*/
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* - xpcshell's `chrome://browser/*` URI registration lags what the real
|
|
11
11
|
* browser loads even with `firefox-appdir = "browser"` set, so
|
|
12
12
|
* `NetUtil.asyncFetch("chrome://browser/content/<name>.xhtml")` can fail
|
|
13
|
-
* with `NS_ERROR_FILE_NOT_FOUND` against a file that
|
|
13
|
+
* with `NS_ERROR_FILE_NOT_FOUND` against a file that is correctly
|
|
14
14
|
* packaged.
|
|
15
15
|
* - Browser-chrome mochitests require a `tabbrowser`, which a
|
|
16
16
|
* fork-authored chrome doc that replaces `browser.xhtml` deliberately
|
|
@@ -23,13 +23,13 @@
|
|
|
23
23
|
* is stable across platforms at
|
|
24
24
|
* `<AppDir>/chrome/browser/content/browser/<name>.xhtml` on an unpacked tree
|
|
25
25
|
* (the default for `mach build` without `MOZ_CHROME_MULTILOCALE` / omnijar).
|
|
26
|
-
* A tree that packs omni.ja would need a different probe
|
|
26
|
+
* A tree that packs omni.ja would need a different probe. The scaffold notes
|
|
27
27
|
* that out-of-scope case explicitly rather than silently producing a test
|
|
28
28
|
* that fails on packed builds.
|
|
29
29
|
*/
|
|
30
30
|
/**
|
|
31
31
|
* Returns the canonical xpcshell test basename for a chrome doc packaging
|
|
32
|
-
* check (`test_<name>_packaging.js`). Hyphens in `<name>` are preserved
|
|
32
|
+
* check (`test_<name>_packaging.js`). Hyphens in `<name>` are preserved:
|
|
33
33
|
* xpcshell permits them in file basenames even though the derived task
|
|
34
34
|
* function names replace them with underscores.
|
|
35
35
|
*/
|
|
@@ -132,7 +132,7 @@ add_task(async function test_${taskSuffix}_files_packaged() {
|
|
|
132
132
|
/**
|
|
133
133
|
* Emits the `xpcshell.toml` manifest for the packaging test directory.
|
|
134
134
|
* Sets `firefox-appdir = "browser"` so XCurProcD resolves to the browser
|
|
135
|
-
* subdir rather than the generic gecko runtime dir
|
|
135
|
+
* subdir rather than the generic gecko runtime dir. Without that, the
|
|
136
136
|
* path probe walks the wrong tree on every fork whose app directory is
|
|
137
137
|
* not the default.
|
|
138
138
|
*/
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `fireforge furnace chrome-doc create <name>`
|
|
2
|
+
* `fireforge furnace chrome-doc create <name>` scaffolds a top-level
|
|
3
3
|
* chrome document (xhtml + js + css + ftl + jar.mn registrations).
|
|
4
4
|
*
|
|
5
5
|
* `furnace create` covers custom elements under `toolkit/content/widgets/`,
|
|
6
|
-
* but top-level chrome documents
|
|
7
|
-
* a fork adds alongside or instead of `browser.xhtml`
|
|
6
|
+
* but top-level chrome documents (the `mybrowser.xhtml`-class entry points
|
|
7
|
+
* a fork adds alongside or instead of `browser.xhtml`) are otherwise
|
|
8
8
|
* hand-authored with error-prone jar.mn + jar.inc.mn + locales/jar.mn glue.
|
|
9
9
|
* The `*` preprocessor flag, the macOS titlebar-button carve-out, the
|
|
10
10
|
* startup-topic observer, and the Fluent linkage each have silent-break
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
*
|
|
13
13
|
* This command writes the four source files and appends three jar.mn entries
|
|
14
14
|
* under a rollback journal identical in shape to `furnace create`. A SIGINT
|
|
15
|
-
* mid-scaffold restores every touched file
|
|
15
|
+
* mid-scaffold restores every touched file. A successful run leaves the tree
|
|
16
16
|
* ready for `fireforge build`.
|
|
17
17
|
*/
|
|
18
18
|
/** Options for `furnace chrome-doc create`. */
|
|
@@ -28,16 +28,16 @@ export interface FurnaceChromeDocCreateOptions {
|
|
|
28
28
|
* Scaffold an xpcshell packaging-verification test alongside the chrome
|
|
29
29
|
* document. The generated test probes `XCurProcD/chrome/browser/...` on
|
|
30
30
|
* disk rather than going through `chrome://` URI resolution, which
|
|
31
|
-
* bypasses xpcshell's limited browser-chrome manifest set
|
|
31
|
+
* bypasses xpcshell's limited browser-chrome manifest set, where
|
|
32
32
|
* `NetUtil.asyncFetch` returns `NS_ERROR_FILE_NOT_FOUND` against a file
|
|
33
|
-
* that
|
|
33
|
+
* that is packaged. Registration in `XPCSHELL_TESTS_MANIFESTS` is left to
|
|
34
34
|
* the operator because the owning moz.build depends on the fork's layout.
|
|
35
35
|
*/
|
|
36
36
|
withTests?: boolean;
|
|
37
37
|
/** Print the scaffold plan without writing files. */
|
|
38
38
|
dryRun?: boolean;
|
|
39
39
|
/**
|
|
40
|
-
* Emit the browser.xhtml-like
|
|
40
|
+
* Emit the browser.xhtml-like main-window skeleton (`<html
|
|
41
41
|
* id="main-window">` with the `windowtype`/`chromehidden`/`persist`
|
|
42
42
|
* root attributes platform C++ reads before scripts run) instead of
|
|
43
43
|
* the generic dialog-shaped `<window>` document. Use for the document
|
|
@@ -49,7 +49,7 @@ export interface FurnaceChromeDocCreateOptions {
|
|
|
49
49
|
}
|
|
50
50
|
/**
|
|
51
51
|
* Validates a chrome-doc name. Lowercase ASCII, optional hyphens, no
|
|
52
|
-
* leading digit
|
|
52
|
+
* leading digit. The name is used verbatim in CSS selectors, jar.mn
|
|
53
53
|
* entries, FTL keys, and file basenames, so anything outside that
|
|
54
54
|
* character set would break at least one downstream consumer.
|
|
55
55
|
* @param name Chrome-doc name (file basename without extension).
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
2
|
/**
|
|
3
|
-
* `fireforge furnace chrome-doc create <name>`
|
|
3
|
+
* `fireforge furnace chrome-doc create <name>` scaffolds a top-level
|
|
4
4
|
* chrome document (xhtml + js + css + ftl + jar.mn registrations).
|
|
5
5
|
*
|
|
6
6
|
* `furnace create` covers custom elements under `toolkit/content/widgets/`,
|
|
7
|
-
* but top-level chrome documents
|
|
8
|
-
* a fork adds alongside or instead of `browser.xhtml`
|
|
7
|
+
* but top-level chrome documents (the `mybrowser.xhtml`-class entry points
|
|
8
|
+
* a fork adds alongside or instead of `browser.xhtml`) are otherwise
|
|
9
9
|
* hand-authored with error-prone jar.mn + jar.inc.mn + locales/jar.mn glue.
|
|
10
10
|
* The `*` preprocessor flag, the macOS titlebar-button carve-out, the
|
|
11
11
|
* startup-topic observer, and the Fluent linkage each have silent-break
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
*
|
|
14
14
|
* This command writes the four source files and appends three jar.mn entries
|
|
15
15
|
* under a rollback journal identical in shape to `furnace create`. A SIGINT
|
|
16
|
-
* mid-scaffold restores every touched file
|
|
16
|
+
* mid-scaffold restores every touched file. A successful run leaves the tree
|
|
17
17
|
* ready for `fireforge build`.
|
|
18
18
|
*/
|
|
19
19
|
import { join } from 'node:path';
|
|
@@ -33,7 +33,7 @@ import { chromeDocPackagingTestFileName, generateChromeDocPackagingManifest, gen
|
|
|
33
33
|
const CHROME_DOC_NAME_PATTERN = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;
|
|
34
34
|
/**
|
|
35
35
|
* Validates a chrome-doc name. Lowercase ASCII, optional hyphens, no
|
|
36
|
-
* leading digit
|
|
36
|
+
* leading digit. The name is used verbatim in CSS selectors, jar.mn
|
|
37
37
|
* entries, FTL keys, and file basenames, so anything outside that
|
|
38
38
|
* character set would break at least one downstream consumer.
|
|
39
39
|
* @param name Chrome-doc name (file basename without extension).
|
|
@@ -154,8 +154,8 @@ function renderChromeDocCreateDryRun(name, plan) {
|
|
|
154
154
|
*/
|
|
155
155
|
async function appendJarEntryIfAbsent(filePath, entry, journal) {
|
|
156
156
|
if (!(await pathExists(filePath))) {
|
|
157
|
-
// Target jar.mn doesn't exist in this tree layout. We do
|
|
158
|
-
//
|
|
157
|
+
// Target jar.mn doesn't exist in this tree layout. We do not create it:
|
|
158
|
+
// a fork that moved the jar file needs the operator to choose a
|
|
159
159
|
// placement. The command surfaces this as a FurnaceError so the user
|
|
160
160
|
// can investigate rather than silently writing to a non-canonical path.
|
|
161
161
|
throw new FurnaceError(`Required jar file ${filePath} does not exist; cannot register chrome-doc entry. Check that the fork's engine layout matches the expected browser/ and locales/ tree.`);
|
|
@@ -177,7 +177,7 @@ async function performChromeDocMutations(args) {
|
|
|
177
177
|
const journal = createRollbackJournal();
|
|
178
178
|
args.operationContext.registerJournal(journal);
|
|
179
179
|
// XHTML uses an inline XML comment since getLicenseHeader has no XML
|
|
180
|
-
// style
|
|
180
|
+
// style. The SPDX convention is a single-line comment at the top.
|
|
181
181
|
const jsHeader = getLicenseHeader(args.license, 'js');
|
|
182
182
|
const cssHeader = getLicenseHeader(args.license, 'css');
|
|
183
183
|
const ftlHeader = getLicenseHeader(args.license, 'hash');
|
|
@@ -213,7 +213,7 @@ async function performChromeDocMutations(args) {
|
|
|
213
213
|
await snapshotFile(journal, ftlPath);
|
|
214
214
|
await writeText(ftlPath, generateChromeDocFtl(args.name, ftlHeader));
|
|
215
215
|
written.push(`browser/locales/en-US/browser/${args.name}.ftl`);
|
|
216
|
-
// jar.mn registrations
|
|
216
|
+
// jar.mn registrations: XHTML + JS go through the `*` preprocessor
|
|
217
217
|
// for brand substitution, CSS goes through jar.inc.mn, FTL through
|
|
218
218
|
// the locale jar.
|
|
219
219
|
const jarMnPath = join(args.engineDir, 'browser/base/jar.mn');
|
|
@@ -226,12 +226,12 @@ async function performChromeDocMutations(args) {
|
|
|
226
226
|
written.push('browser/themes/shared/jar.inc.mn');
|
|
227
227
|
const localeJarMnPath = join(args.engineDir, 'browser/locales/jar.mn');
|
|
228
228
|
// Forks that have migrated to a `[localization] (%browser/**/*.ftl)`
|
|
229
|
-
// wildcard already pick up the scaffolded FTL automatically
|
|
230
|
-
// a per-file `locale/...` entry on top is at best dead weight
|
|
231
|
-
// worst a build error when the fork has dropped the
|
|
232
|
-
// registration the per-file entry depends on. The
|
|
233
|
-
//
|
|
234
|
-
// count as a capture.
|
|
229
|
+
// wildcard already pick up the scaffolded FTL automatically, so
|
|
230
|
+
// appending a per-file `locale/...` entry on top is at best dead weight
|
|
231
|
+
// and at worst a build error when the fork has dropped the
|
|
232
|
+
// `% locale browser` registration the per-file entry depends on. The
|
|
233
|
+
// wildcard predicate is narrow on purpose: only `%browser/`-rooted globs
|
|
234
|
+
// ending in `*.ftl` count as a capture.
|
|
235
235
|
if (await pathExists(localeJarMnPath)) {
|
|
236
236
|
const existingLocaleJar = await readText(localeJarMnPath);
|
|
237
237
|
if (localesFtlWildcardCapturesScaffoldedName(existingLocaleJar)) {
|
|
@@ -298,12 +298,12 @@ export async function furnaceChromeDocCreateCommand(projectRoot, name, options =
|
|
|
298
298
|
});
|
|
299
299
|
const browserWindow = options.browserWindow ?? false;
|
|
300
300
|
// The browser-window skeleton always carries its own titlebar markup and
|
|
301
|
-
// chrome attributes
|
|
301
|
+
// chrome attributes. --no-titlebar only applies to the generic scaffold.
|
|
302
302
|
const withTitlebar = browserWindow ? true : (options.titlebar ?? true);
|
|
303
303
|
const withTests = options.withTests ?? false;
|
|
304
304
|
// Hint: when the scaffolded document is the configured token-host document
|
|
305
305
|
// (the fork's main browser window), the generic dialog-shaped scaffold is
|
|
306
|
-
// almost certainly wrong
|
|
306
|
+
// almost certainly wrong: correct jar.mn registrations, wrong document
|
|
307
307
|
// body.
|
|
308
308
|
if (!browserWindow && (await furnaceConfigExists(projectRoot))) {
|
|
309
309
|
try {
|
|
@@ -317,7 +317,7 @@ export async function furnaceChromeDocCreateCommand(projectRoot, name, options =
|
|
|
317
317
|
}
|
|
318
318
|
}
|
|
319
319
|
catch {
|
|
320
|
-
// A broken furnace.json must not block chrome-doc scaffolding
|
|
320
|
+
// A broken furnace.json must not block chrome-doc scaffolding. The
|
|
321
321
|
// hint is best-effort.
|
|
322
322
|
}
|
|
323
323
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Browser-chrome test scaffolding for `furnace create --with-tests`,
|
|
3
3
|
* including the `--test-dir` redirect and collision safety (existing
|
|
4
|
-
* manifests are appended to
|
|
4
|
+
* manifests are appended to, and head.js and test implementations are never
|
|
5
5
|
* overwritten). Split out of `create.ts` to keep that command file within
|
|
6
6
|
* the per-file line budget.
|
|
7
7
|
*/
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Browser-chrome test scaffolding for `furnace create --with-tests`,
|
|
4
4
|
* including the `--test-dir` redirect and collision safety (existing
|
|
5
|
-
* manifests are appended to
|
|
5
|
+
* manifests are appended to, and head.js and test implementations are never
|
|
6
6
|
* overwritten). Split out of `create.ts` to keep that command file within
|
|
7
7
|
* the per-file line budget.
|
|
8
8
|
*/
|
|
@@ -16,6 +16,7 @@ import { toError } from '../../utils/errors.js';
|
|
|
16
16
|
import { ensureDir, pathExists, readText, writeText } from '../../utils/fs.js';
|
|
17
17
|
import { info, success, warn } from '../../utils/logger.js';
|
|
18
18
|
import { stripEnginePrefix } from '../../utils/paths.js';
|
|
19
|
+
import { browserTestFileName, deriveTestStem } from './test-file-name.js';
|
|
19
20
|
/**
|
|
20
21
|
* Validates the `--test-dir` option against the resolved test style before
|
|
21
22
|
* any writes. Mochikit lives in the upstream toolkit/content/tests/widgets
|
|
@@ -65,15 +66,9 @@ export function resolveTestDirOverride(raw) {
|
|
|
65
66
|
* the harness will try to run.
|
|
66
67
|
*/
|
|
67
68
|
export async function scaffoldTestFiles(componentName, license, forgeConfig, paths, journal, testDirOverride) {
|
|
68
|
-
const strippedName = componentName.startsWith('moz-') ? componentName.slice(4) : componentName;
|
|
69
|
-
// Avoid double-prefixing: strip binaryName prefix since the default test
|
|
70
|
-
// dir name already uses it
|
|
71
69
|
const binaryName = forgeConfig.binaryName;
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
: strippedName;
|
|
75
|
-
const underscored = withoutBinaryPrefix.replace(/-/g, '_');
|
|
76
|
-
const testFileName = `browser_${binaryName}_${underscored}.js`;
|
|
70
|
+
const underscored = deriveTestStem(componentName, binaryName);
|
|
71
|
+
const testFileName = browserTestFileName(componentName, binaryName);
|
|
77
72
|
// --test-dir redirects the scaffold: the hardcoded
|
|
78
73
|
// `.../test/<binaryName>/` target can collide with a test suite owned by a
|
|
79
74
|
// different patch. The manifest-registration name is the path below
|
|
@@ -88,12 +83,12 @@ export async function scaffoldTestFiles(componentName, license, forgeConfig, pat
|
|
|
88
83
|
const jsHeader = getLicenseHeader(license, 'js');
|
|
89
84
|
const hashHeader = getLicenseHeader(license, 'hash');
|
|
90
85
|
const testFiles = [];
|
|
91
|
-
// browser.toml
|
|
86
|
+
// browser.toml: create if missing, append entry if existing.
|
|
92
87
|
const tomlPath = join(testDir, 'browser.toml');
|
|
93
88
|
if (await pathExists(tomlPath)) {
|
|
94
89
|
// Defensive guard: only append if the entry is not already present.
|
|
95
90
|
// With a fresh journal per create, the same test file name cannot be
|
|
96
|
-
// appended twice in a single run
|
|
91
|
+
// appended twice in a single run, but retaining the check protects
|
|
97
92
|
// against accidental re-entrance or a future refactor that reuses the
|
|
98
93
|
// helper with a stale test directory.
|
|
99
94
|
const existingToml = await readText(tomlPath);
|
|
@@ -118,7 +113,7 @@ support-files = ["head.js"]
|
|
|
118
113
|
await writeText(tomlPath, browserToml);
|
|
119
114
|
}
|
|
120
115
|
testFiles.push('browser.toml');
|
|
121
|
-
// head.js
|
|
116
|
+
// head.js: only create if it doesn't exist (shared across components).
|
|
122
117
|
const headPath = join(testDir, 'head.js');
|
|
123
118
|
if (!(await pathExists(headPath))) {
|
|
124
119
|
if (journal)
|
|
@@ -8,7 +8,7 @@ export interface DryRunPlanInput {
|
|
|
8
8
|
/**
|
|
9
9
|
* Feature-scoped Fluent bundle the component participates in (the same
|
|
10
10
|
* value that will be written to `furnace.json`'s `sharedFtl`). When set,
|
|
11
|
-
* the component's own `.ftl` is
|
|
11
|
+
* the component's own `.ftl` is not scaffolded and the plan preview
|
|
12
12
|
* reflects that. Omit the key for the default per-component scaffold.
|
|
13
13
|
*/
|
|
14
14
|
sharedFtl?: string;
|
|
@@ -18,8 +18,8 @@ export interface DryRunPlanInput {
|
|
|
18
18
|
/**
|
|
19
19
|
* Resolved `--test-dir` override (engine-relative, already validated by
|
|
20
20
|
* `resolveValidatedTestDir`). Omit for the default `<binaryName>`-derived
|
|
21
|
-
* scaffold directory. The formatters
|
|
22
|
-
* scaffolders get
|
|
21
|
+
* scaffold directory. The formatters must receive the same value the
|
|
22
|
+
* scaffolders get. The plan used to recompute the default from
|
|
23
23
|
* `binaryName` and named a directory the real run never wrote to.
|
|
24
24
|
*/
|
|
25
25
|
testDir?: string;
|
|
@@ -35,7 +35,7 @@ export declare function formatSuccessNote(args: {
|
|
|
35
35
|
testFiles: string[];
|
|
36
36
|
testStyle: ResolvedTestStyle;
|
|
37
37
|
binaryName: string;
|
|
38
|
-
/** Resolved `--test-dir` override
|
|
38
|
+
/** Resolved `--test-dir` override. See {@link DryRunPlanInput.testDir}. */
|
|
39
39
|
testDir?: string | undefined;
|
|
40
40
|
}): string;
|
|
41
41
|
/**
|
|
@@ -3,11 +3,12 @@
|
|
|
3
3
|
* Dry-run plan formatter for `furnace create`.
|
|
4
4
|
*
|
|
5
5
|
* Lives outside `create.ts` so the authoring command stays under the
|
|
6
|
-
* per-file LOC budget. The formatter is pure
|
|
7
|
-
* resolved by the command's validation phase
|
|
6
|
+
* per-file LOC budget. The formatter is pure (all inputs are already
|
|
7
|
+
* resolved by the command's validation phase), so it can be exercised
|
|
8
8
|
* independently of the mutation plumbing.
|
|
9
9
|
*/
|
|
10
10
|
import { BROWSER_TEST_SCAFFOLD_ROOT, resolveBrowserChromeTestDir, resolveXpcshellTestDir, } from '../../core/furnace-constants.js';
|
|
11
|
+
import { deriveTestStem } from './test-file-name.js';
|
|
11
12
|
/**
|
|
12
13
|
* Builds the test-section fragment of the dry-run plan for a given
|
|
13
14
|
* harness choice. Kept separate from the top-level formatter so the
|
|
@@ -18,15 +19,11 @@ function formatTestSection(args) {
|
|
|
18
19
|
const { testStyle, componentName, binaryName, testDir } = args;
|
|
19
20
|
if (testStyle === 'none')
|
|
20
21
|
return '';
|
|
21
|
-
const
|
|
22
|
-
const withoutBinaryPrefix = strippedName.startsWith(binaryName + '-')
|
|
23
|
-
? strippedName.slice(binaryName.length + 1)
|
|
24
|
-
: strippedName;
|
|
25
|
-
const underscored = withoutBinaryPrefix.replace(/-/g, '_');
|
|
22
|
+
const underscored = deriveTestStem(componentName, binaryName);
|
|
26
23
|
if (testStyle === 'browser-chrome') {
|
|
27
24
|
// Same resolver as scaffoldTestFiles: the registration name is the
|
|
28
25
|
// path below browser/base/content/test/, which under --test-dir is
|
|
29
|
-
//
|
|
26
|
+
// not the binary name.
|
|
30
27
|
const testDirRel = resolveBrowserChromeTestDir(binaryName, testDir);
|
|
31
28
|
const manifestName = testDirRel.slice(BROWSER_TEST_SCAFFOLD_ROOT.length);
|
|
32
29
|
return (`\n\nWould create test files in engine/${testDirRel}/:\n` +
|
|
@@ -82,7 +79,7 @@ export function formatSuccessNote(args) {
|
|
|
82
79
|
export function formatDryRunPlan(args) {
|
|
83
80
|
const { componentName, localized, register, composes, stockAdditions, sharedFtl, testStyle, description, binaryName, testDir, } = args;
|
|
84
81
|
const componentFiles = [`${componentName}.mjs`, `${componentName}.css`];
|
|
85
|
-
// A per-component .ftl is scaffolded only when the component does
|
|
82
|
+
// A per-component .ftl is scaffolded only when the component does not
|
|
86
83
|
// opt into a shared feature-scoped bundle. Mirrors writeComponentFiles.
|
|
87
84
|
if (localized && !sharedFtl)
|
|
88
85
|
componentFiles.push(`${componentName}.ftl`);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Feature-flag resolution for `furnace create`. Extracted from
|
|
3
3
|
* `create.ts` so the authoring command stays under the per-file LOC
|
|
4
|
-
* budget
|
|
4
|
+
* budget. The flag resolver has grown with each new opt-in (`--xpcshell`,
|
|
5
5
|
* `--test-style`, `--shared-ftl`).
|
|
6
6
|
*/
|
|
7
7
|
import type { FurnaceCreateOptions } from '../../types/commands/index.js';
|
|
@@ -11,7 +11,7 @@ import type { FurnaceCreateOptions } from '../../types/commands/index.js';
|
|
|
11
11
|
* `--shared-ftl` implies `localized` and short-circuits the interactive
|
|
12
12
|
* prompt so the operator is not asked to flip a flag we are about to
|
|
13
13
|
* enforce. `--no-localized` combined with `--shared-ftl` is rejected
|
|
14
|
-
* fast-fail
|
|
14
|
+
* fast-fail. The cross-field check in furnace-config would catch it
|
|
15
15
|
* too, but later and without a clear command-line message.
|
|
16
16
|
*
|
|
17
17
|
* @param isInteractive - Whether interactive prompts are available
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Feature-flag resolution for `furnace create`. Extracted from
|
|
4
4
|
* `create.ts` so the authoring command stays under the per-file LOC
|
|
5
|
-
* budget
|
|
5
|
+
* budget. The flag resolver has grown with each new opt-in (`--xpcshell`,
|
|
6
6
|
* `--test-style`, `--shared-ftl`).
|
|
7
7
|
*/
|
|
8
8
|
import { multiselect } from '@clack/prompts';
|
|
@@ -14,7 +14,7 @@ import { cancel, isCancel } from '../../utils/logger.js';
|
|
|
14
14
|
* `--shared-ftl` implies `localized` and short-circuits the interactive
|
|
15
15
|
* prompt so the operator is not asked to flip a flag we are about to
|
|
16
16
|
* enforce. `--no-localized` combined with `--shared-ftl` is rejected
|
|
17
|
-
* fast-fail
|
|
17
|
+
* fast-fail. The cross-field check in furnace-config would catch it
|
|
18
18
|
* too, but later and without a clear command-line message.
|
|
19
19
|
*
|
|
20
20
|
* @param isInteractive - Whether interactive prompts are available
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
* `fireforge furnace create --test-style=mochikit`.
|
|
4
4
|
*
|
|
5
5
|
* Browser-chrome mochitests require a `tabbrowser` in the top-level chrome
|
|
6
|
-
* document, so forks with a bespoke chrome document that
|
|
7
|
-
*
|
|
6
|
+
* document, so forks with a bespoke chrome document that omits one cannot
|
|
7
|
+
* run them. MochiKit tests load the component module directly via
|
|
8
8
|
* `chrome://global/` and assert against `customElements`, so they work
|
|
9
|
-
* against any fork that registers the upstream toolkit test manifest tree
|
|
9
|
+
* against any fork that registers the upstream toolkit test manifest tree,
|
|
10
10
|
* including those without a tabbrowser.
|
|
11
11
|
*/
|
|
12
12
|
import { type RollbackJournal } from '../../core/furnace-rollback.js';
|
|
@@ -21,7 +21,7 @@ import type { ProjectLicense } from '../../types/config.js';
|
|
|
21
21
|
* Appends a per-test entry to the existing `chrome.toml` when present,
|
|
22
22
|
* writes a fresh `[DEFAULT]`-headed one otherwise. The caller is still
|
|
23
23
|
* responsible for ensuring the `toolkit/content/tests/widgets/chrome.toml`
|
|
24
|
-
* path is registered somewhere in the moz.build tree
|
|
24
|
+
* path is registered somewhere in the moz.build tree. Most forks inherit
|
|
25
25
|
* this from upstream via `TEST_HARNESS_FILES += [...]`.
|
|
26
26
|
*/
|
|
27
27
|
export declare function scaffoldMochikitTestFiles(componentName: string, license: ProjectLicense, paths: {
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
* `fireforge furnace create --test-style=mochikit`.
|
|
5
5
|
*
|
|
6
6
|
* Browser-chrome mochitests require a `tabbrowser` in the top-level chrome
|
|
7
|
-
* document, so forks with a bespoke chrome document that
|
|
8
|
-
*
|
|
7
|
+
* document, so forks with a bespoke chrome document that omits one cannot
|
|
8
|
+
* run them. MochiKit tests load the component module directly via
|
|
9
9
|
* `chrome://global/` and assert against `customElements`, so they work
|
|
10
|
-
* against any fork that registers the upstream toolkit test manifest tree
|
|
10
|
+
* against any fork that registers the upstream toolkit test manifest tree,
|
|
11
11
|
* including those without a tabbrowser.
|
|
12
12
|
*/
|
|
13
13
|
import { join } from 'node:path';
|
|
@@ -26,7 +26,7 @@ import { generateMochikitChromeTomlEntry, generateMochikitChromeTomlSkeleton, ge
|
|
|
26
26
|
* Appends a per-test entry to the existing `chrome.toml` when present,
|
|
27
27
|
* writes a fresh `[DEFAULT]`-headed one otherwise. The caller is still
|
|
28
28
|
* responsible for ensuring the `toolkit/content/tests/widgets/chrome.toml`
|
|
29
|
-
* path is registered somewhere in the moz.build tree
|
|
29
|
+
* path is registered somewhere in the moz.build tree. Most forks inherit
|
|
30
30
|
* this from upstream via `TEST_HARNESS_FILES += [...]`.
|
|
31
31
|
*/
|
|
32
32
|
export async function scaffoldMochikitTestFiles(componentName, license, paths, journal) {
|
|
@@ -50,9 +50,9 @@ export async function scaffoldMochikitTestFiles(componentName, license, paths, j
|
|
|
50
50
|
await writeText(testFilePath, generateMochikitTestContent(componentName));
|
|
51
51
|
writtenFiles.push(testFileName);
|
|
52
52
|
}
|
|
53
|
-
// chrome.toml
|
|
54
|
-
// a fresh skeleton + entry. Idempotency: if the entry is already
|
|
55
|
-
// the manifest is left untouched so re-runs don't double-register.
|
|
53
|
+
// chrome.toml: append an entry if the file already exists, otherwise
|
|
54
|
+
// write a fresh skeleton + entry. Idempotency: if the entry is already
|
|
55
|
+
// present the manifest is left untouched so re-runs don't double-register.
|
|
56
56
|
const manifestPath = join(testDir, 'chrome.toml');
|
|
57
57
|
const entry = generateMochikitChromeTomlEntry(componentName);
|
|
58
58
|
if (await pathExists(manifestPath)) {
|