Open GeoffreyBooth opened 1 week ago
Hi, I've looked around a bit to work on this and I wonder where I can find the CommonJS parsing error.
https://github.com/nodejs/node/blob/main/lib/internal/modules/esm/module_job.js#L286
I think it's here: 216. line
if (format === 'commonjs') {
const importStatement = splitStack[1];
// TODO(@ctavan): The original error stack only provides the single
// line which causes the error. For multi-line import statements we
// cannot generate an equivalent object destructuring assignment by
// just parsing the error stack.
const oneLineNamedImports = RegExpPrototypeExec(/{.*}/, importStatement);
const destructuringAssignment = oneLineNamedImports &&
RegExpPrototypeSymbolReplace(/\s+as\s+/g, oneLineNamedImports, ': ');
e.message = `Named export '${name}' not found. The requested module` +
` '${childSpecifier}' is a CommonJS module, which may not support` +
' all module.exports as named exports.\nCommonJS modules can ' +
'always be imported via the default export, for example using:' +
`\n\nimport pkg from '${childSpecifier}';\n${
destructuringAssignment ?
`const ${destructuringAssignment} = pkg;\n` : ''}`;
const newStack = StringPrototypeSplit(e.stack, '\n');
newStack[3] = `SyntaxError: ${e.message}`;
e.stack = ArrayPrototypeJoin(newStack, '\n');
}
I wonder where I can find the CommonJS parsing error.
https://github.com/nodejs/node/blob/main/src/node_contextify.cc#L1613-L1614
Hello, I tried to make a small improvement for this place, I would be very happy if you review it at the appropriate time.
Porting from https://github.com/nodejs/TSC/issues/1445#issuecomment-2388678002:
index.js
:Getting this:
With this
package.json
:LOL. (
await
😈).Originally posted by @babakfp in https://github.com/nodejs/TSC/issues/1445#issuecomment-2388678002
So basically, this module fails to parse as either CommonJS or as ESM, and we show the ESM parsing error message. Perhaps we should show both, or show a special message for the common use case of using top-level
await
in a CommonJS module.