refactor(javascript): share result binding projection and facts

This commit is contained in:
morluto committed 2026-10-22 10:33:18 +08:00
1 parent 34fd7bdf7d
commit dbcec4cf56
7 files changed
+57 -56

No files matched your search

@@ -8,7 +8,10 @@ import {
semanticGlobalProcessOrigin,
semanticMutableBuiltinOrigin,
} from "./javascriptSemanticRequireOrigin.js";
import type { JavaScriptModuleOrigin } from "./javascriptSemanticIr.js";
import type {
JavaScriptModuleOrigin,
JavaScriptSemanticProjectedResultBinding,
} from "./javascriptSemanticIr.js";
import {
evaluateSemanticProvenance,
evaluateSemanticProvenanceAtRead,
@@ -35,11 +38,8 @@ import {
unwrapJavaScriptExpression,
} from "./javascriptAstValues.js";
export interface SemanticProjectedBinding {
readonly bindingId: string;
export interface SemanticProjectedBinding extends JavaScriptSemanticProjectedResultBinding {
readonly identifier: t.Identifier;
readonly projectionPath: readonly (string | number | null)[];
readonly resolution: "complete" | "partial";
}
/** Resolve bindings written by the nearest variable or assignment owner. */
@@ -136,7 +136,7 @@ const projectedPatternBindings = (
export const semanticProjectedBindingFacts = (
bindings: readonly SemanticProjectedBinding[],
): Omit<SemanticProjectedBinding, "identifier">[] =>
): JavaScriptSemanticProjectedResultBinding[] =>
bindings.map(({ identifier: _identifier, ...fact }) => fact);
/** Return a scalar owner only for an unprojected identifier result. */