@@ -1445,7 +1445,8 @@ static MaybeLocal<Function> CompileFunctionForCJSLoader(Environment* env,
1445
1445
Local<Context> context,
1446
1446
Local<String> code,
1447
1447
Local<String> filename,
1448
- bool * cache_rejected) {
1448
+ bool * cache_rejected,
1449
+ bool is_cjs_scope) {
1449
1450
Isolate* isolate = context->GetIsolate ();
1450
1451
EscapableHandleScope scope (isolate);
1451
1452
@@ -1485,7 +1486,10 @@ static MaybeLocal<Function> CompileFunctionForCJSLoader(Environment* env,
1485
1486
options = ScriptCompiler::kConsumeCodeCache ;
1486
1487
}
1487
1488
1488
- std::vector<Local<String>> params = GetCJSParameters (env->isolate_data ());
1489
+ std::vector<Local<String>> params;
1490
+ if (is_cjs_scope) {
1491
+ params = GetCJSParameters (env->isolate_data ());
1492
+ }
1489
1493
MaybeLocal<Function> maybe_fn = ScriptCompiler::CompileFunction (
1490
1494
context,
1491
1495
&source,
@@ -1544,7 +1548,7 @@ static void CompileFunctionForCJSLoader(
1544
1548
ShouldNotAbortOnUncaughtScope no_abort_scope (realm->env ());
1545
1549
TryCatchScope try_catch (env);
1546
1550
if (!CompileFunctionForCJSLoader (
1547
- env, context, code, filename, &cache_rejected)
1551
+ env, context, code, filename, &cache_rejected, true )
1548
1552
.ToLocal (&fn)) {
1549
1553
CHECK (try_catch.HasCaught ());
1550
1554
CHECK (!try_catch.HasTerminated ());
@@ -1682,11 +1686,15 @@ static void ContainsModuleSyntax(const FunctionCallbackInfo<Value>& args) {
1682
1686
CHECK (args[1 ]->IsString ());
1683
1687
Local<String> filename = args[1 ].As <String>();
1684
1688
1685
- // Argument 2 : resource name (URL for ES module).
1689
+ // Argument 3 : resource name (URL for ES module).
1686
1690
Local<String> resource_name = filename;
1687
1691
if (args[2 ]->IsString ()) {
1688
1692
resource_name = args[2 ].As <String>();
1689
1693
}
1694
+ // Argument 4: flag to indicate if CJS variables should not be in scope
1695
+ // (they should be for normal CommonJS modules, but not for the
1696
+ // CommonJS eval scope).
1697
+ bool cjs_var = !args[3 ]->IsString ();
1690
1698
1691
1699
bool cache_rejected = false ;
1692
1700
Local<String> message;
@@ -1695,7 +1703,7 @@ static void ContainsModuleSyntax(const FunctionCallbackInfo<Value>& args) {
1695
1703
TryCatchScope try_catch (env);
1696
1704
ShouldNotAbortOnUncaughtScope no_abort_scope (env);
1697
1705
if (CompileFunctionForCJSLoader (
1698
- env, context, code, filename, &cache_rejected)
1706
+ env, context, code, filename, &cache_rejected, cjs_var )
1699
1707
.ToLocal (&fn)) {
1700
1708
args.GetReturnValue ().Set (false );
1701
1709
return ;
0 commit comments