@hominis/fireforge 0.46.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 +381 -498
- package/dist/bin/fireforge.d.ts +1 -1
- package/dist/bin/fireforge.js +17 -17
- package/dist/build-info.json +4 -4
- package/dist/src/cli-usage-error.d.ts +9 -9
- package/dist/src/cli-usage-error.js +12 -12
- package/dist/src/cli.d.ts +3 -2
- package/dist/src/cli.js +29 -28
- package/dist/src/commands/bootstrap-checks.js +2 -1
- package/dist/src/commands/bootstrap.js +2 -2
- package/dist/src/commands/build.js +12 -11
- package/dist/src/commands/config.js +9 -9
- package/dist/src/commands/destructive-decision.d.ts +4 -4
- package/dist/src/commands/destructive-decision.js +4 -4
- package/dist/src/commands/discard.js +5 -5
- package/dist/src/commands/doctor-check-core.d.ts +4 -4
- 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 -11
- package/dist/src/commands/doctor-orphaned-harness.js +10 -11
- 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 +2 -2
- 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 +2 -2
- package/dist/src/commands/doctor.js +9 -9
- package/dist/src/commands/download.js +15 -13
- package/dist/src/commands/export-all.js +8 -8
- package/dist/src/commands/export-flow.d.ts +5 -5
- package/dist/src/commands/export-flow.js +14 -14
- package/dist/src/commands/export-placement-conflicts.d.ts +3 -3
- package/dist/src/commands/export-placement-conflicts.js +9 -9
- package/dist/src/commands/export-placement-gate.d.ts +2 -2
- package/dist/src/commands/export-placement-gate.js +5 -5
- package/dist/src/commands/export-placement-policy.d.ts +1 -1
- package/dist/src/commands/export-placement-policy.js +1 -1
- package/dist/src/commands/export-shared.d.ts +10 -10
- package/dist/src/commands/export-shared.js +13 -13
- package/dist/src/commands/export.js +4 -4
- package/dist/src/commands/furnace/apply.js +16 -16
- package/dist/src/commands/furnace/chrome-doc-remove.d.ts +1 -1
- package/dist/src/commands/furnace/chrome-doc-remove.js +1 -1
- 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 +4 -4
- package/dist/src/commands/furnace/create-dry-run.d.ts +4 -4
- package/dist/src/commands/furnace/create-dry-run.js +4 -4
- 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 +14 -14
- package/dist/src/commands/furnace/create-templates.js +18 -18
- 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 +10 -10
- package/dist/src/commands/furnace/deploy.js +4 -4
- 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 +15 -15
- 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 +15 -15
- package/dist/src/commands/furnace/preview.js +17 -17
- package/dist/src/commands/furnace/refresh.js +6 -6
- package/dist/src/commands/furnace/remove-mutations.d.ts +3 -3
- package/dist/src/commands/furnace/remove-mutations.js +19 -18
- 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 +2 -2
- package/dist/src/commands/furnace/rename-browser-test.js +9 -8
- 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 +9 -9
- package/dist/src/commands/furnace/scan.js +3 -3
- package/dist/src/commands/furnace/status.js +7 -7
- package/dist/src/commands/furnace/sync.js +6 -6
- package/dist/src/commands/furnace/test-file-name.d.ts +2 -2
- package/dist/src/commands/furnace/test-file-name.js +2 -2
- package/dist/src/commands/furnace/validate.js +11 -12
- package/dist/src/commands/import.js +20 -20
- package/dist/src/commands/lint-per-patch.js +8 -8
- package/dist/src/commands/lint-per-run-checkjs.d.ts +12 -13
- 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 +3 -3
- package/dist/src/commands/lint.js +35 -35
- package/dist/src/commands/manifest.d.ts +4 -4
- package/dist/src/commands/package.js +2 -2
- package/dist/src/commands/patch/compact.d.ts +2 -2
- package/dist/src/commands/patch/compact.js +8 -8
- package/dist/src/commands/patch/delete.d.ts +1 -1
- package/dist/src/commands/patch/delete.js +8 -8
- package/dist/src/commands/patch/lint-ignore.d.ts +3 -4
- package/dist/src/commands/patch/lint-ignore.js +14 -15
- package/dist/src/commands/patch/move-files-create.d.ts +2 -2
- package/dist/src/commands/patch/move-files-create.js +5 -5
- package/dist/src/commands/patch/move-files-into.d.ts +2 -2
- package/dist/src/commands/patch/move-files-into.js +3 -3
- package/dist/src/commands/patch/move-files.js +1 -1
- 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 +8 -8
- package/dist/src/commands/patch/reorder.js +10 -10
- package/dist/src/commands/patch/split-plan.d.ts +3 -3
- package/dist/src/commands/patch/split-plan.js +6 -5
- package/dist/src/commands/patch/split.d.ts +2 -2
- package/dist/src/commands/patch/split.js +5 -5
- 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 +6 -6
- package/dist/src/commands/patch/tier.d.ts +2 -2
- package/dist/src/commands/patch/tier.js +5 -5
- package/dist/src/commands/patch-rename-map.d.ts +1 -1
- package/dist/src/commands/patch-rename-map.js +1 -1
- package/dist/src/commands/pending-resolution.d.ts +5 -5
- package/dist/src/commands/pending-resolution.js +5 -5
- package/dist/src/commands/re-export-adjacent.d.ts +3 -3
- package/dist/src/commands/re-export-adjacent.js +8 -8
- package/dist/src/commands/re-export-bulk-scan.d.ts +3 -3
- package/dist/src/commands/re-export-bulk-scan.js +17 -17
- package/dist/src/commands/re-export-drift.d.ts +10 -10
- package/dist/src/commands/re-export-drift.js +29 -29
- package/dist/src/commands/re-export-files.js +14 -15
- package/dist/src/commands/re-export-lint.d.ts +26 -26
- package/dist/src/commands/re-export-lint.js +27 -27
- 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 +7 -7
- package/dist/src/commands/re-export-single.d.ts +1 -1
- package/dist/src/commands/re-export-single.js +20 -20
- package/dist/src/commands/re-export.js +7 -6
- package/dist/src/commands/rebase/abort.js +6 -6
- package/dist/src/commands/rebase/continue.js +8 -7
- package/dist/src/commands/rebase/index.d.ts +1 -1
- package/dist/src/commands/rebase/index.js +3 -3
- package/dist/src/commands/rebase/patch-loop.js +18 -17
- 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 +3 -3
- package/dist/src/commands/run.js +26 -26
- package/dist/src/commands/setup-support.js +4 -4
- package/dist/src/commands/setup.js +1 -1
- package/dist/src/commands/source.js +1 -1
- package/dist/src/commands/status-check.d.ts +3 -3
- package/dist/src/commands/status-check.js +4 -4
- 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 +3 -3
- 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 +22 -22
- package/dist/src/commands/test-build-phase.d.ts +1 -1
- package/dist/src/commands/test-build-phase.js +17 -17
- 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 +2 -2
- package/dist/src/commands/test-modes.js +4 -4
- package/dist/src/commands/test-run.d.ts +11 -11
- package/dist/src/commands/test-run.js +15 -15
- package/dist/src/commands/test-stale-gate.d.ts +12 -12
- package/dist/src/commands/test-stale-gate.js +13 -13
- package/dist/src/commands/test-verdict.d.ts +6 -6
- package/dist/src/commands/test-verdict.js +11 -11
- package/dist/src/commands/test.d.ts +3 -3
- package/dist/src/commands/test.js +36 -36
- package/dist/src/commands/token-coverage.js +3 -3
- package/dist/src/commands/token-list.js +5 -5
- package/dist/src/commands/token.js +9 -9
- package/dist/src/commands/tree.js +19 -19
- package/dist/src/commands/typecheck.d.ts +6 -6
- package/dist/src/commands/typecheck.js +7 -7
- 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 +13 -13
- 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 -5
- package/dist/src/core/branding.js +3 -3
- package/dist/src/core/browser-wire.d.ts +1 -1
- package/dist/src/core/browser-wire.js +4 -4
- package/dist/src/core/build-audit-platform.d.ts +6 -6
- package/dist/src/core/build-audit-platform.js +26 -26
- package/dist/src/core/build-audit-registration.d.ts +5 -5
- package/dist/src/core/build-audit-registration.js +7 -7
- 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 +8 -8
- package/dist/src/core/build-audit-skip.js +12 -12
- 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 +8 -8
- package/dist/src/core/build-audit.js +39 -37
- 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 +8 -8
- package/dist/src/core/build-baseline.js +14 -14
- package/dist/src/core/build-jar-escalation.d.ts +8 -8
- package/dist/src/core/build-jar-escalation.js +15 -15
- package/dist/src/core/build-overwrite-guard.d.ts +4 -4
- package/dist/src/core/build-overwrite-guard.js +13 -13
- package/dist/src/core/build-prepare.d.ts +4 -4
- package/dist/src/core/build-prepare.js +16 -15
- package/dist/src/core/config-mutate.js +4 -4
- package/dist/src/core/config-state.js +2 -2
- package/dist/src/core/config-validate-build-audit.js +3 -3
- package/dist/src/core/config-validate-file-size.d.ts +1 -1
- package/dist/src/core/config-validate-file-size.js +2 -2
- package/dist/src/core/config-validate.js +8 -9
- package/dist/src/core/config.d.ts +10 -10
- package/dist/src/core/config.js +10 -10
- package/dist/src/core/coverage-extend.d.ts +16 -16
- package/dist/src/core/coverage-extend.js +16 -16
- 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 +15 -16
- 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 +4 -4
- package/dist/src/core/engine-precondition.js +2 -2
- package/dist/src/core/engine-session-lock.d.ts +18 -18
- package/dist/src/core/engine-session-lock.js +37 -37
- package/dist/src/core/export-moved-code-shape.d.ts +7 -7
- package/dist/src/core/export-moved-code-shape.js +8 -8
- package/dist/src/core/file-lock-owner.d.ts +11 -11
- package/dist/src/core/file-lock-owner.js +18 -18
- package/dist/src/core/file-lock.d.ts +12 -12
- package/dist/src/core/file-lock.js +52 -39
- package/dist/src/core/firefox-cache.d.ts +1 -1
- package/dist/src/core/firefox-cache.js +10 -10
- package/dist/src/core/firefox-download.d.ts +3 -3
- package/dist/src/core/firefox-download.js +6 -6
- package/dist/src/core/firefox-extract.d.ts +2 -2
- package/dist/src/core/firefox-extract.js +13 -13
- package/dist/src/core/firefox.d.ts +5 -5
- package/dist/src/core/firefox.js +8 -8
- package/dist/src/core/furnace-apply-dry-run.js +1 -1
- 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 -9
- package/dist/src/core/furnace-apply-helpers.js +21 -21
- 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 +9 -9
- 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 +3 -3
- package/dist/src/core/furnace-apply.js +22 -21
- 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 +4 -4
- package/dist/src/core/furnace-config.js +18 -18
- package/dist/src/core/furnace-constants.d.ts +6 -6
- package/dist/src/core/furnace-constants.js +6 -6
- 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 +1 -1
- package/dist/src/core/furnace-dir-entry.js +1 -1
- 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 +21 -20
- package/dist/src/core/furnace-operation.js +36 -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.js +2 -2
- package/dist/src/core/furnace-registration-ast.d.ts +2 -2
- package/dist/src/core/furnace-registration-ast.js +9 -9
- 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 +5 -5
- package/dist/src/core/furnace-registration.js +7 -7
- package/dist/src/core/furnace-rollback.d.ts +1 -1
- package/dist/src/core/furnace-rollback.js +5 -5
- 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 +10 -10
- 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 +13 -13
- 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 +4 -4
- package/dist/src/core/git-base.js +9 -9
- package/dist/src/core/git-diff-new-file.d.ts +4 -4
- package/dist/src/core/git-diff-new-file.js +8 -8
- package/dist/src/core/git-diff.d.ts +4 -4
- package/dist/src/core/git-diff.js +35 -34
- package/dist/src/core/git-file-ops.d.ts +6 -6
- package/dist/src/core/git-file-ops.js +7 -7
- package/dist/src/core/git-readonly-index.d.ts +12 -12
- package/dist/src/core/git-readonly-index.js +12 -12
- package/dist/src/core/git-status.d.ts +4 -4
- package/dist/src/core/git-status.js +4 -4
- package/dist/src/core/git.d.ts +3 -3
- package/dist/src/core/git.js +14 -14
- package/dist/src/core/harness-orphans.d.ts +17 -17
- package/dist/src/core/harness-orphans.js +20 -20
- package/dist/src/core/history-log.d.ts +3 -3
- package/dist/src/core/history-log.js +3 -3
- 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 -5
- package/dist/src/core/mach-error-hints.js +13 -13
- package/dist/src/core/mach-known-noise-filter.d.ts +41 -38
- package/dist/src/core/mach-known-noise-filter.js +53 -50
- package/dist/src/core/mach-mozconfig.d.ts +6 -6
- package/dist/src/core/mach-mozconfig.js +15 -15
- package/dist/src/core/mach-python.d.ts +2 -1
- package/dist/src/core/mach-python.js +4 -3
- package/dist/src/core/mach-resource-shim.d.ts +12 -12
- package/dist/src/core/mach-resource-shim.js +20 -20
- package/dist/src/core/mach.d.ts +23 -23
- package/dist/src/core/mach.js +36 -36
- package/dist/src/core/marionette-port.d.ts +15 -13
- package/dist/src/core/marionette-port.js +34 -31
- package/dist/src/core/marionette-preflight.d.ts +6 -6
- package/dist/src/core/marionette-preflight.js +23 -23
- 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 +14 -14
- 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 +11 -11
- 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 +9 -9
- package/dist/src/core/patch-apply.d.ts +9 -9
- package/dist/src/core/patch-apply.js +30 -30
- package/dist/src/core/patch-export-update.d.ts +4 -4
- package/dist/src/core/patch-export-update.js +3 -3
- package/dist/src/core/patch-export.d.ts +10 -10
- package/dist/src/core/patch-export.js +13 -13
- 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 +7 -7
- package/dist/src/core/patch-lint-cache.d.ts +2 -2
- package/dist/src/core/patch-lint-cache.js +13 -13
- package/dist/src/core/patch-lint-checkjs.d.ts +26 -26
- package/dist/src/core/patch-lint-checkjs.js +42 -41
- 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 +3 -3
- package/dist/src/core/patch-lint-creators.js +3 -3
- package/dist/src/core/patch-lint-cross.d.ts +13 -13
- package/dist/src/core/patch-lint-cross.js +21 -21
- package/dist/src/core/patch-lint-css.d.ts +1 -1
- package/dist/src/core/patch-lint-css.js +5 -5
- 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 +3 -3
- package/dist/src/core/patch-lint-forward-registration.d.ts +4 -4
- package/dist/src/core/patch-lint-forward-registration.js +12 -12
- package/dist/src/core/patch-lint-jsdoc.d.ts +2 -2
- package/dist/src/core/patch-lint-jsdoc.js +11 -11
- package/dist/src/core/patch-lint-module-registration.d.ts +1 -1
- 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 +6 -6
- package/dist/src/core/patch-lint-queue-types.d.ts +1 -1
- package/dist/src/core/patch-lint-queue-types.js +1 -1
- package/dist/src/core/patch-lint-staged-registration.d.ts +2 -2
- package/dist/src/core/patch-lint-staged-registration.js +6 -6
- 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 +27 -26
- package/dist/src/core/patch-lint.js +48 -46
- package/dist/src/core/patch-lock.d.ts +1 -1
- package/dist/src/core/patch-lock.js +8 -8
- 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 +27 -27
- 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 +14 -14
- package/dist/src/core/patch-parse.js +16 -16
- 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-transform.d.ts +8 -8
- package/dist/src/core/patch-transform.js +13 -13
- package/dist/src/core/process-cpu-time.d.ts +1 -1
- package/dist/src/core/process-cpu-time.js +5 -5
- package/dist/src/core/rebase-session.d.ts +7 -7
- package/dist/src/core/rebase-session.js +8 -8
- 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 +3 -3
- package/dist/src/core/register-shared-css.d.ts +3 -3
- package/dist/src/core/register-shared-css.js +4 -4
- 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 +12 -12
- package/dist/src/core/run-log-redact.js +16 -16
- package/dist/src/core/run-log.d.ts +9 -9
- package/dist/src/core/run-log.js +14 -14
- 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 +2 -2
- package/dist/src/core/smoke-patterns.d.ts +5 -5
- package/dist/src/core/smoke-patterns.js +9 -9
- package/dist/src/core/state-file.d.ts +3 -3
- 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 +11 -11
- package/dist/src/core/test-changed-prefs.d.ts +12 -12
- package/dist/src/core/test-changed-prefs.js +15 -15
- package/dist/src/core/test-harness-crash.d.ts +39 -39
- package/dist/src/core/test-harness-crash.js +67 -67
- 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 -21
- package/dist/src/core/test-stale-check.js +29 -28
- 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/token-category.d.ts +4 -4
- package/dist/src/core/token-category.js +13 -12
- 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 +11 -11
- package/dist/src/core/token-docs.d.ts +1 -1
- package/dist/src/core/token-inventory.d.ts +6 -6
- package/dist/src/core/token-inventory.js +7 -7
- package/dist/src/core/token-manager.d.ts +3 -3
- package/dist/src/core/token-manager.js +21 -21
- 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 +32 -32
- package/dist/src/core/toolchain-preflight.d.ts +15 -15
- package/dist/src/core/toolchain-preflight.js +22 -22
- package/dist/src/core/tree-cow.d.ts +3 -3
- package/dist/src/core/tree-cow.js +6 -6
- 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 +35 -33
- 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 +31 -31
- 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 +6 -6
- 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 +11 -11
- package/dist/src/core/xpcshell-appdir.d.ts +20 -20
- package/dist/src/core/xpcshell-appdir.js +26 -26
- 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 +22 -21
- package/dist/src/errors/base.js +22 -21
- package/dist/src/errors/build.d.ts +6 -6
- package/dist/src/errors/build.js +6 -6
- package/dist/src/errors/codes.d.ts +10 -10
- package/dist/src/errors/codes.js +10 -10
- package/dist/src/errors/furnace.d.ts +2 -2
- package/dist/src/errors/git.d.ts +1 -1
- package/dist/src/errors/git.js +1 -1
- package/dist/src/errors/patch.d.ts +3 -3
- package/dist/src/errors/patch.js +3 -3
- package/dist/src/errors/rebase.d.ts +1 -1
- package/dist/src/errors/rebase.js +1 -1
- 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 +86 -85
- 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 +24 -23
- package/dist/src/types/furnace.d.ts +17 -17
- 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 +1 -1
- package/dist/src/utils/assert.js +6 -6
- package/dist/src/utils/build-info.d.ts +5 -5
- package/dist/src/utils/build-info.js +6 -6
- package/dist/src/utils/child-env.d.ts +5 -5
- 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 +1 -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 +8 -8
- package/dist/src/utils/line-dispatch.d.ts +3 -3
- package/dist/src/utils/line-dispatch.js +5 -5
- 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 +13 -13
- package/dist/src/utils/options.js +20 -20
- package/dist/src/utils/package-root.js +2 -2
- package/dist/src/utils/paths.d.ts +4 -4
- package/dist/src/utils/paths.js +4 -4
- package/dist/src/utils/process-group.d.ts +8 -8
- package/dist/src/utils/process-group.js +19 -19
- package/dist/src/utils/process.d.ts +34 -33
- package/dist/src/utils/process.js +20 -19
- package/dist/src/utils/ps-duration.d.ts +4 -4
- package/dist/src/utils/ps-duration.js +6 -6
- package/dist/src/utils/regex.d.ts +4 -4
- package/dist/src/utils/regex.js +7 -7
- package/dist/src/utils/sleep.d.ts +7 -7
- package/dist/src/utils/sleep.js +7 -7
- 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 +11 -12
- package/dist/src/utils/validation.js +20 -21
- package/docs/README.md +2 -2
- package/docs/configuration.md +120 -114
- package/docs/exit-codes.md +63 -58
- package/docs/furnace.md +20 -19
- package/docs/lifecycle-invariants.md +412 -251
- package/docs/machine-output.md +33 -32
- package/docs/patch-workflow.md +48 -45
- package/docs/run-logs.md +62 -58
- package/docs/testing.md +101 -101
- package/docs/verification-trees.md +23 -22
- package/package.json +2 -2
|
@@ -6,15 +6,15 @@ import { walk } from 'estree-walker';
|
|
|
6
6
|
* `acorn.parse` produces nodes that carry both the ESTree shape and
|
|
7
7
|
* `start`/`end` offsets at runtime, but its static `acorn.Program` type is
|
|
8
8
|
* nominally distinct from `estree.Program`, so the compiler cannot verify
|
|
9
|
-
* the conversion structurally
|
|
10
|
-
*
|
|
9
|
+
* the conversion structurally, hence the double assertion. This helper is the
|
|
10
|
+
* only sanctioned crossing point between the two types.
|
|
11
11
|
*/
|
|
12
12
|
function toPositionedProgram(program) {
|
|
13
13
|
// eslint-disable-next-line no-restricted-syntax -- the sanctioned acorn→estree bridge this rule's message points at
|
|
14
14
|
return program;
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
|
-
* Parse JavaScript source as a
|
|
17
|
+
* Parse JavaScript source as a script, not an ES module.
|
|
18
18
|
* All Mozilla chrome JS files (`browser-main.js`, `browser-init.js`,
|
|
19
19
|
* `customElements.js`, etc.) are scripts that run in a privileged scope.
|
|
20
20
|
*
|
|
@@ -32,7 +32,7 @@ export function parseScript(content, onComment) {
|
|
|
32
32
|
return toPositionedProgram(acorn.parse(content, opts));
|
|
33
33
|
}
|
|
34
34
|
/**
|
|
35
|
-
* Parse JavaScript source as an
|
|
35
|
+
* Parse JavaScript source as an ES module.
|
|
36
36
|
* Used for `.sys.mjs` files which use static import/export syntax.
|
|
37
37
|
*
|
|
38
38
|
* @param content - Source text to parse
|
|
@@ -53,12 +53,12 @@ export function parseModule(content, onComment) {
|
|
|
53
53
|
* Convenience cast from `acorn.Node` (or the generic ESTree union returned
|
|
54
54
|
* by estree-walker callbacks) to a positioned, narrowly-typed node.
|
|
55
55
|
*
|
|
56
|
-
*
|
|
57
|
-
* This performs no runtime check
|
|
58
|
-
* offsets to a node the caller has
|
|
56
|
+
* Caller obligation: you must already have discriminated on `node.type`.
|
|
57
|
+
* This performs no runtime check. It exists to attach acorn's `start`/`end`
|
|
58
|
+
* offsets to a node the caller has already narrowed, typically inside an
|
|
59
59
|
* `if (node.type === 'CallExpression')` branch or an equivalent walker
|
|
60
60
|
* guard. Calling it on an undiscriminated node produces a value whose type
|
|
61
|
-
* is
|
|
61
|
+
* is wrong.
|
|
62
62
|
*
|
|
63
63
|
* No runtime `type` assertion: every call site sits in the hot loop of a lint
|
|
64
64
|
* or registration walker and is already post-narrowing, so the check would
|
|
@@ -3,12 +3,12 @@ import type { ProjectLicense } from '../types/config.js';
|
|
|
3
3
|
/**
|
|
4
4
|
* Error thrown when the generated `mozconfig` references a `--with-branding`
|
|
5
5
|
* directory that does not match the branding tree FireForge set up. The
|
|
6
|
-
* mismatch is a silent-corruption hazard
|
|
6
|
+
* mismatch is a silent-corruption hazard: `mach configure` picks the value
|
|
7
7
|
* from mozconfig but the scaffolded branding lives elsewhere, so the build
|
|
8
8
|
* fails deep inside moz.build resolution with a confusing "path does not
|
|
9
9
|
* exist" message. Surface it as an actionable preflight instead.
|
|
10
10
|
*
|
|
11
|
-
* Setup renders templates under `configs/` with `${binaryName}` baked in
|
|
11
|
+
* Setup renders templates under `configs/` with `${binaryName}` baked in. A
|
|
12
12
|
* later edit to `fireforge.json`'s `binaryName` (or a re-setup without
|
|
13
13
|
* re-templating) leaves those names stale while `setupBranding` keeps using
|
|
14
14
|
* the current value. Both directions produce the same class of build break.
|
|
@@ -37,8 +37,8 @@ export interface BrandingConfig {
|
|
|
37
37
|
* Project license (from fireforge.json). Used to stamp the generated
|
|
38
38
|
* `configure.sh`, `brand.properties`, and `brand.ftl` files with the
|
|
39
39
|
* matching header so `patch-lint` does not flag them for
|
|
40
|
-
* `missing-license-header` when the project is not MPL-2.0. Optional
|
|
41
|
-
*
|
|
40
|
+
* `missing-license-header` when the project is not MPL-2.0. Optional.
|
|
41
|
+
* Falls back to {@link DEFAULT_LICENSE}.
|
|
42
42
|
*/
|
|
43
43
|
license?: ProjectLicense;
|
|
44
44
|
}
|
|
@@ -47,7 +47,7 @@ export interface BrandingConfig {
|
|
|
47
47
|
* `toolkit/moz.configure` composes `CFBundleIdentifier` as
|
|
48
48
|
* `<--with-distribution-id>.<MOZ_MACBUNDLE_ID>` (the distribution id
|
|
49
49
|
* defaults to `org.mozilla`), so branding `configure.sh` must carry only the
|
|
50
|
-
*
|
|
50
|
+
* leaf segment while the generated mozconfig carries the remainder as
|
|
51
51
|
* `--with-distribution-id`. Writing the full appId into `MOZ_MACBUNDLE_ID`
|
|
52
52
|
* double-prefixes the shipped bundle id. Config validation guarantees a
|
|
53
53
|
* reverse-domain id, so the split always has both halves.
|
|
@@ -18,12 +18,12 @@ class BrandingError extends FireForgeError {
|
|
|
18
18
|
/**
|
|
19
19
|
* Error thrown when the generated `mozconfig` references a `--with-branding`
|
|
20
20
|
* directory that does not match the branding tree FireForge set up. The
|
|
21
|
-
* mismatch is a silent-corruption hazard
|
|
21
|
+
* mismatch is a silent-corruption hazard: `mach configure` picks the value
|
|
22
22
|
* from mozconfig but the scaffolded branding lives elsewhere, so the build
|
|
23
23
|
* fails deep inside moz.build resolution with a confusing "path does not
|
|
24
24
|
* exist" message. Surface it as an actionable preflight instead.
|
|
25
25
|
*
|
|
26
|
-
* Setup renders templates under `configs/` with `${binaryName}` baked in
|
|
26
|
+
* Setup renders templates under `configs/` with `${binaryName}` baked in. A
|
|
27
27
|
* later edit to `fireforge.json`'s `binaryName` (or a re-setup without
|
|
28
28
|
* re-templating) leaves those names stale while `setupBranding` keeps using
|
|
29
29
|
* the current value. Both directions produce the same class of build break.
|
|
@@ -57,7 +57,7 @@ export class BrandingMozconfigMismatchError extends FireForgeError {
|
|
|
57
57
|
* `toolkit/moz.configure` composes `CFBundleIdentifier` as
|
|
58
58
|
* `<--with-distribution-id>.<MOZ_MACBUNDLE_ID>` (the distribution id
|
|
59
59
|
* defaults to `org.mozilla`), so branding `configure.sh` must carry only the
|
|
60
|
-
*
|
|
60
|
+
* leaf segment while the generated mozconfig carries the remainder as
|
|
61
61
|
* `--with-distribution-id`. Writing the full appId into `MOZ_MACBUNDLE_ID`
|
|
62
62
|
* double-prefixes the shipped bundle id. Config validation guarantees a
|
|
63
63
|
* reverse-domain id, so the split always has both halves.
|
|
@@ -30,7 +30,7 @@ export interface WireOptions {
|
|
|
30
30
|
* replacement path here.
|
|
31
31
|
*/
|
|
32
32
|
domTargetPath?: string | undefined;
|
|
33
|
-
/** Dry run
|
|
33
|
+
/** Dry run: don't write any files */
|
|
34
34
|
dryRun?: boolean | undefined;
|
|
35
35
|
/** Insert init block after the block containing this name */
|
|
36
36
|
after?: string | undefined;
|
|
@@ -86,9 +86,9 @@ export async function wireSubscript(root, name, options = {}) {
|
|
|
86
86
|
let initAdded = false;
|
|
87
87
|
if (options.init) {
|
|
88
88
|
// The snapshot above is taken when init or destroy is `!== undefined`
|
|
89
|
-
// while these writes fire on truthiness
|
|
90
|
-
// conditions over the same file,
|
|
91
|
-
//
|
|
89
|
+
// while these writes fire on truthiness. Close, but two separate
|
|
90
|
+
// conditions over the same file, and that kind of pairing drifts when
|
|
91
|
+
// a third writer is added later.
|
|
92
92
|
assertSnapshotted(journal, join(engineDir, 'browser/base/content/browser-init.js'), 'browser wire init');
|
|
93
93
|
initAdded = await addInitToBrowserInit(engineDir, options.init, options.after, marker);
|
|
94
94
|
}
|
|
@@ -119,7 +119,7 @@ export async function wireSubscript(root, name, options = {}) {
|
|
|
119
119
|
// original wire failure and the rollback failure so the operator knows
|
|
120
120
|
// the engine may be in a partially-wired state that needs manual
|
|
121
121
|
// attention. The original error's message is preserved so the user sees
|
|
122
|
-
//
|
|
122
|
+
// why the wire failed (e.g. "Could not find insertion point in chrome
|
|
123
123
|
// document") alongside any rollback diagnosis.
|
|
124
124
|
const originalMessage = toError(error).message;
|
|
125
125
|
try {
|
|
@@ -25,10 +25,10 @@ export declare function findEnclosingGate(content: string, basename: string): st
|
|
|
25
25
|
/**
|
|
26
26
|
* Determines whether the given source file is gated off on the current
|
|
27
27
|
* host by an enclosing `if CONFIG[...]:` block in its owning moz.build,
|
|
28
|
-
*
|
|
28
|
+
* or by a path-convention rule for installer-tree subdirectories that
|
|
29
29
|
* are packaged via Makefile.in recipes the audit does not parse.
|
|
30
|
-
* Returns `gatedOff: false` and no expression when no gate is found
|
|
31
|
-
*
|
|
30
|
+
* Returns `gatedOff: false` and no expression when no gate is found. The
|
|
31
|
+
* file is not platform-restricted, so the caller should audit it
|
|
32
32
|
* normally.
|
|
33
33
|
*
|
|
34
34
|
* @param engineDir Absolute path to the engine root
|
|
@@ -48,8 +48,8 @@ export interface AncestorDirsGateResult {
|
|
|
48
48
|
gateFile?: string;
|
|
49
49
|
}
|
|
50
50
|
/**
|
|
51
|
-
* Determines whether the source file's
|
|
52
|
-
* build by a gate in an
|
|
51
|
+
* Determines whether the source file's directory is excluded from this
|
|
52
|
+
* build by a gate in an ancestor `moz.build`.
|
|
53
53
|
*
|
|
54
54
|
* `detectPlatformGate` reads only the file's own nearest `moz.build`, which
|
|
55
55
|
* misses the common Firefox shape where the whole subtree is reached
|
|
@@ -57,7 +57,7 @@ export interface AncestorDirsGateResult {
|
|
|
57
57
|
* `toolkit/mozapps/defaultagent/moz.build` says "Windows only", yet none of
|
|
58
58
|
* it is built on macOS.
|
|
59
59
|
*
|
|
60
|
-
* Errs toward
|
|
60
|
+
* Errs toward not skipping, like the rest of this module: an unreadable or
|
|
61
61
|
* oversized ancestor, or a directory no `DIRS` entry names, yields
|
|
62
62
|
* `gatedOff: false`.
|
|
63
63
|
*
|
|
@@ -6,27 +6,27 @@
|
|
|
6
6
|
* `if CONFIG["MAKENSISU"]:` (Windows-only stubinstaller) or
|
|
7
7
|
* `if CONFIG["OS_TARGET"] == "Darwin":` (macOS-only artwork). On a host that
|
|
8
8
|
* does not match the gate, the wrapped files are never processed by the
|
|
9
|
-
* build, so they cannot appear under `dist
|
|
9
|
+
* build, so they cannot appear under `dist/`. Without this detection the
|
|
10
10
|
* audit warns about every gated file on every off-platform build.
|
|
11
11
|
*
|
|
12
12
|
* Two gate sources are consulted, in order:
|
|
13
13
|
* 1. Python-style `if CONFIG[...]:` blocks in the owning `moz.build`.
|
|
14
|
-
* 2. Path-convention gates
|
|
14
|
+
* 2. Path-convention gates: certain directory fragments are packaged by
|
|
15
15
|
* platform-specific Makefile.in / NSIS recipes that FireForge does not
|
|
16
16
|
* parse, so a file under `browser/installer/windows/` or any
|
|
17
17
|
* `/stubinstaller/` subtree is Windows-only regardless of what its
|
|
18
18
|
* nearest moz.build says.
|
|
19
19
|
*
|
|
20
|
-
* The detection is
|
|
20
|
+
* The detection is lightweight: walk up from the source file
|
|
21
21
|
* to the closest `moz.build`, scan it for the source basename inside an
|
|
22
22
|
* `if CONFIG[...]:` block, and check whether the gate matches the host. The
|
|
23
23
|
* path-convention pass runs only when no moz.build gate is found, so an
|
|
24
24
|
* explicit gate always wins.
|
|
25
25
|
*
|
|
26
|
-
* Best-effort
|
|
27
|
-
*
|
|
28
|
-
* that should ship on this host) are not, so it errs toward
|
|
29
|
-
* when uncertain.
|
|
26
|
+
* Best-effort. False negatives (missing a gate and warning anyway) are
|
|
27
|
+
* tolerable because the audit is warn-only. False positives (skipping a file
|
|
28
|
+
* that should ship on this host) are not tolerable, so it errs toward not
|
|
29
|
+
* skipping when uncertain.
|
|
30
30
|
*/
|
|
31
31
|
import { stat } from 'node:fs/promises';
|
|
32
32
|
import { dirname, join } from 'node:path';
|
|
@@ -35,7 +35,7 @@ import { getPlatform } from '../utils/platform.js';
|
|
|
35
35
|
import { escapeRegex } from '../utils/regex.js';
|
|
36
36
|
/**
|
|
37
37
|
* Tokens that uniquely identify a Windows-only `if CONFIG[...]:` block.
|
|
38
|
-
* `MAKENSISU` is the Windows stubinstaller compiler
|
|
38
|
+
* `MAKENSISU` is the Windows stubinstaller compiler. `OS_TARGET ==
|
|
39
39
|
* "WINNT"` and `MOZ_WIDGET_TOOLKIT == "windows"` are the conventional
|
|
40
40
|
* platform discriminators.
|
|
41
41
|
*/
|
|
@@ -53,7 +53,7 @@ function isGateOffHost(expression, host) {
|
|
|
53
53
|
const matchesDarwin = DARWIN_ONLY_GATE_TOKENS.some((t) => expression.includes(t));
|
|
54
54
|
const matchesLinux = LINUX_ONLY_GATE_TOKENS.some((t) => expression.includes(t));
|
|
55
55
|
// Negation gates (`!= "WINNT"`, `not CONFIG["MAKENSISU"]`) flip the
|
|
56
|
-
// semantics. Keep this conservative
|
|
56
|
+
// semantics. Keep this conservative: if we cannot confidently parse
|
|
57
57
|
// a negation, return false so we don't wrongly suppress a warning.
|
|
58
58
|
const negated = /\bnot\b|!=/.test(expression);
|
|
59
59
|
if (negated)
|
|
@@ -69,7 +69,7 @@ function isGateOffHost(expression, host) {
|
|
|
69
69
|
/**
|
|
70
70
|
* Walks from a starting directory up to (but not above) the engine root,
|
|
71
71
|
* yielding the first `moz.build` encountered. Returns undefined when no
|
|
72
|
-
* ancestor has one
|
|
72
|
+
* ancestor has one, typically only for files that live above any
|
|
73
73
|
* moz.build entry point, which would not be packageable anyway.
|
|
74
74
|
*/
|
|
75
75
|
async function findOwningMozBuild(engineDir, sourceDir) {
|
|
@@ -185,10 +185,10 @@ function findPathConventionGate(sourcePath) {
|
|
|
185
185
|
/**
|
|
186
186
|
* Determines whether the given source file is gated off on the current
|
|
187
187
|
* host by an enclosing `if CONFIG[...]:` block in its owning moz.build,
|
|
188
|
-
*
|
|
188
|
+
* or by a path-convention rule for installer-tree subdirectories that
|
|
189
189
|
* are packaged via Makefile.in recipes the audit does not parse.
|
|
190
|
-
* Returns `gatedOff: false` and no expression when no gate is found
|
|
191
|
-
*
|
|
190
|
+
* Returns `gatedOff: false` and no expression when no gate is found. The
|
|
191
|
+
* file is not platform-restricted, so the caller should audit it
|
|
192
192
|
* normally.
|
|
193
193
|
*
|
|
194
194
|
* @param engineDir Absolute path to the engine root
|
|
@@ -235,7 +235,7 @@ export async function detectPlatformGate(engineDir, sourcePath) {
|
|
|
235
235
|
/**
|
|
236
236
|
* Maximum ancestor levels walked looking for a gating `DIRS` entry, and the
|
|
237
237
|
* largest `moz.build` read while doing it. The audit runs on every build, so
|
|
238
|
-
* a pathological tree must not be able to make it slow
|
|
238
|
+
* a pathological tree must not be able to make it slow. Beyond these bounds
|
|
239
239
|
* the walk gives up and the caller keeps today's behaviour (warn).
|
|
240
240
|
*/
|
|
241
241
|
const MAX_ANCESTOR_DEPTH = 12;
|
|
@@ -243,21 +243,21 @@ const MAX_MOZ_BUILD_BYTES = 256 * 1024;
|
|
|
243
243
|
/** Matches a line that begins a `DIRS` assignment. */
|
|
244
244
|
const DIRS_ASSIGNMENT_PATTERN = /^\s*DIRS\s*\+?=/;
|
|
245
245
|
/**
|
|
246
|
-
* Collects the
|
|
246
|
+
* Collects the full stack of `if CONFIG[…]:` expressions enclosing the
|
|
247
247
|
* `DIRS` entry whose value equals `relDir`.
|
|
248
248
|
*
|
|
249
249
|
* Two differences from {@link findEnclosingGate}, both load-bearing here:
|
|
250
250
|
* only quoted values inside a `DIRS` assignment are considered (an
|
|
251
251
|
* unrelated string literal elsewhere in the file must not gate a
|
|
252
|
-
* directory), and
|
|
253
|
-
* innermost. Firefox nests these
|
|
252
|
+
* directory), and every enclosing expression is returned rather than the
|
|
253
|
+
* innermost. Firefox nests these: `toolkit/moz.build` reaches
|
|
254
254
|
* `mozapps/defaultagent` inside `OS_ARCH == "WINNT"`, then a `CC_TYPE`
|
|
255
|
-
* test, then `MOZ_DEFAULT_BROWSER_AGENT
|
|
255
|
+
* test, then `MOZ_DEFAULT_BROWSER_AGENT`, and it is the outermost one that
|
|
256
256
|
* excludes the directory on a macOS host.
|
|
257
257
|
*
|
|
258
258
|
* @param content - `moz.build` file content
|
|
259
259
|
* @param relDir - Directory path relative to the `moz.build`, POSIX-separated
|
|
260
|
-
* @returns Enclosing gate expressions, outermost first
|
|
260
|
+
* @returns Enclosing gate expressions, outermost first. Empty when ungated
|
|
261
261
|
* or when no `DIRS` entry reaches `relDir`
|
|
262
262
|
*/
|
|
263
263
|
function findDirsEntryGates(content, relDir) {
|
|
@@ -283,7 +283,7 @@ function findDirsEntryGates(content, relDir) {
|
|
|
283
283
|
continue;
|
|
284
284
|
}
|
|
285
285
|
if (DIRS_ASSIGNMENT_PATTERN.test(line)) {
|
|
286
|
-
// A `DIRS += [` list body continues on later lines
|
|
286
|
+
// A `DIRS += [` list body continues on later lines. A single-line
|
|
287
287
|
// `DIRS += ["x"]` is fully handled by the match below.
|
|
288
288
|
inDirs = !line.includes(']');
|
|
289
289
|
if (dirsLineNames(line, relDir))
|
|
@@ -305,8 +305,8 @@ function dirsLineNames(line, relDir) {
|
|
|
305
305
|
return new RegExp(`["']${escaped}\\/?["']`).test(line);
|
|
306
306
|
}
|
|
307
307
|
/**
|
|
308
|
-
* Determines whether the source file's
|
|
309
|
-
* build by a gate in an
|
|
308
|
+
* Determines whether the source file's directory is excluded from this
|
|
309
|
+
* build by a gate in an ancestor `moz.build`.
|
|
310
310
|
*
|
|
311
311
|
* `detectPlatformGate` reads only the file's own nearest `moz.build`, which
|
|
312
312
|
* misses the common Firefox shape where the whole subtree is reached
|
|
@@ -314,7 +314,7 @@ function dirsLineNames(line, relDir) {
|
|
|
314
314
|
* `toolkit/mozapps/defaultagent/moz.build` says "Windows only", yet none of
|
|
315
315
|
* it is built on macOS.
|
|
316
316
|
*
|
|
317
|
-
* Errs toward
|
|
317
|
+
* Errs toward not skipping, like the rest of this module: an unreadable or
|
|
318
318
|
* oversized ancestor, or a directory no `DIRS` entry names, yields
|
|
319
319
|
* `gatedOff: false`.
|
|
320
320
|
*
|
|
@@ -330,7 +330,7 @@ export async function detectAncestorDirsGate(engineDir, sourcePath) {
|
|
|
330
330
|
return { gatedOff: false };
|
|
331
331
|
}
|
|
332
332
|
const segments = sourcePath.split('/').filter(Boolean);
|
|
333
|
-
// Drop the basename: the walk is over
|
|
333
|
+
// Drop the basename: the walk is over directories.
|
|
334
334
|
segments.pop();
|
|
335
335
|
const root = engineDir.replace(/[/\\]+$/, '');
|
|
336
336
|
const depth = Math.min(segments.length, MAX_ANCESTOR_DEPTH);
|
|
@@ -365,8 +365,8 @@ export async function detectAncestorDirsGate(engineDir, sourcePath) {
|
|
|
365
365
|
gateFile: [...ancestorSegments, 'moz.build'].join('/'),
|
|
366
366
|
};
|
|
367
367
|
}
|
|
368
|
-
// The directory
|
|
369
|
-
//
|
|
368
|
+
// The directory is reached from here and this host passes every gate.
|
|
369
|
+
// A further ancestor cannot un-reach it.
|
|
370
370
|
return { gatedOff: false };
|
|
371
371
|
}
|
|
372
372
|
return { gatedOff: false };
|
|
@@ -32,7 +32,7 @@ export declare function parseJarMnEntry(line: string): {
|
|
|
32
32
|
/**
|
|
33
33
|
* Scans a jar.mn file's contents for an entry whose source reference
|
|
34
34
|
* matches `relativeSource` (POSIX, relative to the jar.mn directory).
|
|
35
|
-
* Returns the first match
|
|
35
|
+
* Returns the first match. jar.mn enforces uniqueness of `(source)` in
|
|
36
36
|
* practice, so a first-match wins behaviour is adequate.
|
|
37
37
|
*/
|
|
38
38
|
export declare function findJarMnEntryForSource(content: string, relativeSource: string): {
|
|
@@ -44,14 +44,14 @@ export declare function findJarMnEntryForSource(content: string, relativeSource:
|
|
|
44
44
|
* the first jar.mn entry that registers the given source. Returns undefined
|
|
45
45
|
* when no ancestor jar.mn claims the source.
|
|
46
46
|
*
|
|
47
|
-
* @param engineDir Absolute engine root
|
|
47
|
+
* @param engineDir Absolute engine root. The walk halts here.
|
|
48
48
|
* @param source Engine-relative POSIX source path.
|
|
49
49
|
*/
|
|
50
50
|
export declare function findRegisteredTarget(engineDir: string, source: string): Promise<RegistrationHit | undefined>;
|
|
51
51
|
/**
|
|
52
52
|
* Probes the dist tree for the artifact registered against the given
|
|
53
53
|
* source. Returns the matched candidate and the registration hit that
|
|
54
|
-
* anchored it
|
|
54
|
+
* anchored it. Undefined when the source has no owning jar.mn or when
|
|
55
55
|
* no same-basename candidate under the search roots ends with the
|
|
56
56
|
* registered target path.
|
|
57
57
|
*
|
|
@@ -69,8 +69,8 @@ export declare function findRegisteredTarget(engineDir: string, source: string):
|
|
|
69
69
|
export declare function resolveArtifactByRegistration(engineDir: string, source: string, searchRoots: readonly string[]): Promise<RegistrationProbeResult | undefined>;
|
|
70
70
|
/**
|
|
71
71
|
* Returns the absolute paths of every same-basename candidate under the
|
|
72
|
-
* given search roots. Used by the audit to enumerate
|
|
73
|
-
* candidates when the heuristic fallback downgrades to "missing"
|
|
72
|
+
* given search roots. Used by the audit to enumerate all false-match
|
|
73
|
+
* candidates when the heuristic fallback downgrades to "missing". The
|
|
74
74
|
* operator needs to see the full set, not just the scorer's pick, to
|
|
75
75
|
* distinguish a registration bug from a genuine packaging drop.
|
|
76
76
|
*
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* report an unambiguous "registered but not packaged" miss when none exists.
|
|
19
19
|
*
|
|
20
20
|
* When no jar.mn registration is found, the caller falls back to the
|
|
21
|
-
* similarity heuristic
|
|
21
|
+
* similarity heuristic, which covers sources registered through moz.build
|
|
22
22
|
* (`FINAL_TARGET_FILES`, `JS_PREFERENCE_FILES`) or `package-manifest.in`.
|
|
23
23
|
* Parsing every Firefox registration surface would bloat the audit, and the
|
|
24
24
|
* heuristic's weak case is surfaced to the operator in the warning copy.
|
|
@@ -62,7 +62,7 @@ export function parseJarMnEntry(line) {
|
|
|
62
62
|
/**
|
|
63
63
|
* Scans a jar.mn file's contents for an entry whose source reference
|
|
64
64
|
* matches `relativeSource` (POSIX, relative to the jar.mn directory).
|
|
65
|
-
* Returns the first match
|
|
65
|
+
* Returns the first match. jar.mn enforces uniqueness of `(source)` in
|
|
66
66
|
* practice, so a first-match wins behaviour is adequate.
|
|
67
67
|
*/
|
|
68
68
|
export function findJarMnEntryForSource(content, relativeSource) {
|
|
@@ -81,7 +81,7 @@ export function findJarMnEntryForSource(content, relativeSource) {
|
|
|
81
81
|
* the first jar.mn entry that registers the given source. Returns undefined
|
|
82
82
|
* when no ancestor jar.mn claims the source.
|
|
83
83
|
*
|
|
84
|
-
* @param engineDir Absolute engine root
|
|
84
|
+
* @param engineDir Absolute engine root. The walk halts here.
|
|
85
85
|
* @param source Engine-relative POSIX source path.
|
|
86
86
|
*/
|
|
87
87
|
export async function findRegisteredTarget(engineDir, source) {
|
|
@@ -98,7 +98,7 @@ export async function findRegisteredTarget(engineDir, source) {
|
|
|
98
98
|
content = await readText(jarMn);
|
|
99
99
|
}
|
|
100
100
|
catch {
|
|
101
|
-
// An unreadable jar.mn contributes no registration hints
|
|
101
|
+
// An unreadable jar.mn contributes no registration hints. The resolver falls
|
|
102
102
|
// through to its other strategies.
|
|
103
103
|
content = '';
|
|
104
104
|
}
|
|
@@ -127,7 +127,7 @@ function toPosix(path) {
|
|
|
127
127
|
/**
|
|
128
128
|
* Probes the dist tree for the artifact registered against the given
|
|
129
129
|
* source. Returns the matched candidate and the registration hit that
|
|
130
|
-
* anchored it
|
|
130
|
+
* anchored it. Undefined when the source has no owning jar.mn or when
|
|
131
131
|
* no same-basename candidate under the search roots ends with the
|
|
132
132
|
* registered target path.
|
|
133
133
|
*
|
|
@@ -162,8 +162,8 @@ export async function resolveArtifactByRegistration(engineDir, source, searchRoo
|
|
|
162
162
|
}
|
|
163
163
|
/**
|
|
164
164
|
* Returns the absolute paths of every same-basename candidate under the
|
|
165
|
-
* given search roots. Used by the audit to enumerate
|
|
166
|
-
* candidates when the heuristic fallback downgrades to "missing"
|
|
165
|
+
* given search roots. Used by the audit to enumerate all false-match
|
|
166
|
+
* candidates when the heuristic fallback downgrades to "missing". The
|
|
167
167
|
* operator needs to see the full set, not just the scorer's pick, to
|
|
168
168
|
* distinguish a registration bug from a genuine packaging drop.
|
|
169
169
|
*
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Heuristic test for "this looks like a packaged-test source file"
|
|
2
|
+
* Heuristic test for "this looks like a packaged-test source file". The
|
|
3
3
|
* audit routes such paths to `_tests/` instead of `dist/`. Matches
|
|
4
4
|
* mochitest / xpcshell / browser-chrome conventions: any source under a
|
|
5
5
|
* `/test/` or `/tests/` directory, anywhere under a `testing/` subtree
|
|
@@ -27,7 +27,7 @@ export declare function countTrailingSegmentMatches(a: string, b: string): numbe
|
|
|
27
27
|
/**
|
|
28
28
|
* Path segments too common to identify an artifact on their own.
|
|
29
29
|
*
|
|
30
|
-
* Shared
|
|
30
|
+
* Shared on purpose: this set governs two halves of one decision,
|
|
31
31
|
* `scoreCandidate` (selection) and `isConfidentMatch` (confirmation, in
|
|
32
32
|
* `build-audit.ts`). When the halves kept separate copies they disagreed,
|
|
33
33
|
* so a source path could earn a selection bonus for a segment that
|
|
@@ -44,14 +44,14 @@ export declare const GENERIC_PATH_SEGMENTS: ReadonlySet<string>;
|
|
|
44
44
|
*
|
|
45
45
|
* The bonus exists because Firefox packaging often re-roots files: a source
|
|
46
46
|
* `branding/<name>/content/aboutDialog.css` lands at
|
|
47
|
-
* `chrome/browser/content/branding/aboutDialog.css
|
|
47
|
+
* `chrome/browser/content/branding/aboutDialog.css`. Only the basename
|
|
48
48
|
* trails-match, but the `branding` segment moved into the middle of the
|
|
49
49
|
* candidate path. Without the bonus that candidate ties with the unrelated
|
|
50
50
|
* `chrome/browser/content/browser/aboutDialog.css`.
|
|
51
51
|
*
|
|
52
52
|
* @param sourcePath Engine-relative POSIX path
|
|
53
53
|
* @param candidatePath Absolute path under the dist tree
|
|
54
|
-
* @returns Numeric score
|
|
54
|
+
* @returns Numeric score, where higher means better match
|
|
55
55
|
*/
|
|
56
56
|
export declare function scoreCandidate(sourcePath: string, candidatePath: string): number;
|
|
57
57
|
/**
|
|
@@ -69,7 +69,7 @@ export declare function findAllByBasename(root: string, name: string, maxDepth?:
|
|
|
69
69
|
/**
|
|
70
70
|
* Resolves the best-matching artifact for a source path under one or
|
|
71
71
|
* more search roots. Returns the highest-scoring candidate by trailing
|
|
72
|
-
* segment overlap
|
|
72
|
+
* segment overlap. Ties go to the first-found path (deterministic via
|
|
73
73
|
* the directory-walk order). Returns undefined when no candidate exists.
|
|
74
74
|
*
|
|
75
75
|
* @param sourcePath Engine-relative POSIX source path
|
|
@@ -24,7 +24,7 @@ import { normalizePathSlashes } from '../utils/paths.js';
|
|
|
24
24
|
/** Maximum directory depth to traverse when scanning a tree root. */
|
|
25
25
|
const MAX_SCAN_DEPTH = 12;
|
|
26
26
|
/**
|
|
27
|
-
* Heuristic test for "this looks like a packaged-test source file"
|
|
27
|
+
* Heuristic test for "this looks like a packaged-test source file". The
|
|
28
28
|
* audit routes such paths to `_tests/` instead of `dist/`. Matches
|
|
29
29
|
* mochitest / xpcshell / browser-chrome conventions: any source under a
|
|
30
30
|
* `/test/` or `/tests/` directory, anywhere under a `testing/` subtree
|
|
@@ -59,7 +59,7 @@ export function isTestPath(sourcePath) {
|
|
|
59
59
|
*
|
|
60
60
|
* Separators are normalized first because the candidates come from `join()`
|
|
61
61
|
* over a `readdir` walk of the dist tree: on Windows those carry backslashes,
|
|
62
|
-
* which a `/`-only split collapses into a
|
|
62
|
+
* which a `/`-only split collapses into a single segment. Every candidate then
|
|
63
63
|
* scores the same, so the trailing-overlap heuristic that disambiguates
|
|
64
64
|
* same-basename artifacts (`branding/…/aboutDialog.css` versus
|
|
65
65
|
* `browser/…/aboutDialog.css`) silently picks an arbitrary one.
|
|
@@ -94,7 +94,7 @@ export function countTrailingSegmentMatches(a, b) {
|
|
|
94
94
|
/**
|
|
95
95
|
* Path segments too common to identify an artifact on their own.
|
|
96
96
|
*
|
|
97
|
-
* Shared
|
|
97
|
+
* Shared on purpose: this set governs two halves of one decision,
|
|
98
98
|
* `scoreCandidate` (selection) and `isConfidentMatch` (confirmation, in
|
|
99
99
|
* `build-audit.ts`). When the halves kept separate copies they disagreed,
|
|
100
100
|
* so a source path could earn a selection bonus for a segment that
|
|
@@ -129,14 +129,14 @@ export const GENERIC_PATH_SEGMENTS = new Set([
|
|
|
129
129
|
*
|
|
130
130
|
* The bonus exists because Firefox packaging often re-roots files: a source
|
|
131
131
|
* `branding/<name>/content/aboutDialog.css` lands at
|
|
132
|
-
* `chrome/browser/content/branding/aboutDialog.css
|
|
132
|
+
* `chrome/browser/content/branding/aboutDialog.css`. Only the basename
|
|
133
133
|
* trails-match, but the `branding` segment moved into the middle of the
|
|
134
134
|
* candidate path. Without the bonus that candidate ties with the unrelated
|
|
135
135
|
* `chrome/browser/content/browser/aboutDialog.css`.
|
|
136
136
|
*
|
|
137
137
|
* @param sourcePath Engine-relative POSIX path
|
|
138
138
|
* @param candidatePath Absolute path under the dist tree
|
|
139
|
-
* @returns Numeric score
|
|
139
|
+
* @returns Numeric score, where higher means better match
|
|
140
140
|
*/
|
|
141
141
|
export function scoreCandidate(sourcePath, candidatePath) {
|
|
142
142
|
const trailing = countTrailingSegmentMatches(sourcePath, candidatePath);
|
|
@@ -210,7 +210,7 @@ export async function findAllByBasename(root, name, maxDepth = MAX_SCAN_DEPTH) {
|
|
|
210
210
|
/**
|
|
211
211
|
* Resolves the best-matching artifact for a source path under one or
|
|
212
212
|
* more search roots. Returns the highest-scoring candidate by trailing
|
|
213
|
-
* segment overlap
|
|
213
|
+
* segment overlap. Ties go to the first-found path (deterministic via
|
|
214
214
|
* the directory-walk order). Returns undefined when no candidate exists.
|
|
215
215
|
*
|
|
216
216
|
* @param sourcePath Engine-relative POSIX source path
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Why a changed engine path was not audited.
|
|
3
3
|
*
|
|
4
4
|
* The first four name skips that already existed as unstructured
|
|
5
|
-
* `verbose()` strings
|
|
5
|
+
* `verbose()` strings. The last four are the 0.46.0 classifiers.
|
|
6
6
|
*/
|
|
7
7
|
export type AuditSkipReason = 'not-packageable' | 'platform-gated' | 'platform-gated-ancestor' | 'tests-not-packaged' | 'source-unreadable' | 'branding-not-selected' | 'storybook-story' | 'declared-unpackaged';
|
|
8
8
|
/** Render order for the `Packaged:` summary's per-class breakdown. */
|
|
@@ -15,7 +15,7 @@ export declare function isStorybookStoryPath(sourcePath: string): boolean;
|
|
|
15
15
|
* FireForge generates `engine/mozconfig` and writes the
|
|
16
16
|
* `ac_add_options --with-branding=…` line into it, so the selected branding
|
|
17
17
|
* is knowable from the tree. Returns undefined when the mozconfig cannot be
|
|
18
|
-
* read or carries no directive
|
|
18
|
+
* read or carries no directive. The caller must then keep warning, because
|
|
19
19
|
* a skip that cannot name its evidence is a masked warning.
|
|
20
20
|
*
|
|
21
21
|
* @param engineDir - Absolute path to the engine root
|
|
@@ -23,13 +23,13 @@ export declare function isStorybookStoryPath(sourcePath: string): boolean;
|
|
|
23
23
|
*/
|
|
24
24
|
export declare function resolveSelectedBranding(engineDir: string): Promise<string | undefined>;
|
|
25
25
|
/**
|
|
26
|
-
* True when `sourcePath` lives under a branding tree that is
|
|
26
|
+
* True when `sourcePath` lives under a branding tree that is not the one
|
|
27
27
|
* this objdir was configured with.
|
|
28
28
|
*
|
|
29
29
|
* An unselected branding directory is not an input to this build at all, so
|
|
30
30
|
* its files can never appear in `dist/`. Worse, the basename walker matched
|
|
31
|
-
* them against the
|
|
32
|
-
* unselected file as "newer than its packaged artifact"
|
|
31
|
+
* them against the selected branding's same-named artifact and reported the
|
|
32
|
+
* unselected file as "newer than its packaged artifact", a stale warning
|
|
33
33
|
* about a comparison that has no meaning.
|
|
34
34
|
*
|
|
35
35
|
* @param sourcePath - Engine-relative POSIX path
|
|
@@ -47,9 +47,9 @@ export interface UnpackagedDeclaration {
|
|
|
47
47
|
* Finds the declaration admitting `sourcePath`, if any.
|
|
48
48
|
*
|
|
49
49
|
* Exact match or a `*`-within-one-segment glob, matching the
|
|
50
|
-
* `support-files` matcher's
|
|
51
|
-
*
|
|
52
|
-
*
|
|
50
|
+
* `support-files` matcher's narrowness: `**` and other cross-directory
|
|
51
|
+
* shapes are not accepted, because a carve-out that silently widens is the
|
|
52
|
+
* failure this feature is warned against.
|
|
53
53
|
*
|
|
54
54
|
* @param sourcePath - Engine-relative POSIX path
|
|
55
55
|
* @param declarations - The project's `buildAudit.unpackaged` entries
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
* usually wrong stops reading the one that is right. Every classifier here
|
|
8
8
|
* exists to remove a warning whose "missing packaged artifact" claim is
|
|
9
9
|
* structurally impossible, and each carries its own reason so the
|
|
10
|
-
* `Packaged:` summary can say what it skipped and why
|
|
11
|
-
* `4 missing` with zero real misses
|
|
10
|
+
* `Packaged:` summary can say what it skipped and why. This replaces a run
|
|
11
|
+
* reporting `4 missing` with zero real misses.
|
|
12
12
|
*/
|
|
13
13
|
import { readText } from '../utils/fs.js';
|
|
14
14
|
import { normalizePathSlashes } from '../utils/paths.js';
|
|
@@ -28,10 +28,10 @@ export const AUDIT_SKIP_REASONS = [
|
|
|
28
28
|
/**
|
|
29
29
|
* Suffixes of Storybook story modules.
|
|
30
30
|
*
|
|
31
|
-
* Firefox's in-tree Storybook renders these through its own Vite config
|
|
32
|
-
*
|
|
31
|
+
* Firefox's in-tree Storybook renders these through its own Vite config.
|
|
32
|
+
* No `jar.mn` or `moz.build` entry packages one, so "no packaged artifact"
|
|
33
33
|
* is the expected state rather than a missing registration. Kept as a
|
|
34
|
-
*
|
|
34
|
+
* closed list on purpose: generalising to "anything with a dotted infix"
|
|
35
35
|
* would swallow `*.worker.js` and `*.sys.mjs`, which are packaged.
|
|
36
36
|
*/
|
|
37
37
|
const STORYBOOK_SUFFIXES = ['.stories.mjs', '.stories.js'];
|
|
@@ -48,7 +48,7 @@ const BRANDING_ROOT = 'browser/branding/';
|
|
|
48
48
|
* FireForge generates `engine/mozconfig` and writes the
|
|
49
49
|
* `ac_add_options --with-branding=…` line into it, so the selected branding
|
|
50
50
|
* is knowable from the tree. Returns undefined when the mozconfig cannot be
|
|
51
|
-
* read or carries no directive
|
|
51
|
+
* read or carries no directive. The caller must then keep warning, because
|
|
52
52
|
* a skip that cannot name its evidence is a masked warning.
|
|
53
53
|
*
|
|
54
54
|
* @param engineDir - Absolute path to the engine root
|
|
@@ -65,13 +65,13 @@ export async function resolveSelectedBranding(engineDir) {
|
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
/**
|
|
68
|
-
* True when `sourcePath` lives under a branding tree that is
|
|
68
|
+
* True when `sourcePath` lives under a branding tree that is not the one
|
|
69
69
|
* this objdir was configured with.
|
|
70
70
|
*
|
|
71
71
|
* An unselected branding directory is not an input to this build at all, so
|
|
72
72
|
* its files can never appear in `dist/`. Worse, the basename walker matched
|
|
73
|
-
* them against the
|
|
74
|
-
* unselected file as "newer than its packaged artifact"
|
|
73
|
+
* them against the selected branding's same-named artifact and reported the
|
|
74
|
+
* unselected file as "newer than its packaged artifact", a stale warning
|
|
75
75
|
* about a comparison that has no meaning.
|
|
76
76
|
*
|
|
77
77
|
* @param sourcePath - Engine-relative POSIX path
|
|
@@ -90,9 +90,9 @@ export function isUnselectedBrandingPath(sourcePath, selectedBranding) {
|
|
|
90
90
|
* Finds the declaration admitting `sourcePath`, if any.
|
|
91
91
|
*
|
|
92
92
|
* Exact match or a `*`-within-one-segment glob, matching the
|
|
93
|
-
* `support-files` matcher's
|
|
94
|
-
*
|
|
95
|
-
*
|
|
93
|
+
* `support-files` matcher's narrowness: `**` and other cross-directory
|
|
94
|
+
* shapes are not accepted, because a carve-out that silently widens is the
|
|
95
|
+
* failure this feature is warned against.
|
|
96
96
|
*
|
|
97
97
|
* @param sourcePath - Engine-relative POSIX path
|
|
98
98
|
* @param declarations - The project's `buildAudit.unpackaged` entries
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Returns the expected chrome-tree suffix for an engine-relative POSIX
|
|
3
|
-
* source path when the path falls under a known transform prefix
|
|
4
|
-
* undefined otherwise.
|
|
3
|
+
* source path when the path falls under a known transform prefix.
|
|
4
|
+
* Returns undefined otherwise.
|
|
5
5
|
*
|
|
6
6
|
* @param source Engine-relative POSIX source path.
|
|
7
7
|
*/
|