@@ -1384,20 +1384,43 @@ constexpr std::array<std::string_view, 3> esm_syntax_error_messages = {
1384
1384
1385
1385
void ContextifyContext::ContainsModuleSyntax (
1386
1386
const FunctionCallbackInfo<Value>& args) {
1387
- // Argument 1: source code
1388
- CHECK (args[ 0 ]-> IsString () );
1389
- Local<String> code = args[ 0 ]. As <String> ();
1387
+ Environment* env = Environment::GetCurrent (args);
1388
+ Isolate* isolate = env-> isolate ( );
1389
+ Local<Context> context = env-> context ();
1390
1390
1391
- // Argument 2: filename
1392
- Local<String> filename = String::Empty (args.GetIsolate ());
1391
+ if (args.Length () == 0 ) {
1392
+ return THROW_ERR_MISSING_ARGS (
1393
+ env, " containsModuleSyntax needs at least 1 argument" );
1394
+ }
1395
+
1396
+ // Argument 2: filename; if undefined, use empty string
1397
+ Local<String> filename = String::Empty (isolate);
1393
1398
if (!args[1 ]->IsUndefined ()) {
1394
1399
CHECK (args[1 ]->IsString ());
1395
1400
filename = args[1 ].As <String>();
1396
1401
}
1397
1402
1398
- Environment* env = Environment::GetCurrent (args);
1399
- Isolate* isolate = env->isolate ();
1400
- Local<Context> context = env->context ();
1403
+ // Argument 1: source code; if undefined, read from filename in argument 2
1404
+ Local<String> code;
1405
+ if (args[0 ]->IsUndefined ()) {
1406
+ CHECK (!filename.IsEmpty ());
1407
+ const char * filename_str = Utf8Value (isolate, filename).out ();
1408
+ std::string contents;
1409
+ int result = ReadFileSync (&contents, filename_str);
1410
+ if (result != 0 ) {
1411
+ isolate->ThrowException (
1412
+ ERR_MODULE_NOT_FOUND (isolate, " Cannot read file %s" , filename_str));
1413
+ return ;
1414
+ }
1415
+ code = String::NewFromUtf8 (isolate,
1416
+ contents.c_str (),
1417
+ v8::NewStringType::kNormal ,
1418
+ contents.length ())
1419
+ .ToLocalChecked ();
1420
+ } else {
1421
+ CHECK (args[0 ]->IsString ());
1422
+ code = args[0 ].As <String>();
1423
+ }
1401
1424
1402
1425
// TODO(geoffreybooth): Centralize this rather than matching the logic in
1403
1426
// cjs/loader.js and translators.js
0 commit comments