optiprune 1.8.2 → 1.8.4

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/dist/layer4.js CHANGED
@@ -1,53 +1,320 @@
1
1
  import { getQuickJS } from "quickjs-emscripten";
2
2
  import { performance } from "node:perf_hooks";
3
+ import path from "pathe";
3
4
  /**
4
5
  * Layer 4: Proof Asserter Engine
5
6
  * Validates candidate branches from Layer 3 using isolated execution.
6
7
  * Uses a secure WebAssembly-based QuickJS sandbox.
8
+ * Now also resolves dynamic imports by simulating their path construction.
7
9
  */
8
10
  export async function analyzeLayer4(context) {
9
- if (context.candidateBranches.length === 0) {
10
- return [];
11
- }
12
11
  const findings = [];
13
12
  const quickJS = await getQuickJS();
14
- for (const branch of context.candidateBranches) {
15
- const result = await verifyPathInWasmSandbox(quickJS, branch.instrumentedCode, branch.seedInput, context.options.layers.smtTimeoutMs);
16
- if (result.pathReached) {
17
- // If reached, it's PROVEN alive.
18
- continue;
13
+ // 1. Resolve Dynamic Imports
14
+ if (context.dynamicImportCandidates.length > 0) {
15
+ await resolveDynamicImports(context, quickJS);
16
+ }
17
+ // 2. Validate Candidate Branches
18
+ if (context.candidateBranches.length > 0) {
19
+ for (const branch of context.candidateBranches) {
20
+ const result = await verifyPathInWasmSandbox(quickJS, branch.instrumentedCode, branch.seedInput, context.options.layers.smtTimeoutMs);
21
+ if (result.pathReached) {
22
+ // If reached, it's PROVEN alive.
23
+ continue;
24
+ }
25
+ findings.push({
26
+ rule: "unreachable-dynamic-path",
27
+ severity: "warning",
28
+ confidence: "medium",
29
+ message: `[Proof Asserter] Branch at line ${branch.line} could not be reached with SMT-generated seeds.`,
30
+ file: branch.file,
31
+ location: {
32
+ start: { line: branch.line, column: 0 },
33
+ end: { line: branch.line, column: 0 }
34
+ },
35
+ evidence: {
36
+ engine: "wasm-quickjs",
37
+ executionTimeMs: result.executionTimeMs,
38
+ seedInput: branch.seedInput,
39
+ status: "SUSPECT_UNREACHABLE"
40
+ },
41
+ });
19
42
  }
20
- findings.push({
21
- rule: "unreachable-dynamic-path",
22
- severity: "warning",
23
- confidence: "medium",
24
- message: `[Proof Asserter] Branch at line ${branch.line} could not be reached with SMT-generated seeds.`,
25
- file: branch.file,
26
- location: {
27
- start: { line: branch.line, column: 0 },
28
- end: { line: branch.line, column: 0 }
29
- },
30
- evidence: {
31
- engine: "wasm-quickjs",
32
- executionTimeMs: result.executionTimeMs,
33
- seedInput: branch.seedInput,
34
- status: "SUSPECT_UNREACHABLE"
35
- },
36
- });
37
43
  }
38
44
  return findings;
39
45
  }
40
46
  /**
41
- * Executes instrumented code paths in a secure Wasm-based QuickJS sandbox.
47
+ * Simulates dynamic import expressions in a QuickJS sandbox to resolve targets.
42
48
  */
49
+ async function resolveDynamicImports(context, quickJS) {
50
+ // Group candidates by file to avoid redundant simulations
51
+ const candidatesByFile = new Map();
52
+ for (const candidate of context.dynamicImportCandidates) {
53
+ const list = candidatesByFile.get(candidate.file) || [];
54
+ list.push(candidate);
55
+ candidatesByFile.set(candidate.file, list);
56
+ }
57
+ for (const [file, candidates] of candidatesByFile.entries()) {
58
+ for (const candidate of candidates) {
59
+ const runtime = quickJS.newRuntime();
60
+ const vm = runtime.newContext();
61
+ try {
62
+ runtime.setMemoryLimit(context.options.layers.isolateMemoryLimitMb * 1024 * 1024);
63
+ // Setup Mocks
64
+ setupQuickJSMocks(vm, candidate, context);
65
+ const globalHandle = vm.global;
66
+ const targetsHandle = vm.newArray();
67
+ vm.setProp(globalHandle, "__OPTIPRUNE_TARGETS__", targetsHandle);
68
+ const importMockFn = vm.newFunction("__optiprune_import", (arg) => {
69
+ const target = vm.dump(arg);
70
+ const currentTargets = vm.getProp(globalHandle, "__OPTIPRUNE_TARGETS__");
71
+ const lenHandle = vm.getProp(currentTargets, "length");
72
+ const len = vm.dump(lenHandle);
73
+ vm.setProp(currentTargets, len, vm.newString(String(target)));
74
+ lenHandle.dispose();
75
+ currentTargets.dispose();
76
+ return vm.newObject(); // Dummy module
77
+ });
78
+ vm.setProp(globalHandle, "__optiprune_import", importMockFn);
79
+ importMockFn.dispose();
80
+ targetsHandle.dispose();
81
+ globalHandle.dispose();
82
+ // Clean up code for QuickJS (strip common TS syntax)
83
+ const clean = (code) => code
84
+ .replace(/import\.meta\.url/g, '("file://" + __filename)')
85
+ .replace(/\bimport\s*\(/g, '__optiprune_import(')
86
+ // 1. Remove "as any", "as string", etc.
87
+ .replace(/\s+as\s+[a-zA-Z0-9_<>\[\]|& ]+(?=[,;=)]|$)/g, '')
88
+ // 2. Remove type annotations including arrays and common types
89
+ .replace(/:\s*(?:[a-zA-Z0-9_<>|& ]+(?:\[\])*)(?=\s*[,;=)]|$)/g, (match) => {
90
+ // Protect ternary colons and object properties
91
+ if (match.includes('null') || match.includes('undefined') || match.includes('true') || match.includes('false')) {
92
+ return match;
93
+ }
94
+ // Check if it's a common type or starts with Uppercase (Interface/Class)
95
+ const typePart = match.slice(1).trim();
96
+ const commonTypes = ['string', 'number', 'boolean', 'any', 'void', 'unknown', 'never', 'string[]', 'any[]', 'Config', 'ModuleRecord', 'AnalysisContext'];
97
+ if (commonTypes.includes(typePart) || /^[A-Z]/.test(typePart)) {
98
+ return '';
99
+ }
100
+ return match;
101
+ })
102
+ // 3. Remove interface/type imports
103
+ .replace(/import\s+type\s+.*?;/g, '');
104
+ const processedContext = clean(candidate.contextCode);
105
+ const simulationScript = `
106
+ (async function() {
107
+ const __dirname = path.dirname(__filename);
108
+ try {
109
+ ${processedContext}
110
+ } catch (e) {
111
+ if (globalThis.__VERBOSE__) {
112
+ console.log("[QuickJS Runtime Error] " + (e instanceof Error ? e.message : String(e)));
113
+ }
114
+ }
115
+ }).call(globalThis);
116
+ `;
117
+ if (context.options.verbose) {
118
+ console.log(`[Layer 4] Simulation Script for ${file}:\n${simulationScript}`);
119
+ }
120
+ const evalResult = vm.evalCode(simulationScript);
121
+ if (evalResult.error) {
122
+ if (context.options.verbose) {
123
+ console.log(`[Layer 4] Simulation Syntax Error in ${file}:`, vm.dump(evalResult.error));
124
+ console.log(`[Layer 4] Script was:\n${simulationScript}`);
125
+ }
126
+ evalResult.error.dispose();
127
+ }
128
+ else {
129
+ evalResult.value.dispose();
130
+ let deadline = 1000;
131
+ while (deadline-- > 0) {
132
+ if (runtime.executePendingJobs() === 0)
133
+ break;
134
+ }
135
+ }
136
+ const finalGlobalHandle = vm.global;
137
+ const finalTargetsHandle = vm.getProp(finalGlobalHandle, "__OPTIPRUNE_TARGETS__");
138
+ const targets = vm.dump(finalTargetsHandle);
139
+ finalTargetsHandle.dispose();
140
+ finalGlobalHandle.dispose();
141
+ if (Array.isArray(targets)) {
142
+ for (const rawTarget of targets) {
143
+ if (typeof rawTarget === 'string') {
144
+ resolveAndMarkTarget(rawTarget, file, context);
145
+ }
146
+ }
147
+ }
148
+ }
149
+ catch (err) {
150
+ // Simulation failed
151
+ }
152
+ finally {
153
+ vm.dispose();
154
+ runtime.dispose();
155
+ }
156
+ }
157
+ }
158
+ }
159
+ function setupQuickJSMocks(vm, candidate, context) {
160
+ const globalHandle = vm.global;
161
+ // 1. __dirname and __filename
162
+ const fileDir = path.dirname(candidate.file);
163
+ const dirnameHandle = vm.newString(fileDir);
164
+ const filenameHandle = vm.newString(candidate.file);
165
+ vm.setProp(globalHandle, "__dirname", dirnameHandle);
166
+ vm.setProp(globalHandle, "__filename", filenameHandle);
167
+ dirnameHandle.dispose();
168
+ filenameHandle.dispose();
169
+ // 2. path mock using host's pathe
170
+ const pathMock = vm.newObject();
171
+ const joinFn = vm.newFunction("join", (...args) => {
172
+ const parts = args.map(arg => vm.dump(arg));
173
+ const result = vm.newString(path.join(...parts));
174
+ return result;
175
+ });
176
+ const dirnameFn = vm.newFunction("dirname", (arg) => {
177
+ const result = vm.newString(path.dirname(vm.dump(arg)));
178
+ return result;
179
+ });
180
+ vm.setProp(pathMock, "join", joinFn);
181
+ vm.setProp(pathMock, "dirname", dirnameFn);
182
+ vm.setProp(globalHandle, "path", pathMock);
183
+ joinFn.dispose();
184
+ dirnameFn.dispose();
185
+ pathMock.dispose();
186
+ // 3. url mock
187
+ const urlMock = vm.newObject();
188
+ const pathToFileURLFn = vm.newFunction("pathToFileURL", (arg) => {
189
+ const p = vm.dump(arg);
190
+ const obj = vm.newObject();
191
+ const hrefValue = vm.newString(`file://${p}`);
192
+ vm.setProp(obj, "href", hrefValue);
193
+ hrefValue.dispose();
194
+ return obj;
195
+ });
196
+ const fileURLToPathFn = vm.newFunction("fileURLToPath", (arg) => {
197
+ const urlStr = vm.dump(arg);
198
+ const p = urlStr.startsWith('file://') ? urlStr.slice(7) : urlStr;
199
+ return vm.newString(p);
200
+ });
201
+ vm.setProp(urlMock, "pathToFileURL", pathToFileURLFn);
202
+ vm.setProp(urlMock, "fileURLToPath", fileURLToPathFn);
203
+ vm.setProp(globalHandle, "url", urlMock);
204
+ vm.setProp(globalHandle, "pathToFileURL", pathToFileURLFn);
205
+ vm.setProp(globalHandle, "fileURLToPath", fileURLToPathFn);
206
+ urlMock.dispose();
207
+ pathToFileURLFn.dispose();
208
+ fileURLToPathFn.dispose();
209
+ // 4. fs mock
210
+ const fsMock = vm.newObject();
211
+ const readdirFn = vm.newFunction("readdir", (arg) => {
212
+ const rawDir = vm.dump(arg);
213
+ const cleanPath = String(rawDir).replace(/^file:\/\//, '');
214
+ const dir = path.isAbsolute(cleanPath) ? cleanPath : path.resolve(fileDir, cleanPath);
215
+ if (context.options.verbose) {
216
+ console.log(`[QuickJS Mock] fs.readdir called for: "${rawDir}" -> normalized: "${dir}"`);
217
+ }
218
+ const files = Array.from(context.modules.keys())
219
+ .filter(f => {
220
+ const parent = path.dirname(f);
221
+ return parent === dir || parent === dir.replace(/\/$/, '');
222
+ })
223
+ .map(f => path.basename(f));
224
+ if (context.options.verbose) {
225
+ console.log(`[QuickJS Mock] fs.readdir returned:`, files);
226
+ }
227
+ const arr = vm.newArray();
228
+ files.forEach((f, i) => {
229
+ const val = vm.newString(f);
230
+ vm.setProp(arr, i, val);
231
+ val.dispose();
232
+ });
233
+ return arr;
234
+ });
235
+ const existsSyncFn = vm.newFunction("existsSync", (arg) => {
236
+ const rawP = vm.dump(arg);
237
+ const cleanPath = String(rawP).replace(/^file:\/\//, '');
238
+ const p = path.isAbsolute(cleanPath) ? cleanPath : path.resolve(fileDir, cleanPath);
239
+ const exists = context.modules.has(p);
240
+ if (context.options.verbose) {
241
+ console.log(`[QuickJS Mock] fs.existsSync("${rawP}") -> ${exists}`);
242
+ }
243
+ return exists ? vm.true : vm.false;
244
+ });
245
+ vm.setProp(fsMock, "readdir", readdirFn);
246
+ vm.setProp(fsMock, "readdirSync", readdirFn);
247
+ vm.setProp(fsMock, "existsSync", existsSyncFn);
248
+ vm.setProp(globalHandle, "fs", fsMock);
249
+ fsMock.dispose();
250
+ readdirFn.dispose();
251
+ existsSyncFn.dispose();
252
+ // 5. console mock
253
+ const consoleMock = vm.newObject();
254
+ const logFn = vm.newFunction("log", (...args) => {
255
+ if (context.options.verbose) {
256
+ console.log(`[QuickJS Console]`, ...args.map(a => vm.dump(a)));
257
+ }
258
+ return vm.undefined;
259
+ });
260
+ const warnFn = vm.newFunction("warn", (...args) => {
261
+ if (context.options.verbose) {
262
+ console.warn(`[QuickJS Console]`, ...args.map(a => vm.dump(a)));
263
+ }
264
+ return vm.undefined;
265
+ });
266
+ const errorFn = vm.newFunction("error", (...args) => {
267
+ console.error(`[QuickJS Console Error]`, ...args.map(a => vm.dump(a)));
268
+ return vm.undefined;
269
+ });
270
+ vm.setProp(consoleMock, "log", logFn);
271
+ vm.setProp(consoleMock, "warn", warnFn);
272
+ vm.setProp(consoleMock, "error", errorFn);
273
+ vm.setProp(globalHandle, "console", consoleMock);
274
+ if (context.options.verbose) {
275
+ vm.setProp(globalHandle, "__VERBOSE__", vm.true);
276
+ }
277
+ consoleMock.dispose();
278
+ logFn.dispose();
279
+ warnFn.dispose();
280
+ errorFn.dispose();
281
+ globalHandle.dispose();
282
+ }
283
+ function resolveAndMarkTarget(specifier, sourceFile, context) {
284
+ let cleanSpecifier = specifier;
285
+ if (specifier.startsWith('file://')) {
286
+ cleanSpecifier = specifier.slice(7);
287
+ }
288
+ const sourceDir = path.dirname(sourceFile);
289
+ const absolutePath = path.isAbsolute(cleanSpecifier)
290
+ ? cleanSpecifier
291
+ : path.resolve(sourceDir, cleanSpecifier);
292
+ let targetModule = context.modules.get(absolutePath);
293
+ if (!targetModule) {
294
+ for (const ext of context.options.extensions) {
295
+ const withExt = absolutePath + ext;
296
+ targetModule = context.modules.get(withExt);
297
+ if (targetModule)
298
+ break;
299
+ }
300
+ }
301
+ if (targetModule) {
302
+ console.log(`[Layer 4] Marking reachable: ${targetModule.id}`);
303
+ context.reachable.add(targetModule.id);
304
+ for (const exp of targetModule.exports) {
305
+ context.usedExports.add(`${targetModule.id}:${exp.exportedAs}`);
306
+ }
307
+ }
308
+ else {
309
+ console.log(`[Layer 4] Could not resolve target: ${absolutePath}`);
310
+ }
311
+ }
43
312
  async function verifyPathInWasmSandbox(quickJS, instrumentedCode, seedInput, timeoutMs = 50) {
44
313
  const startTime = performance.now();
45
314
  const runtime = quickJS.newRuntime();
46
315
  const context = runtime.newContext();
47
316
  try {
48
- // Set a memory limit (e.g., 16MB)
49
317
  runtime.setMemoryLimit(16 * 1024 * 1024);
50
- // Setup the sandbox environment
51
318
  const setupScript = `
52
319
  globalThis.__PROVE_REACHED__ = false;
53
320
  globalThis.__coverage__ = {
@@ -56,18 +323,12 @@ async function verifyPathInWasmSandbox(quickJS, instrumentedCode, seedInput, tim
56
323
  traceCall: () => {},
57
324
  init: () => {}
58
325
  };
59
- // Inject seed inputs
60
326
  const seeds = ${JSON.stringify(seedInput)};
61
327
  Object.assign(globalThis, seeds);
62
328
  `;
63
329
  const setupResult = context.evalCode(setupScript);
64
330
  setupResult.dispose();
65
- // Execute the instrumented code
66
- // We wrap it in a try-catch to prevent VM crashes from throwing in the host
67
331
  const wrappedCode = `try { ${instrumentedCode} } catch (e) {}`;
68
- // QuickJS-emscripten evalCode is synchronous but we can enforce a timeout
69
- // In a more complex setup we'd use a worker, but for concolic execution snippets,
70
- // we rely on the host's performance.now() and runtime limits.
71
332
  const evalResult = context.evalCode(wrappedCode);
72
333
  evalResult.dispose();
73
334
  const globalHandle = context.global;
@@ -1 +1 @@
1
- {"version":3,"file":"layer4.js","sourceRoot":"","sources":["../src/layer4.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"layer4.js","sourceRoot":"","sources":["../src/layer4.ts"],"names":[],"mappings":"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"}
package/dist/layer6.js CHANGED
@@ -202,7 +202,8 @@ export async function analyzeLayer6(context) {
202
202
  const CORE_TOOLING = [
203
203
  'typescript', 'ts-node', 'tsx', 'babel', 'swc',
204
204
  'eslint', 'prettier', 'husky', 'lint-staged',
205
- 'vitest', 'jest', 'cypress', 'playwright'
205
+ 'vitest', 'jest', 'cypress', 'playwright',
206
+ '@types/node', '@types/react', '@types/react-dom', '@types/jest'
206
207
  ];
207
208
  const isCoreTool = CORE_TOOLING.some(p => dep.includes(p));
208
209
  // Heuristic: Check for common config files in root
@@ -1 +1 @@
1
- {"version":3,"file":"layer6.js","sourceRoot":"","sources":["../src/layer6.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"layer6.js","sourceRoot":"","sources":["../src/layer6.ts"],"names":[],"mappings":"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"}
package/dist/parser.js CHANGED
@@ -100,7 +100,7 @@ function addExport(exportsList, exportedAs, node, identifierNode, options = {})
100
100
  exportsList.push(candidate);
101
101
  }
102
102
  }
103
- function addEdge(edges, sourceFile, rawSpecifier, kind, node, importedNames = [], isTypeOnly = false) {
103
+ function addEdge(edges, sourceFile, rawSpecifier, kind, node, importedNames = [], isTypeOnly = false, dynamicExpression) {
104
104
  const edge = {
105
105
  source: sourceFile,
106
106
  rawSpecifier,
@@ -108,6 +108,7 @@ function addEdge(edges, sourceFile, rawSpecifier, kind, node, importedNames = []
108
108
  importedNames,
109
109
  resolution: "unknown",
110
110
  isTypeOnly,
111
+ dynamicExpression,
111
112
  };
112
113
  const location = positionRange(node);
113
114
  if (location) {
@@ -171,17 +172,18 @@ function templateParts(node) {
171
172
  const lastValue = isNode(last) && isNode(last.value) && typeof last.value.cooked === "string" ? last.value.cooked : "";
172
173
  return { prefix: firstValue, suffix: lastValue };
173
174
  }
174
- function walk(node, visitor) {
175
+ function walk(node, visitor, stack = []) {
175
176
  if (Array.isArray(node)) {
176
177
  for (const item of node) {
177
- walk(item, visitor);
178
+ walk(item, visitor, stack);
178
179
  }
179
180
  return;
180
181
  }
181
182
  if (!isNode(node)) {
182
183
  return;
183
184
  }
184
- visitor(node);
185
+ const currentStack = [...stack, node];
186
+ visitor(node, stack);
185
187
  for (const [key, value] of Object.entries(node)) {
186
188
  if (key === "loc" ||
187
189
  key === "start" ||
@@ -193,7 +195,7 @@ function walk(node, visitor) {
193
195
  continue;
194
196
  }
195
197
  if (Array.isArray(value) || isNode(value)) {
196
- walk(value, visitor);
198
+ walk(value, visitor, currentStack);
197
199
  }
198
200
  }
199
201
  }
@@ -218,7 +220,8 @@ function extractAstModule(sourceText, file, ast, parserErrors) {
218
220
  let hasUnknownDynamicBoundary = false;
219
221
  let hasUnresolvedCommonJsExports = false;
220
222
  const scannedDirectories = [];
221
- walk(ast, (node) => {
223
+ const dynamicImportCandidates = [];
224
+ walk(ast, (node, stack) => {
222
225
  if (node.type === "ImportDeclaration") {
223
226
  const specifier = nodeStringValue(node.source);
224
227
  if (specifier) {
@@ -322,7 +325,49 @@ function extractAstModule(sourceText, file, ast, parserErrors) {
322
325
  }
323
326
  else {
324
327
  hasUnknownDynamicBoundary = true;
325
- addEdge(edges, file, "<unknown dynamic import>", "unknown-dynamic", node, ["*"]);
328
+ const expressionText = sourceText.slice(node.start, node.end);
329
+ const location = positionRange(node);
330
+ if (location) {
331
+ // Find the containing function or block to capture local variables
332
+ let contextCode = "";
333
+ const scopeNode = [...stack].reverse().find(n => n.type === "FunctionDeclaration" ||
334
+ n.type === "FunctionExpression" ||
335
+ n.type === "ArrowFunctionExpression" ||
336
+ n.type === "ClassMethod" ||
337
+ n.type === "ObjectMethod");
338
+ if (scopeNode && isNode(scopeNode.body)) {
339
+ const body = scopeNode.body;
340
+ const start = body.start;
341
+ if (typeof start === "number" && typeof node.start === "number") {
342
+ const bStart = (body.type === "BlockStatement" ? start + 1 : start);
343
+ const bEnd = body.end - (body.type === "BlockStatement" ? 1 : 0);
344
+ let code = sourceText.slice(bStart, bEnd);
345
+ // Prepend parameters as variables so they are defined (even if undefined)
346
+ const params = scopeNode.params;
347
+ if (Array.isArray(params)) {
348
+ const paramNames = params.flatMap(p => bindingNames(p));
349
+ if (paramNames.length > 0) {
350
+ code = `var ${paramNames.join(', ')};\n${code}`;
351
+ }
352
+ }
353
+ contextCode = code;
354
+ }
355
+ }
356
+ // In a real scenario, we might want to log this if verbose is enabled
357
+ // However, parser.ts doesn't have easy access to options here.
358
+ // We'll leave it as is for now to avoid breaking the signature.
359
+ if (!contextCode) {
360
+ contextCode = sourceText.slice(Math.max(0, node.start - 500), node.end + 500);
361
+ }
362
+ dynamicImportCandidates.push({
363
+ file,
364
+ line: location.start.line,
365
+ column: location.start.column,
366
+ expression: expressionText,
367
+ contextCode: contextCode,
368
+ });
369
+ }
370
+ addEdge(edges, file, "<unknown dynamic import>", "unknown-dynamic", node, ["*"], false, expressionText);
326
371
  }
327
372
  }
328
373
  return;
@@ -389,6 +434,7 @@ function extractAstModule(sourceText, file, ast, parserErrors) {
389
434
  hasParseError: parserErrors.length > 0,
390
435
  hasUnresolvedCommonJsExports,
391
436
  scannedDirectories,
437
+ dynamicImportCandidates,
392
438
  };
393
439
  return module;
394
440
  }
@@ -504,8 +550,9 @@ function fallbackModule(sourceText, file, reason) {
504
550
  edges: fallbackEdges(sourceText, file),
505
551
  hasUnknownDynamicBoundary: false, // Parse error is not necessarily a dynamic boundary
506
552
  hasParseError: true,
507
- hasUnresolvedCommonJsExports: true,
553
+ hasUnresolvedCommonJsExports: false,
508
554
  scannedDirectories: [],
555
+ dynamicImportCandidates: [],
509
556
  };
510
557
  }
511
558
  export function parseModule(sourceText, file) {