@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
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* `fireforge typecheck` command (`typecheck.ts`).
|
|
6
6
|
*
|
|
7
7
|
* Centralised so both flows agree on the same Firefox-globals shim
|
|
8
|
-
* and the same set of suppressed diagnostic codes
|
|
8
|
+
* and the same set of suppressed diagnostic codes. Drift between the
|
|
9
9
|
* two would mean a patch could lint clean under `fireforge lint` but
|
|
10
10
|
* still fail `fireforge typecheck`, or vice versa, for reasons the
|
|
11
11
|
* operator could not infer from the rule names.
|
|
@@ -17,7 +17,7 @@ export const SHIM_FILENAME = '__fireforge_firefox_globals.d.ts';
|
|
|
17
17
|
/**
|
|
18
18
|
* Minimal `.d.ts` shim for Firefox privileged-scope globals.
|
|
19
19
|
*
|
|
20
|
-
* Firefox source is plain JS
|
|
20
|
+
* Firefox source is plain JS, with no TypeScript allowed. The shim lets
|
|
21
21
|
* TS-driven type checking run without reporting "cannot find name"
|
|
22
22
|
* for the most common Mozilla APIs. Types are intentionally loose
|
|
23
23
|
* (`any`) because full Firefox type coverage is out of scope.
|
|
@@ -25,7 +25,7 @@ export const SHIM_FILENAME = '__fireforge_firefox_globals.d.ts';
|
|
|
25
25
|
* Structured globals (`ChromeUtils`, `Localization`) are declared via
|
|
26
26
|
* named global interfaces (`ChromeUtilsShim`, `LocalizationShim`, …)
|
|
27
27
|
* rather than closed object-literal types, so a project's extra shim
|
|
28
|
-
* (`patchLint.checkJsExtraShim` / `typecheck.extraShim`) can
|
|
28
|
+
* (`patchLint.checkJsExtraShim` / `typecheck.extraShim`) can add members
|
|
29
29
|
* through TypeScript interface merging:
|
|
30
30
|
*
|
|
31
31
|
* // my-extra-shim.d.ts
|
|
@@ -34,27 +34,27 @@ export const SHIM_FILENAME = '__fireforge_firefox_globals.d.ts';
|
|
|
34
34
|
* }
|
|
35
35
|
*
|
|
36
36
|
* (A second `declare var ChromeUtils` in the extra shim remains a
|
|
37
|
-
* duplicate-identifier error by design
|
|
37
|
+
* duplicate-identifier error by design. Merge the interface instead.)
|
|
38
38
|
* The member lists track upstream WebIDL additions per Firefox release
|
|
39
|
-
* (`dom/chrome-webidl/ChromeUtils.webidl` for ChromeUtils)
|
|
39
|
+
* (`dom/chrome-webidl/ChromeUtils.webidl` for ChromeUtils). When a new
|
|
40
40
|
* release adds a commonly-patched member, add a loose signature here.
|
|
41
41
|
*
|
|
42
42
|
* Notable patterns that require shimming:
|
|
43
43
|
* - `const lazy = {};` + `ChromeUtils.defineESModuleGetters(lazy, { ... })`
|
|
44
|
-
* populates `lazy` at runtime
|
|
44
|
+
* populates `lazy` at runtime, so we declare it as `Record<string, any>`.
|
|
45
45
|
* - `Services.obs`, `Services.prefs`, etc. are XPCOM service accessors.
|
|
46
46
|
* - `Ci`, `Cc`, `Cr`, `Cu` are XPCOM component shortcuts.
|
|
47
47
|
* - Browser chrome globals like `gBrowser`, `gURLBar` are common in
|
|
48
48
|
* content scripts wired via `browser.js`.
|
|
49
49
|
* - Dynamic `import("resource:-…")` / `import("chrome:-…")` under patch
|
|
50
50
|
* checkJs: imports of *patch-owned* modules resolve to their real
|
|
51
|
-
* sources (see `patch-lint-checkjs.ts`)
|
|
51
|
+
* sources (see `patch-lint-checkjs.ts`). Everything else fails host
|
|
52
52
|
* resolution and lands on these URL ambient wildcards, keeping
|
|
53
53
|
* upstream Firefox imports pragmatically loose, same posture as globals.
|
|
54
54
|
*/
|
|
55
55
|
const FIREFOX_GLOBALS_SHIM = `
|
|
56
56
|
declare var Services: any;
|
|
57
|
-
// Extensible via interface merging from a project extra shim
|
|
57
|
+
// Extensible via interface merging from a project extra shim; see the
|
|
58
58
|
// module doc comment in typecheck-shim.ts.
|
|
59
59
|
interface ChromeUtilsShim {
|
|
60
60
|
defineESModuleGetters(target: any, modules: Record<string, string>): void;
|
|
@@ -67,7 +67,7 @@ interface ChromeUtilsShim {
|
|
|
67
67
|
getClassName(obj: any, unwrap?: boolean): string;
|
|
68
68
|
isClassInfo(obj: any): boolean;
|
|
69
69
|
// Firefox 153, dom/chrome-webidl/ChromeUtils.webidl: two overloads
|
|
70
|
-
// (URI string / nsIURI) with a PredictRemoteTypeOptions dictionary
|
|
70
|
+
// (URI string / nsIURI) with a PredictRemoteTypeOptions dictionary,
|
|
71
71
|
// collapsed into one loose signature per the shim's pragmatic posture.
|
|
72
72
|
predictRemoteTypeForURI(uri: string | object | null, options?: object): string | null;
|
|
73
73
|
}
|
|
@@ -98,7 +98,7 @@ declare class JSWindowActorParent {
|
|
|
98
98
|
sendAsyncMessage(name: string, data?: any, transfers?: any[]): void;
|
|
99
99
|
sendQuery(name: string, data?: any, transfers?: any[]): Promise<any>;
|
|
100
100
|
}
|
|
101
|
-
// Fluent localization
|
|
101
|
+
// Fluent localization, a stable chrome global. Members stay loose (any),
|
|
102
102
|
// but the constructor shape is declared so "new Localization([...])" and
|
|
103
103
|
// "new Localization([...], true)" typecheck without a local cast. Both
|
|
104
104
|
// interfaces are extensible via interface merging from a project extra
|
|
@@ -122,7 +122,7 @@ interface LocalizationShim {
|
|
|
122
122
|
}
|
|
123
123
|
declare var Localization: LocalizationShim;
|
|
124
124
|
|
|
125
|
-
// Shorthand ambient modules
|
|
125
|
+
// Shorthand ambient modules: exports from matching URL imports are loosely typed,
|
|
126
126
|
// avoiding noResolve empty-graph namespaces. (Named member access broke when we tried
|
|
127
127
|
// export= Record under moduleResolution Bundler.)
|
|
128
128
|
declare module 'resource:*';
|
|
@@ -131,15 +131,15 @@ declare module 'chrome:*';
|
|
|
131
131
|
`;
|
|
132
132
|
/**
|
|
133
133
|
* Loose declarations for Firefox test-harness globals (mochitest
|
|
134
|
-
* browser-chrome and xpcshell), appended
|
|
134
|
+
* browser-chrome and xpcshell), appended after the composed
|
|
135
135
|
* Firefox-globals + consumer shim when `patchLint.checkJsTestFiles`
|
|
136
136
|
* extends the checkJs pass to patch-adopted test scripts.
|
|
137
|
-
*
|
|
138
|
-
* shim. A consumer that wants
|
|
139
|
-
* a method the harness does not declare fails at the patch boundary)
|
|
140
|
-
* declares them in `patchLint.checkJsTestShim
|
|
141
|
-
* composes
|
|
142
|
-
* `declare var` redeclarations to the
|
|
137
|
+
* These are `any`-typed, the same pragmatic posture as the main
|
|
138
|
+
* shim. A consumer that wants typed harness members (so that, say, a call
|
|
139
|
+
* to a method the harness does not declare fails at the patch boundary)
|
|
140
|
+
* declares them in `patchLint.checkJsTestShim`. Because that shim
|
|
141
|
+
* composes before this baseline and TypeScript resolves conflicting
|
|
142
|
+
* `declare var` redeclarations to the first declaration, the typed
|
|
143
143
|
* consumer declaration wins over the loose fallback here.
|
|
144
144
|
*/
|
|
145
145
|
export const TEST_HARNESS_SHIM = `
|
|
@@ -174,7 +174,7 @@ declare function run_test(): any;
|
|
|
174
174
|
* build system: the resolver can't follow `resource://`/`chrome://`
|
|
175
175
|
* URLs and the global shim is intentionally narrow.
|
|
176
176
|
*
|
|
177
|
-
* Widening this set should be deliberate and per-code
|
|
177
|
+
* Widening this set should be deliberate and per-code: silently
|
|
178
178
|
* suppressing more codes hides real type errors. The same set is used
|
|
179
179
|
* by both flows so a patch can't pass one and fail the other for a
|
|
180
180
|
* reason the operator couldn't infer from the docs.
|
|
@@ -193,8 +193,9 @@ export const SUPPRESSED_DIAGNOSTIC_CODES = new Set([
|
|
|
193
193
|
* a module reference a name with no import or declaration anywhere and still
|
|
194
194
|
* typecheck with 0 errors, so the failure surfaces as a runtime
|
|
195
195
|
* `ReferenceError`. Both flows report these at a configurable severity
|
|
196
|
-
* (default `'warning'`: visible without breaking gates
|
|
197
|
-
* are silenced by adding the global to `extraShim`, or per-run via
|
|
196
|
+
* (default `'warning'`: visible without breaking gates, while genuine shim
|
|
197
|
+
* gaps are silenced by adding the global to `extraShim`, or per-run via
|
|
198
|
+
* `'off'`).
|
|
198
199
|
*/
|
|
199
200
|
export const UNDEFINED_IDENTIFIER_CODES = new Set([
|
|
200
201
|
2304, // Cannot find name '{0}'.
|
|
@@ -243,18 +244,18 @@ async function inlineTripleSlashReferences(source, baseDir, seen) {
|
|
|
243
244
|
/**
|
|
244
245
|
* Composes the synthetic shim source by concatenating the built-in Firefox
|
|
245
246
|
* globals shim with the contents of an optional user-supplied `.d.ts` file.
|
|
246
|
-
* The user file is appended verbatim
|
|
247
|
+
* The user file is appended verbatim. The augment direction is intentional
|
|
247
248
|
* (declarations later in concat order augment earlier ones), so a project
|
|
248
249
|
* that wants to refine `Services` with a more specific type can do so in the
|
|
249
|
-
* extra shim, and members can be
|
|
250
|
-
* their interfaces (`interface ChromeUtilsShim { newMember(): any }
|
|
250
|
+
* extra shim, and members can be added to the structured globals by merging
|
|
251
|
+
* their interfaces (`interface ChromeUtilsShim { newMember(): any }`, see
|
|
251
252
|
* the module doc comment). Any triple-slash `/// <reference path="…">`
|
|
252
253
|
* directives inside the extra shim are inlined (resolved against the extra
|
|
253
254
|
* shim's own directory) so they are not silently dropped at the synthetic
|
|
254
255
|
* shim path.
|
|
255
256
|
*
|
|
256
257
|
* Missing extra-shim files raise a clear error rather than failing silently
|
|
257
|
-
* with a confusing "type not found" downstream
|
|
258
|
+
* with a confusing "type not found" downstream. This is the one
|
|
258
259
|
* config-driven path where a user typo in `fireforge.json` produces a
|
|
259
260
|
* runtime error, so it needs to be unmistakable.
|
|
260
261
|
*
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* command.
|
|
5
5
|
*
|
|
6
6
|
* Distinct from `patch-lint-checkjs.ts` (patch-hygiene): patchLint is
|
|
7
|
-
* scoped, fireforge-controlled, and runs as part of `fireforge lint
|
|
8
|
-
*
|
|
7
|
+
* scoped, fireforge-controlled, and runs as part of `fireforge lint`.
|
|
8
|
+
* This command runs whole projects with user-controlled compiler
|
|
9
9
|
* options and is intended as a CI gate. The two share the Firefox
|
|
10
10
|
* globals shim and suppressed-code list (via `typecheck-shim.ts`) so
|
|
11
11
|
* a file that lints clean cannot fail typecheck for a reason the
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
*
|
|
14
14
|
* Loads the TypeScript compiler API via dynamic import so it is only
|
|
15
15
|
* required when `typecheck.projects` is configured. TypeScript
|
|
16
|
-
* remains a dev-dependency
|
|
16
|
+
* remains a dev-dependency. If a user invokes `fireforge typecheck`
|
|
17
17
|
* without installing it, the function returns a clear error pointing
|
|
18
18
|
* at `npm install typescript`.
|
|
19
19
|
*/
|
|
@@ -22,7 +22,7 @@ import type { TypecheckProjectResult } from '../types/typecheck.js';
|
|
|
22
22
|
/**
|
|
23
23
|
* Sentinel string surfaced as a `TypecheckIssue.message` when the
|
|
24
24
|
* project's jsconfig sets `checkJs: false`. Exported so tests can
|
|
25
|
-
* pin the contract
|
|
25
|
+
* pin the contract, since operators rely on it to spot opted-out projects
|
|
26
26
|
* in CI logs.
|
|
27
27
|
*/
|
|
28
28
|
export declare const CHECK_JS_DISABLED_NOTICE = "Project sets \"checkJs: false\" \u2014 skipping (override the jsconfig to enable typecheck).";
|
|
@@ -31,20 +31,20 @@ export declare const CHECK_JS_DISABLED_NOTICE = "Project sets \"checkJs: false\"
|
|
|
31
31
|
*
|
|
32
32
|
* Per-project flow:
|
|
33
33
|
* 1. Read the jsconfig via the TS API. JSON parse / config-spec
|
|
34
|
-
* errors are surfaced as issues
|
|
35
|
-
* project must not abort the rest of the run.
|
|
34
|
+
* errors are surfaced as issues rather than thrown, because a single
|
|
35
|
+
* broken project must not abort the rest of the run.
|
|
36
36
|
* 2. Compute final compiler options from the user's options. We
|
|
37
|
-
* only force `noEmit: true` (this is a typecheck, not a build)
|
|
38
|
-
*
|
|
37
|
+
* only force `noEmit: true` (this is a typecheck, not a build).
|
|
38
|
+
* We honour `strict`, `target`, `lib`, `module`, `paths`,
|
|
39
39
|
* `include`, `exclude`. `allowJs` and `checkJs` default to
|
|
40
|
-
* `true` only when the user has not set them
|
|
40
|
+
* `true` only when the user has not set them. If the user set
|
|
41
41
|
* `checkJs: false` we treat that as an explicit opt-out and
|
|
42
42
|
* skip the project with a single notice (see {@link CHECK_JS_DISABLED_NOTICE}).
|
|
43
43
|
* 3. Inject the synthetic shim (built-in + optional extraShim) as
|
|
44
44
|
* a virtual root file that the custom CompilerHost serves.
|
|
45
|
-
* 4. Build the program
|
|
46
|
-
* global diagnostics. The patchLint flow only reads semantic +
|
|
47
|
-
* syntactic
|
|
45
|
+
* 4. Build the program and collect semantic, syntactic, options,
|
|
46
|
+
* and global diagnostics. The patchLint flow only reads semantic +
|
|
47
|
+
* syntactic, which is fine for hygiene, but a CI gate needs the full
|
|
48
48
|
* set so misconfigured `lib`/`paths` entries fail loudly.
|
|
49
49
|
* 5. Drop diagnostics whose code is in `SUPPRESSED_DIAGNOSTIC_CODES`
|
|
50
50
|
* and any diagnostic originating in the synthetic shim itself.
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* command.
|
|
6
6
|
*
|
|
7
7
|
* Distinct from `patch-lint-checkjs.ts` (patch-hygiene): patchLint is
|
|
8
|
-
* scoped, fireforge-controlled, and runs as part of `fireforge lint
|
|
9
|
-
*
|
|
8
|
+
* scoped, fireforge-controlled, and runs as part of `fireforge lint`.
|
|
9
|
+
* This command runs whole projects with user-controlled compiler
|
|
10
10
|
* options and is intended as a CI gate. The two share the Firefox
|
|
11
11
|
* globals shim and suppressed-code list (via `typecheck-shim.ts`) so
|
|
12
12
|
* a file that lints clean cannot fail typecheck for a reason the
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
*
|
|
15
15
|
* Loads the TypeScript compiler API via dynamic import so it is only
|
|
16
16
|
* required when `typecheck.projects` is configured. TypeScript
|
|
17
|
-
* remains a dev-dependency
|
|
17
|
+
* remains a dev-dependency. If a user invokes `fireforge typecheck`
|
|
18
18
|
* without installing it, the function returns a clear error pointing
|
|
19
19
|
* at `npm install typescript`.
|
|
20
20
|
*/
|
|
@@ -27,7 +27,7 @@ import { composeShimSource, SHIM_FILENAME, SUPPRESSED_DIAGNOSTIC_CODES, UNDEFINE
|
|
|
27
27
|
/**
|
|
28
28
|
* Sentinel string surfaced as a `TypecheckIssue.message` when the
|
|
29
29
|
* project's jsconfig sets `checkJs: false`. Exported so tests can
|
|
30
|
-
* pin the contract
|
|
30
|
+
* pin the contract, since operators rely on it to spot opted-out projects
|
|
31
31
|
* in CI logs.
|
|
32
32
|
*/
|
|
33
33
|
export const CHECK_JS_DISABLED_NOTICE = 'Project sets "checkJs: false" — skipping (override the jsconfig to enable typecheck).';
|
|
@@ -36,20 +36,20 @@ export const CHECK_JS_DISABLED_NOTICE = 'Project sets "checkJs: false" — skipp
|
|
|
36
36
|
*
|
|
37
37
|
* Per-project flow:
|
|
38
38
|
* 1. Read the jsconfig via the TS API. JSON parse / config-spec
|
|
39
|
-
* errors are surfaced as issues
|
|
40
|
-
* project must not abort the rest of the run.
|
|
39
|
+
* errors are surfaced as issues rather than thrown, because a single
|
|
40
|
+
* broken project must not abort the rest of the run.
|
|
41
41
|
* 2. Compute final compiler options from the user's options. We
|
|
42
|
-
* only force `noEmit: true` (this is a typecheck, not a build)
|
|
43
|
-
*
|
|
42
|
+
* only force `noEmit: true` (this is a typecheck, not a build).
|
|
43
|
+
* We honour `strict`, `target`, `lib`, `module`, `paths`,
|
|
44
44
|
* `include`, `exclude`. `allowJs` and `checkJs` default to
|
|
45
|
-
* `true` only when the user has not set them
|
|
45
|
+
* `true` only when the user has not set them. If the user set
|
|
46
46
|
* `checkJs: false` we treat that as an explicit opt-out and
|
|
47
47
|
* skip the project with a single notice (see {@link CHECK_JS_DISABLED_NOTICE}).
|
|
48
48
|
* 3. Inject the synthetic shim (built-in + optional extraShim) as
|
|
49
49
|
* a virtual root file that the custom CompilerHost serves.
|
|
50
|
-
* 4. Build the program
|
|
51
|
-
* global diagnostics. The patchLint flow only reads semantic +
|
|
52
|
-
* syntactic
|
|
50
|
+
* 4. Build the program and collect semantic, syntactic, options,
|
|
51
|
+
* and global diagnostics. The patchLint flow only reads semantic +
|
|
52
|
+
* syntactic, which is fine for hygiene, but a CI gate needs the full
|
|
53
53
|
* set so misconfigured `lib`/`paths` entries fail loudly.
|
|
54
54
|
* 5. Drop diagnostics whose code is in `SUPPRESSED_DIAGNOSTIC_CODES`
|
|
55
55
|
* and any diagnostic originating in the synthetic shim itself.
|
|
@@ -61,8 +61,8 @@ export const CHECK_JS_DISABLED_NOTICE = 'Project sets "checkJs: false" — skipp
|
|
|
61
61
|
* and computing the exit code.
|
|
62
62
|
*/
|
|
63
63
|
export async function runTypecheck(projectRoot, cfg) {
|
|
64
|
-
// Dynamic import
|
|
65
|
-
// as `patch-lint-checkjs.ts
|
|
64
|
+
// Dynamic import, so typescript stays a dev dependency. Same pattern
|
|
65
|
+
// as `patch-lint-checkjs.ts`. The empty-projects-array case is
|
|
66
66
|
// already rejected by config-validate, so we don't gate the import
|
|
67
67
|
// on `cfg.projects.length`.
|
|
68
68
|
let ts;
|
|
@@ -86,7 +86,7 @@ export async function runTypecheck(projectRoot, cfg) {
|
|
|
86
86
|
filesChecked: 0,
|
|
87
87
|
}));
|
|
88
88
|
}
|
|
89
|
-
// Compose the shim
|
|
89
|
+
// Compose the shim per project: the effective extraShim is the per-project
|
|
90
90
|
// override (a path, or `null` to opt out) when present, else the shared
|
|
91
91
|
// top-level extraShim. A project that narrows `lib`/`types` can opt out of
|
|
92
92
|
// a Gecko-lib shim hub that another project needs, so the composed shim is
|
|
@@ -114,7 +114,7 @@ export async function runTypecheck(projectRoot, cfg) {
|
|
|
114
114
|
}
|
|
115
115
|
catch (err) {
|
|
116
116
|
// A missing or unreadable shim fails only the project(s) that use it,
|
|
117
|
-
// not the whole run
|
|
117
|
+
// not the whole run. Projects with a different (or no) shim still run.
|
|
118
118
|
const message = toError(err).message;
|
|
119
119
|
results.push({
|
|
120
120
|
project: projectPath,
|
|
@@ -139,12 +139,12 @@ export async function runTypecheck(projectRoot, cfg) {
|
|
|
139
139
|
}
|
|
140
140
|
/**
|
|
141
141
|
* Resolves the effective extra shim for a single project: a `projectOverrides`
|
|
142
|
-
* entry wins (a string path overrides
|
|
142
|
+
* entry wins (a string path overrides, `null` opts out → `undefined`), else
|
|
143
143
|
* the shared top-level `extraShim` applies.
|
|
144
144
|
*/
|
|
145
145
|
function resolveProjectExtraShim(cfg, projectPath) {
|
|
146
146
|
const overrides = cfg.projectOverrides;
|
|
147
|
-
if (overrides && Object.
|
|
147
|
+
if (overrides && Object.hasOwn(overrides, projectPath)) {
|
|
148
148
|
const value = overrides[projectPath];
|
|
149
149
|
return value === null ? undefined : value;
|
|
150
150
|
}
|
|
@@ -171,7 +171,7 @@ async function runTypecheckForProject(ts, projectRoot, projectPath, shimSource,
|
|
|
171
171
|
};
|
|
172
172
|
}
|
|
173
173
|
// 1) Read the JSON config. ts.readConfigFile reports JSON-shape
|
|
174
|
-
// errors via the returned diagnostic
|
|
174
|
+
// errors via the returned diagnostic. Missing files fall back to
|
|
175
175
|
// pathExists above, which gives a more directly actionable message.
|
|
176
176
|
const readResult = ts.readConfigFile(absConfig, (path) => ts.sys.readFile(path));
|
|
177
177
|
if (readResult.error) {
|
|
@@ -183,7 +183,7 @@ async function runTypecheckForProject(ts, projectRoot, projectPath, shimSource,
|
|
|
183
183
|
}
|
|
184
184
|
// 2) Parse the config content. This is what surfaces config-spec
|
|
185
185
|
// errors (unknown options, mismatched types in `compilerOptions`,
|
|
186
|
-
// bad `include` patterns, etc.)
|
|
186
|
+
// bad `include` patterns, etc.), the TS5xxx codes. We surface them
|
|
187
187
|
// alongside semantic diagnostics so the operator sees the same
|
|
188
188
|
// output `tsc -p` would have produced.
|
|
189
189
|
const parsed = ts.parseJsonConfigFileContent(readResult.config, ts.sys, dirname(absConfig),
|
|
@@ -196,7 +196,7 @@ async function runTypecheckForProject(ts, projectRoot, projectPath, shimSource,
|
|
|
196
196
|
}
|
|
197
197
|
// 3) Honour explicit `checkJs: false`. The user has opted out for
|
|
198
198
|
// an IDE reason (likely "checkJs floods my workflow with non-actionable
|
|
199
|
-
// notes")
|
|
199
|
+
// notes"). Flipping it on here would surface ~hundreds of issues that
|
|
200
200
|
// the operator already evaluated and rejected. Surface a single
|
|
201
201
|
// notice so it is visible in CI logs rather than silently passing.
|
|
202
202
|
const rawConfig = readResult.config;
|
|
@@ -212,10 +212,10 @@ async function runTypecheckForProject(ts, projectRoot, projectPath, shimSource,
|
|
|
212
212
|
});
|
|
213
213
|
return { project: projectPath, issues, filesChecked: parsed.fileNames.length };
|
|
214
214
|
}
|
|
215
|
-
// 4) Compute final compiler options. `noEmit: true` is forced
|
|
215
|
+
// 4) Compute final compiler options. `noEmit: true` is forced, so we
|
|
216
216
|
// never write artifacts. `allowJs` / `checkJs` default to true
|
|
217
217
|
// *only* when unset (so a user can flip them off without us
|
|
218
|
-
// overriding)
|
|
218
|
+
// overriding). If the user set `allowJs: false` they're saying
|
|
219
219
|
// "don't even include JS in this typecheck", which is rare but
|
|
220
220
|
// legitimate (e.g. an isolated `.d.ts`-only project).
|
|
221
221
|
const options = {
|
|
@@ -225,26 +225,26 @@ async function runTypecheckForProject(ts, projectRoot, projectPath, shimSource,
|
|
|
225
225
|
checkJs: parsed.options.checkJs ?? true,
|
|
226
226
|
// No incremental sidecar, ever. A user jsconfig under `engine/` that sets
|
|
227
227
|
// `incremental` (or names a `tsBuildInfoFile`) would have this command
|
|
228
|
-
// drop a `.tsbuildinfo` inside the primary engine checkout
|
|
228
|
+
// drop a `.tsbuildinfo` inside the primary engine checkout: a second
|
|
229
229
|
// writer that invalidates a concurrent `fireforge test`'s engine
|
|
230
230
|
// fingerprint. This command emits nothing, so the sidecar buys nothing
|
|
231
231
|
// either.
|
|
232
232
|
incremental: false,
|
|
233
|
-
// skipLibCheck is not forced
|
|
233
|
+
// skipLibCheck is not forced. The user owns it via their jsconfig.
|
|
234
234
|
};
|
|
235
235
|
// `exactOptionalPropertyTypes` forbids assigning `undefined` to an
|
|
236
236
|
// optional `string`, so the sidecar path is dropped rather than unset.
|
|
237
237
|
delete options.tsBuildInfoFile;
|
|
238
238
|
// 5) The synthetic shim file. Use a project-rooted path with a
|
|
239
239
|
// hidden-style prefix so it is unlikely to collide with any real
|
|
240
|
-
// file
|
|
240
|
+
// file, and never write it to disk. The CompilerHost below serves
|
|
241
241
|
// it from `shimSource` for `fileExists`/`readFile`/`getSourceFile`.
|
|
242
242
|
const projectDir = dirname(absConfig);
|
|
243
|
-
// Forward slashes
|
|
243
|
+
// Forward slashes on purpose: TypeScript normalizes every `fileName` it
|
|
244
244
|
// hands a CompilerHost, on every platform. A shim path carrying Windows
|
|
245
245
|
// separators never matches those callbacks, so the shim is not served (its
|
|
246
246
|
// globals report as undefined identifiers) and its own diagnostics are not
|
|
247
|
-
// filtered out below
|
|
247
|
+
// filtered out below, so the pass reports failures that do not exist.
|
|
248
248
|
const shimPath = normalizePathSlashes(resolve(projectDir, `.fireforge-${SHIM_FILENAME}`));
|
|
249
249
|
const rootFiles = [...parsed.fileNames, shimPath];
|
|
250
250
|
const defaultHost = ts.createCompilerHost(options);
|
|
@@ -269,7 +269,7 @@ async function runTypecheckForProject(ts, projectRoot, projectPath, shimSource,
|
|
|
269
269
|
};
|
|
270
270
|
const program = ts.createProgram(rootFiles, options, host);
|
|
271
271
|
// Collect the full diagnostic set. patchLint reads only semantic +
|
|
272
|
-
// syntactic
|
|
272
|
+
// syntactic, which is fine for hygiene but wrong for CI: a misconfigured
|
|
273
273
|
// `lib: ["es2015"]` or a missing `paths` target should fail
|
|
274
274
|
// typecheck loudly via getOptionsDiagnostics / getGlobalDiagnostics.
|
|
275
275
|
const allDiagnostics = [
|
|
@@ -281,7 +281,7 @@ async function runTypecheckForProject(ts, projectRoot, projectPath, shimSource,
|
|
|
281
281
|
for (const diag of allDiagnostics) {
|
|
282
282
|
if (SUPPRESSED_DIAGNOSTIC_CODES.has(diag.code))
|
|
283
283
|
continue;
|
|
284
|
-
// Drop diagnostics that originate in the synthetic shim
|
|
284
|
+
// Drop diagnostics that originate in the synthetic shim. Operators
|
|
285
285
|
// can't act on them and they would clutter CI logs.
|
|
286
286
|
if (diag.file?.fileName === shimPath)
|
|
287
287
|
continue;
|
|
@@ -298,7 +298,7 @@ async function runTypecheckForProject(ts, projectRoot, projectPath, shimSource,
|
|
|
298
298
|
}
|
|
299
299
|
issues.push(diagnosticToIssue(ts, diag, absConfig, projectPath));
|
|
300
300
|
}
|
|
301
|
-
verbose(`typecheck: ${projectPath} — analyzed ${
|
|
301
|
+
verbose(`typecheck: ${projectPath} — analyzed ${parsed.fileNames.length} file(s), found ${issues.length} issue(s)`);
|
|
302
302
|
return {
|
|
303
303
|
project: projectPath,
|
|
304
304
|
issues,
|
|
@@ -308,7 +308,7 @@ async function runTypecheckForProject(ts, projectRoot, projectPath, shimSource,
|
|
|
308
308
|
/**
|
|
309
309
|
* Converts a TS Diagnostic to a TypecheckIssue. The `fallbackFile`
|
|
310
310
|
* is used when the diagnostic carries no source file (typical for
|
|
311
|
-
* options diagnostics)
|
|
311
|
+
* options diagnostics). It is typically the absolute jsconfig path or
|
|
312
312
|
* the project-relative form for surface-level errors. `project` is
|
|
313
313
|
* threaded through so the CLI can group issues by project without
|
|
314
314
|
* a second pass.
|
|
@@ -328,7 +328,7 @@ function diagnosticToIssue(ts, diag, fallbackFile, project) {
|
|
|
328
328
|
const message = typeof diag.messageText === 'string'
|
|
329
329
|
? diag.messageText
|
|
330
330
|
: ts.flattenDiagnosticMessageText(diag.messageText, '\n');
|
|
331
|
-
// Suggestion + Message categories collapse to 'warning'
|
|
331
|
+
// Suggestion + Message categories collapse to 'warning'. Only
|
|
332
332
|
// Error stays an error. This matches what the CLI then displays.
|
|
333
333
|
const category = diag.category === ts.DiagnosticCategory.Error ? 'error' : 'warning';
|
|
334
334
|
return {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* browser-init.js
|
|
2
|
+
* browser-init.js: destroy expression in onUnload()/uninit().
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
5
|
* AST-based implementation: finds onUnload()/uninit() method body and
|
|
@@ -16,7 +16,7 @@ export declare function addDestroyAST(content: string, expression: string, marke
|
|
|
16
16
|
export declare function legacyAddDestroy(content: string, expression: string, marker?: string): string;
|
|
17
17
|
/**
|
|
18
18
|
* Adds a destroy expression to the top of onUnload() or uninit() in
|
|
19
|
-
* browser-init.js (LIFO ordering
|
|
19
|
+
* browser-init.js (LIFO ordering, newest first).
|
|
20
20
|
*
|
|
21
21
|
* @param engineDir - Engine source root
|
|
22
22
|
* @param expression - The destroy expression (e.g., "MyComponent.destroy()")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
2
|
/**
|
|
3
|
-
* browser-init.js
|
|
3
|
+
* browser-init.js: destroy expression in onUnload()/uninit().
|
|
4
4
|
*/
|
|
5
5
|
import { join } from 'node:path';
|
|
6
6
|
import MagicString from 'magic-string';
|
|
@@ -36,7 +36,7 @@ export function addDestroyAST(content, expression, marker = DEFAULT_MARKER) {
|
|
|
36
36
|
throw new BuildError('Could not find onUnload/uninit method body via AST');
|
|
37
37
|
}
|
|
38
38
|
// Insert at top of method body (LIFO ordering)
|
|
39
|
-
// `noUncheckedIndexedAccess` makes this `Statement | undefined
|
|
39
|
+
// `noUncheckedIndexedAccess` makes this `Statement | undefined`. Narrow
|
|
40
40
|
// before casting rather than laundering the undefined through the cast.
|
|
41
41
|
const firstRaw = body.body[0];
|
|
42
42
|
const firstStmt = firstRaw ? asEstree(firstRaw) : undefined;
|
|
@@ -47,7 +47,7 @@ export function addDestroyAST(content, expression, marker = DEFAULT_MARKER) {
|
|
|
47
47
|
indent = detectIndent(content, firstStmt.start);
|
|
48
48
|
}
|
|
49
49
|
else {
|
|
50
|
-
// Empty method body
|
|
50
|
+
// Empty method body: insert after opening {
|
|
51
51
|
insertPos = body.start + 1;
|
|
52
52
|
indent = ' ';
|
|
53
53
|
}
|
|
@@ -95,7 +95,7 @@ export function legacyAddDestroy(content, expression, marker = DEFAULT_MARKER) {
|
|
|
95
95
|
}
|
|
96
96
|
/**
|
|
97
97
|
* Adds a destroy expression to the top of onUnload() or uninit() in
|
|
98
|
-
* browser-init.js (LIFO ordering
|
|
98
|
+
* browser-init.js (LIFO ordering, newest first).
|
|
99
99
|
*
|
|
100
100
|
* @param engineDir - Engine source root
|
|
101
101
|
* @param expression - The destroy expression (e.g., "MyComponent.destroy()")
|
|
@@ -108,7 +108,7 @@ export async function addDestroyToBrowserInit(engineDir, expression, marker = DE
|
|
|
108
108
|
throw new GeneralError(`${BROWSER_INIT_JS} not found in engine`);
|
|
109
109
|
}
|
|
110
110
|
const content = await readText(filePath);
|
|
111
|
-
// Idempotency check
|
|
111
|
+
// Idempotency check: look for the coerced (call) form because that is
|
|
112
112
|
// what the emitter writes. Matching against the raw input would miss a
|
|
113
113
|
// bare `X.destroy` invocation that coercion already persisted as
|
|
114
114
|
// `X.destroy()`.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Top-level chrome document
|
|
2
|
+
* Top-level chrome document: DOM fragment insertion.
|
|
3
3
|
*
|
|
4
4
|
* Default target is `browser/base/content/browser.xhtml`. Forks that replace
|
|
5
5
|
* browser.xhtml with a custom top-level chrome document pass the replacement
|
|
6
|
-
* path in via `targetPath
|
|
6
|
+
* path in via `targetPath`. The insertion logic is shape-agnostic (looks for
|
|
7
7
|
* `#include browser-sets.inc`, then falls back to `<html:body>`), so any
|
|
8
8
|
* browser.xhtml-shaped xhtml works.
|
|
9
9
|
*/
|
|
@@ -15,7 +15,7 @@ export declare function addDomFragmentTokenized(content: string, includeDirectiv
|
|
|
15
15
|
/**
|
|
16
16
|
* Dry-run precheck for `addDomFragment`. Reads the resolved chrome document
|
|
17
17
|
* and verifies it either already contains the `#include` directive (the
|
|
18
|
-
* idempotent-skip case)
|
|
18
|
+
* idempotent-skip case) or offers a locatable insertion point via
|
|
19
19
|
* {@link addDomFragmentTokenized} / {@link legacyAddDomFragment}. Throws the
|
|
20
20
|
* same `Could not find insertion point in chrome document` error the real
|
|
21
21
|
* run would throw when neither condition holds.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
2
|
/**
|
|
3
|
-
* Top-level chrome document
|
|
3
|
+
* Top-level chrome document: DOM fragment insertion.
|
|
4
4
|
*
|
|
5
5
|
* Default target is `browser/base/content/browser.xhtml`. Forks that replace
|
|
6
6
|
* browser.xhtml with a custom top-level chrome document pass the replacement
|
|
7
|
-
* path in via `targetPath
|
|
7
|
+
* path in via `targetPath`. The insertion logic is shape-agnostic (looks for
|
|
8
8
|
* `#include browser-sets.inc`, then falls back to `<html:body>`), so any
|
|
9
9
|
* browser.xhtml-shaped xhtml works.
|
|
10
10
|
*/
|
|
@@ -12,6 +12,7 @@ import { dirname, join, relative } from 'node:path';
|
|
|
12
12
|
import { GeneralError } from '../errors/base.js';
|
|
13
13
|
import { pathExists, readText, writeText } from '../utils/fs.js';
|
|
14
14
|
import { toRootRelativePath } from '../utils/paths.js';
|
|
15
|
+
import { normalizePathSlashes } from '../utils/paths.js';
|
|
15
16
|
import { escapeRegex } from '../utils/regex.js';
|
|
16
17
|
import { tokenizeXhtml } from './wire-utils.js';
|
|
17
18
|
export const DEFAULT_DOM_TARGET = 'browser/base/content/browser.xhtml';
|
|
@@ -22,23 +23,11 @@ export function addDomFragmentTokenized(content, includeDirective) {
|
|
|
22
23
|
const lines = content.split('\n');
|
|
23
24
|
const tokens = tokenizeXhtml(lines);
|
|
24
25
|
// Find the #include browser-sets.inc token
|
|
25
|
-
let insertIndex = -
|
|
26
|
-
for (let i = 0; i < tokens.length; i++) {
|
|
27
|
-
const token = tokens[i];
|
|
28
|
-
if (token && token.type === 'macro' && token.raw.includes('browser-sets.inc')) {
|
|
29
|
-
insertIndex = i;
|
|
30
|
-
break;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
26
|
+
let insertIndex = tokens.findIndex((token) => token.type === 'macro' && token.raw.includes('browser-sets.inc'));
|
|
33
27
|
if (insertIndex === -1) {
|
|
34
28
|
// Fallback: after <html:body>
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
if (token && token.type === 'xml' && /<html:body/.test(token.raw)) {
|
|
38
|
-
insertIndex = i + 1;
|
|
39
|
-
break;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
29
|
+
const bodyIndex = tokens.findIndex((token) => token.type === 'xml' && /<html:body/.test(token.raw));
|
|
30
|
+
insertIndex = bodyIndex === -1 ? -1 : bodyIndex + 1;
|
|
42
31
|
}
|
|
43
32
|
if (insertIndex === -1) {
|
|
44
33
|
throw new GeneralError('Could not find insertion point in chrome document');
|
|
@@ -49,7 +38,7 @@ export function addDomFragmentTokenized(content, includeDirective) {
|
|
|
49
38
|
/**
|
|
50
39
|
* Dry-run precheck for `addDomFragment`. Reads the resolved chrome document
|
|
51
40
|
* and verifies it either already contains the `#include` directive (the
|
|
52
|
-
* idempotent-skip case)
|
|
41
|
+
* idempotent-skip case) or offers a locatable insertion point via
|
|
53
42
|
* {@link addDomFragmentTokenized} / {@link legacyAddDomFragment}. Throws the
|
|
54
43
|
* same `Could not find insertion point in chrome document` error the real
|
|
55
44
|
* run would throw when neither condition holds.
|
|
@@ -62,18 +51,18 @@ export async function probeDomFragmentInsertionPoint(engineDir, domFilePath, tar
|
|
|
62
51
|
const targetAbsPath = join(engineDir, targetPath);
|
|
63
52
|
if (!(await pathExists(targetAbsPath))) {
|
|
64
53
|
// The callers in `wire.ts` run their own existence probe before
|
|
65
|
-
// invoking this helper, but a well-behaved probe is
|
|
54
|
+
// invoking this helper, but a well-behaved probe is careful: if
|
|
66
55
|
// something changed between the two checks, fail with the same
|
|
67
56
|
// error the real run would surface.
|
|
68
57
|
throw new GeneralError(`${targetPath} not found in engine`);
|
|
69
58
|
}
|
|
70
59
|
const safeDomFilePath = toRootRelativePath(engineDir, domFilePath);
|
|
71
60
|
const targetDir = dirname(targetPath);
|
|
72
|
-
const includePath = relative(targetDir, safeDomFilePath)
|
|
61
|
+
const includePath = normalizePathSlashes(relative(targetDir, safeDomFilePath));
|
|
73
62
|
const includeDirective = `#include ${includePath}`;
|
|
74
63
|
const content = await readText(targetAbsPath);
|
|
75
64
|
if (new RegExp(`^${escapeRegex(includeDirective)}$`, 'm').test(content)) {
|
|
76
|
-
// Already wired
|
|
65
|
+
// Already wired. The real run would idempotent-skip here, so
|
|
77
66
|
// dry-run is allowed to proceed too.
|
|
78
67
|
return;
|
|
79
68
|
}
|
|
@@ -104,12 +93,12 @@ export async function addDomFragment(engineDir, domFilePath, targetPath = DEFAUL
|
|
|
104
93
|
if (!(await pathExists(targetAbsPath))) {
|
|
105
94
|
throw new GeneralError(`${targetPath} not found in engine`);
|
|
106
95
|
}
|
|
107
|
-
// Compute include path relative to the target's directory
|
|
96
|
+
// Compute include path relative to the target's directory. The `#include`
|
|
108
97
|
// directive is resolved by the preprocessor relative to the file that
|
|
109
98
|
// contains it, so this must track the chrome doc's location, not a
|
|
110
99
|
// hardcoded `browser/base/content/`.
|
|
111
100
|
const targetDir = dirname(targetPath);
|
|
112
|
-
const includePath = relative(targetDir, safeDomFilePath)
|
|
101
|
+
const includePath = normalizePathSlashes(relative(targetDir, safeDomFilePath));
|
|
113
102
|
const includeDirective = `#include ${includePath}`;
|
|
114
103
|
let content = await readText(targetAbsPath);
|
|
115
104
|
// Idempotency: check if the #include directive already exists (line-anchored to avoid substring matches)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* browser-init.js
|
|
2
|
+
* browser-init.js: init expression in onLoad().
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
5
|
* AST-based implementation: finds onLoad() method body, locates existing
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*
|
|
9
9
|
* `marker` is prepended (uppercased) to the generated comment line so the
|
|
10
10
|
* emitted block carries the patch-lint `// <MARKER>:` signature that
|
|
11
|
-
* `lintModificationComments` looks for
|
|
11
|
+
* `lintModificationComments` looks for. Otherwise the first export after
|
|
12
12
|
* `wire` trips `missing-modification-comment` on wire-generated edits.
|
|
13
13
|
*/
|
|
14
14
|
export declare function addInitAST(content: string, expression: string, after?: string, marker?: string): string;
|