@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,7 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Minimal Markdown pipe-table parser/writer used by token-manager.
|
|
4
4
|
*
|
|
5
|
-
* This is
|
|
5
|
+
* This is not a general Markdown parser. It understands exactly the
|
|
6
6
|
* slice of GitHub-flavoured Markdown that FireForge emits into token docs:
|
|
7
7
|
*
|
|
8
8
|
* - Leading `|` per row, trailing `|` optional.
|
|
@@ -13,10 +13,10 @@
|
|
|
13
13
|
* - Literal `|` and `\` inside a cell are expressed as `\|` and `\\`
|
|
14
14
|
* respectively. The parser treats any other backslash as a literal
|
|
15
15
|
* so prose-style backslashes in cell values (e.g. a Windows path)
|
|
16
|
-
* still round-trip. Unescaping happens at split time
|
|
16
|
+
* still round-trip. Unescaping happens at split time. Serialization
|
|
17
17
|
* re-applies escapes so round-trips are exact for well-formed input.
|
|
18
18
|
*
|
|
19
|
-
* The parser returns
|
|
19
|
+
* The parser returns positional metadata (`startLine`, `endLine`) so
|
|
20
20
|
* callers can splice the table back into the surrounding document by
|
|
21
21
|
* range instead of hand-rolled line counters. Mutation operations return
|
|
22
22
|
* a fresh line array rather than mutating in place, matching the rest of
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
* Fallback tolerance: rows with more cells than the header get their
|
|
26
26
|
* overflow merged into the last column (using a literal `|` separator
|
|
27
27
|
* between the merged values). This is for the rare case where a FireForge
|
|
28
|
-
* writer emits an unescaped pipe
|
|
28
|
+
* writer emits an unescaped pipe. The parser still produces a consistent
|
|
29
29
|
* cell count rather than desynchronising the table. On re-serialize the
|
|
30
30
|
* merged cell's literal pipes are escaped, so a malformed input becomes
|
|
31
31
|
* a well-formed output after one round trip.
|
|
@@ -38,8 +38,8 @@
|
|
|
38
38
|
const SEPARATOR_ROW = /^\s*\|?\s*:?-+:?\s*(\|\s*:?-+:?\s*)+\|?\s*$/;
|
|
39
39
|
/**
|
|
40
40
|
* Returns `true` if the given line looks like a table row (starts with
|
|
41
|
-
* `|`, ignoring leading whitespace). Does not validate cell contents
|
|
42
|
-
*
|
|
41
|
+
* `|`, ignoring leading whitespace). Does not validate cell contents.
|
|
42
|
+
* That is the caller's job.
|
|
43
43
|
*/
|
|
44
44
|
function isPipeRow(line) {
|
|
45
45
|
return /^\s*\|/.test(line);
|
|
@@ -79,11 +79,11 @@ function splitRow(row) {
|
|
|
79
79
|
current += ch ?? '';
|
|
80
80
|
}
|
|
81
81
|
cells.push(current);
|
|
82
|
-
// Leading `|` gives an empty first segment
|
|
82
|
+
// Leading `|` gives an empty first segment, so drop it.
|
|
83
83
|
if (cells.length > 0 && cells[0] === '') {
|
|
84
84
|
cells.shift();
|
|
85
85
|
}
|
|
86
|
-
// Trailing `|` gives an empty last segment
|
|
86
|
+
// Trailing `|` gives an empty last segment, so drop it.
|
|
87
87
|
if (cells.length > 0 && cells[cells.length - 1] === '') {
|
|
88
88
|
cells.pop();
|
|
89
89
|
}
|
|
@@ -93,7 +93,7 @@ function splitRow(row) {
|
|
|
93
93
|
* Escapes a cell value so `serializeRow`'s pipe delimiters can be told
|
|
94
94
|
* apart from literal `|` inside a cell on re-parse. `\` is escaped first
|
|
95
95
|
* (to `\\`) so that the subsequent `|` → `\|` substitution cannot produce
|
|
96
|
-
* an already-escaped sequence by accident
|
|
96
|
+
* an already-escaped sequence by accident. A cell containing
|
|
97
97
|
* literal `\` followed by literal `|` round-trips as `\\\|`, which
|
|
98
98
|
* unescape-on-split reads back as `\` + `|`, not as `\|`.
|
|
99
99
|
*/
|
|
@@ -114,7 +114,7 @@ function fitRowToColumns(cells, columnCount) {
|
|
|
114
114
|
if (cells.length < columnCount) {
|
|
115
115
|
return [...cells, ...Array(columnCount - cells.length).fill('')];
|
|
116
116
|
}
|
|
117
|
-
// cells.length > columnCount
|
|
117
|
+
// cells.length > columnCount: merge overflow into the last column.
|
|
118
118
|
const kept = cells.slice(0, columnCount - 1);
|
|
119
119
|
const tail = cells.slice(columnCount - 1).join(' | ');
|
|
120
120
|
return [...kept, tail];
|
|
@@ -160,7 +160,7 @@ export function findNextTable(lines, fromLine) {
|
|
|
160
160
|
const rowLine = lines[j] ?? '';
|
|
161
161
|
if (!isPipeRow(rowLine))
|
|
162
162
|
break;
|
|
163
|
-
// Another separator line would signal a malformed table
|
|
163
|
+
// Another separator line would signal a malformed table, so bail.
|
|
164
164
|
if (SEPARATOR_ROW.test(rowLine))
|
|
165
165
|
break;
|
|
166
166
|
rows.push(fitRowToColumns(splitRow(rowLine), headers.length));
|
|
@@ -171,7 +171,7 @@ export function findNextTable(lines, fromLine) {
|
|
|
171
171
|
return null;
|
|
172
172
|
}
|
|
173
173
|
/**
|
|
174
|
-
* Returns the first table whose header contains
|
|
174
|
+
* Returns the first table whose header contains all of the provided
|
|
175
175
|
* column names (case-sensitive, order-insensitive). Useful when several
|
|
176
176
|
* pipe tables share a document and you want to select "the one with a
|
|
177
177
|
* Mode column".
|
|
@@ -190,7 +190,7 @@ export function findTableByColumns(lines, requiredColumns) {
|
|
|
190
190
|
}
|
|
191
191
|
}
|
|
192
192
|
/**
|
|
193
|
-
* Returns the first table that appears
|
|
193
|
+
* Returns the first table that appears after a heading matching the
|
|
194
194
|
* given regex. The heading regex is applied to raw lines (no trimming)
|
|
195
195
|
* so callers that want leading whitespace flexibility should include
|
|
196
196
|
* `^\s*` or `^#+\s*` as appropriate.
|
|
@@ -217,7 +217,7 @@ export function serializeRow(cells) {
|
|
|
217
217
|
}
|
|
218
218
|
/**
|
|
219
219
|
* Inserts a new row into `table.rows` at the given zero-based index. A
|
|
220
|
-
* negative index counts from the end
|
|
220
|
+
* negative index counts from the end. `Infinity` appends. Mutates the
|
|
221
221
|
* table object so callers using {@link rewriteTableRows} see the update.
|
|
222
222
|
*/
|
|
223
223
|
export function insertRow(table, cells, index) {
|
|
@@ -6,24 +6,24 @@ export declare const DEFAULT_MOCHITEST_SERVER_PORT = 8888;
|
|
|
6
6
|
* `server.js`, launched from an objdir.
|
|
7
7
|
*
|
|
8
8
|
* Both halves are required. `server.js` alone is one of the most common
|
|
9
|
-
* filenames
|
|
10
|
-
* be mistaken for harness debris and offered up for termination
|
|
11
|
-
* command line must
|
|
9
|
+
* filenames there is, and a developer's unrelated Node service must never
|
|
10
|
+
* be mistaken for harness debris and offered up for termination. So the
|
|
11
|
+
* command line must also show the xpcshell/objdir provenance that only the
|
|
12
12
|
* harness's httpd has.
|
|
13
13
|
*/
|
|
14
14
|
export declare function isMochitestServerHolder(holder: MarionettePortHolder): boolean;
|
|
15
15
|
/**
|
|
16
|
-
* Refuses a mochitest dispatch when the harness's server port is held
|
|
17
|
-
*
|
|
18
|
-
*
|
|
16
|
+
* Refuses a mochitest dispatch when the harness's server port is held. It
|
|
17
|
+
* terminates the holder first only for a recognized stale harness httpd,
|
|
18
|
+
* and only when the operator opted in.
|
|
19
19
|
*
|
|
20
|
-
* An
|
|
20
|
+
* An unrecognized listener is a refusal too, never a kill. Refusing is the
|
|
21
21
|
* kinder outcome: mochitest cannot bind the port either way, so the choice
|
|
22
22
|
* is between a one-line refusal now and a 370 s stall whose signature says
|
|
23
23
|
* nothing about ports. But FireForge has no business killing a process it
|
|
24
24
|
* cannot attribute to the harness.
|
|
25
25
|
*
|
|
26
|
-
* Best
|
|
26
|
+
* Best effort: {@link probeMarionettePort} reports an
|
|
27
27
|
* unprobeable port as free, so a host without `lsof` runs exactly as before.
|
|
28
28
|
*
|
|
29
29
|
* @param port - Port to probe (default {@link DEFAULT_MOCHITEST_SERVER_PORT})
|
|
@@ -4,23 +4,23 @@
|
|
|
4
4
|
*
|
|
5
5
|
* The mochitest harness serves its test manifest from an xpcshell-hosted
|
|
6
6
|
* httpd (`server.js`) on `127.0.0.1:8888`. When a previous run is killed
|
|
7
|
-
* between browser launch and teardown, that server can survive
|
|
8
|
-
* wedged at 100% CPU and unkillable by the harness's own SIGKILL
|
|
7
|
+
* between browser launch and teardown, that server can survive (sometimes
|
|
8
|
+
* wedged at 100% CPU and unkillable by the harness's own SIGKILL) and it
|
|
9
9
|
* keeps the port.
|
|
10
10
|
*
|
|
11
11
|
* The next run then does something much worse than failing: its fresh
|
|
12
|
-
* browser connects to the
|
|
12
|
+
* browser connects to the zombie server, which cannot serve the new
|
|
13
13
|
* manifest, so the run stalls between browser startup and `TEST_START` and
|
|
14
14
|
* dies on the 370 s no-output timeout with `Ran 0 checks`. Nothing in that
|
|
15
15
|
* signature names the port, so the failure survives fresh builds and reads
|
|
16
|
-
* as a defect in the change under test
|
|
16
|
+
* as a defect in the change under test. One downstream report spent a
|
|
17
17
|
* multi-hour bisect on it before `lsof -nP -iTCP:8888` gave the answer in
|
|
18
18
|
* one line.
|
|
19
19
|
*
|
|
20
20
|
* `--kill-stale-marionette` never covered this: it clears the browser and
|
|
21
21
|
* the Marionette control port, and the httpd is neither. This preflight is
|
|
22
|
-
* the missing half, and it
|
|
23
|
-
*
|
|
22
|
+
* the missing half, and it reuses {@link probeMarionettePort}, which is
|
|
23
|
+
* port-generic, rather than growing a second probe.
|
|
24
24
|
*/
|
|
25
25
|
import { GeneralError } from '../errors/base.js';
|
|
26
26
|
import { exec } from '../utils/process.js';
|
|
@@ -32,9 +32,9 @@ export const DEFAULT_MOCHITEST_SERVER_PORT = 8888;
|
|
|
32
32
|
* `server.js`, launched from an objdir.
|
|
33
33
|
*
|
|
34
34
|
* Both halves are required. `server.js` alone is one of the most common
|
|
35
|
-
* filenames
|
|
36
|
-
* be mistaken for harness debris and offered up for termination
|
|
37
|
-
* command line must
|
|
35
|
+
* filenames there is, and a developer's unrelated Node service must never
|
|
36
|
+
* be mistaken for harness debris and offered up for termination. So the
|
|
37
|
+
* command line must also show the xpcshell/objdir provenance that only the
|
|
38
38
|
* harness's httpd has.
|
|
39
39
|
*/
|
|
40
40
|
export function isMochitestServerHolder(holder) {
|
|
@@ -44,17 +44,17 @@ export function isMochitestServerHolder(holder) {
|
|
|
44
44
|
return /\bxpcshell\b/.test(line) || /\/obj-[^/\s]*\//.test(line) || /\b_tests\b/.test(line);
|
|
45
45
|
}
|
|
46
46
|
/**
|
|
47
|
-
* Refuses a mochitest dispatch when the harness's server port is held
|
|
48
|
-
*
|
|
49
|
-
*
|
|
47
|
+
* Refuses a mochitest dispatch when the harness's server port is held. It
|
|
48
|
+
* terminates the holder first only for a recognized stale harness httpd,
|
|
49
|
+
* and only when the operator opted in.
|
|
50
50
|
*
|
|
51
|
-
* An
|
|
51
|
+
* An unrecognized listener is a refusal too, never a kill. Refusing is the
|
|
52
52
|
* kinder outcome: mochitest cannot bind the port either way, so the choice
|
|
53
53
|
* is between a one-line refusal now and a 370 s stall whose signature says
|
|
54
54
|
* nothing about ports. But FireForge has no business killing a process it
|
|
55
55
|
* cannot attribute to the harness.
|
|
56
56
|
*
|
|
57
|
-
* Best
|
|
57
|
+
* Best effort: {@link probeMarionettePort} reports an
|
|
58
58
|
* unprobeable port as free, so a host without `lsof` runs exactly as before.
|
|
59
59
|
*
|
|
60
60
|
* @param port - Port to probe (default {@link DEFAULT_MOCHITEST_SERVER_PORT})
|
|
@@ -100,8 +100,8 @@ export function describeMochitestServerRefusal(port, holder, recognized) {
|
|
|
100
100
|
const killHint = process.platform === 'win32'
|
|
101
101
|
? `Stop-Process -Id ${holder.pid} -Force`
|
|
102
102
|
: `kill -9 ${holder.pid}`;
|
|
103
|
-
const evidence = `The mochitest server port ${
|
|
104
|
-
`(PID ${
|
|
103
|
+
const evidence = `The mochitest server port ${port} is already held by ${holder.command} ` +
|
|
104
|
+
`(PID ${holder.pid}).\n` +
|
|
105
105
|
` command: ${holder.commandLine}\n` +
|
|
106
106
|
" A browser launched now would connect to THAT server, which cannot serve this run's " +
|
|
107
107
|
'manifest — the run would stall before TEST_START and die on the no-output timeout with ' +
|
|
@@ -115,5 +115,5 @@ export function describeMochitestServerRefusal(port, holder, recognized) {
|
|
|
115
115
|
return (evidence +
|
|
116
116
|
" This is NOT the mochitest harness's server.js, so FireForge will not offer to kill it. " +
|
|
117
117
|
`Stop the holder yourself with "${killHint}" if it is yours, or free the port, then retry. ` +
|
|
118
|
-
`Diagnose with "lsof -nP -iTCP:${
|
|
118
|
+
`Diagnose with "lsof -nP -iTCP:${port}".`);
|
|
119
119
|
}
|
|
@@ -3,20 +3,20 @@
|
|
|
3
3
|
*
|
|
4
4
|
* An `.sys.mjs` that a packaged module imports but whose `EXTRA_JS_MODULES`
|
|
5
5
|
* registration never landed kills every xpcshell suite with `xpcshell return
|
|
6
|
-
* code: -11` and
|
|
6
|
+
* code: -11` and no output at all: no import error, no stack, nothing. The
|
|
7
7
|
* queue-level `unregistered-system-module` check catches one shape of this:
|
|
8
|
-
* a module
|
|
9
|
-
*
|
|
10
|
-
* lines land
|
|
8
|
+
* a module newly created by a patch in the projected queue. The other shape,
|
|
9
|
+
* modules imported from an already-existing module before their moz.build
|
|
10
|
+
* lines land, slips past it entirely.
|
|
11
11
|
*
|
|
12
|
-
* This preflight closes that gap by asking the question against the
|
|
12
|
+
* This preflight closes that gap by asking the question against the engine
|
|
13
13
|
* rather than against a projected diff: for every `resource:///modules/…`
|
|
14
14
|
* specifier imported by any queue-owned module, does the module it names
|
|
15
15
|
* exist, and is it registered in a moz.build that covers it?
|
|
16
16
|
*
|
|
17
17
|
* Scope is the queue-owned file set on purpose. A specifier that resolves to
|
|
18
|
-
* no owned file is an
|
|
19
|
-
* police and cannot cheaply enumerate
|
|
18
|
+
* no owned file is an upstream Firefox module, which FireForge does not
|
|
19
|
+
* police and cannot cheaply enumerate. Policing only what the fork owns is
|
|
20
20
|
* both the actionable set and the one that produces real incidents.
|
|
21
21
|
*/
|
|
22
22
|
/** Why a queue-owned module import does not resolve to a packaged module. */
|
|
@@ -38,7 +38,7 @@ export interface UnresolvedModuleImport {
|
|
|
38
38
|
*
|
|
39
39
|
* @param engineDir - Path to the engine checkout
|
|
40
40
|
* @param ownedFiles - Engine-relative paths the patch queue owns
|
|
41
|
-
* @returns Findings sorted by module path
|
|
41
|
+
* @returns Findings sorted by module path. Empty when everything resolves
|
|
42
42
|
*/
|
|
43
43
|
export declare function findUnresolvedSystemModuleImports(engineDir: string, ownedFiles: readonly string[]): Promise<UnresolvedModuleImport[]>;
|
|
44
44
|
/**
|
|
@@ -4,20 +4,20 @@
|
|
|
4
4
|
*
|
|
5
5
|
* An `.sys.mjs` that a packaged module imports but whose `EXTRA_JS_MODULES`
|
|
6
6
|
* registration never landed kills every xpcshell suite with `xpcshell return
|
|
7
|
-
* code: -11` and
|
|
7
|
+
* code: -11` and no output at all: no import error, no stack, nothing. The
|
|
8
8
|
* queue-level `unregistered-system-module` check catches one shape of this:
|
|
9
|
-
* a module
|
|
10
|
-
*
|
|
11
|
-
* lines land
|
|
9
|
+
* a module newly created by a patch in the projected queue. The other shape,
|
|
10
|
+
* modules imported from an already-existing module before their moz.build
|
|
11
|
+
* lines land, slips past it entirely.
|
|
12
12
|
*
|
|
13
|
-
* This preflight closes that gap by asking the question against the
|
|
13
|
+
* This preflight closes that gap by asking the question against the engine
|
|
14
14
|
* rather than against a projected diff: for every `resource:///modules/…`
|
|
15
15
|
* specifier imported by any queue-owned module, does the module it names
|
|
16
16
|
* exist, and is it registered in a moz.build that covers it?
|
|
17
17
|
*
|
|
18
18
|
* Scope is the queue-owned file set on purpose. A specifier that resolves to
|
|
19
|
-
* no owned file is an
|
|
20
|
-
* police and cannot cheaply enumerate
|
|
19
|
+
* no owned file is an upstream Firefox module, which FireForge does not
|
|
20
|
+
* police and cannot cheaply enumerate. Policing only what the fork owns is
|
|
21
21
|
* both the actionable set and the one that produces real incidents.
|
|
22
22
|
*/
|
|
23
23
|
import { dirname, join } from 'node:path';
|
|
@@ -47,7 +47,7 @@ async function readIfPresent(path) {
|
|
|
47
47
|
* True when some `moz.build` at or above `moduleRelPath`'s directory (up
|
|
48
48
|
* to, and including, the engine root) mentions the module's basename.
|
|
49
49
|
*
|
|
50
|
-
* Walking ancestors
|
|
50
|
+
* Walking ancestors, rather than checking only the sibling `moz.build`,
|
|
51
51
|
* matches how Mozilla's build system actually works: a module list may sit
|
|
52
52
|
* in a parent directory's `moz.build` with a path-qualified entry. The
|
|
53
53
|
* check is a quoted-basename match for the same reason the queue-level
|
|
@@ -59,7 +59,7 @@ async function isRegisteredInAncestorMozBuild(engineDir, moduleRelPath, mozBuild
|
|
|
59
59
|
// The entry may be the bare basename (`"Foo.sys.mjs"`, sibling
|
|
60
60
|
// moz.build) or path-qualified relative to the moz.build that declares
|
|
61
61
|
// it (`"sub/Foo.sys.mjs"`, ancestor moz.build). Both are the same
|
|
62
|
-
// registration
|
|
62
|
+
// registration. Anchor on the closing quote and require a path boundary
|
|
63
63
|
// so `NotFoo.sys.mjs` cannot satisfy `Foo.sys.mjs`.
|
|
64
64
|
const quotedLeaf = new RegExp(`["'](?:[^"']*/)?${escapeRegex(leaf)}["']`);
|
|
65
65
|
let dir = dirname(moduleRelPath);
|
|
@@ -86,7 +86,7 @@ async function isRegisteredInAncestorMozBuild(engineDir, moduleRelPath, mozBuild
|
|
|
86
86
|
*
|
|
87
87
|
* @param engineDir - Path to the engine checkout
|
|
88
88
|
* @param ownedFiles - Engine-relative paths the patch queue owns
|
|
89
|
-
* @returns Findings sorted by module path
|
|
89
|
+
* @returns Findings sorted by module path. Empty when everything resolves
|
|
90
90
|
*/
|
|
91
91
|
export async function findUnresolvedSystemModuleImports(engineDir, ownedFiles) {
|
|
92
92
|
const owned = [...new Set(ownedFiles)];
|
|
@@ -110,7 +110,7 @@ export async function findUnresolvedSystemModuleImports(engineDir, ownedFiles) {
|
|
|
110
110
|
const suffix = moduleSourceSuffix(specifier);
|
|
111
111
|
if (suffix === undefined)
|
|
112
112
|
continue;
|
|
113
|
-
// Only fork-owned targets are policed
|
|
113
|
+
// Only fork-owned targets are policed. Anything else is upstream.
|
|
114
114
|
const target = owned.find((file) => file.endsWith(suffix));
|
|
115
115
|
if (target === undefined)
|
|
116
116
|
continue;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { MozBuildToken } from './moz-manifest-tokenizers.js';
|
|
2
2
|
/**
|
|
3
3
|
* Ordering comparator matching mozbuild's `StrictOrderingOnAppendList`
|
|
4
|
-
* (`mozbuild.util.UnsortedError`): entries are compared
|
|
4
|
+
* (`mozbuild.util.UnsortedError`): entries are compared case-insensitively,
|
|
5
5
|
* so `HominisAppearanceController` (`appe`) sorts before
|
|
6
6
|
* `HominisAppMenuIntegration` (`appm`) even though a raw byte comparison
|
|
7
7
|
* places the uppercase `M` (0x4D) before the lowercase `e` (0x65).
|
|
@@ -26,11 +26,11 @@ export declare function findAlphabeticalMozBuildPosition(tokens: MozBuildToken[]
|
|
|
26
26
|
*
|
|
27
27
|
* Shared by the two jar.mn registrars (browser content, shared CSS), which
|
|
28
28
|
* differ only in the sort pattern, the sort key and the "could not find the
|
|
29
|
-
* section" message, so the anchor-fallback semantics
|
|
30
|
-
* rather than
|
|
31
|
-
*
|
|
29
|
+
* section" message, so the anchor-fallback semantics are defined once:
|
|
30
|
+
* silently fall back rather than refuse, and report `afterFallback` so the
|
|
31
|
+
* caller can say so.
|
|
32
32
|
*
|
|
33
|
-
*
|
|
33
|
+
* This helper is jar.mn-specific: the moz.build list form has no `after` anchor
|
|
34
34
|
* and no section concept, so a single generic helper over both families
|
|
35
35
|
* would carry parameters that are meaningless on one side. See
|
|
36
36
|
* {@link insertMozBuildListEntry} for its twin.
|
|
@@ -58,11 +58,11 @@ export declare function insertJarMnEntry(content: string, entry: string, options
|
|
|
58
58
|
* manifests), which differ only in the list pattern, the sort key and the
|
|
59
59
|
* refusal message.
|
|
60
60
|
*
|
|
61
|
-
* `tokenizeMozBuildList`
|
|
61
|
+
* `tokenizeMozBuildList` mutates `lines` in place when it normalizes the
|
|
62
62
|
* single-line `FOO += []` form into the multi-line shape, and that rewrite is
|
|
63
63
|
* what makes the caller's `splice` land inside the list body. The splice
|
|
64
64
|
* below therefore has to run against the same array the tokenizer was
|
|
65
|
-
* handed
|
|
65
|
+
* handed. A wrapper that tokenized a copy would silently break it.
|
|
66
66
|
*
|
|
67
67
|
* @param content - Full moz.build text
|
|
68
68
|
* @param entry - The already-formatted line to insert
|
|
@@ -4,7 +4,7 @@ import { escapeRegex } from '../utils/regex.js';
|
|
|
4
4
|
import { tokenizeJarMn, tokenizeMozBuildList } from './moz-manifest-tokenizers.js';
|
|
5
5
|
/**
|
|
6
6
|
* Ordering comparator matching mozbuild's `StrictOrderingOnAppendList`
|
|
7
|
-
* (`mozbuild.util.UnsortedError`): entries are compared
|
|
7
|
+
* (`mozbuild.util.UnsortedError`): entries are compared case-insensitively,
|
|
8
8
|
* so `HominisAppearanceController` (`appe`) sorts before
|
|
9
9
|
* `HominisAppMenuIntegration` (`appm`) even though a raw byte comparison
|
|
10
10
|
* places the uppercase `M` (0x4D) before the lowercase `e` (0x65).
|
|
@@ -91,11 +91,11 @@ export function findAlphabeticalMozBuildPosition(tokens, newKey) {
|
|
|
91
91
|
*
|
|
92
92
|
* Shared by the two jar.mn registrars (browser content, shared CSS), which
|
|
93
93
|
* differ only in the sort pattern, the sort key and the "could not find the
|
|
94
|
-
* section" message, so the anchor-fallback semantics
|
|
95
|
-
* rather than
|
|
96
|
-
*
|
|
94
|
+
* section" message, so the anchor-fallback semantics are defined once:
|
|
95
|
+
* silently fall back rather than refuse, and report `afterFallback` so the
|
|
96
|
+
* caller can say so.
|
|
97
97
|
*
|
|
98
|
-
*
|
|
98
|
+
* This helper is jar.mn-specific: the moz.build list form has no `after` anchor
|
|
99
99
|
* and no section concept, so a single generic helper over both families
|
|
100
100
|
* would carry parameters that are meaningless on one side. See
|
|
101
101
|
* {@link insertMozBuildListEntry} for its twin.
|
|
@@ -140,11 +140,11 @@ export function insertJarMnEntry(content, entry, options) {
|
|
|
140
140
|
* manifests), which differ only in the list pattern, the sort key and the
|
|
141
141
|
* refusal message.
|
|
142
142
|
*
|
|
143
|
-
* `tokenizeMozBuildList`
|
|
143
|
+
* `tokenizeMozBuildList` mutates `lines` in place when it normalizes the
|
|
144
144
|
* single-line `FOO += []` form into the multi-line shape, and that rewrite is
|
|
145
145
|
* what makes the caller's `splice` land inside the list body. The splice
|
|
146
146
|
* below therefore has to run against the same array the tokenizer was
|
|
147
|
-
* handed
|
|
147
|
+
* handed. A wrapper that tokenized a copy would silently break it.
|
|
148
148
|
*
|
|
149
149
|
* @param content - Full moz.build text
|
|
150
150
|
* @param entry - The already-formatted line to insert
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Manifest registration barrel
|
|
2
|
+
* Manifest registration barrel. Re-exports all registration targets
|
|
3
3
|
* and the shared RegisterResult interface (which lives in
|
|
4
4
|
* `register-result.ts` so the leaf modules can import it without
|
|
5
5
|
* creating a cycle through this barrel).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
2
|
/**
|
|
3
|
-
* Manifest registration barrel
|
|
3
|
+
* Manifest registration barrel. Re-exports all registration targets
|
|
4
4
|
* and the shared RegisterResult interface (which lives in
|
|
5
5
|
* `register-result.ts` so the leaf modules can import it without
|
|
6
6
|
* creating a cycle through this barrel).
|
|
@@ -15,7 +15,7 @@ export { deregisterTestManifest, registerTestManifest } from './register-browser
|
|
|
15
15
|
export { registerFireForgeModule } from './register-module.js';
|
|
16
16
|
export { registerSharedCSS } from './register-shared-css.js';
|
|
17
17
|
// ---------------------------------------------------------------------------
|
|
18
|
-
// toolkit/content/jar.mn
|
|
18
|
+
// toolkit/content/jar.mn: widget registration
|
|
19
19
|
// ---------------------------------------------------------------------------
|
|
20
20
|
/**
|
|
21
21
|
* Registers a widget file (mjs or css) in toolkit/content/jar.mn.
|
|
@@ -3,6 +3,7 @@ import { basename, join } from 'node:path';
|
|
|
3
3
|
import { GeneralError, InvalidArgumentError } from '../errors/base.js';
|
|
4
4
|
import { pathExists, readText } from '../utils/fs.js';
|
|
5
5
|
import { warn } from '../utils/logger.js';
|
|
6
|
+
import { normalizePathSlashes } from '../utils/paths.js';
|
|
6
7
|
import { escapeRegex } from '../utils/regex.js';
|
|
7
8
|
import { getProjectPaths, loadConfig } from './config.js';
|
|
8
9
|
import { registerBrowserContent, registerFireForgeModule, registerSharedCSS, registerTestManifest, registerToolkitWidget, } from './moz-manifest-register.js';
|
|
@@ -25,8 +26,8 @@ export function getRules(binaryName, createManifest = false) {
|
|
|
25
26
|
supportsAfter: true,
|
|
26
27
|
},
|
|
27
28
|
{
|
|
28
|
-
// `.inc.xhtml` fragments under browser/base/content/ are
|
|
29
|
-
//
|
|
29
|
+
// `.inc.xhtml` fragments under browser/base/content/ are excluded on
|
|
30
|
+
// purpose: they are consumed via `#include` from a registered chrome
|
|
30
31
|
// document (typically browser.xhtml) and do not get their own packaged
|
|
31
32
|
// chrome URI. Without the carve-out, `status` flags every wired
|
|
32
33
|
// fragment as "potentially unregistered" and `register --dry-run`
|
|
@@ -45,8 +46,8 @@ export function getRules(binaryName, createManifest = false) {
|
|
|
45
46
|
supportsAfter: true,
|
|
46
47
|
},
|
|
47
48
|
{
|
|
48
|
-
// Fork-owned browser.toml manifests at
|
|
49
|
-
// browser/base/content/test
|
|
49
|
+
// Fork-owned browser.toml manifests at any depth under
|
|
50
|
+
// browser/base/content/test/. A one-level pattern rejects nested
|
|
50
51
|
// browser-chrome manifests.
|
|
51
52
|
pattern: /^browser\/base\/content\/test\/((?:[^/]+\/)*[^/]+)\/browser\.toml$/,
|
|
52
53
|
isRegistered: (_engineDir, testDir) => isTestManifestRegistered(_engineDir, testDir),
|
|
@@ -72,66 +73,69 @@ export function getRules(binaryName, createManifest = false) {
|
|
|
72
73
|
// xpcshell test files. Any `test_*.js` outside
|
|
73
74
|
// browser/base/content/test/ (which stays browser-chrome territory
|
|
74
75
|
// with its browser.toml guidance) registers into the directory's
|
|
75
|
-
// xpcshell.toml
|
|
76
|
+
// xpcshell.toml. With --create-manifest a missing manifest is
|
|
76
77
|
// scaffolded and wired via XPCSHELL_TESTS_MANIFESTS.
|
|
77
78
|
pattern: /^(?!browser\/base\/content\/test\/)(.+)\/(test_[^/]+\.js)$/,
|
|
78
79
|
isRegistered: (engineDir, dirRel, fileName) => isXpcshellTestRegistered(engineDir, dirRel, fileName),
|
|
79
80
|
register: (engineDir, _after, dryRun, dirRel, fileName) => registerXpcshellTest(engineDir, dirRel, fileName, dryRun, createManifest),
|
|
80
|
-
// Both groups are guaranteed by the pattern
|
|
81
|
+
// Both groups are guaranteed by the pattern, so slice avoids dead
|
|
81
82
|
// fallback branches.
|
|
82
83
|
extractArgs: (m) => m.slice(1, 3),
|
|
83
84
|
supportsAfter: false,
|
|
84
85
|
},
|
|
85
86
|
];
|
|
86
87
|
}
|
|
87
|
-
|
|
88
|
-
|
|
88
|
+
/**
|
|
89
|
+
* Reads an engine manifest and reports whether it contains any of `needles`.
|
|
90
|
+
*
|
|
91
|
+
* The five registration probes below share this shape: resolve the manifest
|
|
92
|
+
* relative to the engine, refuse with the manifest's own path when it is
|
|
93
|
+
* missing, then substring-match the entry each registrar writes.
|
|
94
|
+
*
|
|
95
|
+
* @param engineDir - Path to the engine directory
|
|
96
|
+
* @param manifestRel - Engine-relative manifest path (forward slashes, and
|
|
97
|
+
* also the path named in the refusal message)
|
|
98
|
+
* @param needles - Entry forms that count as registered
|
|
99
|
+
* @returns True when the manifest contains at least one needle
|
|
100
|
+
* @throws GeneralError when the manifest does not exist
|
|
101
|
+
*/
|
|
102
|
+
async function manifestIncludes(engineDir, manifestRel, needles) {
|
|
103
|
+
const manifestPath = join(engineDir, manifestRel);
|
|
89
104
|
if (!(await pathExists(manifestPath))) {
|
|
90
|
-
throw new GeneralError(
|
|
105
|
+
throw new GeneralError(`Manifest not found: ${manifestRel}`);
|
|
91
106
|
}
|
|
92
|
-
const name = basename(fileName, '.css');
|
|
93
107
|
const content = await readText(manifestPath);
|
|
94
|
-
|
|
108
|
+
return needles.some((needle) => content.includes(needle));
|
|
109
|
+
}
|
|
110
|
+
async function isSharedCSSRegistered(engineDir, fileName) {
|
|
111
|
+
const name = basename(fileName, '.css');
|
|
112
|
+
// `register` writes the canonical `skin/classic/browser/<name>.css` form.
|
|
95
113
|
// `furnace chrome-doc create` writes a `content/browser/<name>.css` entry
|
|
96
114
|
// because the CSS is loaded by a chrome document via a `chrome://browser/
|
|
97
115
|
// content/<name>.css` URI. Match either prefix so paths registered by the
|
|
98
116
|
// chrome-doc scaffolder are not flagged as "potentially unregistered" by
|
|
99
117
|
// `status` and so a re-run of `register` against the same file recognises
|
|
100
118
|
// the existing entry instead of proposing a duplicate.
|
|
101
|
-
return (
|
|
102
|
-
|
|
119
|
+
return manifestIncludes(engineDir, 'browser/themes/shared/jar.inc.mn', [
|
|
120
|
+
`skin/classic/browser/${name}.css`,
|
|
121
|
+
`content/browser/${name}.css`,
|
|
122
|
+
]);
|
|
103
123
|
}
|
|
104
124
|
async function isBrowserContentRegistered(engineDir, fileName) {
|
|
105
|
-
|
|
106
|
-
if (!(await pathExists(manifestPath))) {
|
|
107
|
-
throw new GeneralError('Manifest not found: browser/base/jar.mn');
|
|
108
|
-
}
|
|
109
|
-
const content = await readText(manifestPath);
|
|
110
|
-
return content.includes(`content/browser/${fileName}`);
|
|
125
|
+
return manifestIncludes(engineDir, 'browser/base/jar.mn', [`content/browser/${fileName}`]);
|
|
111
126
|
}
|
|
112
127
|
async function isTestManifestRegistered(engineDir, testDir) {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
}
|
|
117
|
-
const content = await readText(manifestPath);
|
|
118
|
-
return content.includes(`content/test/${testDir}/browser.toml`);
|
|
128
|
+
return manifestIncludes(engineDir, 'browser/base/moz.build', [
|
|
129
|
+
`content/test/${testDir}/browser.toml`,
|
|
130
|
+
]);
|
|
119
131
|
}
|
|
120
132
|
async function isFireForgeModuleRegistered(engineDir, fileName, moduleDir) {
|
|
121
|
-
|
|
122
|
-
if (!(await pathExists(manifestPath))) {
|
|
123
|
-
throw new GeneralError(`Manifest not found: ${moduleDir}/moz.build`);
|
|
124
|
-
}
|
|
125
|
-
const content = await readText(manifestPath);
|
|
126
|
-
return content.includes(`"${fileName}"`);
|
|
133
|
+
return manifestIncludes(engineDir, `${moduleDir}/moz.build`, [`"${fileName}"`]);
|
|
127
134
|
}
|
|
128
135
|
async function isToolkitWidgetRegistered(engineDir, _tagName, fileName) {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
}
|
|
133
|
-
const content = await readText(manifestPath);
|
|
134
|
-
return content.includes(`content/global/elements/${fileName}`);
|
|
136
|
+
return manifestIncludes(engineDir, 'toolkit/content/jar.mn', [
|
|
137
|
+
`content/global/elements/${fileName}`,
|
|
138
|
+
]);
|
|
135
139
|
}
|
|
136
140
|
/**
|
|
137
141
|
* Checks if a file path matches any known registrable pattern.
|
|
@@ -140,7 +144,7 @@ async function isToolkitWidgetRegistered(engineDir, _tagName, fileName) {
|
|
|
140
144
|
* @returns True if the file matches a known registration pattern
|
|
141
145
|
*/
|
|
142
146
|
export function matchesRegistrablePattern(filePath, binaryName) {
|
|
143
|
-
const normalized = filePath
|
|
147
|
+
const normalized = normalizePathSlashes(filePath);
|
|
144
148
|
const rules = getRules(binaryName);
|
|
145
149
|
return rules.some((rule) => rule.pattern.test(normalized));
|
|
146
150
|
}
|
|
@@ -151,7 +155,7 @@ function getUnregistrableAdvice(filePath) {
|
|
|
151
155
|
}
|
|
152
156
|
// `.inc.xhtml` fragments live under browser/base/content/ but are
|
|
153
157
|
// consumed via `#include` from a registered chrome document (browser.xhtml
|
|
154
|
-
// by default
|
|
158
|
+
// by default, or a fork's custom top-level doc when `wire --dom-target` is
|
|
155
159
|
// set). The preprocessor resolves the include at packaging time, so the
|
|
156
160
|
// fragment never needs its own chrome URI entry in jar.mn. Give the
|
|
157
161
|
// operator the actionable `wire` path instead of letting the generic
|
|
@@ -165,7 +169,7 @@ function getUnregistrableAdvice(filePath) {
|
|
|
165
169
|
// xpcshell.toml manifests scaffolded by `furnace create --test-style
|
|
166
170
|
// xpcshell` or `furnace chrome-doc create --with-tests` live under
|
|
167
171
|
// `browser/base/content/test/<binary-name>-xpcshell/<component>/`. The
|
|
168
|
-
// scaffold
|
|
172
|
+
// scaffold does not auto-register, because wiring
|
|
169
173
|
// `XPCSHELL_TESTS_MANIFESTS` requires a deliberate choice about which
|
|
170
174
|
// moz.build should own the entry. `register` surfaces that same guidance
|
|
171
175
|
// instead of falling through to browser.toml-centric advice for a path
|
|
@@ -197,7 +201,7 @@ export async function isFileRegistered(root, filePath) {
|
|
|
197
201
|
const { engine: engineDir } = getProjectPaths(root);
|
|
198
202
|
const config = await loadConfig(root);
|
|
199
203
|
const rules = getRules(config.binaryName);
|
|
200
|
-
const normalizedPath = filePath
|
|
204
|
+
const normalizedPath = normalizePathSlashes(filePath);
|
|
201
205
|
for (const rule of rules) {
|
|
202
206
|
const match = normalizedPath.match(rule.pattern);
|
|
203
207
|
if (match) {
|
|
@@ -237,7 +241,7 @@ export async function registerFile(root, filePath, dryRun = false, after, option
|
|
|
237
241
|
const config = await loadConfig(root);
|
|
238
242
|
const rules = getRules(config.binaryName, options.createManifest === true);
|
|
239
243
|
// Normalize path separators
|
|
240
|
-
const normalizedPath = filePath
|
|
244
|
+
const normalizedPath = normalizePathSlashes(filePath);
|
|
241
245
|
for (const rule of rules) {
|
|
242
246
|
const match = normalizedPath.match(rule.pattern);
|
|
243
247
|
if (match) {
|
|
@@ -59,7 +59,7 @@ export function tokenizeMozBuildList(lines, listPattern) {
|
|
|
59
59
|
if (listPattern.test(raw)) {
|
|
60
60
|
// Single-line empty-list handling: a fresh scaffold sometimes
|
|
61
61
|
// writes `EXTRA_JS_MODULES += []` on one line, which a tokenizer
|
|
62
|
-
// looking for a line starting with `]` never closes
|
|
62
|
+
// looking for a line starting with `]` never closes, leaving
|
|
63
63
|
// `register` with a "Could not find module list section" error
|
|
64
64
|
// against the documented browser/modules/<fork>/ scaffold.
|
|
65
65
|
//
|