@@ -1445,7 +1445,8 @@ static MaybeLocal<Function> CompileFunctionForCJSLoader(Environment* env,
14451445 Local<Context> context,
14461446 Local<String> code,
14471447 Local<String> filename,
1448- bool * cache_rejected) {
1448+ bool * cache_rejected,
1449+ bool is_cjs_scope) {
14491450 Isolate* isolate = context->GetIsolate ();
14501451 EscapableHandleScope scope (isolate);
14511452
@@ -1485,7 +1486,10 @@ static MaybeLocal<Function> CompileFunctionForCJSLoader(Environment* env,
14851486 options = ScriptCompiler::kConsumeCodeCache ;
14861487 }
14871488
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+ }
14891493 MaybeLocal<Function> maybe_fn = ScriptCompiler::CompileFunction (
14901494 context,
14911495 &source,
@@ -1544,7 +1548,7 @@ static void CompileFunctionForCJSLoader(
15441548 ShouldNotAbortOnUncaughtScope no_abort_scope (realm->env ());
15451549 TryCatchScope try_catch (env);
15461550 if (!CompileFunctionForCJSLoader (
1547- env, context, code, filename, &cache_rejected)
1551+ env, context, code, filename, &cache_rejected, true )
15481552 .ToLocal (&fn)) {
15491553 CHECK (try_catch.HasCaught ());
15501554 CHECK (!try_catch.HasTerminated ());
@@ -1682,11 +1686,15 @@ static void ContainsModuleSyntax(const FunctionCallbackInfo<Value>& args) {
16821686 CHECK (args[1 ]->IsString ());
16831687 Local<String> filename = args[1 ].As <String>();
16841688
1685- // Argument 2 : resource name (URL for ES module).
1689+ // Argument 3 : resource name (URL for ES module).
16861690 Local<String> resource_name = filename;
16871691 if (args[2 ]->IsString ()) {
16881692 resource_name = args[2 ].As <String>();
16891693 }
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 ();
16901698
16911699 bool cache_rejected = false ;
16921700 Local<String> message;
@@ -1695,7 +1703,7 @@ static void ContainsModuleSyntax(const FunctionCallbackInfo<Value>& args) {
16951703 TryCatchScope try_catch (env);
16961704 ShouldNotAbortOnUncaughtScope no_abort_scope (env);
16971705 if (CompileFunctionForCJSLoader (
1698- env, context, code, filename, &cache_rejected)
1706+ env, context, code, filename, &cache_rejected, cjs_var )
16991707 .ToLocal (&fn)) {
17001708 args.GetReturnValue ().Set (false );
17011709 return ;
0 commit comments