@fictjs/ssr 0.26.0 → 0.27.0
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/README.md +169 -52
- package/dist/experimental.cjs +1 -1
- package/dist/experimental.d.cts +1 -1
- package/dist/experimental.d.ts +1 -1
- package/dist/experimental.js +1 -1
- package/dist/experimental.node.cjs +5 -0
- package/dist/experimental.node.d.cts +2 -0
- package/dist/experimental.node.d.ts +2 -0
- package/dist/experimental.node.js +4 -0
- package/dist/fict-stream-runtime.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.node.cjs +10 -0
- package/dist/index.node.d.cts +2 -0
- package/dist/index.node.d.ts +2 -0
- package/dist/index.node.js +4 -0
- package/dist/node-session-carrier-CTo-1Awq.cjs +8 -0
- package/dist/node-session-carrier-ClqRbdoQ.js +12 -0
- package/dist/node-session-carrier-ClqRbdoQ.js.map +1 -0
- package/dist/render-core-D0nOT_Pe.js +1824 -0
- package/dist/render-core-D0nOT_Pe.js.map +1 -0
- package/dist/render-core-D_EheVwh.cjs +1863 -0
- package/dist/{render-core-BCYvLfHF.d.ts → render-core-KCiJV_SK.d.cts} +22 -1
- package/dist/render-core-KCiJV_SK.d.cts.map +1 -0
- package/dist/{render-core-BCYvLfHF.d.cts → render-core-KCiJV_SK.d.ts} +22 -1
- package/dist/render-core-KCiJV_SK.d.ts.map +1 -0
- package/dist/stream-runtime.cjs +1 -1
- package/dist/stream-runtime.d.cts +2 -0
- package/dist/stream-runtime.d.cts.map +1 -1
- package/dist/stream-runtime.d.ts +2 -0
- package/dist/stream-runtime.d.ts.map +1 -1
- package/dist/stream-runtime.js +1 -1
- package/dist/stream-runtime.js.map +1 -1
- package/package.json +15 -5
- package/dist/render-core-BCYvLfHF.d.cts.map +0 -1
- package/dist/render-core-BCYvLfHF.d.ts.map +0 -1
- package/dist/render-core-BLLUhkYy.js +0 -969
- package/dist/render-core-BLLUhkYy.js.map +0 -1
- package/dist/render-core-CWudV9yi.cjs +0 -1008
|
@@ -84,6 +84,17 @@ interface RenderToStringOptions {
|
|
|
84
84
|
* Nonce applied to generated <script> tags for CSP compatibility.
|
|
85
85
|
*/
|
|
86
86
|
scriptNonce?: string;
|
|
87
|
+
/**
|
|
88
|
+
* Stable namespace for resumable scope identifiers in `data-fict-s` and
|
|
89
|
+
* snapshot payloads. Set this when independently cached or separately rendered
|
|
90
|
+
* outputs can share a document, and keep it unique within that document.
|
|
91
|
+
* This does not change streaming Suspense patch identifiers.
|
|
92
|
+
*
|
|
93
|
+
* Values must contain 1-128 ASCII letters, digits, `_`, `.`, `:`, or `-`, and
|
|
94
|
+
* must not contain `--`. When omitted, each render gets an automatic edge-safe
|
|
95
|
+
* namespace.
|
|
96
|
+
*/
|
|
97
|
+
scopeIdentifierPrefix?: string;
|
|
87
98
|
}
|
|
88
99
|
interface RenderToStreamOptions extends RenderToStringOptions {
|
|
89
100
|
/**
|
|
@@ -122,6 +133,16 @@ interface RenderToStreamOptions extends RenderToStringOptions {
|
|
|
122
133
|
* Defaults to 'inline' for inline runtimes and 'observer' for external runtimes.
|
|
123
134
|
*/
|
|
124
135
|
streamPatchMode?: 'inline' | 'observer';
|
|
136
|
+
/**
|
|
137
|
+
* Stable namespace for Suspense patch identifiers. Set this when independently
|
|
138
|
+
* cached or separately rendered streams can share a document, and keep it unique
|
|
139
|
+
* within that document. This does not change resumable scope identifiers.
|
|
140
|
+
*
|
|
141
|
+
* Values must contain 1-128 ASCII letters, digits, `_`, `.`, `:`, or `-`, and
|
|
142
|
+
* must not contain `--`. When omitted, each shell stream gets an automatic
|
|
143
|
+
* edge-safe namespace.
|
|
144
|
+
*/
|
|
145
|
+
streamIdentifierPrefix?: string;
|
|
125
146
|
}
|
|
126
147
|
interface PipeableStream {
|
|
127
148
|
pipe: (writable: NodeJS.WritableStream) => void;
|
|
@@ -163,4 +184,4 @@ declare function renderToPipeableStream(view: () => FictNode, options?: RenderTo
|
|
|
163
184
|
declare function renderToPartial(view: () => FictNode, options?: RenderToStreamOptions): PartialPrerenderResult;
|
|
164
185
|
//#endregion
|
|
165
186
|
export { RenderToStringOptions as a, renderToDocument as c, renderToStream as d, renderToString as f, RenderToStreamOptions as i, renderToPartial as l, PipeableStream as n, SSRDom as o, renderToStringAsync as p, RenderToDocumentResult as r, createSSRDocument as s, PartialPrerenderResult as t, renderToPipeableStream as u };
|
|
166
|
-
//# sourceMappingURL=render-core-
|
|
187
|
+
//# sourceMappingURL=render-core-KCiJV_SK.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-core-KCiJV_SK.d.cts","names":[],"sources":["../src/render-core.ts"],"mappings":";;;UAkCiB,MAAA;EACf,MAAA,EAAQ,MAAA;EACR,QAAA,EAAU,QAAQ;AAAA;AAAA,UAGH,qBAAA;EAHG;;;;EAQlB,GAAA,GAAM,MAAA;EARY;AAAA;AAGpB;;EAUE,QAAA,GAAW,QAAA;EALL;;;EASN,MAAA,GAAS,MAAA;EAoBa;;;EAhBtB,IAAA;EAbA;;;EAiBA,SAAA,GAAY,WAAA;EARZ;;;EAYA,YAAA;EAJY;;;EAQZ,WAAA;EAIsB;;;EAAtB,mBAAA,GAAsB,MAAA;EAkBtB;;;EAdA,gBAAA;EA+BA;;;EA3BA,YAAA;EA+CqB;AAAA;AAGvB;EA9CE,OAAA;;;;;;EAMA,aAAA;EA0DA;;;;;;;EAlDA,QAAA,GAAW,MAAA;EA8EW;AAAA;AAGxB;;EA5EE,eAAA;EA6EiB;;;EAzEjB,gBAAA;EA4EiB;;;;EAvEjB,cAAA;EAqEA;;;EAjEA,WAAA;EAmEA;;;AAAiB;AAGnB;;;;;;EA3DE,qBAAA;AAAA;AAAA,UAGe,qBAAA,SAA8B,qBAAqB;EA+DlE;;;;;EAzDA,IAAA;EA+DA;;;EA3DA,YAAA;EA4DwB;AAAA;AAG1B;EA3DE,UAAA;;;;EAIA,OAAA,IAAW,GAAA;EAyDX;;;EArDA,MAAA,GAAS,WAAA;EAsDF;AAQT;;;EAzDE,aAAA;EAyDoE;AAStE;;EA9DE,gBAAA;EA+DY;;;;EA1DZ,eAAA;EA0DY;;;;;;AAEW;AA+DzB;;EAjHE,sBAAA;AAAA;AAAA,UAGe,cAAA;EACf,IAAA,GAAO,QAAA,EAAU,MAAA,CAAO,cAAA;EACxB,KAAA,GAAQ,MAAA;EACR,UAAA,EAAY,OAAA;EACZ,QAAA,EAAU,OAAA;AAAA;AAAA,UAGK,sBAAA;EA8GwB;;;;;;EAvGvC,KAAA;EAwGY;;;EApGZ,MAAA,EAAQ,cAAA,CAAe,UAAA;EACvB,UAAA,EAAY,OAAA;EACZ,QAAA,EAAU,OAAA;EACV,KAAA,GAAQ,MAAA;AAAA;AAAA,UAGO,sBAAA,SAA+B,MAAM;EACpD,IAAA;EACA,SAAA,EAAW,WAAA;EACX,OAAA;AAAA;AAAA,iBAQc,iBAAA,CAAkB,IAAA,YAA8B,MAAM;AAAA,iBAStD,gBAAA,CACd,IAAA,QAAY,QAAA,EACZ,OAAA,GAAS,qBAAA,GACR,sBAAA;AAAA,iBA+Da,cAAA,CAAe,IAAA,QAAY,QAAA,EAAU,OAAA,GAAS,qBAA0B;AAAA,iBAOlE,mBAAA,CACpB,IAAA,QAAY,QAAA,EACZ,OAAA,GAAS,qBAAA,GACR,OAAA;AAAA,iBA6Ba,cAAA,CACd,IAAA,QAAY,QAAA,EACZ,OAAA,GAAS,qBAAA,GACR,cAAA,CAAe,UAAA;AAAA,iBAkFF,sBAAA,CACd,IAAA,QAAY,QAAA,EACZ,OAAA,GAAS,qBAAA,GACR,cAAA;;;;;iBA8Ba,eAAA,CACd,IAAA,QAAY,QAAA,EACZ,OAAA,GAAS,qBAAA,GACR,sBAAA"}
|
|
@@ -84,6 +84,17 @@ interface RenderToStringOptions {
|
|
|
84
84
|
* Nonce applied to generated <script> tags for CSP compatibility.
|
|
85
85
|
*/
|
|
86
86
|
scriptNonce?: string;
|
|
87
|
+
/**
|
|
88
|
+
* Stable namespace for resumable scope identifiers in `data-fict-s` and
|
|
89
|
+
* snapshot payloads. Set this when independently cached or separately rendered
|
|
90
|
+
* outputs can share a document, and keep it unique within that document.
|
|
91
|
+
* This does not change streaming Suspense patch identifiers.
|
|
92
|
+
*
|
|
93
|
+
* Values must contain 1-128 ASCII letters, digits, `_`, `.`, `:`, or `-`, and
|
|
94
|
+
* must not contain `--`. When omitted, each render gets an automatic edge-safe
|
|
95
|
+
* namespace.
|
|
96
|
+
*/
|
|
97
|
+
scopeIdentifierPrefix?: string;
|
|
87
98
|
}
|
|
88
99
|
interface RenderToStreamOptions extends RenderToStringOptions {
|
|
89
100
|
/**
|
|
@@ -122,6 +133,16 @@ interface RenderToStreamOptions extends RenderToStringOptions {
|
|
|
122
133
|
* Defaults to 'inline' for inline runtimes and 'observer' for external runtimes.
|
|
123
134
|
*/
|
|
124
135
|
streamPatchMode?: 'inline' | 'observer';
|
|
136
|
+
/**
|
|
137
|
+
* Stable namespace for Suspense patch identifiers. Set this when independently
|
|
138
|
+
* cached or separately rendered streams can share a document, and keep it unique
|
|
139
|
+
* within that document. This does not change resumable scope identifiers.
|
|
140
|
+
*
|
|
141
|
+
* Values must contain 1-128 ASCII letters, digits, `_`, `.`, `:`, or `-`, and
|
|
142
|
+
* must not contain `--`. When omitted, each shell stream gets an automatic
|
|
143
|
+
* edge-safe namespace.
|
|
144
|
+
*/
|
|
145
|
+
streamIdentifierPrefix?: string;
|
|
125
146
|
}
|
|
126
147
|
interface PipeableStream {
|
|
127
148
|
pipe: (writable: NodeJS.WritableStream) => void;
|
|
@@ -163,4 +184,4 @@ declare function renderToPipeableStream(view: () => FictNode, options?: RenderTo
|
|
|
163
184
|
declare function renderToPartial(view: () => FictNode, options?: RenderToStreamOptions): PartialPrerenderResult;
|
|
164
185
|
//#endregion
|
|
165
186
|
export { RenderToStringOptions as a, renderToDocument as c, renderToStream as d, renderToString as f, RenderToStreamOptions as i, renderToPartial as l, PipeableStream as n, SSRDom as o, renderToStringAsync as p, RenderToDocumentResult as r, createSSRDocument as s, PartialPrerenderResult as t, renderToPipeableStream as u };
|
|
166
|
-
//# sourceMappingURL=render-core-
|
|
187
|
+
//# sourceMappingURL=render-core-KCiJV_SK.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-core-KCiJV_SK.d.ts","names":[],"sources":["../src/render-core.ts"],"mappings":";;;UAkCiB,MAAA;EACf,MAAA,EAAQ,MAAA;EACR,QAAA,EAAU,QAAQ;AAAA;AAAA,UAGH,qBAAA;EAHG;;;;EAQlB,GAAA,GAAM,MAAA;EARY;AAAA;AAGpB;;EAUE,QAAA,GAAW,QAAA;EALL;;;EASN,MAAA,GAAS,MAAA;EAoBa;;;EAhBtB,IAAA;EAbA;;;EAiBA,SAAA,GAAY,WAAA;EARZ;;;EAYA,YAAA;EAJY;;;EAQZ,WAAA;EAIsB;;;EAAtB,mBAAA,GAAsB,MAAA;EAkBtB;;;EAdA,gBAAA;EA+BA;;;EA3BA,YAAA;EA+CqB;AAAA;AAGvB;EA9CE,OAAA;;;;;;EAMA,aAAA;EA0DA;;;;;;;EAlDA,QAAA,GAAW,MAAA;EA8EW;AAAA;AAGxB;;EA5EE,eAAA;EA6EiB;;;EAzEjB,gBAAA;EA4EiB;;;;EAvEjB,cAAA;EAqEA;;;EAjEA,WAAA;EAmEA;;;AAAiB;AAGnB;;;;;;EA3DE,qBAAA;AAAA;AAAA,UAGe,qBAAA,SAA8B,qBAAqB;EA+DlE;;;;;EAzDA,IAAA;EA+DA;;;EA3DA,YAAA;EA4DwB;AAAA;AAG1B;EA3DE,UAAA;;;;EAIA,OAAA,IAAW,GAAA;EAyDX;;;EArDA,MAAA,GAAS,WAAA;EAsDF;AAQT;;;EAzDE,aAAA;EAyDoE;AAStE;;EA9DE,gBAAA;EA+DY;;;;EA1DZ,eAAA;EA0DY;;;;;;AAEW;AA+DzB;;EAjHE,sBAAA;AAAA;AAAA,UAGe,cAAA;EACf,IAAA,GAAO,QAAA,EAAU,MAAA,CAAO,cAAA;EACxB,KAAA,GAAQ,MAAA;EACR,UAAA,EAAY,OAAA;EACZ,QAAA,EAAU,OAAA;AAAA;AAAA,UAGK,sBAAA;EA8GwB;;;;;;EAvGvC,KAAA;EAwGY;;;EApGZ,MAAA,EAAQ,cAAA,CAAe,UAAA;EACvB,UAAA,EAAY,OAAA;EACZ,QAAA,EAAU,OAAA;EACV,KAAA,GAAQ,MAAA;AAAA;AAAA,UAGO,sBAAA,SAA+B,MAAM;EACpD,IAAA;EACA,SAAA,EAAW,WAAA;EACX,OAAA;AAAA;AAAA,iBAQc,iBAAA,CAAkB,IAAA,YAA8B,MAAM;AAAA,iBAStD,gBAAA,CACd,IAAA,QAAY,QAAA,EACZ,OAAA,GAAS,qBAAA,GACR,sBAAA;AAAA,iBA+Da,cAAA,CAAe,IAAA,QAAY,QAAA,EAAU,OAAA,GAAS,qBAA0B;AAAA,iBAOlE,mBAAA,CACpB,IAAA,QAAY,QAAA,EACZ,OAAA,GAAS,qBAAA,GACR,OAAA;AAAA,iBA6Ba,cAAA,CACd,IAAA,QAAY,QAAA,EACZ,OAAA,GAAS,qBAAA,GACR,cAAA,CAAe,UAAA;AAAA,iBAkFF,sBAAA,CACd,IAAA,QAAY,QAAA,EACZ,OAAA,GAAS,qBAAA,GACR,cAAA;;;;;iBA8Ba,eAAA,CACd,IAAA,QAAY,QAAA,EACZ,OAAA,GAAS,qBAAA,GACR,sBAAA"}
|
package/dist/stream-runtime.cjs
CHANGED
|
@@ -7,7 +7,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
7
7
|
* this helper with `observerMode: true`.
|
|
8
8
|
*/
|
|
9
9
|
function createStreamRuntimeCode(options = {}) {
|
|
10
|
-
return "(function(){
|
|
10
|
+
return "(function(){var runtime=window.__FICT_STREAM;function walk(root,visit){var stack=[root];while(stack.length){var node=stack.pop();if(visit(node)===false)return false;var container=node.nodeType===1&&node.localName===\"template\"&&node.content?node.content:node;for(var child=container.lastChild;child;child=child.previousSibling)stack.push(child);}return true;}if(!runtime||typeof runtime.apply!==\"function\"){var cache=new Map();function findTemplate(id){var tpl=null;walk(document,function(n){if(n.nodeType===1&&n.localName===\"template\"&&n.content&&n.getAttribute(\"data-fict-suspense\")===id){tpl=n;return false;}});return tpl;}function find(id){var hit=cache.get(id);if(hit)return hit;var startMarker=\"fict:suspense-start:\"+id,endMarker=\"fict:suspense-end:\"+id;walk(document,function(n){if(n.nodeType!==8||n.data!==startMarker)return;var end=n.nextSibling;while(end&&(end.nodeType!==8||end.data!==endMarker))end=end.nextSibling;if(end){hit={start:n,end:end};return false;}});if(hit)cache.set(id,hit);return hit;}function apply(id){if(typeof id!==\"string\"||!id)return;var tpl=findTemplate(id);if(!tpl)return;var b=find(id);if(!b)return;var parent=b.start.parentNode;if(!parent||b.end.parentNode!==parent)return;var cursor=b.start.nextSibling;while(cursor&&cursor!==b.end)cursor=cursor.nextSibling;if(cursor!==b.end)return;var content=tpl.content;var ns=tpl.getAttribute(\"data-fict-patch-namespace\");if(ns){var tag=ns===\"svg\"?\"svg\":ns===\"mathml\"?\"math\":null;var wrapper=content.firstElementChild;if(!tag||!wrapper||wrapper.localName!==tag)return;var fragment=document.createDocumentFragment();while(wrapper.firstChild)fragment.appendChild(wrapper.firstChild);content=fragment;}var node=b.start.nextSibling;while(node&&node!==b.end){var next=node.nextSibling;node.parentNode&&node.parentNode.removeChild(node);node=next;}parent.insertBefore(content,b.end);tpl.parentNode&&tpl.parentNode.removeChild(tpl);}runtime={apply:apply};window.__FICT_STREAM=runtime;}" + (options.observerMode ?? true ? "if(runtime.observerInstalled)return;runtime.observerInstalled=true;function scan(root){var ids=[];walk(root,function(n){if(n.nodeType===1&&n.localName===\"template\"&&n.content&&n.hasAttribute(\"data-fict-suspense\")){var id=n.getAttribute(\"data-fict-suspense\");if(id)ids.push(id);}});for(var i=0;i<ids.length;i++)runtime.apply(ids[i]);}if(typeof MutationObserver===\"function\"){new MutationObserver(function(muts){for(var i=0;i<muts.length;i++){for(var j=0;j<muts[i].addedNodes.length;j++){var n=muts[i].addedNodes[j];if(n.nodeType===1)scan(n);}}}).observe(document.documentElement||document,{childList:true,subtree:true});}if(document.readyState===\"loading\"){document.addEventListener(\"DOMContentLoaded\",function(){scan(document);},{once:true});}else{scan(document);}" : "") + "})();";
|
|
11
11
|
}
|
|
12
12
|
const FICT_STREAM_RUNTIME_CODE = createStreamRuntimeCode({ observerMode: true });
|
|
13
13
|
//#endregion
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
interface StreamRuntimeCodeOptions {
|
|
3
3
|
/**
|
|
4
4
|
* Enable observer mode so patch templates are applied without per-chunk inline scripts.
|
|
5
|
+
* Existing template fragments are covered by the initial scan; observation follows
|
|
6
|
+
* additions to the document tree made while streamed HTML is parsed.
|
|
5
7
|
*/
|
|
6
8
|
observerMode?: boolean;
|
|
7
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-runtime.d.cts","names":[],"sources":["../src/stream-runtime.ts"],"mappings":";UAAiB,wBAAA;EAAA
|
|
1
|
+
{"version":3,"file":"stream-runtime.d.cts","names":[],"sources":["../src/stream-runtime.ts"],"mappings":";UAAiB,wBAAA;EAAA;;;;AAMH;EAAZ,YAAY;AAAA;;;AASgE;AAsD9E;;;iBAtDgB,uBAAA,CAAwB,OAAsC,GAA7B,wBAA6B;AAAA,cAsDjE,wBAAA"}
|
package/dist/stream-runtime.d.ts
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
interface StreamRuntimeCodeOptions {
|
|
3
3
|
/**
|
|
4
4
|
* Enable observer mode so patch templates are applied without per-chunk inline scripts.
|
|
5
|
+
* Existing template fragments are covered by the initial scan; observation follows
|
|
6
|
+
* additions to the document tree made while streamed HTML is parsed.
|
|
5
7
|
*/
|
|
6
8
|
observerMode?: boolean;
|
|
7
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-runtime.d.ts","names":[],"sources":["../src/stream-runtime.ts"],"mappings":";UAAiB,wBAAA;EAAA
|
|
1
|
+
{"version":3,"file":"stream-runtime.d.ts","names":[],"sources":["../src/stream-runtime.ts"],"mappings":";UAAiB,wBAAA;EAAA;;;;AAMH;EAAZ,YAAY;AAAA;;;AASgE;AAsD9E;;;iBAtDgB,uBAAA,CAAwB,OAAsC,GAA7B,wBAA6B;AAAA,cAsDjE,wBAAA"}
|
package/dist/stream-runtime.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* this helper with `observerMode: true`.
|
|
7
7
|
*/
|
|
8
8
|
function createStreamRuntimeCode(options = {}) {
|
|
9
|
-
return "(function(){
|
|
9
|
+
return "(function(){var runtime=window.__FICT_STREAM;function walk(root,visit){var stack=[root];while(stack.length){var node=stack.pop();if(visit(node)===false)return false;var container=node.nodeType===1&&node.localName===\"template\"&&node.content?node.content:node;for(var child=container.lastChild;child;child=child.previousSibling)stack.push(child);}return true;}if(!runtime||typeof runtime.apply!==\"function\"){var cache=new Map();function findTemplate(id){var tpl=null;walk(document,function(n){if(n.nodeType===1&&n.localName===\"template\"&&n.content&&n.getAttribute(\"data-fict-suspense\")===id){tpl=n;return false;}});return tpl;}function find(id){var hit=cache.get(id);if(hit)return hit;var startMarker=\"fict:suspense-start:\"+id,endMarker=\"fict:suspense-end:\"+id;walk(document,function(n){if(n.nodeType!==8||n.data!==startMarker)return;var end=n.nextSibling;while(end&&(end.nodeType!==8||end.data!==endMarker))end=end.nextSibling;if(end){hit={start:n,end:end};return false;}});if(hit)cache.set(id,hit);return hit;}function apply(id){if(typeof id!==\"string\"||!id)return;var tpl=findTemplate(id);if(!tpl)return;var b=find(id);if(!b)return;var parent=b.start.parentNode;if(!parent||b.end.parentNode!==parent)return;var cursor=b.start.nextSibling;while(cursor&&cursor!==b.end)cursor=cursor.nextSibling;if(cursor!==b.end)return;var content=tpl.content;var ns=tpl.getAttribute(\"data-fict-patch-namespace\");if(ns){var tag=ns===\"svg\"?\"svg\":ns===\"mathml\"?\"math\":null;var wrapper=content.firstElementChild;if(!tag||!wrapper||wrapper.localName!==tag)return;var fragment=document.createDocumentFragment();while(wrapper.firstChild)fragment.appendChild(wrapper.firstChild);content=fragment;}var node=b.start.nextSibling;while(node&&node!==b.end){var next=node.nextSibling;node.parentNode&&node.parentNode.removeChild(node);node=next;}parent.insertBefore(content,b.end);tpl.parentNode&&tpl.parentNode.removeChild(tpl);}runtime={apply:apply};window.__FICT_STREAM=runtime;}" + (options.observerMode ?? true ? "if(runtime.observerInstalled)return;runtime.observerInstalled=true;function scan(root){var ids=[];walk(root,function(n){if(n.nodeType===1&&n.localName===\"template\"&&n.content&&n.hasAttribute(\"data-fict-suspense\")){var id=n.getAttribute(\"data-fict-suspense\");if(id)ids.push(id);}});for(var i=0;i<ids.length;i++)runtime.apply(ids[i]);}if(typeof MutationObserver===\"function\"){new MutationObserver(function(muts){for(var i=0;i<muts.length;i++){for(var j=0;j<muts[i].addedNodes.length;j++){var n=muts[i].addedNodes[j];if(n.nodeType===1)scan(n);}}}).observe(document.documentElement||document,{childList:true,subtree:true});}if(document.readyState===\"loading\"){document.addEventListener(\"DOMContentLoaded\",function(){scan(document);},{once:true});}else{scan(document);}" : "") + "})();";
|
|
10
10
|
}
|
|
11
11
|
const FICT_STREAM_RUNTIME_CODE = createStreamRuntimeCode({ observerMode: true });
|
|
12
12
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-runtime.js","names":[],"sources":["../src/stream-runtime.ts"],"sourcesContent":["export interface StreamRuntimeCodeOptions {\n /**\n * Enable observer mode so patch templates are applied without per-chunk inline scripts.\n */\n observerMode?: boolean\n}\n\n/**\n * Create the browser-side streaming patch runtime as classic-script JavaScript.\n *\n * The generated package asset `@fictjs/ssr/fict-stream-runtime.js` is built from\n * this helper with `observerMode: true`.\n */\nexport function createStreamRuntimeCode(options: StreamRuntimeCodeOptions = {}): string {\n const observerMode = options.observerMode ?? true\n return (\n '(function(){' +\n '
|
|
1
|
+
{"version":3,"file":"stream-runtime.js","names":[],"sources":["../src/stream-runtime.ts"],"sourcesContent":["export interface StreamRuntimeCodeOptions {\n /**\n * Enable observer mode so patch templates are applied without per-chunk inline scripts.\n * Existing template fragments are covered by the initial scan; observation follows\n * additions to the document tree made while streamed HTML is parsed.\n */\n observerMode?: boolean\n}\n\n/**\n * Create the browser-side streaming patch runtime as classic-script JavaScript.\n *\n * The generated package asset `@fictjs/ssr/fict-stream-runtime.js` is built from\n * this helper with `observerMode: true`.\n */\nexport function createStreamRuntimeCode(options: StreamRuntimeCodeOptions = {}): string {\n const observerMode = options.observerMode ?? true\n return (\n '(function(){' +\n 'var runtime=window.__FICT_STREAM;' +\n 'function walk(root,visit){' +\n 'var stack=[root];while(stack.length){' +\n 'var node=stack.pop();if(visit(node)===false)return false;' +\n 'var container=node.nodeType===1&&node.localName===\"template\"&&node.content?node.content:node;' +\n 'for(var child=container.lastChild;child;child=child.previousSibling)stack.push(child);' +\n '}return true;' +\n '}' +\n 'if(!runtime||typeof runtime.apply!==\"function\"){' +\n 'var cache=new Map();' +\n 'function findTemplate(id){' +\n 'var tpl=null;walk(document,function(n){' +\n 'if(n.nodeType===1&&n.localName===\"template\"&&n.content&&n.getAttribute(\"data-fict-suspense\")===id){tpl=n;return false;}' +\n '});return tpl;' +\n '}' +\n 'function find(id){' +\n 'var hit=cache.get(id);if(hit)return hit;' +\n 'var startMarker=\"fict:suspense-start:\"+id,endMarker=\"fict:suspense-end:\"+id;' +\n 'walk(document,function(n){' +\n 'if(n.nodeType!==8||n.data!==startMarker)return;' +\n 'var end=n.nextSibling;while(end&&(end.nodeType!==8||end.data!==endMarker))end=end.nextSibling;' +\n 'if(end){hit={start:n,end:end};return false;}' +\n '});' +\n 'if(hit)cache.set(id,hit);return hit;' +\n '}' +\n 'function apply(id){' +\n 'if(typeof id!==\"string\"||!id)return;' +\n 'var tpl=findTemplate(id);if(!tpl)return;' +\n 'var b=find(id);if(!b)return;' +\n 'var parent=b.start.parentNode;if(!parent||b.end.parentNode!==parent)return;' +\n 'var cursor=b.start.nextSibling;while(cursor&&cursor!==b.end)cursor=cursor.nextSibling;if(cursor!==b.end)return;' +\n 'var content=tpl.content;var ns=tpl.getAttribute(\"data-fict-patch-namespace\");' +\n 'if(ns){var tag=ns===\"svg\"?\"svg\":ns===\"mathml\"?\"math\":null;var wrapper=content.firstElementChild;if(!tag||!wrapper||wrapper.localName!==tag)return;var fragment=document.createDocumentFragment();while(wrapper.firstChild)fragment.appendChild(wrapper.firstChild);content=fragment;}' +\n 'var node=b.start.nextSibling;' +\n 'while(node&&node!==b.end){var next=node.nextSibling;node.parentNode&&node.parentNode.removeChild(node);node=next;}' +\n 'parent.insertBefore(content,b.end);' +\n 'tpl.parentNode&&tpl.parentNode.removeChild(tpl);' +\n '}' +\n 'runtime={apply:apply};window.__FICT_STREAM=runtime;' +\n '}' +\n (observerMode\n ? 'if(runtime.observerInstalled)return;runtime.observerInstalled=true;' +\n 'function scan(root){var ids=[];walk(root,function(n){if(n.nodeType===1&&n.localName===\"template\"&&n.content&&n.hasAttribute(\"data-fict-suspense\")){var id=n.getAttribute(\"data-fict-suspense\");if(id)ids.push(id);}});for(var i=0;i<ids.length;i++)runtime.apply(ids[i]);}' +\n 'if(typeof MutationObserver===\"function\"){new MutationObserver(function(muts){for(var i=0;i<muts.length;i++){for(var j=0;j<muts[i].addedNodes.length;j++){var n=muts[i].addedNodes[j];if(n.nodeType===1)scan(n);}}}).observe(document.documentElement||document,{childList:true,subtree:true});}' +\n 'if(document.readyState===\"loading\"){document.addEventListener(\"DOMContentLoaded\",function(){scan(document);},{once:true});}else{scan(document);}'\n : '') +\n '})();'\n )\n}\n\nexport const FICT_STREAM_RUNTIME_CODE = createStreamRuntimeCode({ observerMode: true })\n"],"mappings":";;;;;;;AAeA,SAAgB,wBAAwB,UAAoC,CAAC,GAAW;CAEtF,OACE,87DAFmB,QAAQ,gBAAgB,OA4CvC,6wBAIA,MACJ;AAEJ;AAEA,MAAa,2BAA2B,wBAAwB,EAAE,cAAc,KAAK,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fictjs/ssr",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.27.0",
|
|
4
4
|
"description": "Fict server-side rendering",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public",
|
|
@@ -12,17 +12,25 @@
|
|
|
12
12
|
"directory": "packages/ssr"
|
|
13
13
|
},
|
|
14
14
|
"type": "module",
|
|
15
|
-
"main": "dist/index.cjs",
|
|
15
|
+
"main": "dist/index.node.cjs",
|
|
16
16
|
"module": "dist/index.js",
|
|
17
17
|
"types": "dist/index.d.ts",
|
|
18
18
|
"exports": {
|
|
19
19
|
".": {
|
|
20
20
|
"types": "./dist/index.d.ts",
|
|
21
|
+
"node": {
|
|
22
|
+
"import": "./dist/index.node.js",
|
|
23
|
+
"require": "./dist/index.node.cjs"
|
|
24
|
+
},
|
|
21
25
|
"import": "./dist/index.js",
|
|
22
26
|
"require": "./dist/index.cjs"
|
|
23
27
|
},
|
|
24
28
|
"./experimental": {
|
|
25
29
|
"types": "./dist/experimental.d.ts",
|
|
30
|
+
"node": {
|
|
31
|
+
"import": "./dist/experimental.node.js",
|
|
32
|
+
"require": "./dist/experimental.node.cjs"
|
|
33
|
+
},
|
|
26
34
|
"import": "./dist/experimental.js",
|
|
27
35
|
"require": "./dist/experimental.cjs"
|
|
28
36
|
},
|
|
@@ -38,11 +46,11 @@
|
|
|
38
46
|
],
|
|
39
47
|
"dependencies": {
|
|
40
48
|
"linkedom": "^0.18.12",
|
|
41
|
-
"@fictjs/runtime": "0.
|
|
49
|
+
"@fictjs/runtime": "0.27.0"
|
|
42
50
|
},
|
|
43
51
|
"devDependencies": {
|
|
44
52
|
"tsdown": "^0.22.3",
|
|
45
|
-
"fict": "0.
|
|
53
|
+
"fict": "0.27.0"
|
|
46
54
|
},
|
|
47
55
|
"keywords": [
|
|
48
56
|
"fict",
|
|
@@ -58,8 +66,10 @@
|
|
|
58
66
|
"build:stream-runtime": "node scripts/write-stream-runtime-asset.mjs",
|
|
59
67
|
"dev": "tsdown --watch --on-success \"pnpm run build:stream-runtime\"",
|
|
60
68
|
"test": "vitest run",
|
|
69
|
+
"test:node": "node test/node-runtime.smoke.mjs",
|
|
61
70
|
"test:edge": "node test/edge-runtime.smoke.mjs",
|
|
62
|
-
"test:
|
|
71
|
+
"test:cjs": "node test/cjs-runtime.smoke.cjs",
|
|
72
|
+
"test:matrix": "pnpm run test && pnpm run test:node && pnpm run test:edge && pnpm run test:cjs",
|
|
63
73
|
"test:coverage": "vitest run --coverage",
|
|
64
74
|
"lint": "eslint src",
|
|
65
75
|
"typecheck": "tsc --noEmit",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"render-core-BCYvLfHF.d.cts","names":[],"sources":["../src/render-core.ts"],"mappings":";;;UAqBiB,MAAA;EACf,MAAA,EAAQ,MAAA;EACR,QAAA,EAAU,QAAQ;AAAA;AAAA,UAGH,qBAAA;EAHG;;;;EAQlB,GAAA,GAAM,MAAA;EARY;AAAA;AAGpB;;EAUE,QAAA,GAAW,QAAA;EALL;;;EASN,MAAA,GAAS,MAAA;EAoBa;;;EAhBtB,IAAA;EAbA;;;EAiBA,SAAA,GAAY,WAAA;EARZ;;;EAYA,YAAA;EAJY;;;EAQZ,WAAA;EAIsB;;;EAAtB,mBAAA,GAAsB,MAAA;EAkBtB;;;EAdA,gBAAA;EA+BA;;;EA3BA,YAAA;EAoCW;AAGb;;EAnCE,OAAA;EAmCkE;;;;;EA7BlE,aAAA;EA+CW;;;;;;;EAvCX,QAAA,GAAW,MAAA;EA4DI;;;;EAvDf,eAAA;EA2DU;;;EAvDV,gBAAA;EAoDiB;;;;EA/CjB,cAAA;EAiDA;;;EA7CA,WAAA;AAAA;AAAA,UAGe,qBAAA,SAA8B,qBAAqB;EA8CnD;;;;;EAxCf,IAAA;EAqDU;;;EAjDV,YAAA;EA+CA;;;EA3CA,UAAA;EA4CY;;;EAxCZ,OAAA,IAAW,GAAA;EA0CH;;AAAgB;EAtCxB,MAAA,GAAS,WAAA;EAyC6B;;;;EApCtC,aAAA;EAsCA;;;EAlCA,gBAAA;EAmCO;AAQT;;;EAtCE,eAAA;AAAA;AAAA,UAGe,cAAA;EACf,IAAA,GAAO,QAAA,EAAU,MAAA,CAAO,cAAA;EACxB,KAAA,GAAQ,MAAA;EACR,UAAA,EAAY,OAAA;EACZ,QAAA,EAAU,OAAA;AAAA;AAAA,UAGK,sBAAA;EAwCQ;;;;;;EAjCvB,KAAA;EAiCuB;AA8DzB;;EA3FE,MAAA,EAAQ,cAAA,CAAe,UAAA;EACvB,UAAA,EAAY,OAAA;EACZ,QAAA,EAAU,OAAA;EACV,KAAA,GAAQ,MAAA;AAAA;AAAA,UAGO,sBAAA,SAA+B,MAAM;EACpD,IAAA;EACA,SAAA,EAAW,WAAA;EACX,OAAA;AAAA;AAAA,iBAQc,iBAAA,CAAkB,IAAA,YAA8B,MAAM;AAAA,iBAStD,gBAAA,CACd,IAAA,QAAY,QAAA,EACZ,OAAA,GAAS,qBAAA,GACR,sBAAA;AAAA,iBA8Da,cAAA,CAAe,IAAA,QAAY,QAAA,EAAU,OAAA,GAAS,qBAA0B;AAAA,iBAOlE,mBAAA,CACpB,IAAA,QAAY,QAAA,EACZ,OAAA,GAAS,qBAAA,GACR,OAAA;AAAA,iBAIa,cAAA,CACd,IAAA,QAAY,QAAA,EACZ,OAAA,GAAS,qBAAA,GACR,cAAA,CAAe,UAAA;AAAA,iBAgFF,sBAAA,CACd,IAAA,QAAY,QAAA,EACZ,OAAA,GAAS,qBAAA,GACR,cAAA;;;;;iBA8Ba,eAAA,CACd,IAAA,QAAY,QAAA,EACZ,OAAA,GAAS,qBAAA,GACR,sBAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"render-core-BCYvLfHF.d.ts","names":[],"sources":["../src/render-core.ts"],"mappings":";;;UAqBiB,MAAA;EACf,MAAA,EAAQ,MAAA;EACR,QAAA,EAAU,QAAQ;AAAA;AAAA,UAGH,qBAAA;EAHG;;;;EAQlB,GAAA,GAAM,MAAA;EARY;AAAA;AAGpB;;EAUE,QAAA,GAAW,QAAA;EALL;;;EASN,MAAA,GAAS,MAAA;EAoBa;;;EAhBtB,IAAA;EAbA;;;EAiBA,SAAA,GAAY,WAAA;EARZ;;;EAYA,YAAA;EAJY;;;EAQZ,WAAA;EAIsB;;;EAAtB,mBAAA,GAAsB,MAAA;EAkBtB;;;EAdA,gBAAA;EA+BA;;;EA3BA,YAAA;EAoCW;AAGb;;EAnCE,OAAA;EAmCkE;;;;;EA7BlE,aAAA;EA+CW;;;;;;;EAvCX,QAAA,GAAW,MAAA;EA4DI;;;;EAvDf,eAAA;EA2DU;;;EAvDV,gBAAA;EAoDiB;;;;EA/CjB,cAAA;EAiDA;;;EA7CA,WAAA;AAAA;AAAA,UAGe,qBAAA,SAA8B,qBAAqB;EA8CnD;;;;;EAxCf,IAAA;EAqDU;;;EAjDV,YAAA;EA+CA;;;EA3CA,UAAA;EA4CY;;;EAxCZ,OAAA,IAAW,GAAA;EA0CH;;AAAgB;EAtCxB,MAAA,GAAS,WAAA;EAyC6B;;;;EApCtC,aAAA;EAsCA;;;EAlCA,gBAAA;EAmCO;AAQT;;;EAtCE,eAAA;AAAA;AAAA,UAGe,cAAA;EACf,IAAA,GAAO,QAAA,EAAU,MAAA,CAAO,cAAA;EACxB,KAAA,GAAQ,MAAA;EACR,UAAA,EAAY,OAAA;EACZ,QAAA,EAAU,OAAA;AAAA;AAAA,UAGK,sBAAA;EAwCQ;;;;;;EAjCvB,KAAA;EAiCuB;AA8DzB;;EA3FE,MAAA,EAAQ,cAAA,CAAe,UAAA;EACvB,UAAA,EAAY,OAAA;EACZ,QAAA,EAAU,OAAA;EACV,KAAA,GAAQ,MAAA;AAAA;AAAA,UAGO,sBAAA,SAA+B,MAAM;EACpD,IAAA;EACA,SAAA,EAAW,WAAA;EACX,OAAA;AAAA;AAAA,iBAQc,iBAAA,CAAkB,IAAA,YAA8B,MAAM;AAAA,iBAStD,gBAAA,CACd,IAAA,QAAY,QAAA,EACZ,OAAA,GAAS,qBAAA,GACR,sBAAA;AAAA,iBA8Da,cAAA,CAAe,IAAA,QAAY,QAAA,EAAU,OAAA,GAAS,qBAA0B;AAAA,iBAOlE,mBAAA,CACpB,IAAA,QAAY,QAAA,EACZ,OAAA,GAAS,qBAAA,GACR,OAAA;AAAA,iBAIa,cAAA,CACd,IAAA,QAAY,QAAA,EACZ,OAAA,GAAS,qBAAA,GACR,cAAA,CAAe,UAAA;AAAA,iBAgFF,sBAAA,CACd,IAAA,QAAY,QAAA,EACZ,OAAA,GAAS,qBAAA,GACR,cAAA;;;;;iBA8Ba,eAAA,CACd,IAAA,QAAY,QAAA,EACZ,OAAA,GAAS,qBAAA,GACR,sBAAA"}
|