@webtypen/webframez-react 0.0.8 → 0.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client.cjs +1 -1
- package/dist/client.js +1 -1
- package/dist/http.cjs +45 -18
- package/dist/http.js +45 -18
- package/dist/index.cjs +45 -18
- package/dist/index.js +45 -18
- package/dist/webframez-core.cjs +45 -18
- package/dist/webframez-core.js +45 -18
- package/package.json +1 -1
package/dist/client.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var T=Object.create;var f=Object.defineProperty;var N=Object.getOwnPropertyDescriptor;var U=Object.getOwnPropertyNames;var $=Object.getPrototypeOf,M=Object.prototype.hasOwnProperty;var H=(e,t)=>{for(var n in t)f(e,n,{get:t[n],enumerable:!0})},v=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of U(t))!M.call(e,i)&&i!==n&&f(e,i,{get:()=>t[i],enumerable:!(o=N(t,i))||o.enumerable});return e};var W=(e,t,n)=>(n=e!=null?T($(e)):{},v(t||!e||!e.__esModule?f(n,"default",{value:e,enumerable:!0}):n,e)),D=e=>v(f({},"__esModule",{value:!0}),e);var Q={};H(Q,{mountWebframezClient:()=>J,useCookie:()=>Y,useRouter:()=>q});module.exports=D(Q);var r=W(require("react"),1),S=require("react-dom/client"),u=require("react-server-dom-webpack/client"),s=require("react/jsx-runtime"),F={push:()=>{},replace:()=>{},refresh:()=>{}},p=typeof r.default.createContext=="function"?r.default.createContext(null):null,k="__WEBFRAMEZ_ROUTER__",B="[data-webframez-head='true']";function z(){return typeof window>"u"?null:window[k]??null}function G(e){typeof window>"u"||(window[k]=e)}function A(){let e={},t=typeof document>"u"?"":document.cookie;if(!t||t.trim()==="")return e;for(let n of t.split(";")){let o=n.trim();if(!o)continue;let i=o.indexOf("="),c=i>=0?o.slice(0,i).trim():o,d=i>=0?o.slice(i+1):"";c&&(e[c]=decodeURIComponent(d))}return e}function x(e,t,n={}){let o=[`${e}=${encodeURIComponent(t)}`];return n.path&&o.push(`Path=${n.path}`),n.domain&&o.push(`Domain=${n.domain}`),typeof n.maxAge=="number"&&o.push(`Max-Age=${Math.floor(n.maxAge)}`),n.expires&&o.push(`Expires=${n.expires.toUTCString()}`),n.sameSite&&o.push(`SameSite=${n.sameSite}`),n.secure&&o.push("Secure"),o.join("; ")}function Y(){return r.default.useMemo(()=>({all:()=>A(),get:e=>A()[e],set:(e,t,n)=>{typeof document>"u"||(document.cookie=x(e,t,n))},remove:(e,t)=>{typeof document>"u"||(document.cookie=x(e,"",{...t??{},maxAge:0}))}}),[])}function q(){let e=p?r.default.useContext(p):null;if(!e){let t=z();if(t)return t;if(typeof window>"u")return F;throw new Error("useRouter must be used inside mountWebframezClient()")}return e}function Z({active:e}){return(0,s.jsx)("div",{style:{position:"fixed",top:0,left:0,width:"100%",height:3,zIndex:9999,transformOrigin:"left",transform:e?"scaleX(1)":"scaleX(0)",transition:"transform 180ms ease",background:"linear-gradient(90deg, #0ea5e9, #22c55e)"}})}function E(e){let t=document.createElement("meta");t.setAttribute("data-webframez-head","true");let n=Object.entries(e).filter(([,o])=>!!o);for(let[o,i]of n)t.setAttribute(o,String(i));document.head.appendChild(t)}function I(e){let t=document.createElement("link");t.setAttribute("data-webframez-head","true");let n=Object.entries(e).filter(([,o])=>!!o);for(let[o,i]of n)t.setAttribute(o,String(i));document.head.appendChild(t)}function b(e){if(!(typeof document>"u")){document.title=e.title||"Webframez React";for(let t of document.head.querySelectorAll(B))t.remove();e.description&&E({name:"description",content:e.description}),e.favicon&&I({rel:"icon",href:e.favicon});for(let t of e.meta??[])E(t);for(let t of e.links??[])I(t)}}function j(e){let t=new TextEncoder;return new ReadableStream({start(n){n.enqueue(t.encode(e)),n.close()}})}function X(){if(typeof window>"u")return null;let e=window.__RSC_INITIAL_PAYLOAD;return typeof e!="string"||e===""?null:(delete window.__RSC_INITIAL_PAYLOAD,(0,u.createFromReadableStream)(j(e)))}function K(e){return X()??(0,u.createFromFetch)(fetch(`${e}?path=${encodeURIComponent(window.location.pathname)}&search=${encodeURIComponent(window.location.search)}`,{headers:{Accept:"text/x-component"}}))}function V(e,t){return function(){let o=r.default.use(e),[i,c]=(0,r.useState)(o.model),[d,g]=(0,r.useState)(o.head),[P,w]=(0,r.useState)(!1),[L,O]=(0,r.useState)(!1);async function l(a,C="push"){w(!0);try{let m=await(0,u.createFromFetch)(fetch(`${t}?path=${encodeURIComponent(a.pathname)}&search=${encodeURIComponent(a.search)}`,{headers:{Accept:"text/x-component"}}));b(m.head),g(m.head),c(m.model);let _=`${a.pathname}${a.search}`;C==="replace"?history.replaceState(null,"",_):C==="push"&&history.pushState(null,"",_)}catch(y){console.error("[webframez-react] Failed to render route",y),c((0,s.jsx)("p",{children:"Failed to load route."}))}finally{w(!1)}}(0,r.useEffect)(()=>{b(d)},[d]),(0,r.useEffect)(()=>{O(!0);let a=()=>{l(new URL(window.location.href),"none")};return window.addEventListener("popstate",a),()=>{window.removeEventListener("popstate",a)}},[]);let R=r.default.useMemo(()=>({push:a=>{l(new URL(a,window.location.origin),"push")},replace:a=>{l(new URL(a,window.location.origin),"replace")},refresh:()=>{l(new URL(window.location.href),"none")}}),[]);G(R);let h=(0,s.jsxs)(s.Fragment,{children:[L?(0,s.jsx)(Z,{active:P}):null,i??(0,s.jsx)("p",{style:{padding:24},children:"Loading..."})]});return p?(0,s.jsx)(p.Provider,{value:R,children:h}):h}}function J(e={}){let t=e.rootId??"root",n=document.getElementById(t);if(!n)throw new Error(`Missing #${t} element`);let o=typeof window<"u"&&window.__RSC_ENDPOINT,i=e.rscEndpoint??o??"/rsc",c=K(i),d=V(c,i);return(0,S.hydrateRoot)(n,(0,s.jsx)(d,{}))}
|
package/dist/client.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import d,{useEffect as _,useState as l}from"react";import{hydrateRoot as O}from"react-dom/client";import{createFromFetch as b,createFromReadableStream as T}from"react-server-dom-webpack/client";import{Fragment as z,jsx as c,jsxs as G}from"react/jsx-runtime";var N={push:()=>{},replace:()=>{},refresh:()=>{}},f=typeof d.createContext=="function"?d.createContext(null):null,S="__WEBFRAMEZ_ROUTER__",U="[data-webframez-head='true']";function $(){return typeof window>"u"?null:window[S]??null}function M(e){typeof window>"u"||(window[S]=e)}function v(){let e={},t=typeof document>"u"?"":document.cookie;if(!t||t.trim()==="")return e;for(let n of t.split(";")){let o=n.trim();if(!o)continue;let i=o.indexOf("="),a=i>=0?o.slice(0,i).trim():o,s=i>=0?o.slice(i+1):"";a&&(e[a]=decodeURIComponent(s))}return e}function A(e,t,n={}){let o=[`${e}=${encodeURIComponent(t)}`];return n.path&&o.push(`Path=${n.path}`),n.domain&&o.push(`Domain=${n.domain}`),typeof n.maxAge=="number"&&o.push(`Max-Age=${Math.floor(n.maxAge)}`),n.expires&&o.push(`Expires=${n.expires.toUTCString()}`),n.sameSite&&o.push(`SameSite=${n.sameSite}`),n.secure&&o.push("Secure"),o.join("; ")}function j(){return d.useMemo(()=>({all:()=>v(),get:e=>v()[e],set:(e,t,n)=>{typeof document>"u"||(document.cookie=A(e,t,n))},remove:(e,t)=>{typeof document>"u"||(document.cookie=A(e,"",{...t??{},maxAge:0}))}}),[])}function X(){let e=f?d.useContext(f):null;if(!e){let t=$();if(t)return t;if(typeof window>"u")return N;throw new Error("useRouter must be used inside mountWebframezClient()")}return e}function H({active:e}){return c("div",{style:{position:"fixed",top:0,left:0,width:"100%",height:3,zIndex:9999,transformOrigin:"left",transform:e?"scaleX(1)":"scaleX(0)",transition:"transform 180ms ease",background:"linear-gradient(90deg, #0ea5e9, #22c55e)"}})}function x(e){let t=document.createElement("meta");t.setAttribute("data-webframez-head","true");let n=Object.entries(e).filter(([,o])=>!!o);for(let[o,i]of n)t.setAttribute(o,String(i));document.head.appendChild(t)}function E(e){let t=document.createElement("link");t.setAttribute("data-webframez-head","true");let n=Object.entries(e).filter(([,o])=>!!o);for(let[o,i]of n)t.setAttribute(o,String(i));document.head.appendChild(t)}function I(e){if(!(typeof document>"u")){document.title=e.title||"Webframez React";for(let t of document.head.querySelectorAll(U))t.remove();e.description&&x({name:"description",content:e.description}),e.favicon&&E({rel:"icon",href:e.favicon});for(let t of e.meta??[])x(t);for(let t of e.links??[])E(t)}}function W(e){let t=new TextEncoder;return new ReadableStream({start(n){n.enqueue(t.encode(e)),n.close()}})}function D(){if(typeof window>"u")return null;let e=window.__RSC_INITIAL_PAYLOAD;return typeof e!="string"||e===""?null:(delete window.__RSC_INITIAL_PAYLOAD,T(W(e)))}function F(e){return D()??b(fetch(`${e}?path=${encodeURIComponent(window.location.pathname)}&search=${encodeURIComponent(window.location.search)}`,{headers:{Accept:"text/x-component"}}))}function B(e,t){return function(){let o=d.use(e),[i,a]=l(o.model),[s,m]=l(o.head),[k,g]=l(!1),[P,L]=l(!1);async function u(r,h="push"){g(!0);try{let p=await b(fetch(`${t}?path=${encodeURIComponent(r.pathname)}&search=${encodeURIComponent(r.search)}`,{headers:{Accept:"text/x-component"}}));I(p.head),m(p.head),a(p.model);let y=`${r.pathname}${r.search}`;h==="replace"?history.replaceState(null,"",y):h==="push"&&history.pushState(null,"",y)}catch(C){console.error("[webframez-react] Failed to render route",C),a(c("p",{children:"Failed to load route."}))}finally{g(!1)}}_(()=>{I(s)},[s]),_(()=>{L(!0);let r=()=>{u(new URL(window.location.href),"none")};return window.addEventListener("popstate",r),()=>{window.removeEventListener("popstate",r)}},[]);let w=d.useMemo(()=>({push:r=>{u(new URL(r,window.location.origin),"push")},replace:r=>{u(new URL(r,window.location.origin),"replace")},refresh:()=>{u(new URL(window.location.href),"none")}}),[]);M(w);let R=G(z,{children:[P?c(H,{active:k}):null,i??c("p",{style:{padding:24},children:"Loading..."})]});return f?c(f.Provider,{value:w,children:R}):R}}function K(e={}){let t=e.rootId??"root",n=document.getElementById(t);if(!n)throw new Error(`Missing #${t} element`);let o=typeof window<"u"&&window.__RSC_ENDPOINT,i=e.rscEndpoint??o??"/rsc",a=F(i),s=B(a,i);return O(n,c(s,{}))}export{K as mountWebframezClient,j as useCookie,X as useRouter};
|
package/dist/http.cjs
CHANGED
|
@@ -39,6 +39,8 @@ var import_node_child_process = require("node:child_process");
|
|
|
39
39
|
// src/server.ts
|
|
40
40
|
var import_node_stream = require("node:stream");
|
|
41
41
|
var import_server = require("react-server-dom-webpack/server");
|
|
42
|
+
var import_client = require("react-server-dom-webpack/client.node");
|
|
43
|
+
var import_server2 = require("react-dom/server");
|
|
42
44
|
function defaultOnError(err) {
|
|
43
45
|
console.error("[webframez-react] RSC render error", err);
|
|
44
46
|
}
|
|
@@ -127,6 +129,25 @@ function renderRSCToString(payload, options = {}) {
|
|
|
127
129
|
stream.pipe(writable);
|
|
128
130
|
});
|
|
129
131
|
}
|
|
132
|
+
function createReadableStreamFromString(value) {
|
|
133
|
+
const encoder = new TextEncoder();
|
|
134
|
+
return new ReadableStream({
|
|
135
|
+
start(controller) {
|
|
136
|
+
controller.enqueue(encoder.encode(value));
|
|
137
|
+
controller.close();
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
async function renderHtmlFromFlightData(flightData, options) {
|
|
142
|
+
const model = await (0, import_client.createFromReadableStream)(createReadableStreamFromString(flightData), {
|
|
143
|
+
serverConsumerManifest: {
|
|
144
|
+
moduleMap: options.moduleMap ?? {},
|
|
145
|
+
serverModuleMap: null,
|
|
146
|
+
moduleLoading: null
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
return (0, import_server2.renderToString)(model);
|
|
150
|
+
}
|
|
130
151
|
function sendRSC(res, model, options = {}) {
|
|
131
152
|
const {
|
|
132
153
|
moduleMap = {},
|
|
@@ -866,6 +887,9 @@ function createNodeRequestHandler(options) {
|
|
|
866
887
|
model: resolved.model,
|
|
867
888
|
head: resolved.head
|
|
868
889
|
};
|
|
890
|
+
const initialFlightData = await renderRSCToString(initialPayload, {
|
|
891
|
+
moduleMap
|
|
892
|
+
});
|
|
869
893
|
let rootHtml = "";
|
|
870
894
|
try {
|
|
871
895
|
rootHtml = await initialHtmlWorker.render({
|
|
@@ -886,26 +910,29 @@ function createNodeRequestHandler(options) {
|
|
|
886
910
|
});
|
|
887
911
|
} catch (retryError) {
|
|
888
912
|
console.error("[webframez-react] Retry for initial HTML failed", retryError);
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
913
|
+
try {
|
|
914
|
+
rootHtml = await renderHtmlFromFlightData(initialFlightData, { moduleMap });
|
|
915
|
+
} catch (flightRenderError) {
|
|
916
|
+
console.error("[webframez-react] Flight-to-HTML render failed", flightRenderError);
|
|
917
|
+
res.statusCode = 500;
|
|
918
|
+
res.setHeader("Content-Type", "text/html");
|
|
919
|
+
res.end(
|
|
920
|
+
createHTMLShell({
|
|
921
|
+
title: "500 - Initial HTML render failed",
|
|
922
|
+
headTags: "",
|
|
923
|
+
clientScriptUrl,
|
|
924
|
+
rscEndpoint: rscPath,
|
|
925
|
+
rootHtml: createInitialHtmlErrorMarkup("Initial HTML render failed."),
|
|
926
|
+
initialFlightData,
|
|
927
|
+
basename: basePath,
|
|
928
|
+
liveReloadPath: liveReloadPath || void 0,
|
|
929
|
+
liveReloadServerId: liveReloadPath ? devServerId : void 0
|
|
930
|
+
})
|
|
931
|
+
);
|
|
932
|
+
return;
|
|
933
|
+
}
|
|
904
934
|
}
|
|
905
935
|
}
|
|
906
|
-
const initialFlightData = await renderRSCToString(initialPayload, {
|
|
907
|
-
moduleMap
|
|
908
|
-
});
|
|
909
936
|
res.statusCode = resolved.statusCode;
|
|
910
937
|
res.setHeader("Content-Type", "text/html");
|
|
911
938
|
res.end(
|
package/dist/http.js
CHANGED
|
@@ -14,6 +14,8 @@ import { spawn } from "node:child_process";
|
|
|
14
14
|
// src/server.ts
|
|
15
15
|
import { Writable } from "node:stream";
|
|
16
16
|
import { renderToPipeableStream } from "react-server-dom-webpack/server";
|
|
17
|
+
import { createFromReadableStream } from "react-server-dom-webpack/client.node";
|
|
18
|
+
import { renderToString } from "react-dom/server";
|
|
17
19
|
function defaultOnError(err) {
|
|
18
20
|
console.error("[webframez-react] RSC render error", err);
|
|
19
21
|
}
|
|
@@ -102,6 +104,25 @@ function renderRSCToString(payload, options = {}) {
|
|
|
102
104
|
stream.pipe(writable);
|
|
103
105
|
});
|
|
104
106
|
}
|
|
107
|
+
function createReadableStreamFromString(value) {
|
|
108
|
+
const encoder = new TextEncoder();
|
|
109
|
+
return new ReadableStream({
|
|
110
|
+
start(controller) {
|
|
111
|
+
controller.enqueue(encoder.encode(value));
|
|
112
|
+
controller.close();
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
async function renderHtmlFromFlightData(flightData, options) {
|
|
117
|
+
const model = await createFromReadableStream(createReadableStreamFromString(flightData), {
|
|
118
|
+
serverConsumerManifest: {
|
|
119
|
+
moduleMap: options.moduleMap ?? {},
|
|
120
|
+
serverModuleMap: null,
|
|
121
|
+
moduleLoading: null
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
return renderToString(model);
|
|
125
|
+
}
|
|
105
126
|
function sendRSC(res, model, options = {}) {
|
|
106
127
|
const {
|
|
107
128
|
moduleMap = {},
|
|
@@ -841,6 +862,9 @@ function createNodeRequestHandler(options) {
|
|
|
841
862
|
model: resolved.model,
|
|
842
863
|
head: resolved.head
|
|
843
864
|
};
|
|
865
|
+
const initialFlightData = await renderRSCToString(initialPayload, {
|
|
866
|
+
moduleMap
|
|
867
|
+
});
|
|
844
868
|
let rootHtml = "";
|
|
845
869
|
try {
|
|
846
870
|
rootHtml = await initialHtmlWorker.render({
|
|
@@ -861,26 +885,29 @@ function createNodeRequestHandler(options) {
|
|
|
861
885
|
});
|
|
862
886
|
} catch (retryError) {
|
|
863
887
|
console.error("[webframez-react] Retry for initial HTML failed", retryError);
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
888
|
+
try {
|
|
889
|
+
rootHtml = await renderHtmlFromFlightData(initialFlightData, { moduleMap });
|
|
890
|
+
} catch (flightRenderError) {
|
|
891
|
+
console.error("[webframez-react] Flight-to-HTML render failed", flightRenderError);
|
|
892
|
+
res.statusCode = 500;
|
|
893
|
+
res.setHeader("Content-Type", "text/html");
|
|
894
|
+
res.end(
|
|
895
|
+
createHTMLShell({
|
|
896
|
+
title: "500 - Initial HTML render failed",
|
|
897
|
+
headTags: "",
|
|
898
|
+
clientScriptUrl,
|
|
899
|
+
rscEndpoint: rscPath,
|
|
900
|
+
rootHtml: createInitialHtmlErrorMarkup("Initial HTML render failed."),
|
|
901
|
+
initialFlightData,
|
|
902
|
+
basename: basePath,
|
|
903
|
+
liveReloadPath: liveReloadPath || void 0,
|
|
904
|
+
liveReloadServerId: liveReloadPath ? devServerId : void 0
|
|
905
|
+
})
|
|
906
|
+
);
|
|
907
|
+
return;
|
|
908
|
+
}
|
|
879
909
|
}
|
|
880
910
|
}
|
|
881
|
-
const initialFlightData = await renderRSCToString(initialPayload, {
|
|
882
|
-
moduleMap
|
|
883
|
-
});
|
|
884
911
|
res.statusCode = resolved.statusCode;
|
|
885
912
|
res.setHeader("Content-Type", "text/html");
|
|
886
913
|
res.end(
|
package/dist/index.cjs
CHANGED
|
@@ -45,6 +45,8 @@ module.exports = __toCommonJS(src_exports);
|
|
|
45
45
|
// src/server.ts
|
|
46
46
|
var import_node_stream = require("node:stream");
|
|
47
47
|
var import_server = require("react-server-dom-webpack/server");
|
|
48
|
+
var import_client = require("react-server-dom-webpack/client.node");
|
|
49
|
+
var import_server2 = require("react-dom/server");
|
|
48
50
|
function defaultOnError(err) {
|
|
49
51
|
console.error("[webframez-react] RSC render error", err);
|
|
50
52
|
}
|
|
@@ -133,6 +135,25 @@ function renderRSCToString(payload, options = {}) {
|
|
|
133
135
|
stream.pipe(writable);
|
|
134
136
|
});
|
|
135
137
|
}
|
|
138
|
+
function createReadableStreamFromString(value) {
|
|
139
|
+
const encoder = new TextEncoder();
|
|
140
|
+
return new ReadableStream({
|
|
141
|
+
start(controller) {
|
|
142
|
+
controller.enqueue(encoder.encode(value));
|
|
143
|
+
controller.close();
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
async function renderHtmlFromFlightData(flightData, options) {
|
|
148
|
+
const model = await (0, import_client.createFromReadableStream)(createReadableStreamFromString(flightData), {
|
|
149
|
+
serverConsumerManifest: {
|
|
150
|
+
moduleMap: options.moduleMap ?? {},
|
|
151
|
+
serverModuleMap: null,
|
|
152
|
+
moduleLoading: null
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
return (0, import_server2.renderToString)(model);
|
|
156
|
+
}
|
|
136
157
|
function sendRSC(res, model, options = {}) {
|
|
137
158
|
const {
|
|
138
159
|
moduleMap = {},
|
|
@@ -903,6 +924,9 @@ function createNodeRequestHandler(options) {
|
|
|
903
924
|
model: resolved.model,
|
|
904
925
|
head: resolved.head
|
|
905
926
|
};
|
|
927
|
+
const initialFlightData = await renderRSCToString(initialPayload, {
|
|
928
|
+
moduleMap
|
|
929
|
+
});
|
|
906
930
|
let rootHtml = "";
|
|
907
931
|
try {
|
|
908
932
|
rootHtml = await initialHtmlWorker.render({
|
|
@@ -923,26 +947,29 @@ function createNodeRequestHandler(options) {
|
|
|
923
947
|
});
|
|
924
948
|
} catch (retryError) {
|
|
925
949
|
console.error("[webframez-react] Retry for initial HTML failed", retryError);
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
950
|
+
try {
|
|
951
|
+
rootHtml = await renderHtmlFromFlightData(initialFlightData, { moduleMap });
|
|
952
|
+
} catch (flightRenderError) {
|
|
953
|
+
console.error("[webframez-react] Flight-to-HTML render failed", flightRenderError);
|
|
954
|
+
res.statusCode = 500;
|
|
955
|
+
res.setHeader("Content-Type", "text/html");
|
|
956
|
+
res.end(
|
|
957
|
+
createHTMLShell({
|
|
958
|
+
title: "500 - Initial HTML render failed",
|
|
959
|
+
headTags: "",
|
|
960
|
+
clientScriptUrl,
|
|
961
|
+
rscEndpoint: rscPath,
|
|
962
|
+
rootHtml: createInitialHtmlErrorMarkup("Initial HTML render failed."),
|
|
963
|
+
initialFlightData,
|
|
964
|
+
basename: basePath,
|
|
965
|
+
liveReloadPath: liveReloadPath || void 0,
|
|
966
|
+
liveReloadServerId: liveReloadPath ? devServerId : void 0
|
|
967
|
+
})
|
|
968
|
+
);
|
|
969
|
+
return;
|
|
970
|
+
}
|
|
941
971
|
}
|
|
942
972
|
}
|
|
943
|
-
const initialFlightData = await renderRSCToString(initialPayload, {
|
|
944
|
-
moduleMap
|
|
945
|
-
});
|
|
946
973
|
res.statusCode = resolved.statusCode;
|
|
947
974
|
res.setHeader("Content-Type", "text/html");
|
|
948
975
|
res.end(
|
package/dist/index.js
CHANGED
|
@@ -9,6 +9,8 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
|
|
|
9
9
|
// src/server.ts
|
|
10
10
|
import { Writable } from "node:stream";
|
|
11
11
|
import { renderToPipeableStream } from "react-server-dom-webpack/server";
|
|
12
|
+
import { createFromReadableStream } from "react-server-dom-webpack/client.node";
|
|
13
|
+
import { renderToString } from "react-dom/server";
|
|
12
14
|
function defaultOnError(err) {
|
|
13
15
|
console.error("[webframez-react] RSC render error", err);
|
|
14
16
|
}
|
|
@@ -97,6 +99,25 @@ function renderRSCToString(payload, options = {}) {
|
|
|
97
99
|
stream.pipe(writable);
|
|
98
100
|
});
|
|
99
101
|
}
|
|
102
|
+
function createReadableStreamFromString(value) {
|
|
103
|
+
const encoder = new TextEncoder();
|
|
104
|
+
return new ReadableStream({
|
|
105
|
+
start(controller) {
|
|
106
|
+
controller.enqueue(encoder.encode(value));
|
|
107
|
+
controller.close();
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
async function renderHtmlFromFlightData(flightData, options) {
|
|
112
|
+
const model = await createFromReadableStream(createReadableStreamFromString(flightData), {
|
|
113
|
+
serverConsumerManifest: {
|
|
114
|
+
moduleMap: options.moduleMap ?? {},
|
|
115
|
+
serverModuleMap: null,
|
|
116
|
+
moduleLoading: null
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
return renderToString(model);
|
|
120
|
+
}
|
|
100
121
|
function sendRSC(res, model, options = {}) {
|
|
101
122
|
const {
|
|
102
123
|
moduleMap = {},
|
|
@@ -867,6 +888,9 @@ function createNodeRequestHandler(options) {
|
|
|
867
888
|
model: resolved.model,
|
|
868
889
|
head: resolved.head
|
|
869
890
|
};
|
|
891
|
+
const initialFlightData = await renderRSCToString(initialPayload, {
|
|
892
|
+
moduleMap
|
|
893
|
+
});
|
|
870
894
|
let rootHtml = "";
|
|
871
895
|
try {
|
|
872
896
|
rootHtml = await initialHtmlWorker.render({
|
|
@@ -887,26 +911,29 @@ function createNodeRequestHandler(options) {
|
|
|
887
911
|
});
|
|
888
912
|
} catch (retryError) {
|
|
889
913
|
console.error("[webframez-react] Retry for initial HTML failed", retryError);
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
914
|
+
try {
|
|
915
|
+
rootHtml = await renderHtmlFromFlightData(initialFlightData, { moduleMap });
|
|
916
|
+
} catch (flightRenderError) {
|
|
917
|
+
console.error("[webframez-react] Flight-to-HTML render failed", flightRenderError);
|
|
918
|
+
res.statusCode = 500;
|
|
919
|
+
res.setHeader("Content-Type", "text/html");
|
|
920
|
+
res.end(
|
|
921
|
+
createHTMLShell({
|
|
922
|
+
title: "500 - Initial HTML render failed",
|
|
923
|
+
headTags: "",
|
|
924
|
+
clientScriptUrl,
|
|
925
|
+
rscEndpoint: rscPath,
|
|
926
|
+
rootHtml: createInitialHtmlErrorMarkup("Initial HTML render failed."),
|
|
927
|
+
initialFlightData,
|
|
928
|
+
basename: basePath,
|
|
929
|
+
liveReloadPath: liveReloadPath || void 0,
|
|
930
|
+
liveReloadServerId: liveReloadPath ? devServerId : void 0
|
|
931
|
+
})
|
|
932
|
+
);
|
|
933
|
+
return;
|
|
934
|
+
}
|
|
905
935
|
}
|
|
906
936
|
}
|
|
907
|
-
const initialFlightData = await renderRSCToString(initialPayload, {
|
|
908
|
-
moduleMap
|
|
909
|
-
});
|
|
910
937
|
res.statusCode = resolved.statusCode;
|
|
911
938
|
res.setHeader("Content-Type", "text/html");
|
|
912
939
|
res.end(
|
package/dist/webframez-core.cjs
CHANGED
|
@@ -42,6 +42,8 @@ var import_node_child_process = require("node:child_process");
|
|
|
42
42
|
// src/server.ts
|
|
43
43
|
var import_node_stream = require("node:stream");
|
|
44
44
|
var import_server = require("react-server-dom-webpack/server");
|
|
45
|
+
var import_client = require("react-server-dom-webpack/client.node");
|
|
46
|
+
var import_server2 = require("react-dom/server");
|
|
45
47
|
function defaultOnError(err) {
|
|
46
48
|
console.error("[webframez-react] RSC render error", err);
|
|
47
49
|
}
|
|
@@ -130,6 +132,25 @@ function renderRSCToString(payload, options = {}) {
|
|
|
130
132
|
stream.pipe(writable);
|
|
131
133
|
});
|
|
132
134
|
}
|
|
135
|
+
function createReadableStreamFromString(value) {
|
|
136
|
+
const encoder = new TextEncoder();
|
|
137
|
+
return new ReadableStream({
|
|
138
|
+
start(controller) {
|
|
139
|
+
controller.enqueue(encoder.encode(value));
|
|
140
|
+
controller.close();
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
async function renderHtmlFromFlightData(flightData, options) {
|
|
145
|
+
const model = await (0, import_client.createFromReadableStream)(createReadableStreamFromString(flightData), {
|
|
146
|
+
serverConsumerManifest: {
|
|
147
|
+
moduleMap: options.moduleMap ?? {},
|
|
148
|
+
serverModuleMap: null,
|
|
149
|
+
moduleLoading: null
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
return (0, import_server2.renderToString)(model);
|
|
153
|
+
}
|
|
133
154
|
function sendRSC(res, model, options = {}) {
|
|
134
155
|
const {
|
|
135
156
|
moduleMap = {},
|
|
@@ -869,6 +890,9 @@ function createNodeRequestHandler(options) {
|
|
|
869
890
|
model: resolved.model,
|
|
870
891
|
head: resolved.head
|
|
871
892
|
};
|
|
893
|
+
const initialFlightData = await renderRSCToString(initialPayload, {
|
|
894
|
+
moduleMap
|
|
895
|
+
});
|
|
872
896
|
let rootHtml = "";
|
|
873
897
|
try {
|
|
874
898
|
rootHtml = await initialHtmlWorker.render({
|
|
@@ -889,26 +913,29 @@ function createNodeRequestHandler(options) {
|
|
|
889
913
|
});
|
|
890
914
|
} catch (retryError) {
|
|
891
915
|
console.error("[webframez-react] Retry for initial HTML failed", retryError);
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
916
|
+
try {
|
|
917
|
+
rootHtml = await renderHtmlFromFlightData(initialFlightData, { moduleMap });
|
|
918
|
+
} catch (flightRenderError) {
|
|
919
|
+
console.error("[webframez-react] Flight-to-HTML render failed", flightRenderError);
|
|
920
|
+
res.statusCode = 500;
|
|
921
|
+
res.setHeader("Content-Type", "text/html");
|
|
922
|
+
res.end(
|
|
923
|
+
createHTMLShell({
|
|
924
|
+
title: "500 - Initial HTML render failed",
|
|
925
|
+
headTags: "",
|
|
926
|
+
clientScriptUrl,
|
|
927
|
+
rscEndpoint: rscPath,
|
|
928
|
+
rootHtml: createInitialHtmlErrorMarkup("Initial HTML render failed."),
|
|
929
|
+
initialFlightData,
|
|
930
|
+
basename: basePath,
|
|
931
|
+
liveReloadPath: liveReloadPath || void 0,
|
|
932
|
+
liveReloadServerId: liveReloadPath ? devServerId : void 0
|
|
933
|
+
})
|
|
934
|
+
);
|
|
935
|
+
return;
|
|
936
|
+
}
|
|
907
937
|
}
|
|
908
938
|
}
|
|
909
|
-
const initialFlightData = await renderRSCToString(initialPayload, {
|
|
910
|
-
moduleMap
|
|
911
|
-
});
|
|
912
939
|
res.statusCode = resolved.statusCode;
|
|
913
940
|
res.setHeader("Content-Type", "text/html");
|
|
914
941
|
res.end(
|
package/dist/webframez-core.js
CHANGED
|
@@ -14,6 +14,8 @@ import { spawn } from "node:child_process";
|
|
|
14
14
|
// src/server.ts
|
|
15
15
|
import { Writable } from "node:stream";
|
|
16
16
|
import { renderToPipeableStream } from "react-server-dom-webpack/server";
|
|
17
|
+
import { createFromReadableStream } from "react-server-dom-webpack/client.node";
|
|
18
|
+
import { renderToString } from "react-dom/server";
|
|
17
19
|
function defaultOnError(err) {
|
|
18
20
|
console.error("[webframez-react] RSC render error", err);
|
|
19
21
|
}
|
|
@@ -102,6 +104,25 @@ function renderRSCToString(payload, options = {}) {
|
|
|
102
104
|
stream.pipe(writable);
|
|
103
105
|
});
|
|
104
106
|
}
|
|
107
|
+
function createReadableStreamFromString(value) {
|
|
108
|
+
const encoder = new TextEncoder();
|
|
109
|
+
return new ReadableStream({
|
|
110
|
+
start(controller) {
|
|
111
|
+
controller.enqueue(encoder.encode(value));
|
|
112
|
+
controller.close();
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
async function renderHtmlFromFlightData(flightData, options) {
|
|
117
|
+
const model = await createFromReadableStream(createReadableStreamFromString(flightData), {
|
|
118
|
+
serverConsumerManifest: {
|
|
119
|
+
moduleMap: options.moduleMap ?? {},
|
|
120
|
+
serverModuleMap: null,
|
|
121
|
+
moduleLoading: null
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
return renderToString(model);
|
|
125
|
+
}
|
|
105
126
|
function sendRSC(res, model, options = {}) {
|
|
106
127
|
const {
|
|
107
128
|
moduleMap = {},
|
|
@@ -841,6 +862,9 @@ function createNodeRequestHandler(options) {
|
|
|
841
862
|
model: resolved.model,
|
|
842
863
|
head: resolved.head
|
|
843
864
|
};
|
|
865
|
+
const initialFlightData = await renderRSCToString(initialPayload, {
|
|
866
|
+
moduleMap
|
|
867
|
+
});
|
|
844
868
|
let rootHtml = "";
|
|
845
869
|
try {
|
|
846
870
|
rootHtml = await initialHtmlWorker.render({
|
|
@@ -861,26 +885,29 @@ function createNodeRequestHandler(options) {
|
|
|
861
885
|
});
|
|
862
886
|
} catch (retryError) {
|
|
863
887
|
console.error("[webframez-react] Retry for initial HTML failed", retryError);
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
888
|
+
try {
|
|
889
|
+
rootHtml = await renderHtmlFromFlightData(initialFlightData, { moduleMap });
|
|
890
|
+
} catch (flightRenderError) {
|
|
891
|
+
console.error("[webframez-react] Flight-to-HTML render failed", flightRenderError);
|
|
892
|
+
res.statusCode = 500;
|
|
893
|
+
res.setHeader("Content-Type", "text/html");
|
|
894
|
+
res.end(
|
|
895
|
+
createHTMLShell({
|
|
896
|
+
title: "500 - Initial HTML render failed",
|
|
897
|
+
headTags: "",
|
|
898
|
+
clientScriptUrl,
|
|
899
|
+
rscEndpoint: rscPath,
|
|
900
|
+
rootHtml: createInitialHtmlErrorMarkup("Initial HTML render failed."),
|
|
901
|
+
initialFlightData,
|
|
902
|
+
basename: basePath,
|
|
903
|
+
liveReloadPath: liveReloadPath || void 0,
|
|
904
|
+
liveReloadServerId: liveReloadPath ? devServerId : void 0
|
|
905
|
+
})
|
|
906
|
+
);
|
|
907
|
+
return;
|
|
908
|
+
}
|
|
879
909
|
}
|
|
880
910
|
}
|
|
881
|
-
const initialFlightData = await renderRSCToString(initialPayload, {
|
|
882
|
-
moduleMap
|
|
883
|
-
});
|
|
884
911
|
res.statusCode = resolved.statusCode;
|
|
885
912
|
res.setHeader("Content-Type", "text/html");
|
|
886
913
|
res.end(
|