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