@@ -1442,7 +1442,8 @@ static MaybeLocal<Function> CompileFunctionForCJSLoader(Environment* env,
14421442 Local<Context> context,
14431443 Local<String> code,
14441444 Local<String> filename,
1445- bool * cache_rejected) {
1445+ bool * cache_rejected,
1446+ bool is_cjs_scope) {
14461447 Isolate* isolate = context->GetIsolate ();
14471448 EscapableHandleScope scope (isolate);
14481449
@@ -1494,7 +1495,10 @@ static MaybeLocal<Function> CompileFunctionForCJSLoader(Environment* env,
14941495 options = ScriptCompiler::kConsumeCodeCache ;
14951496 }
14961497
1497- std::vector<Local<String>> params = GetCJSParameters (env->isolate_data ());
1498+ std::vector<Local<String>> params;
1499+ if (is_cjs_scope) {
1500+ params = GetCJSParameters (env->isolate_data ());
1501+ }
14981502 MaybeLocal<Function> maybe_fn = ScriptCompiler::CompileFunction (
14991503 context,
15001504 &source,
@@ -1556,7 +1560,7 @@ static void CompileFunctionForCJSLoader(
15561560 ShouldNotAbortOnUncaughtScope no_abort_scope (realm->env ());
15571561 TryCatchScope try_catch (env);
15581562 if (!CompileFunctionForCJSLoader (
1559- env, context, code, filename, &cache_rejected)
1563+ env, context, code, filename, &cache_rejected, true )
15601564 .ToLocal (&fn)) {
15611565 CHECK (try_catch.HasCaught ());
15621566 CHECK (!try_catch.HasTerminated ());
@@ -1694,11 +1698,15 @@ static void ContainsModuleSyntax(const FunctionCallbackInfo<Value>& args) {
16941698 CHECK (args[1 ]->IsString ());
16951699 Local<String> filename = args[1 ].As <String>();
16961700
1697- // Argument 2 : resource name (URL for ES module).
1701+ // Argument 3 : resource name (URL for ES module).
16981702 Local<String> resource_name = filename;
16991703 if (args[2 ]->IsString ()) {
17001704 resource_name = args[2 ].As <String>();
17011705 }
1706+ // Argument 4: flag to indicate if CJS variables should not be in scope
1707+ // (they should be for normal CommonJS modules, but not for the
1708+ // CommonJS eval scope).
1709+ bool cjs_var = !args[3 ]->IsString ();
17021710
17031711 bool cache_rejected = false ;
17041712 Local<String> message;
@@ -1707,7 +1715,7 @@ static void ContainsModuleSyntax(const FunctionCallbackInfo<Value>& args) {
17071715 TryCatchScope try_catch (env);
17081716 ShouldNotAbortOnUncaughtScope no_abort_scope (env);
17091717 if (CompileFunctionForCJSLoader (
1710- env, context, code, filename, &cache_rejected)
1718+ env, context, code, filename, &cache_rejected, cjs_var )
17111719 .ToLocal (&fn)) {
17121720 args.GetReturnValue ().Set (false );
17131721 return ;
0 commit comments