1/* eslint-disable node-core/required-modules,node-core/require-common-first */ 2 3'use strict'; 4 5const { runInThisContext } = require('vm'); 6const { parentPort, workerData } = require('worker_threads'); 7 8const { ResourceLoader } = require(workerData.wptRunner); 9const resource = new ResourceLoader(workerData.wptPath); 10 11global.self = global; 12global.GLOBAL = { 13 isWindow() { return false; } 14}; 15global.require = require; 16 17// This is a mock, because at the moment fetch is not implemented 18// in Node.js, but some tests and harness depend on this to pull 19// resources. 20global.fetch = function fetch(file) { 21 return resource.read(workerData.filename, file, true); 22}; 23 24if (workerData.initScript) { 25 runInThisContext(workerData.initScript); 26} 27 28runInThisContext(workerData.harness.code, { 29 filename: workerData.harness.filename 30}); 31 32// eslint-disable-next-line no-undef 33add_result_callback((result) => { 34 parentPort.postMessage({ 35 type: 'result', 36 result: { 37 status: result.status, 38 name: result.name, 39 message: result.message, 40 stack: result.stack, 41 }, 42 }); 43}); 44 45// eslint-disable-next-line no-undef 46add_completion_callback((_, status) => { 47 parentPort.postMessage({ 48 type: 'completion', 49 status, 50 }); 51}); 52 53for (const scriptToRun of workerData.scriptsToRun) { 54 runInThisContext(scriptToRun.code, { filename: scriptToRun.filename }); 55} 56