UNPKG

vite-plugin-react-server

Version:
117 lines (114 loc) 12.7 kB
/** * vite-plugin-react-server * Copyright (c) Nico Brinkkemper * MIT License */ import { fetchModule } from 'vite'; import { collectRunnerCss } from './collectRunnerCss.js'; function attachRunnerFetchHandler(port, server, logger, verbose = false) { const handler = async (msg) => { if (!msg) return; if (msg.__vprs === "rpc-request") { await handleRpc(msg); return; } if (msg.__vprs !== "runner-request") return; const { requestId, payload } = msg; try { const invoke = payload; if (invoke?.type !== "custom" || invoke?.event !== "vite:invoke" || !invoke.data) { throw new Error( `[runner-fetch] unexpected payload: ${JSON.stringify(payload)}` ); } const { name, data } = invoke.data; if (name !== "fetchModule") { throw new Error(`[runner-fetch] unsupported method: ${name}`); } const env = server.environments?.["server"]; if (!env) { throw new Error("[runner-fetch] server environment not initialized"); } const [url, importer, options] = data; const result = await fetchModule(env, url, importer, options); const response = { __vprs: "runner-response", requestId, result: { result } }; port.postMessage(response); } catch (error) { if (verbose) { logger.error( `[runner-fetch] error: ${error?.message ?? String(error)}`, { error: error instanceof Error ? error : new Error(String(error)) } ); } const response = { __vprs: "runner-response", requestId, result: { error: { name: error?.name, message: String(error?.message ?? error), stack: error?.stack } } }; port.postMessage(response); } }; const handleRpc = async (msg) => { const { requestId, method, args } = msg; if (verbose) { logger.info( `[runner-rpc] received: method=${method} requestId=${requestId}` ); } try { let result; if (method === "collectCss") { const [pagePath, projectRoot] = args; result = await collectRunnerCss( server, pagePath, projectRoot, logger, verbose ); } else { throw new Error(`[runner-rpc] unsupported method: ${method}`); } const response = { __vprs: "rpc-response", requestId, result }; port.postMessage(response); } catch (error) { if (verbose) { logger.error( `[runner-rpc] ${method} failed: ${error?.message ?? String(error)}`, { error: error instanceof Error ? error : new Error(String(error)) } ); } const response = { __vprs: "rpc-response", requestId, error: { name: error?.name, message: String(error?.message ?? error), stack: error?.stack } }; port.postMessage(response); } }; port.on("message", handler); port.start(); return () => { port.off("message", handler); }; } export { attachRunnerFetchHandler }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlUnVubmVyRmV0Y2guc2VydmVyLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9wbHVnaW4vZGV2LXNlcnZlci9oYW5kbGVSdW5uZXJGZXRjaC5zZXJ2ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBNZXNzYWdlUG9ydCB9IGZyb20gXCJub2RlOndvcmtlcl90aHJlYWRzXCI7XG5pbXBvcnQgeyBmZXRjaE1vZHVsZSwgdHlwZSBMb2dnZXIsIHR5cGUgVml0ZURldlNlcnZlciB9IGZyb20gXCJ2aXRlXCI7XG5cbmltcG9ydCB0eXBlIHtcbiAgUnVubmVyUG9ydFJlcXVlc3QsXG4gIFJ1bm5lclBvcnRSZXNwb25zZSxcbiAgUnBjUmVxdWVzdCxcbiAgUnBjUmVzcG9uc2UsXG59IGZyb20gXCIuLi93b3JrZXIvcnNjL2NyZWF0ZVJ1bm5lclRyYW5zcG9ydC5qc1wiO1xuaW1wb3J0IHsgY29sbGVjdFJ1bm5lckNzcyB9IGZyb20gXCIuL2NvbGxlY3RSdW5uZXJDc3MuanNcIjtcblxudHlwZSBJbnZva2VQYXlsb2FkID0ge1xuICB0eXBlOiBcImN1c3RvbVwiO1xuICBldmVudDogXCJ2aXRlOmludm9rZVwiO1xuICBkYXRhOiB7IG5hbWU6IHN0cmluZzsgaWQ6IHN0cmluZzsgZGF0YTogYW55W10gfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hSdW5uZXJGZXRjaEhhbmRsZXIoXG4gIHBvcnQ6IE1lc3NhZ2VQb3J0LFxuICBzZXJ2ZXI6IFZpdGVEZXZTZXJ2ZXIsXG4gIGxvZ2dlcjogTG9nZ2VyLFxuICB2ZXJib3NlID0gZmFsc2Vcbik6ICgpID0+IHZvaWQge1xuICBjb25zdCBoYW5kbGVyID0gYXN5bmMgKG1zZzogUnVubmVyUG9ydFJlcXVlc3QgfCBScGNSZXF1ZXN0KSA9PiB7XG4gICAgaWYgKCFtc2cpIHJldHVybjtcbiAgICBpZiAobXNnLl9fdnBycyA9PT0gXCJycGMtcmVxdWVzdFwiKSB7XG4gICAgICBhd2FpdCBoYW5kbGVScGMobXNnIGFzIFJwY1JlcXVlc3QpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobXNnLl9fdnBycyAhPT0gXCJydW5uZXItcmVxdWVzdFwiKSByZXR1cm47XG4gICAgY29uc3QgeyByZXF1ZXN0SWQsIHBheWxvYWQgfSA9IG1zZztcbiAgICB0cnkge1xuICAgICAgY29uc3QgaW52b2tlID0gcGF5bG9hZCBhcyBJbnZva2VQYXlsb2FkO1xuICAgICAgaWYgKFxuICAgICAgICBpbnZva2U/LnR5cGUgIT09IFwiY3VzdG9tXCIgfHxcbiAgICAgICAgaW52b2tlPy5ldmVudCAhPT0gXCJ2aXRlOmludm9rZVwiIHx8XG4gICAgICAgICFpbnZva2UuZGF0YVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgW3J1bm5lci1mZXRjaF0gdW5leHBlY3RlZCBwYXlsb2FkOiAke0pTT04uc3RyaW5naWZ5KHBheWxvYWQpfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgbmFtZSwgZGF0YSB9ID0gaW52b2tlLmRhdGE7XG4gICAgICBpZiAobmFtZSAhPT0gXCJmZXRjaE1vZHVsZVwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgW3J1bm5lci1mZXRjaF0gdW5zdXBwb3J0ZWQgbWV0aG9kOiAke25hbWV9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBlbnYgPSBzZXJ2ZXIuZW52aXJvbm1lbnRzPy5bXCJzZXJ2ZXJcIl07XG4gICAgICBpZiAoIWVudikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJbcnVubmVyLWZldGNoXSBzZXJ2ZXIgZW52aXJvbm1lbnQgbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgfVxuICAgICAgY29uc3QgW3VybCwgaW1wb3J0ZXIsIG9wdGlvbnNdID0gZGF0YTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoTW9kdWxlKGVudiwgdXJsLCBpbXBvcnRlciwgb3B0aW9ucyk7XG4gICAgICBjb25zdCByZXNwb25zZTogUnVubmVyUG9ydFJlc3BvbnNlID0ge1xuICAgICAgICBfX3ZwcnM6IFwicnVubmVyLXJlc3BvbnNlXCIsXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgcmVzdWx0OiB7IHJlc3VsdCB9LFxuICAgICAgfTtcbiAgICAgIHBvcnQucG9zdE1lc3NhZ2UocmVzcG9uc2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgICBgW3J1bm5lci1mZXRjaF0gZXJyb3I6ICR7ZXJyb3I/Lm1lc3NhZ2UgPz8gU3RyaW5nKGVycm9yKX1gLFxuICAgICAgICAgIHsgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKSB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXNwb25zZTogUnVubmVyUG9ydFJlc3BvbnNlID0ge1xuICAgICAgICBfX3ZwcnM6IFwicnVubmVyLXJlc3BvbnNlXCIsXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgIG5hbWU6IGVycm9yPy5uYW1lLFxuICAgICAgICAgICAgbWVzc2FnZTogU3RyaW5nKGVycm9yPy5tZXNzYWdlID8/IGVycm9yKSxcbiAgICAgICAgICAgIHN0YWNrOiBlcnJvcj8uc3RhY2ssXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBwb3J0LnBvc3RNZXNzYWdlKHJlc3BvbnNlKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUnBjID0gYXN5bmMgKG1zZzogUnBjUmVxdWVzdCkgPT4ge1xuICAgIGNvbnN0IHsgcmVxdWVzdElkLCBtZXRob2QsIGFyZ3MgfSA9IG1zZztcbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIGBbcnVubmVyLXJwY10gcmVjZWl2ZWQ6IG1ldGhvZD0ke21ldGhvZH0gcmVxdWVzdElkPSR7cmVxdWVzdElkfWBcbiAgICAgICk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBsZXQgcmVzdWx0OiB1bmtub3duO1xuICAgICAgaWYgKG1ldGhvZCA9PT0gXCJjb2xsZWN0Q3NzXCIpIHtcbiAgICAgICAgY29uc3QgW3BhZ2VQYXRoLCBwcm9qZWN0Um9vdF0gPSBhcmdzIGFzIFtzdHJpbmcsIHN0cmluZ107XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IGNvbGxlY3RSdW5uZXJDc3MoXG4gICAgICAgICAgc2VydmVyLFxuICAgICAgICAgIHBhZ2VQYXRoLFxuICAgICAgICAgIHByb2plY3RSb290LFxuICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICB2ZXJib3NlXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFtydW5uZXItcnBjXSB1bnN1cHBvcnRlZCBtZXRob2Q6ICR7bWV0aG9kfWApO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2U6IFJwY1Jlc3BvbnNlID0ge1xuICAgICAgICBfX3ZwcnM6IFwicnBjLXJlc3BvbnNlXCIsXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgcmVzdWx0LFxuICAgICAgfTtcbiAgICAgIHBvcnQucG9zdE1lc3NhZ2UocmVzcG9uc2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgICBgW3J1bm5lci1ycGNdICR7bWV0aG9kfSBmYWlsZWQ6ICR7ZXJyb3I/Lm1lc3NhZ2UgPz8gU3RyaW5nKGVycm9yKX1gLFxuICAgICAgICAgIHsgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKSB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXNwb25zZTogUnBjUmVzcG9uc2UgPSB7XG4gICAgICAgIF9fdnByczogXCJycGMtcmVzcG9uc2VcIixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBlcnJvcjoge1xuICAgICAgICAgIG5hbWU6IGVycm9yPy5uYW1lLFxuICAgICAgICAgIG1lc3NhZ2U6IFN0cmluZyhlcnJvcj8ubWVzc2FnZSA/PyBlcnJvciksXG4gICAgICAgICAgc3RhY2s6IGVycm9yPy5zdGFjayxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBwb3J0LnBvc3RNZXNzYWdlKHJlc3BvbnNlKTtcbiAgICB9XG4gIH07XG5cbiAgcG9ydC5vbihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gIHBvcnQuc3RhcnQoKTtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIHBvcnQub2ZmKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgfTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQWlCTyxTQUFTLHdCQUNkLENBQUEsSUFBQSxFQUNBLE1BQ0EsRUFBQSxNQUFBLEVBQ0EsVUFBVSxLQUNFLEVBQUE7QUFDWixFQUFNLE1BQUEsT0FBQSxHQUFVLE9BQU8sR0FBd0MsS0FBQTtBQUM3RCxJQUFBLElBQUksQ0FBQyxHQUFLLEVBQUE7QUFDVixJQUFJLElBQUEsR0FBQSxDQUFJLFdBQVcsYUFBZSxFQUFBO0FBQ2hDLE1BQUEsTUFBTSxVQUFVLEdBQWlCLENBQUE7QUFDakMsTUFBQTtBQUFBO0FBRUYsSUFBSSxJQUFBLEdBQUEsQ0FBSSxXQUFXLGdCQUFrQixFQUFBO0FBQ3JDLElBQU0sTUFBQSxFQUFFLFNBQVcsRUFBQSxPQUFBLEVBQVksR0FBQSxHQUFBO0FBQy9CLElBQUksSUFBQTtBQUNGLE1BQUEsTUFBTSxNQUFTLEdBQUEsT0FBQTtBQUNmLE1BQ0UsSUFBQSxNQUFBLEVBQVEsU0FBUyxRQUNqQixJQUFBLE1BQUEsRUFBUSxVQUFVLGFBQ2xCLElBQUEsQ0FBQyxPQUFP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