@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
|
@@ -3,17 +3,17 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Loads the TypeScript compiler API via dynamic import so it is only
|
|
5
5
|
* required when `patchLint.checkJs` is enabled in `fireforge.json`.
|
|
6
|
-
* TypeScript remains a dev-dependency
|
|
6
|
+
* TypeScript remains a dev-dependency. If a user enables checkJs
|
|
7
7
|
* without installing it, the pass emits a clear error explaining
|
|
8
8
|
* how to fix it.
|
|
9
9
|
*
|
|
10
10
|
* Separated from `patch-lint.ts` to keep both files within the
|
|
11
11
|
* project's per-file line budget. The shim itself and the suppressed
|
|
12
12
|
* diagnostic code list now live in `typecheck-shim.ts` and are shared
|
|
13
|
-
* with the whole-project `fireforge typecheck` command
|
|
13
|
+
* with the whole-project `fireforge typecheck` command, keeping a
|
|
14
14
|
* single source of truth for the Firefox-globals coverage.
|
|
15
15
|
* `patchLint.checkJsStrict` only tightens `strict` / `noImplicitAny`
|
|
16
|
-
* and optional allowlisted `checkJsCompilerOptions
|
|
16
|
+
* and optional allowlisted `checkJsCompilerOptions`. It does not change
|
|
17
17
|
* shim composition or suppressed diagnostic codes.
|
|
18
18
|
*
|
|
19
19
|
* Resolution scope vs reporting scope: the TS program is built over a
|
|
@@ -26,57 +26,74 @@
|
|
|
26
26
|
*/
|
|
27
27
|
import type { PatchLintIssue } from '../types/commands/index.js';
|
|
28
28
|
import type { PatchLintCheckJsCompilerOptions, PatchLintConfig, PatchLintSeverityGate } from '../types/config.js';
|
|
29
|
-
/** How a checkJs run controls reporting and resolution
|
|
29
|
+
/** How a checkJs run controls reporting and resolution. See module docs. */
|
|
30
30
|
export interface CheckJsMode {
|
|
31
31
|
strict: boolean;
|
|
32
32
|
compilerOptions?: PatchLintCheckJsCompilerOptions;
|
|
33
33
|
/**
|
|
34
34
|
* How to report undefined free identifiers (TS2304/TS2552). Default
|
|
35
|
-
* 'warning'
|
|
35
|
+
* 'warning'. See `patchLint.undefinedIdentifiers`.
|
|
36
36
|
*/
|
|
37
37
|
undefinedIdentifiers?: PatchLintSeverityGate;
|
|
38
38
|
}
|
|
39
39
|
/**
|
|
40
40
|
* Result of {@link runCheckJsGrouped}: diagnostics attributed to the
|
|
41
41
|
* patch-owned file they originate in (`byFile`, keyed by repo-relative
|
|
42
|
-
* path), plus run-level errors that have no owning file (`global
|
|
42
|
+
* path), plus run-level errors that have no owning file (`global`, e.g.
|
|
43
43
|
* TypeScript missing or an unreadable extra shim).
|
|
44
44
|
*/
|
|
45
45
|
export interface GroupedCheckJsResult {
|
|
46
46
|
byFile: Map<string, PatchLintIssue[]>;
|
|
47
47
|
global: PatchLintIssue[];
|
|
48
48
|
}
|
|
49
|
+
/** Inputs for {@link runCheckJsGrouped}. */
|
|
50
|
+
export interface RunCheckJsGroupedInput {
|
|
51
|
+
/** Absolute engine (repository) directory. */
|
|
52
|
+
repoDir: string;
|
|
53
|
+
/**
|
|
54
|
+
* Patch-owned `.sys.mjs` paths (relative to `repoDir`) the program should
|
|
55
|
+
* see and resolve against.
|
|
56
|
+
*/
|
|
57
|
+
resolutionOwned: Set<string>;
|
|
58
|
+
/**
|
|
59
|
+
* Optional project-relative extra `.d.ts` appended to the built-in
|
|
60
|
+
* Firefox-globals shim (from `patchLint.checkJsExtraShim`).
|
|
61
|
+
*/
|
|
62
|
+
extraShimPath?: string;
|
|
63
|
+
/** Absolute project root for resolving `extraShimPath`. */
|
|
64
|
+
projectRoot?: string;
|
|
65
|
+
/** Strictness preset plus allowlisted compiler-option overrides. */
|
|
66
|
+
mode?: CheckJsMode;
|
|
67
|
+
/** Optional shim text appended after the consumer shim. */
|
|
68
|
+
builtinShimSuffix?: string;
|
|
69
|
+
/**
|
|
70
|
+
* When set, only these repo-relative files become program roots.
|
|
71
|
+
* Resolution (and the host allowlist) still spans all of
|
|
72
|
+
* `resolutionOwned`, so a subset root's cross-patch imports type-check
|
|
73
|
+
* against the real owning sources while unrelated owned files are never
|
|
74
|
+
* parsed. `.mjs` files are module-scoped, so a root's diagnostics are
|
|
75
|
+
* identical whether other owned files are roots or mere resolution
|
|
76
|
+
* targets.
|
|
77
|
+
*/
|
|
78
|
+
rootScope?: ReadonlySet<string>;
|
|
79
|
+
}
|
|
49
80
|
/**
|
|
50
|
-
* Builds the checkJs program
|
|
81
|
+
* Builds the checkJs program once over `resolutionOwned` and returns its
|
|
51
82
|
* diagnostics grouped by originating file. Callers slice the result by their
|
|
52
|
-
* own report scope
|
|
83
|
+
* own report scope: per-patch lint attributes each file to its owning patch,
|
|
53
84
|
* export/re-export keeps only the patch under export. Resolution always spans
|
|
54
85
|
* every file in `resolutionOwned`, so cross-patch `resource:///`/`chrome://`
|
|
55
86
|
* imports resolve to real sources.
|
|
56
87
|
*
|
|
57
|
-
* @param
|
|
58
|
-
* @param resolutionOwned - Patch-owned `.sys.mjs` paths (relative to repoDir)
|
|
59
|
-
* the program should see and resolve against
|
|
60
|
-
* @param extraShimPath - Optional project-relative extra `.d.ts` appended to
|
|
61
|
-
* the built-in Firefox-globals shim (from `patchLint.checkJsExtraShim`)
|
|
62
|
-
* @param projectRoot - Absolute project root for resolving `extraShimPath`
|
|
63
|
-
* @param mode - Strictness preset plus allowlisted compiler-option overrides
|
|
64
|
-
* @param builtinShimSuffix - Optional shim text appended AFTER the consumer
|
|
65
|
-
* shim
|
|
66
|
-
* @param rootScope - When set, only these repo-relative files become program
|
|
67
|
-
* ROOTS; resolution (and the host allowlist) still spans all of
|
|
68
|
-
* `resolutionOwned`, so a subset root's cross-patch imports type-check
|
|
69
|
-
* against the real owning sources while unrelated owned files are never
|
|
70
|
-
* parsed. `.mjs` files are module-scoped, so a root's diagnostics are
|
|
71
|
-
* identical whether other owned files are roots or mere resolution targets.
|
|
88
|
+
* @param input - Program inputs. See {@link RunCheckJsGroupedInput}
|
|
72
89
|
* @returns Diagnostics grouped per owning file plus run-level errors
|
|
73
90
|
*/
|
|
74
|
-
export declare function runCheckJsGrouped(
|
|
91
|
+
export declare function runCheckJsGrouped(input: RunCheckJsGroupedInput): Promise<GroupedCheckJsResult>;
|
|
75
92
|
/**
|
|
76
93
|
* Flattens a {@link runCheckJsGrouped} run into a single issue list. When
|
|
77
94
|
* `reportScope` is supplied, only diagnostics from files in that set are
|
|
78
|
-
* returned (resolution still spans every owned file)
|
|
79
|
-
* every owned file's diagnostics
|
|
95
|
+
* returned (resolution still spans every owned file). Omitting it reports
|
|
96
|
+
* every owned file's diagnostics, the historical whole-set behaviour.
|
|
80
97
|
*
|
|
81
98
|
* @param repoDir - Absolute engine (repository) directory
|
|
82
99
|
* @param patchOwnedFiles - Patch-owned `.sys.mjs` paths to resolve against
|
|
@@ -103,15 +120,15 @@ export declare function runCheckJs(repoDir: string, patchOwnedFiles: Set<string>
|
|
|
103
120
|
export declare function invokePatchLintCheckJs(repoDir: string, patchOwnedFiles: Set<string>, patchLint: PatchLintConfig, projectRoot: string, reportScope?: ReadonlySet<string>): Promise<PatchLintIssue[]>;
|
|
104
121
|
/**
|
|
105
122
|
* Runs the checkJs pass over patch-owned test `.js` files (
|
|
106
|
-
* `patchLint.checkJsTestFiles`). Each test file gets its
|
|
107
|
-
* program
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
* program (head helpers report from their own program), and
|
|
114
|
-
* errors are de-duplicated across programs.
|
|
123
|
+
* `patchLint.checkJsTestFiles`). Each test file gets its own small
|
|
124
|
+
* program, with roots = the test file plus any same-directory patch-owned
|
|
125
|
+
* `head*.js`, checked against the built-in Firefox shim +
|
|
126
|
+
* {@link TEST_HARNESS_SHIM} + the optional consumer `checkJsTestShim`.
|
|
127
|
+
* Mochitest scripts share top-level scope only with their directory's
|
|
128
|
+
* `head*.js` helpers, so one multi-script program would emit false
|
|
129
|
+
* cross-file redeclaration errors. Only the target file's diagnostics are
|
|
130
|
+
* reported per program (head helpers report from their own program), and
|
|
131
|
+
* run-level errors are de-duplicated across programs.
|
|
115
132
|
*
|
|
116
133
|
* @param repoDir - Absolute engine (repository) directory
|
|
117
134
|
* @param testFiles - Patch-owned test-script paths (repo-relative)
|
|
@@ -122,7 +139,7 @@ export declare function runCheckJsTestFilesGrouped(repoDir: string, testFiles: S
|
|
|
122
139
|
/**
|
|
123
140
|
* Grouped variant of {@link invokePatchLintCheckJs}: builds one queue-wide
|
|
124
141
|
* checkJs program over `patchOwnedFiles` and returns its findings grouped by
|
|
125
|
-
* owning file. The per-patch lint orchestrator calls this
|
|
142
|
+
* owning file. The per-patch lint orchestrator calls this once per run
|
|
126
143
|
* and attributes each file's findings to its owning patch, instead of
|
|
127
144
|
* rebuilding the same program for every patch in the queue.
|
|
128
145
|
*
|
|
@@ -131,12 +148,12 @@ export declare function runCheckJsTestFilesGrouped(repoDir: string, testFiles: S
|
|
|
131
148
|
* @param patchLint - The resolved `patchLint` config block
|
|
132
149
|
* @param projectRoot - FireForge project root for shim resolution
|
|
133
150
|
* @param rootScope - Optional subset of files to use as program roots
|
|
134
|
-
* (`--patches`)
|
|
151
|
+
* (`--patches`). Resolution still spans the whole queue
|
|
135
152
|
*/
|
|
136
153
|
export declare function invokePatchLintCheckJsGrouped(repoDir: string, patchOwnedFiles: Set<string>, patchLint: PatchLintConfig, projectRoot: string, rootScope?: ReadonlySet<string>): Promise<GroupedCheckJsResult>;
|
|
137
154
|
/**
|
|
138
155
|
* Cheap probe reproducing the only run-level ("global") checkJs findings the
|
|
139
|
-
* build path can produce
|
|
156
|
+
* build path can produce: a missing `typescript` package and an unreadable
|
|
140
157
|
* consumer shim (`checkJsExtraShim`, and `checkJsTestShim` when
|
|
141
158
|
* `checkJsTestFiles` is on). The built program itself never contributes
|
|
142
159
|
* globals (see {@link runCheckJsGrouped}), so a warm all-cache-hit run can
|
|
@@ -4,17 +4,17 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Loads the TypeScript compiler API via dynamic import so it is only
|
|
6
6
|
* required when `patchLint.checkJs` is enabled in `fireforge.json`.
|
|
7
|
-
* TypeScript remains a dev-dependency
|
|
7
|
+
* TypeScript remains a dev-dependency. If a user enables checkJs
|
|
8
8
|
* without installing it, the pass emits a clear error explaining
|
|
9
9
|
* how to fix it.
|
|
10
10
|
*
|
|
11
11
|
* Separated from `patch-lint.ts` to keep both files within the
|
|
12
12
|
* project's per-file line budget. The shim itself and the suppressed
|
|
13
13
|
* diagnostic code list now live in `typecheck-shim.ts` and are shared
|
|
14
|
-
* with the whole-project `fireforge typecheck` command
|
|
14
|
+
* with the whole-project `fireforge typecheck` command, keeping a
|
|
15
15
|
* single source of truth for the Firefox-globals coverage.
|
|
16
16
|
* `patchLint.checkJsStrict` only tightens `strict` / `noImplicitAny`
|
|
17
|
-
* and optional allowlisted `checkJsCompilerOptions
|
|
17
|
+
* and optional allowlisted `checkJsCompilerOptions`. It does not change
|
|
18
18
|
* shim composition or suppressed diagnostic codes.
|
|
19
19
|
*
|
|
20
20
|
* Resolution scope vs reporting scope: the TS program is built over a
|
|
@@ -39,11 +39,12 @@ import { composeShimSource, SHIM_FILENAME, SUPPRESSED_DIAGNOSTIC_CODES, TEST_HAR
|
|
|
39
39
|
* Converts a native path into the form TypeScript uses for `fileName`.
|
|
40
40
|
*
|
|
41
41
|
* TypeScript normalizes every path it hands a `CompilerHost` to forward
|
|
42
|
-
* slashes on
|
|
42
|
+
* slashes on all platforms, while `resolve()` here yields the platform
|
|
43
43
|
* separator. On Windows that mismatch made every `ownedAbsolute.has(fileName)`
|
|
44
44
|
* and `relByAbsolute.get(fileName)` lookup miss, so the host served an empty
|
|
45
|
-
* source file for each owned file and the whole pass reported zero findings
|
|
46
|
-
* silently, because "no diagnostics" is indistinguishable from
|
|
45
|
+
* source file for each owned file and the whole pass reported zero findings.
|
|
46
|
+
* It did so silently, because "no diagnostics" is indistinguishable from
|
|
47
|
+
* "clean code".
|
|
47
48
|
* Every path that crosses the TS boundary goes through here.
|
|
48
49
|
*/
|
|
49
50
|
function toTsPath(path) {
|
|
@@ -55,8 +56,8 @@ function toTsPath(path) {
|
|
|
55
56
|
* segment uniquely matches an owned file. URL specifiers
|
|
56
57
|
* (chrome://browser/content/Foo.sys.mjs, resource:///modules/Foo.sys.mjs)
|
|
57
58
|
* are matched by basename, with a `.mjs` → `.sys.mjs` fallback for deployed
|
|
58
|
-
* widget URLs. Ambiguous or unknown basenames stay unresolved
|
|
59
|
-
* wildcard typing beats guessing the wrong module
|
|
59
|
+
* widget URLs. Ambiguous or unknown basenames stay unresolved (loose
|
|
60
|
+
* wildcard typing beats guessing the wrong module), and relative specifiers
|
|
60
61
|
* are left to fail resolution (the relative-import lint rule bans them).
|
|
61
62
|
*/
|
|
62
63
|
function createOwnedSpecifierResolver(ts, ownedAbsolute) {
|
|
@@ -105,8 +106,8 @@ function extensionForFile(ts, file) {
|
|
|
105
106
|
}
|
|
106
107
|
/**
|
|
107
108
|
* Builds a resolver for a reviewed `paths` mapping (route 2 of the
|
|
108
|
-
* cross-patch resolution work). Each pattern may contain a single
|
|
109
|
-
*
|
|
109
|
+
* cross-patch resolution work). Each pattern may contain a single `*`.
|
|
110
|
+
* Matching targets are resolved relative to `baseDir` (the engine dir, like
|
|
110
111
|
* the rest of `patchLint` which is engine-relative). Resolved files are
|
|
111
112
|
* recorded via `onResolved` so the compiler host knows to read them from
|
|
112
113
|
* disk rather than returning empty content. No `baseUrl` is set, so this is
|
|
@@ -134,7 +135,7 @@ function createPathsResolver(ts, paths, baseDir, fileExists, onResolved) {
|
|
|
134
135
|
}
|
|
135
136
|
for (const target of targets) {
|
|
136
137
|
// A `paths` target carries at most one `*`, and TypeScript substitutes
|
|
137
|
-
// that one wildcard
|
|
138
|
+
// that one wildcard. It is spelled as index arithmetic (mirroring the
|
|
138
139
|
// prefix/suffix split on the pattern side above) rather than
|
|
139
140
|
// `replace('*', …)`, whose first-occurrence-only behaviour reads as an
|
|
140
141
|
// incomplete rewrite (CodeQL `js/incomplete-sanitization`).
|
|
@@ -155,35 +156,22 @@ function createPathsResolver(ts, paths, baseDir, fileExists, onResolved) {
|
|
|
155
156
|
};
|
|
156
157
|
}
|
|
157
158
|
/**
|
|
158
|
-
* Builds the checkJs program
|
|
159
|
+
* Builds the checkJs program once over `resolutionOwned` and returns its
|
|
159
160
|
* diagnostics grouped by originating file. Callers slice the result by their
|
|
160
|
-
* own report scope
|
|
161
|
+
* own report scope: per-patch lint attributes each file to its owning patch,
|
|
161
162
|
* export/re-export keeps only the patch under export. Resolution always spans
|
|
162
163
|
* every file in `resolutionOwned`, so cross-patch `resource:///`/`chrome://`
|
|
163
164
|
* imports resolve to real sources.
|
|
164
165
|
*
|
|
165
|
-
* @param
|
|
166
|
-
* @param resolutionOwned - Patch-owned `.sys.mjs` paths (relative to repoDir)
|
|
167
|
-
* the program should see and resolve against
|
|
168
|
-
* @param extraShimPath - Optional project-relative extra `.d.ts` appended to
|
|
169
|
-
* the built-in Firefox-globals shim (from `patchLint.checkJsExtraShim`)
|
|
170
|
-
* @param projectRoot - Absolute project root for resolving `extraShimPath`
|
|
171
|
-
* @param mode - Strictness preset plus allowlisted compiler-option overrides
|
|
172
|
-
* @param builtinShimSuffix - Optional shim text appended AFTER the consumer
|
|
173
|
-
* shim
|
|
174
|
-
* @param rootScope - When set, only these repo-relative files become program
|
|
175
|
-
* ROOTS; resolution (and the host allowlist) still spans all of
|
|
176
|
-
* `resolutionOwned`, so a subset root's cross-patch imports type-check
|
|
177
|
-
* against the real owning sources while unrelated owned files are never
|
|
178
|
-
* parsed. `.mjs` files are module-scoped, so a root's diagnostics are
|
|
179
|
-
* identical whether other owned files are roots or mere resolution targets.
|
|
166
|
+
* @param input - Program inputs. See {@link RunCheckJsGroupedInput}
|
|
180
167
|
* @returns Diagnostics grouped per owning file plus run-level errors
|
|
181
168
|
*/
|
|
182
|
-
export async function runCheckJsGrouped(
|
|
169
|
+
export async function runCheckJsGrouped(input) {
|
|
170
|
+
const { repoDir, resolutionOwned, extraShimPath, rootScope } = input;
|
|
183
171
|
const empty = { byFile: new Map(), global: [] };
|
|
184
172
|
if (resolutionOwned.size === 0)
|
|
185
173
|
return empty;
|
|
186
|
-
// Dynamic import
|
|
174
|
+
// Dynamic import: typescript stays as a dev dependency
|
|
187
175
|
let ts;
|
|
188
176
|
try {
|
|
189
177
|
ts = await import('typescript');
|
|
@@ -204,7 +192,7 @@ export async function runCheckJsGrouped(repoDir, resolutionOwned, extraShimPath,
|
|
|
204
192
|
}
|
|
205
193
|
// Resolve absolute paths for root files, filtering to files that exist.
|
|
206
194
|
// Under a rootScope, non-scoped owned files stay resolvable (host
|
|
207
|
-
// allowlist + relByAbsolute) but are not program roots
|
|
195
|
+
// allowlist + relByAbsolute) but are not program roots. They are only
|
|
208
196
|
// parsed if a scoped root's import closure reaches them.
|
|
209
197
|
const rootFiles = [];
|
|
210
198
|
const ownedAbsolute = new Set();
|
|
@@ -221,18 +209,20 @@ export async function runCheckJsGrouped(repoDir, resolutionOwned, extraShimPath,
|
|
|
221
209
|
if (rootFiles.length === 0)
|
|
222
210
|
return empty;
|
|
223
211
|
// Compose the shim. `extraShimPath` is project-relative (validated
|
|
224
|
-
// by config-validate)
|
|
225
|
-
// caller passes neither, fall back to `repoDir
|
|
212
|
+
// by config-validate). Resolve it against `projectRoot`. When the
|
|
213
|
+
// caller passes neither, fall back to `repoDir`. The only way the
|
|
226
214
|
// shim path is ever read in that case is when extraShimPath is
|
|
227
215
|
// also undefined, so the resolution target is irrelevant.
|
|
228
216
|
let shimSource;
|
|
229
217
|
try {
|
|
230
|
-
const composed = await composeShimSource(projectRoot ?? repoDir, extraShimPath);
|
|
218
|
+
const composed = await composeShimSource(input.projectRoot ?? repoDir, extraShimPath);
|
|
231
219
|
// The suffix (e.g. the loose test-harness baseline) goes
|
|
232
|
-
//
|
|
233
|
-
// `declare var` redeclarations to the
|
|
220
|
+
// after the consumer's extra shim: TypeScript resolves conflicting
|
|
221
|
+
// `declare var` redeclarations to the first declaration, so a typed
|
|
234
222
|
// consumer declaration must precede the loose fallback to win.
|
|
235
|
-
shimSource =
|
|
223
|
+
shimSource = input.builtinShimSuffix
|
|
224
|
+
? `${composed.source}\n${input.builtinShimSuffix}`
|
|
225
|
+
: composed.source;
|
|
236
226
|
if (composed.extraShimAppended) {
|
|
237
227
|
verbose(`checkJs: extra shim ${extraShimPath ?? ''} appended to Firefox globals shim`);
|
|
238
228
|
}
|
|
@@ -252,21 +242,21 @@ export async function runCheckJsGrouped(repoDir, resolutionOwned, extraShimPath,
|
|
|
252
242
|
}
|
|
253
243
|
const shimPath = toTsPath(resolve(repoDir, SHIM_FILENAME));
|
|
254
244
|
rootFiles.push(shimPath);
|
|
255
|
-
const strict = mode?.strict === true;
|
|
245
|
+
const strict = input.mode?.strict === true;
|
|
256
246
|
const strictness = strict
|
|
257
247
|
? { strict: true, noImplicitAny: true }
|
|
258
248
|
: {
|
|
259
|
-
// Loose default
|
|
249
|
+
// Loose default: implicit `any` is allowed unless `patchLint.checkJsStrict`.
|
|
260
250
|
strict: false,
|
|
261
251
|
noImplicitAny: false,
|
|
262
252
|
};
|
|
263
|
-
// Allowlisted overrides. Booleans merge directly
|
|
264
|
-
// mapping is applied to the compiler options
|
|
253
|
+
// Allowlisted overrides. Booleans merge directly. A reviewed `paths`
|
|
254
|
+
// mapping is applied to the compiler options and wired into the host
|
|
265
255
|
// resolver below so patch-owned modules can be typed from their real
|
|
266
256
|
// sources without a hand-generated ambient stub shim.
|
|
267
257
|
const overrides = {};
|
|
268
258
|
let pathsMapping;
|
|
269
|
-
const co = mode?.compilerOptions;
|
|
259
|
+
const co = input.mode?.compilerOptions;
|
|
270
260
|
if (co) {
|
|
271
261
|
for (const key of Object.keys(co)) {
|
|
272
262
|
const v = co[key];
|
|
@@ -292,10 +282,10 @@ export async function runCheckJsGrouped(repoDir, resolutionOwned, extraShimPath,
|
|
|
292
282
|
// Module resolution is host-controlled (see resolveOwnedSpecifier
|
|
293
283
|
// below): imports that match a patch-owned file resolve to the real
|
|
294
284
|
// source so JSDoc type-guard predicates and @template generics
|
|
295
|
-
// survive the module boundary
|
|
285
|
+
// survive the module boundary. Everything else is left to fail
|
|
296
286
|
// resolution, falling back to the chrome:*/resource:* ambient
|
|
297
287
|
// wildcards plus the suppressed "cannot find module" codes. The
|
|
298
|
-
// host resolver is authoritative
|
|
288
|
+
// host resolver is authoritative: TS never crawls the Firefox
|
|
299
289
|
// tree looking for upstream modules.
|
|
300
290
|
...strictness,
|
|
301
291
|
...overrides,
|
|
@@ -305,7 +295,7 @@ export async function runCheckJsGrouped(repoDir, resolutionOwned, extraShimPath,
|
|
|
305
295
|
// the shim for the shim path, and returns empty content for
|
|
306
296
|
// anything else to avoid reading the full Firefox tree.
|
|
307
297
|
const defaultHost = ts.createCompilerHost(options);
|
|
308
|
-
// Files pulled in via a reviewed `paths` mapping
|
|
298
|
+
// Files pulled in via a reviewed `paths` mapping: outside the owned set
|
|
309
299
|
// but read from disk so the resolver's targets actually type-check.
|
|
310
300
|
const pathsResolved = new Set();
|
|
311
301
|
const resolveViaPaths = pathsMapping
|
|
@@ -351,7 +341,7 @@ export async function runCheckJsGrouped(repoDir, resolutionOwned, extraShimPath,
|
|
|
351
341
|
},
|
|
352
342
|
};
|
|
353
343
|
const program = ts.createProgram(rootFiles, options, host);
|
|
354
|
-
const byFile = groupOwnedDiagnostics(ts, [...program.getSemanticDiagnostics(), ...program.getSyntacticDiagnostics()], relByAbsolute, mode?.undefinedIdentifiers ?? 'warning');
|
|
344
|
+
const byFile = groupOwnedDiagnostics(ts, [...program.getSemanticDiagnostics(), ...program.getSyntacticDiagnostics()], relByAbsolute, input.mode?.undefinedIdentifiers ?? 'warning');
|
|
355
345
|
verbose(`checkJs: analyzed ${rootFiles.length - 1} file(s) across ${byFile.size} owning file(s)`);
|
|
356
346
|
return { byFile, global: [] };
|
|
357
347
|
}
|
|
@@ -359,7 +349,7 @@ export async function runCheckJsGrouped(repoDir, resolutionOwned, extraShimPath,
|
|
|
359
349
|
* Groups TS diagnostics by the patch-owned file they originate in,
|
|
360
350
|
* suppressing module-resolution / unknown-name noise inherent to checking
|
|
361
351
|
* Firefox JS outside Mozilla's build system. Diagnostics from `paths`-resolved
|
|
362
|
-
* or shim files are dropped
|
|
352
|
+
* or shim files are dropped. Only owned files (in `relByAbsolute`) carry
|
|
363
353
|
* findings.
|
|
364
354
|
*/
|
|
365
355
|
function groupOwnedDiagnostics(ts, diagnostics, relByAbsolute, undefinedIdentifiers = 'warning') {
|
|
@@ -404,8 +394,8 @@ function groupOwnedDiagnostics(ts, diagnostics, relByAbsolute, undefinedIdentifi
|
|
|
404
394
|
/**
|
|
405
395
|
* Flattens a {@link runCheckJsGrouped} run into a single issue list. When
|
|
406
396
|
* `reportScope` is supplied, only diagnostics from files in that set are
|
|
407
|
-
* returned (resolution still spans every owned file)
|
|
408
|
-
* every owned file's diagnostics
|
|
397
|
+
* returned (resolution still spans every owned file). Omitting it reports
|
|
398
|
+
* every owned file's diagnostics, the historical whole-set behaviour.
|
|
409
399
|
*
|
|
410
400
|
* @param repoDir - Absolute engine (repository) directory
|
|
411
401
|
* @param patchOwnedFiles - Patch-owned `.sys.mjs` paths to resolve against
|
|
@@ -417,7 +407,13 @@ function groupOwnedDiagnostics(ts, diagnostics, relByAbsolute, undefinedIdentifi
|
|
|
417
407
|
* @returns Array of lint issues from TS diagnostics
|
|
418
408
|
*/
|
|
419
409
|
export async function runCheckJs(repoDir, patchOwnedFiles, extraShimPath, projectRoot, mode, reportScope) {
|
|
420
|
-
const { byFile, global } = await runCheckJsGrouped(
|
|
410
|
+
const { byFile, global } = await runCheckJsGrouped({
|
|
411
|
+
repoDir,
|
|
412
|
+
resolutionOwned: patchOwnedFiles,
|
|
413
|
+
...(extraShimPath !== undefined ? { extraShimPath } : {}),
|
|
414
|
+
...(projectRoot !== undefined ? { projectRoot } : {}),
|
|
415
|
+
...(mode !== undefined ? { mode } : {}),
|
|
416
|
+
});
|
|
421
417
|
const issues = [...global];
|
|
422
418
|
for (const [rel, list] of byFile) {
|
|
423
419
|
if (reportScope && !reportScope.has(rel))
|
|
@@ -443,15 +439,15 @@ export async function invokePatchLintCheckJs(repoDir, patchOwnedFiles, patchLint
|
|
|
443
439
|
}
|
|
444
440
|
/**
|
|
445
441
|
* Runs the checkJs pass over patch-owned test `.js` files (
|
|
446
|
-
* `patchLint.checkJsTestFiles`). Each test file gets its
|
|
447
|
-
* program
|
|
448
|
-
*
|
|
449
|
-
*
|
|
450
|
-
*
|
|
451
|
-
*
|
|
452
|
-
*
|
|
453
|
-
* program (head helpers report from their own program), and
|
|
454
|
-
* errors are de-duplicated across programs.
|
|
442
|
+
* `patchLint.checkJsTestFiles`). Each test file gets its own small
|
|
443
|
+
* program, with roots = the test file plus any same-directory patch-owned
|
|
444
|
+
* `head*.js`, checked against the built-in Firefox shim +
|
|
445
|
+
* {@link TEST_HARNESS_SHIM} + the optional consumer `checkJsTestShim`.
|
|
446
|
+
* Mochitest scripts share top-level scope only with their directory's
|
|
447
|
+
* `head*.js` helpers, so one multi-script program would emit false
|
|
448
|
+
* cross-file redeclaration errors. Only the target file's diagnostics are
|
|
449
|
+
* reported per program (head helpers report from their own program), and
|
|
450
|
+
* run-level errors are de-duplicated across programs.
|
|
455
451
|
*
|
|
456
452
|
* @param repoDir - Absolute engine (repository) directory
|
|
457
453
|
* @param testFiles - Patch-owned test-script paths (repo-relative)
|
|
@@ -482,7 +478,16 @@ export async function runCheckJsTestFilesGrouped(repoDir, testFiles, patchLint,
|
|
|
482
478
|
roots.add(candidate);
|
|
483
479
|
}
|
|
484
480
|
}
|
|
485
|
-
const result = await runCheckJsGrouped(
|
|
481
|
+
const result = await runCheckJsGrouped({
|
|
482
|
+
repoDir,
|
|
483
|
+
resolutionOwned: roots,
|
|
484
|
+
...(patchLint.checkJsTestShim !== undefined
|
|
485
|
+
? { extraShimPath: patchLint.checkJsTestShim }
|
|
486
|
+
: {}),
|
|
487
|
+
projectRoot,
|
|
488
|
+
mode,
|
|
489
|
+
builtinShimSuffix: TEST_HARNESS_SHIM,
|
|
490
|
+
});
|
|
486
491
|
const own = result.byFile.get(file);
|
|
487
492
|
if (own && own.length > 0) {
|
|
488
493
|
merged.byFile.set(file, [
|
|
@@ -515,7 +520,7 @@ function modeFromPatchLintConfig(patchLint) {
|
|
|
515
520
|
/**
|
|
516
521
|
* Grouped variant of {@link invokePatchLintCheckJs}: builds one queue-wide
|
|
517
522
|
* checkJs program over `patchOwnedFiles` and returns its findings grouped by
|
|
518
|
-
* owning file. The per-patch lint orchestrator calls this
|
|
523
|
+
* owning file. The per-patch lint orchestrator calls this once per run
|
|
519
524
|
* and attributes each file's findings to its owning patch, instead of
|
|
520
525
|
* rebuilding the same program for every patch in the queue.
|
|
521
526
|
*
|
|
@@ -524,14 +529,23 @@ function modeFromPatchLintConfig(patchLint) {
|
|
|
524
529
|
* @param patchLint - The resolved `patchLint` config block
|
|
525
530
|
* @param projectRoot - FireForge project root for shim resolution
|
|
526
531
|
* @param rootScope - Optional subset of files to use as program roots
|
|
527
|
-
* (`--patches`)
|
|
532
|
+
* (`--patches`). Resolution still spans the whole queue
|
|
528
533
|
*/
|
|
529
534
|
export async function invokePatchLintCheckJsGrouped(repoDir, patchOwnedFiles, patchLint, projectRoot, rootScope) {
|
|
530
|
-
return runCheckJsGrouped(
|
|
535
|
+
return runCheckJsGrouped({
|
|
536
|
+
repoDir,
|
|
537
|
+
resolutionOwned: patchOwnedFiles,
|
|
538
|
+
...(patchLint.checkJsExtraShim !== undefined
|
|
539
|
+
? { extraShimPath: patchLint.checkJsExtraShim }
|
|
540
|
+
: {}),
|
|
541
|
+
projectRoot,
|
|
542
|
+
mode: modeFromPatchLintConfig(patchLint),
|
|
543
|
+
...(rootScope !== undefined ? { rootScope } : {}),
|
|
544
|
+
});
|
|
531
545
|
}
|
|
532
546
|
/**
|
|
533
547
|
* Cheap probe reproducing the only run-level ("global") checkJs findings the
|
|
534
|
-
* build path can produce
|
|
548
|
+
* build path can produce: a missing `typescript` package and an unreadable
|
|
535
549
|
* consumer shim (`checkJsExtraShim`, and `checkJsTestShim` when
|
|
536
550
|
* `checkJsTestFiles` is on). The built program itself never contributes
|
|
537
551
|
* globals (see {@link runCheckJsGrouped}), so a warm all-cache-hit run can
|
|
@@ -4,30 +4,29 @@
|
|
|
4
4
|
* `.js` files loaded via `Services.scriptloader.loadSubScript`).
|
|
5
5
|
*
|
|
6
6
|
* Why a separate module from {@link ./patch-lint-jsdoc.ts}: chrome
|
|
7
|
-
* subscripts are
|
|
7
|
+
* subscripts are not ES modules. They are parsed as scripts (no static
|
|
8
8
|
* `export`) and their top-level `class`/`function` declarations are
|
|
9
9
|
* exposed to the loading window as globals rather than declared exports.
|
|
10
10
|
* The export-walker in `patch-lint-jsdoc.ts` would never visit them.
|
|
11
11
|
*
|
|
12
|
-
* The rule shape
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* module.
|
|
12
|
+
* The rule shape is identical to the `.sys.mjs` rule once you remove the
|
|
13
|
+
* `export` framing: every top-level class needs a JSDoc, every method
|
|
14
|
+
* needs one when `chromeScriptJsDoc` is at `warning`/`error`, and every
|
|
15
|
+
* top-level function needs a matching @param/@returns block. So the
|
|
16
|
+
* per-declaration validators are reused verbatim from the export module.
|
|
18
17
|
*/
|
|
19
18
|
import type { PatchLintIssue } from '../types/commands/index.js';
|
|
20
19
|
import type { PatchLintSeverityGate } from '../types/config.js';
|
|
21
20
|
import type { JsDocIssue, ValidateExportJsDocOptions } from './patch-lint-jsdoc.js';
|
|
22
21
|
/**
|
|
23
22
|
* Validates JSDoc on top-level declarations in a chrome-subscript `.js`
|
|
24
|
-
* source file. A parse failure returns an empty issue list
|
|
23
|
+
* source file. A parse failure returns an empty issue list. Chrome
|
|
25
24
|
* subscripts that use module-only syntax (rare) silently disable the
|
|
26
25
|
* rule rather than emitting confusing parse-error issues.
|
|
27
26
|
*
|
|
28
27
|
* @param source - File content
|
|
29
28
|
* @param options - Optional gates (e.g. class-method JSDoc severity).
|
|
30
|
-
* `classMethodMode` defaults to `'off'
|
|
29
|
+
* `classMethodMode` defaults to `'off'`. The orchestrator passes the
|
|
31
30
|
* `chromeScriptJsDoc` severity here so a single knob controls both
|
|
32
31
|
* class-level and method-level enforcement.
|
|
33
32
|
* @returns Array of JSDoc issues found
|
|
@@ -5,29 +5,28 @@
|
|
|
5
5
|
* `.js` files loaded via `Services.scriptloader.loadSubScript`).
|
|
6
6
|
*
|
|
7
7
|
* Why a separate module from {@link ./patch-lint-jsdoc.ts}: chrome
|
|
8
|
-
* subscripts are
|
|
8
|
+
* subscripts are not ES modules. They are parsed as scripts (no static
|
|
9
9
|
* `export`) and their top-level `class`/`function` declarations are
|
|
10
10
|
* exposed to the loading window as globals rather than declared exports.
|
|
11
11
|
* The export-walker in `patch-lint-jsdoc.ts` would never visit them.
|
|
12
12
|
*
|
|
13
|
-
* The rule shape
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* module.
|
|
13
|
+
* The rule shape is identical to the `.sys.mjs` rule once you remove the
|
|
14
|
+
* `export` framing: every top-level class needs a JSDoc, every method
|
|
15
|
+
* needs one when `chromeScriptJsDoc` is at `warning`/`error`, and every
|
|
16
|
+
* top-level function needs a matching @param/@returns block. So the
|
|
17
|
+
* per-declaration validators are reused verbatim from the export module.
|
|
19
18
|
*/
|
|
20
19
|
import { parseScript } from './ast-utils.js';
|
|
21
20
|
import { validateClassDecl, validateClassMethods, validateFunctionDecl, } from './patch-lint-jsdoc.js';
|
|
22
21
|
/**
|
|
23
22
|
* Validates JSDoc on top-level declarations in a chrome-subscript `.js`
|
|
24
|
-
* source file. A parse failure returns an empty issue list
|
|
23
|
+
* source file. A parse failure returns an empty issue list. Chrome
|
|
25
24
|
* subscripts that use module-only syntax (rare) silently disable the
|
|
26
25
|
* rule rather than emitting confusing parse-error issues.
|
|
27
26
|
*
|
|
28
27
|
* @param source - File content
|
|
29
28
|
* @param options - Optional gates (e.g. class-method JSDoc severity).
|
|
30
|
-
* `classMethodMode` defaults to `'off'
|
|
29
|
+
* `classMethodMode` defaults to `'off'`. The orchestrator passes the
|
|
31
30
|
* `chromeScriptJsDoc` severity here so a single knob controls both
|
|
32
31
|
* class-level and method-level enforcement.
|
|
33
32
|
* @returns Array of JSDoc issues found
|
|
@@ -43,7 +42,7 @@ export function validateChromeScriptJsDoc(source, options) {
|
|
|
43
42
|
// Deliberate carve-out, unlike the `.sys.mjs` walker in
|
|
44
43
|
// `patch-lint-jsdoc.ts` (which reports a parse failure as an issue).
|
|
45
44
|
// `parseScript` rejects `import`/`export`, so a chrome subscript that was
|
|
46
|
-
// misclassified as a `.js` file
|
|
45
|
+
// misclassified as a `.js` file (or that mistakenly uses module syntax)
|
|
47
46
|
// would emit a pseudo-issue for every rule here. The orchestrator already
|
|
48
47
|
// runs the export walker on `.sys.mjs` separately, so silently declining
|
|
49
48
|
// to lint an unparseable script is the correct degradation for this file
|
|
@@ -63,7 +62,7 @@ export function validateChromeScriptJsDoc(source, options) {
|
|
|
63
62
|
}
|
|
64
63
|
}
|
|
65
64
|
// Top-level `var Foo = class {...}` / `let Foo = function() {...}`
|
|
66
|
-
// patterns are
|
|
65
|
+
// patterns are out of scope for V1: chrome subscripts
|
|
67
66
|
// overwhelmingly use bare `class`/`function` declarations and the
|
|
68
67
|
// variable-init form would require unwrapping the initializer. Add
|
|
69
68
|
// it later if a real chrome subscript uses that shape.
|
|
@@ -6,17 +6,13 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Memoised per context object: ownership resolution and cache-key
|
|
8
8
|
* fingerprints call this 2-3× per linted patch, and each call otherwise
|
|
9
|
-
* re-runs `detectNewFilesInDiff` over
|
|
10
|
-
* so a discarded context frees its map
|
|
9
|
+
* re-runs `detectNewFilesInDiff` over every queue entry's diff. Keyed weakly
|
|
10
|
+
* so a discarded context frees its map. A caller that mutates a context
|
|
11
11
|
* entry in place must call {@link invalidateNewFileCreatorsCache}.
|
|
12
12
|
*/
|
|
13
|
+
import type { PatchQueueBodyEntry, PatchQueueView } from './patch-lint-queue-types.js';
|
|
13
14
|
/** The slice of a queue context the creators map is derived from. */
|
|
14
|
-
|
|
15
|
-
entries: {
|
|
16
|
-
filename: string;
|
|
17
|
-
diff: string;
|
|
18
|
-
}[];
|
|
19
|
-
}
|
|
15
|
+
type CreatorsContext = PatchQueueView<PatchQueueBodyEntry>;
|
|
20
16
|
/** Drops the memoised creators map after an in-place context entry update. */
|
|
21
17
|
export declare function invalidateNewFileCreatorsCache(ctx: CreatorsContext): void;
|
|
22
18
|
/**
|
|
@@ -24,7 +20,7 @@ export declare function invalidateNewFileCreatorsCache(ctx: CreatorsContext): vo
|
|
|
24
20
|
* mode` by at least one patch in the queue. Paths created by only one
|
|
25
21
|
* patch are also included so callers can distinguish "no creator" from
|
|
26
22
|
* "exactly one creator" without re-scanning the diffs. The returned map
|
|
27
|
-
* is memoised and shared
|
|
23
|
+
* is memoised and shared, so treat it as read-only.
|
|
28
24
|
*/
|
|
29
25
|
export declare function collectNewFileCreatorsByPath(ctx: CreatorsContext): Map<string, string[]>;
|
|
30
26
|
export {};
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Memoised per context object: ownership resolution and cache-key
|
|
9
9
|
* fingerprints call this 2-3× per linted patch, and each call otherwise
|
|
10
|
-
* re-runs `detectNewFilesInDiff` over
|
|
11
|
-
* so a discarded context frees its map
|
|
10
|
+
* re-runs `detectNewFilesInDiff` over every queue entry's diff. Keyed weakly
|
|
11
|
+
* so a discarded context frees its map. A caller that mutates a context
|
|
12
12
|
* entry in place must call {@link invalidateNewFileCreatorsCache}.
|
|
13
13
|
*/
|
|
14
14
|
import { detectNewFilesInDiff } from './patch-lint-diff.js';
|
|
@@ -22,7 +22,7 @@ export function invalidateNewFileCreatorsCache(ctx) {
|
|
|
22
22
|
* mode` by at least one patch in the queue. Paths created by only one
|
|
23
23
|
* patch are also included so callers can distinguish "no creator" from
|
|
24
24
|
* "exactly one creator" without re-scanning the diffs. The returned map
|
|
25
|
-
* is memoised and shared
|
|
25
|
+
* is memoised and shared, so treat it as read-only.
|
|
26
26
|
*/
|
|
27
27
|
export function collectNewFileCreatorsByPath(ctx) {
|
|
28
28
|
const memoised = newFileCreatorsMemo.get(ctx);
|