UNPKG

vite-plugin-react-server

Version:
78 lines (75 loc) 9.24 kB
/** * vite-plugin-react-server * Copyright (c) Nico Brinkkemper * MIT License */ import { configureRequestHandler } from './configureRequestHandler.client.js'; import { MessageChannel } from 'node:worker_threads'; import { setMaxListenersOnPort, unrefPort } from '../stream/setMaxListeners.js'; const configureReactServer = function _createReactWorkerServer({ server, autoDiscoveredFiles, userOptions, configEnv, hmrChannel, onWorkerCreated, serverManifest, resolvedConfig }) { const logger = server.config.customLogger || server.config.logger; const verbose = userOptions.verbose || false; if (verbose) { logger?.info( `[createReactWorkerServer] Configuring worker-based rendering` ); } server.ws.on("restart", async () => { logger?.info( "[createReactWorkerServer] Server restarting, shutting down worker..." ); }); let currentWorker = null; const effectiveHmrChannel = (() => { const channel = hmrChannel || new MessageChannel(); const initialMaxListeners = 500; setMaxListenersOnPort(channel.port1, initialMaxListeners); setMaxListenersOnPort(channel.port2, initialMaxListeners); unrefPort(channel.port1); unrefPort(channel.port2); return channel; })(); configureRequestHandler({ server, autoDiscoveredFiles, userOptions, configEnv, hmrChannel: effectiveHmrChannel, serverManifest, resolvedConfig, onWorkerCreated: (worker, restart) => { currentWorker = worker; if (onWorkerCreated) { onWorkerCreated(worker, restart); } } }); return { sendHmrUpdate: (file, routes) => { if (currentWorker) { const normalizedPath = file.replace(userOptions.projectRoot || server.config.root, "").replace(/^\/+/, ""); currentWorker.postMessage({ type: "HMR_UPDATE", id: normalizedPath, path: file, routes: routes || [], timestamp: Date.now() }); if (verbose) { logger?.info(`[createReactWorkerServer] Sent HMR_UPDATE for ${file} to worker`); } } } }; }; export { configureReactServer }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJlUmVhY3RTZXJ2ZXIuY2xpZW50LmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9wbHVnaW4vZGV2LXNlcnZlci9jb25maWd1cmVSZWFjdFNlcnZlci5jbGllbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29uZmlndXJlUmVxdWVzdEhhbmRsZXIgfSBmcm9tIFwiLi9jb25maWd1cmVSZXF1ZXN0SGFuZGxlci5jbGllbnQuanNcIjtcbmltcG9ydCB7IE1lc3NhZ2VDaGFubmVsIH0gZnJvbSBcIm5vZGU6d29ya2VyX3RocmVhZHNcIjtcbmltcG9ydCB0eXBlIHsgQ3JlYXRlUmVhY3RXb3JrZXJTZXJ2ZXJGbiB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBzZXRNYXhMaXN0ZW5lcnNPblBvcnQsIHVucmVmUG9ydCB9IGZyb20gXCIuLi9zdHJlYW0vc2V0TWF4TGlzdGVuZXJzLmpzXCI7XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgUmVhY3QgV29ya2VyIFNlcnZlciB0aGF0IGNvbmZpZ3VyZXMgd29ya2VyLWJhc2VkIHJlbmRlcmluZ1xuICogU2V0cyB1cCBtaWRkbGV3YXJlLCBITVIsIGFuZCB3b3JrZXIgbWFuYWdlbWVudCBsaWtlIHJlYWN0LWNsaWVudC9wbHVnaW4uY2xpZW50LnRzXG4gKi9cbmV4cG9ydCBjb25zdCBjb25maWd1cmVSZWFjdFNlcnZlcjogQ3JlYXRlUmVhY3RXb3JrZXJTZXJ2ZXJGbiA9XG4gIGZ1bmN0aW9uIF9jcmVhdGVSZWFjdFdvcmtlclNlcnZlcih7XG4gICAgc2VydmVyLFxuICAgIGF1dG9EaXNjb3ZlcmVkRmlsZXMsXG4gICAgdXNlck9wdGlvbnMsXG4gICAgY29uZmlnRW52LFxuICAgIGhtckNoYW5uZWwsXG4gICAgb25Xb3JrZXJDcmVhdGVkLFxuICAgIHNlcnZlck1hbmlmZXN0LFxuICAgIHJlc29sdmVkQ29uZmlnLFxuICB9KSB7XG4gICAgY29uc3QgbG9nZ2VyID0gc2VydmVyLmNvbmZpZy5jdXN0b21Mb2dnZXIgfHwgc2VydmVyLmNvbmZpZy5sb2dnZXI7XG4gICAgY29uc3QgdmVyYm9zZSA9IHVzZXJPcHRpb25zLnZlcmJvc2UgfHwgZmFsc2U7XG5cbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICBgW2NyZWF0ZVJlYWN0V29ya2VyU2VydmVyXSBDb25maWd1cmluZyB3b3JrZXItYmFzZWQgcmVuZGVyaW5nYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgdXAgcmVzdGFydCBsaXN0ZW5lciBmb3Igd29ya2VyIGNsZWFudXBcbiAgICBzZXJ2ZXIud3Mub24oXCJyZXN0YXJ0XCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGxvZ2dlcj8uaW5mbyhcbiAgICAgICAgXCJbY3JlYXRlUmVhY3RXb3JrZXJTZXJ2ZXJdIFNlcnZlciByZXN0YXJ0aW5nLCBzaHV0dGluZyBkb3duIHdvcmtlci4uLlwiXG4gICAgICApO1xuICAgICAgLy8gV29ya2VyIGNsZWFudXAgd291bGQgYmUgaGFuZGxlZCBieSB0aGUgd29ya2VyIG1hbmFnZW1lbnRcbiAgICB9KTtcblxuICAgIGxldCBjdXJyZW50V29ya2VyOiBhbnkgPSBudWxsO1xuXG4gICAgLy8gQ29uZmlndXJlIHRoZSB3b3JrZXIgcmVxdWVzdCBoYW5kbGVyIChzZXRzIHVwIG1pZGRsZXdhcmUpXG4gICAgY29uc3QgZWZmZWN0aXZlSG1yQ2hhbm5lbCA9ICgoKSA9PiB7XG4gICAgICBjb25zdCBjaGFubmVsID0gaG1yQ2hhbm5lbCB8fCBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgIC8vIEluY3JlYXNlIG1heCBsaXN0ZW5lcnMgdG8gcHJldmVudCB3YXJuaW5ncyBkdXJpbmcgZGV2ZWxvcG1lbnRcbiAgICAgIC8vIFRoaXMgaXMgYSB0YXJnZXRlZCBmaXggZm9yIHRoZSBtZW1vcnkgbGVhayB3YXJuaW5nc1xuICAgICAgLy8gV2UgbmVlZCB0byBzZXQgdGhpcyBvbiBCT1RIIHBvcnRzIGJlY2F1c2UgbGlzdGVuZXJzIGNhbiBiZSBhZGRlZCB0byBlaXRoZXIgc2lkZVxuICAgICAgLy8gVXNlIGEgaGlnaCBkZWZhdWx0ICg1MDApIHRvIGFjY29tbW9kYXRlIGxhcmdlIHByb2plY3RzIHdpdGggbWFueSByb3V0ZXNcbiAgICAgIC8vIHJlc3RhcnRXb3JrZXIgd2lsbCBhZGp1c3QgdGhpcyBiYXNlZCBvbiBhY3R1YWwgcm91dGUgY291bnRcbiAgICAgIGNvbnN0IGluaXRpYWxNYXhMaXN0ZW5lcnMgPSA1MDA7XG4gICAgICBzZXRNYXhMaXN0ZW5lcnNPblBvcnQoY2hhbm5lbC5wb3J0MSwgaW5pdGlhbE1heExpc3RlbmVycyk7XG4gICAgICBzZXRNYXhMaXN0ZW5lcnNPblBvcnQoY2hhbm5lbC5wb3J0MiwgaW5pdGlhbE1heExpc3RlbmVycyk7XG4gICAgICB1bnJlZlBvcnQoY2hhbm5lbC5wb3J0MSk7XG4gICAgICB1bnJlZlBvcnQoY2hhbm5lbC5wb3J0Mik7XG4gICAgICByZXR1cm4gY2hhbm5lbDtcbiAgICB9KSgpO1xuXG4gICAgY29uZmlndXJlUmVxdWVzdEhhbmRsZXIoe1xuICAgICAgc2VydmVyLFxuICAgICAgYXV0b0Rpc2NvdmVyZWRGaWxlcyxcbiAgICAgIHVzZXJPcHRpb25zLFxuICAgICAgY29uZmlnRW52LFxuICAgICAgaG1yQ2hhbm5lbDogZWZmZWN0aXZlSG1yQ2hhbm5lbCxcbiAgICAgIHNlcnZlck1hbmlmZXN0LFxuICAgICAgcmVzb2x2ZWRDb25maWcsXG4gICAgICBvbldvcmtlckNyZWF0ZWQ6ICh3b3JrZXI6IGFueSwgcmVzdGFydD86ICgpID0+IFByb21pc2U8dm9pZD4pID0+IHtcbiAgICAgICAgY3VycmVudFdvcmtlciA9IHdvcmtlcjtcbiAgICAgICAgaWYgKG9uV29ya2VyQ3JlYXRlZCkge1xuICAgICAgICAgIG9uV29ya2VyQ3JlYXRlZCh3b3JrZXIsIHJlc3RhcnQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNlbmRIbXJVcGRhdGU6IChmaWxlOiBzdHJpbmcsIHJvdXRlcz86IHN0cmluZ1tdKSA9PiB7XG4gICAgICAgIGlmIChjdXJyZW50V29ya2VyKSB7XG4gICAgICAgICAgLy8gTm90aWZ5IHRoZSB3b3JrZXIgdGhhdCBhIGZpbGUgY2hhbmdlZC4gVGhlIHdvcmtlcidzIEhNUl9VUERBVEVcbiAgICAgICAgICAvLyBoYW5kbGVyIGludmFsaWRhdGVzIHRoZSBNb2R1bGVSdW5uZXIgY2FjaGUgc28gdGhlIG5leHQgaW1wb3J0XG4gICAgICAgICAgLy8gcmUtZmV0Y2hlcyB0cmFuc2Zvcm1lZCBjb2RlIHRocm91Z2ggVml0ZSdzIHBpcGVsaW5lLlxuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gZmlsZS5yZXBsYWNlKHVzZXJPcHRpb25zLnByb2plY3RSb290IHx8IHNlcnZlci5jb25maWcucm9vdCwgJycpLnJlcGxhY2UoL15cXC8rLywgJycpO1xuICAgICAgICAgIGN1cnJlbnRXb3JrZXIucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgdHlwZTogXCJITVJfVVBEQVRFXCIsXG4gICAgICAgICAgICBpZDogbm9ybWFsaXplZFBhdGgsXG4gICAgICAgICAgICBwYXRoOiBmaWxlLFxuICAgICAgICAgICAgcm91dGVzOiByb3V0ZXMgfHwgW10sXG4gICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgICAgfSBzYXRpc2ZpZXMgYW55KTtcblxuICAgICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgICBsb2dnZXI/LmluZm8oYFtjcmVhdGVSZWFjdFdvcmtlclNlcnZlcl0gU2VudCBITVJfVVBEQVRFIGZvciAke2ZpbGV9IHRvIHdvcmtlcmApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuICB9O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVVhLE1BQUEsb0JBQUEsR0FDWCxTQUFTLHdCQUF5QixDQUFB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