vite-plugin-react-server
Version:
Vite plugin for React Server Components (RSC)
67 lines (65 loc) • 8.39 kB
JavaScript
/**
* vite-plugin-react-server
* Copyright (c) Nico Brinkkemper
* MIT License
*/
function createRunnerTransport(port) {
let nextRunnerId = 1;
let nextRpcId = 1;
const runnerPending = /* @__PURE__ */ new Map();
const rpcPending = /* @__PURE__ */ new Map();
port.on("message", (msg) => {
if (!msg) return;
if (msg.__vprs === "runner-response") {
const resolve = runnerPending.get(msg.requestId);
if (!resolve) return;
runnerPending.delete(msg.requestId);
resolve(msg.result);
} else if (msg.__vprs === "rpc-response") {
const pending = rpcPending.get(msg.requestId);
if (!pending) return;
rpcPending.delete(msg.requestId);
if (msg.error) {
const err = new Error(msg.error.message);
if (msg.error.name) err.name = msg.error.name;
if (msg.error.stack) err.stack = msg.error.stack;
pending.reject(err);
} else {
pending.resolve(msg.result);
}
}
});
const transport = {
async invoke(payload) {
return new Promise((resolve) => {
const requestId = nextRunnerId++;
runnerPending.set(requestId, resolve);
const req = {
__vprs: "runner-request",
requestId,
payload
};
port.postMessage(req);
});
}
};
const rpc = async (method, args) => {
return new Promise((resolve, reject) => {
const requestId = nextRpcId++;
rpcPending.set(requestId, {
resolve,
reject
});
const req = {
__vprs: "rpc-request",
requestId,
method,
args
};
port.postMessage(req);
});
};
return { transport, rpc };
}
export { createRunnerTransport };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUnVubmVyVHJhbnNwb3J0LmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wbHVnaW4vd29ya2VyL3JzYy9jcmVhdGVSdW5uZXJUcmFuc3BvcnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBNZXNzYWdlUG9ydCB9IGZyb20gXCJub2RlOndvcmtlcl90aHJlYWRzXCI7XG5pbXBvcnQgdHlwZSB7IE1vZHVsZVJ1bm5lclRyYW5zcG9ydCB9IGZyb20gXCJ2aXRlL21vZHVsZS1ydW5uZXJcIjtcblxuZXhwb3J0IHR5cGUgUnVubmVyUG9ydFJlcXVlc3QgPSB7XG4gIF9fdnByczogXCJydW5uZXItcmVxdWVzdFwiO1xuICByZXF1ZXN0SWQ6IG51bWJlcjtcbiAgcGF5bG9hZDogdW5rbm93bjtcbn07XG5cbmV4cG9ydCB0eXBlIFJ1bm5lclBvcnRSZXNwb25zZSA9IHtcbiAgX192cHJzOiBcInJ1bm5lci1yZXNwb25zZVwiO1xuICByZXF1ZXN0SWQ6IG51bWJlcjtcbiAgcmVzdWx0OiB7IHJlc3VsdDogdW5rbm93biB9IHwgeyBlcnJvcjogdW5rbm93biB9O1xufTtcblxuZXhwb3J0IHR5cGUgUnBjUmVxdWVzdCA9IHtcbiAgX192cHJzOiBcInJwYy1yZXF1ZXN0XCI7XG4gIHJlcXVlc3RJZDogbnVtYmVyO1xuICBtZXRob2Q6IHN0cmluZztcbiAgYXJnczogdW5rbm93bltdO1xufTtcblxuZXhwb3J0IHR5cGUgUnBjUmVzcG9uc2UgPSB7XG4gIF9fdnByczogXCJycGMtcmVzcG9uc2VcIjtcbiAgcmVxdWVzdElkOiBudW1iZXI7XG4gIHJlc3VsdD86IHVua25vd247XG4gIGVycm9yPzogeyBuYW1lPzogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmc7IHN0YWNrPzogc3RyaW5nIH07XG59O1xuXG5leHBvcnQgdHlwZSBScGNJbnZva2VyID0gPFQgPSB1bmtub3duPihtZXRob2Q6IHN0cmluZywgYXJnczogdW5rbm93bltdKSA9PiBQcm9taXNlPFQ+O1xuXG5leHBvcnQgdHlwZSBSdW5uZXJUcmFuc3BvcnRCdW5kbGUgPSB7XG4gIHRyYW5zcG9ydDogTW9kdWxlUnVubmVyVHJhbnNwb3J0O1xuICBycGM6IFJwY0ludm9rZXI7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUnVubmVyVHJhbnNwb3J0KHBvcnQ6IE1lc3NhZ2VQb3J0KTogUnVubmVyVHJhbnNwb3J0QnVuZGxlIHtcbiAgbGV0IG5leHRSdW5uZXJJZCA9IDE7XG4gIGxldCBuZXh0UnBjSWQgPSAxO1xuICBjb25zdCBydW5uZXJQZW5kaW5nID0gbmV3IE1hcDxcbiAgICBudW1iZXIsXG4gICAgKHZhbHVlOiB7IHJlc3VsdDogdW5rbm93biB9IHwgeyBlcnJvcjogdW5rbm93biB9KSA9PiB2b2lkXG4gID4oKTtcbiAgY29uc3QgcnBjUGVuZGluZyA9IG5ldyBNYXA8XG4gICAgbnVtYmVyLFxuICAgIHsgcmVzb2x2ZTogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkOyByZWplY3Q6IChlcnJvcjogdW5rbm93bikgPT4gdm9pZCB9XG4gID4oKTtcblxuICBwb3J0Lm9uKFwibWVzc2FnZVwiLCAobXNnOiBSdW5uZXJQb3J0UmVzcG9uc2UgfCBScGNSZXNwb25zZSkgPT4ge1xuICAgIGlmICghbXNnKSByZXR1cm47XG4gICAgaWYgKG1zZy5fX3ZwcnMgPT09IFwicnVubmVyLXJlc3BvbnNlXCIpIHtcbiAgICAgIGNvbnN0IHJlc29sdmUgPSBydW5uZXJQZW5kaW5nLmdldChtc2cucmVxdWVzdElkKTtcbiAgICAgIGlmICghcmVzb2x2ZSkgcmV0dXJuO1xuICAgICAgcnVubmVyUGVuZGluZy5kZWxldGUobXNnLnJlcXVlc3RJZCk7XG4gICAgICByZXNvbHZlKG1zZy5yZXN1bHQpO1xuICAgIH0gZWxzZSBpZiAobXNnLl9fdnBycyA9PT0gXCJycGMtcmVzcG9uc2VcIikge1xuICAgICAgY29uc3QgcGVuZGluZyA9IHJwY1BlbmRpbmcuZ2V0KG1zZy5yZXF1ZXN0SWQpO1xuICAgICAgaWYgKCFwZW5kaW5nKSByZXR1cm47XG4gICAgICBycGNQZW5kaW5nLmRlbGV0ZShtc2cucmVxdWVzdElkKTtcbiAgICAgIGlmIChtc2cuZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKG1zZy5lcnJvci5tZXNzYWdlKTtcbiAgICAgICAgaWYgKG1zZy5lcnJvci5uYW1lKSBlcnIubmFtZSA9IG1zZy5lcnJvci5uYW1lO1xuICAgICAgICBpZiAobXNnLmVycm9yLnN0YWNrKSBlcnIuc3RhY2sgPSBtc2cuZXJyb3Iuc3RhY2s7XG4gICAgICAgIHBlbmRpbmcucmVqZWN0KGVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZW5kaW5nLnJlc29sdmUobXNnLnJlc3VsdCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB0cmFuc3BvcnQ6IE1vZHVsZVJ1bm5lclRyYW5zcG9ydCA9IHtcbiAgICBhc3luYyBpbnZva2UocGF5bG9hZCkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IG5leHRSdW5uZXJJZCsrO1xuICAgICAgICBydW5uZXJQZW5kaW5nLnNldChyZXF1ZXN0SWQsIHJlc29sdmUgYXMgYW55KTtcbiAgICAgICAgY29uc3QgcmVxOiBSdW5uZXJQb3J0UmVxdWVzdCA9IHtcbiAgICAgICAgICBfX3ZwcnM6IFwicnVubmVyLXJlcXVlc3RcIixcbiAgICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgfTtcbiAgICAgICAgcG9ydC5wb3N0TWVzc2FnZShyZXEpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBycGM6IFJwY0ludm9rZXIgPSBhc3luYyA8VCA9IHVua25vd24+KFxuICAgIG1ldGhvZDogc3RyaW5nLFxuICAgIGFyZ3M6IHVua25vd25bXVxuICApOiBQcm9taXNlPFQ+ID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgcmVxdWVzdElkID0gbmV4dFJwY0lkKys7XG4gICAgICBycGNQZW5kaW5nLnNldChyZXF1ZXN0SWQsIHtcbiAgICAgICAgcmVzb2x2ZTogcmVzb2x2ZSBhcyAodmFsdWU6IHVua25vd24pID0+IHZvaWQsXG4gICAgICAgIHJlamVjdCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVxOiBScGNSZXF1ZXN0ID0ge1xuICAgICAgICBfX3ZwcnM6IFwicnBjLXJlcXVlc3RcIixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBtZXRob2QsXG4gICAgICAgIGFyZ3MsXG4gICAgICB9O1xuICAgICAgcG9ydC5wb3N0TWVzc2FnZShyZXEpO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiB7IHRyYW5zcG9ydCwgcnBjIH07XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFvQ08sU0FBUyxzQkFBc0IsSUFBMEMsRUFBQTtBQUM5RSxFQUFBLElBQUksWUFBZSxHQUFBLENBQUE7QUFDbkIsRUFBQSxJQUFJLFNBQVksR0FBQSxDQUFBO0FBQ2hCLEVBQU0sTUFBQSxhQUFBLHVCQUFvQixHQUd4QixFQUFBO0FBQ0YsRUFBTSxNQUFBLFVBQUEsdUJBQWlCLEdBR3JCLEVBQUE7QUFFRixFQUFLLElBQUEsQ0FBQSxFQUFBLENBQUcsU0FBVyxFQUFBLENBQUMsR0FBMEMsS0FBQTtBQUM1RCxJQUFBLElBQUksQ0FBQyxHQUFLLEVBQUE7QUFDVixJQUFJLElBQUEsR0FBQSxDQUFJLFdBQVcsaUJBQW1CLEVBQUE7QUFDcEMsTUFBQSxNQUFNLE9BQVUsR0FBQSxhQUFBLENBQWMsR0FBSSxDQUFBLEdBQUEsQ0FBSSxTQUFTLENBQUE7QUFDL0MsTUFBQSxJQUFJLENBQUMsT0FBUyxFQUFBO0FBQ2QsTUFBYyxhQUFBLENBQUEsTUFBQSxDQUFPLElBQUksU0FBUyxDQUFBO0FBQ2xDLE1BQUEsT0FBQSxDQUFRLElBQUksTUFBTSxDQUFBO0FBQUEsS0FDcEIsTUFBQSxJQUFXLEdBQUksQ0FBQSxNQUFBLEtBQVcsY0FBZ0IsRUFBQTtBQUN4QyxNQUFBLE1BQU0sT0FBVSxHQUFBLFVBQUEsQ0FBVyxHQUFJLENBQUEsR0FBQSxDQUFJLFNBQVMsQ0FBQTtBQUM1QyxNQUFBLElBQUksQ0FBQyxPQUFTLEVBQUE7QUFDZCxNQUFXLFVBQUEsQ0FBQSxNQUFBLENBQU8sSUFBSSxTQUFTLENBQUE7QUFDL0IsTUFBQSxJQUFJLElBQUksS0FBTyxFQUFBO0FBQ2IsUUFBQSxNQUFNLEdBQU0sR0FBQSxJQUFJLEtBQU0sQ0FBQSxHQUFBLENBQUksTUFBTSxPQUFPLENBQUE7QUFDdkMsUUFBQSxJQUFJLElBQUksS0FBTSxDQUFBLElBQUEsRUFBVSxHQUFBLENBQUEsSUFBQSxHQUFPLElBQUksS0FBTSxDQUFBLElBQUE7QUFDekMsUUFBQSxJQUFJLElBQUksS0FBTSxDQUFBLEtBQUEsRUFBVyxHQUFBLENBQUEsS0FBQSxHQUFRLElBQUksS0FBTSxDQUFBLEtBQUE7QUFDM0MsUUFBQSxPQUFBLENBQVEsT0FBTyxHQUFHLENBQUE7QUFBQSxPQUNiLE1BQUE7QUFDTCxRQUFRLE9BQUEsQ0FBQSxPQUFBLENBQVEsSUFBSSxNQUFNLENBQUE7QUFBQTtBQUM1QjtBQUNGLEdBQ0QsQ0FBQTtBQUVELEVBQUEsTUFBTSxTQUFtQyxHQUFBO0FBQUEsSUFDdkMsTUFBTSxPQUFPLE9BQVMsRUFBQTtBQUNwQixNQUFPLE9BQUEsSUFBSSxPQUFRLENBQUEsQ0FBQyxPQUFZLEtBQUE7QUFDOUIsUUFBQSxNQUFNLFNBQVksR0FBQSxZQUFBLEVBQUE7QUFDbEIsUUFBYyxhQUFBLENBQUEsR0FBQSxDQUFJLFdBQVcsT0FBYyxDQUFBO0FBQzNDLFFBQUEsTUFBTSxHQUF5QixHQUFBO0FBQUEsVUFDN0IsTUFBUSxFQUFBLGdCQUFBO0FBQUEsVUFDUixTQUFBO0FBQUEsVUFDQTtBQUFBLFNBQ0Y7QUFDQSxRQUFBLElBQUEsQ0FBSyxZQUFZLEdBQUcsQ0FBQTtBQUFBLE9BQ3JCLENBQUE7QUFBQTtBQUNILEdBQ0Y7QUFFQSxFQUFNLE1BQUEsR0FBQSxHQUFrQixPQUN0QixNQUFBLEVBQ0EsSUFDZSxLQUFBO0FBQ2YsSUFBQSxPQUFPLElBQUksT0FBQSxDQUFXLENBQUMsT0FBQSxFQUFTLE1BQVcsS0FBQTtBQUN6QyxNQUFBLE1BQU0sU0FBWSxHQUFBLFNBQUEsRUFBQTtBQUNsQixNQUFBLFVBQUEsQ0FBVyxJQUFJLFNBQVcsRUFBQTtBQUFBLFFBQ3hCLE9BQUE7QUFBQSxRQUNBO0FBQUEsT0FDRCxDQUFBO0FBQ0QsTUFBQSxNQUFNLEdBQWtCLEdBQUE7QUFBQSxRQUN0QixNQUFRLEVBQUEsYUFBQTtBQUFBLFFBQ1IsU0FBQTtBQUFBLFFBQ0EsTUFBQTtBQUFBLFFBQ0E7QUFBQSxPQUNGO0FBQ0EsTUFBQSxJQUFBLENBQUssWUFBWSxHQUFHLENBQUE7QUFBQSxLQUNyQixDQUFBO0FBQUEsR0FDSDtBQUVBLEVBQU8sT0FBQSxFQUFFLFdBQVcsR0FBSSxFQUFBO0FBQzFCOzs7OyJ9