UNPKG

one

Version:

One is a new React Framework that makes Vite serve both native and web.

190 lines (187 loc) 8.02 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: !0 }); }, __copyProps = (to, from, except, desc) => { if (from && typeof from == "object" || typeof from == "function") for (let key of __getOwnPropNames(from)) !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); return to; }; var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod); var workerPool_exports = {}; __export(workerPool_exports, { BuildWorkerPool: () => BuildWorkerPool, getWorkerPool: () => getWorkerPool, terminateWorkerPool: () => terminateWorkerPool }); module.exports = __toCommonJS(workerPool_exports); var import_worker_threads = require("worker_threads"), import_os = require("os"), import_url = require("url"), import_path = require("path"); const import_meta = {}; function _class_call_check(instance, Constructor) { if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function"); } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0, "value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor); } } function _create_class(Constructor, protoProps, staticProps) { return protoProps && _defineProperties(Constructor.prototype, protoProps), staticProps && _defineProperties(Constructor, staticProps), Constructor; } function _define_property(obj, key, value) { return key in obj ? Object.defineProperty(obj, key, { value, enumerable: !0, configurable: !0, writable: !0 }) : obj[key] = value, obj; } var __filename = (0, import_url.fileURLToPath)(import_meta.url), __dirname = (0, import_path.dirname)(__filename), BuildWorkerPool = /* @__PURE__ */function () { "use strict"; function BuildWorkerPool2() { var _this, _loop = function (i2) { var worker = new import_worker_threads.Worker(workerPath); worker.on("message", function (msg) { if (msg.type === "ready") _this1.readyCount++, _this1.available.push(worker), _this1.readyCount === size && _this1._resolveReady();else if (msg.type === "init-done") _this1.initCount++, _this1.initCount === size && _this1._resolveInitialized(), _this1.dispatch();else if (msg.type === "done" || msg.type === "error") { var pending = _this1.pendingById.get(msg.id); pending && (_this1.pendingById.delete(msg.id), msg.type === "done" ? pending.resolve(msg.result) : pending.reject(new Error(msg.error))), _this1.available.push(worker), _this1.dispatch(); } }), worker.on("error", function (err) { console.error("[BuildWorkerPool] Worker error:", err); }), _this.workers.push(worker); }, _this1 = this, size = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : Math.max(1, (0, import_os.cpus)().length - 1); _class_call_check(this, BuildWorkerPool2), _define_property(this, "workers", []), _define_property(this, "available", []), _define_property(this, "taskQueue", []), _define_property(this, "pendingById", /* @__PURE__ */new Map()), _define_property(this, "nextId", 0), _define_property(this, "readyCount", 0), _define_property(this, "initCount", 0), _define_property(this, "_ready", void 0), _define_property(this, "_resolveReady", void 0), _define_property(this, "_initialized", void 0), _define_property(this, "_resolveInitialized", void 0), _define_property(this, "_terminated", !1), this._ready = new Promise(function (resolve) { _this1._resolveReady = resolve; }), this._initialized = new Promise(function (resolve) { _this1._resolveInitialized = resolve; }); for (var workerPath = (0, import_path.join)(__dirname, "buildPageWorker.mjs"), i = 0; i < size; i++) _this = this, _loop(i); } return _create_class(BuildWorkerPool2, [{ key: "size", get: function () { return this.workers.length; } }, { key: "initialize", value: // initialize all workers - they load config themselves from vite.config async function () { await this._ready; var _iteratorNormalCompletion = !0, _didIteratorError = !1, _iteratorError = void 0; try { for (var _iterator = this.workers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) { var worker = _step.value; worker.postMessage({ type: "init", id: this.nextId++ }); } } catch (err) { _didIteratorError = !0, _iteratorError = err; } finally { try { !_iteratorNormalCompletion && _iterator.return != null && _iterator.return(); } finally { if (_didIteratorError) throw _iteratorError; } } await this._initialized; } }, { key: "dispatch", value: function () { for (; this.available.length > 0 && this.taskQueue.length > 0;) { var worker = this.available.shift(), { msg, pending } = this.taskQueue.shift(); this.pendingById.set(pending.id, pending), worker.postMessage(msg); } } }, { key: "buildPage", value: async function (args) { var _this = this, _args_foundRoute_layouts, _args_foundRoute_middlewares; if (this._terminated) throw new Error("Worker pool has been terminated"); var serializedRoute = { type: args.foundRoute.type, file: args.foundRoute.file, // only keep serializable layout data layouts: (_args_foundRoute_layouts = args.foundRoute.layouts) === null || _args_foundRoute_layouts === void 0 ? void 0 : _args_foundRoute_layouts.map(function (layout) { return { contextKey: layout.contextKey, loaderServerPath: layout.loaderServerPath, layoutRenderMode: layout.layoutRenderMode }; }), // only keep contextKey from middlewares middlewares: (_args_foundRoute_middlewares = args.foundRoute.middlewares) === null || _args_foundRoute_middlewares === void 0 ? void 0 : _args_foundRoute_middlewares.map(function (mw) { return { contextKey: mw.contextKey }; }) }, id = this.nextId++, msg = { type: "build", id, args: { ...args, foundRoute: serializedRoute } }; return new Promise(function (resolve, reject) { var pending = { id, resolve, reject }; _this.taskQueue.push({ msg, pending }), _this.dispatch(); }); } }, { key: "terminate", value: async function () { this._terminated = !0, await Promise.all(this.workers.map(function (w) { return w.terminate(); })), this.workers = [], this.available = []; } }]), BuildWorkerPool2; }(), pool = null; function getWorkerPool(size) { return pool || (pool = new BuildWorkerPool(size)), pool; } async function terminateWorkerPool() { pool && (await pool.terminate(), pool = null); } //# sourceMappingURL=workerPool.native.js.map