@@ -1404,7 +1404,7 @@ function loadESMFromCJS(mod, filename) {
|
1404 | 1404 | * @param {'commonjs'|undefined} format Intended format of the module.
|
1405 | 1405 | */
|
1406 | 1406 | function wrapSafe(filename, content, cjsModuleInstance, format) {
|
1407 |
| -assert(format !== 'module'); // ESM should be handled in loadESMFromCJS(). |
| 1407 | +assert(format !== 'module', 'ESM should be handled in loadESMFromCJS()'); |
1408 | 1408 | const hostDefinedOptionId = vm_dynamic_import_default_internal;
|
1409 | 1409 | const importModuleDynamically = vm_dynamic_import_default_internal;
|
1410 | 1410 | if (ed) {
|
@@ -1434,7 +1434,17 @@ function wrapSafe(filename, content, cjsModuleInstance, format) {
|
1434 | 1434 | };
|
1435 | 1435 | }
|
1436 | 1436 |
|
1437 |
| -const shouldDetectModule = (format !== 'commonjs' && getOptionValue('--experimental-detect-module')); |
| 1437 | +let shouldDetectModule = false; |
| 1438 | +if (format !== 'commonjs') { |
| 1439 | +if (cjsModuleInstance?.[kIsMainSymbol]) { |
| 1440 | +// For entry points, format detection is used unless explicitly disabled. |
| 1441 | +shouldDetectModule = getOptionValue('--experimental-detect-module'); |
| 1442 | +} else { |
| 1443 | +// For modules being loaded by `require()`, if require(esm) is disabled, |
| 1444 | +// don't try to reparse to detect format and just throw for ESM syntax. |
| 1445 | +shouldDetectModule = getOptionValue('--experimental-require-module'); |
| 1446 | +} |
| 1447 | +} |
1438 | 1448 | const result = compileFunctionForCJSLoader(content, filename, false /* is_sea_main */, shouldDetectModule);
|
1439 | 1449 |
|
1440 | 1450 | // Cache the source map for the module if present.
|
@@ -1471,8 +1481,6 @@ Module.._compile = function(content, filename, format) {
|
1471 | 1481 | }
|
1472 | 1482 | }
|
1473 | 1483 |
|
1474 |
| -// TODO(joyeecheung): when the module is the entry point, consider allowing TLA. |
1475 |
| -// Only modules being require()'d really need to avoid TLA. |
1476 | 1484 | if (format === 'module') {
|
1477 | 1485 | // Pass the source into the .mjs extension handler indirectly through the cache.
|
1478 | 1486 | this[kModuleSource] = content;
|
|
0 commit comments