UNPKG

vite-plugin-react-server

Version:
102 lines (99 loc) 12 kB
/** * vite-plugin-react-server * Copyright (c) Nico Brinkkemper * MIT License */ import { Readable } from 'node:stream'; class MessagePortReadable extends Readable { fromWorker; toWorker; ended = false; closed = false; messageHandler; closeHandler; errorHandler; constructor(fromWorker, toWorker) { super({ objectMode: false, // We're dealing with raw data chunks highWaterMark: 16 * 1024 // 16KB buffer }); this.fromWorker = fromWorker; this.toWorker = toWorker; this.setupMessageListener(); } setupMessageListener() { this.messageHandler = (chunk) => { if (this.closed || this.ended) { return; } if (chunk === null) { this.ended = true; this.push(null); return; } let bufferChunk; if (Buffer.isBuffer(chunk)) { bufferChunk = chunk; } else if (chunk instanceof Uint8Array) { bufferChunk = Buffer.from(chunk); } else if (typeof chunk === "string") { bufferChunk = Buffer.from(chunk, "utf8"); } else { bufferChunk = Buffer.from(JSON.stringify(chunk), "utf8"); } const canContinue = this.push(bufferChunk); if (!canContinue && !this.closed) { try { if (this.toWorker) { this.toWorker.postMessage({ type: "DRAIN" }); } else { this.fromWorker.postMessage({ type: "DRAIN" }); } } catch (error) { } } }; this.closeHandler = () => { this.closed = true; if (!this.ended) { this.ended = true; this.push(null); } }; this.errorHandler = (error) => { this.closed = true; if (!this.ended) { this.ended = true; this.destroy(error); } }; this.fromWorker.on("message", this.messageHandler); this.fromWorker.on("close", this.closeHandler); this.fromWorker.on("error", this.errorHandler); } _read() { if (!this.closed && !this.ended) { try { this.fromWorker.postMessage({ type: "DRAIN" }); } catch (error) { } } } _destroy(error, callback) { this.closed = true; if (this.messageHandler) { this.fromWorker.removeListener("message", this.messageHandler); } if (this.closeHandler) { this.fromWorker.removeListener("close", this.closeHandler); } if (this.errorHandler) { this.fromWorker.removeListener("error", this.errorHandler); } callback(error); } } export { MessagePortReadable }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVzc2FnZVBvcnRSZWFkYWJsZS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL3N0cmVhbS9NZXNzYWdlUG9ydFJlYWRhYmxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlYWRhYmxlIH0gZnJvbSBcIm5vZGU6c3RyZWFtXCI7XG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2VQb3J0IH0gZnJvbSBcIm5vZGU6d29ya2VyX3RocmVhZHNcIjtcblxuLyoqXG4gKiBBIFJlYWRhYmxlIHN0cmVhbSB0aGF0IHdyYXBzIGEgTWVzc2FnZVBvcnQgZm9yIHJlY2VpdmluZyBkYXRhIGZyb20gYSB3b3JrZXIgdGhyZWFkXG4gKiBcbiAqIFRoaXMgcHJvdmlkZXMgYSBwcm9wZXIgTm9kZS5qcyBzdHJlYW0gaW50ZXJmYWNlIGZvciBkYXRhIGNvbWluZyBmcm9tIGEgd29ya2VyIHRocmVhZCxcbiAqIHdpdGggcHJvcGVyIGJhY2twcmVzc3VyZSBoYW5kbGluZyB0aHJvdWdoIGRyYWluIGV2ZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIE1lc3NhZ2VQb3J0UmVhZGFibGUgZXh0ZW5kcyBSZWFkYWJsZSB7XG4gIHByaXZhdGUgZnJvbVdvcmtlcjogTWVzc2FnZVBvcnQ7XG4gIHByaXZhdGUgdG9Xb3JrZXI/OiBNZXNzYWdlUG9ydDtcbiAgcHJpdmF0ZSBlbmRlZCA9IGZhbHNlO1xuICBwdWJsaWMgY2xvc2VkID0gZmFsc2U7XG4gIHByaXZhdGUgbWVzc2FnZUhhbmRsZXI/OiAoY2h1bms6IGFueSkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBjbG9zZUhhbmRsZXI/OiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIGVycm9ySGFuZGxlcj86IChlcnJvcjogYW55KSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKGZyb21Xb3JrZXI6IE1lc3NhZ2VQb3J0LCB0b1dvcmtlcj86IE1lc3NhZ2VQb3J0KSB7XG4gICAgc3VwZXIoe1xuICAgICAgb2JqZWN0TW9kZTogZmFsc2UsIC8vIFdlJ3JlIGRlYWxpbmcgd2l0aCByYXcgZGF0YSBjaHVua3NcbiAgICAgIGhpZ2hXYXRlck1hcms6IDE2ICogMTAyNCwgLy8gMTZLQiBidWZmZXJcbiAgICB9KTtcbiAgICBcbiAgICB0aGlzLmZyb21Xb3JrZXIgPSBmcm9tV29ya2VyO1xuICAgIHRoaXMudG9Xb3JrZXIgPSB0b1dvcmtlcjtcbiAgICB0aGlzLnNldHVwTWVzc2FnZUxpc3RlbmVyKCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwTWVzc2FnZUxpc3RlbmVyKCkge1xuICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSAoY2h1bms6IGFueSkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2xvc2VkIHx8IHRoaXMuZW5kZWQpIHtcbiAgICAgICAgcmV0dXJuOyAvLyBJZ25vcmUgbWVzc2FnZXMgYWZ0ZXIgY2xvc2UvZW5kXG4gICAgICB9XG5cbiAgICAgIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgICAgICAvLyBFbmQgb2Ygc3RyZWFtIHNpZ25hbFxuICAgICAgICB0aGlzLmVuZGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wdXNoKG51bGwpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIENvbnZlcnQgY2h1bmsgdG8gQnVmZmVyIGlmIG5lZWRlZCBmb3IgcHJvcGVyIHN0cmVhbSBoYW5kbGluZ1xuICAgICAgbGV0IGJ1ZmZlckNodW5rOiBCdWZmZXI7XG4gICAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKGNodW5rKSkge1xuICAgICAgICBidWZmZXJDaHVuayA9IGNodW5rO1xuICAgICAgfSBlbHNlIGlmIChjaHVuayBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgYnVmZmVyQ2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuayk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgYnVmZmVyQ2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgJ3V0ZjgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIGl0J3MgYW4gb2JqZWN0LCBpdCBtaWdodCBiZSBhIHNlcmlhbGl6ZWQgYnVmZmVyIC0gY29udmVydCB0byBzdHJpbmdcbiAgICAgICAgYnVmZmVyQ2h1bmsgPSBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShjaHVuayksICd1dGY4Jyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFB1c2ggZGF0YSB0byB0aGUgc3RyZWFtXG4gICAgICBjb25zdCBjYW5Db250aW51ZSA9IHRoaXMucHVzaChidWZmZXJDaHVuayk7XG4gICAgICBcbiAgICAgIC8vIElmIHRoZSBzdHJlYW0gaXMgYmFja3ByZXNzdXJlZCwgc2VuZCBhIGRyYWluIHNpZ25hbCB0byB0aGUgd29ya2VyXG4gICAgICBpZiAoIWNhbkNvbnRpbnVlICYmICF0aGlzLmNsb3NlZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh0aGlzLnRvV29ya2VyKSB7XG4gICAgICAgICAgICB0aGlzLnRvV29ya2VyLnBvc3RNZXNzYWdlKHsgdHlwZTogJ0RSQUlOJyB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2sgdG8gZGF0YSBwb3J0IGlmIG5vIGNvbnRyb2wgcG9ydFxuICAgICAgICAgICAgdGhpcy5mcm9tV29ya2VyLnBvc3RNZXNzYWdlKHsgdHlwZTogJ0RSQUlOJyB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gUG9ydCBtYXkgYmUgY2xvc2VkIC0gaWdub3JlIGRyYWluIHNpZ25hbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuY2xvc2VIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgaWYgKCF0aGlzLmVuZGVkKSB7XG4gICAgICAgIHRoaXMuZW5kZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnB1c2gobnVsbCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuZXJyb3JIYW5kbGVyID0gKGVycm9yOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgIGlmICghdGhpcy5lbmRlZCkge1xuICAgICAgICB0aGlzLmVuZGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZXN0cm95KGVycm9yKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5mcm9tV29ya2VyLm9uKCdtZXNzYWdlJywgdGhpcy5tZXNzYWdlSGFuZGxlcik7XG4gICAgdGhpcy5mcm9tV29ya2VyLm9uKCdjbG9zZScsIHRoaXMuY2xvc2VIYW5kbGVyKTtcbiAgICB0aGlzLmZyb21Xb3JrZXIub24oJ2Vycm9yJywgdGhpcy5lcnJvckhhbmRsZXIpO1xuICB9XG5cbiAgX3JlYWQoKSB7XG4gICAgLy8gVGhlIHN0cmVhbSBpcyByZWFkeSB0byByZWNlaXZlIG1vcmUgZGF0YVxuICAgIC8vIFNlbmQgYSBkcmFpbiBzaWduYWwgdG8gdGhlIHdvcmtlciB0byByZXN1bWUgd3JpdGluZ1xuICAgIGlmICghdGhpcy5jbG9zZWQgJiYgIXRoaXMuZW5kZWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZnJvbVdvcmtlci5wb3N0TWVzc2FnZSh7IHR5cGU6ICdEUkFJTicgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBQb3J0IG1heSBiZSBjbG9zZWQgLSBpZ25vcmUgZHJhaW4gc2lnbmFsXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX2Rlc3Ryb3koZXJyb3I6IEVycm9yIHwgbnVsbCwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yIHwgbnVsbCkgPT4gdm9pZCkge1xuICAgIC8vIE1hcmsgYXMgY2xvc2VkIGJ1dCBkb24ndCBjbG9zZSB0aGUgcG9ydCBoZXJlXG4gICAgLy8gTGV0IHRoZSBjb25zdW1pbmcgc2lkZSAoUmVhY3QpIG1hbmFnZSB0aGUgcG9ydCBsaWZlY3ljbGVcbiAgICAvLyBUaGlzIHByZXZlbnRzIFwiQ29ubmVjdGlvbiBjbG9zZWRcIiBlcnJvcnMgd2hlbiBSZWFjdCBpcyBzdGlsbCBjb25zdW1pbmdcbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgXG4gICAgLy8gQ2xlYW4gdXAgZXZlbnQgbGlzdGVuZXJzIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzXG4gICAgaWYgKHRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgIHRoaXMuZnJvbVdvcmtlci5yZW1vdmVMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMubWVzc2FnZUhhbmRsZXIpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jbG9zZUhhbmRsZXIpIHtcbiAgICAgIHRoaXMuZnJvbVdvcmtlci5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCB0aGlzLmNsb3NlSGFuZGxlcik7XG4gICAgfVxuICAgIGlmICh0aGlzLmVycm9ySGFuZGxlcikge1xuICAgICAgdGhpcy5mcm9tV29ya2VyLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIHRoaXMuZXJyb3JIYW5kbGVyKTtcbiAgICB9XG4gICAgXG4gICAgLy8gTm90ZTogV2UgZG9uJ3QgY2FsbCB0aGlzLnBvcnQuY2xvc2UoKSBoZXJlLiBUaGUgcG9ydCB3aWxsIGJlIGNsb3NlZFxuICAgIC8vIGJ5IHRoZSBoaWdoZXItbGV2ZWwgc3RyZWFtIG1hbmFnZW1lbnQgd2hlbiBSZWFjdCBpcyBjb21wbGV0ZWx5IGRvbmUuXG4gICAgLy8gVGhpcyBmb2xsb3dzIHRoZSBpZGlvbWF0aWMgTm9kZS5qcyBzdHJlYW1zIHBhdHRlcm4gd2hlcmUgdGhlIGNvbnN1bWVyXG4gICAgLy8gY29udHJvbHMgdGhlIGxpZmVjeWNsZSwgbm90IHRoZSBwcm9kdWNlci5cbiAgICBcbiAgICBjYWxsYmFjayhlcnJvcik7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBU08sTUFBTSw0QkFBNEIsUUFBUyxDQUFBO0FBQUEsRUFDeEMsVUFBQTtBQUFBLEVBQ0EsUUFBQTtBQUFBLEVBQ0Es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