fix(javascript): select JSON and addon loaders by exact suffix (#7821)
Node's CommonJS loader matches registered extensions case-sensitively, so
require("./data.JSON") and require("./addon.NODE") run as JavaScript.
Derive target_json_status and the native loads relation from the exact
loader suffix instead of the inventory's case-folded file kind.
Fixes #7623
This commit is contained in:
4 files changed
+70
-6
No files matched your search
@@ -36,6 +36,7 @@ import {
|
||||
import {
|
||||
moduleResolutionModeForJavaScriptReference,
|
||||
isJsonModuleTarget,
|
||||
isNativeAddonModuleTarget,
|
||||
} from "../../domain/javascript/javascriptModuleResolutionMode.js";
|
||||
|
||||
type StaticReference = JavaScriptStaticAnalysis["references"][number];
|
||||
@@ -309,7 +310,8 @@ const addReference = (
|
||||
coverage: input.coverage,
|
||||
relation:
|
||||
input.value.operation === "load" &&
|
||||
resolved?.file?.kind === "native-addon"
|
||||
resolved?.path != null &&
|
||||
isNativeAddonModuleTarget(resolved.path, resolved.file?.kind)
|
||||
? "loads"
|
||||
: "imports",
|
||||
properties: {
|
||||
|
||||
@@ -18,7 +18,10 @@ import type {
|
||||
JavaScriptModuleOrigin,
|
||||
JavaScriptSemanticModuleLink,
|
||||
} from "../../domain/javascript/javascriptSemanticIr.js";
|
||||
import { moduleResolutionModeForJavaScriptReference } from "../../domain/javascript/javascriptModuleResolutionMode.js";
|
||||
import {
|
||||
isJsonModuleTarget,
|
||||
moduleResolutionModeForJavaScriptReference,
|
||||
} from "../../domain/javascript/javascriptModuleResolutionMode.js";
|
||||
import type { JavaScriptArtifactFile } from "../../domain/javascript/javascriptArtifactFiles.js";
|
||||
import {
|
||||
addAstContainsEdge,
|
||||
@@ -327,10 +330,9 @@ const resolveModuleTarget = (
|
||||
node,
|
||||
path,
|
||||
file,
|
||||
jsonStatus:
|
||||
file.kind === "json" || file.kind === "package-json"
|
||||
? input.context.analysis.jsonDocuments.read(file).status
|
||||
: null,
|
||||
jsonStatus: isJsonModuleTarget(path, file.kind)
|
||||
? input.context.analysis.jsonDocuments.read(file).status
|
||||
: null,
|
||||
status: "resolved",
|
||||
limitations: resolution.limitations,
|
||||
resolution,
|
||||
|
||||
Reference in new issue
Block a user