@zxyycom/vibe-check 0.0.2 → 0.0.3
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/README.md +36 -5
- package/dist/esm/check/check.mjs +4 -0
- package/dist/esm/check/check.mjs.map +1 -1
- package/dist/esm/check/flag-enablement.mjs +32 -0
- package/dist/esm/check/flag-enablement.mjs.map +1 -0
- package/dist/esm/check/handoff-provider-identity.mjs +18 -0
- package/dist/esm/check/handoff-provider-identity.mjs.map +1 -0
- package/dist/esm/check/inherited-collection.mjs +1 -1
- package/dist/esm/check/inherited-collection.mjs.map +1 -1
- package/dist/esm/check/project-changes.mjs +2 -0
- package/dist/esm/check/project-changes.mjs.map +1 -0
- package/dist/esm/check/project-context.mjs +2 -0
- package/dist/esm/check/project-context.mjs.map +1 -0
- package/dist/esm/check-settlement/facts.mjs.map +1 -1
- package/dist/esm/check-settlement/record-store.mjs +1 -1
- package/dist/esm/check-settlement/record-store.mjs.map +1 -1
- package/dist/esm/data-boundary/canonical-data.mjs +36 -7
- package/dist/esm/data-boundary/canonical-data.mjs.map +1 -1
- package/dist/esm/data-boundary/canonical-json.mjs.map +1 -1
- package/dist/esm/data-boundary/closed-values.mjs +28 -4
- package/dist/esm/data-boundary/closed-values.mjs.map +1 -1
- package/dist/esm/{package-checks/project-files → data-boundary}/config-glob.mjs +3 -3
- package/dist/esm/data-boundary/config-glob.mjs.map +1 -0
- package/dist/esm/data-boundary/project-path.mjs +19 -0
- package/dist/esm/data-boundary/project-path.mjs.map +1 -0
- package/dist/esm/index.mjs +12 -5
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/machine-output/v4/atomic-publication.mjs +4 -1
- package/dist/esm/machine-output/v4/atomic-publication.mjs.map +1 -1
- package/dist/esm/package-checks/check-authoring.mjs +69 -0
- package/dist/esm/package-checks/check-authoring.mjs.map +1 -0
- package/dist/esm/package-checks/code-quality-findings/finding-waiver-authoring.mjs.map +1 -1
- package/dist/esm/package-checks/code-quality-findings/finding-waiver-evidence.mjs.map +1 -1
- package/dist/esm/package-checks/command-check/command-check.mjs +55 -0
- package/dist/esm/package-checks/command-check/command-check.mjs.map +1 -0
- package/dist/esm/package-checks/command-check/contract.mjs +2 -0
- package/dist/esm/package-checks/command-check/contract.mjs.map +1 -0
- package/dist/esm/package-checks/command-check/execution.mjs +134 -0
- package/dist/esm/package-checks/command-check/execution.mjs.map +1 -0
- package/dist/esm/package-checks/command-check/options.mjs +284 -0
- package/dist/esm/package-checks/command-check/options.mjs.map +1 -0
- package/dist/esm/package-checks/command-check/transcript.mjs +26 -0
- package/dist/esm/package-checks/command-check/transcript.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/default-check.mjs +9 -11
- package/dist/esm/package-checks/duplicate-detection/default-check.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/execution.mjs +2 -4
- package/dist/esm/package-checks/duplicate-detection/execution.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/finding-messages.mjs +1 -1
- package/dist/esm/package-checks/duplicate-detection/finding-messages.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs +1 -1
- package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/options.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/records.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/constructor.mjs +9 -11
- package/dist/esm/package-checks/file-metrics/constructor.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/execution.mjs +2 -4
- package/dist/esm/package-checks/file-metrics/execution.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/finding-messages.mjs +1 -1
- package/dist/esm/package-checks/file-metrics/finding-messages.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/options.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/records.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/scc/availability.mjs +1 -1
- package/dist/esm/package-checks/file-metrics/scc/availability.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/scc/batch-planner.mjs +38 -0
- package/dist/esm/package-checks/file-metrics/scc/batch-planner.mjs.map +1 -0
- package/dist/esm/package-checks/file-metrics/scc/logical-scan-resources.mjs +35 -0
- package/dist/esm/package-checks/file-metrics/scc/logical-scan-resources.mjs.map +1 -0
- package/dist/esm/package-checks/file-metrics/scc/scanner.mjs +102 -29
- package/dist/esm/package-checks/file-metrics/scc/scanner.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analysis.mjs +7 -2
- package/dist/esm/package-checks/function-metrics/analysis.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/analysis-model.mjs +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/analysis-model.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.mjs +1 -3
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/protocol.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/pipeline.mjs +3 -2
- package/dist/esm/package-checks/function-metrics/analyzer/pipeline.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/readers/erlang.mjs +6 -6
- package/dist/esm/package-checks/function-metrics/analyzer/readers/erlang.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/readers/fortran.mjs +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/readers/fortran.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/readers/objc.mjs +9 -3
- package/dist/esm/package-checks/function-metrics/analyzer/readers/objc.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/readers/php-states.mjs +12 -7
- package/dist/esm/package-checks/function-metrics/analyzer/readers/php-states.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/readers/plsql.mjs +6 -6
- package/dist/esm/package-checks/function-metrics/analyzer/readers/plsql.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/readers/python.mjs +5 -3
- package/dist/esm/package-checks/function-metrics/analyzer/readers/python.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/readers/r.mjs +2 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/r.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/readers/ttcn.mjs +9 -3
- package/dist/esm/package-checks/function-metrics/analyzer/readers/ttcn.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/readers/typescript.mjs +9 -3
- package/dist/esm/package-checks/function-metrics/analyzer/readers/typescript.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/readers/zig.mjs +3 -1
- package/dist/esm/package-checks/function-metrics/analyzer/readers/zig.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/shared/code-reader.mjs +3 -1
- package/dist/esm/package-checks/function-metrics/analyzer/shared/code-reader.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/shared/js-style-regex.mjs +12 -5
- package/dist/esm/package-checks/function-metrics/analyzer/shared/js-style-regex.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer-worker-port.mjs +20 -8
- package/dist/esm/package-checks/function-metrics/analyzer-worker-port.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/constructor.mjs +9 -11
- package/dist/esm/package-checks/function-metrics/constructor.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/execution.mjs +2 -4
- package/dist/esm/package-checks/function-metrics/execution.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/finding-messages.mjs +1 -1
- package/dist/esm/package-checks/function-metrics/finding-messages.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/measurement.mjs +3 -1
- package/dist/esm/package-checks/function-metrics/measurement.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/options.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/records.mjs.map +1 -1
- package/dist/esm/package-checks/host-environment/git.mjs +11 -0
- package/dist/esm/package-checks/host-environment/git.mjs.map +1 -1
- package/dist/esm/package-checks/host-environment/path.mjs +1 -17
- package/dist/esm/package-checks/host-environment/path.mjs.map +1 -1
- package/dist/esm/package-checks/host-environment/process/contract.mjs.map +1 -1
- package/dist/esm/package-checks/host-environment/process/result.mjs +43 -17
- package/dist/esm/package-checks/host-environment/process/result.mjs.map +1 -1
- package/dist/esm/package-checks/host-environment/process/runner.mjs +7 -5
- package/dist/esm/package-checks/host-environment/process/runner.mjs.map +1 -1
- package/dist/esm/package-checks/json-schema-validation/default-check.mjs +9 -11
- package/dist/esm/package-checks/json-schema-validation/default-check.mjs.map +1 -1
- package/dist/esm/package-checks/json-schema-validation/options.mjs.map +1 -1
- package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs +6 -2
- package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs.map +1 -1
- package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs +11 -3
- package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs.map +1 -1
- package/dist/esm/package-checks/json-validation/default-check.mjs +9 -11
- package/dist/esm/package-checks/json-validation/default-check.mjs.map +1 -1
- package/dist/esm/package-checks/json-validation/options.mjs.map +1 -1
- package/dist/esm/package-checks/local-cache-options.mjs +28 -0
- package/dist/esm/package-checks/local-cache-options.mjs.map +1 -0
- package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs +37 -45
- package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs.map +1 -1
- package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs +3 -1
- package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/default-check.mjs +19 -33
- package/dist/esm/package-checks/markdown-link-validation/default-check.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/execution.mjs +1 -1
- package/dist/esm/package-checks/markdown-link-validation/execution.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/finding-messages.mjs +1 -1
- package/dist/esm/package-checks/markdown-link-validation/finding-messages.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs +1 -3
- package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs +3 -18
- package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs +2 -14
- package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/options.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache-payload.mjs +4 -5
- package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache-payload.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-lint/adapter.mjs +125 -0
- package/dist/esm/package-checks/markdown-lint/adapter.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/default-check.mjs +37 -0
- package/dist/esm/package-checks/markdown-lint/default-check.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/execution.mjs +202 -0
- package/dist/esm/package-checks/markdown-lint/execution.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/final-data.mjs +16 -0
- package/dist/esm/package-checks/markdown-lint/final-data.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/finding-messages.mjs +72 -0
- package/dist/esm/package-checks/markdown-lint/finding-messages.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/finding-waiver-identity.mjs +41 -0
- package/dist/esm/package-checks/markdown-lint/finding-waiver-identity.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/findings-cache.mjs +110 -0
- package/dist/esm/package-checks/markdown-lint/findings-cache.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/options-resolution.mjs +74 -0
- package/dist/esm/package-checks/markdown-lint/options-resolution.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/options-validation.mjs +41 -0
- package/dist/esm/package-checks/markdown-lint/options-validation.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/options.mjs +13 -0
- package/dist/esm/package-checks/markdown-lint/options.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/records.mjs +65 -0
- package/dist/esm/package-checks/markdown-lint/records.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/unavailable-reasons.mjs +14 -0
- package/dist/esm/package-checks/markdown-lint/unavailable-reasons.mjs.map +1 -0
- package/dist/esm/package-checks/project-files/collection.mjs +23 -19
- package/dist/esm/package-checks/project-files/collection.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/configuration.mjs +1 -1
- package/dist/esm/package-checks/project-files/configuration.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/gitlink-revision.mjs +2 -5
- package/dist/esm/package-checks/project-files/gitlink-revision.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/gitlink-worktree.mjs +22 -6
- package/dist/esm/package-checks/project-files/gitlink-worktree.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/public-collection.mjs +1 -1
- package/dist/esm/package-checks/project-files/public-collection.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/revision-paths.mjs +3 -3
- package/dist/esm/package-checks/project-files/revision-paths.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/revision-worktree-files.mjs +11 -15
- package/dist/esm/package-checks/project-files/revision-worktree-files.mjs.map +1 -1
- package/dist/esm/package-checks/secret-detection/default-check.mjs +9 -11
- package/dist/esm/package-checks/secret-detection/default-check.mjs.map +1 -1
- package/dist/esm/package-checks/secret-detection/execution.mjs +2 -2
- package/dist/esm/package-checks/secret-detection/execution.mjs.map +1 -1
- package/dist/esm/package-checks/secret-detection/input-preparation.mjs +46 -7
- package/dist/esm/package-checks/secret-detection/input-preparation.mjs.map +1 -1
- package/dist/esm/package-checks/secret-detection/options.mjs.map +1 -1
- package/dist/esm/package-checks/secret-detection/records.mjs.map +1 -1
- package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs +3 -4
- package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs.map +1 -1
- package/dist/esm/package-tools/admission-policy/define-admission-policy.mjs +10 -0
- package/dist/esm/package-tools/admission-policy/define-admission-policy.mjs.map +1 -0
- package/dist/esm/{cache → package-tools/cache}/cache-json-by-key.mjs +13 -14
- package/dist/esm/package-tools/cache/cache-json-by-key.mjs.map +1 -0
- package/dist/esm/package-tools/finding-presentation/finding-presentation.mjs.map +1 -0
- package/dist/esm/{finding-waivers → package-tools/finding-waivers}/reconciliation.mjs +14 -5
- package/dist/esm/package-tools/finding-waivers/reconciliation.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/critical-path-ranking.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/bounded-history.mjs.map +1 -0
- package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/prediction.mjs +2 -2
- package/dist/esm/package-tools/learned-critical-path/duration-model/prediction.mjs.map +1 -0
- package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/preparation.mjs +4 -2
- package/dist/esm/package-tools/learned-critical-path/duration-model/preparation.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/recording.mjs.map +1 -0
- package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/storage.mjs +8 -8
- package/dist/esm/package-tools/learned-critical-path/duration-model/storage.mjs.map +1 -0
- package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/selection-layers.mjs +1 -2
- package/dist/esm/package-tools/learned-critical-path/selection-layers.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/static-decision.mjs.map +1 -0
- package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/strategy.mjs +3 -3
- package/dist/esm/package-tools/learned-critical-path/strategy.mjs.map +1 -0
- package/dist/esm/project-definition/check-tree/authoring.mjs +8 -5
- package/dist/esm/project-definition/check-tree/authoring.mjs.map +1 -1
- package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs +79 -66
- package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs.map +1 -1
- package/dist/esm/project-definition/check-tree/flag-conditions.mjs +71 -0
- package/dist/esm/project-definition/check-tree/flag-conditions.mjs.map +1 -0
- package/dist/esm/project-definition/check-tree/materialization.mjs +13 -8
- package/dist/esm/project-definition/check-tree/materialization.mjs.map +1 -1
- package/dist/esm/project-definition/check-tree/resolution.mjs +7 -6
- package/dist/esm/project-definition/check-tree/resolution.mjs.map +1 -1
- package/dist/esm/project-definition/declarative-snapshot.mjs +2 -1
- package/dist/esm/project-definition/declarative-snapshot.mjs.map +1 -1
- package/dist/esm/project-definition/project-changes.mjs +70 -0
- package/dist/esm/project-definition/project-changes.mjs.map +1 -0
- package/dist/esm/project-definition/project-definition-validation.mjs +40 -8
- package/dist/esm/project-definition/project-definition-validation.mjs.map +1 -1
- package/dist/esm/project-definition/project-definition.mjs +22 -15
- package/dist/esm/project-definition/project-definition.mjs.map +1 -1
- package/dist/esm/project-definition/scheduler-policy.mjs.map +1 -1
- package/dist/esm/project-run/admission-strategy-provider/custom-strategy-preparation.mjs +9 -6
- package/dist/esm/project-run/admission-strategy-provider/custom-strategy-preparation.mjs.map +1 -1
- package/dist/esm/project-run/admission-strategy-provider/prepared-admission-strategy.mjs.map +1 -1
- package/dist/esm/project-run/aggregation.mjs +42 -59
- package/dist/esm/project-run/aggregation.mjs.map +1 -1
- package/dist/esm/project-run/changes/git.mjs +161 -0
- package/dist/esm/project-run/changes/git.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/admitted-check-execution.mjs +41 -0
- package/dist/esm/project-run/check-execution/admitted-check-execution.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/callback.mjs +3 -2
- package/dist/esm/project-run/check-execution/callback.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/dependencies.mjs +80 -5
- package/dist/esm/project-run/check-execution/dependencies.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/execution-finalization.mjs +5 -3
- package/dist/esm/project-run/check-execution/execution-finalization.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/execution-settlement.mjs +37 -16
- package/dist/esm/project-run/check-execution/execution-settlement.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/flag-controls.mjs +15 -7
- package/dist/esm/project-run/check-execution/flag-controls.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/lifecycle.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/{preflight-result.mjs → preparation-result.mjs} +24 -24
- package/dist/esm/project-run/check-execution/preparation-result.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/{preflight.mjs → preparation.mjs} +52 -52
- package/dist/esm/project-run/check-execution/preparation.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/ready-check-execution.mjs +71 -0
- package/dist/esm/project-run/check-execution/ready-check-execution.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/resolved-checks.mjs +27 -164
- package/dist/esm/project-run/check-execution/resolved-checks.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/scheduled-check-run.mjs +79 -0
- package/dist/esm/project-run/check-execution/scheduled-check-run.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/terminal-result.mjs +70 -25
- package/dist/esm/project-run/check-execution/terminal-result.mjs.map +1 -1
- package/dist/esm/project-run/completion/completion.mjs +18 -1
- package/dist/esm/project-run/completion/completion.mjs.map +1 -1
- package/dist/esm/project-run/controls/contract.mjs.map +1 -1
- package/dist/esm/project-run/controls/validation.mjs +7 -54
- package/dist/esm/project-run/controls/validation.mjs.map +1 -1
- package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs +3 -3
- package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs.map +1 -1
- package/dist/esm/project-run/diagnostic-logging/observation-rendering.mjs +1 -1
- package/dist/esm/project-run/diagnostic-logging/observation-rendering.mjs.map +1 -1
- package/dist/esm/project-run/invocation/candidate.mjs +17 -13
- package/dist/esm/project-run/invocation/candidate.mjs.map +1 -1
- package/dist/esm/project-run/invocation/candidates.mjs +26 -0
- package/dist/esm/project-run/invocation/candidates.mjs.map +1 -0
- package/dist/esm/project-run/invocation/creation.mjs +7 -3
- package/dist/esm/project-run/invocation/creation.mjs.map +1 -1
- package/dist/esm/project-run/invocation/execution.mjs +98 -0
- package/dist/esm/project-run/invocation/execution.mjs.map +1 -0
- package/dist/esm/project-run/invocation/run.mjs +13 -112
- package/dist/esm/project-run/invocation/run.mjs.map +1 -1
- package/dist/esm/project-run/invocation/scheduler.mjs +13 -6
- package/dist/esm/project-run/invocation/scheduler.mjs.map +1 -1
- package/dist/esm/project-run/outputs/status.mjs +12 -12
- package/dist/esm/project-run/outputs/status.mjs.map +1 -1
- package/dist/esm/project-run/progress-rendering/presentation.mjs +31 -11
- package/dist/esm/project-run/progress-rendering/presentation.mjs.map +1 -1
- package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs +11 -4
- package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs.map +1 -1
- package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs +20 -6
- package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs.map +1 -1
- package/dist/esm/project-run/progress-rendering/renderer.mjs +6 -2
- package/dist/esm/project-run/progress-rendering/renderer.mjs.map +1 -1
- package/dist/esm/project-run/project-context.mjs +2 -1
- package/dist/esm/project-run/project-context.mjs.map +1 -1
- package/dist/esm/project-run/result.mjs +2 -2
- package/dist/esm/project-run/result.mjs.map +1 -1
- package/dist/esm/project-run/run.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph-lookup.mjs +45 -0
- package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph-lookup.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph.mjs +9 -4
- package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/admission-core/selection-query.mjs +3 -5
- package/dist/esm/project-run/task-scheduler/admission-core/selection-query.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/admission-core/selection-seed.mjs +25 -8
- package/dist/esm/project-run/task-scheduler/admission-core/selection-seed.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/admission-core/selection-transition.mjs +8 -8
- package/dist/esm/project-run/task-scheduler/admission-core/selection-transition.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/execution-state.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/measurement/diagnostics.mjs +8 -4
- package/dist/esm/project-run/task-scheduler/measurement/diagnostics.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/measurement/timing.mjs +12 -6
- package/dist/esm/project-run/task-scheduler/measurement/timing.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/scheduler-observation.mjs +3 -1
- package/dist/esm/project-run/task-scheduler/scheduler-observation.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/scheduler-terminal-measurement.mjs +17 -17
- package/dist/esm/project-run/task-scheduler/scheduler-terminal-measurement.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/scheduler.mjs +18 -6
- package/dist/esm/project-run/task-scheduler/scheduler.mjs.map +1 -1
- package/docs/api-mechanics.md +147 -28
- package/docs/changelog.md +145 -2
- package/docs/checks/duplicate-detection.md +22 -3
- package/docs/checks/file-metrics.md +25 -6
- package/docs/checks/function-metrics.md +21 -2
- package/docs/checks/json-schema-validation.md +25 -4
- package/docs/checks/json-validation.md +24 -5
- package/docs/checks/maintenance-reminders.md +30 -6
- package/docs/checks/markdown-link-validation.md +24 -4
- package/docs/checks/markdown-lint.md +167 -0
- package/docs/checks/secret-detection.md +31 -7
- package/docs/examples/artifacts/mixed-outcomes/definition.ts +10 -10
- package/docs/guides/building-project-gate.md +706 -0
- package/docs/guides/callbacks.md +81 -22
- package/docs/guides/check-dependencies.md +41 -10
- package/docs/guides/collecting-project-files.md +7 -7
- package/docs/guides/command-check.md +155 -0
- package/docs/guides/data-boundaries.md +140 -0
- package/docs/guides/extending-check-lifecycle.md +77 -25
- package/docs/guides/finding-waivers.md +43 -1
- package/docs/guides/learned-scheduling.md +1 -1
- package/docs/guides/run-outputs.md +35 -9
- package/docs/guides/scheduling.md +15 -15
- package/docs/output.md +6 -5
- package/package.json +2 -1
- package/src/check/check.ts +332 -92
- package/src/check/flag-enablement.ts +76 -0
- package/src/check/handoff-provider-identity.ts +34 -0
- package/src/check/inherited-collection.ts +1 -1
- package/src/check/project-changes.ts +14 -0
- package/src/check/project-context.ts +11 -0
- package/src/check-settlement/facts.ts +1 -1
- package/src/check-settlement/record-store.ts +1 -1
- package/src/data-boundary/canonical-data.ts +36 -9
- package/src/data-boundary/canonical-json.ts +18 -1
- package/src/data-boundary/closed-values.ts +26 -6
- package/src/data-boundary/config-glob.ts +17 -0
- package/src/data-boundary/project-path.ts +21 -0
- package/src/index.ts +72 -11
- package/src/machine-output/v4/atomic-publication.ts +3 -1
- package/src/package-checks/check-authoring.ts +136 -0
- package/src/package-checks/code-quality-findings/finding-waiver-authoring.ts +1 -1
- package/src/package-checks/code-quality-findings/finding-waiver-evidence.ts +1 -1
- package/src/package-checks/command-check/command-check.ts +152 -0
- package/src/package-checks/command-check/contract.ts +168 -0
- package/src/package-checks/command-check/execution.ts +211 -0
- package/src/package-checks/command-check/options.ts +331 -0
- package/src/package-checks/command-check/transcript.ts +35 -0
- package/src/package-checks/duplicate-detection/default-check.ts +37 -6
- package/src/package-checks/duplicate-detection/execution.ts +2 -4
- package/src/package-checks/duplicate-detection/finding-messages.ts +2 -2
- package/src/package-checks/duplicate-detection/jscpd/availability.ts +1 -1
- package/src/package-checks/duplicate-detection/options.ts +6 -3
- package/src/package-checks/duplicate-detection/records.ts +1 -1
- package/src/package-checks/file-metrics/constructor.ts +29 -6
- package/src/package-checks/file-metrics/execution.ts +2 -4
- package/src/package-checks/file-metrics/finding-messages.ts +1 -1
- package/src/package-checks/file-metrics/options.ts +6 -3
- package/src/package-checks/file-metrics/records.ts +1 -1
- package/src/package-checks/file-metrics/scc/availability.ts +1 -1
- package/src/package-checks/file-metrics/scc/batch-planner.ts +56 -0
- package/src/package-checks/file-metrics/scc/logical-scan-resources.ts +59 -0
- package/src/package-checks/file-metrics/scc/scanner.ts +134 -32
- package/src/package-checks/function-metrics/analysis.ts +7 -2
- package/src/package-checks/function-metrics/analyzer/analysis-model.ts +1 -1
- package/src/package-checks/function-metrics/analyzer/extension-output.ts +14 -6
- package/src/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.ts +1 -3
- package/src/package-checks/function-metrics/analyzer/extensions/protocol.ts +3 -3
- package/src/package-checks/function-metrics/analyzer/pipeline.ts +4 -2
- package/src/package-checks/function-metrics/analyzer/readers/erlang.ts +6 -6
- package/src/package-checks/function-metrics/analyzer/readers/fortran.ts +1 -1
- package/src/package-checks/function-metrics/analyzer/readers/objc.ts +9 -3
- package/src/package-checks/function-metrics/analyzer/readers/php-states.ts +14 -7
- package/src/package-checks/function-metrics/analyzer/readers/plsql.ts +8 -4
- package/src/package-checks/function-metrics/analyzer/readers/python.ts +4 -3
- package/src/package-checks/function-metrics/analyzer/readers/r.ts +2 -1
- package/src/package-checks/function-metrics/analyzer/readers/ttcn.ts +9 -3
- package/src/package-checks/function-metrics/analyzer/readers/typescript.ts +9 -3
- package/src/package-checks/function-metrics/analyzer/readers/zig.ts +2 -1
- package/src/package-checks/function-metrics/analyzer/shared/code-reader.ts +3 -1
- package/src/package-checks/function-metrics/analyzer/shared/js-style-regex.ts +10 -5
- package/src/package-checks/function-metrics/analyzer-worker-port.ts +20 -6
- package/src/package-checks/function-metrics/constructor.ts +30 -7
- package/src/package-checks/function-metrics/execution.ts +2 -4
- package/src/package-checks/function-metrics/finding-messages.ts +2 -2
- package/src/package-checks/function-metrics/measurement.ts +3 -1
- package/src/package-checks/function-metrics/options.ts +6 -3
- package/src/package-checks/function-metrics/records.ts +1 -1
- package/src/package-checks/host-environment/git.ts +11 -0
- package/src/package-checks/host-environment/path.ts +1 -20
- package/src/package-checks/host-environment/process/contract.ts +17 -9
- package/src/package-checks/host-environment/process/result.ts +48 -20
- package/src/package-checks/host-environment/process/runner.ts +8 -4
- package/src/package-checks/json-schema-validation/default-check.ts +38 -5
- package/src/package-checks/json-schema-validation/options.ts +4 -1
- package/src/package-checks/json-schema-validation/reference-resolver.ts +6 -2
- package/src/package-checks/json-schema-validation/schema-policy.ts +10 -5
- package/src/package-checks/json-validation/default-check.ts +27 -6
- package/src/package-checks/json-validation/options.ts +4 -1
- package/src/package-checks/local-cache-options.ts +40 -0
- package/src/package-checks/maintenance-reminders/maintenance-reminders.ts +89 -9
- package/src/package-checks/maintenance-reminders/maintenance-support.ts +3 -3
- package/src/package-checks/markdown-link-validation/default-check.ts +48 -5
- package/src/package-checks/markdown-link-validation/execution.ts +1 -1
- package/src/package-checks/markdown-link-validation/finding-messages.ts +1 -1
- package/src/package-checks/markdown-link-validation/markdown-parser.ts +1 -5
- package/src/package-checks/markdown-link-validation/options-resolution.ts +2 -19
- package/src/package-checks/markdown-link-validation/options-validation.ts +2 -17
- package/src/package-checks/markdown-link-validation/options.ts +6 -7
- package/src/package-checks/markdown-link-validation/parse-facts-cache-payload.ts +4 -5
- package/src/package-checks/markdown-lint/adapter.ts +167 -0
- package/src/package-checks/markdown-lint/default-check.ts +92 -0
- package/src/package-checks/markdown-lint/execution.ts +266 -0
- package/src/package-checks/markdown-lint/final-data.ts +33 -0
- package/src/package-checks/markdown-lint/finding-messages.ts +87 -0
- package/src/package-checks/markdown-lint/finding-waiver-identity.ts +54 -0
- package/src/package-checks/markdown-lint/findings-cache.ts +141 -0
- package/src/package-checks/markdown-lint/options-resolution.ts +102 -0
- package/src/package-checks/markdown-lint/options-validation.ts +50 -0
- package/src/package-checks/markdown-lint/options.ts +82 -0
- package/src/package-checks/markdown-lint/records.ts +132 -0
- package/src/package-checks/markdown-lint/unavailable-reasons.ts +33 -0
- package/src/package-checks/project-files/collection.ts +38 -22
- package/src/package-checks/project-files/config-glob.ts +1 -17
- package/src/package-checks/project-files/configuration.ts +1 -1
- package/src/package-checks/project-files/gitlink-revision.ts +4 -6
- package/src/package-checks/project-files/gitlink-worktree.ts +35 -7
- package/src/package-checks/project-files/public-collection.ts +1 -1
- package/src/package-checks/project-files/revision-paths.ts +3 -3
- package/src/package-checks/project-files/revision-worktree-files.ts +16 -16
- package/src/package-checks/secret-detection/default-check.ts +29 -6
- package/src/package-checks/secret-detection/execution.ts +2 -2
- package/src/package-checks/secret-detection/input-preparation.ts +64 -7
- package/src/package-checks/secret-detection/options.ts +5 -2
- package/src/package-checks/secret-detection/records.ts +1 -1
- package/src/package-checks/secret-detection/secretlint/adapter.ts +3 -4
- package/src/package-tools/admission-policy/define-admission-policy.ts +54 -0
- package/src/{cache → package-tools/cache}/cache-json-by-key.ts +13 -17
- package/src/{check → package-tools/finding-presentation}/finding-presentation.ts +3 -1
- package/src/{finding-waivers → package-tools/finding-waivers}/reconciliation.ts +16 -8
- package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/prediction.ts +5 -2
- package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/preparation.ts +5 -3
- package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/recording.ts +5 -4
- package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/storage.ts +9 -10
- package/src/{learned-critical-path → package-tools/learned-critical-path}/selection-layers.ts +2 -3
- package/src/{learned-critical-path → package-tools/learned-critical-path}/static-decision.ts +1 -1
- package/src/{learned-critical-path → package-tools/learned-critical-path}/strategy.ts +7 -4
- package/src/project-definition/check-tree/authoring.ts +15 -8
- package/src/project-definition/check-tree/check-fields-authoring.ts +106 -91
- package/src/project-definition/check-tree/flag-conditions.ts +99 -0
- package/src/project-definition/check-tree/materialization.ts +12 -8
- package/src/project-definition/check-tree/resolution.ts +13 -15
- package/src/project-definition/declarative-snapshot.ts +9 -2
- package/src/project-definition/project-changes.ts +112 -0
- package/src/project-definition/project-definition-validation.ts +58 -10
- package/src/project-definition/project-definition.ts +41 -68
- package/src/project-definition/scheduler-policy.ts +6 -3
- package/src/project-run/admission-strategy-provider/custom-strategy-preparation.ts +11 -8
- package/src/project-run/admission-strategy-provider/prepared-admission-strategy.ts +2 -2
- package/src/project-run/aggregation.ts +51 -74
- package/src/project-run/changes/git.ts +206 -0
- package/src/project-run/check-execution/admitted-check-execution.ts +62 -0
- package/src/project-run/check-execution/callback.ts +3 -2
- package/src/project-run/check-execution/dependencies.ts +120 -6
- package/src/project-run/check-execution/execution-finalization.ts +6 -4
- package/src/project-run/check-execution/execution-settlement.ts +88 -29
- package/src/project-run/check-execution/flag-controls.ts +22 -8
- package/src/project-run/check-execution/lifecycle.ts +14 -6
- package/src/project-run/check-execution/{preflight-result.ts → preparation-result.ts} +34 -32
- package/src/project-run/check-execution/{preflight.ts → preparation.ts} +92 -84
- package/src/project-run/check-execution/ready-check-execution.ts +97 -0
- package/src/project-run/check-execution/resolved-checks.ts +40 -219
- package/src/project-run/check-execution/scheduled-check-run.ts +119 -0
- package/src/project-run/check-execution/terminal-result.ts +108 -29
- package/src/project-run/completion/completion.ts +17 -3
- package/src/project-run/controls/contract.ts +6 -16
- package/src/project-run/controls/validation.ts +7 -60
- package/src/project-run/diagnostic-logging/diagnostic-detail-rendering.ts +1 -2
- package/src/project-run/diagnostic-logging/observation-rendering.ts +1 -1
- package/src/project-run/invocation/candidate.ts +28 -15
- package/src/project-run/invocation/candidates.ts +56 -0
- package/src/project-run/invocation/creation.ts +7 -3
- package/src/project-run/invocation/execution.ts +136 -0
- package/src/project-run/invocation/run.ts +15 -179
- package/src/project-run/invocation/scheduler.ts +13 -6
- package/src/project-run/outputs/status.ts +15 -15
- package/src/project-run/progress-rendering/presentation.ts +35 -13
- package/src/project-run/progress-rendering/renderer-formatting.ts +20 -7
- package/src/project-run/progress-rendering/renderer-lifecycle.ts +23 -6
- package/src/project-run/progress-rendering/renderer.ts +10 -4
- package/src/project-run/project-context.ts +8 -4
- package/src/project-run/result.ts +5 -5
- package/src/project-run/run.ts +1 -1
- package/src/project-run/task-scheduler/admission-core/compiled-graph-lookup.ts +71 -0
- package/src/project-run/task-scheduler/admission-core/compiled-graph.ts +9 -4
- package/src/project-run/task-scheduler/admission-core/selection-query.ts +6 -4
- package/src/project-run/task-scheduler/admission-core/selection-seed.ts +36 -6
- package/src/project-run/task-scheduler/admission-core/selection-transition.ts +17 -8
- package/src/project-run/task-scheduler/execution-state.ts +4 -4
- package/src/project-run/task-scheduler/measurement/diagnostics.ts +10 -4
- package/src/project-run/task-scheduler/measurement/timing.ts +13 -5
- package/src/project-run/task-scheduler/scheduler-observation.ts +3 -1
- package/src/project-run/task-scheduler/scheduler-terminal-measurement.ts +24 -22
- package/src/project-run/task-scheduler/scheduler.ts +23 -6
- package/types/check/check.d.ts +178 -67
- package/types/check/flag-enablement.d.ts +42 -0
- package/types/check/handoff-provider-identity.d.ts +12 -0
- package/types/check/project-changes.d.ts +13 -0
- package/types/check/project-context.d.ts +10 -0
- package/types/check-settlement/facts.d.ts +1 -1
- package/types/data-boundary/canonical-data.d.ts +28 -5
- package/types/data-boundary/canonical-json.d.ts +18 -1
- package/types/data-boundary/closed-values.d.ts +17 -1
- package/types/data-boundary/config-glob.d.ts +5 -0
- package/types/data-boundary/project-path.d.ts +4 -0
- package/types/index.d.ts +27 -11
- package/types/package-checks/check-authoring.d.ts +45 -0
- package/types/package-checks/code-quality-findings/finding-waiver-authoring.d.ts +1 -1
- package/types/package-checks/code-quality-findings/finding-waiver-evidence.d.ts +1 -1
- package/types/package-checks/command-check/command-check.d.ts +48 -0
- package/types/package-checks/command-check/contract.d.ts +108 -0
- package/types/package-checks/command-check/execution.d.ts +7 -0
- package/types/package-checks/command-check/options.d.ts +11 -0
- package/types/package-checks/command-check/transcript.d.ts +8 -0
- package/types/package-checks/duplicate-detection/default-check.d.ts +5 -2
- package/types/package-checks/duplicate-detection/finding-messages.d.ts +1 -1
- package/types/package-checks/duplicate-detection/options.d.ts +4 -3
- package/types/package-checks/duplicate-detection/records.d.ts +1 -1
- package/types/package-checks/file-metrics/constructor.d.ts +5 -2
- package/types/package-checks/file-metrics/options.d.ts +4 -3
- package/types/package-checks/file-metrics/records.d.ts +1 -1
- package/types/package-checks/file-metrics/scc/batch-planner.d.ts +18 -0
- package/types/package-checks/file-metrics/scc/logical-scan-resources.d.ts +14 -0
- package/types/package-checks/function-metrics/analyzer/extensions/protocol.d.ts +3 -3
- package/types/package-checks/function-metrics/constructor.d.ts +5 -2
- package/types/package-checks/function-metrics/finding-messages.d.ts +1 -1
- package/types/package-checks/function-metrics/options.d.ts +4 -3
- package/types/package-checks/function-metrics/records.d.ts +1 -1
- package/types/package-checks/host-environment/git.d.ts +2 -0
- package/types/package-checks/host-environment/path.d.ts +1 -3
- package/types/package-checks/host-environment/process/contract.d.ts +17 -9
- package/types/package-checks/json-schema-validation/default-check.d.ts +4 -1
- package/types/package-checks/json-schema-validation/options.d.ts +2 -1
- package/types/package-checks/json-validation/default-check.d.ts +4 -1
- package/types/package-checks/json-validation/options.d.ts +2 -1
- package/types/package-checks/local-cache-options.d.ts +9 -0
- package/types/package-checks/maintenance-reminders/maintenance-reminders.d.ts +11 -2
- package/types/package-checks/markdown-link-validation/default-check.d.ts +4 -1
- package/types/package-checks/markdown-link-validation/options.d.ts +4 -7
- package/types/package-checks/markdown-lint/adapter.d.ts +10 -0
- package/types/package-checks/markdown-lint/default-check.d.ts +37 -0
- package/types/package-checks/markdown-lint/execution.d.ts +24 -0
- package/types/package-checks/markdown-lint/final-data.d.ts +8 -0
- package/types/package-checks/markdown-lint/finding-messages.d.ts +6 -0
- package/types/package-checks/markdown-lint/finding-waiver-identity.d.ts +3 -0
- package/types/package-checks/markdown-lint/findings-cache.d.ts +17 -0
- package/types/package-checks/markdown-lint/options-resolution.d.ts +3 -0
- package/types/package-checks/markdown-lint/options-validation.d.ts +2 -0
- package/types/package-checks/markdown-lint/options.d.ts +65 -0
- package/types/package-checks/markdown-lint/records.d.ts +39 -0
- package/types/package-checks/markdown-lint/unavailable-reasons.d.ts +3 -0
- package/types/package-checks/secret-detection/default-check.d.ts +4 -1
- package/types/package-checks/secret-detection/options.d.ts +3 -2
- package/types/package-tools/admission-policy/define-admission-policy.d.ts +26 -0
- package/types/{check → package-tools/finding-presentation}/finding-presentation.d.ts +3 -1
- package/types/{finding-waivers → package-tools/finding-waivers}/reconciliation.d.ts +3 -3
- package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/prediction.d.ts +2 -2
- package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/preparation.d.ts +1 -1
- package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/recording.d.ts +1 -1
- package/types/{learned-critical-path → package-tools/learned-critical-path}/selection-layers.d.ts +1 -1
- package/types/{learned-critical-path → package-tools/learned-critical-path}/static-decision.d.ts +1 -1
- package/types/{learned-critical-path → package-tools/learned-critical-path}/strategy.d.ts +1 -1
- package/types/project-definition/check-tree/authoring.d.ts +5 -3
- package/types/project-definition/check-tree/check-fields-authoring.d.ts +12 -7
- package/types/project-definition/check-tree/flag-conditions.d.ts +5 -0
- package/types/project-definition/check-tree/resolution.d.ts +6 -4
- package/types/project-definition/declarative-snapshot.d.ts +4 -1
- package/types/project-definition/project-changes.d.ts +30 -0
- package/types/project-definition/project-definition.d.ts +15 -30
- package/types/project-definition/scheduler-policy.d.ts +3 -3
- package/types/project-run/admission-strategy-provider/prepared-admission-strategy.d.ts +2 -2
- package/types/project-run/aggregation.d.ts +8 -6
- package/types/project-run/changes/git.d.ts +14 -0
- package/types/project-run/check-execution/admitted-check-execution.d.ts +18 -0
- package/types/project-run/check-execution/dependencies.d.ts +3 -0
- package/types/project-run/check-execution/execution-finalization.d.ts +1 -1
- package/types/project-run/check-execution/execution-settlement.d.ts +15 -7
- package/types/project-run/check-execution/flag-controls.d.ts +1 -1
- package/types/project-run/check-execution/lifecycle.d.ts +9 -5
- package/types/project-run/check-execution/{preflight-result.d.ts → preparation-result.d.ts} +3 -3
- package/types/project-run/check-execution/{preflight.d.ts → preparation.d.ts} +10 -9
- package/types/project-run/check-execution/ready-check-execution.d.ts +18 -0
- package/types/project-run/check-execution/resolved-checks.d.ts +12 -13
- package/types/project-run/check-execution/scheduled-check-run.d.ts +10 -0
- package/types/project-run/check-execution/terminal-result.d.ts +13 -1
- package/types/project-run/completion/completion.d.ts +3 -1
- package/types/project-run/controls/contract.d.ts +6 -16
- package/types/project-run/invocation/candidates.d.ts +8 -0
- package/types/project-run/invocation/execution.d.ts +5 -0
- package/types/project-run/invocation/run.d.ts +2 -2
- package/types/project-run/outputs/status.d.ts +4 -4
- package/types/project-run/progress-rendering/presentation.d.ts +4 -3
- package/types/project-run/progress-rendering/renderer-formatting.d.ts +5 -2
- package/types/project-run/progress-rendering/renderer-lifecycle.d.ts +2 -0
- package/types/project-run/progress-rendering/renderer.d.ts +4 -2
- package/types/project-run/project-context.d.ts +3 -3
- package/types/project-run/result.d.ts +3 -3
- package/types/project-run/run.d.ts +1 -1
- package/types/project-run/task-scheduler/admission-core/compiled-graph-lookup.d.ts +10 -0
- package/types/project-run/task-scheduler/execution-state.d.ts +4 -4
- package/types/project-run/task-scheduler/measurement/diagnostics.d.ts +2 -2
- package/types/project-run/task-scheduler/scheduler-terminal-measurement.d.ts +1 -1
- package/dist/esm/cache/cache-json-by-key.mjs.map +0 -1
- package/dist/esm/check/finding-presentation.mjs.map +0 -1
- package/dist/esm/finding-waivers/reconciliation.mjs.map +0 -1
- package/dist/esm/learned-critical-path/duration-model/bounded-history.mjs.map +0 -1
- package/dist/esm/learned-critical-path/duration-model/prediction.mjs.map +0 -1
- package/dist/esm/learned-critical-path/duration-model/preparation.mjs.map +0 -1
- package/dist/esm/learned-critical-path/duration-model/recording.mjs.map +0 -1
- package/dist/esm/learned-critical-path/duration-model/storage.mjs.map +0 -1
- package/dist/esm/learned-critical-path/selection-layers.mjs.map +0 -1
- package/dist/esm/learned-critical-path/static-decision.mjs.map +0 -1
- package/dist/esm/learned-critical-path/strategy.mjs.map +0 -1
- package/dist/esm/package-checks/project-files/config-glob.mjs.map +0 -1
- package/dist/esm/project-run/check-execution/preflight-result.mjs.map +0 -1
- package/dist/esm/project-run/check-execution/preflight.mjs.map +0 -1
- package/dist/esm/project-run/task-scheduler/critical-path-ranking.mjs.map +0 -1
- package/types/package-checks/project-files/config-glob.d.ts +0 -5
- /package/dist/esm/{check → package-tools/finding-presentation}/finding-presentation.mjs +0 -0
- /package/dist/esm/{project-run/task-scheduler → package-tools/learned-critical-path}/critical-path-ranking.mjs +0 -0
- /package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/bounded-history.mjs +0 -0
- /package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/recording.mjs +0 -0
- /package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/static-decision.mjs +0 -0
- /package/src/{project-run/task-scheduler → package-tools/learned-critical-path}/critical-path-ranking.ts +0 -0
- /package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/bounded-history.ts +0 -0
- /package/types/{cache → package-tools/cache}/cache-json-by-key.d.ts +0 -0
- /package/types/{project-run/task-scheduler → package-tools/learned-critical-path}/critical-path-ranking.d.ts +0 -0
- /package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/bounded-history.d.ts +0 -0
- /package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/storage.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typescript.mjs","sourceRoot":"","sources":["../../../../../../src/package-checks/function-metrics/analyzer/readers/typescript.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Derived from terryyin/lizard 1.24.0.\n * Source: lizard_languages/typescript.py.\n * Upstream revision: 308b1c3efd8c1c69bcc3eb82deeaec64fd3662ec.\n * SPDX-License-Identifier: MIT\n * Modified: translated to the product-owned TypeScript analyzer.\n */\n\nimport type { FileInfoBuilder } from \"../analysis-context.ts\";\nimport { CodeReader, CodeStateMachine, type TokenFactory } from \"../shared/code-reader.ts\";\nimport { js_style_regex_expression } from \"../shared/js-style-regex.ts\";\n\nconst _TS_TYPE_KEYWORDS = new Set([\n \"string\",\n \"number\",\n \"boolean\",\n \"void\",\n \"any\",\n \"object\",\n \"unknown\",\n \"never\"\n]);\n\nexport class TypeScriptReader extends CodeReader {\n public static override ext = [\"ts\"];\n public static override languageNames = [\"typescript\", \"ts\"];\n public static override controlFlowKeywords = new Set([\"if\", \"elseif\", \"for\", \"while\", \"catch\"]);\n public static override logicalOperators = new Set([\"&&\", \"||\"]);\n public static override caseKeywords = new Set([\"case\"]);\n public static override ternaryOperators = new Set([\"?\"]);\n\n public constructor(context: FileInfoBuilder) {\n super(context);\n this.parallelStates = [new TypeScriptStates(context)];\n }\n\n public static override generateTokens = js_style_regex_expression(function* (\n sourceCode: string,\n addition = \"\",\n tokenFactory?: TokenFactory\n ): Generator<string> {\n function* splitTemplateLiteral(token: string): Generator<string> {\n let content = token.slice(1, -1);\n yield \"`\";\n if (!content.includes(\"${\")) {\n if (content) yield `\\`${content}\\``;\n yield \"`\";\n return;\n }\n\n let index = 0;\n while (index < content.length) {\n const expressionIndex = content.indexOf(\"${\", index);\n if (expressionIndex === -1) {\n if (index < content.length) yield `\\`${content.slice(index)}\\``;\n break;\n }\n if (expressionIndex > index) yield `\\`${content.slice(index, expressionIndex)}\\``;\n yield \"${\";\n index = expressionIndex + 2;\n const expressionStart = index;\n let braceCount = 1;\n while (index < content.length && braceCount > 0) {\n if (content[index] === \"{\") braceCount += 1;\n else if (content[index] === \"}\") braceCount -= 1;\n index += 1;\n }\n if (braceCount > 0) {\n yield token;\n return;\n }\n yield content.slice(expressionStart, index - 1);\n yield \"}\";\n content = content.slice(index);\n index = 0;\n }\n yield \"`\";\n }\n\n const typeScriptAddition = `${addition}|(?:#\\\\w+)|(?:\\\\$\\\\w+)|(?:\\\\w+\\\\?)|\\`.*?\\``;\n for (const token of CodeReader.generateTokens(sourceCode, typeScriptAddition, tokenFactory)) {\n if (token.startsWith(\"`\") && token.endsWith(\"`\") && token.length > 1) {\n yield* splitTemplateLiteral(token);\n } else {\n yield token;\n }\n }\n });\n\n public override get_comment_from_token(token: string): string | undefined {\n if (token.startsWith(\"//\")) return token.slice(2);\n if (token.startsWith(\"/*\") && token.endsWith(\"*/\")) return token.slice(2, -2);\n return undefined;\n }\n}\n\n/** Source-aligned tokenizer base shared with the TSX reader. */\nexport class Tokenizer {\n public sub_tokenizer: Tokenizer | undefined;\n public _ended: boolean;\n\n public constructor() {\n this.sub_tokenizer = undefined;\n this._ended = false;\n }\n\n public *__call__(token: string): Generator<string> {\n if (this.sub_tokenizer) {\n yield* this.sub_tokenizer.__call__(token);\n if (this.sub_tokenizer._ended) this.sub_tokenizer = undefined;\n return;\n }\n yield* this.process_token(token);\n }\n\n public stop(): void {\n this._ended = true;\n }\n\n public *process_token(_token: string): Generator<string> {}\n}\n\n/** Source-aligned JavaScript brace tokenizer used by TSX embedded expressions. */\nexport class JSTokenizer extends Tokenizer {\n private depth: number;\n\n public constructor() {\n super();\n this.depth = 1;\n }\n\n public override *process_token(token: string): Generator<string> {\n if (token === \"{\") this.depth += 1;\n else if (token === \"}\") {\n this.depth -= 1;\n if (this.depth === 0) {\n this.stop();\n return;\n }\n }\n yield token;\n }\n}\n\nclass TypeScriptStates extends CodeStateMachine {\n private last_tokens = \"\";\n private function_name = \"\";\n private started_function = false;\n private as_object = false;\n private _getter_setter_prefix: \"get\" | \"set\" | undefined;\n private _ts_declare = false;\n private _static_seen = false;\n private _async_seen = false;\n private _prev_token = \"\";\n private _in_prop_value = false;\n private _in_abstract_context = false;\n private _generic_depth_in_dec = 0;\n\n public constructor(context: FileInfoBuilder) {\n super(context);\n }\n\n public override statemachine_before_return(): void {\n this._pop_function_from_stack();\n }\n\n public override _state_global(token: string): void {\n if (token === \"declare\") {\n this._ts_declare = true;\n return;\n }\n if (token === \"function\" && this._ts_declare) {\n this._ts_declare = false;\n this.next(this.skipDeclaredFunction);\n return;\n }\n this._ts_declare = false;\n\n if (token === \"type\" && !this.as_object) {\n let phase = 0;\n let braceCount = 0;\n let genericDepth = 0;\n const handleTypeAlias = (nextToken: string): boolean => {\n if (phase === 0) {\n if (/\\p{L}/u.test(nextToken[0] ?? \"\")) phase = 1;\n else {\n this.last_tokens = \"type\";\n this.next(this.globalState, nextToken);\n return true;\n }\n } else if (phase === 1) {\n if (nextToken === \"<\") {\n genericDepth = 1;\n phase = 3;\n } else if (nextToken === \"=\") phase = 2;\n else if (nextToken === \";\") {\n this.next(this.globalState);\n return true;\n }\n } else if (phase === 2) {\n if (nextToken === \"{\") {\n braceCount = 1;\n phase = 4;\n } else if (nextToken === \";\" || this.context.newline) {\n this.next(this.globalState);\n if (nextToken !== \";\") this._state_global(nextToken);\n return true;\n }\n } else if (phase === 3) {\n if (nextToken === \"<\") genericDepth += 1;\n else if (nextToken === \">\") {\n genericDepth -= 1;\n if (genericDepth === 0) phase = 1;\n }\n } else if (phase === 4) {\n if (nextToken === \"{\") braceCount += 1;\n else if (nextToken === \"}\") {\n braceCount -= 1;\n if (braceCount === 0) {\n this.next(this.globalState);\n return true;\n }\n }\n }\n return false;\n };\n this.next(handleTypeAlias);\n return;\n }\n if (token === \"interface\") {\n let braceCount = 0;\n let interfaceStarted = false;\n const skipInterface = (nextToken: string): boolean => {\n if (nextToken === \"{\") {\n interfaceStarted = true;\n braceCount += 1;\n } else if (nextToken === \"}\" && interfaceStarted) {\n braceCount -= 1;\n if (braceCount === 0) {\n this.next(this.globalState);\n return true;\n }\n }\n return false;\n };\n this.next(skipInterface);\n return;\n }\n if (token === \"abstract\" && this.as_object) {\n this._in_abstract_context = true;\n return;\n }\n if (token === \"static\") {\n this._static_seen = true;\n this._prev_token = token;\n return;\n }\n if (token === \"async\") {\n this._async_seen = true;\n this._prev_token = token;\n return;\n }\n if (token === \"new\") {\n this._prev_token = token;\n return;\n }\n\n if (this.as_object) {\n if (token === \"get\" || token === \"set\") {\n this._getter_setter_prefix = token;\n return;\n }\n if (this._getter_setter_prefix) {\n this.last_tokens = `${this._getter_setter_prefix} ${token}`;\n this._getter_setter_prefix = undefined;\n return;\n }\n if (token === \"[\") {\n this._collect_computed_name();\n return;\n }\n if (token === \":\") {\n if (isFunctionName(this.last_tokens)) this.function_name = this.last_tokens;\n this._in_prop_value = true;\n return;\n }\n if (token === \"<\" || (token.startsWith(\"<\") && token.endsWith(\">\") && token.length > 1)) {\n if (token === \"<\") this._consume_generic_type_params();\n return;\n }\n if (token === \"(\") {\n if (this._prev_token === \".\" || this._prev_token === \"new\") {\n this.subState(this.cloneState());\n this._prev_token = token;\n return;\n }\n if (\n this._in_prop_value &&\n (!this.function_name || this.last_tokens !== this.function_name)\n ) {\n this.subState(this.cloneState());\n this._prev_token = token;\n return;\n }\n if (!this.started_function) {\n if (this.last_tokens === \"=\" && this.function_name) this._function(this.function_name);\n else this._function(this.last_tokens);\n }\n this.next(this._function, token);\n return;\n }\n if ((this._async_seen || this._static_seen) && ![\"*\", \"function\", \"=>\"].includes(token)) {\n if (token === \"=\") {\n this._static_seen = false;\n this._async_seen = false;\n } else {\n this.last_tokens = token;\n return;\n }\n }\n }\n\n if (token === \".\") {\n this.next(this._field);\n this.last_tokens += token;\n this._prev_token = token;\n return;\n }\n if (token === \"function\") {\n if (this.started_function && !this.as_object) this._pop_function_from_stack();\n this.next(this._function);\n } else if ([\"if\", \"switch\", \"for\", \"while\", \"catch\"].includes(token)) {\n this.next(this._expecting_condition_and_statement_block);\n } else if ([\"else\", \"do\", \"try\", \"final\"].includes(token)) {\n this.next(this._expecting_statement_or_block);\n } else if (token === \"=>\") {\n this.next(this._arrow_function);\n } else if (token === \"=\") {\n if (isFunctionName(this.last_tokens)) this.function_name = this.last_tokens;\n } else if (token === \"(\") {\n if (this._prev_token === \".\" || this._prev_token === \"new\") {\n this.subState(this.cloneState());\n } else if (this.function_name) {\n if (\n this.last_tokens !== this.function_name &&\n ![\"=\", \"async\", \">\"].includes(this._prev_token)\n ) {\n this.function_name = \"\";\n this.subState(this.cloneState());\n } else {\n if (!this.started_function) this._function(this.function_name);\n this.next(this._function, token);\n }\n } else {\n this.subState(this.cloneState());\n }\n } else if (token === \"{\") {\n if (this.started_function) this.subState(this.cloneState(), this._pop_function_from_stack);\n else this.read_object();\n } else if (token === \"}\" || token === \")\") {\n this.returnFromState();\n } else if (this.context.newline || token === \";\") {\n this.function_name = \"\";\n this._pop_function_from_stack();\n this._static_seen = false;\n this._async_seen = false;\n this._in_abstract_context = false;\n this._in_prop_value = false;\n this._prev_token = \"\";\n }\n\n if (token === \"`\") this.next(this._state_template_literal);\n if (!this.as_object && token === \":\") {\n this._consume_type_annotation();\n this._prev_token = token;\n return;\n }\n if (this.as_object && token === \",\") this._in_prop_value = false;\n this.last_tokens = token;\n if (this._prev_token !== \"new\" && this._prev_token !== \".\") this._prev_token = token;\n }\n\n private read_object(): void {\n const objectReader = this.cloneState();\n if (!(objectReader instanceof TypeScriptStates)) {\n throw new TypeError(\"TypeScriptStates clone did not preserve the concrete state class.\");\n }\n objectReader.as_object = true;\n objectReader._static_seen = this._static_seen;\n objectReader._async_seen = this._async_seen;\n this.subState(objectReader, () => this.next(this.globalState));\n this._static_seen = false;\n this._async_seen = false;\n }\n\n private _push_function_to_stack(): void {\n if (this._in_abstract_context) return;\n this.started_function = true;\n this.context.pushNewFunction(this.function_name || \"(anonymous)\");\n }\n\n private readonly _pop_function_from_stack = (): void => {\n if (this.started_function) this.context.endOfFunction();\n this.started_function = false;\n this._in_prop_value = false;\n };\n\n private readonly skipDeclaredFunction = (token: string): boolean => {\n if (token === \";\" || this.context.newline) {\n this.next(this.globalState);\n return true;\n }\n return false;\n };\n\n private readonly _expecting_condition_and_statement_block = (token: string): void => {\n if (token === \"await\") return;\n if (token !== \"(\") {\n this.next(this.globalState, token);\n return;\n }\n this.subState(this.cloneState(), () => this.next(this._expecting_statement_or_block));\n };\n\n private readonly _expecting_statement_or_block = (token: string): void => {\n if (token === \"{\") this.subState(this.cloneState(), () => this.next(this.globalState));\n else this.next(this.globalState, token);\n };\n\n private readonly _arrow_function = (token: string): void => {\n if (!this.started_function) this._push_function_to_stack();\n this.function_name = \"\";\n this._async_seen = false;\n this._static_seen = false;\n this.next(this.globalState, token);\n };\n\n private readonly _function = (token: string): void => {\n if (token === \"*\") return;\n if (token === \"<\") {\n this._consume_generic_type_params();\n return;\n }\n if (token.startsWith(\"<\") && token.endsWith(\">\") && token.length > 1) return;\n if (token !== \"(\") {\n this.function_name = isFunctionName(token) ? token : \"\";\n this._static_seen = false;\n this._async_seen = false;\n return;\n }\n if (!this.started_function) this._push_function_to_stack();\n this._generic_depth_in_dec = 0;\n this.next(this._dec, token);\n };\n\n private readonly _field = (token: string): void => {\n this.last_tokens += token;\n this.next(this.globalState);\n };\n\n private readonly _dec = (token: string): void => {\n if (token === \")\") {\n this.next(this._expecting_func_opening_bracket);\n } else if (token !== \"(\") {\n if (token === \",\") {\n if (this._generic_depth_in_dec === 0) this.context.parameter(\",\");\n } else if (token === \"<\") {\n this._generic_depth_in_dec += 1;\n } else if (token === \">\") {\n if (this._generic_depth_in_dec > 0) this._generic_depth_in_dec -= 1;\n } else if (\n !_TS_TYPE_KEYWORDS.has(token) &&\n ![\"*\", \"+\", \"-\", \"/\", \"%\", \"=\", \".\"].includes(token) &&\n this._generic_depth_in_dec === 0 &&\n isParameter(token)\n ) {\n this.context.parameter(token.replaceAll(\"?\", \"\"));\n }\n return;\n }\n this.context.addToLongFunctionName(` ${token}`);\n };\n\n private readonly _expecting_func_opening_bracket = (token: string): void => {\n if (token === \":\") {\n this._consume_type_annotation();\n } else if (token === \";\" && this.as_object && this._in_abstract_context) {\n if (this.started_function) this._pop_function_from_stack();\n this._in_abstract_context = false;\n this.next(this.globalState);\n } else if (token !== \"{\" && token !== \"=>\") {\n if (this.started_function) {\n this.context.forgive = true;\n this.context.endOfFunction();\n }\n this.started_function = false;\n }\n this.next(this.globalState, token);\n };\n\n private readonly _state_template_literal = (token: string): void => {\n if (token === \"`\") this.next(this.globalState);\n };\n\n private _collect_computed_name(): void {\n const tokens: string[] = [];\n const collect = (token: string): boolean => {\n if (token === \"]\") {\n this.last_tokens = this._to_camel_case(tokens.join(\"\"));\n this.next(this.globalState);\n return true;\n }\n tokens.push(token);\n return false;\n };\n this.next(collect);\n }\n\n private _consume_generic_type_params(): void {\n let depth = 1;\n const consume = (token: string): void => {\n if (token === \"<\") depth += 1;\n else if (token === \">\") {\n depth -= 1;\n if (depth === 0) this.next(this.globalState);\n }\n };\n this.next(consume);\n }\n\n private _consume_type_annotation(): void {\n const typeStates = new TypeScriptTypeAnnotationStates(this.context);\n this.subState(typeStates, () => {\n if (typeStates.saved_token !== undefined) this.consume(typeStates.saved_token);\n });\n }\n\n private _to_camel_case(value: string): string {\n const normalized = value.replace(/[\"'+ ]/gu, \"\");\n return normalized ? `${normalized[0]?.toLowerCase()}${normalized.slice(1)}` : normalized;\n }\n}\n\nclass TypeScriptTypeAnnotationStates extends CodeStateMachine {\n public saved_token: string | undefined;\n\n public constructor(context: FileInfoBuilder) {\n super(context);\n this.saved_token = undefined;\n }\n\n public override _state_global(token: string): void {\n if (token === \"{\") this.next(this._inline_type_annotation, token);\n else this.next(this._state_simple_type, token);\n }\n\n private readonly _state_simple_type = (token: string): void => {\n if (token === \"<\") this.next(this._state_generic_type, token);\n else if (\"{=;)\".includes(token)) {\n this.saved_token = token;\n this.returnFromState();\n } else if (token === \"(\") this.next(this._function_type_annotation, token);\n else if (token === \"=>\") {\n this.saved_token = token;\n this.returnFromState();\n }\n };\n\n private readonly _inline_type_annotation = (token: string): void => {\n this.readInsideBracketsThen(\"{}\", token, () => this.returnFromState());\n };\n\n private readonly _state_generic_type = (token: string): void => {\n this.readInsideBracketsThen(\"<>\", token, () => this.returnFromState());\n };\n\n private readonly _function_type_annotation = (token: string): void => {\n this.readInsideBracketsThen(\"()\", token, () => this.returnFromState());\n };\n}\n\nfunction isFunctionName(token: string): boolean {\n return /^[\\p{L}_$#]/u.test(token);\n}\n\nfunction isParameter(token: string): boolean {\n const withoutQuestionMark = token.replaceAll(\"?\", \"\");\n return (\n withoutQuestionMark.length > 0 &&\n /^[\\p{L}]/u.test(withoutQuestionMark) &&\n /^[\\p{L}\\p{N}_]+$/u.test(withoutQuestionMark)\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"typescript.mjs","sourceRoot":"","sources":["../../../../../../src/package-checks/function-metrics/analyzer/readers/typescript.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Derived from terryyin/lizard 1.24.0.\n * Source: lizard_languages/typescript.py.\n * Upstream revision: 308b1c3efd8c1c69bcc3eb82deeaec64fd3662ec.\n * SPDX-License-Identifier: MIT\n * Modified: translated to the product-owned TypeScript analyzer.\n */\n\nimport type { FileInfoBuilder } from \"../analysis-context.ts\";\nimport { CodeReader, CodeStateMachine, type TokenFactory } from \"../shared/code-reader.ts\";\nimport { js_style_regex_expression } from \"../shared/js-style-regex.ts\";\n\nconst _TS_TYPE_KEYWORDS = new Set([\n \"string\",\n \"number\",\n \"boolean\",\n \"void\",\n \"any\",\n \"object\",\n \"unknown\",\n \"never\"\n]);\n\nexport class TypeScriptReader extends CodeReader {\n public static override ext = [\"ts\"];\n public static override languageNames = [\"typescript\", \"ts\"];\n public static override controlFlowKeywords = new Set([\"if\", \"elseif\", \"for\", \"while\", \"catch\"]);\n public static override logicalOperators = new Set([\"&&\", \"||\"]);\n public static override caseKeywords = new Set([\"case\"]);\n public static override ternaryOperators = new Set([\"?\"]);\n\n public constructor(context: FileInfoBuilder) {\n super(context);\n this.parallelStates = [new TypeScriptStates(context)];\n }\n\n public static override generateTokens = js_style_regex_expression(function* (\n sourceCode: string,\n addition = \"\",\n tokenFactory?: TokenFactory\n ): Generator<string> {\n function* splitTemplateLiteral(token: string): Generator<string> {\n let content = token.slice(1, -1);\n yield \"`\";\n if (!content.includes(\"${\")) {\n if (content) yield `\\`${content}\\``;\n yield \"`\";\n return;\n }\n\n let index = 0;\n while (index < content.length) {\n const expressionIndex = content.indexOf(\"${\", index);\n if (expressionIndex === -1) {\n if (index < content.length) yield `\\`${content.slice(index)}\\``;\n break;\n }\n if (expressionIndex > index) yield `\\`${content.slice(index, expressionIndex)}\\``;\n yield \"${\";\n index = expressionIndex + 2;\n const expressionStart = index;\n let braceCount = 1;\n while (index < content.length && braceCount > 0) {\n if (content[index] === \"{\") braceCount += 1;\n else if (content[index] === \"}\") braceCount -= 1;\n index += 1;\n }\n if (braceCount > 0) {\n yield token;\n return;\n }\n yield content.slice(expressionStart, index - 1);\n yield \"}\";\n content = content.slice(index);\n index = 0;\n }\n yield \"`\";\n }\n\n const typeScriptAddition = `${addition}|(?:#\\\\w+)|(?:\\\\$\\\\w+)|(?:\\\\w+\\\\?)|\\`.*?\\``;\n for (const token of CodeReader.generateTokens(sourceCode, typeScriptAddition, tokenFactory)) {\n if (token.startsWith(\"`\") && token.endsWith(\"`\") && token.length > 1) {\n yield* splitTemplateLiteral(token);\n } else {\n yield token;\n }\n }\n });\n\n public override get_comment_from_token(token: string): string | undefined {\n if (token.startsWith(\"//\")) return token.slice(2);\n if (token.startsWith(\"/*\") && token.endsWith(\"*/\")) return token.slice(2, -2);\n return undefined;\n }\n}\n\n/** Source-aligned tokenizer base shared with the TSX reader. */\nexport class Tokenizer {\n public sub_tokenizer: Tokenizer | undefined;\n public _ended: boolean;\n\n public constructor() {\n this.sub_tokenizer = undefined;\n this._ended = false;\n }\n\n public *__call__(token: string): Generator<string> {\n if (this.sub_tokenizer) {\n yield* this.sub_tokenizer.__call__(token);\n if (this.sub_tokenizer._ended) this.sub_tokenizer = undefined;\n return;\n }\n yield* this.process_token(token);\n }\n\n public stop(): void {\n this._ended = true;\n }\n\n public *process_token(_token: string): Generator<string> {}\n}\n\n/** Source-aligned JavaScript brace tokenizer used by TSX embedded expressions. */\nexport class JSTokenizer extends Tokenizer {\n private depth: number;\n\n public constructor() {\n super();\n this.depth = 1;\n }\n\n public override *process_token(token: string): Generator<string> {\n if (token === \"{\") this.depth += 1;\n else if (token === \"}\") {\n this.depth -= 1;\n if (this.depth === 0) {\n this.stop();\n return;\n }\n }\n yield token;\n }\n}\n\nclass TypeScriptStates extends CodeStateMachine {\n private last_tokens = \"\";\n private function_name = \"\";\n private started_function = false;\n private as_object = false;\n private _getter_setter_prefix: \"get\" | \"set\" | undefined;\n private _ts_declare = false;\n private _static_seen = false;\n private _async_seen = false;\n private _prev_token = \"\";\n private _in_prop_value = false;\n private _in_abstract_context = false;\n private _generic_depth_in_dec = 0;\n\n public constructor(context: FileInfoBuilder) {\n super(context);\n }\n\n public override statemachine_before_return(): void {\n this._pop_function_from_stack();\n }\n\n public override _state_global(token: string): void {\n if (token === \"declare\") {\n this._ts_declare = true;\n return;\n }\n if (token === \"function\" && this._ts_declare) {\n this._ts_declare = false;\n this.next(this.skipDeclaredFunction);\n return;\n }\n this._ts_declare = false;\n\n if (token === \"type\" && !this.as_object) {\n let phase = 0;\n let braceCount = 0;\n let genericDepth = 0;\n const handleTypeAlias = (nextToken: string): boolean => {\n if (phase === 0) {\n if (/\\p{L}/u.test(nextToken[0] ?? \"\")) phase = 1;\n else {\n this.last_tokens = \"type\";\n this.next(this.globalState, nextToken);\n return true;\n }\n } else if (phase === 1) {\n if (nextToken === \"<\") {\n genericDepth = 1;\n phase = 3;\n } else if (nextToken === \"=\") phase = 2;\n else if (nextToken === \";\") {\n this.next(this.globalState);\n return true;\n }\n } else if (phase === 2) {\n if (nextToken === \"{\") {\n braceCount = 1;\n phase = 4;\n } else if (nextToken === \";\" || this.context.newline) {\n this.next(this.globalState);\n if (nextToken !== \";\") this._state_global(nextToken);\n return true;\n }\n } else if (phase === 3) {\n if (nextToken === \"<\") genericDepth += 1;\n else if (nextToken === \">\") {\n genericDepth -= 1;\n if (genericDepth === 0) phase = 1;\n }\n } else if (phase === 4) {\n if (nextToken === \"{\") braceCount += 1;\n else if (nextToken === \"}\") {\n braceCount -= 1;\n if (braceCount === 0) {\n this.next(this.globalState);\n return true;\n }\n }\n }\n return false;\n };\n this.next(handleTypeAlias);\n return;\n }\n if (token === \"interface\") {\n let braceCount = 0;\n let interfaceStarted = false;\n const skipInterface = (nextToken: string): boolean => {\n if (nextToken === \"{\") {\n interfaceStarted = true;\n braceCount += 1;\n } else if (nextToken === \"}\" && interfaceStarted) {\n braceCount -= 1;\n if (braceCount === 0) {\n this.next(this.globalState);\n return true;\n }\n }\n return false;\n };\n this.next(skipInterface);\n return;\n }\n if (token === \"abstract\" && this.as_object) {\n this._in_abstract_context = true;\n return;\n }\n if (token === \"static\") {\n this._static_seen = true;\n this._prev_token = token;\n return;\n }\n if (token === \"async\") {\n this._async_seen = true;\n this._prev_token = token;\n return;\n }\n if (token === \"new\") {\n this._prev_token = token;\n return;\n }\n\n if (this.as_object) {\n if (token === \"get\" || token === \"set\") {\n this._getter_setter_prefix = token;\n return;\n }\n if (this._getter_setter_prefix) {\n this.last_tokens = `${this._getter_setter_prefix} ${token}`;\n this._getter_setter_prefix = undefined;\n return;\n }\n if (token === \"[\") {\n this._collect_computed_name();\n return;\n }\n if (token === \":\") {\n if (isFunctionName(this.last_tokens)) this.function_name = this.last_tokens;\n this._in_prop_value = true;\n return;\n }\n if (token === \"<\" || (token.startsWith(\"<\") && token.endsWith(\">\") && token.length > 1)) {\n if (token === \"<\") this._consume_generic_type_params();\n return;\n }\n if (token === \"(\") {\n if (this._prev_token === \".\" || this._prev_token === \"new\") {\n this.subState(this.cloneState());\n this._prev_token = token;\n return;\n }\n if (\n this._in_prop_value &&\n (!this.function_name || this.last_tokens !== this.function_name)\n ) {\n this.subState(this.cloneState());\n this._prev_token = token;\n return;\n }\n if (!this.started_function) {\n if (this.last_tokens === \"=\" && this.function_name) this._function(this.function_name);\n else this._function(this.last_tokens);\n }\n this.next(this._function, token);\n return;\n }\n if ((this._async_seen || this._static_seen) && ![\"*\", \"function\", \"=>\"].includes(token)) {\n if (token === \"=\") {\n this._static_seen = false;\n this._async_seen = false;\n } else {\n this.last_tokens = token;\n return;\n }\n }\n }\n\n if (token === \".\") {\n this.next(this._field);\n this.last_tokens += token;\n this._prev_token = token;\n return;\n }\n if (token === \"function\") {\n if (this.started_function && !this.as_object) this._pop_function_from_stack();\n this.next(this._function);\n } else if ([\"if\", \"switch\", \"for\", \"while\", \"catch\"].includes(token)) {\n this.next(this._expecting_condition_and_statement_block);\n } else if ([\"else\", \"do\", \"try\", \"final\"].includes(token)) {\n this.next(this._expecting_statement_or_block);\n } else if (token === \"=>\") {\n this.next(this._arrow_function);\n } else if (token === \"=\") {\n if (isFunctionName(this.last_tokens)) this.function_name = this.last_tokens;\n } else if (token === \"(\") {\n if (this._prev_token === \".\" || this._prev_token === \"new\") {\n this.subState(this.cloneState());\n } else if (this.function_name) {\n if (\n this.last_tokens !== this.function_name &&\n ![\"=\", \"async\", \">\"].includes(this._prev_token)\n ) {\n this.function_name = \"\";\n this.subState(this.cloneState());\n } else {\n if (!this.started_function) this._function(this.function_name);\n this.next(this._function, token);\n }\n } else {\n this.subState(this.cloneState());\n }\n } else if (token === \"{\") {\n if (this.started_function) this.subState(this.cloneState(), this._pop_function_from_stack);\n else this.read_object();\n } else if (token === \"}\" || token === \")\") {\n this.returnFromState();\n } else if (this.context.newline || token === \";\") {\n this.function_name = \"\";\n this._pop_function_from_stack();\n this._static_seen = false;\n this._async_seen = false;\n this._in_abstract_context = false;\n this._in_prop_value = false;\n this._prev_token = \"\";\n }\n\n if (token === \"`\") this.next(this._state_template_literal);\n if (!this.as_object && token === \":\") {\n this._consume_type_annotation();\n this._prev_token = token;\n return;\n }\n if (this.as_object && token === \",\") this._in_prop_value = false;\n this.last_tokens = token;\n if (this._prev_token !== \"new\" && this._prev_token !== \".\") this._prev_token = token;\n }\n\n private read_object(): void {\n const objectReader = this.cloneState();\n if (!(objectReader instanceof TypeScriptStates)) {\n throw new TypeError(\"TypeScriptStates clone did not preserve the concrete state class.\");\n }\n objectReader.as_object = true;\n objectReader._static_seen = this._static_seen;\n objectReader._async_seen = this._async_seen;\n this.subState(objectReader, () => this.next(this.globalState));\n this._static_seen = false;\n this._async_seen = false;\n }\n\n private _push_function_to_stack(): void {\n if (this._in_abstract_context) return;\n this.started_function = true;\n this.context.pushNewFunction(this.function_name || \"(anonymous)\");\n }\n\n private readonly _pop_function_from_stack = (): void => {\n if (this.started_function) this.context.endOfFunction();\n this.started_function = false;\n this._in_prop_value = false;\n };\n\n private readonly skipDeclaredFunction = (token: string): boolean => {\n if (token === \";\" || this.context.newline) {\n this.next(this.globalState);\n return true;\n }\n return false;\n };\n\n private readonly _expecting_condition_and_statement_block = (token: string): void => {\n if (token === \"await\") return;\n if (token !== \"(\") {\n this.next(this.globalState, token);\n return;\n }\n this.subState(this.cloneState(), () => this.next(this._expecting_statement_or_block));\n };\n\n private readonly _expecting_statement_or_block = (token: string): void => {\n if (token === \"{\") this.subState(this.cloneState(), () => this.next(this.globalState));\n else this.next(this.globalState, token);\n };\n\n private readonly _arrow_function = (token: string): void => {\n if (!this.started_function) this._push_function_to_stack();\n this.function_name = \"\";\n this._async_seen = false;\n this._static_seen = false;\n this.next(this.globalState, token);\n };\n\n private readonly _function = (token: string): void => {\n if (token === \"*\") return;\n if (token === \"<\") {\n this._consume_generic_type_params();\n return;\n }\n if (token.startsWith(\"<\") && token.endsWith(\">\") && token.length > 1) return;\n if (token !== \"(\") {\n this.function_name = isFunctionName(token) ? token : \"\";\n this._static_seen = false;\n this._async_seen = false;\n return;\n }\n if (!this.started_function) this._push_function_to_stack();\n this._generic_depth_in_dec = 0;\n this.next(this._dec, token);\n };\n\n private readonly _field = (token: string): void => {\n this.last_tokens += token;\n this.next(this.globalState);\n };\n\n private readonly _dec = (token: string): void => {\n if (token === \")\") {\n this.next(this._expecting_func_opening_bracket);\n } else if (token !== \"(\") {\n if (token === \",\") {\n if (this._generic_depth_in_dec === 0) this.context.parameter(\",\");\n } else if (token === \"<\") {\n this._generic_depth_in_dec += 1;\n } else if (token === \">\") {\n if (this._generic_depth_in_dec > 0) this._generic_depth_in_dec -= 1;\n } else if (\n !_TS_TYPE_KEYWORDS.has(token) &&\n ![\"*\", \"+\", \"-\", \"/\", \"%\", \"=\", \".\"].includes(token) &&\n this._generic_depth_in_dec === 0 &&\n isParameter(token)\n ) {\n this.context.parameter(token.replaceAll(\"?\", \"\"));\n }\n return;\n }\n this.context.addToLongFunctionName(` ${token}`);\n };\n\n private readonly _expecting_func_opening_bracket = (token: string): void => {\n if (token === \":\") {\n this._consume_type_annotation();\n } else if (token === \";\" && this.as_object && this._in_abstract_context) {\n if (this.started_function) this._pop_function_from_stack();\n this._in_abstract_context = false;\n this.next(this.globalState);\n } else if (token !== \"{\" && token !== \"=>\") {\n if (this.started_function) {\n this.context.forgive = true;\n this.context.endOfFunction();\n }\n this.started_function = false;\n }\n this.next(this.globalState, token);\n };\n\n private readonly _state_template_literal = (token: string): void => {\n if (token === \"`\") this.next(this.globalState);\n };\n\n private _collect_computed_name(): void {\n const tokens: string[] = [];\n const collect = (token: string): boolean => {\n if (token === \"]\") {\n this.last_tokens = this._to_camel_case(tokens.join(\"\"));\n this.next(this.globalState);\n return true;\n }\n tokens.push(token);\n return false;\n };\n this.next(collect);\n }\n\n private _consume_generic_type_params(): void {\n let depth = 1;\n const consume = (token: string): void => {\n if (token === \"<\") depth += 1;\n else if (token === \">\") {\n depth -= 1;\n if (depth === 0) this.next(this.globalState);\n }\n };\n this.next(consume);\n }\n\n private _consume_type_annotation(): void {\n const typeStates = new TypeScriptTypeAnnotationStates(this.context);\n this.subState(typeStates, () => {\n if (typeStates.saved_token !== undefined) this.consume(typeStates.saved_token);\n });\n }\n\n private _to_camel_case(value: string): string {\n const normalized = value.replace(/[\"'+ ]/gu, \"\");\n return normalized ? `${normalized[0]?.toLowerCase()}${normalized.slice(1)}` : normalized;\n }\n}\n\nclass TypeScriptTypeAnnotationStates extends CodeStateMachine {\n public saved_token: string | undefined;\n\n public constructor(context: FileInfoBuilder) {\n super(context);\n this.saved_token = undefined;\n }\n\n public override _state_global(token: string): void {\n if (token === \"{\") this.next(this._inline_type_annotation, token);\n else this.next(this._state_simple_type, token);\n }\n\n private readonly _state_simple_type = (token: string): void => {\n if (token === \"<\") this.next(this._state_generic_type, token);\n else if (\"{=;)\".includes(token)) {\n this.saved_token = token;\n this.returnFromState();\n } else if (token === \"(\") this.next(this._function_type_annotation, token);\n else if (token === \"=>\") {\n this.saved_token = token;\n this.returnFromState();\n }\n };\n\n private readonly _inline_type_annotation = (token: string): void => {\n this.readInsideBracketsThen(\"{}\", token, () => {\n this.returnFromState();\n });\n };\n\n private readonly _state_generic_type = (token: string): void => {\n this.readInsideBracketsThen(\"<>\", token, () => {\n this.returnFromState();\n });\n };\n\n private readonly _function_type_annotation = (token: string): void => {\n this.readInsideBracketsThen(\"()\", token, () => {\n this.returnFromState();\n });\n };\n}\n\nfunction isFunctionName(token: string): boolean {\n return /^[\\p{L}_$#]/u.test(token);\n}\n\nfunction isParameter(token: string): boolean {\n const withoutQuestionMark = token.replaceAll(\"?\", \"\");\n return (\n withoutQuestionMark.length > 0 &&\n /^[\\p{L}]/u.test(withoutQuestionMark) &&\n /^[\\p{L}\\p{N}_]+$/u.test(withoutQuestionMark)\n );\n}\n"]}
|
|
@@ -18,6 +18,8 @@ export class ZigReader extends CodeReader {
|
|
|
18
18
|
}
|
|
19
19
|
class ZigStates extends GoLikeStates {
|
|
20
20
|
static FUNC_KEYWORD = "fn";
|
|
21
|
-
_type_definition = (token) =>
|
|
21
|
+
_type_definition = (token) => {
|
|
22
|
+
super._state_global(token);
|
|
23
|
+
};
|
|
22
24
|
}
|
|
23
25
|
//# sourceMappingURL=zig.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zig.mjs","sourceRoot":"","sources":["../../../../../../src/package-checks/function-metrics/analyzer/readers/zig.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,MAAM,OAAO,SAAU,SAAQ,UAAU;IAChC,MAAM,CAAU,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,CAAU,aAAa,GAAG,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,CAAU,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IACtF,MAAM,CAAU,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IACpE,MAAM,CAAU,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACjD,MAAM,CAAU,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAE1D,YAAmB,OAAwB;QACzC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IACjD,CAAC;IAEe,sBAAsB,CAAC,KAAa;QAClD,OAAO,iBAAiB,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACzD,CAAC;CACF;AAED,MAAM,SAAU,SAAQ,YAAY;IACxB,MAAM,CAAmB,YAAY,GAAG,IAAI,CAAC;IAE3B,gBAAgB,GAAG,CAAC,KAAa,EAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"zig.mjs","sourceRoot":"","sources":["../../../../../../src/package-checks/function-metrics/analyzer/readers/zig.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,MAAM,OAAO,SAAU,SAAQ,UAAU;IAChC,MAAM,CAAU,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,CAAU,aAAa,GAAG,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,CAAU,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IACtF,MAAM,CAAU,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IACpE,MAAM,CAAU,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACjD,MAAM,CAAU,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAE1D,YAAmB,OAAwB;QACzC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IACjD,CAAC;IAEe,sBAAsB,CAAC,KAAa;QAClD,OAAO,iBAAiB,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACzD,CAAC;CACF;AAED,MAAM,SAAU,SAAQ,YAAY;IACxB,MAAM,CAAmB,YAAY,GAAG,IAAI,CAAC;IAE3B,gBAAgB,GAAG,CAAC,KAAa,EAAQ,EAAE;QACrE,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC,CAAC;CACH","sourcesContent":["/**\n * Derived from terryyin/lizard 1.24.0.\n * Source: lizard_languages/zig.py.\n * Upstream revision: 308b1c3efd8c1c69bcc3eb82deeaec64fd3662ec.\n * SPDX-License-Identifier: MIT\n * Modified: translated to the product-owned TypeScript analyzer.\n */\nimport type { FileInfoBuilder } from \"../analysis-context.ts\";\nimport { CCppCommentsMixin } from \"../shared/clike.ts\";\nimport { CodeReader } from \"../shared/code-reader.ts\";\nimport { GoLikeStates } from \"../shared/golike.ts\";\nexport class ZigReader extends CodeReader {\n public static override ext = [\"zig\"];\n public static override languageNames = [\"zig\"];\n public static override controlFlowKeywords = new Set([\"if\", \"for\", \"while\", \"try\", \"catch\"]);\n public static override logicalOperators = new Set([\"and\", \"or\", \"orelse\"]);\n public static override caseKeywords = new Set<string>();\n public static override ternaryOperators = new Set([\"=>\"]);\n\n public constructor(context: FileInfoBuilder) {\n super(context);\n this.parallelStates = [new ZigStates(context)];\n }\n\n public override get_comment_from_token(token: string): string | undefined {\n return CCppCommentsMixin.get_comment_from_token(token);\n }\n}\n\nclass ZigStates extends GoLikeStates {\n protected static override readonly FUNC_KEYWORD = \"fn\";\n\n protected override readonly _type_definition = (token: string): void => {\n super._state_global(token);\n };\n}\n"]}
|
|
@@ -69,7 +69,9 @@ export class CodeStateMachine {
|
|
|
69
69
|
readUntilTokens = [];
|
|
70
70
|
bracketCount = 0;
|
|
71
71
|
stateMachineConstructor;
|
|
72
|
-
globalState = (token) =>
|
|
72
|
+
globalState = (token) => {
|
|
73
|
+
this._state_global(token);
|
|
74
|
+
};
|
|
73
75
|
constructor(context) {
|
|
74
76
|
this.stateMachineConstructor = new.target;
|
|
75
77
|
this.context = context;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-reader.mjs","sourceRoot":"","sources":["../../../../../../src/package-checks/function-metrics/analyzer/shared/code-reader.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Derived from terryyin/lizard 1.24.0.\n * Source: lizard_languages/code_reader.py.\n * Upstream revision: 308b1c3efd8c1c69bcc3eb82deeaec64fd3662ec.\n * SPDX-License-Identifier: MIT\n * Modified: translated to TypeScript while retaining the tokenizer and\n * state-machine sequencing used by concrete Lizard language readers.\n */\n\nimport type { AnalyzerReader, TokenStream } from \"../contracts.ts\";\nimport type { FileInfoBuilder } from \"../analysis-context.ts\";\n\n/** A regex match passed to language-specific token factories. */\nexport class TokenMatch {\n public readonly text: string;\n public readonly startOffset: number;\n\n public constructor(text: string, startOffset: number) {\n this.text = text;\n this.startOffset = startOffset;\n }\n\n /** Python's re.Match.group(0), retained for direct reader translations. */\n public group(index = 0): string | undefined {\n return index === 0 ? this.text : undefined;\n }\n\n /** Python's re.Match.start(), retained for direct reader translations. */\n public start(): number {\n return this.startOffset;\n }\n}\n\n/** Converts one tokenizer match into the token stream representation. */\nexport type TokenFactory = (match: TokenMatch) => string;\n\nexport type StateHandler = (this: CodeStateMachine, token: string) => boolean | void;\nexport type UntilStateHandler = (\n this: CodeStateMachine,\n token: string,\n savedTokens: readonly string[]\n) => boolean | void;\nexport type State = CodeStateMachine | StateHandler;\nexport type SourceStateHandler = (state: CodeStateMachine, token: string) => boolean | void;\nexport type SourceUntilStateHandler = (\n state: CodeStateMachine,\n token: string,\n savedTokens: string[]\n) => boolean | void;\n\nconst PYTHON_UNICODE_WHITESPACE = /^\\p{White_Space}$/u;\nconst C0_INFORMATION_SEPARATOR_FIRST = 0x1c;\nconst C0_INFORMATION_SEPARATOR_LAST = 0x1f;\nconst C0_LINE_SEPARATOR_LAST = 0x1e;\nconst C0_INFORMATION_SEPARATOR_PATTERN =\n `${String.fromCodePoint(C0_INFORMATION_SEPARATOR_FIRST)}-` +\n String.fromCodePoint(C0_INFORMATION_SEPARATOR_LAST);\n\nexport interface ReaderDefinition {\n readonly controlFlowKeywords: ReadonlySet<string>;\n readonly logicalOperators: ReadonlySet<string>;\n readonly caseKeywords: ReadonlySet<string>;\n readonly ternaryOperators: ReadonlySet<string>;\n buildConditions(): Set<string>;\n}\n\n/** Python str.isspace(), including its four extra C0 information separators. */\nexport function isPythonWhitespace(value: string): boolean {\n return (\n value.length > 0 &&\n Array.from(value).every(\n (character) =>\n PYTHON_UNICODE_WHITESPACE.test(character) || isC0InformationSeparator(character)\n )\n );\n}\n\n/** Python str.splitlines() without retaining source line-boundary characters. */\nexport function splitPythonLines(value: string): string[] {\n if (value.length === 0) return [];\n\n const lines: string[] = [];\n let lineStart = 0;\n let index = 0;\n while (index < value.length) {\n const boundaryLength = pythonLineBoundaryLengthAt(value, index);\n if (boundaryLength === 0) {\n index += 1;\n continue;\n }\n lines.push(value.slice(lineStart, index));\n index += boundaryLength;\n lineStart = index;\n }\n if (lineStart < value.length) lines.push(value.slice(lineStart));\n return lines;\n}\n\n/**\n * The small state-machine foundation used by source-aligned language readers.\n * It deliberately preserves upstream's one saved sub-state and callback slot.\n */\nexport class CodeStateMachine {\n public context: FileInfoBuilder;\n public lastToken: string | undefined;\n protected state: State;\n protected savedState: State;\n protected toExit = false;\n public callback: (() => void) | undefined;\n protected readUntilTokens: string[] = [];\n protected bracketCount = 0;\n protected readonly stateMachineConstructor: typeof CodeStateMachine;\n protected readonly globalState: StateHandler = (token) => this._state_global(token);\n\n public constructor(context: FileInfoBuilder) {\n this.stateMachineConstructor = new.target;\n this.context = context;\n this.state = this.globalState;\n this.savedState = this.globalState;\n }\n\n /** Source field aliases retain one state slot for translated state machines. */\n public get saved_state(): State {\n return this.savedState;\n }\n\n public set saved_state(value: State) {\n this.savedState = value;\n }\n\n public get _state(): State {\n return this.state;\n }\n\n public set _state(value: State) {\n this.state = value;\n }\n\n public get last_token(): string | undefined {\n return this.lastToken;\n }\n\n public set last_token(value: string | undefined) {\n this.lastToken = value;\n }\n\n public get to_exit(): boolean {\n return this.toExit;\n }\n\n public set to_exit(value: boolean) {\n this.toExit = value;\n }\n\n public get rut_tokens(): string[] {\n return this.readUntilTokens;\n }\n\n public set rut_tokens(value: string[]) {\n this.readUntilTokens = value;\n }\n\n public get br_count(): number {\n return this.bracketCount;\n }\n\n public set br_count(value: number) {\n this.bracketCount = value;\n }\n\n /** TS-facing alias for the source clone hook. */\n public cloneState(): CodeStateMachine {\n return this.statemachine_clone();\n }\n\n /** Equivalent to Python's statemachine_clone. */\n public statemachine_clone(): CodeStateMachine {\n return new this.stateMachineConstructor(this.context);\n }\n\n public next(state: State, token?: string): boolean | void {\n this.state = state;\n if (token !== undefined) return this.consume(token);\n }\n\n public nextIf(state: State, token: string, expected: string): boolean | void {\n if (token === expected) return this.next(state, token);\n }\n\n public next_if(state: State, token: string, expected: string): boolean | void {\n return this.nextIf(state, token, expected);\n }\n\n public returnFromState(): void {\n this.toExit = true;\n this.statemachine_before_return();\n }\n\n public statemachine_return(): void {\n this.returnFromState();\n }\n\n public subState(state: State, callback?: () => void, token?: string): boolean | void {\n this.savedState = this.state;\n this.callback = callback;\n return this.next(state, token);\n }\n\n public sub_state(state: State, callback?: () => void, token?: string): boolean | void {\n return this.subState(state, callback, token);\n }\n\n /** Feed one token through the current state. */\n public consume(token: string): boolean {\n const completed = this.invokeCurrentState(token);\n if (completed) {\n this.next(this.savedState);\n // Keep the source ordering: a callback installed by this callback is\n // still cleared afterwards, because CodeStateMachine has one callback\n // slot rather than a callback stack.\n this.callback?.();\n this.callback = undefined;\n }\n this.lastToken = token;\n return this.toExit;\n }\n\n /** Invoke only the current state; ExtensionBase retains this upstream seam. */\n protected invokeCurrentState(token: string): boolean {\n return this.state instanceof CodeStateMachine\n ? this.state.consume(token)\n : Boolean(this.state.call(this, token));\n }\n\n /** TS-facing state hook used by existing translated reader subclasses. */\n protected stateGlobal(_token: string): void {}\n\n /** Source readers/extensions may retain this source-spelled state hook. */\n public _state_global(token: string): void {\n this.stateGlobal(token);\n }\n\n /** Source readers/extensions may retain this source-spelled return hook. */\n public statemachine_before_return(): void {}\n\n /** TS-facing alias for the source pre-return hook. */\n public beforeReturn(): void {\n this.statemachine_before_return();\n }\n\n /** Source decorator factory retained for translated reader/extension state methods. */\n public static read_inside_brackets_then(\n brackets: string,\n endState?: string\n ): (action: SourceStateHandler) => StateHandler {\n return (action) =>\n function readUntilMatchingBrackets(this: CodeStateMachine, token: string): void {\n const [openingBracket, closingBracket] = brackets;\n if (token === openingBracket) this.br_count += 1;\n else if (token === closingBracket) this.br_count -= 1;\n\n if (this.br_count === 0 || endState !== undefined) action(this, token);\n if (this.br_count === 0 && endState !== undefined) {\n this.next(readSourceState(this, endState));\n }\n };\n }\n\n /** Source decorator factory retained for translated reader/extension state methods. */\n public static read_until_then(tokens: string): (action: SourceUntilStateHandler) => StateHandler {\n return (action) =>\n function readUntilThenToken(this: CodeStateMachine, token: string): void {\n if (tokens.includes(token)) {\n action(this, token, this.rut_tokens);\n this.rut_tokens = [];\n return;\n }\n this.rut_tokens.push(token);\n };\n }\n\n /**\n * Source-aligned replacement for read_inside_brackets_then. Call from a\n * reader state for the token currently being consumed.\n */\n protected readInsideBracketsThen(\n brackets: string,\n token: string,\n action: StateHandler,\n endState?: State\n ): void {\n const [openingBracket, closingBracket] = brackets;\n if (token === openingBracket) this.bracketCount += 1;\n else if (token === closingBracket) this.bracketCount -= 1;\n\n if (this.bracketCount === 0 || endState !== undefined) {\n action.call(this, token);\n }\n if (this.bracketCount === 0 && endState !== undefined) this.next(endState);\n }\n\n /** Source-aligned replacement for read_until_then. */\n protected readUntilThen(stopTokens: string, token: string, action: UntilStateHandler): void {\n if (stopTokens.includes(token)) {\n const savedTokens = this.readUntilTokens;\n action.call(this, token, savedTokens);\n this.readUntilTokens = [];\n return;\n }\n this.readUntilTokens.push(token);\n }\n}\n\nfunction readSourceState(stateMachine: CodeStateMachine, name: string): State {\n const state: unknown = Reflect.get(stateMachine, name);\n if (state instanceof CodeStateMachine || isStateHandler(state)) return state;\n throw new TypeError(`CodeStateMachine source state '${name}' is not callable.`);\n}\n\nfunction isStateHandler(value: unknown): value is StateHandler {\n return typeof value === \"function\";\n}\n\n/** Base tokenizer and state fan-out used by all translated concrete readers. */\nexport class CodeReader implements AnalyzerReader {\n public static ext: readonly string[] = [];\n public static languages: unknown = undefined;\n public static languageNames: readonly string[] = [];\n\n /** Source `language_names` shares storage with the TS-facing class field. */\n public static get language_names(): readonly string[] {\n return this.languageNames;\n }\n\n public static set language_names(value: readonly string[]) {\n this.languageNames = value;\n }\n\n public static extraSubclasses = new Set<typeof CodeReader>();\n\n /** Source `extra_subclasses` shares storage with the TS-facing class field. */\n public static get extra_subclasses(): Set<typeof CodeReader> {\n return this.extraSubclasses;\n }\n\n public static set extra_subclasses(value: Set<typeof CodeReader>) {\n this.extraSubclasses = value;\n }\n\n public static controlFlowKeywords: ReadonlySet<string> = new Set([\"if\", \"for\", \"while\", \"catch\"]);\n public static logicalOperators: ReadonlySet<string> = new Set([\"&&\", \"||\"]);\n public static caseKeywords: ReadonlySet<string> = new Set([\"case\"]);\n public static ternaryOperators: ReadonlySet<string> = new Set([\"?\"]);\n\n /** Source class-level condition categories retain their source spellings. */\n public static get _control_flow_keywords(): ReadonlySet<string> {\n return this.controlFlowKeywords;\n }\n\n public static set _control_flow_keywords(value: ReadonlySet<string>) {\n this.controlFlowKeywords = value;\n }\n\n public static get _logical_operators(): ReadonlySet<string> {\n return this.logicalOperators;\n }\n\n public static set _logical_operators(value: ReadonlySet<string>) {\n this.logicalOperators = value;\n }\n\n public static get _case_keywords(): ReadonlySet<string> {\n return this.caseKeywords;\n }\n\n public static set _case_keywords(value: ReadonlySet<string>) {\n this.caseKeywords = value;\n }\n\n public static get _ternary_operators(): ReadonlySet<string> {\n return this.ternaryOperators;\n }\n\n public static set _ternary_operators(value: ReadonlySet<string>) {\n this.ternaryOperators = value;\n }\n\n public conditions: Set<string>;\n public controlFlowKeywords: Set<string>;\n public logicalOperators: Set<string>;\n public caseKeywords: Set<string>;\n public ternaryOperators: Set<string>;\n public parallelStates: CodeStateMachine[] = [];\n public context: FileInfoBuilder;\n private readonly readerClass: typeof CodeReader;\n\n public constructor(context: FileInfoBuilder, readerDefinition?: ReaderDefinition) {\n this.readerClass = new.target;\n this.context = context;\n const definition = readerDefinition ?? this.readerClass;\n this.conditions = new Set(definition.buildConditions());\n this.controlFlowKeywords = new Set(definition.controlFlowKeywords);\n this.logicalOperators = new Set(definition.logicalOperators);\n this.caseKeywords = new Set(definition.caseKeywords);\n this.ternaryOperators = new Set(definition.ternaryOperators);\n }\n\n /** Source `parallel_states` shares the mutable per-reader state list. */\n public get parallel_states(): CodeStateMachine[] {\n return this.parallelStates;\n }\n\n public set parallel_states(value: CodeStateMachine[]) {\n this.parallelStates = value;\n }\n\n /** Python class attributes are visible through each reader instance. */\n public get languages(): unknown {\n return this.readerClass.languages;\n }\n\n public get extraSubclasses(): Set<typeof CodeReader> {\n return this.readerClass.extraSubclasses;\n }\n\n public get extra_subclasses(): Set<typeof CodeReader> {\n return this.extraSubclasses;\n }\n\n public get control_flow_keywords(): Set<string> {\n return this.controlFlowKeywords;\n }\n\n public set control_flow_keywords(value: Set<string>) {\n this.controlFlowKeywords = value;\n }\n\n public get logical_operators(): Set<string> {\n return this.logicalOperators;\n }\n\n public set logical_operators(value: Set<string>) {\n this.logicalOperators = value;\n }\n\n public get case_keywords(): Set<string> {\n return this.caseKeywords;\n }\n\n public set case_keywords(value: Set<string>) {\n this.caseKeywords = value;\n }\n\n public get ternary_operators(): Set<string> {\n return this.ternaryOperators;\n }\n\n public set ternary_operators(value: Set<string>) {\n this.ternaryOperators = value;\n }\n\n /** Python exposes the concrete class's ext through each reader instance. */\n public get ext(): readonly string[] {\n return this.readerClass.ext;\n }\n\n /** Python exposes the concrete class's language_names through each reader instance. */\n public get languageNames(): readonly string[] {\n return this.readerClass.languageNames;\n }\n\n /** Source `language_names` instance accessor, aliased to `languageNames`. */\n public get language_names(): readonly string[] {\n return this.languageNames;\n }\n\n public static buildConditions(this: typeof CodeReader): Set<string> {\n return new Set([\n ...this.controlFlowKeywords,\n ...this.logicalOperators,\n ...this.caseKeywords,\n ...this.ternaryOperators\n ]);\n }\n\n public static _build_conditions(this: typeof CodeReader): Set<string> {\n return this.buildConditions();\n }\n\n public static matchFilename(this: typeof CodeReader, filename: string): boolean {\n return new RegExp(`.*\\\\.(${this.ext.join(\"|\")})$`, \"iu\").test(filename);\n }\n\n public static match_filename(this: typeof CodeReader, filename: string): boolean {\n return this.matchFilename(filename);\n }\n\n /** The shared source-aligned tokenizer used by all language readers. */\n public static *generateTokens(\n sourceCode: string,\n addition = \"\",\n tokenFactory: TokenFactory = (match) => match.text\n ): Generator<string> {\n const { cleanedAddition, flags } = tokenizerFlags(addition);\n const untilEnd = String.raw`(?:\\\\\\n|[^\\n])*`;\n // Python's `[^\\\\S\\\\n]+` source fragment groups whitespace other than a\n // line-feed. Keep `\\\\n` as its own token even when it is adjacent to\n // horizontal/other Python whitespace; the C0 separators are recognised by\n // Python's `\\\\s` but not JavaScript's Unicode White_Space property.\n const pythonWhitespaceExceptLineFeed = `(?:(?!\\\\n)(?:\\\\p{White_Space}|[${C0_INFORMATION_SEPARATOR_PATTERN}]))`;\n const combinedSymbols = [\n \"<<=\",\n \">>=\",\n \"||\",\n \"&&\",\n \"===\",\n \"!==\",\n \"==\",\n \"!=\",\n \"<=\",\n \">=\",\n \"->\",\n \"=>\",\n \"++\",\n \"--\",\n \"+=\",\n \"-=\",\n \"+\",\n \"-\",\n \"*\",\n \"/\",\n \"*=\",\n \"/=\",\n \"^=\",\n \"&=\",\n \"|=\",\n \"...\"\n ];\n const tokenPattern = new RegExp(\n \"(?:\" +\n String.raw`\\/\\*.*?\\*\\/` +\n cleanedAddition +\n String.raw`|(?:\\d+')+\\d+` +\n String.raw`|0x(?:[0-9A-Fa-f]+')+[0-9A-Fa-f]+` +\n String.raw`|0b(?:[01]+')+[01]+` +\n String.raw`|[\\p{L}\\p{N}_]+` +\n String.raw`|\"(?:\\\\.|[^\"\\\\])*\"` +\n String.raw`|'(?:\\\\.|[^'\\\\])*?'` +\n String.raw`|\\/\\/` +\n untilEnd +\n String.raw`|#` +\n String.raw`|:=|::|\\*\\*` +\n String.raw`|<(?=(?:[^<>?]*\\?)+[^<>]*>)(?:[\\w\\s,.?]|(?:extends))+>` +\n `|${combinedSymbols.map(escapeRegex).join(\"|\")}` +\n String.raw`|\\\\\\n|\\n|` +\n `${pythonWhitespaceExceptLineFeed}+` +\n String.raw`|.)`,\n flags\n );\n\n let macro = \"\";\n for (const match of sourceCode.matchAll(tokenPattern)) {\n const token = tokenFactory(new TokenMatch(match[0], match.index));\n if (macro) {\n if (token.includes(\"\\\\\\n\") || !token.includes(\"\\n\")) {\n macro += token;\n } else {\n yield macro;\n yield token;\n macro = \"\";\n }\n } else if (token === \"#\") {\n macro = token;\n } else {\n yield token;\n }\n }\n if (macro) yield macro;\n }\n\n public static generate_tokens(\n sourceCode: string,\n addition = \"\",\n tokenFactory: TokenFactory = (match) => match.text\n ): TokenStream {\n return this.generateTokens(sourceCode, addition, tokenFactory);\n }\n\n /** Source `CodeReader.__call__` updates context before draining the reader pipeline. */\n public __call__(tokens: TokenStream, reader: AnalyzerReader): TokenStream {\n this.context = reader.context;\n return this.process(tokens);\n }\n\n public *process(tokens: TokenStream): Generator<string> {\n for (const token of tokens) {\n if (this.process_token(token)) {\n for (const state of this.parallelStates) state.consume(token);\n yield token;\n continue;\n }\n\n for (const state of this.parallelStates) state.consume(token);\n yield token;\n }\n for (const state of this.parallelStates) state.statemachine_before_return();\n this.eof();\n }\n\n public get_comment_from_token(_token: string): string | undefined {\n return undefined;\n }\n\n /** TS-facing analyzer interface alias for the source reader hook. */\n public getCommentFromToken(token: string): string | undefined {\n return this.get_comment_from_token(token);\n }\n\n public eof(): void {}\n\n /** Return true only when a reader intentionally bypasses normal state work. */\n public process_token(_token: string): boolean {\n return false;\n }\n\n /** TS-facing alias retained for the AnalyzerReader host interface. */\n public processToken(token: string): boolean {\n return this.process_token(token);\n }\n}\n\nfunction tokenizerFlags(addition: string): {\n readonly cleanedAddition: string;\n readonly flags: string;\n} {\n const inlineFlagPattern = /\\(\\?[aiLmsux]+\\)/gu;\n const inlineFlags = Array.from(addition.matchAll(inlineFlagPattern)).flatMap((match) =>\n (match[0] ?? \"\").slice(2, -1).split(\"\")\n );\n const supportedFlags = new Set([\"g\", \"m\", \"s\", \"u\"]);\n if (inlineFlags.includes(\"i\")) supportedFlags.add(\"i\");\n return {\n cleanedAddition: normalizePythonRegex(addition.replace(inlineFlagPattern, \"\")),\n flags: Array.from(supportedFlags).join(\"\")\n };\n}\n\nfunction isC0InformationSeparator(character: string): boolean {\n const codePoint = character.codePointAt(0);\n return (\n codePoint !== undefined &&\n codePoint >= C0_INFORMATION_SEPARATOR_FIRST &&\n codePoint <= C0_INFORMATION_SEPARATOR_LAST\n );\n}\n\nfunction pythonLineBoundaryLengthAt(value: string, index: number): number {\n const codePoint = value.codePointAt(index);\n if (codePoint === 0x0d) return value.codePointAt(index + 1) === 0x0a ? 2 : 1;\n if (codePoint === 0x0a || codePoint === 0x0b || codePoint === 0x0c) return 1;\n if (\n codePoint !== undefined &&\n codePoint >= C0_INFORMATION_SEPARATOR_FIRST &&\n codePoint <= C0_LINE_SEPARATOR_LAST\n ) {\n return 1;\n }\n return codePoint === 0x85 || codePoint === 0x2028 || codePoint === 0x2029 ? 1 : 0;\n}\n\n/**\n * Lizard's language additions are Python regex fragments. Python accepts a\n * backslash before punctuation such as `!`, while a JavaScript Unicode regex\n * rejects that identity escape; those escapes are literals in both engines.\n */\nfunction normalizePythonRegex(pattern: string): string {\n return pattern.replace(/\\\\([^\\\\^$.*+?()[\\]{}|/bBdDsSwWpPxucfnrtv0-9])/gu, \"$1\");\n}\n\nfunction escapeRegex(value: string): string {\n return value.replace(/[|\\\\{}()[\\]^$+*?.]/gu, \"\\\\$&\");\n}\n"]}
|
|
1
|
+
{"version":3,"file":"code-reader.mjs","sourceRoot":"","sources":["../../../../../../src/package-checks/function-metrics/analyzer/shared/code-reader.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Derived from terryyin/lizard 1.24.0.\n * Source: lizard_languages/code_reader.py.\n * Upstream revision: 308b1c3efd8c1c69bcc3eb82deeaec64fd3662ec.\n * SPDX-License-Identifier: MIT\n * Modified: translated to TypeScript while retaining the tokenizer and\n * state-machine sequencing used by concrete Lizard language readers.\n */\n\nimport type { AnalyzerReader, TokenStream } from \"../contracts.ts\";\nimport type { FileInfoBuilder } from \"../analysis-context.ts\";\n\n/** A regex match passed to language-specific token factories. */\nexport class TokenMatch {\n public readonly text: string;\n public readonly startOffset: number;\n\n public constructor(text: string, startOffset: number) {\n this.text = text;\n this.startOffset = startOffset;\n }\n\n /** Python's re.Match.group(0), retained for direct reader translations. */\n public group(index = 0): string | undefined {\n return index === 0 ? this.text : undefined;\n }\n\n /** Python's re.Match.start(), retained for direct reader translations. */\n public start(): number {\n return this.startOffset;\n }\n}\n\n/** Converts one tokenizer match into the token stream representation. */\nexport type TokenFactory = (match: TokenMatch) => string;\n\nexport type StateHandler = (this: CodeStateMachine, token: string) => boolean | void;\nexport type UntilStateHandler = (\n this: CodeStateMachine,\n token: string,\n savedTokens: readonly string[]\n) => boolean | void;\nexport type State = CodeStateMachine | StateHandler;\nexport type SourceStateHandler = (state: CodeStateMachine, token: string) => boolean | void;\nexport type SourceUntilStateHandler = (\n state: CodeStateMachine,\n token: string,\n savedTokens: string[]\n) => boolean | void;\n\nconst PYTHON_UNICODE_WHITESPACE = /^\\p{White_Space}$/u;\nconst C0_INFORMATION_SEPARATOR_FIRST = 0x1c;\nconst C0_INFORMATION_SEPARATOR_LAST = 0x1f;\nconst C0_LINE_SEPARATOR_LAST = 0x1e;\nconst C0_INFORMATION_SEPARATOR_PATTERN =\n `${String.fromCodePoint(C0_INFORMATION_SEPARATOR_FIRST)}-` +\n String.fromCodePoint(C0_INFORMATION_SEPARATOR_LAST);\n\nexport interface ReaderDefinition {\n readonly controlFlowKeywords: ReadonlySet<string>;\n readonly logicalOperators: ReadonlySet<string>;\n readonly caseKeywords: ReadonlySet<string>;\n readonly ternaryOperators: ReadonlySet<string>;\n buildConditions(): Set<string>;\n}\n\n/** Python str.isspace(), including its four extra C0 information separators. */\nexport function isPythonWhitespace(value: string): boolean {\n return (\n value.length > 0 &&\n Array.from(value).every(\n (character) =>\n PYTHON_UNICODE_WHITESPACE.test(character) || isC0InformationSeparator(character)\n )\n );\n}\n\n/** Python str.splitlines() without retaining source line-boundary characters. */\nexport function splitPythonLines(value: string): string[] {\n if (value.length === 0) return [];\n\n const lines: string[] = [];\n let lineStart = 0;\n let index = 0;\n while (index < value.length) {\n const boundaryLength = pythonLineBoundaryLengthAt(value, index);\n if (boundaryLength === 0) {\n index += 1;\n continue;\n }\n lines.push(value.slice(lineStart, index));\n index += boundaryLength;\n lineStart = index;\n }\n if (lineStart < value.length) lines.push(value.slice(lineStart));\n return lines;\n}\n\n/**\n * The small state-machine foundation used by source-aligned language readers.\n * It deliberately preserves upstream's one saved sub-state and callback slot.\n */\nexport class CodeStateMachine {\n public context: FileInfoBuilder;\n public lastToken: string | undefined;\n protected state: State;\n protected savedState: State;\n protected toExit = false;\n public callback: (() => void) | undefined;\n protected readUntilTokens: string[] = [];\n protected bracketCount = 0;\n protected readonly stateMachineConstructor: typeof CodeStateMachine;\n protected readonly globalState: StateHandler = (token) => {\n this._state_global(token);\n };\n\n public constructor(context: FileInfoBuilder) {\n this.stateMachineConstructor = new.target;\n this.context = context;\n this.state = this.globalState;\n this.savedState = this.globalState;\n }\n\n /** Source field aliases retain one state slot for translated state machines. */\n public get saved_state(): State {\n return this.savedState;\n }\n\n public set saved_state(value: State) {\n this.savedState = value;\n }\n\n public get _state(): State {\n return this.state;\n }\n\n public set _state(value: State) {\n this.state = value;\n }\n\n public get last_token(): string | undefined {\n return this.lastToken;\n }\n\n public set last_token(value: string | undefined) {\n this.lastToken = value;\n }\n\n public get to_exit(): boolean {\n return this.toExit;\n }\n\n public set to_exit(value: boolean) {\n this.toExit = value;\n }\n\n public get rut_tokens(): string[] {\n return this.readUntilTokens;\n }\n\n public set rut_tokens(value: string[]) {\n this.readUntilTokens = value;\n }\n\n public get br_count(): number {\n return this.bracketCount;\n }\n\n public set br_count(value: number) {\n this.bracketCount = value;\n }\n\n /** TS-facing alias for the source clone hook. */\n public cloneState(): CodeStateMachine {\n return this.statemachine_clone();\n }\n\n /** Equivalent to Python's statemachine_clone. */\n public statemachine_clone(): CodeStateMachine {\n return new this.stateMachineConstructor(this.context);\n }\n\n public next(state: State, token?: string): boolean | void {\n this.state = state;\n if (token !== undefined) return this.consume(token);\n }\n\n public nextIf(state: State, token: string, expected: string): boolean | void {\n if (token === expected) return this.next(state, token);\n }\n\n public next_if(state: State, token: string, expected: string): boolean | void {\n return this.nextIf(state, token, expected);\n }\n\n public returnFromState(): void {\n this.toExit = true;\n this.statemachine_before_return();\n }\n\n public statemachine_return(): void {\n this.returnFromState();\n }\n\n public subState(state: State, callback?: () => void, token?: string): boolean | void {\n this.savedState = this.state;\n this.callback = callback;\n return this.next(state, token);\n }\n\n public sub_state(state: State, callback?: () => void, token?: string): boolean | void {\n return this.subState(state, callback, token);\n }\n\n /** Feed one token through the current state. */\n public consume(token: string): boolean {\n const completed = this.invokeCurrentState(token);\n if (completed) {\n this.next(this.savedState);\n // Keep the source ordering: a callback installed by this callback is\n // still cleared afterwards, because CodeStateMachine has one callback\n // slot rather than a callback stack.\n this.callback?.();\n this.callback = undefined;\n }\n this.lastToken = token;\n return this.toExit;\n }\n\n /** Invoke only the current state; ExtensionBase retains this upstream seam. */\n protected invokeCurrentState(token: string): boolean {\n return this.state instanceof CodeStateMachine\n ? this.state.consume(token)\n : Boolean(this.state.call(this, token));\n }\n\n /** TS-facing state hook used by existing translated reader subclasses. */\n protected stateGlobal(_token: string): void {}\n\n /** Source readers/extensions may retain this source-spelled state hook. */\n public _state_global(token: string): void {\n this.stateGlobal(token);\n }\n\n /** Source readers/extensions may retain this source-spelled return hook. */\n public statemachine_before_return(): void {}\n\n /** TS-facing alias for the source pre-return hook. */\n public beforeReturn(): void {\n this.statemachine_before_return();\n }\n\n /** Source decorator factory retained for translated reader/extension state methods. */\n public static read_inside_brackets_then(\n brackets: string,\n endState?: string\n ): (action: SourceStateHandler) => StateHandler {\n return (action) =>\n function readUntilMatchingBrackets(this: CodeStateMachine, token: string): void {\n const [openingBracket, closingBracket] = brackets;\n if (token === openingBracket) this.br_count += 1;\n else if (token === closingBracket) this.br_count -= 1;\n\n if (this.br_count === 0 || endState !== undefined) action(this, token);\n if (this.br_count === 0 && endState !== undefined) {\n this.next(readSourceState(this, endState));\n }\n };\n }\n\n /** Source decorator factory retained for translated reader/extension state methods. */\n public static read_until_then(tokens: string): (action: SourceUntilStateHandler) => StateHandler {\n return (action) =>\n function readUntilThenToken(this: CodeStateMachine, token: string): void {\n if (tokens.includes(token)) {\n action(this, token, this.rut_tokens);\n this.rut_tokens = [];\n return;\n }\n this.rut_tokens.push(token);\n };\n }\n\n /**\n * Source-aligned replacement for read_inside_brackets_then. Call from a\n * reader state for the token currently being consumed.\n */\n protected readInsideBracketsThen(\n brackets: string,\n token: string,\n action: StateHandler,\n endState?: State\n ): void {\n const [openingBracket, closingBracket] = brackets;\n if (token === openingBracket) this.bracketCount += 1;\n else if (token === closingBracket) this.bracketCount -= 1;\n\n if (this.bracketCount === 0 || endState !== undefined) {\n action.call(this, token);\n }\n if (this.bracketCount === 0 && endState !== undefined) this.next(endState);\n }\n\n /** Source-aligned replacement for read_until_then. */\n protected readUntilThen(stopTokens: string, token: string, action: UntilStateHandler): void {\n if (stopTokens.includes(token)) {\n const savedTokens = this.readUntilTokens;\n action.call(this, token, savedTokens);\n this.readUntilTokens = [];\n return;\n }\n this.readUntilTokens.push(token);\n }\n}\n\nfunction readSourceState(stateMachine: CodeStateMachine, name: string): State {\n const state: unknown = Reflect.get(stateMachine, name);\n if (state instanceof CodeStateMachine || isStateHandler(state)) return state;\n throw new TypeError(`CodeStateMachine source state '${name}' is not callable.`);\n}\n\nfunction isStateHandler(value: unknown): value is StateHandler {\n return typeof value === \"function\";\n}\n\n/** Base tokenizer and state fan-out used by all translated concrete readers. */\nexport class CodeReader implements AnalyzerReader {\n public static ext: readonly string[] = [];\n public static languages: unknown = undefined;\n public static languageNames: readonly string[] = [];\n\n /** Source `language_names` shares storage with the TS-facing class field. */\n public static get language_names(): readonly string[] {\n return this.languageNames;\n }\n\n public static set language_names(value: readonly string[]) {\n this.languageNames = value;\n }\n\n public static extraSubclasses = new Set<typeof CodeReader>();\n\n /** Source `extra_subclasses` shares storage with the TS-facing class field. */\n public static get extra_subclasses(): Set<typeof CodeReader> {\n return this.extraSubclasses;\n }\n\n public static set extra_subclasses(value: Set<typeof CodeReader>) {\n this.extraSubclasses = value;\n }\n\n public static controlFlowKeywords: ReadonlySet<string> = new Set([\"if\", \"for\", \"while\", \"catch\"]);\n public static logicalOperators: ReadonlySet<string> = new Set([\"&&\", \"||\"]);\n public static caseKeywords: ReadonlySet<string> = new Set([\"case\"]);\n public static ternaryOperators: ReadonlySet<string> = new Set([\"?\"]);\n\n /** Source class-level condition categories retain their source spellings. */\n public static get _control_flow_keywords(): ReadonlySet<string> {\n return this.controlFlowKeywords;\n }\n\n public static set _control_flow_keywords(value: ReadonlySet<string>) {\n this.controlFlowKeywords = value;\n }\n\n public static get _logical_operators(): ReadonlySet<string> {\n return this.logicalOperators;\n }\n\n public static set _logical_operators(value: ReadonlySet<string>) {\n this.logicalOperators = value;\n }\n\n public static get _case_keywords(): ReadonlySet<string> {\n return this.caseKeywords;\n }\n\n public static set _case_keywords(value: ReadonlySet<string>) {\n this.caseKeywords = value;\n }\n\n public static get _ternary_operators(): ReadonlySet<string> {\n return this.ternaryOperators;\n }\n\n public static set _ternary_operators(value: ReadonlySet<string>) {\n this.ternaryOperators = value;\n }\n\n public conditions: Set<string>;\n public controlFlowKeywords: Set<string>;\n public logicalOperators: Set<string>;\n public caseKeywords: Set<string>;\n public ternaryOperators: Set<string>;\n public parallelStates: CodeStateMachine[] = [];\n public context: FileInfoBuilder;\n private readonly readerClass: typeof CodeReader;\n\n public constructor(context: FileInfoBuilder, readerDefinition?: ReaderDefinition) {\n this.readerClass = new.target;\n this.context = context;\n const definition = readerDefinition ?? this.readerClass;\n this.conditions = new Set(definition.buildConditions());\n this.controlFlowKeywords = new Set(definition.controlFlowKeywords);\n this.logicalOperators = new Set(definition.logicalOperators);\n this.caseKeywords = new Set(definition.caseKeywords);\n this.ternaryOperators = new Set(definition.ternaryOperators);\n }\n\n /** Source `parallel_states` shares the mutable per-reader state list. */\n public get parallel_states(): CodeStateMachine[] {\n return this.parallelStates;\n }\n\n public set parallel_states(value: CodeStateMachine[]) {\n this.parallelStates = value;\n }\n\n /** Python class attributes are visible through each reader instance. */\n public get languages(): unknown {\n return this.readerClass.languages;\n }\n\n public get extraSubclasses(): Set<typeof CodeReader> {\n return this.readerClass.extraSubclasses;\n }\n\n public get extra_subclasses(): Set<typeof CodeReader> {\n return this.extraSubclasses;\n }\n\n public get control_flow_keywords(): Set<string> {\n return this.controlFlowKeywords;\n }\n\n public set control_flow_keywords(value: Set<string>) {\n this.controlFlowKeywords = value;\n }\n\n public get logical_operators(): Set<string> {\n return this.logicalOperators;\n }\n\n public set logical_operators(value: Set<string>) {\n this.logicalOperators = value;\n }\n\n public get case_keywords(): Set<string> {\n return this.caseKeywords;\n }\n\n public set case_keywords(value: Set<string>) {\n this.caseKeywords = value;\n }\n\n public get ternary_operators(): Set<string> {\n return this.ternaryOperators;\n }\n\n public set ternary_operators(value: Set<string>) {\n this.ternaryOperators = value;\n }\n\n /** Python exposes the concrete class's ext through each reader instance. */\n public get ext(): readonly string[] {\n return this.readerClass.ext;\n }\n\n /** Python exposes the concrete class's language_names through each reader instance. */\n public get languageNames(): readonly string[] {\n return this.readerClass.languageNames;\n }\n\n /** Source `language_names` instance accessor, aliased to `languageNames`. */\n public get language_names(): readonly string[] {\n return this.languageNames;\n }\n\n public static buildConditions(this: typeof CodeReader): Set<string> {\n return new Set([\n ...this.controlFlowKeywords,\n ...this.logicalOperators,\n ...this.caseKeywords,\n ...this.ternaryOperators\n ]);\n }\n\n public static _build_conditions(this: typeof CodeReader): Set<string> {\n return this.buildConditions();\n }\n\n public static matchFilename(this: typeof CodeReader, filename: string): boolean {\n return new RegExp(`.*\\\\.(${this.ext.join(\"|\")})$`, \"iu\").test(filename);\n }\n\n public static match_filename(this: typeof CodeReader, filename: string): boolean {\n return this.matchFilename(filename);\n }\n\n /** The shared source-aligned tokenizer used by all language readers. */\n public static *generateTokens(\n sourceCode: string,\n addition = \"\",\n tokenFactory: TokenFactory = (match) => match.text\n ): Generator<string> {\n const { cleanedAddition, flags } = tokenizerFlags(addition);\n const untilEnd = String.raw`(?:\\\\\\n|[^\\n])*`;\n // Python's `[^\\\\S\\\\n]+` source fragment groups whitespace other than a\n // line-feed. Keep `\\\\n` as its own token even when it is adjacent to\n // horizontal/other Python whitespace; the C0 separators are recognised by\n // Python's `\\\\s` but not JavaScript's Unicode White_Space property.\n const pythonWhitespaceExceptLineFeed = `(?:(?!\\\\n)(?:\\\\p{White_Space}|[${C0_INFORMATION_SEPARATOR_PATTERN}]))`;\n const combinedSymbols = [\n \"<<=\",\n \">>=\",\n \"||\",\n \"&&\",\n \"===\",\n \"!==\",\n \"==\",\n \"!=\",\n \"<=\",\n \">=\",\n \"->\",\n \"=>\",\n \"++\",\n \"--\",\n \"+=\",\n \"-=\",\n \"+\",\n \"-\",\n \"*\",\n \"/\",\n \"*=\",\n \"/=\",\n \"^=\",\n \"&=\",\n \"|=\",\n \"...\"\n ];\n const tokenPattern = new RegExp(\n \"(?:\" +\n String.raw`\\/\\*.*?\\*\\/` +\n cleanedAddition +\n String.raw`|(?:\\d+')+\\d+` +\n String.raw`|0x(?:[0-9A-Fa-f]+')+[0-9A-Fa-f]+` +\n String.raw`|0b(?:[01]+')+[01]+` +\n String.raw`|[\\p{L}\\p{N}_]+` +\n String.raw`|\"(?:\\\\.|[^\"\\\\])*\"` +\n String.raw`|'(?:\\\\.|[^'\\\\])*?'` +\n String.raw`|\\/\\/` +\n untilEnd +\n String.raw`|#` +\n String.raw`|:=|::|\\*\\*` +\n String.raw`|<(?=(?:[^<>?]*\\?)+[^<>]*>)(?:[\\w\\s,.?]|(?:extends))+>` +\n `|${combinedSymbols.map(escapeRegex).join(\"|\")}` +\n String.raw`|\\\\\\n|\\n|` +\n `${pythonWhitespaceExceptLineFeed}+` +\n String.raw`|.)`,\n flags\n );\n\n let macro = \"\";\n for (const match of sourceCode.matchAll(tokenPattern)) {\n const token = tokenFactory(new TokenMatch(match[0], match.index));\n if (macro) {\n if (token.includes(\"\\\\\\n\") || !token.includes(\"\\n\")) {\n macro += token;\n } else {\n yield macro;\n yield token;\n macro = \"\";\n }\n } else if (token === \"#\") {\n macro = token;\n } else {\n yield token;\n }\n }\n if (macro) yield macro;\n }\n\n public static generate_tokens(\n sourceCode: string,\n addition = \"\",\n tokenFactory: TokenFactory = (match) => match.text\n ): TokenStream {\n return this.generateTokens(sourceCode, addition, tokenFactory);\n }\n\n /** Source `CodeReader.__call__` updates context before draining the reader pipeline. */\n public __call__(tokens: TokenStream, reader: AnalyzerReader): TokenStream {\n this.context = reader.context;\n return this.process(tokens);\n }\n\n public *process(tokens: TokenStream): Generator<string> {\n for (const token of tokens) {\n if (this.process_token(token)) {\n for (const state of this.parallelStates) state.consume(token);\n yield token;\n continue;\n }\n\n for (const state of this.parallelStates) state.consume(token);\n yield token;\n }\n for (const state of this.parallelStates) state.statemachine_before_return();\n this.eof();\n }\n\n public get_comment_from_token(_token: string): string | undefined {\n return undefined;\n }\n\n /** TS-facing analyzer interface alias for the source reader hook. */\n public getCommentFromToken(token: string): string | undefined {\n return this.get_comment_from_token(token);\n }\n\n public eof(): void {}\n\n /** Return true only when a reader intentionally bypasses normal state work. */\n public process_token(_token: string): boolean {\n return false;\n }\n\n /** TS-facing alias retained for the AnalyzerReader host interface. */\n public processToken(token: string): boolean {\n return this.process_token(token);\n }\n}\n\nfunction tokenizerFlags(addition: string): {\n readonly cleanedAddition: string;\n readonly flags: string;\n} {\n const inlineFlagPattern = /\\(\\?[aiLmsux]+\\)/gu;\n const inlineFlags = Array.from(addition.matchAll(inlineFlagPattern)).flatMap((match) =>\n (match[0] ?? \"\").slice(2, -1).split(\"\")\n );\n const supportedFlags = new Set([\"g\", \"m\", \"s\", \"u\"]);\n if (inlineFlags.includes(\"i\")) supportedFlags.add(\"i\");\n return {\n cleanedAddition: normalizePythonRegex(addition.replace(inlineFlagPattern, \"\")),\n flags: Array.from(supportedFlags).join(\"\")\n };\n}\n\nfunction isC0InformationSeparator(character: string): boolean {\n const codePoint = character.codePointAt(0);\n return (\n codePoint !== undefined &&\n codePoint >= C0_INFORMATION_SEPARATOR_FIRST &&\n codePoint <= C0_INFORMATION_SEPARATOR_LAST\n );\n}\n\nfunction pythonLineBoundaryLengthAt(value: string, index: number): number {\n const codePoint = value.codePointAt(index);\n if (codePoint === 0x0d) return value.codePointAt(index + 1) === 0x0a ? 2 : 1;\n if (codePoint === 0x0a || codePoint === 0x0b || codePoint === 0x0c) return 1;\n if (\n codePoint !== undefined &&\n codePoint >= C0_INFORMATION_SEPARATOR_FIRST &&\n codePoint <= C0_LINE_SEPARATOR_LAST\n ) {\n return 1;\n }\n return codePoint === 0x85 || codePoint === 0x2028 || codePoint === 0x2029 ? 1 : 0;\n}\n\n/**\n * Lizard's language additions are Python regex fragments. Python accepts a\n * backslash before punctuation such as `!`, while a JavaScript Unicode regex\n * rejects that identity escape; those escapes are literals in both engines.\n */\nfunction normalizePythonRegex(pattern: string): string {\n return pattern.replace(/\\\\([^\\\\^$.*+?()[\\]{}|/bBdDsSwWpPxucfnrtv0-9])/gu, \"$1\");\n}\n\nfunction escapeRegex(value: string): string {\n return value.replace(/[|\\\\{}()[\\]^$+*?.]/gu, \"\\\\$&\");\n}\n"]}
|
|
@@ -27,15 +27,22 @@ export function js_style_regex_expression(generator) {
|
|
|
27
27
|
if (isRegex) {
|
|
28
28
|
const regexTokens = [token];
|
|
29
29
|
index += 1;
|
|
30
|
-
while (index < tokens.length
|
|
31
|
-
|
|
30
|
+
while (index < tokens.length) {
|
|
31
|
+
const nextToken = tokens[index];
|
|
32
|
+
if (nextToken === undefined || nextToken.endsWith("/"))
|
|
33
|
+
break;
|
|
34
|
+
regexTokens.push(nextToken);
|
|
32
35
|
index += 1;
|
|
33
36
|
}
|
|
34
37
|
if (index < tokens.length) {
|
|
35
|
-
|
|
38
|
+
const closingToken = tokens[index];
|
|
39
|
+
if (closingToken === undefined)
|
|
40
|
+
break;
|
|
41
|
+
regexTokens.push(closingToken);
|
|
36
42
|
index += 1;
|
|
37
|
-
|
|
38
|
-
|
|
43
|
+
const flags = tokens[index];
|
|
44
|
+
if (flags !== undefined && /^[igm]+$/u.test(flags)) {
|
|
45
|
+
regexTokens.push(flags);
|
|
39
46
|
index += 1;
|
|
40
47
|
}
|
|
41
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"js-style-regex.mjs","sourceRoot":"","sources":["../../../../../../src/package-checks/function-metrics/analyzer/shared/js-style-regex.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAWH;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,SAAyB;IACjE,OAAO,QAAQ,CAAC,CAAC,uBAAuB,CACtC,UAAkB,EAClB,QAAQ,GAAG,EAAE,EACb,YAA2B;QAE3B,MAAM,YAAY,GAAG,4BAA4B,CAAC;QAClD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;QACzE,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,OAAO,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;gBAClB,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;gBAChD,MAAM,OAAO,GACX,KAAK,KAAK,CAAC;oBACX,CAAC,aAAa,KAAK,SAAS;wBAC1B,aAAa,CAAC,MAAM,GAAG,CAAC;wBACxB,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBACxD,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,CAAC;oBAC5B,KAAK,IAAI,CAAC,CAAC;oBACX,OAAO,KAAK,GAAG,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"js-style-regex.mjs","sourceRoot":"","sources":["../../../../../../src/package-checks/function-metrics/analyzer/shared/js-style-regex.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAWH;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,SAAyB;IACjE,OAAO,QAAQ,CAAC,CAAC,uBAAuB,CACtC,UAAkB,EAClB,QAAQ,GAAG,EAAE,EACb,YAA2B;QAE3B,MAAM,YAAY,GAAG,4BAA4B,CAAC;QAClD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;QACzE,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,OAAO,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;gBAClB,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;gBAChD,MAAM,OAAO,GACX,KAAK,KAAK,CAAC;oBACX,CAAC,aAAa,KAAK,SAAS;wBAC1B,aAAa,CAAC,MAAM,GAAG,CAAC;wBACxB,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBACxD,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,CAAC;oBAC5B,KAAK,IAAI,CAAC,CAAC;oBACX,OAAO,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;wBAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;wBAChC,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;4BAAE,MAAM;wBAC9D,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBAC5B,KAAK,IAAI,CAAC,CAAC;oBACb,CAAC;oBACD,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;wBAC1B,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;wBACnC,IAAI,YAAY,KAAK,SAAS;4BAAE,MAAM;wBACtC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;wBAC/B,KAAK,IAAI,CAAC,CAAC;wBACX,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;wBAC5B,IAAI,KAAK,KAAK,SAAS,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;4BACnD,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;4BACxB,KAAK,IAAI,CAAC,CAAC;wBACb,CAAC;oBACH,CAAC;oBACD,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACtC,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC;wBAC7C,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACxB,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;oBAC9B,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;YACD,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;QAED,KAAK,CAAC,CAAC,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Derived from terryyin/lizard 1.24.0.\n * Source: lizard_languages/js_style_regex_expression.py.\n * Upstream revision: 308b1c3efd8c1c69bcc3eb82deeaec64fd3662ec.\n * SPDX-License-Identifier: MIT\n * Modified: translated to a TypeScript tokenizer wrapper while preserving the\n * upstream eager regex-token combination order.\n */\n\nimport type { TokenFactory } from \"./code-reader.ts\";\n\n/** A static reader tokenizer shape accepted by the JavaScript regex wrapper. */\nexport type TokenGenerator = (\n sourceCode: string,\n addition?: string,\n tokenFactory?: TokenFactory\n) => Generator<string>;\n\n/**\n * Wrap a tokenizer with Lizard's JavaScript-style regular-expression joining.\n * The final index advance intentionally mirrors the upstream implementation.\n */\nexport function js_style_regex_expression(generator: TokenGenerator): TokenGenerator {\n return function* generateTokensWithRegex(\n sourceCode: string,\n addition = \"\",\n tokenFactory?: TokenFactory\n ): Generator<string> {\n const regexPattern = /\\/(\\S*?[^\\s\\\\]\\/)+?(igm)*/u;\n const tokens = Array.from(generator(sourceCode, addition, tokenFactory));\n const result: string[] = [];\n let index = 0;\n\n while (index < tokens.length) {\n const token = tokens[index];\n if (token === \"/\") {\n const previousToken = tokens[index - 1]?.trim();\n const isRegex =\n index === 0 ||\n (previousToken !== undefined &&\n previousToken.length > 0 &&\n \"=,({[?:!&|;\".includes(previousToken.at(-1) ?? \"\"));\n if (isRegex) {\n const regexTokens = [token];\n index += 1;\n while (index < tokens.length) {\n const nextToken = tokens[index];\n if (nextToken === undefined || nextToken.endsWith(\"/\")) break;\n regexTokens.push(nextToken);\n index += 1;\n }\n if (index < tokens.length) {\n const closingToken = tokens[index];\n if (closingToken === undefined) break;\n regexTokens.push(closingToken);\n index += 1;\n const flags = tokens[index];\n if (flags !== undefined && /^[igm]+$/u.test(flags)) {\n regexTokens.push(flags);\n index += 1;\n }\n }\n const combined = regexTokens.join(\"\");\n if (regexPattern.exec(combined)?.index === 0) {\n result.push(combined);\n } else {\n result.push(...regexTokens);\n }\n } else {\n result.push(token);\n }\n } else if (token !== undefined) {\n result.push(token);\n }\n index += 1;\n }\n\n yield* result;\n };\n}\n"]}
|
|
@@ -3,7 +3,9 @@ import { Worker } from "node:worker_threads";
|
|
|
3
3
|
export function createNodeFunctionMetricsWorker() {
|
|
4
4
|
const worker = new Worker(new URL("./analyzer-worker.mjs", import.meta.url));
|
|
5
5
|
return Object.freeze({
|
|
6
|
-
postMessage: (value) =>
|
|
6
|
+
postMessage: (value) => {
|
|
7
|
+
worker.postMessage(value);
|
|
8
|
+
},
|
|
7
9
|
subscribe: (listeners) => {
|
|
8
10
|
worker.once("message", listeners.message);
|
|
9
11
|
worker.once("error", listeners.error);
|
|
@@ -40,19 +42,29 @@ export async function analyzeAdmittedSources(request, approvedExactPaths, signal
|
|
|
40
42
|
worker.terminate();
|
|
41
43
|
resolveResult(result);
|
|
42
44
|
};
|
|
43
|
-
const cancelled = () =>
|
|
45
|
+
const cancelled = () => {
|
|
46
|
+
finish(Object.freeze({ kind: "cancelled" }));
|
|
47
|
+
};
|
|
44
48
|
unsubscribe = worker.subscribe({
|
|
45
|
-
error: () =>
|
|
46
|
-
|
|
49
|
+
error: () => {
|
|
50
|
+
finish(Object.freeze({ kind: "analysis-failed" }));
|
|
51
|
+
},
|
|
52
|
+
exit: () => {
|
|
53
|
+
finish(Object.freeze({ kind: "analysis-failed" }));
|
|
54
|
+
},
|
|
47
55
|
message: (value) => {
|
|
48
|
-
if (signal.aborted)
|
|
49
|
-
|
|
56
|
+
if (signal.aborted) {
|
|
57
|
+
cancelled();
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
50
60
|
finish(parseWorkerResponse(value, approvedExactPaths));
|
|
51
61
|
}
|
|
52
62
|
});
|
|
53
63
|
signal.addEventListener("abort", cancelled, { once: true });
|
|
54
|
-
if (signal.aborted)
|
|
55
|
-
|
|
64
|
+
if (signal.aborted) {
|
|
65
|
+
cancelled();
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
56
68
|
try {
|
|
57
69
|
worker.postMessage(request);
|
|
58
70
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzer-worker-port.mjs","sourceRoot":"","sources":["../../../../src/package-checks/function-metrics/analyzer-worker-port.ts"],"names":[],"mappings":"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","sourcesContent":["import { Worker } from \"node:worker_threads\";\n\nimport type {\n FunctionMetricsAnalysisWorkerRequest,\n FunctionMetricsAnalysisWorkerResponse\n} from \"./analyzer-worker-contract.ts\";\nimport type { FunctionMetric } from \"./measurement-model.ts\";\n\ntype FunctionMetricsWorkerAnalysisResult = Readonly<\n | { kind: \"analysis-failed\" }\n | { kind: \"cancelled\" }\n | { kind: \"complete\"; metrics: readonly FunctionMetric[] }\n>;\n\nexport interface FunctionMetricsWorkerPort {\n readonly postMessage: (value: unknown) => void;\n readonly subscribe: (\n listeners: Readonly<{\n readonly error: () => void;\n readonly exit: (code: number) => void;\n readonly message: (value: unknown) => void;\n }>\n ) => () => void;\n readonly terminate: () => void;\n}\n\n/** Creates the private Node Worker transport for one admitted analyzer batch. */\nexport function createNodeFunctionMetricsWorker(): FunctionMetricsWorkerPort {\n const worker = new Worker(new URL(\"./analyzer-worker.ts\", import.meta.url));\n return Object.freeze({\n postMessage: (value: unknown): void => worker.postMessage(value),\n subscribe: (listeners: Parameters<FunctionMetricsWorkerPort[\"subscribe\"]>[0]): (() => void) => {\n worker.once(\"message\", listeners.message);\n worker.once(\"error\", listeners.error);\n worker.once(\"exit\", listeners.exit);\n return (): void => {\n worker.off(\"message\", listeners.message);\n worker.off(\"error\", listeners.error);\n worker.off(\"exit\", listeners.exit);\n };\n },\n terminate: (): void => {\n void worker.terminate().catch(() => undefined);\n }\n });\n}\n\n/** Runs one admitted batch through a Worker and settles its transport exactly once. */\nexport async function analyzeAdmittedSources(\n request: FunctionMetricsAnalysisWorkerRequest,\n approvedExactPaths: readonly string[],\n signal: AbortSignal,\n createWorker: () => FunctionMetricsWorkerPort\n): Promise<FunctionMetricsWorkerAnalysisResult> {\n let worker: FunctionMetricsWorkerPort;\n try {\n worker = createWorker();\n } catch {\n return Object.freeze({ kind: \"analysis-failed\" });\n }\n return new Promise((resolveResult) => {\n let settled = false;\n let unsubscribe = (): void => {};\n const finish = (result: FunctionMetricsWorkerAnalysisResult): void => {\n if (settled) return;\n settled = true;\n signal.removeEventListener(\"abort\", cancelled);\n unsubscribe();\n worker.terminate();\n resolveResult(result);\n };\n const cancelled = (): void => finish(Object.freeze({ kind: \"cancelled\" }));\n unsubscribe = worker.subscribe({\n error: () => finish(Object.freeze({ kind: \"analysis-failed\" })),\n exit: () => finish(Object.freeze({ kind: \"analysis-failed\" })),\n message: (value: unknown): void => {\n if (signal.aborted) return cancelled();\n finish(parseWorkerResponse(value, approvedExactPaths));\n }\n });\n signal.addEventListener(\"abort\", cancelled, { once: true });\n if (signal.aborted) return cancelled();\n try {\n worker.postMessage(request);\n } catch {\n finish(Object.freeze({ kind: \"analysis-failed\" }));\n }\n });\n}\n\nfunction parseWorkerResponse(\n value: unknown,\n approvedExactPaths: readonly string[]\n): FunctionMetricsWorkerAnalysisResult {\n if (!isWorkerResponse(value)) return Object.freeze({ kind: \"analysis-failed\" });\n if (value.kind === \"analysis-failed\") return value;\n const approvedPaths = new Set(approvedExactPaths);\n return value.metrics.every((metric) => approvedPaths.has(metric.file))\n ? Object.freeze({ kind: \"complete\", metrics: value.metrics })\n : Object.freeze({ kind: \"analysis-failed\" });\n}\n\nfunction isWorkerResponse(value: unknown): value is FunctionMetricsAnalysisWorkerResponse {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"kind\" in value &&\n (value.kind === \"analysis-failed\" ||\n (value.kind === \"complete\" &&\n \"metrics\" in value &&\n Array.isArray(value.metrics) &&\n value.metrics.every(isFunctionMetric)))\n );\n}\n\nfunction isFunctionMetric(value: unknown): value is FunctionMetric {\n return (\n isRecord(value) &&\n hasFunctionMetricIdentity(value) &&\n hasFunctionMetricMeasurements(value) &&\n isTypeScriptAnalyzerCyclomaticComplexity(value.cyclomaticComplexity)\n );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction hasFunctionMetricIdentity(metric: Record<string, unknown>): boolean {\n return typeof metric.file === \"string\" && typeof metric.name === \"string\";\n}\n\nfunction hasFunctionMetricMeasurements(metric: Record<string, unknown>): boolean {\n return (\n Number.isSafeInteger(metric.startLine) &&\n Number.isSafeInteger(metric.endLine) &&\n Number.isSafeInteger(metric.lines) &&\n Number.isSafeInteger(metric.parameterCount)\n );\n}\n\nfunction isTypeScriptAnalyzerCyclomaticComplexity(value: unknown): boolean {\n return (\n isRecord(value) && value.source === \"typescript-analyzer\" && isNullableSafeInteger(value.value)\n );\n}\n\nfunction isNullableSafeInteger(value: unknown): boolean {\n return value === null || (typeof value === \"number\" && Number.isSafeInteger(value));\n}\n"]}
|
|
1
|
+
{"version":3,"file":"analyzer-worker-port.mjs","sourceRoot":"","sources":["../../../../src/package-checks/function-metrics/analyzer-worker-port.ts"],"names":[],"mappings":"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","sourcesContent":["import { Worker } from \"node:worker_threads\";\n\nimport type {\n FunctionMetricsAnalysisWorkerRequest,\n FunctionMetricsAnalysisWorkerResponse\n} from \"./analyzer-worker-contract.ts\";\nimport type { FunctionMetric } from \"./measurement-model.ts\";\n\ntype FunctionMetricsWorkerAnalysisResult = Readonly<\n | { kind: \"analysis-failed\" }\n | { kind: \"cancelled\" }\n | { kind: \"complete\"; metrics: readonly FunctionMetric[] }\n>;\n\nexport interface FunctionMetricsWorkerPort {\n readonly postMessage: (value: unknown) => void;\n readonly subscribe: (\n listeners: Readonly<{\n readonly error: () => void;\n readonly exit: (code: number) => void;\n readonly message: (value: unknown) => void;\n }>\n ) => () => void;\n readonly terminate: () => void;\n}\n\n/** Creates the private Node Worker transport for one admitted analyzer batch. */\nexport function createNodeFunctionMetricsWorker(): FunctionMetricsWorkerPort {\n const worker = new Worker(new URL(\"./analyzer-worker.ts\", import.meta.url));\n return Object.freeze({\n postMessage: (value: unknown): void => {\n worker.postMessage(value);\n },\n subscribe: (listeners: Parameters<FunctionMetricsWorkerPort[\"subscribe\"]>[0]): (() => void) => {\n worker.once(\"message\", listeners.message);\n worker.once(\"error\", listeners.error);\n worker.once(\"exit\", listeners.exit);\n return (): void => {\n worker.off(\"message\", listeners.message);\n worker.off(\"error\", listeners.error);\n worker.off(\"exit\", listeners.exit);\n };\n },\n terminate: (): void => {\n void worker.terminate().catch(() => undefined);\n }\n });\n}\n\n/** Runs one admitted batch through a Worker and settles its transport exactly once. */\nexport async function analyzeAdmittedSources(\n request: FunctionMetricsAnalysisWorkerRequest,\n approvedExactPaths: readonly string[],\n signal: AbortSignal,\n createWorker: () => FunctionMetricsWorkerPort\n): Promise<FunctionMetricsWorkerAnalysisResult> {\n let worker: FunctionMetricsWorkerPort;\n try {\n worker = createWorker();\n } catch {\n return Object.freeze({ kind: \"analysis-failed\" });\n }\n return new Promise((resolveResult) => {\n let settled = false;\n let unsubscribe = (): void => {};\n const finish = (result: FunctionMetricsWorkerAnalysisResult): void => {\n if (settled) return;\n settled = true;\n signal.removeEventListener(\"abort\", cancelled);\n unsubscribe();\n worker.terminate();\n resolveResult(result);\n };\n const cancelled = (): void => {\n finish(Object.freeze({ kind: \"cancelled\" }));\n };\n unsubscribe = worker.subscribe({\n error: () => {\n finish(Object.freeze({ kind: \"analysis-failed\" }));\n },\n exit: () => {\n finish(Object.freeze({ kind: \"analysis-failed\" }));\n },\n message: (value: unknown): void => {\n if (signal.aborted) {\n cancelled();\n return;\n }\n finish(parseWorkerResponse(value, approvedExactPaths));\n }\n });\n signal.addEventListener(\"abort\", cancelled, { once: true });\n if (signal.aborted) {\n cancelled();\n return;\n }\n try {\n worker.postMessage(request);\n } catch {\n finish(Object.freeze({ kind: \"analysis-failed\" }));\n }\n });\n}\n\nfunction parseWorkerResponse(\n value: unknown,\n approvedExactPaths: readonly string[]\n): FunctionMetricsWorkerAnalysisResult {\n if (!isWorkerResponse(value)) return Object.freeze({ kind: \"analysis-failed\" });\n if (value.kind === \"analysis-failed\") return value;\n const approvedPaths = new Set(approvedExactPaths);\n return value.metrics.every((metric) => approvedPaths.has(metric.file))\n ? Object.freeze({ kind: \"complete\", metrics: value.metrics })\n : Object.freeze({ kind: \"analysis-failed\" });\n}\n\nfunction isWorkerResponse(value: unknown): value is FunctionMetricsAnalysisWorkerResponse {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"kind\" in value &&\n (value.kind === \"analysis-failed\" ||\n (value.kind === \"complete\" &&\n \"metrics\" in value &&\n Array.isArray(value.metrics) &&\n value.metrics.every(isFunctionMetric)))\n );\n}\n\nfunction isFunctionMetric(value: unknown): value is FunctionMetric {\n return (\n isRecord(value) &&\n hasFunctionMetricIdentity(value) &&\n hasFunctionMetricMeasurements(value) &&\n isTypeScriptAnalyzerCyclomaticComplexity(value.cyclomaticComplexity)\n );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction hasFunctionMetricIdentity(metric: Record<string, unknown>): boolean {\n return typeof metric.file === \"string\" && typeof metric.name === \"string\";\n}\n\nfunction hasFunctionMetricMeasurements(metric: Record<string, unknown>): boolean {\n return (\n Number.isSafeInteger(metric.startLine) &&\n Number.isSafeInteger(metric.endLine) &&\n Number.isSafeInteger(metric.lines) &&\n Number.isSafeInteger(metric.parameterCount)\n );\n}\n\nfunction isTypeScriptAnalyzerCyclomaticComplexity(value: unknown): boolean {\n return (\n isRecord(value) && value.source === \"typescript-analyzer\" && isNullableSafeInteger(value.value)\n );\n}\n\nfunction isNullableSafeInteger(value: unknown): boolean {\n return value === null || (typeof value === \"number\" && Number.isSafeInteger(value));\n}\n"]}
|