@hominis/fireforge 0.46.0 → 0.46.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +381 -498
- package/dist/bin/fireforge.d.ts +1 -1
- package/dist/bin/fireforge.js +17 -17
- package/dist/build-info.json +4 -4
- package/dist/src/cli-usage-error.d.ts +9 -9
- package/dist/src/cli-usage-error.js +12 -12
- package/dist/src/cli.d.ts +3 -2
- package/dist/src/cli.js +29 -28
- package/dist/src/commands/bootstrap-checks.js +2 -1
- package/dist/src/commands/bootstrap.js +2 -2
- package/dist/src/commands/build.js +12 -11
- package/dist/src/commands/config.js +9 -9
- package/dist/src/commands/destructive-decision.d.ts +4 -4
- package/dist/src/commands/destructive-decision.js +4 -4
- package/dist/src/commands/discard.js +5 -5
- package/dist/src/commands/doctor-check-core.d.ts +4 -4
- package/dist/src/commands/doctor-external-toolchains.js +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.d.ts +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.js +20 -20
- package/dist/src/commands/doctor-furnace-jar.d.ts +1 -1
- package/dist/src/commands/doctor-furnace-jar.js +1 -1
- package/dist/src/commands/doctor-furnace.js +22 -22
- package/dist/src/commands/doctor-orphaned-harness.d.ts +10 -11
- package/dist/src/commands/doctor-orphaned-harness.js +10 -11
- package/dist/src/commands/doctor-patch-manifest.d.ts +2 -1
- package/dist/src/commands/doctor-patch-manifest.js +7 -6
- package/dist/src/commands/doctor-post-rebase-audit.js +2 -2
- package/dist/src/commands/doctor-source-pin.d.ts +12 -12
- package/dist/src/commands/doctor-source-pin.js +14 -14
- package/dist/src/commands/doctor-working-tree.d.ts +3 -3
- package/dist/src/commands/doctor-working-tree.js +3 -3
- package/dist/src/commands/doctor.d.ts +2 -2
- package/dist/src/commands/doctor.js +9 -9
- package/dist/src/commands/download.js +15 -13
- package/dist/src/commands/export-all.js +8 -8
- package/dist/src/commands/export-flow.d.ts +5 -5
- package/dist/src/commands/export-flow.js +14 -14
- package/dist/src/commands/export-placement-conflicts.d.ts +3 -3
- package/dist/src/commands/export-placement-conflicts.js +9 -9
- package/dist/src/commands/export-placement-gate.d.ts +2 -2
- package/dist/src/commands/export-placement-gate.js +5 -5
- package/dist/src/commands/export-placement-policy.d.ts +1 -1
- package/dist/src/commands/export-placement-policy.js +1 -1
- package/dist/src/commands/export-shared.d.ts +10 -10
- package/dist/src/commands/export-shared.js +13 -13
- package/dist/src/commands/export.js +4 -4
- package/dist/src/commands/furnace/apply.js +16 -16
- package/dist/src/commands/furnace/chrome-doc-remove.d.ts +1 -1
- package/dist/src/commands/furnace/chrome-doc-remove.js +1 -1
- package/dist/src/commands/furnace/chrome-doc-templates.d.ts +14 -14
- package/dist/src/commands/furnace/chrome-doc-templates.js +17 -17
- package/dist/src/commands/furnace/chrome-doc-tests.d.ts +2 -2
- package/dist/src/commands/furnace/chrome-doc-tests.js +4 -4
- package/dist/src/commands/furnace/chrome-doc.d.ts +8 -8
- package/dist/src/commands/furnace/chrome-doc.js +18 -18
- package/dist/src/commands/furnace/create-browser-test.d.ts +1 -1
- package/dist/src/commands/furnace/create-browser-test.js +4 -4
- package/dist/src/commands/furnace/create-dry-run.d.ts +4 -4
- package/dist/src/commands/furnace/create-dry-run.js +4 -4
- package/dist/src/commands/furnace/create-features.d.ts +2 -2
- package/dist/src/commands/furnace/create-features.js +2 -2
- package/dist/src/commands/furnace/create-mochikit.d.ts +4 -4
- package/dist/src/commands/furnace/create-mochikit.js +7 -7
- package/dist/src/commands/furnace/create-templates.d.ts +14 -14
- package/dist/src/commands/furnace/create-templates.js +18 -18
- package/dist/src/commands/furnace/create-xpcshell.d.ts +5 -5
- package/dist/src/commands/furnace/create-xpcshell.js +8 -8
- package/dist/src/commands/furnace/create.d.ts +1 -1
- package/dist/src/commands/furnace/create.js +10 -10
- package/dist/src/commands/furnace/deploy.js +4 -4
- package/dist/src/commands/furnace/diff.js +7 -7
- package/dist/src/commands/furnace/index.js +1 -1
- package/dist/src/commands/furnace/init.js +15 -15
- package/dist/src/commands/furnace/list.js +2 -2
- package/dist/src/commands/furnace/override.d.ts +1 -1
- package/dist/src/commands/furnace/override.js +15 -15
- package/dist/src/commands/furnace/preview.js +17 -17
- package/dist/src/commands/furnace/refresh.js +6 -6
- package/dist/src/commands/furnace/remove-mutations.d.ts +3 -3
- package/dist/src/commands/furnace/remove-mutations.js +19 -18
- package/dist/src/commands/furnace/remove-state.d.ts +1 -1
- package/dist/src/commands/furnace/remove-state.js +1 -1
- package/dist/src/commands/furnace/remove.js +2 -2
- package/dist/src/commands/furnace/rename-browser-test.js +9 -8
- package/dist/src/commands/furnace/rename-xpcshell.d.ts +2 -2
- package/dist/src/commands/furnace/rename-xpcshell.js +3 -3
- package/dist/src/commands/furnace/rename.js +9 -9
- package/dist/src/commands/furnace/scan.js +3 -3
- package/dist/src/commands/furnace/status.js +7 -7
- package/dist/src/commands/furnace/sync.js +6 -6
- package/dist/src/commands/furnace/test-file-name.d.ts +2 -2
- package/dist/src/commands/furnace/test-file-name.js +2 -2
- package/dist/src/commands/furnace/validate.js +11 -12
- package/dist/src/commands/import.js +20 -20
- package/dist/src/commands/lint-per-patch.js +8 -8
- package/dist/src/commands/lint-per-run-checkjs.d.ts +12 -13
- package/dist/src/commands/lint-per-run-checkjs.js +14 -15
- package/dist/src/commands/lint-report.d.ts +3 -3
- package/dist/src/commands/lint-report.js +4 -4
- package/dist/src/commands/lint.d.ts +3 -3
- package/dist/src/commands/lint.js +35 -35
- package/dist/src/commands/manifest.d.ts +4 -4
- package/dist/src/commands/package.js +2 -2
- package/dist/src/commands/patch/compact.d.ts +2 -2
- package/dist/src/commands/patch/compact.js +8 -8
- package/dist/src/commands/patch/delete.d.ts +1 -1
- package/dist/src/commands/patch/delete.js +8 -8
- package/dist/src/commands/patch/lint-ignore.d.ts +3 -4
- package/dist/src/commands/patch/lint-ignore.js +14 -15
- package/dist/src/commands/patch/move-files-create.d.ts +2 -2
- package/dist/src/commands/patch/move-files-create.js +5 -5
- package/dist/src/commands/patch/move-files-into.d.ts +2 -2
- package/dist/src/commands/patch/move-files-into.js +3 -3
- package/dist/src/commands/patch/move-files.js +1 -1
- package/dist/src/commands/patch/patch-context.d.ts +1 -1
- package/dist/src/commands/patch/rename.d.ts +4 -4
- package/dist/src/commands/patch/rename.js +8 -8
- package/dist/src/commands/patch/reorder.js +10 -10
- package/dist/src/commands/patch/split-plan.d.ts +3 -3
- package/dist/src/commands/patch/split-plan.js +6 -5
- package/dist/src/commands/patch/split.d.ts +2 -2
- package/dist/src/commands/patch/split.js +5 -5
- package/dist/src/commands/patch/staged-dependency-validate.d.ts +1 -1
- package/dist/src/commands/patch/staged-dependency-validate.js +3 -3
- package/dist/src/commands/patch/staged-dependency.d.ts +1 -1
- package/dist/src/commands/patch/staged-dependency.js +6 -6
- package/dist/src/commands/patch/tier.d.ts +2 -2
- package/dist/src/commands/patch/tier.js +5 -5
- package/dist/src/commands/patch-rename-map.d.ts +1 -1
- package/dist/src/commands/patch-rename-map.js +1 -1
- package/dist/src/commands/pending-resolution.d.ts +5 -5
- package/dist/src/commands/pending-resolution.js +5 -5
- package/dist/src/commands/re-export-adjacent.d.ts +3 -3
- package/dist/src/commands/re-export-adjacent.js +8 -8
- package/dist/src/commands/re-export-bulk-scan.d.ts +3 -3
- package/dist/src/commands/re-export-bulk-scan.js +17 -17
- package/dist/src/commands/re-export-drift.d.ts +10 -10
- package/dist/src/commands/re-export-drift.js +29 -29
- package/dist/src/commands/re-export-files.js +14 -15
- package/dist/src/commands/re-export-lint.d.ts +26 -26
- package/dist/src/commands/re-export-lint.js +27 -27
- package/dist/src/commands/re-export-options.d.ts +1 -1
- package/dist/src/commands/re-export-options.js +1 -1
- package/dist/src/commands/re-export-register.d.ts +1 -1
- package/dist/src/commands/re-export-register.js +1 -1
- package/dist/src/commands/re-export-scan.d.ts +1 -1
- package/dist/src/commands/re-export-scan.js +7 -7
- package/dist/src/commands/re-export-single.d.ts +1 -1
- package/dist/src/commands/re-export-single.js +20 -20
- package/dist/src/commands/re-export.js +7 -6
- package/dist/src/commands/rebase/abort.js +6 -6
- package/dist/src/commands/rebase/continue.js +8 -7
- package/dist/src/commands/rebase/index.d.ts +1 -1
- package/dist/src/commands/rebase/index.js +3 -3
- package/dist/src/commands/rebase/patch-loop.js +18 -17
- package/dist/src/commands/register.js +5 -5
- package/dist/src/commands/reset.js +1 -1
- package/dist/src/commands/resolve.d.ts +2 -2
- package/dist/src/commands/resolve.js +3 -3
- package/dist/src/commands/run.js +26 -26
- package/dist/src/commands/setup-support.js +4 -4
- package/dist/src/commands/setup.js +1 -1
- package/dist/src/commands/source.js +1 -1
- package/dist/src/commands/status-check.d.ts +3 -3
- package/dist/src/commands/status-check.js +4 -4
- package/dist/src/commands/status-json.d.ts +14 -13
- package/dist/src/commands/status-json.js +9 -8
- package/dist/src/commands/status-output.d.ts +3 -3
- package/dist/src/commands/status-output.js +3 -3
- package/dist/src/commands/status-ownership.d.ts +3 -3
- package/dist/src/commands/status-ownership.js +3 -3
- package/dist/src/commands/status.js +22 -22
- package/dist/src/commands/test-build-phase.d.ts +1 -1
- package/dist/src/commands/test-build-phase.js +17 -17
- package/dist/src/commands/test-diagnose.d.ts +1 -1
- package/dist/src/commands/test-diagnose.js +20 -20
- package/dist/src/commands/test-modes.d.ts +2 -2
- package/dist/src/commands/test-modes.js +4 -4
- package/dist/src/commands/test-run.d.ts +11 -11
- package/dist/src/commands/test-run.js +15 -15
- package/dist/src/commands/test-stale-gate.d.ts +12 -12
- package/dist/src/commands/test-stale-gate.js +13 -13
- package/dist/src/commands/test-verdict.d.ts +6 -6
- package/dist/src/commands/test-verdict.js +11 -11
- package/dist/src/commands/test.d.ts +3 -3
- package/dist/src/commands/test.js +36 -36
- package/dist/src/commands/token-coverage.js +3 -3
- package/dist/src/commands/token-list.js +5 -5
- package/dist/src/commands/token.js +9 -9
- package/dist/src/commands/tree.js +19 -19
- package/dist/src/commands/typecheck.d.ts +6 -6
- package/dist/src/commands/typecheck.js +7 -7
- package/dist/src/commands/verify.d.ts +3 -3
- package/dist/src/commands/verify.js +10 -10
- package/dist/src/commands/watch.js +11 -11
- package/dist/src/commands/wire.js +13 -13
- package/dist/src/core/ast-utils.d.ts +7 -7
- package/dist/src/core/ast-utils.js +8 -8
- package/dist/src/core/branding.d.ts +5 -5
- package/dist/src/core/branding.js +3 -3
- package/dist/src/core/browser-wire.d.ts +1 -1
- package/dist/src/core/browser-wire.js +4 -4
- package/dist/src/core/build-audit-platform.d.ts +6 -6
- package/dist/src/core/build-audit-platform.js +26 -26
- package/dist/src/core/build-audit-registration.d.ts +5 -5
- package/dist/src/core/build-audit-registration.js +7 -7
- package/dist/src/core/build-audit-resolve.d.ts +5 -5
- package/dist/src/core/build-audit-resolve.js +6 -6
- package/dist/src/core/build-audit-skip.d.ts +8 -8
- package/dist/src/core/build-audit-skip.js +12 -12
- package/dist/src/core/build-audit-transforms.d.ts +2 -2
- package/dist/src/core/build-audit-transforms.js +3 -3
- package/dist/src/core/build-audit.d.ts +8 -8
- package/dist/src/core/build-audit.js +39 -37
- package/dist/src/core/build-baseline-types.d.ts +19 -18
- package/dist/src/core/build-baseline-types.js +1 -1
- package/dist/src/core/build-baseline.d.ts +8 -8
- package/dist/src/core/build-baseline.js +14 -14
- package/dist/src/core/build-jar-escalation.d.ts +8 -8
- package/dist/src/core/build-jar-escalation.js +15 -15
- package/dist/src/core/build-overwrite-guard.d.ts +4 -4
- package/dist/src/core/build-overwrite-guard.js +13 -13
- package/dist/src/core/build-prepare.d.ts +4 -4
- package/dist/src/core/build-prepare.js +16 -15
- package/dist/src/core/config-mutate.js +4 -4
- package/dist/src/core/config-state.js +2 -2
- package/dist/src/core/config-validate-build-audit.js +3 -3
- package/dist/src/core/config-validate-file-size.d.ts +1 -1
- package/dist/src/core/config-validate-file-size.js +2 -2
- package/dist/src/core/config-validate.js +8 -9
- package/dist/src/core/config.d.ts +10 -10
- package/dist/src/core/config.js +10 -10
- package/dist/src/core/coverage-extend.d.ts +16 -16
- package/dist/src/core/coverage-extend.js +16 -16
- package/dist/src/core/destructive.d.ts +14 -14
- package/dist/src/core/destructive.js +9 -9
- package/dist/src/core/diff-hunks.d.ts +2 -2
- package/dist/src/core/diff-hunks.js +7 -7
- package/dist/src/core/discard-baseline.d.ts +10 -10
- package/dist/src/core/discard-baseline.js +15 -16
- package/dist/src/core/display-state.d.ts +11 -11
- package/dist/src/core/display-state.js +12 -12
- package/dist/src/core/engine-changes.d.ts +2 -2
- package/dist/src/core/engine-changes.js +2 -2
- package/dist/src/core/engine-precondition.d.ts +4 -4
- package/dist/src/core/engine-precondition.js +2 -2
- package/dist/src/core/engine-session-lock.d.ts +18 -18
- package/dist/src/core/engine-session-lock.js +37 -37
- package/dist/src/core/export-moved-code-shape.d.ts +7 -7
- package/dist/src/core/export-moved-code-shape.js +8 -8
- package/dist/src/core/file-lock-owner.d.ts +11 -11
- package/dist/src/core/file-lock-owner.js +18 -18
- package/dist/src/core/file-lock.d.ts +12 -12
- package/dist/src/core/file-lock.js +52 -39
- package/dist/src/core/firefox-cache.d.ts +1 -1
- package/dist/src/core/firefox-cache.js +10 -10
- package/dist/src/core/firefox-download.d.ts +3 -3
- package/dist/src/core/firefox-download.js +6 -6
- package/dist/src/core/firefox-extract.d.ts +2 -2
- package/dist/src/core/firefox-extract.js +13 -13
- package/dist/src/core/firefox.d.ts +5 -5
- package/dist/src/core/firefox.js +8 -8
- package/dist/src/core/furnace-apply-dry-run.js +1 -1
- package/dist/src/core/furnace-apply-ftl.d.ts +5 -5
- package/dist/src/core/furnace-apply-ftl.js +8 -8
- package/dist/src/core/furnace-apply-helpers.d.ts +9 -9
- package/dist/src/core/furnace-apply-helpers.js +21 -21
- package/dist/src/core/furnace-apply-output.js +1 -1
- package/dist/src/core/furnace-apply-overwrite-warn.d.ts +9 -9
- package/dist/src/core/furnace-apply-overwrite-warn.js +9 -9
- package/dist/src/core/furnace-apply-undeploy-actions.d.ts +1 -1
- package/dist/src/core/furnace-apply-undeploy-actions.js +1 -1
- package/dist/src/core/furnace-apply.d.ts +3 -3
- package/dist/src/core/furnace-apply.js +22 -21
- package/dist/src/core/furnace-checksum-utils.d.ts +5 -5
- package/dist/src/core/furnace-checksum-utils.js +5 -5
- package/dist/src/core/furnace-config-custom.d.ts +1 -1
- package/dist/src/core/furnace-config-custom.js +2 -2
- package/dist/src/core/furnace-config-order.js +1 -1
- package/dist/src/core/furnace-config-tokens.d.ts +3 -3
- package/dist/src/core/furnace-config-tokens.js +3 -3
- package/dist/src/core/furnace-config-validate.js +2 -2
- package/dist/src/core/furnace-config.d.ts +4 -4
- package/dist/src/core/furnace-config.js +18 -18
- package/dist/src/core/furnace-constants.d.ts +6 -6
- package/dist/src/core/furnace-constants.js +6 -6
- package/dist/src/core/furnace-css-fragments.d.ts +6 -6
- package/dist/src/core/furnace-css-fragments.js +11 -11
- package/dist/src/core/furnace-dir-entry.d.ts +1 -1
- package/dist/src/core/furnace-dir-entry.js +1 -1
- package/dist/src/core/furnace-jsconfig.d.ts +7 -7
- package/dist/src/core/furnace-jsconfig.js +22 -20
- package/dist/src/core/furnace-operation.d.ts +21 -20
- package/dist/src/core/furnace-operation.js +36 -34
- package/dist/src/core/furnace-precondition.d.ts +10 -10
- package/dist/src/core/furnace-precondition.js +8 -8
- package/dist/src/core/furnace-refresh.js +2 -2
- package/dist/src/core/furnace-registration-ast.d.ts +2 -2
- package/dist/src/core/furnace-registration-ast.js +9 -9
- package/dist/src/core/furnace-registration-remove.d.ts +4 -4
- package/dist/src/core/furnace-registration-remove.js +6 -6
- package/dist/src/core/furnace-registration-validate.d.ts +2 -2
- package/dist/src/core/furnace-registration-validate.js +2 -2
- package/dist/src/core/furnace-registration.d.ts +5 -5
- package/dist/src/core/furnace-registration.js +7 -7
- package/dist/src/core/furnace-rollback.d.ts +1 -1
- package/dist/src/core/furnace-rollback.js +5 -5
- package/dist/src/core/furnace-stale-export.d.ts +17 -16
- package/dist/src/core/furnace-stale-export.js +16 -15
- package/dist/src/core/furnace-staleness.d.ts +2 -2
- package/dist/src/core/furnace-staleness.js +2 -2
- package/dist/src/core/furnace-state-persist.d.ts +10 -10
- package/dist/src/core/furnace-state-persist.js +10 -10
- package/dist/src/core/furnace-step-errors.d.ts +6 -6
- package/dist/src/core/furnace-step-errors.js +6 -6
- package/dist/src/core/furnace-validate-accessibility.js +14 -14
- package/dist/src/core/furnace-validate-compatibility.js +9 -9
- package/dist/src/core/furnace-validate-registration.d.ts +2 -2
- package/dist/src/core/furnace-validate-registration.js +13 -13
- package/dist/src/core/furnace-validate-structure.d.ts +1 -1
- package/dist/src/core/furnace-validate-structure.js +4 -4
- package/dist/src/core/furnace-validate.js +9 -9
- package/dist/src/core/furnace-version-drift.d.ts +5 -5
- package/dist/src/core/furnace-version-drift.js +5 -5
- package/dist/src/core/git-base.d.ts +4 -4
- package/dist/src/core/git-base.js +9 -9
- package/dist/src/core/git-diff-new-file.d.ts +4 -4
- package/dist/src/core/git-diff-new-file.js +8 -8
- package/dist/src/core/git-diff.d.ts +4 -4
- package/dist/src/core/git-diff.js +35 -34
- package/dist/src/core/git-file-ops.d.ts +6 -6
- package/dist/src/core/git-file-ops.js +7 -7
- package/dist/src/core/git-readonly-index.d.ts +12 -12
- package/dist/src/core/git-readonly-index.js +12 -12
- package/dist/src/core/git-status.d.ts +4 -4
- package/dist/src/core/git-status.js +4 -4
- package/dist/src/core/git.d.ts +3 -3
- package/dist/src/core/git.js +14 -14
- package/dist/src/core/harness-orphans.d.ts +17 -17
- package/dist/src/core/harness-orphans.js +20 -20
- package/dist/src/core/history-log.d.ts +3 -3
- package/dist/src/core/history-log.js +3 -3
- package/dist/src/core/license-headers.d.ts +19 -18
- package/dist/src/core/license-headers.js +29 -28
- package/dist/src/core/mach-build-artifacts.d.ts +21 -21
- package/dist/src/core/mach-build-artifacts.js +23 -23
- package/dist/src/core/mach-error-hints.d.ts +5 -5
- package/dist/src/core/mach-error-hints.js +13 -13
- package/dist/src/core/mach-known-noise-filter.d.ts +41 -38
- package/dist/src/core/mach-known-noise-filter.js +53 -50
- package/dist/src/core/mach-mozconfig.d.ts +6 -6
- package/dist/src/core/mach-mozconfig.js +15 -15
- package/dist/src/core/mach-python.d.ts +2 -1
- package/dist/src/core/mach-python.js +4 -3
- package/dist/src/core/mach-resource-shim.d.ts +12 -12
- package/dist/src/core/mach-resource-shim.js +20 -20
- package/dist/src/core/mach.d.ts +23 -23
- package/dist/src/core/mach.js +36 -36
- package/dist/src/core/marionette-port.d.ts +15 -13
- package/dist/src/core/marionette-port.js +34 -31
- package/dist/src/core/marionette-preflight.d.ts +6 -6
- package/dist/src/core/marionette-preflight.js +23 -23
- package/dist/src/core/markdown-table.d.ts +9 -9
- package/dist/src/core/markdown-table.js +14 -14
- package/dist/src/core/mochitest-server-port.d.ts +8 -8
- package/dist/src/core/mochitest-server-port.js +14 -14
- package/dist/src/core/module-resolution-preflight.d.ts +8 -8
- package/dist/src/core/module-resolution-preflight.js +11 -11
- package/dist/src/core/moz-manifest-helpers.d.ts +7 -7
- package/dist/src/core/moz-manifest-helpers.js +7 -7
- package/dist/src/core/moz-manifest-register.d.ts +1 -1
- package/dist/src/core/moz-manifest-register.js +2 -2
- package/dist/src/core/moz-manifest-rules.js +11 -11
- package/dist/src/core/moz-manifest-tokenizers.js +1 -1
- package/dist/src/core/ownership-table.d.ts +5 -5
- package/dist/src/core/ownership-table.js +7 -7
- package/dist/src/core/parser-fallback.d.ts +3 -3
- package/dist/src/core/parser-fallback.js +3 -3
- package/dist/src/core/patch-apply-fuzz.d.ts +5 -5
- package/dist/src/core/patch-apply-fuzz.js +9 -9
- package/dist/src/core/patch-apply.d.ts +9 -9
- package/dist/src/core/patch-apply.js +30 -30
- package/dist/src/core/patch-export-update.d.ts +4 -4
- package/dist/src/core/patch-export-update.js +3 -3
- package/dist/src/core/patch-export.d.ts +10 -10
- package/dist/src/core/patch-export.js +13 -13
- package/dist/src/core/patch-identifier-suggest.d.ts +1 -1
- package/dist/src/core/patch-identifier-suggest.js +4 -4
- package/dist/src/core/patch-lint-binary.d.ts +7 -7
- package/dist/src/core/patch-lint-cache.d.ts +2 -2
- package/dist/src/core/patch-lint-cache.js +13 -13
- package/dist/src/core/patch-lint-checkjs.d.ts +26 -26
- package/dist/src/core/patch-lint-checkjs.js +42 -41
- package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +8 -9
- package/dist/src/core/patch-lint-chrome-jsdoc.js +10 -11
- package/dist/src/core/patch-lint-creators.d.ts +3 -3
- package/dist/src/core/patch-lint-creators.js +3 -3
- package/dist/src/core/patch-lint-cross.d.ts +13 -13
- package/dist/src/core/patch-lint-cross.js +21 -21
- package/dist/src/core/patch-lint-css.d.ts +1 -1
- package/dist/src/core/patch-lint-css.js +5 -5
- package/dist/src/core/patch-lint-diff-tag.d.ts +5 -5
- package/dist/src/core/patch-lint-diff-tag.js +5 -5
- package/dist/src/core/patch-lint-diff.d.ts +4 -4
- package/dist/src/core/patch-lint-diff.js +4 -4
- package/dist/src/core/patch-lint-file-size.d.ts +3 -3
- package/dist/src/core/patch-lint-file-size.js +3 -3
- package/dist/src/core/patch-lint-forward-registration.d.ts +4 -4
- package/dist/src/core/patch-lint-forward-registration.js +12 -12
- package/dist/src/core/patch-lint-jsdoc.d.ts +2 -2
- package/dist/src/core/patch-lint-jsdoc.js +11 -11
- package/dist/src/core/patch-lint-module-registration.d.ts +1 -1
- package/dist/src/core/patch-lint-module-registration.js +1 -1
- package/dist/src/core/patch-lint-mozbuild.d.ts +1 -1
- package/dist/src/core/patch-lint-mozbuild.js +10 -10
- package/dist/src/core/patch-lint-observer.d.ts +3 -3
- package/dist/src/core/patch-lint-observer.js +7 -7
- package/dist/src/core/patch-lint-ownership.d.ts +6 -6
- package/dist/src/core/patch-lint-ownership.js +6 -6
- package/dist/src/core/patch-lint-prettier.d.ts +6 -6
- package/dist/src/core/patch-lint-prettier.js +6 -6
- package/dist/src/core/patch-lint-queue-types.d.ts +1 -1
- package/dist/src/core/patch-lint-queue-types.js +1 -1
- package/dist/src/core/patch-lint-staged-registration.d.ts +2 -2
- package/dist/src/core/patch-lint-staged-registration.js +6 -6
- package/dist/src/core/patch-lint-unmanaged-companion.d.ts +23 -23
- package/dist/src/core/patch-lint-unmanaged-companion.js +26 -26
- package/dist/src/core/patch-lint.d.ts +27 -26
- package/dist/src/core/patch-lint.js +48 -46
- package/dist/src/core/patch-lock.d.ts +1 -1
- package/dist/src/core/patch-lock.js +8 -8
- package/dist/src/core/patch-manifest-consistency.d.ts +7 -7
- package/dist/src/core/patch-manifest-consistency.js +16 -17
- package/dist/src/core/patch-manifest-files-affected.d.ts +1 -1
- package/dist/src/core/patch-manifest-files-affected.js +3 -3
- package/dist/src/core/patch-manifest-io.d.ts +14 -14
- package/dist/src/core/patch-manifest-io.js +27 -27
- package/dist/src/core/patch-manifest-query.d.ts +1 -1
- package/dist/src/core/patch-manifest-query.js +4 -4
- package/dist/src/core/patch-manifest-resolve.d.ts +5 -5
- package/dist/src/core/patch-manifest-resolve.js +7 -7
- package/dist/src/core/patch-manifest-validate.js +3 -3
- package/dist/src/core/patch-manifest.d.ts +2 -2
- package/dist/src/core/patch-manifest.js +2 -2
- package/dist/src/core/patch-parse.d.ts +14 -14
- package/dist/src/core/patch-parse.js +16 -16
- package/dist/src/core/patch-registration-refs.d.ts +4 -4
- package/dist/src/core/patch-registration-refs.js +7 -7
- package/dist/src/core/patch-transform.d.ts +8 -8
- package/dist/src/core/patch-transform.js +13 -13
- package/dist/src/core/process-cpu-time.d.ts +1 -1
- package/dist/src/core/process-cpu-time.js +5 -5
- package/dist/src/core/rebase-session.d.ts +7 -7
- package/dist/src/core/rebase-session.js +8 -8
- package/dist/src/core/register-result.d.ts +1 -1
- package/dist/src/core/register-result.js +1 -1
- package/dist/src/core/register-scaffold.d.ts +2 -2
- package/dist/src/core/register-scaffold.js +3 -3
- package/dist/src/core/register-shared-css.d.ts +3 -3
- package/dist/src/core/register-shared-css.js +4 -4
- package/dist/src/core/register-xpcshell-test.d.ts +2 -2
- package/dist/src/core/register-xpcshell-test.js +2 -2
- package/dist/src/core/run-log-redact.d.ts +12 -12
- package/dist/src/core/run-log-redact.js +16 -16
- package/dist/src/core/run-log.d.ts +9 -9
- package/dist/src/core/run-log.js +14 -14
- package/dist/src/core/shared-ftl.d.ts +2 -2
- package/dist/src/core/shared-ftl.js +6 -6
- package/dist/src/core/signal-critical.d.ts +2 -2
- package/dist/src/core/signal-critical.js +2 -2
- package/dist/src/core/smoke-patterns.d.ts +5 -5
- package/dist/src/core/smoke-patterns.js +9 -9
- package/dist/src/core/state-file.d.ts +3 -3
- package/dist/src/core/status-binary.d.ts +8 -8
- package/dist/src/core/status-binary.js +12 -12
- package/dist/src/core/status-classify.d.ts +17 -17
- package/dist/src/core/status-classify.js +11 -11
- package/dist/src/core/test-changed-prefs.d.ts +12 -12
- package/dist/src/core/test-changed-prefs.js +15 -15
- package/dist/src/core/test-harness-crash.d.ts +39 -39
- package/dist/src/core/test-harness-crash.js +67 -67
- package/dist/src/core/test-harness-output.d.ts +7 -7
- package/dist/src/core/test-harness-output.js +7 -7
- package/dist/src/core/test-harness-verdict-notes.d.ts +13 -14
- package/dist/src/core/test-harness-verdict-notes.js +4 -4
- package/dist/src/core/test-path-scope.d.ts +8 -8
- package/dist/src/core/test-path-scope.js +11 -11
- package/dist/src/core/test-stale-check.d.ts +22 -21
- package/dist/src/core/test-stale-check.js +29 -28
- package/dist/src/core/test-stale-symlink.d.ts +1 -1
- package/dist/src/core/test-stale-symlink.js +1 -1
- package/dist/src/core/test-stall-triage.d.ts +9 -9
- package/dist/src/core/test-stall-triage.js +22 -22
- package/dist/src/core/token-category.d.ts +4 -4
- package/dist/src/core/token-category.js +13 -12
- package/dist/src/core/token-coverage.js +4 -5
- package/dist/src/core/token-dark-mode.d.ts +9 -9
- package/dist/src/core/token-dark-mode.js +11 -11
- package/dist/src/core/token-docs.d.ts +1 -1
- package/dist/src/core/token-inventory.d.ts +6 -6
- package/dist/src/core/token-inventory.js +7 -7
- package/dist/src/core/token-manager.d.ts +3 -3
- package/dist/src/core/token-manager.js +21 -21
- package/dist/src/core/token-scaffold.d.ts +4 -4
- package/dist/src/core/token-scaffold.js +4 -4
- package/dist/src/core/token-variant.d.ts +14 -14
- package/dist/src/core/token-variant.js +32 -32
- package/dist/src/core/toolchain-preflight.d.ts +15 -15
- package/dist/src/core/toolchain-preflight.js +22 -22
- package/dist/src/core/tree-cow.d.ts +3 -3
- package/dist/src/core/tree-cow.js +6 -6
- package/dist/src/core/tree-guard.d.ts +3 -3
- package/dist/src/core/tree-guard.js +23 -23
- package/dist/src/core/tree-store.d.ts +15 -15
- package/dist/src/core/tree-store.js +35 -33
- package/dist/src/core/typecheck-shim.d.ts +16 -15
- package/dist/src/core/typecheck-shim.js +26 -25
- package/dist/src/core/typecheck.d.ts +12 -12
- package/dist/src/core/typecheck.js +31 -31
- package/dist/src/core/wire-destroy.d.ts +2 -2
- package/dist/src/core/wire-destroy.js +5 -5
- package/dist/src/core/wire-dom-fragment.d.ts +3 -3
- package/dist/src/core/wire-dom-fragment.js +6 -6
- package/dist/src/core/wire-init.d.ts +2 -2
- package/dist/src/core/wire-init.js +7 -7
- package/dist/src/core/wire-subscript.d.ts +1 -1
- package/dist/src/core/wire-subscript.js +3 -3
- package/dist/src/core/wire-utils.d.ts +9 -9
- package/dist/src/core/wire-utils.js +11 -11
- package/dist/src/core/xpcshell-appdir.d.ts +20 -20
- package/dist/src/core/xpcshell-appdir.js +26 -26
- package/dist/src/core/xpcshell-profile-dir.d.ts +3 -3
- package/dist/src/core/xpcshell-profile-dir.js +7 -7
- package/dist/src/errors/base.d.ts +22 -21
- package/dist/src/errors/base.js +22 -21
- package/dist/src/errors/build.d.ts +6 -6
- package/dist/src/errors/build.js +6 -6
- package/dist/src/errors/codes.d.ts +10 -10
- package/dist/src/errors/codes.js +10 -10
- package/dist/src/errors/furnace.d.ts +2 -2
- package/dist/src/errors/git.d.ts +1 -1
- package/dist/src/errors/git.js +1 -1
- package/dist/src/errors/patch.d.ts +3 -3
- package/dist/src/errors/patch.js +3 -3
- package/dist/src/errors/rebase.d.ts +1 -1
- package/dist/src/errors/rebase.js +1 -1
- package/dist/src/errors/run.d.ts +1 -1
- package/dist/src/errors/run.js +1 -1
- package/dist/src/index.d.ts +4 -4
- package/dist/src/index.js +4 -4
- package/dist/src/types/commands/options.d.ts +86 -85
- package/dist/src/types/commands/patches.d.ts +19 -19
- package/dist/src/types/commands/project.d.ts +3 -3
- package/dist/src/types/config.d.ts +24 -23
- package/dist/src/types/furnace.d.ts +17 -17
- package/dist/src/types/json.d.ts +3 -3
- package/dist/src/types/json.js +2 -2
- package/dist/src/types/typecheck.d.ts +3 -3
- package/dist/src/utils/assert.d.ts +1 -1
- package/dist/src/utils/assert.js +6 -6
- package/dist/src/utils/build-info.d.ts +5 -5
- package/dist/src/utils/build-info.js +6 -6
- package/dist/src/utils/child-env.d.ts +5 -5
- package/dist/src/utils/child-env.js +5 -5
- package/dist/src/utils/concurrency.d.ts +2 -2
- package/dist/src/utils/concurrency.js +2 -2
- package/dist/src/utils/elapsed.js +1 -1
- package/dist/src/utils/errors.d.ts +8 -8
- package/dist/src/utils/errors.js +8 -8
- package/dist/src/utils/fs.d.ts +1 -1
- package/dist/src/utils/fs.js +8 -8
- package/dist/src/utils/line-dispatch.d.ts +3 -3
- package/dist/src/utils/line-dispatch.js +5 -5
- package/dist/src/utils/logger.d.ts +4 -4
- package/dist/src/utils/logger.js +11 -11
- package/dist/src/utils/machine-output.js +2 -2
- package/dist/src/utils/options.d.ts +13 -13
- package/dist/src/utils/options.js +20 -20
- package/dist/src/utils/package-root.js +2 -2
- package/dist/src/utils/paths.d.ts +4 -4
- package/dist/src/utils/paths.js +4 -4
- package/dist/src/utils/process-group.d.ts +8 -8
- package/dist/src/utils/process-group.js +19 -19
- package/dist/src/utils/process.d.ts +34 -33
- package/dist/src/utils/process.js +20 -19
- package/dist/src/utils/ps-duration.d.ts +4 -4
- package/dist/src/utils/ps-duration.js +6 -6
- package/dist/src/utils/regex.d.ts +4 -4
- package/dist/src/utils/regex.js +7 -7
- package/dist/src/utils/sleep.d.ts +7 -7
- package/dist/src/utils/sleep.js +7 -7
- package/dist/src/utils/stdio-drain.d.ts +7 -7
- package/dist/src/utils/stdio-drain.js +8 -8
- package/dist/src/utils/validation.d.ts +11 -12
- package/dist/src/utils/validation.js +20 -21
- package/docs/README.md +2 -2
- package/docs/configuration.md +120 -114
- package/docs/exit-codes.md +63 -58
- package/docs/furnace.md +20 -19
- package/docs/lifecycle-invariants.md +412 -251
- package/docs/machine-output.md +33 -32
- package/docs/patch-workflow.md +48 -45
- package/docs/run-logs.md +62 -58
- package/docs/testing.md +101 -101
- package/docs/verification-trees.md +23 -22
- package/package.json +2 -2
|
@@ -2,21 +2,21 @@
|
|
|
2
2
|
* Queue-wide lint for binary patch bodies that cannot recreate their file.
|
|
3
3
|
*
|
|
4
4
|
* `git diff` has two ways to render a binary change. `git diff --binary`
|
|
5
|
-
* emits a `GIT binary patch` section carrying the literal/delta payload
|
|
6
|
-
* that body can be replayed by `git apply`. Plain `git diff` emits only
|
|
7
|
-
* informational `Binary files a/x and b/x differ`, which records
|
|
8
|
-
* bytes changed and carries none of them.
|
|
5
|
+
* emits a `GIT binary patch` section carrying the literal/delta payload,
|
|
6
|
+
* and that body can be replayed by `git apply`. Plain `git diff` emits only
|
|
7
|
+
* the informational `Binary files a/x and b/x differ`, which records that
|
|
8
|
+
* the bytes changed and carries none of them.
|
|
9
9
|
*
|
|
10
10
|
* The stub form is dangerous rather than merely lossy because it still
|
|
11
11
|
* carries a correct `index <old>..<new>` line. Every identity-shaped check in
|
|
12
|
-
* the codebase
|
|
12
|
+
* the codebase (worktree classification, foreign-drift detection) keys on
|
|
13
13
|
* that hash, matches it against the live file, and concludes the patch is
|
|
14
14
|
* backed. So a queue can hold a patch that provably cannot rebuild its own
|
|
15
15
|
* file while every gate reports green, and the loss surfaces only at the next
|
|
16
16
|
* clean-room apply. This rule is the one check that reads the body itself and
|
|
17
17
|
* fails closed, whichever command wrote it.
|
|
18
18
|
*
|
|
19
|
-
* Body-only
|
|
19
|
+
* Body-only: it needs no engine checkout, so it runs anywhere the
|
|
20
20
|
* queue context is available and never pulls an engine dependency into the
|
|
21
21
|
* cross-patch lint graph.
|
|
22
22
|
*/
|
|
@@ -25,7 +25,7 @@ import type { PatchQueueBodyEntry, PatchQueueView } from './patch-lint-queue-typ
|
|
|
25
25
|
/**
|
|
26
26
|
* Queue view accepted by {@link lintPatchQueueBinaryBodies}. Described
|
|
27
27
|
* structurally rather than by importing `PatchQueueContext` from
|
|
28
|
-
* `patch-lint-cross.ts`, which imports this module back
|
|
28
|
+
* `patch-lint-cross.ts`, which imports this module back. The shared leaf
|
|
29
29
|
* type keeps the dependency edge one-way and `dpdm` clean.
|
|
30
30
|
*/
|
|
31
31
|
type BinaryBodyQueueContext = PatchQueueView<PatchQueueBodyEntry>;
|
|
@@ -53,7 +53,7 @@ export interface CachedPerPatchLint {
|
|
|
53
53
|
}
|
|
54
54
|
/**
|
|
55
55
|
* Returns the cached lint payload for a patch when the stored key still
|
|
56
|
-
* matches
|
|
56
|
+
* matches and the entry was computed under the same lint-ignore waiver set.
|
|
57
57
|
* A waiver change makes a replayed verdict actively wrong, so the waiver set
|
|
58
58
|
* is compared explicitly rather than trusted to the key.
|
|
59
59
|
*/
|
|
@@ -61,7 +61,7 @@ export declare function getCachedPerPatchLintIssues(cache: PerPatchLintCacheFile
|
|
|
61
61
|
export interface SetCachedPerPatchLintIssuesInput {
|
|
62
62
|
/** Cache file to mutate in place. */
|
|
63
63
|
cache: PerPatchLintCacheFile;
|
|
64
|
-
/** Patch the payload belongs to
|
|
64
|
+
/** Patch the payload belongs to, and also the cache entry key. */
|
|
65
65
|
patchFilename: string;
|
|
66
66
|
/** Fingerprint the payload is valid for. */
|
|
67
67
|
key: string;
|
|
@@ -9,17 +9,17 @@ import { git } from './git-base.js';
|
|
|
9
9
|
import { collectNewFileCreatorsByPath } from './patch-lint.js';
|
|
10
10
|
// Schema 2: entries additionally carry the lintIgnore-suppressed issues and
|
|
11
11
|
// the measured non-binary line count, so a warm run can report waived size
|
|
12
|
-
// measurements identically to a cold one
|
|
13
|
-
//
|
|
12
|
+
// measurements identically to a cold one. A cache hit must never surface
|
|
13
|
+
// less than a fresh lint.
|
|
14
14
|
// Schema 3: the key additionally content-hashes the
|
|
15
15
|
// `patchLint.checkJsTestShim` file exactly as `checkJsExtraShim`'s already
|
|
16
|
-
// was
|
|
16
|
+
// was. Without it, editing the test shim in place replays every cached
|
|
17
17
|
// verdict.
|
|
18
|
-
// Schema 4: each entry
|
|
18
|
+
// Schema 4: each entry records the lint-ignore waiver set that produced it,
|
|
19
19
|
// and a lookup whose effective waiver set differs is refused even when the
|
|
20
20
|
// key matches. The key already hashes `patch.lintIgnore`, so this is
|
|
21
21
|
// belt-and-braces on purpose: a waiver change is the one mutation that makes
|
|
22
|
-
// a replayed verdict actively
|
|
22
|
+
// a replayed verdict actively wrong (an operator writes a waiver, re-runs,
|
|
23
23
|
// and is shown the finding they just waived), and the class must not depend
|
|
24
24
|
// on every future key input staying complete. Bumping the schema also
|
|
25
25
|
// discards every pre-4 entry, which is itself the cure for a cache that
|
|
@@ -96,7 +96,7 @@ function buildOwnershipFingerprint(files, ctx) {
|
|
|
96
96
|
export async function buildPerPatchLintCacheKey(input) {
|
|
97
97
|
// Hash in parallel, then insert in sorted order. The sort is load-bearing:
|
|
98
98
|
// `stableHash` below serialises this record, so insertion order is part of
|
|
99
|
-
// the cache key
|
|
99
|
+
// the cache key, and assigning as results land would make the key
|
|
100
100
|
// nondeterministic.
|
|
101
101
|
const sortedFiles = [...input.existingFiles].sort((a, b) => a.localeCompare(b));
|
|
102
102
|
const hashes = await Promise.all(sortedFiles.map((file) => fileHash(join(input.engineDir, file))));
|
|
@@ -110,8 +110,8 @@ export async function buildPerPatchLintCacheKey(input) {
|
|
|
110
110
|
const shimHashOf = async (shimPath) => shimPath === undefined
|
|
111
111
|
? null
|
|
112
112
|
: { path: shimPath, hash: await fileHash(resolve(input.projectRoot, shimPath)) };
|
|
113
|
-
// Both shims feed compiled checkJs programs, so both are content-hashed
|
|
114
|
-
//
|
|
113
|
+
// Both shims feed compiled checkJs programs, so both are content-hashed.
|
|
114
|
+
// The config block alone only carries their paths, and an in-place edit
|
|
115
115
|
// must invalidate the programs it feeds.
|
|
116
116
|
const [extraShim, testShim] = await Promise.all([
|
|
117
117
|
shimHashOf(input.config.patchLint?.checkJsExtraShim),
|
|
@@ -121,9 +121,9 @@ export async function buildPerPatchLintCacheKey(input) {
|
|
|
121
121
|
cacheSchemaVersion: LINT_CACHE_SCHEMA_VERSION,
|
|
122
122
|
engineHeadSha: input.engineHeadSha ?? null,
|
|
123
123
|
lintImplementationVersion: LINT_IMPLEMENTATION_VERSION,
|
|
124
|
-
//
|
|
125
|
-
//
|
|
126
|
-
//
|
|
124
|
+
// The plain semver, not the +g<sha> build identity: that identity
|
|
125
|
+
// churns every commit at the same version and would invalidate the
|
|
126
|
+
// cache for no correctness gain.
|
|
127
127
|
packageVersion: input.packageVersion ?? getPackageVersion(),
|
|
128
128
|
patchFile: await fileHash(join(input.patchesDir, input.patch.filename)),
|
|
129
129
|
patchMetadata: normalizePatchMetadata(input.patch),
|
|
@@ -177,7 +177,7 @@ export async function loadPerPatchLintCache(projectRoot) {
|
|
|
177
177
|
}
|
|
178
178
|
catch {
|
|
179
179
|
// Any unreadable or malformed cache file is treated as a cold cache. The
|
|
180
|
-
// cache is a pure optimisation, so discarding it is always safe
|
|
180
|
+
// cache is a pure optimisation, so discarding it is always safe. The
|
|
181
181
|
// alternative is failing lint over a corrupt sidecar.
|
|
182
182
|
return createEmptyPerPatchLintCache();
|
|
183
183
|
}
|
|
@@ -199,7 +199,7 @@ function normalizeLintIgnoreSet(lintIgnore) {
|
|
|
199
199
|
}
|
|
200
200
|
/**
|
|
201
201
|
* Returns the cached lint payload for a patch when the stored key still
|
|
202
|
-
* matches
|
|
202
|
+
* matches and the entry was computed under the same lint-ignore waiver set.
|
|
203
203
|
* A waiver change makes a replayed verdict actively wrong, so the waiver set
|
|
204
204
|
* is compared explicitly rather than trusted to the key.
|
|
205
205
|
*/
|
|
@@ -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,20 +26,20 @@
|
|
|
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 {
|
|
@@ -64,11 +64,11 @@ export interface RunCheckJsGroupedInput {
|
|
|
64
64
|
projectRoot?: string;
|
|
65
65
|
/** Strictness preset plus allowlisted compiler-option overrides. */
|
|
66
66
|
mode?: CheckJsMode;
|
|
67
|
-
/** Optional shim text appended
|
|
67
|
+
/** Optional shim text appended after the consumer shim. */
|
|
68
68
|
builtinShimSuffix?: string;
|
|
69
69
|
/**
|
|
70
|
-
* When set, only these repo-relative files become program
|
|
71
|
-
*
|
|
70
|
+
* When set, only these repo-relative files become program roots.
|
|
71
|
+
* Resolution (and the host allowlist) still spans all of
|
|
72
72
|
* `resolutionOwned`, so a subset root's cross-patch imports type-check
|
|
73
73
|
* against the real owning sources while unrelated owned files are never
|
|
74
74
|
* parsed. `.mjs` files are module-scoped, so a root's diagnostics are
|
|
@@ -78,22 +78,22 @@ export interface RunCheckJsGroupedInput {
|
|
|
78
78
|
rootScope?: ReadonlySet<string>;
|
|
79
79
|
}
|
|
80
80
|
/**
|
|
81
|
-
* Builds the checkJs program
|
|
81
|
+
* Builds the checkJs program once over `resolutionOwned` and returns its
|
|
82
82
|
* diagnostics grouped by originating file. Callers slice the result by their
|
|
83
|
-
* own report scope
|
|
83
|
+
* own report scope: per-patch lint attributes each file to its owning patch,
|
|
84
84
|
* export/re-export keeps only the patch under export. Resolution always spans
|
|
85
85
|
* every file in `resolutionOwned`, so cross-patch `resource:///`/`chrome://`
|
|
86
86
|
* imports resolve to real sources.
|
|
87
87
|
*
|
|
88
|
-
* @param input - Program inputs
|
|
88
|
+
* @param input - Program inputs. See {@link RunCheckJsGroupedInput}
|
|
89
89
|
* @returns Diagnostics grouped per owning file plus run-level errors
|
|
90
90
|
*/
|
|
91
91
|
export declare function runCheckJsGrouped(input: RunCheckJsGroupedInput): Promise<GroupedCheckJsResult>;
|
|
92
92
|
/**
|
|
93
93
|
* Flattens a {@link runCheckJsGrouped} run into a single issue list. When
|
|
94
94
|
* `reportScope` is supplied, only diagnostics from files in that set are
|
|
95
|
-
* returned (resolution still spans every owned file)
|
|
96
|
-
* 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.
|
|
97
97
|
*
|
|
98
98
|
* @param repoDir - Absolute engine (repository) directory
|
|
99
99
|
* @param patchOwnedFiles - Patch-owned `.sys.mjs` paths to resolve against
|
|
@@ -120,15 +120,15 @@ export declare function runCheckJs(repoDir: string, patchOwnedFiles: Set<string>
|
|
|
120
120
|
export declare function invokePatchLintCheckJs(repoDir: string, patchOwnedFiles: Set<string>, patchLint: PatchLintConfig, projectRoot: string, reportScope?: ReadonlySet<string>): Promise<PatchLintIssue[]>;
|
|
121
121
|
/**
|
|
122
122
|
* Runs the checkJs pass over patch-owned test `.js` files (
|
|
123
|
-
* `patchLint.checkJsTestFiles`). Each test file gets its
|
|
124
|
-
* program
|
|
125
|
-
*
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
*
|
|
129
|
-
*
|
|
130
|
-
* program (head helpers report from their own program), and
|
|
131
|
-
* 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.
|
|
132
132
|
*
|
|
133
133
|
* @param repoDir - Absolute engine (repository) directory
|
|
134
134
|
* @param testFiles - Patch-owned test-script paths (repo-relative)
|
|
@@ -139,7 +139,7 @@ export declare function runCheckJsTestFilesGrouped(repoDir: string, testFiles: S
|
|
|
139
139
|
/**
|
|
140
140
|
* Grouped variant of {@link invokePatchLintCheckJs}: builds one queue-wide
|
|
141
141
|
* checkJs program over `patchOwnedFiles` and returns its findings grouped by
|
|
142
|
-
* owning file. The per-patch lint orchestrator calls this
|
|
142
|
+
* owning file. The per-patch lint orchestrator calls this once per run
|
|
143
143
|
* and attributes each file's findings to its owning patch, instead of
|
|
144
144
|
* rebuilding the same program for every patch in the queue.
|
|
145
145
|
*
|
|
@@ -148,12 +148,12 @@ export declare function runCheckJsTestFilesGrouped(repoDir: string, testFiles: S
|
|
|
148
148
|
* @param patchLint - The resolved `patchLint` config block
|
|
149
149
|
* @param projectRoot - FireForge project root for shim resolution
|
|
150
150
|
* @param rootScope - Optional subset of files to use as program roots
|
|
151
|
-
* (`--patches`)
|
|
151
|
+
* (`--patches`). Resolution still spans the whole queue
|
|
152
152
|
*/
|
|
153
153
|
export declare function invokePatchLintCheckJsGrouped(repoDir: string, patchOwnedFiles: Set<string>, patchLint: PatchLintConfig, projectRoot: string, rootScope?: ReadonlySet<string>): Promise<GroupedCheckJsResult>;
|
|
154
154
|
/**
|
|
155
155
|
* Cheap probe reproducing the only run-level ("global") checkJs findings the
|
|
156
|
-
* build path can produce
|
|
156
|
+
* build path can produce: a missing `typescript` package and an unreadable
|
|
157
157
|
* consumer shim (`checkJsExtraShim`, and `checkJsTestShim` when
|
|
158
158
|
* `checkJsTestFiles` is on). The built program itself never contributes
|
|
159
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,14 +156,14 @@ 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 input - Program inputs
|
|
166
|
+
* @param input - Program inputs. See {@link RunCheckJsGroupedInput}
|
|
166
167
|
* @returns Diagnostics grouped per owning file plus run-level errors
|
|
167
168
|
*/
|
|
168
169
|
export async function runCheckJsGrouped(input) {
|
|
@@ -170,7 +171,7 @@ export async function runCheckJsGrouped(input) {
|
|
|
170
171
|
const empty = { byFile: new Map(), global: [] };
|
|
171
172
|
if (resolutionOwned.size === 0)
|
|
172
173
|
return empty;
|
|
173
|
-
// Dynamic import
|
|
174
|
+
// Dynamic import: typescript stays as a dev dependency
|
|
174
175
|
let ts;
|
|
175
176
|
try {
|
|
176
177
|
ts = await import('typescript');
|
|
@@ -191,7 +192,7 @@ export async function runCheckJsGrouped(input) {
|
|
|
191
192
|
}
|
|
192
193
|
// Resolve absolute paths for root files, filtering to files that exist.
|
|
193
194
|
// Under a rootScope, non-scoped owned files stay resolvable (host
|
|
194
|
-
// allowlist + relByAbsolute) but are not program roots
|
|
195
|
+
// allowlist + relByAbsolute) but are not program roots. They are only
|
|
195
196
|
// parsed if a scoped root's import closure reaches them.
|
|
196
197
|
const rootFiles = [];
|
|
197
198
|
const ownedAbsolute = new Set();
|
|
@@ -208,16 +209,16 @@ export async function runCheckJsGrouped(input) {
|
|
|
208
209
|
if (rootFiles.length === 0)
|
|
209
210
|
return empty;
|
|
210
211
|
// Compose the shim. `extraShimPath` is project-relative (validated
|
|
211
|
-
// by config-validate)
|
|
212
|
-
// 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
|
|
213
214
|
// shim path is ever read in that case is when extraShimPath is
|
|
214
215
|
// also undefined, so the resolution target is irrelevant.
|
|
215
216
|
let shimSource;
|
|
216
217
|
try {
|
|
217
218
|
const composed = await composeShimSource(input.projectRoot ?? repoDir, extraShimPath);
|
|
218
219
|
// The suffix (e.g. the loose test-harness baseline) goes
|
|
219
|
-
//
|
|
220
|
-
// `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
|
|
221
222
|
// consumer declaration must precede the loose fallback to win.
|
|
222
223
|
shimSource = input.builtinShimSuffix
|
|
223
224
|
? `${composed.source}\n${input.builtinShimSuffix}`
|
|
@@ -245,12 +246,12 @@ export async function runCheckJsGrouped(input) {
|
|
|
245
246
|
const strictness = strict
|
|
246
247
|
? { strict: true, noImplicitAny: true }
|
|
247
248
|
: {
|
|
248
|
-
// Loose default
|
|
249
|
+
// Loose default: implicit `any` is allowed unless `patchLint.checkJsStrict`.
|
|
249
250
|
strict: false,
|
|
250
251
|
noImplicitAny: false,
|
|
251
252
|
};
|
|
252
|
-
// Allowlisted overrides. Booleans merge directly
|
|
253
|
-
// 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
|
|
254
255
|
// resolver below so patch-owned modules can be typed from their real
|
|
255
256
|
// sources without a hand-generated ambient stub shim.
|
|
256
257
|
const overrides = {};
|
|
@@ -281,10 +282,10 @@ export async function runCheckJsGrouped(input) {
|
|
|
281
282
|
// Module resolution is host-controlled (see resolveOwnedSpecifier
|
|
282
283
|
// below): imports that match a patch-owned file resolve to the real
|
|
283
284
|
// source so JSDoc type-guard predicates and @template generics
|
|
284
|
-
// survive the module boundary
|
|
285
|
+
// survive the module boundary. Everything else is left to fail
|
|
285
286
|
// resolution, falling back to the chrome:*/resource:* ambient
|
|
286
287
|
// wildcards plus the suppressed "cannot find module" codes. The
|
|
287
|
-
// host resolver is authoritative
|
|
288
|
+
// host resolver is authoritative: TS never crawls the Firefox
|
|
288
289
|
// tree looking for upstream modules.
|
|
289
290
|
...strictness,
|
|
290
291
|
...overrides,
|
|
@@ -294,7 +295,7 @@ export async function runCheckJsGrouped(input) {
|
|
|
294
295
|
// the shim for the shim path, and returns empty content for
|
|
295
296
|
// anything else to avoid reading the full Firefox tree.
|
|
296
297
|
const defaultHost = ts.createCompilerHost(options);
|
|
297
|
-
// Files pulled in via a reviewed `paths` mapping
|
|
298
|
+
// Files pulled in via a reviewed `paths` mapping: outside the owned set
|
|
298
299
|
// but read from disk so the resolver's targets actually type-check.
|
|
299
300
|
const pathsResolved = new Set();
|
|
300
301
|
const resolveViaPaths = pathsMapping
|
|
@@ -348,7 +349,7 @@ export async function runCheckJsGrouped(input) {
|
|
|
348
349
|
* Groups TS diagnostics by the patch-owned file they originate in,
|
|
349
350
|
* suppressing module-resolution / unknown-name noise inherent to checking
|
|
350
351
|
* Firefox JS outside Mozilla's build system. Diagnostics from `paths`-resolved
|
|
351
|
-
* or shim files are dropped
|
|
352
|
+
* or shim files are dropped. Only owned files (in `relByAbsolute`) carry
|
|
352
353
|
* findings.
|
|
353
354
|
*/
|
|
354
355
|
function groupOwnedDiagnostics(ts, diagnostics, relByAbsolute, undefinedIdentifiers = 'warning') {
|
|
@@ -393,8 +394,8 @@ function groupOwnedDiagnostics(ts, diagnostics, relByAbsolute, undefinedIdentifi
|
|
|
393
394
|
/**
|
|
394
395
|
* Flattens a {@link runCheckJsGrouped} run into a single issue list. When
|
|
395
396
|
* `reportScope` is supplied, only diagnostics from files in that set are
|
|
396
|
-
* returned (resolution still spans every owned file)
|
|
397
|
-
* 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.
|
|
398
399
|
*
|
|
399
400
|
* @param repoDir - Absolute engine (repository) directory
|
|
400
401
|
* @param patchOwnedFiles - Patch-owned `.sys.mjs` paths to resolve against
|
|
@@ -438,15 +439,15 @@ export async function invokePatchLintCheckJs(repoDir, patchOwnedFiles, patchLint
|
|
|
438
439
|
}
|
|
439
440
|
/**
|
|
440
441
|
* Runs the checkJs pass over patch-owned test `.js` files (
|
|
441
|
-
* `patchLint.checkJsTestFiles`). Each test file gets its
|
|
442
|
-
* program
|
|
443
|
-
*
|
|
444
|
-
*
|
|
445
|
-
*
|
|
446
|
-
*
|
|
447
|
-
*
|
|
448
|
-
* program (head helpers report from their own program), and
|
|
449
|
-
* 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.
|
|
450
451
|
*
|
|
451
452
|
* @param repoDir - Absolute engine (repository) directory
|
|
452
453
|
* @param testFiles - Patch-owned test-script paths (repo-relative)
|
|
@@ -519,7 +520,7 @@ function modeFromPatchLintConfig(patchLint) {
|
|
|
519
520
|
/**
|
|
520
521
|
* Grouped variant of {@link invokePatchLintCheckJs}: builds one queue-wide
|
|
521
522
|
* checkJs program over `patchOwnedFiles` and returns its findings grouped by
|
|
522
|
-
* owning file. The per-patch lint orchestrator calls this
|
|
523
|
+
* owning file. The per-patch lint orchestrator calls this once per run
|
|
523
524
|
* and attributes each file's findings to its owning patch, instead of
|
|
524
525
|
* rebuilding the same program for every patch in the queue.
|
|
525
526
|
*
|
|
@@ -528,7 +529,7 @@ function modeFromPatchLintConfig(patchLint) {
|
|
|
528
529
|
* @param patchLint - The resolved `patchLint` config block
|
|
529
530
|
* @param projectRoot - FireForge project root for shim resolution
|
|
530
531
|
* @param rootScope - Optional subset of files to use as program roots
|
|
531
|
-
* (`--patches`)
|
|
532
|
+
* (`--patches`). Resolution still spans the whole queue
|
|
532
533
|
*/
|
|
533
534
|
export async function invokePatchLintCheckJsGrouped(repoDir, patchOwnedFiles, patchLint, projectRoot, rootScope) {
|
|
534
535
|
return runCheckJsGrouped({
|
|
@@ -544,7 +545,7 @@ export async function invokePatchLintCheckJsGrouped(repoDir, patchOwnedFiles, pa
|
|
|
544
545
|
}
|
|
545
546
|
/**
|
|
546
547
|
* Cheap probe reproducing the only run-level ("global") checkJs findings the
|
|
547
|
-
* build path can produce
|
|
548
|
+
* build path can produce: a missing `typescript` package and an unreadable
|
|
548
549
|
* consumer shim (`checkJsExtraShim`, and `checkJsTestShim` when
|
|
549
550
|
* `checkJsTestFiles` is on). The built program itself never contributes
|
|
550
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,8 +6,8 @@
|
|
|
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
13
|
import type { PatchQueueBodyEntry, PatchQueueView } from './patch-lint-queue-types.js';
|
|
@@ -20,7 +20,7 @@ export declare function invalidateNewFileCreatorsCache(ctx: CreatorsContext): vo
|
|
|
20
20
|
* mode` by at least one patch in the queue. Paths created by only one
|
|
21
21
|
* patch are also included so callers can distinguish "no creator" from
|
|
22
22
|
* "exactly one creator" without re-scanning the diffs. The returned map
|
|
23
|
-
* is memoised and shared
|
|
23
|
+
* is memoised and shared, so treat it as read-only.
|
|
24
24
|
*/
|
|
25
25
|
export declare function collectNewFileCreatorsByPath(ctx: CreatorsContext): Map<string, string[]>;
|
|
26
26
|
export {};
|