UNPKG

vite-plugin-react-server

Version:
86 lines (83 loc) 9.51 kB
/** * vite-plugin-react-server * Copyright (c) Nico Brinkkemper * MIT License */ import { Writable } from 'node:stream'; class MessagePortWritable extends Writable { fromWorker; toWorker; isBackpressured = false; closeHandler = null; messageHandler = null; 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.closeHandler = () => { this.destroy(); }; this.fromWorker.on("close", this.closeHandler); if (this.toWorker) { this.messageHandler = (message) => { if (message.type === "DRAIN") { this.isBackpressured = true; } else if (message.type === "RESUME") { this.isBackpressured = false; } }; this.toWorker.on("message", this.messageHandler); } } removeListeners() { if (this.closeHandler) { this.fromWorker.removeListener("close", this.closeHandler); this.closeHandler = null; } if (this.messageHandler && this.toWorker) { this.toWorker.removeListener("message", this.messageHandler); this.messageHandler = null; } } _write(chunk, _encoding, callback) { try { if (this.isBackpressured) { return; } if (chunk && typeof chunk === "object" && chunk.type === "error") { callback(new Error("Error sent through data stream - this should be handled by control port")); return; } this.fromWorker.postMessage(chunk); callback(); } catch (error) { callback(error); } } _final(callback) { try { this.fromWorker.postMessage(null); callback(); process.nextTick(() => { this.removeListeners(); this.emit("finish"); }); } catch (error) { callback(error); } } _destroy(error, callback) { this.removeListeners(); callback(error); } } export { MessagePortWritable }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVzc2FnZVBvcnRXcml0YWJsZS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL3N0cmVhbS9NZXNzYWdlUG9ydFdyaXRhYmxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdyaXRhYmxlIH0gZnJvbSBcIm5vZGU6c3RyZWFtXCI7XG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2VQb3J0IH0gZnJvbSBcIm5vZGU6d29ya2VyX3RocmVhZHNcIjtcblxuLyoqXG4gKiBBIFdyaXRhYmxlIHN0cmVhbSB0aGF0IHdyYXBzIGEgTWVzc2FnZVBvcnQgZm9yIHNlbmRpbmcgZGF0YSB0byB0aGUgbWFpbiB0aHJlYWRcbiAqIFxuICogVGhpcyBwcm92aWRlcyBhIHByb3BlciBOb2RlLmpzIHN0cmVhbSBpbnRlcmZhY2UgZm9yIGRhdGEgZ29pbmcgdG8gdGhlIG1haW4gdGhyZWFkLFxuICogd2l0aCBwcm9wZXIgYmFja3ByZXNzdXJlIGhhbmRsaW5nIHRocm91Z2ggZHJhaW4gZXZlbnRzLlxuICovXG5leHBvcnQgY2xhc3MgTWVzc2FnZVBvcnRXcml0YWJsZSBleHRlbmRzIFdyaXRhYmxlIHtcbiAgcHJpdmF0ZSBmcm9tV29ya2VyOiBNZXNzYWdlUG9ydDtcbiAgcHJpdmF0ZSB0b1dvcmtlcj86IE1lc3NhZ2VQb3J0O1xuICBwcml2YXRlIGlzQmFja3ByZXNzdXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGNsb3NlSGFuZGxlcjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbWVzc2FnZUhhbmRsZXI6ICgobWVzc2FnZTogYW55KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKGZyb21Xb3JrZXI6IE1lc3NhZ2VQb3J0LCB0b1dvcmtlcj86IE1lc3NhZ2VQb3J0KSB7XG4gICAgc3VwZXIoe1xuICAgICAgb2JqZWN0TW9kZTogZmFsc2UsIC8vIFdlJ3JlIGRlYWxpbmcgd2l0aCByYXcgZGF0YSBjaHVua3NcbiAgICAgIGhpZ2hXYXRlck1hcms6IDE2ICogMTAyNCwgLy8gMTZLQiBidWZmZXJcbiAgICB9KTtcbiAgICBcbiAgICB0aGlzLmZyb21Xb3JrZXIgPSBmcm9tV29ya2VyO1xuICAgIHRoaXMudG9Xb3JrZXIgPSB0b1dvcmtlcjtcbiAgICB0aGlzLnNldHVwTWVzc2FnZUxpc3RlbmVyKCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwTWVzc2FnZUxpc3RlbmVyKCkge1xuICAgIHRoaXMuY2xvc2VIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgfTtcbiAgICB0aGlzLmZyb21Xb3JrZXIub24oJ2Nsb3NlJywgdGhpcy5jbG9zZUhhbmRsZXIpO1xuXG4gICAgLy8gTGlzdGVuIGZvciBiYWNrcHJlc3N1cmUgc2lnbmFscyBvbiB0aGUgY29udHJvbCBwb3J0XG4gICAgaWYgKHRoaXMudG9Xb3JrZXIpIHtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSAobWVzc2FnZTogYW55KSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlLnR5cGUgPT09ICdEUkFJTicpIHtcbiAgICAgICAgICB0aGlzLmlzQmFja3ByZXNzdXJlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS50eXBlID09PSAnUkVTVU1FJykge1xuICAgICAgICAgIHRoaXMuaXNCYWNrcHJlc3N1cmVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLnRvV29ya2VyLm9uKCdtZXNzYWdlJywgdGhpcy5tZXNzYWdlSGFuZGxlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VIYW5kbGVyKSB7XG4gICAgICB0aGlzLmZyb21Xb3JrZXIucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgdGhpcy5jbG9zZUhhbmRsZXIpO1xuICAgICAgdGhpcy5jbG9zZUhhbmRsZXIgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5tZXNzYWdlSGFuZGxlciAmJiB0aGlzLnRvV29ya2VyKSB7XG4gICAgICB0aGlzLnRvV29ya2VyLnJlbW92ZUxpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy5tZXNzYWdlSGFuZGxlcik7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBfd3JpdGUoY2h1bms6IGFueSwgX2VuY29kaW5nOiBCdWZmZXJFbmNvZGluZywgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yIHwgbnVsbCkgPT4gdm9pZCkge1xuICAgIHRyeSB7XG4gICAgICAvLyBDaGVjayBpZiB3ZSdyZSBiYWNrcHJlc3N1cmVkIC0gaWYgc28sIGRvbid0IHNlbmQgZGF0YVxuICAgICAgaWYgKHRoaXMuaXNCYWNrcHJlc3N1cmVkKSB7XG4gICAgICAgIC8vIFNpZ25hbCBiYWNrcHJlc3N1cmUgdG8gUmVhY3QgYnkgbm90IGNhbGxpbmcgY2FsbGJhY2sgaW1tZWRpYXRlbHlcbiAgICAgICAgLy8gUmVhY3Qgd2lsbCB3YWl0IGFuZCByZXRyeSB3aGVuIHRoZSBzdHJlYW0gaXMgcmVhZHlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiB0aGUgY2h1bmsgY29udGFpbnMgYW4gZXJyb3IgLSBpZiBzbywgZG9uJ3Qgc2VuZCBpdCB0aHJvdWdoIHRoZSBkYXRhIHN0cmVhbVxuICAgICAgLy8gRXJyb3JzIHNob3VsZCBiZSBoYW5kbGVkIHRocm91Z2ggdGhlIGNvbnRyb2wgcG9ydCwgbm90IHRoZSBkYXRhIHN0cmVhbVxuICAgICAgaWYgKGNodW5rICYmIHR5cGVvZiBjaHVuayA9PT0gJ29iamVjdCcgJiYgY2h1bmsudHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoJ0Vycm9yIHNlbnQgdGhyb3VnaCBkYXRhIHN0cmVhbSAtIHRoaXMgc2hvdWxkIGJlIGhhbmRsZWQgYnkgY29udHJvbCBwb3J0JykpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFNlbmQgdGhlIGNodW5rIHRocm91Z2ggdGhlIE1lc3NhZ2VQb3J0XG4gICAgICB0aGlzLmZyb21Xb3JrZXIucG9zdE1lc3NhZ2UoY2h1bmspO1xuICAgICAgXG4gICAgICAvLyBTaWduYWwgdGhhdCB0aGUgd3JpdGUgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVxuICAgICAgY2FsbGJhY2soKTtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9XG5cbiAgX2ZpbmFsKGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvciB8IG51bGwpID0+IHZvaWQpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5mcm9tV29ya2VyLnBvc3RNZXNzYWdlKG51bGwpOyAvLyBFbmQtb2Ytc3RyZWFtIHNpZ25hbFxuICAgICAgY2FsbGJhY2soKTtcbiAgICAgIFxuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXJzKCk7XG4gICAgICAgIHRoaXMuZW1pdCgnZmluaXNoJyk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IgYXMgRXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIF9kZXN0cm95KGVycm9yOiBFcnJvciB8IG51bGwsIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvciB8IG51bGwpID0+IHZvaWQpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVycygpO1xuICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgfVxuXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVNPLE1BQU0sNEJBQTRCLFFBQVMsQ0FBQTtBQUFBLEVBQ3hDLFVBQUE7QUFBQSxFQUNBLFFBQUE7QUFBQSxFQUNBLGVBQTJCLEdBQUEsS0FBQTtBQUFBLEVBQzNCLFlBQW9DLEdBQUEsSUFBQTtB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