UNPKG

one

Version:

One is a React framework for web, iOS, and Android apps.

1 lines • 6.94 kB
{"version":3,"file":"workerPool.js","names":[],"sources":["esm/cli/workerPool.js"],"sourcesContent":["import { Worker } from \"node:worker_threads\";\nimport { cpus } from \"node:os\";\nimport { fileURLToPath } from \"node:url\";\nimport { dirname, join } from \"node:path\";\nconst workerDirectory = typeof __dirname === \"string\" ? join(__dirname, \"..\", \"..\", \"esm\", \"cli\") : dirname(fileURLToPath(import.meta.url));\nclass BuildWorkerPool {\n workers = [];\n available = [];\n taskQueue = [];\n pendingById = /* @__PURE__ */ new Map();\n nextId = 0;\n readyCount = 0;\n initCount = 0;\n _ready;\n _resolveReady;\n _initialized;\n _resolveInitialized;\n _terminated = false;\n constructor(size = Math.max(1, cpus().length - 1)) {\n this._ready = new Promise((resolve) => {\n this._resolveReady = resolve;\n });\n this._initialized = new Promise((resolve) => {\n this._resolveInitialized = resolve;\n });\n const workerPath = join(workerDirectory, \"buildPageWorker.mjs\");\n for (let i = 0; i < size; i++) {\n const worker = new Worker(workerPath);\n worker.on(\"message\", (msg) => {\n if (msg.type === \"ready\") {\n this.readyCount++;\n this.available.push(worker);\n if (this.readyCount === size) {\n this._resolveReady();\n }\n } else if (msg.type === \"init-done\") {\n this.initCount++;\n if (this.initCount === size) {\n this._resolveInitialized();\n }\n this.dispatch();\n } else if (msg.type === \"done\" || msg.type === \"error\") {\n const pending = this.pendingById.get(msg.id);\n if (pending) {\n this.pendingById.delete(msg.id);\n if (msg.type === \"done\") {\n pending.resolve(msg.result);\n } else {\n pending.reject(new Error(msg.error));\n }\n }\n this.available.push(worker);\n this.dispatch();\n }\n });\n worker.on(\"error\", (err) => {\n console.error(\"[BuildWorkerPool] Worker error:\", err);\n });\n this.workers.push(worker);\n }\n }\n get size() {\n return this.workers.length;\n }\n // initialize all workers with pre-loaded config from main thread\n async initialize(oneOptions) {\n await this._ready;\n for (const worker of this.workers) {\n worker.postMessage({ type: \"init\", id: this.nextId++, oneOptions });\n }\n await this._initialized;\n }\n dispatch() {\n while (this.available.length > 0 && this.taskQueue.length > 0) {\n const worker = this.available.shift();\n const { msg, pending } = this.taskQueue.shift();\n this.pendingById.set(pending.id, pending);\n worker.postMessage(msg);\n }\n }\n async buildPage(args) {\n if (this._terminated) {\n throw new Error(\"Worker pool has been terminated\");\n }\n const serializedRoute = {\n type: args.foundRoute.type,\n file: args.foundRoute.file,\n // only keep serializable layout data\n layouts: args.foundRoute.layouts?.map((layout) => ({\n contextKey: layout.contextKey,\n loaderServerPath: layout.loaderServerPath,\n layoutRenderMode: layout.layoutRenderMode\n })),\n // only keep contextKey from middlewares\n middlewares: args.foundRoute.middlewares?.map((mw) => ({\n contextKey: mw.contextKey\n }))\n };\n const id = this.nextId++;\n const msg = {\n type: \"build\",\n id,\n args: {\n ...args,\n foundRoute: serializedRoute\n }\n };\n return new Promise((resolve, reject) => {\n const pending = {\n id,\n resolve: (result) => resolve({ ...result, cssContents: args.allCSSContents }),\n reject\n };\n this.taskQueue.push({ msg, pending });\n this.dispatch();\n });\n }\n async terminate() {\n this._terminated = true;\n await Promise.all(this.workers.map((w) => w.terminate()));\n this.workers = [];\n this.available = [];\n }\n}\nlet pool = null;\nfunction getWorkerPool(size) {\n if (!pool) {\n pool = new BuildWorkerPool(size);\n }\n return pool;\n}\nasync function terminateWorkerPool() {\n if (pool) {\n await pool.terminate();\n pool = null;\n }\n}\nexport {\n BuildWorkerPool,\n getWorkerPool,\n terminateWorkerPool\n};\n//# sourceMappingURL=workerPool.js.map\n"],"mappings":"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"}