@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
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
2
|
/**
|
|
3
3
|
* Operator-facing triage for the `timed out … with no output` / `Ran 0
|
|
4
|
-
* checks` stall
|
|
4
|
+
* checks` stall: the shape where the harness dies before any test output.
|
|
5
5
|
*
|
|
6
|
-
* Split out of `test-harness-crash.ts`, which
|
|
6
|
+
* Split out of `test-harness-crash.ts`, which classifies runs. This module
|
|
7
7
|
* only renders advice about one already-classified shape. Keeping the two
|
|
8
8
|
* apart matters because the census below carries claims of unequal
|
|
9
9
|
* evidential strength, and the rules for editing it are not the rules for
|
|
@@ -11,14 +11,14 @@
|
|
|
11
11
|
* the output or not, while a cause in the census is an assertion about the
|
|
12
12
|
* world that an operator will act on.
|
|
13
13
|
*
|
|
14
|
-
* Everything here is pure
|
|
14
|
+
* Everything here is pure. The platform and the probed display state are
|
|
15
15
|
* injected, so unit tests need no mocking.
|
|
16
16
|
*/
|
|
17
17
|
/**
|
|
18
18
|
* First step for the `timed out … with no output` / `Ran 0 checks`
|
|
19
|
-
* signature, printed
|
|
19
|
+
* signature, printed above the cause list. Running a known-good control
|
|
20
20
|
* separates "this test" from "this build" and is the correct opening move
|
|
21
|
-
* for
|
|
21
|
+
* for every cause below. It is not specific to any one of them, so
|
|
22
22
|
* attaching it to a single entry made reaching that entry informationally
|
|
23
23
|
* empty.
|
|
24
24
|
*/
|
|
@@ -26,23 +26,23 @@ const NO_OUTPUT_STALL_CONTROL_STEP = 'First, run a known-good control test. If t
|
|
|
26
26
|
'under investigation, and the list below applies to the build or the host.';
|
|
27
27
|
/**
|
|
28
28
|
* Recorded causes of the `timed out … with no output` / `Ran 0 checks`
|
|
29
|
-
* signature, each paired with the probe that
|
|
29
|
+
* signature, each paired with the probe that discriminates it from the
|
|
30
30
|
* others. Printed verbatim under the hint.
|
|
31
31
|
*
|
|
32
|
-
* Evidence per entry is
|
|
32
|
+
* Evidence per entry is unequal, and the text says so:
|
|
33
33
|
*
|
|
34
|
-
* - (1) is
|
|
34
|
+
* - (1) is measured: `probeDisplaySleepState` reads the display's power
|
|
35
35
|
* state, so the hint states it as fact rather than as a possibility.
|
|
36
36
|
* - (2) is discriminated by `--headless`.
|
|
37
|
-
* - (4) is
|
|
37
|
+
* - (4) is mechanical and was root-caused downstream: the harness serves
|
|
38
38
|
* its manifest from `server.js` on 8888, and a survivor of an
|
|
39
39
|
* interrupted run keeps the port. Its probe is exact, and the preflight
|
|
40
40
|
* in `mochitest-server-port.ts` now refuses it before a run starts.
|
|
41
|
-
* - (3) is now
|
|
41
|
+
* - (3) is now mechanical and root-caused, replacing the correlation an
|
|
42
42
|
* earlier revision recorded. A `chrome://` (or `resource://`) URL that
|
|
43
43
|
* resolves to nothing reaches `CheckForBrokenChromeURL`
|
|
44
44
|
* (netwerk/base/nsNetUtil.cpp), which outside automation only
|
|
45
|
-
* `printf_stderr`s `Missing chrome or resource URL: <uri
|
|
45
|
+
* `printf_stderr`s `Missing chrome or resource URL: <uri>`, but under
|
|
46
46
|
* `xpc::IsInAutomation()` the same condition is
|
|
47
47
|
* `MOZ_CRASH_UNSAFE_PRINTF("Missing chrome or resource URLs: %s")`. A
|
|
48
48
|
* downstream reproduction symbolicated the faulting frame as
|
|
@@ -52,13 +52,13 @@ const NO_OUTPUT_STALL_CONTROL_STEP = 'First, run a known-good control test. If t
|
|
|
52
52
|
* failed image load in Gecko fires `error` and does not gate the
|
|
53
53
|
* document load event.
|
|
54
54
|
*
|
|
55
|
-
* Detection by log line is
|
|
56
|
-
*
|
|
57
|
-
*
|
|
55
|
+
* Detection by log line is not specified for (3), because of the mechanism
|
|
56
|
+
* itself: in the reproduction the crash landed in a content
|
|
57
|
+
* process (`plugin-container`, a child of the browser) with the
|
|
58
58
|
* crash reporter compiled out, so the harness log carried neither the crash
|
|
59
|
-
* message nor a crash line
|
|
59
|
+
* message nor a crash line, only the no-output timeout, `Ran 0 checks`,
|
|
60
60
|
* and mochitest's "Can't trigger Breakpad, just killing process". Under
|
|
61
|
-
* automation the message is in the process that
|
|
61
|
+
* automation the message is in the process that died, not in the log, so
|
|
62
62
|
* the census points at the two artefacts that do carry it: the OS crash
|
|
63
63
|
* report (whose faulting frame names `CheckForBrokenChromeURL`) and the
|
|
64
64
|
* out-of-automation smoke probe (which prints the non-crashing spelling
|
|
@@ -90,17 +90,17 @@ const NO_OUTPUT_STALL_TRIAGE = [
|
|
|
90
90
|
'reach a stall only on a host where the port could not be probed.',
|
|
91
91
|
];
|
|
92
92
|
/**
|
|
93
|
-
* Optional hint appended to the harness-crash message when a
|
|
93
|
+
* Optional hint appended to the harness-crash message when a headed run on
|
|
94
94
|
* macOS died at the no-output timeout.
|
|
95
95
|
*
|
|
96
|
-
* When `displayState` names a
|
|
97
|
-
* fact rather than as one of three possibilities
|
|
98
|
-
*
|
|
96
|
+
* When `displayState` names a measured display state, the hint states it as
|
|
97
|
+
* fact rather than as one of three possibilities, which is what probing is
|
|
98
|
+
* for: an operator staring at a bare test failure should not have to
|
|
99
99
|
* rediscover that their machine dimmed. `caffeinate` is described accurately
|
|
100
|
-
* (it prevents sleep
|
|
100
|
+
* (it prevents sleep, and cannot wake an already-sleeping display), so
|
|
101
101
|
* operators are not sent to a command that could not have helped them.
|
|
102
102
|
*
|
|
103
|
-
* Pure
|
|
103
|
+
* Pure. The platform and the probed state are injected so unit tests need
|
|
104
104
|
* no mocking.
|
|
105
105
|
*
|
|
106
106
|
* @param signature - The recognized crash shape
|
|
@@ -1,14 +1,33 @@
|
|
|
1
|
-
import { type MachCommandResult } from './mach.js';
|
|
1
|
+
import { type MachCommandResult, type MachTestSuiteKind } from './mach.js';
|
|
2
2
|
export interface XpcshellRetryClassification {
|
|
3
3
|
xpcshell: readonly string[];
|
|
4
4
|
nonXpcshell: readonly string[];
|
|
5
5
|
}
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
export interface XpcshellRetryOptions {
|
|
7
|
+
/** Engine checkout the run happened in. */
|
|
8
|
+
engineDir: string;
|
|
9
|
+
/** Object directory the run used, when one is configured. */
|
|
10
|
+
objDir: string | undefined;
|
|
11
|
+
/** Result of the run that may need repairing and retrying. */
|
|
12
|
+
result: MachCommandResult;
|
|
13
|
+
/** Which of the requested paths are xpcshell tests, and which are not. */
|
|
14
|
+
classification: XpcshellRetryClassification;
|
|
15
|
+
/** Test paths, normalized, as handed to mach. */
|
|
16
|
+
normalizedPaths: string[];
|
|
17
|
+
/** Extra mach arguments the run was started with. */
|
|
18
|
+
extraArgs: string[];
|
|
19
|
+
/** Environment overlay for the retried run. */
|
|
20
|
+
env?: Record<string, string> | undefined;
|
|
21
|
+
/** Mach command kind to retry with. Defaults to the generic `test`. */
|
|
22
|
+
kind?: MachTestSuiteKind | undefined;
|
|
23
|
+
/** Whether the run was started with full harness output. */
|
|
24
|
+
fullOutput?: boolean | undefined;
|
|
25
|
+
}
|
|
8
26
|
/**
|
|
9
27
|
* Removes a stale xpcshell install symlink and retries the focused mach test
|
|
10
|
-
* once. The retry uses the same `
|
|
11
|
-
* caller is already running on, so an xpcshell-suite run repairs
|
|
12
|
-
* via `mach xpcshell-test` rather than falling back to the
|
|
28
|
+
* once. The retry uses the same mach command `kind` (suite-specific or
|
|
29
|
+
* generic) the caller is already running on, so an xpcshell-suite run repairs
|
|
30
|
+
* and re-runs via `mach xpcshell-test` rather than falling back to the
|
|
31
|
+
* generic command.
|
|
13
32
|
*/
|
|
14
|
-
export declare function retryAfterXpcshellSymlinkRepair(
|
|
33
|
+
export declare function retryAfterXpcshellSymlinkRepair(options: XpcshellRetryOptions): Promise<MachCommandResult>;
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
|
-
import {
|
|
2
|
+
import { runMachTestSuite } from './mach.js';
|
|
3
3
|
import { tryRepairStaleXpcshellTestSymlink } from './test-stale-symlink.js';
|
|
4
4
|
/**
|
|
5
5
|
* Removes a stale xpcshell install symlink and retries the focused mach test
|
|
6
|
-
* once. The retry uses the same `
|
|
7
|
-
* caller is already running on, so an xpcshell-suite run repairs
|
|
8
|
-
* via `mach xpcshell-test` rather than falling back to the
|
|
6
|
+
* once. The retry uses the same mach command `kind` (suite-specific or
|
|
7
|
+
* generic) the caller is already running on, so an xpcshell-suite run repairs
|
|
8
|
+
* and re-runs via `mach xpcshell-test` rather than falling back to the
|
|
9
|
+
* generic command.
|
|
9
10
|
*/
|
|
10
|
-
export async function retryAfterXpcshellSymlinkRepair(
|
|
11
|
+
export async function retryAfterXpcshellSymlinkRepair(options) {
|
|
12
|
+
const { engineDir, objDir, result, classification, normalizedPaths, extraArgs, env, kind = 'test', fullOutput, } = options;
|
|
11
13
|
if (result.exitCode !== 0 &&
|
|
12
14
|
classification.xpcshell.length > 0 &&
|
|
13
15
|
classification.nonXpcshell.length === 0) {
|
|
@@ -15,12 +17,13 @@ export async function retryAfterXpcshellSymlinkRepair(engineDir, objDir, result,
|
|
|
15
17
|
if (repaired) {
|
|
16
18
|
// The repaired re-run is the same logical invocation, so it keeps
|
|
17
19
|
// the verbosity the run was started with.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
return runMachTestSuite(kind, {
|
|
21
|
+
engineDir,
|
|
22
|
+
testPaths: normalizedPaths,
|
|
23
|
+
args: extraArgs,
|
|
24
|
+
env,
|
|
25
|
+
fullOutput,
|
|
26
|
+
});
|
|
24
27
|
}
|
|
25
28
|
}
|
|
26
29
|
return result;
|
|
@@ -1,10 +1,36 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* True when `lines` contain a category header (single-line or multi-line
|
|
3
|
-
* banner shape) whose name
|
|
3
|
+
* banner shape) whose name equals `category`. Shared by the pre-add
|
|
4
4
|
* assertion, the banner creation path, and the section finder so all
|
|
5
5
|
* agree on what "exists" means.
|
|
6
6
|
*/
|
|
7
7
|
export declare function categoryHeaderExists(lines: string[], category: string): boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Scans a tokens CSS file for category header comments and returns the
|
|
10
|
+
* category names in document order. Used to enrich the "category not
|
|
11
|
+
* found" error body with concrete alternatives the operator can copy.
|
|
12
|
+
*
|
|
13
|
+
* Mirrors the shapes `findCategorySection` recognises:
|
|
14
|
+
* - Single-line: `/* = Foo = *\/`
|
|
15
|
+
* - Multi-line: `/* =====` opening, `Foo` on any of the next ~5 lines,
|
|
16
|
+
* closing `*\/`.
|
|
17
|
+
*
|
|
18
|
+
* This helper exists as a pure inspector. It never throws on malformed
|
|
19
|
+
* headers and silently skips shapes it cannot parse.
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* Category name declared by the banner starting at `index`, or `undefined`
|
|
23
|
+
* when that line opens no banner.
|
|
24
|
+
*
|
|
25
|
+
* The single reader for both banner shapes, so the inventory walk, the
|
|
26
|
+
* "available categories" error body and the section finder cannot drift on
|
|
27
|
+
* what counts as a header.
|
|
28
|
+
*
|
|
29
|
+
* @param lines - Tokens CSS split into lines
|
|
30
|
+
* @param index - 0-based line index to test
|
|
31
|
+
* @returns The declared category name, or undefined
|
|
32
|
+
*/
|
|
33
|
+
export declare function categoryBannerNameAt(lines: string[], index: number): string | undefined;
|
|
8
34
|
/**
|
|
9
35
|
* Asserts the category banner exists (or that creation was requested).
|
|
10
36
|
* Throws a GeneralError naming the available categories and the
|
|
@@ -23,6 +49,13 @@ export declare function findCategorySection(lines: string[], category: string, t
|
|
|
23
49
|
categoryLine: number;
|
|
24
50
|
sectionEnd: number;
|
|
25
51
|
};
|
|
52
|
+
/** 0-based open/close line indices of the base `:root {` block. */
|
|
53
|
+
export declare function findBaseRootBounds(lines: string[]): {
|
|
54
|
+
open: number;
|
|
55
|
+
close: number;
|
|
56
|
+
} | undefined;
|
|
57
|
+
/** Masks block-comment content per line so declarations inside comments never match. */
|
|
58
|
+
export declare function maskCommentLines(lines: string[]): string[];
|
|
26
59
|
/** Location of an existing base-`:root` token declaration. */
|
|
27
60
|
export interface TokenDeclarationLocation {
|
|
28
61
|
/** 1-based line number in the tokens CSS file. */
|
|
@@ -33,7 +66,7 @@ export interface TokenDeclarationLocation {
|
|
|
33
66
|
/**
|
|
34
67
|
* Finds an existing declaration of `tokenName` inside the base `:root`
|
|
35
68
|
* block. Dark `@media` and `:root[variant]` companion blocks are
|
|
36
|
-
*
|
|
69
|
+
* excluded: they mirror the base declaration, they do not
|
|
37
70
|
* own the token. Comment content never matches, and the name match is
|
|
38
71
|
* exact (`--foo-bar` does not match `--x-foo-bar`).
|
|
39
72
|
*/
|
|
@@ -3,11 +3,12 @@
|
|
|
3
3
|
* Category banner and token-declaration helpers for the tokens CSS file.
|
|
4
4
|
* Split out of `token-manager.ts` to stay inside the per-file line budget.
|
|
5
5
|
*
|
|
6
|
-
* Banner matching is
|
|
6
|
+
* Banner matching is exact: the text between the `=` runs (single-line
|
|
7
7
|
* shape) or on the block line (multi-line shape) must equal the category
|
|
8
|
-
* after trimming.
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* after trimming. With a substring match, a TOC comment or a longer banner
|
|
9
|
+
* whose name merely starts with the category (a canvas colors banner
|
|
10
|
+
* satisfying a lookup for `Colors`) would also match, and `token add` would
|
|
11
|
+
* then write into the wrong section, or no-op, with exit 0.
|
|
11
12
|
*/
|
|
12
13
|
import { join } from 'node:path';
|
|
13
14
|
import { GeneralError } from '../errors/base.js';
|
|
@@ -20,10 +21,10 @@ function multiLineBlockNameMatches(blockLine, category) {
|
|
|
20
21
|
return blockLine.replace(/^\s*\*\s*/, '').trim() === category;
|
|
21
22
|
}
|
|
22
23
|
/**
|
|
23
|
-
* Body of the first `/* … *\/` comment on `line`, or `
|
|
24
|
-
* carries no closed block comment.
|
|
24
|
+
* Body of the first `/* … *\/` comment on `line`, or `undefined` when the
|
|
25
|
+
* line carries no closed block comment.
|
|
25
26
|
*
|
|
26
|
-
*
|
|
27
|
+
* This uses index arithmetic rather than a regex: every regex spelling of
|
|
27
28
|
* "banner comment" this module used to carry was super-linear on a line that
|
|
28
29
|
* repeats the opening shape (CodeQL `js/polynomial-redos`), and `tokens.css`
|
|
29
30
|
* is a file FireForge reads out of a consumer's engine tree, so a
|
|
@@ -32,14 +33,14 @@ function multiLineBlockNameMatches(blockLine, category) {
|
|
|
32
33
|
function blockCommentBody(line) {
|
|
33
34
|
const open = line.indexOf('/*');
|
|
34
35
|
if (open === -1)
|
|
35
|
-
return
|
|
36
|
+
return undefined;
|
|
36
37
|
const close = line.indexOf('*/', open + 2);
|
|
37
38
|
if (close === -1)
|
|
38
|
-
return
|
|
39
|
+
return undefined;
|
|
39
40
|
return line.slice(open + 2, close);
|
|
40
41
|
}
|
|
41
42
|
/**
|
|
42
|
-
* True when `line` carries a single-line banner comment
|
|
43
|
+
* True when `line` carries a single-line banner comment: a closed block
|
|
43
44
|
* comment whose body both opens and closes with `=`. Recognises the decorative
|
|
44
45
|
* all-`=` rule as well as a named `= Foo =` banner, which is what the section
|
|
45
46
|
* scan wants: either shape ends the preceding section.
|
|
@@ -49,14 +50,15 @@ function isSingleLineBannerLine(line) {
|
|
|
49
50
|
return body !== undefined && body.length >= 2 && body.startsWith('=') && body.endsWith('=');
|
|
50
51
|
}
|
|
51
52
|
/**
|
|
52
|
-
* Name declared by a single-line banner (`/* = Foo = *\/` → `Foo`), or
|
|
53
|
-
* when the line is not a named banner. The `=` runs on both sides
|
|
54
|
-
* required
|
|
53
|
+
* Name declared by a single-line banner (`/* = Foo = *\/` → `Foo`), or
|
|
54
|
+
* `undefined` when the line is not a named banner. The `=` runs on both sides
|
|
55
|
+
* are required. A decorative all-`=` rule carries no name and yields
|
|
56
|
+
* `undefined`.
|
|
55
57
|
*/
|
|
56
58
|
function singleLineBannerName(line) {
|
|
57
59
|
const body = blockCommentBody(line);
|
|
58
|
-
if (body ===
|
|
59
|
-
return
|
|
60
|
+
if (body === undefined)
|
|
61
|
+
return undefined;
|
|
60
62
|
let start = 0;
|
|
61
63
|
let end = body.length;
|
|
62
64
|
while (start < end && /\s/.test(body[start] ?? ''))
|
|
@@ -65,27 +67,26 @@ function singleLineBannerName(line) {
|
|
|
65
67
|
while (start < end && body[start] === '=')
|
|
66
68
|
start++;
|
|
67
69
|
if (start === leadingEqStart)
|
|
68
|
-
return
|
|
70
|
+
return undefined;
|
|
69
71
|
while (end > start && /\s/.test(body[end - 1] ?? ''))
|
|
70
72
|
end--;
|
|
71
73
|
const trailingEqEnd = end;
|
|
72
74
|
while (end > start && body[end - 1] === '=')
|
|
73
75
|
end--;
|
|
74
76
|
if (end === trailingEqEnd)
|
|
75
|
-
return
|
|
77
|
+
return undefined;
|
|
76
78
|
const name = body.slice(start, end).trim();
|
|
77
|
-
return name.length > 0 ? name :
|
|
79
|
+
return name.length > 0 ? name : undefined;
|
|
78
80
|
}
|
|
79
81
|
/**
|
|
80
82
|
* True when `lines` contain a category header (single-line or multi-line
|
|
81
|
-
* banner shape) whose name
|
|
83
|
+
* banner shape) whose name equals `category`. Shared by the pre-add
|
|
82
84
|
* assertion, the banner creation path, and the section finder so all
|
|
83
85
|
* agree on what "exists" means.
|
|
84
86
|
*/
|
|
85
87
|
export function categoryHeaderExists(lines, category) {
|
|
86
88
|
const singleLinePattern = singleLineBannerPattern(category);
|
|
87
|
-
for (
|
|
88
|
-
const line = lines[i] ?? '';
|
|
89
|
+
for (const [i, line] of lines.entries()) {
|
|
89
90
|
if (singleLinePattern.test(line)) {
|
|
90
91
|
return true;
|
|
91
92
|
}
|
|
@@ -112,32 +113,47 @@ export function categoryHeaderExists(lines, category) {
|
|
|
112
113
|
* - Multi-line: `/* =====` opening, `Foo` on any of the next ~5 lines,
|
|
113
114
|
* closing `*\/`.
|
|
114
115
|
*
|
|
115
|
-
* This helper exists as a pure inspector
|
|
116
|
+
* This helper exists as a pure inspector. It never throws on malformed
|
|
116
117
|
* headers and silently skips shapes it cannot parse.
|
|
117
118
|
*/
|
|
119
|
+
/**
|
|
120
|
+
* Category name declared by the banner starting at `index`, or `undefined`
|
|
121
|
+
* when that line opens no banner.
|
|
122
|
+
*
|
|
123
|
+
* The single reader for both banner shapes, so the inventory walk, the
|
|
124
|
+
* "available categories" error body and the section finder cannot drift on
|
|
125
|
+
* what counts as a header.
|
|
126
|
+
*
|
|
127
|
+
* @param lines - Tokens CSS split into lines
|
|
128
|
+
* @param index - 0-based line index to test
|
|
129
|
+
* @returns The declared category name, or undefined
|
|
130
|
+
*/
|
|
131
|
+
export function categoryBannerNameAt(lines, index) {
|
|
132
|
+
const line = lines[index] ?? '';
|
|
133
|
+
const extracted = singleLineBannerName(line);
|
|
134
|
+
if (extracted !== undefined)
|
|
135
|
+
return extracted;
|
|
136
|
+
if (/^\s*\/\*\s*=+/.test(line) && !/\*\//.test(line)) {
|
|
137
|
+
for (let j = index + 1; j < Math.min(index + 6, lines.length); j++) {
|
|
138
|
+
const blockLine = lines[j] ?? '';
|
|
139
|
+
if (/\*\//.test(blockLine))
|
|
140
|
+
break;
|
|
141
|
+
const trimmed = blockLine.replace(/^\s*\*\s*/, '').trim();
|
|
142
|
+
if (trimmed.length === 0)
|
|
143
|
+
continue;
|
|
144
|
+
if (/^=+$/.test(trimmed))
|
|
145
|
+
continue;
|
|
146
|
+
return trimmed;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
118
151
|
function discoverCategoryHeaders(lines) {
|
|
119
152
|
const categories = new Set();
|
|
120
153
|
for (let i = 0; i < lines.length; i++) {
|
|
121
|
-
const
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
categories.add(extracted);
|
|
125
|
-
continue;
|
|
126
|
-
}
|
|
127
|
-
if (/^\s*\/\*\s*=+/.test(line) && !/\*\//.test(line)) {
|
|
128
|
-
for (let j = i + 1; j < Math.min(i + 6, lines.length); j++) {
|
|
129
|
-
const blockLine = lines[j] ?? '';
|
|
130
|
-
if (/\*\//.test(blockLine))
|
|
131
|
-
break;
|
|
132
|
-
const trimmed = blockLine.replace(/^\s*\*\s*/, '').trim();
|
|
133
|
-
if (trimmed.length === 0)
|
|
134
|
-
continue;
|
|
135
|
-
if (/^=+$/.test(trimmed))
|
|
136
|
-
continue;
|
|
137
|
-
categories.add(trimmed);
|
|
138
|
-
break;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
154
|
+
const name = categoryBannerNameAt(lines, i);
|
|
155
|
+
if (name !== undefined)
|
|
156
|
+
categories.add(name);
|
|
141
157
|
}
|
|
142
158
|
return [...categories];
|
|
143
159
|
}
|
|
@@ -177,7 +193,7 @@ export async function assertTokenCategoryExists(engineDir, tokensCssPath, catego
|
|
|
177
193
|
*/
|
|
178
194
|
export function declareCategoryBanner(lines, category, tokensCssPath) {
|
|
179
195
|
const bounds = findBaseRootBounds(lines);
|
|
180
|
-
if (bounds ===
|
|
196
|
+
if (bounds === undefined) {
|
|
181
197
|
throw new GeneralError(`Cannot create category "${category}": no :root block found in ${tokensCssPath}. ` +
|
|
182
198
|
'Run "fireforge furnace init --force" to re-scaffold the tokens CSS file.');
|
|
183
199
|
}
|
|
@@ -190,14 +206,13 @@ export function declareCategoryBanner(lines, category, tokensCssPath) {
|
|
|
190
206
|
export function findCategorySection(lines, category, tokensCssPath) {
|
|
191
207
|
const singleLinePattern = singleLineBannerPattern(category);
|
|
192
208
|
let categoryLine = -1;
|
|
193
|
-
for (
|
|
194
|
-
const line = lines[i] ?? '';
|
|
209
|
+
for (const [i, line] of lines.entries()) {
|
|
195
210
|
// Check single-line format: /* = Category = */
|
|
196
211
|
if (singleLinePattern.test(line)) {
|
|
197
212
|
categoryLine = i;
|
|
198
213
|
break;
|
|
199
214
|
}
|
|
200
|
-
// Check multi-line format: line opens a block comment with === but does
|
|
215
|
+
// Check multi-line format: line opens a block comment with === but does not close it
|
|
201
216
|
if (/^\s*\/\*\s*=+/.test(line) && !/\*\//.test(line)) {
|
|
202
217
|
for (let j = i + 1; j < Math.min(i + 6, lines.length); j++) {
|
|
203
218
|
const blockLine = lines[j] ?? '';
|
|
@@ -245,16 +260,10 @@ export function findCategorySection(lines, category, tokensCssPath) {
|
|
|
245
260
|
return { categoryLine, sectionEnd };
|
|
246
261
|
}
|
|
247
262
|
/** 0-based open/close line indices of the base `:root {` block. */
|
|
248
|
-
function findBaseRootBounds(lines) {
|
|
249
|
-
|
|
250
|
-
for (let i = 0; i < lines.length; i++) {
|
|
251
|
-
if (/:root\s*\{/.test(lines[i] ?? '')) {
|
|
252
|
-
open = i;
|
|
253
|
-
break;
|
|
254
|
-
}
|
|
255
|
-
}
|
|
263
|
+
export function findBaseRootBounds(lines) {
|
|
264
|
+
const open = lines.findIndex((line) => /:root\s*\{/.test(line));
|
|
256
265
|
if (open === -1)
|
|
257
|
-
return
|
|
266
|
+
return undefined;
|
|
258
267
|
for (let i = open + 1; i < lines.length; i++) {
|
|
259
268
|
if (/^\s*\}/.test(lines[i] ?? '')) {
|
|
260
269
|
return { open, close: i };
|
|
@@ -263,20 +272,20 @@ function findBaseRootBounds(lines) {
|
|
|
263
272
|
return { open, close: -1 };
|
|
264
273
|
}
|
|
265
274
|
/** Masks block-comment content per line so declarations inside comments never match. */
|
|
266
|
-
function maskCommentLines(lines) {
|
|
275
|
+
export function maskCommentLines(lines) {
|
|
267
276
|
const masked = lines.join('\n').replace(/\/\*[\s\S]*?\*\//g, (m) => m.replace(/[^\n]/g, ' '));
|
|
268
277
|
return masked.split('\n');
|
|
269
278
|
}
|
|
270
279
|
/**
|
|
271
280
|
* Finds an existing declaration of `tokenName` inside the base `:root`
|
|
272
281
|
* block. Dark `@media` and `:root[variant]` companion blocks are
|
|
273
|
-
*
|
|
282
|
+
* excluded: they mirror the base declaration, they do not
|
|
274
283
|
* own the token. Comment content never matches, and the name match is
|
|
275
284
|
* exact (`--foo-bar` does not match `--x-foo-bar`).
|
|
276
285
|
*/
|
|
277
286
|
export function findTokenDeclarationInRoot(lines, tokenName) {
|
|
278
287
|
const bounds = findBaseRootBounds(lines);
|
|
279
|
-
if (bounds ===
|
|
288
|
+
if (bounds === undefined || bounds.close === -1)
|
|
280
289
|
return undefined;
|
|
281
290
|
const masked = maskCommentLines(lines);
|
|
282
291
|
const declPattern = new RegExp(`^\\s*${escapeRegex(tokenName)}\\s*:`);
|
|
@@ -8,16 +8,15 @@ import { loadFurnaceConfig } from './furnace-config.js';
|
|
|
8
8
|
/**
|
|
9
9
|
* Default platform prefixes treated as allowlisted upstream vars. Any
|
|
10
10
|
* `var(--moz-*)` usage in a fork's CSS is a Firefox platform variable the
|
|
11
|
-
* fork does not own and must not count as an unknown
|
|
11
|
+
* fork does not own and must not count as an unknown. Otherwise a
|
|
12
12
|
* `furnace override moz-button -t css-only` plus one fork token reports 1%
|
|
13
13
|
* coverage, because the ~84 upstream `--moz-*` vars in the copied baseline
|
|
14
14
|
* all count against it.
|
|
15
15
|
*
|
|
16
16
|
* Forks that want to opt out can override this via
|
|
17
|
-
* `furnace.json.platformPrefixes = []
|
|
18
|
-
* (e.g. `['--moz-', '--in-content-']`). The config is additive
|
|
19
|
-
* removed from the defaults unless the operator
|
|
20
|
-
* list.
|
|
17
|
+
* `furnace.json.platformPrefixes = []`. Forks that want more can extend it
|
|
18
|
+
* (e.g. `['--moz-', '--in-content-']`). The config is additive: nothing is
|
|
19
|
+
* removed from the defaults unless the operator writes a shorter list.
|
|
21
20
|
*/
|
|
22
21
|
const DEFAULT_PLATFORM_PREFIXES = ['--moz-'];
|
|
23
22
|
/**
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Dark-mode insertion helpers for the tokens CSS scaffold.
|
|
3
3
|
*
|
|
4
4
|
* `fireforge token add --mode override --dark-value ...` must land the dark
|
|
5
|
-
* declaration
|
|
6
|
-
* `@media (prefers-color-scheme: dark)` block
|
|
5
|
+
* declaration inside the nested `:root { }` of the
|
|
6
|
+
* `@media (prefers-color-scheme: dark)` block. Landing after that block has
|
|
7
7
|
* closed produces a declaration outside any rule. The helpers here scan the
|
|
8
8
|
* comment-stripped source lines to find the *inner* `:root` block's closing
|
|
9
9
|
* `}` and return a line index the caller can splice into. When the inner
|
|
@@ -19,28 +19,28 @@
|
|
|
19
19
|
* into the original array at the same index.
|
|
20
20
|
*
|
|
21
21
|
* We blank the comment body with spaces (rather than removing it) so
|
|
22
|
-
* any downstream consumer that indexes by column
|
|
23
|
-
* insertion index as a line number in the original array
|
|
22
|
+
* any downstream consumer that indexes by column (or derives an
|
|
23
|
+
* insertion index as a line number in the original array) still
|
|
24
24
|
* agrees on line numbers.
|
|
25
25
|
*/
|
|
26
26
|
export declare function stripBlockCommentsInLines(lines: string[]): string[];
|
|
27
27
|
/**
|
|
28
28
|
* Finds the closing `}` line of the nested `:root { ... }` block inside
|
|
29
29
|
* a `@media (prefers-color-scheme: dark)` block. Returns `-1` when the
|
|
30
|
-
* media block exists but the nested `:root` block is missing
|
|
30
|
+
* media block exists but the nested `:root` block is missing. Returns
|
|
31
31
|
* `null` when the `@media` block itself is absent.
|
|
32
32
|
*
|
|
33
33
|
* Runs the scan over a comment-stripped mirror of the source lines so
|
|
34
34
|
* braces inside CSS comments (`/* before { after *\/`) do not offset
|
|
35
|
-
* the depth counter. The scan is
|
|
35
|
+
* the depth counter. The scan is line-indexed so callers
|
|
36
36
|
* can splice into the original `lines` array at the returned index.
|
|
37
37
|
*/
|
|
38
38
|
export declare function findDarkRootInsertionIndex(lines: string[]): number | null;
|
|
39
39
|
/**
|
|
40
40
|
* Depth-counts braces from `startLine` (whose lines must already have
|
|
41
41
|
* block comments stripped), returning the index of the line on which the
|
|
42
|
-
* block opened there returns to its entry depth
|
|
43
|
-
* the block's closing `}
|
|
42
|
+
* block opened there returns to its entry depth, i.e. the line carrying
|
|
43
|
+
* the block's closing `}`, or -1 when the block never closes. The first
|
|
44
44
|
* `{` encountered sets the entry depth, so the scan may start on the
|
|
45
45
|
* selector/at-rule line itself rather than on the opener.
|
|
46
46
|
*/
|
|
@@ -48,7 +48,7 @@ export declare function findBlockCloseIndex(stripped: string[], startLine: numbe
|
|
|
48
48
|
/**
|
|
49
49
|
* Finds the closing `}` of the outermost
|
|
50
50
|
* `@media (prefers-color-scheme: dark)` block. Used as the fallback
|
|
51
|
-
* landing site when the scaffold has no nested `:root { }
|
|
51
|
+
* landing site when the scaffold has no nested `:root { }`. The
|
|
52
52
|
* insertion helper uses this index to splice a brand-new `:root`
|
|
53
53
|
* wrapper containing the dark declaration, rather than dropping the
|
|
54
54
|
* value.
|