@@ -1206,31 +1206,10 @@ void ContextifyContext::CompileFunction(
1206
1206
data + cached_data_buf->ByteOffset (), cached_data_buf->ByteLength ());
1207
1207
}
1208
1208
1209
- // Set host_defined_options
1210
- Local<PrimitiveArray> host_defined_options =
1211
- PrimitiveArray::New (isolate, loader::HostDefinedOptions::kLength );
1212
- host_defined_options->Set (
1213
- isolate, loader::HostDefinedOptions::kID , id_symbol);
1214
-
1215
- ScriptOrigin origin (isolate,
1216
- filename,
1217
- line_offset, // line offset
1218
- column_offset, // column offset
1219
- true , // is cross origin
1220
- -1 , // script id
1221
- Local<Value>(), // source map URL
1222
- false , // is opaque (?)
1223
- false , // is WASM
1224
- false , // is ES Module
1225
- host_defined_options);
1226
-
1227
- ScriptCompiler::Source source = ScriptCompiler::Source (code, origin, cached_data);
1228
- ScriptCompiler::CompileOptions options;
1229
- if (source.GetCachedData () == nullptr ) {
1230
- options = ScriptCompiler::kNoCompileOptions ;
1231
- } else {
1232
- options = ScriptCompiler::kConsumeCodeCache ;
1233
- }
1209
+ Local<PrimitiveArray> host_defined_options = GetHostDefinedOptions (isolate, id_symbol);
1210
+ ScriptCompiler::Source source = GetCommonJSSourceInstance (
1211
+ isolate, code, filename, line_offset, column_offset, host_defined_options, cached_data);
1212
+ ScriptCompiler::CompileOptions options = GetCompileOptions (source);
1234
1213
1235
1214
Context::Scope scope (parsing_context);
1236
1215
@@ -1279,6 +1258,49 @@ void ContextifyContext::CompileFunction(
1279
1258
args.GetReturnValue ().Set (result);
1280
1259
}
1281
1260
1261
+ Local<PrimitiveArray> ContextifyContext::GetHostDefinedOptions (
1262
+ Isolate* isolate,
1263
+ Local<Symbol> id_symbol) {
1264
+ Local<PrimitiveArray> host_defined_options =
1265
+ PrimitiveArray::New (isolate, loader::HostDefinedOptions::kLength );
1266
+ host_defined_options->Set (
1267
+ isolate, loader::HostDefinedOptions::kID , id_symbol);
1268
+ return host_defined_options;
1269
+ }
1270
+
1271
+ ScriptCompiler::Source ContextifyContext::GetCommonJSSourceInstance (
1272
+ Isolate* isolate,
1273
+ Local<String> code,
1274
+ Local<String> filename,
1275
+ int line_offset,
1276
+ int column_offset,
1277
+ Local<PrimitiveArray> host_defined_options,
1278
+ ScriptCompiler::CachedData* cached_data) {
1279
+ ScriptOrigin origin (isolate,
1280
+ filename,
1281
+ line_offset, // line offset
1282
+ column_offset, // column offset
1283
+ true , // is cross origin
1284
+ -1 , // script id
1285
+ Local<Value>(), // source map URL
1286
+ false , // is opaque (?)
1287
+ false , // is WASM
1288
+ false , // is ES Module
1289
+ host_defined_options);
1290
+ return ScriptCompiler::Source (code, origin, cached_data);
1291
+ }
1292
+
1293
+ ScriptCompiler::CompileOptions ContextifyContext::GetCompileOptions (
1294
+ ScriptCompiler::Source& source) {
1295
+ ScriptCompiler::CompileOptions options;
1296
+ if (source.GetCachedData () != nullptr ) {
1297
+ options = ScriptCompiler::kConsumeCodeCache ;
1298
+ } else {
1299
+ options = ScriptCompiler::kNoCompileOptions ;
1300
+ }
1301
+ return options;
1302
+ }
1303
+
1282
1304
Local<Object> ContextifyContext::CompileFunctionAndCacheResult (
1283
1305
Environment* env,
1284
1306
Local<Context> parsing_context,
@@ -1366,38 +1388,15 @@ void ContextifyContext::ContainsModuleSyntax(
1366
1388
Environment* env = Environment::GetCurrent (args);
1367
1389
Isolate* isolate = env->isolate ();
1368
1390
Local<Context> context = env->context ();
1391
+
1369
1392
// TODO: Centralize this rather than matching the logic in cjs/loader.js and translators.js
1370
1393
Local<Symbol> id_symbol = (String::Concat (isolate,
1371
1394
String::NewFromUtf8 (isolate, " cjs:" ).ToLocalChecked (), filename)).As <Symbol>();
1372
1395
1373
- // TODO: Abstract this into a separate function
1374
- // Set host_defined_options
1375
- Local<PrimitiveArray> host_defined_options =
1376
- PrimitiveArray::New (isolate, loader::HostDefinedOptions::kLength );
1377
- host_defined_options->Set (
1378
- isolate, loader::HostDefinedOptions::kID , id_symbol);
1379
-
1380
- ScriptOrigin origin (isolate,
1381
- filename,
1382
- 0 , // line offset
1383
- 0 , // column offset
1384
- true , // is cross origin
1385
- -1 , // script id
1386
- Local<Value>(), // source map URL
1387
- false , // is opaque (?)
1388
- false , // is WASM
1389
- false , // is ES Module
1390
- host_defined_options);
1391
-
1392
- ScriptCompiler::CachedData* cached_data = nullptr ;
1393
- ScriptCompiler::Source source = ScriptCompiler::Source (code, origin, cached_data);
1394
- ScriptCompiler::CompileOptions options;
1395
- if (source.GetCachedData () == nullptr ) {
1396
- options = ScriptCompiler::kNoCompileOptions ;
1397
- } else {
1398
- options = ScriptCompiler::kConsumeCodeCache ;
1399
- }
1400
- // End TODO
1396
+ Local<PrimitiveArray> host_defined_options = GetHostDefinedOptions (isolate, id_symbol);
1397
+ ScriptCompiler::Source source = GetCommonJSSourceInstance (
1398
+ isolate, code, filename, 0 , 0 , host_defined_options, nullptr );
1399
+ ScriptCompiler::CompileOptions options = GetCompileOptions (source);
1401
1400
1402
1401
std::vector<Local<String>> params = {
1403
1402
String::NewFromUtf8 (isolate, " exports" ).ToLocalChecked (),
0 commit comments