fix(javascript): preserve import-equals declaration and export evidence (#2062)

* fix(javascript): retain TypeScript import-equals dependencies

* test(mcp): align completion checks with warm provider state

* fix(javascript): propagate require origins through exported aliases

* fix(javascript): normalize equivalent CTS binding origins

---------

Co-authored-by: hhang <169027046+xu91102@users.noreply.github.com>
This commit is contained in:
hhangandhhang authored and GitHub committed 2026-10-13 06:04:21 +09:00
1 parent 6ce5903e7a
commit 86fab11fbe
16 files changed
+498 -48

No files matched your search

@@ -1,4 +1,6 @@
import { createHash } from "node:crypto";
import { moduleKindForJavaScriptReference } from "./JavaScriptArtifactPathResolution.js";
import { setImmediate } from "node:timers/promises";
import { resolveJavaScriptSourceMapReference } from "../../domain/javascript/javascriptSourceMapPaths.js";
@@ -380,7 +382,10 @@ function* analyzeArtifactFileSteps<
yield;
const semantics =
analysis.parse_status === "complete" || analysis.parse_status === "partial"
? yield* analyzeParsedJavaScriptSemanticsSteps(parsed)
? yield* analyzeParsedJavaScriptSemanticsSteps(
parsed,
moduleKindForJavaScriptReference(file.path, "static-import"),
)
: null;
const projected =
semantics === null
@@ -68,12 +68,20 @@ export interface ResolveArtifactPathInput {
export const moduleKindForJavaScriptReference = (
sourcePath: string,
referenceKind: "static-import" | "dynamic-import" | "require",
resolutionMode?: "import" | "require",
): "import" | "require" =>
referenceKind === "require" ||
resolutionMode ??
(referenceKind === "require" ||
(referenceKind === "static-import" &&
posix.extname(sourcePath).toLowerCase() === ".cts")
? "require"
: "import";
: "import");
/** Preserve an explicitly retained loader mode on graph relationships. */
export const moduleResolutionModeProperties = (
mode: "import" | "require" | undefined,
): Readonly<Record<string, "import" | "require">> =>
mode === undefined ? {} : { resolution_mode: mode };
const EXTENSIONS = [
".js",
@@ -31,6 +31,7 @@ import {
} from "./JavaScriptArtifactGraphEvidence.js";
import {
moduleKindForJavaScriptReference,
moduleResolutionModeProperties,
resolveArtifactPathByContext,
type ArtifactPathResolution,
} from "./JavaScriptArtifactPathResolution.js";
@@ -281,6 +282,7 @@ const resolveModuleTarget = (
input.link.kind === "require" || input.link.kind === "commonjs-export"
? "require"
: "static-import",
input.link.resolutionMode,
),
});
if (resolution.resolution_status !== "resolved")
@@ -373,6 +375,7 @@ const relationshipProperties = (
origin?: JavaScriptModuleOrigin,
) => ({
module_link_kind: link.kind,
...moduleResolutionModeProperties(link.resolutionMode),
specifier: origin?.specifier ?? link.specifier,
imported_name: origin?.importedPath.at(-1) ?? link.importedName,
imported_path: origin?.importedPath ?? [],