mirror of
https://github.com/hanzoai/next.js.git
synced 2026-10-30 14:46:38 +00:00
git-subtree-dir: turbopack git-subtree-mainline:344ddbf093git-subtree-split:fb033c4917
95 lines
2.7 KiB
JavaScript
95 lines
2.7 KiB
JavaScript
import { IPC } from "./index";
|
|
const ipc = IPC;
|
|
const queue = [];
|
|
export const run = async (moduleFactory)=>{
|
|
let nextId = 1;
|
|
const requests = new Map();
|
|
const internalIpc = {
|
|
sendInfo: (message)=>ipc.send({
|
|
type: "info",
|
|
data: message
|
|
}),
|
|
sendRequest: (message)=>{
|
|
const id = nextId++;
|
|
let resolve, reject;
|
|
const promise = new Promise((res, rej)=>{
|
|
resolve = res;
|
|
reject = rej;
|
|
});
|
|
requests.set(id, {
|
|
resolve,
|
|
reject
|
|
});
|
|
return ipc.send({
|
|
type: "request",
|
|
id,
|
|
data: message
|
|
}).then(()=>promise);
|
|
},
|
|
sendError: (error)=>{
|
|
return ipc.sendError(error);
|
|
}
|
|
};
|
|
let getValue;
|
|
try {
|
|
const module = await moduleFactory();
|
|
if (typeof module.init === "function") {
|
|
await module.init();
|
|
}
|
|
getValue = module.default;
|
|
await ipc.sendReady();
|
|
} catch (err) {
|
|
await ipc.sendReady();
|
|
await ipc.sendError(err);
|
|
}
|
|
let isRunning = false;
|
|
const run = async ()=>{
|
|
while(queue.length > 0){
|
|
const args = queue.shift();
|
|
try {
|
|
const value = await getValue(internalIpc, ...args);
|
|
await ipc.send({
|
|
type: "end",
|
|
data: value === undefined ? undefined : JSON.stringify(value, null, 2),
|
|
duration: 0
|
|
});
|
|
} catch (e) {
|
|
await ipc.sendError(e);
|
|
}
|
|
}
|
|
isRunning = false;
|
|
};
|
|
while(true){
|
|
const msg = await ipc.recv();
|
|
switch(msg.type){
|
|
case "evaluate":
|
|
{
|
|
queue.push(msg.args);
|
|
if (!isRunning) {
|
|
isRunning = true;
|
|
run();
|
|
}
|
|
break;
|
|
}
|
|
case "result":
|
|
{
|
|
const request = requests.get(msg.id);
|
|
if (request) {
|
|
requests.delete(msg.id);
|
|
if (msg.error) {
|
|
request.reject(new Error(msg.error));
|
|
} else {
|
|
request.resolve(msg.data);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
console.error("unexpected message type", msg.type);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
}
|
|
};
|