fix(js): a CommonJS require and a module path import the file they name (#2263)

* fix(js): a CommonJS require and a module path import the file they name

A `require('./application')` was only a call, so a CommonJS file depended
on nothing at file level: Express's lib/express.js showed no imports and
impact missed the files it loads. Local require specifiers are now read
after extraction (both the wasm extractor and the kernel, including its
deferred-decode transport) as `imports` refs from the file, and a JS/TS
module path resolves to its file the way the runtime finds it —
extensions, index files, aliases — which also lands an extensionless
`import './polyfills'` on its file instead of its own import node.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(js): read require imports inside each extractor, so kernel parity holds

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Colby Mchenry
2026-10-01 20:37:37 +00:00
committed by GitHub
co-authored by Claude Opus 5.5
parent 95f6f0f4a5
commit c4babfce6a
11 changed files with 225 additions and 4 deletions
+5
View File
@@ -15,6 +15,7 @@
*/
import type { ExtractionResult, Language } from '../../types';
import { commonJsRequireRefs } from '../commonjs-requires';
import { EXTRACTORS } from '../languages';
import { getKernel, kernelSupports } from './loader';
import { decodeExtractBuffers } from './decode';
@@ -269,6 +270,8 @@ export function materializeKernelResult(
language
);
decoded.durationMs = result.durationMs;
// References read beside the tables (a CommonJS `require`) ride on the transport.
if (result.unresolvedReferences.length > 0) decoded.unresolvedReferences.push(...result.unresolvedReferences);
return decoded;
}
@@ -294,6 +297,8 @@ export function tryKernelExtract(
const buffers = kernel.extractFile(filePath, pre, language);
const result = decodeExtractBuffers(buffers, filePath, language);
POST_PASSES[language]?.(result, source);
// Read beside the tables, as TreeSitterExtractor does (a CommonJS `require`).
result.unresolvedReferences.push(...commonJsRequireRefs(filePath, source, language));
result.durationMs = Date.now() - t0;
return result;
} catch (err) {