@solidjs/web 2.0.0-beta.26 → 2.0.0-beta.28
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/dev.cjs +3 -1
- package/dist/dev.js +3 -2
- package/dist/server.cjs +64 -84
- package/dist/server.js +65 -86
- package/dist/web.cjs +3 -1
- package/dist/web.js +3 -2
- package/frames/dist/client.cjs +69 -21
- package/frames/dist/client.dev.cjs +69 -21
- package/frames/dist/client.dev.js +70 -22
- package/frames/dist/client.js +70 -22
- package/frames/dist/server.cjs +55 -50
- package/frames/dist/server.js +55 -50
- package/package.json +4 -4
- package/serialization/dist/serialization.cjs +6 -3
- package/serialization/dist/serialization.js +6 -3
- package/serialization/types/index.d.ts +7 -1
- package/serialization/types-cjs/index.d.cts +7 -1
- package/server-functions/dist/client.cjs +28 -2
- package/server-functions/dist/client.js +25 -3
- package/server-functions/dist/server.cjs +194 -5
- package/server-functions/dist/server.js +187 -6
- package/types/client.d.ts +3 -3
- package/types/frames/client.d.ts +1 -0
- package/types/frames/serializer.d.ts +7 -1
- package/types/frames/server.d.ts +28 -0
- package/types/jsx.d.ts +1 -1
- package/types/response.d.ts +10 -0
- package/types/serializer.d.ts +7 -1
- package/types/server-functions/client.d.ts +4 -0
- package/types/server-functions/flash.d.ts +38 -0
- package/types/server-functions/server.d.ts +109 -6
- package/types/server-functions/shared.d.ts +48 -0
- package/types-cjs/client.d.cts +3 -3
- package/types-cjs/frames/client.d.cts +1 -0
- package/types-cjs/frames/serializer.d.cts +7 -1
- package/types-cjs/frames/server.d.cts +28 -0
- package/types-cjs/jsx.d.cts +1 -1
- package/types-cjs/response.d.cts +10 -0
- package/types-cjs/serializer.d.cts +7 -1
- package/types-cjs/server-functions/client.d.cts +4 -0
- package/types-cjs/server-functions/flash.d.cts +38 -0
- package/types-cjs/server-functions/server.d.cts +109 -6
- package/types-cjs/server-functions/shared.d.cts +48 -0
package/dist/dev.cjs
CHANGED
|
@@ -1175,13 +1175,14 @@ const HREF = Symbol.for("solid.Href");
|
|
|
1175
1175
|
function isHref(value) {
|
|
1176
1176
|
return !!(value && (typeof value === "object" || typeof value === "function") && value[HREF]);
|
|
1177
1177
|
}
|
|
1178
|
+
const REVALIDATE_HEADER = "X-Revalidate";
|
|
1178
1179
|
function initWithRevalidate(init) {
|
|
1179
1180
|
const {
|
|
1180
1181
|
revalidate,
|
|
1181
1182
|
...responseInit
|
|
1182
1183
|
} = init;
|
|
1183
1184
|
const headers = new Headers(responseInit.headers);
|
|
1184
|
-
revalidate !== undefined && headers.set(
|
|
1185
|
+
revalidate !== undefined && headers.set(REVALIDATE_HEADER, revalidate.toString());
|
|
1185
1186
|
return {
|
|
1186
1187
|
responseInit,
|
|
1187
1188
|
headers
|
|
@@ -1394,6 +1395,7 @@ exports.HydrationScript = voidFn;
|
|
|
1394
1395
|
exports.MathMLElements = MathMLElements;
|
|
1395
1396
|
exports.Namespaces = Namespaces;
|
|
1396
1397
|
exports.Portal = Portal;
|
|
1398
|
+
exports.REVALIDATE_HEADER = REVALIDATE_HEADER;
|
|
1397
1399
|
exports.RawTextElements = RawTextElements;
|
|
1398
1400
|
exports.RequestContext = RequestContext;
|
|
1399
1401
|
exports.ResponseEnvelope = ResponseEnvelope;
|
package/dist/dev.js
CHANGED
|
@@ -1174,13 +1174,14 @@ const HREF = Symbol.for("solid.Href");
|
|
|
1174
1174
|
function isHref(value) {
|
|
1175
1175
|
return !!(value && (typeof value === "object" || typeof value === "function") && value[HREF]);
|
|
1176
1176
|
}
|
|
1177
|
+
const REVALIDATE_HEADER = "X-Revalidate";
|
|
1177
1178
|
function initWithRevalidate(init) {
|
|
1178
1179
|
const {
|
|
1179
1180
|
revalidate,
|
|
1180
1181
|
...responseInit
|
|
1181
1182
|
} = init;
|
|
1182
1183
|
const headers = new Headers(responseInit.headers);
|
|
1183
|
-
revalidate !== undefined && headers.set(
|
|
1184
|
+
revalidate !== undefined && headers.set(REVALIDATE_HEADER, revalidate.toString());
|
|
1184
1185
|
return {
|
|
1185
1186
|
responseInit,
|
|
1186
1187
|
headers
|
|
@@ -1330,4 +1331,4 @@ function createElement(tagName, is = undefined) {
|
|
|
1330
1331
|
});
|
|
1331
1332
|
}
|
|
1332
1333
|
|
|
1333
|
-
export { voidFn as Assets, ChildProperties, DOMElements, DOMWithState, DelegatedEvents, Dynamic, HREF, voidFn as HydrationScript, MathMLElements, Namespaces, Portal, RawTextElements, RequestContext, ResponseEnvelope, SVGElements, VoidElements, acquireAsset, addEvent, applyRef, assign, claimElement, claimElementTree, className, delegateEvents, dynamic, dynamicProperty, effect, escape, voidFn as generateHydrationScript, voidFn as getAssets, getDelegatedRoot, getFirstChild, getHydrationKey, getNextElement, getNextMarker, getNextMatch, getNextSibling, voidFn as getRequestEvent, hydrate, insert, installHydrationRuntime, isDev, isHref, isResponseEnvelope, isServer, memo, mergeProps, redirect, ref, registerDelegatedContainer, registerDelegatedRoot, registerElementClaim, reload, render, renderToStream, renderToString, renderToStringAsync, resolveSSRNode, respond, runHydrationEvents, scope, setAttribute, setAttributeNS, setProperty, setStyleProperty, spread, ssr, ssrAttribute, ssrClassList, ssrElement, ssrHydrationKey, ssrStyle, style, template, unregisterDelegatedContainer, unregisterDelegatedRoot, voidFn as useAssets };
|
|
1334
|
+
export { voidFn as Assets, ChildProperties, DOMElements, DOMWithState, DelegatedEvents, Dynamic, HREF, voidFn as HydrationScript, MathMLElements, Namespaces, Portal, REVALIDATE_HEADER, RawTextElements, RequestContext, ResponseEnvelope, SVGElements, VoidElements, acquireAsset, addEvent, applyRef, assign, claimElement, claimElementTree, className, delegateEvents, dynamic, dynamicProperty, effect, escape, voidFn as generateHydrationScript, voidFn as getAssets, getDelegatedRoot, getFirstChild, getHydrationKey, getNextElement, getNextMarker, getNextMatch, getNextSibling, voidFn as getRequestEvent, hydrate, insert, installHydrationRuntime, isDev, isHref, isResponseEnvelope, isServer, memo, mergeProps, redirect, ref, registerDelegatedContainer, registerDelegatedRoot, registerElementClaim, reload, render, renderToStream, renderToString, renderToStringAsync, resolveSSRNode, respond, runHydrationEvents, scope, setAttribute, setAttributeNS, setProperty, setStyleProperty, spread, ssr, ssrAttribute, ssrClassList, ssrElement, ssrHydrationKey, ssrStyle, style, template, unregisterDelegatedContainer, unregisterDelegatedRoot, voidFn as useAssets };
|
package/dist/server.cjs
CHANGED
|
@@ -65,6 +65,7 @@ const effect = (fn, effectFn, options) => solidJs.createRenderEffect(fn, effectF
|
|
|
65
65
|
const memo = fn => solidJs.createMemo(() => fn(), syncOptions);
|
|
66
66
|
|
|
67
67
|
const DEFAULT_DISABLED_FEATURES = seroval.Feature.AggregateError | seroval.Feature.BigIntTypedArray;
|
|
68
|
+
const serializeOnlyDisabledFeatures = () => process.env.NODE_ENV === "development" ? 0 : seroval.Feature.ErrorPrototypeStack;
|
|
68
69
|
const HYDRATION_GLOBAL = "_$HY.r";
|
|
69
70
|
const DEFAULT_WEB_PLUGINS = Object.freeze([web.AbortSignalPlugin,
|
|
70
71
|
web.CustomEventPlugin, web.DOMExceptionPlugin, web.EventPlugin,
|
|
@@ -76,7 +77,7 @@ function createSerializer(options) {
|
|
|
76
77
|
return new seroval.Serializer({
|
|
77
78
|
...options,
|
|
78
79
|
plugins: resolveSerializerPlugins(options.plugins),
|
|
79
|
-
disabledFeatures: options.disabledFeatures === undefined ? DEFAULT_DISABLED_FEATURES : options.disabledFeatures
|
|
80
|
+
disabledFeatures: (options.disabledFeatures === undefined ? DEFAULT_DISABLED_FEATURES : options.disabledFeatures) | serializeOnlyDisabledFeatures()
|
|
80
81
|
});
|
|
81
82
|
}
|
|
82
83
|
function createHydrationSerializer({
|
|
@@ -198,7 +199,24 @@ function createAssetTracking() {
|
|
|
198
199
|
}
|
|
199
200
|
};
|
|
200
201
|
}
|
|
201
|
-
function
|
|
202
|
+
function warnUnresolvedModuleAssets(moduleUrl, warned) {
|
|
203
|
+
if (warned.has(moduleUrl)) return;
|
|
204
|
+
warned.add(moduleUrl);
|
|
205
|
+
console.error(`Asset manifest returned no client assets for module "${moduleUrl}". ` + "If this module is a server-rendered lazy() component, its entry will be missing from " + "the serialized hydration asset map, the client will be unable to preload it, and " + "hydration will fail with 'lazy() module \"…\" was not preloaded before hydration'. " + "This means the integration's asset resolver (dev manifest bridge or build client " + "manifest) failed to answer for this module — check the integration's server logs, " + "restart the dev server, or verify the module is included in the client build.");
|
|
206
|
+
}
|
|
207
|
+
function guardResolvedAssets(moduleUrl, result, warned) {
|
|
208
|
+
if (result && typeof result.then === "function") {
|
|
209
|
+
return result.then(assets => {
|
|
210
|
+
if (!assets || !assets.js || !assets.js.length) warnUnresolvedModuleAssets(moduleUrl, warned);
|
|
211
|
+
return assets;
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
if (!result || !result.js || !result.js.length) warnUnresolvedModuleAssets(moduleUrl, warned);
|
|
215
|
+
return result;
|
|
216
|
+
}
|
|
217
|
+
function applyAssetTracking(context, tracking, manifest, noScripts) {
|
|
218
|
+
const warned = new Set();
|
|
219
|
+
const guard = noScripts ? resolve => resolve : resolve => moduleUrl => guardResolvedAssets(moduleUrl, resolve(moduleUrl), warned);
|
|
202
220
|
Object.defineProperty(context, "_currentBoundaryId", {
|
|
203
221
|
get() {
|
|
204
222
|
return tracking.currentBoundaryId;
|
|
@@ -212,20 +230,20 @@ function applyAssetTracking(context, tracking, manifest) {
|
|
|
212
230
|
context.registerModule = tracking.registerModule;
|
|
213
231
|
context.getBoundaryModules = tracking.getBoundaryModules;
|
|
214
232
|
if (typeof manifest === "function") {
|
|
215
|
-
context.resolveAssets = manifest;
|
|
233
|
+
context.resolveAssets = guard(manifest);
|
|
216
234
|
} else if (manifest && typeof manifest.resolve === "function") {
|
|
217
|
-
context.resolveAssets = key => manifest.resolve(key);
|
|
235
|
+
context.resolveAssets = guard(key => manifest.resolve(key));
|
|
218
236
|
if (typeof manifest.resolveSync === "function") {
|
|
219
237
|
context.resolveAssetsSync = key => manifest.resolveSync(key);
|
|
220
238
|
}
|
|
221
239
|
} else if (manifest) {
|
|
222
240
|
const resolve = moduleUrl => resolveAssets(moduleUrl, manifest);
|
|
223
|
-
context.resolveAssets = resolve;
|
|
241
|
+
context.resolveAssets = guard(resolve);
|
|
224
242
|
context.resolveAssetsSync = resolve;
|
|
225
243
|
}
|
|
226
244
|
}
|
|
227
245
|
const VOID_ELEMENTS = /^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i;
|
|
228
|
-
const REPLACE_SCRIPT = `function $df(e,n,o,t){if(!(n=document.getElementById(e)))return 0;if(!(o=document.getElementById("pl-"+e)))return(_$HY.dq=_$HY.dq||{})[e]=1,0;for(;o&&(8!==o.nodeType||o.nodeValue!=="pl-"+e);)t=o.nextSibling,o.remove(),o=t;_$HY.done?o.remove():o.replaceWith(n.content),n.remove(),_$HY.fe(e),$dfd();return 1}function $dfl(e,o,n){if(!(o=document.getElementById("pl-"+e)))return(_$HY.dlq=_$HY.dlq||{})[e]=1,0;if(o._$fl)return 1;for(n=o.nextSibling;n;){if(8===n.nodeType&&n.nodeValue==="pl-"+e){o.parentNode&&o.parentNode.insertBefore(o.content.cloneNode(!0),n),o._$fl=1,$dfd();return 1}n=n.nextSibling}return 0}function $dflj(e,i){for(i=0;i<e.length;i++)$dfl(e[i])}function $dfd(e,i){if(e=_$HY.dq){_$HY.dq=0;for(i in e)$df(i)}if(e=_$HY.dlq){_$HY.dlq=0;for(i in e)$dfl(i)}}function $dfs(e,c,d){(_$HY.sc=_$HY.sc||{})[e]=c,d&&((_$HY.sd=_$HY.sd||{})[e]=1)}function $dfg(e,g,i,k){if(!(g=_$HY.sg&&_$HY.sg[e]))return;for(i=0;i<g.length;i++)if(_$HY.sc&&_$HY.sc[g[i]]>0)return;for(i=0;i<g.length;i++)k=g[i],delete _$HY.sg[k],$df(k)}function $dfc(e){if(--_$HY.sc[e]<=0){delete _$HY.sc[e],_$HY.sg&&_$HY.sg[e]?$dfg(e):!(_$HY.sd&&_$HY.sd[e])&&$df(e);_$HY.sd&&delete _$HY.sd[e]}}function $dfj(e,i,n){for(i=0;i<e.length;i++)if(_$HY.sc&&_$HY.sc[e[i]]>0){for(n=0;n<e.length;n++)(_$HY.sg=_$HY.sg||{})[e[n]]=e;return}for(i=0;i<e.length;i++)$df(e[i])}`;
|
|
246
|
+
const REPLACE_SCRIPT = `function $df(e,n,o,t){if(!(n=document.getElementById(e)))return 0;if(!(o=document.getElementById("pl-"+e)))return(_$HY.dq=_$HY.dq||{})[e]=1,0;for(;o&&(8!==o.nodeType||o.nodeValue!=="pl-"+e);)t=o.nextSibling,o.remove(),o=t;t=o.parentNode,_$HY.done?o.remove():o.replaceWith(n.content),n.remove(),_$HY.fe(e,t),$dfd();return 1}function $dfl(e,o,n){if(!(o=document.getElementById("pl-"+e)))return(_$HY.dlq=_$HY.dlq||{})[e]=1,0;if(o._$fl)return 1;for(n=o.nextSibling;n;){if(8===n.nodeType&&n.nodeValue==="pl-"+e){o.parentNode&&o.parentNode.insertBefore(o.content.cloneNode(!0),n),o._$fl=1,$dfd();return 1}n=n.nextSibling}return 0}function $dflj(e,i){for(i=0;i<e.length;i++)$dfl(e[i])}function $dfd(e,i){if(e=_$HY.dq){_$HY.dq=0;for(i in e)$df(i)}if(e=_$HY.dlq){_$HY.dlq=0;for(i in e)$dfl(i)}}function $dfs(e,c,d){(_$HY.sc=_$HY.sc||{})[e]=c,d&&((_$HY.sd=_$HY.sd||{})[e]=1)}function $dfg(e,g,i,k){if(!(g=_$HY.sg&&_$HY.sg[e]))return;for(i=0;i<g.length;i++)if(_$HY.sc&&_$HY.sc[g[i]]>0)return;for(i=0;i<g.length;i++)k=g[i],delete _$HY.sg[k],$df(k)}function $dfc(e){if(--_$HY.sc[e]<=0){delete _$HY.sc[e],_$HY.sg&&_$HY.sg[e]?$dfg(e):!(_$HY.sd&&_$HY.sd[e])&&$df(e);_$HY.sd&&delete _$HY.sd[e]}}function $dfj(e,i,n){for(i=0;i<e.length;i++)if(_$HY.sc&&_$HY.sc[e[i]]>0){for(n=0;n<e.length;n++)(_$HY.sg=_$HY.sg||{})[e[n]]=e;return}for(i=0;i<e.length;i++)$df(e[i])}`;
|
|
229
247
|
function renderToString(code, options = {}) {
|
|
230
248
|
const {
|
|
231
249
|
renderId = "",
|
|
@@ -276,7 +294,7 @@ function renderToString(code, options = {}) {
|
|
|
276
294
|
tracking.emittedAssets.add(value);
|
|
277
295
|
}
|
|
278
296
|
};
|
|
279
|
-
applyAssetTracking(solidJs.sharedConfig.context, tracking, manifest);
|
|
297
|
+
applyAssetTracking(solidJs.sharedConfig.context, tracking, manifest, noScripts);
|
|
280
298
|
registerEntryAssets(manifest);
|
|
281
299
|
let html = solidJs.createRoot(d => {
|
|
282
300
|
setTimeout(d);
|
|
@@ -287,11 +305,8 @@ function renderToString(code, options = {}) {
|
|
|
287
305
|
serializeFragmentAssets("", tracking.boundaryModules, solidJs.sharedConfig.context);
|
|
288
306
|
solidJs.sharedConfig.context.noHydrate = true;
|
|
289
307
|
serializer.close();
|
|
290
|
-
|
|
291
|
-
html
|
|
292
|
-
html = injectInlineStyles(tracking.inlineStyles, html, nonce);
|
|
293
|
-
if (scripts.length) html = injectScripts(html, scripts, options.nonce);
|
|
294
|
-
return html;
|
|
308
|
+
const assetsHtml = resolveAssetsHtml(solidJs.sharedConfig.context.assets);
|
|
309
|
+
return assembleDocument(html, assetsHtml, tracking.emittedAssets, tracking.inlineStyles, scripts.length ? scripts : "", nonce);
|
|
295
310
|
}
|
|
296
311
|
function renderToStream(code, options = {}) {
|
|
297
312
|
let {
|
|
@@ -364,11 +379,7 @@ function renderToStream(code, options = {}) {
|
|
|
364
379
|
}
|
|
365
380
|
},
|
|
366
381
|
shell(shellHtml, meta) {
|
|
367
|
-
shellHtml
|
|
368
|
-
shellHtml = injectPreloadLinks(meta.preloads, shellHtml);
|
|
369
|
-
shellHtml = injectInlineStyles(meta.inlineStyles, shellHtml, nonce);
|
|
370
|
-
if (meta.tasks.length) shellHtml = injectScripts(shellHtml, meta.tasks, nonce);
|
|
371
|
-
buffer.write(shellHtml);
|
|
382
|
+
buffer.write(assembleDocument(shellHtml, meta.assets, meta.preloads, meta.inlineStyles, meta.tasks.length ? meta.tasks : "", nonce));
|
|
372
383
|
},
|
|
373
384
|
...options.sink
|
|
374
385
|
};
|
|
@@ -571,7 +582,7 @@ function renderToStream(code, options = {}) {
|
|
|
571
582
|
});
|
|
572
583
|
}
|
|
573
584
|
};
|
|
574
|
-
applyAssetTracking(context, tracking, manifest);
|
|
585
|
+
applyAssetTracking(context, tracking, manifest, noScripts);
|
|
575
586
|
registerEntryAssets(manifest);
|
|
576
587
|
let html = solidJs.createRoot(d => {
|
|
577
588
|
dispose = d;
|
|
@@ -1113,28 +1124,36 @@ function resolveAssetsHtml(assets) {
|
|
|
1113
1124
|
for (let i = 0, len = assets.length; i < len; i++) out += assets[i]();
|
|
1114
1125
|
return out;
|
|
1115
1126
|
}
|
|
1116
|
-
function
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1127
|
+
function assembleDocument(html, assetsHtml, emittedAssets, inlineStyles, scripts, nonce) {
|
|
1128
|
+
const scriptTag = scripts ? `<script${nonce ? ` nonce="${nonce}"` : ""}>${scripts}</script>` : "";
|
|
1129
|
+
if (!assetsHtml && !(emittedAssets && emittedAssets.size) && !(inlineStyles && inlineStyles.size)) {
|
|
1130
|
+
if (!scriptTag) return html;
|
|
1131
|
+
const xs = html.indexOf("<!--xs-->");
|
|
1132
|
+
return xs === -1 ? html + scriptTag : html.slice(0, xs) + scriptTag + html.slice(xs);
|
|
1133
|
+
}
|
|
1134
|
+
const headIdx = html.indexOf("</head>");
|
|
1135
|
+
if (headIdx === -1) {
|
|
1136
|
+
if (!scriptTag) return html;
|
|
1137
|
+
const xs = html.indexOf("<!--xs-->");
|
|
1138
|
+
return xs === -1 ? html + scriptTag : html.slice(0, xs) + scriptTag + html.slice(xs);
|
|
1139
|
+
}
|
|
1140
|
+
let head = assetsHtml || "";
|
|
1141
|
+
if (emittedAssets && emittedAssets.size) {
|
|
1142
|
+
for (const url of emittedAssets) {
|
|
1143
|
+
head += url.endsWith(".css") ? `<link rel="stylesheet" href="${url}">` : `<link rel="modulepreload" href="${url}">`;
|
|
1144
|
+
}
|
|
1145
|
+
}
|
|
1146
|
+
if (inlineStyles && inlineStyles.size) {
|
|
1147
|
+
for (const entry of inlineStyles.values()) {
|
|
1148
|
+
if (entry.emitted) continue;
|
|
1149
|
+
entry.emitted = true;
|
|
1150
|
+
head += renderInlineStyle(entry, nonce);
|
|
1133
1151
|
}
|
|
1134
1152
|
}
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
return html.slice(0,
|
|
1153
|
+
if (!scriptTag) return html.slice(0, headIdx) + head + html.slice(headIdx);
|
|
1154
|
+
const xsIdx = html.indexOf("<!--xs-->");
|
|
1155
|
+
if (xsIdx === -1) return html.slice(0, headIdx) + head + html.slice(headIdx) + scriptTag;
|
|
1156
|
+
return xsIdx < headIdx ? html.slice(0, xsIdx) + scriptTag + html.slice(xsIdx, headIdx) + head + html.slice(headIdx) : html.slice(0, headIdx) + head + html.slice(headIdx, xsIdx) + scriptTag + html.slice(xsIdx);
|
|
1138
1157
|
}
|
|
1139
1158
|
function serializeFragmentAssets(key, boundaryModules, context) {
|
|
1140
1159
|
const map = boundaryModules.get(key);
|
|
@@ -1186,26 +1205,6 @@ function renderInlineStyle(entry, nonce) {
|
|
|
1186
1205
|
}
|
|
1187
1206
|
return `<style${nonce ? ` nonce="${nonce}"` : ""} data-asset="${escape(entry.id, true)}"${attrs}>${escapeStyleContent(entry.content)}</style>`;
|
|
1188
1207
|
}
|
|
1189
|
-
function injectInlineStyles(inlineStyles, html, nonce) {
|
|
1190
|
-
if (!inlineStyles.size) return html;
|
|
1191
|
-
const index = html.indexOf("</head>");
|
|
1192
|
-
if (index === -1) return html;
|
|
1193
|
-
let out = "";
|
|
1194
|
-
for (const entry of inlineStyles.values()) {
|
|
1195
|
-
if (entry.emitted) continue;
|
|
1196
|
-
entry.emitted = true;
|
|
1197
|
-
out += renderInlineStyle(entry, nonce);
|
|
1198
|
-
}
|
|
1199
|
-
return out ? html.slice(0, index) + out + html.slice(index) : html;
|
|
1200
|
-
}
|
|
1201
|
-
function injectScripts(html, scripts, nonce) {
|
|
1202
|
-
const tag = `<script${nonce ? ` nonce="${nonce}"` : ""}>${scripts}</script>`;
|
|
1203
|
-
const index = html.indexOf("<!--xs-->");
|
|
1204
|
-
if (index > -1) {
|
|
1205
|
-
return html.slice(0, index) + tag + html.slice(index);
|
|
1206
|
-
}
|
|
1207
|
-
return html + tag;
|
|
1208
|
-
}
|
|
1209
1208
|
function waitForFragments(registry, key) {
|
|
1210
1209
|
for (const k of [...registry.keys()].reverse()) {
|
|
1211
1210
|
if (key.startsWith(k)) return k;
|
|
@@ -1361,13 +1360,14 @@ const HREF = Symbol.for("solid.Href");
|
|
|
1361
1360
|
function isHref(value) {
|
|
1362
1361
|
return !!(value && (typeof value === "object" || typeof value === "function") && value[HREF]);
|
|
1363
1362
|
}
|
|
1363
|
+
const REVALIDATE_HEADER = "X-Revalidate";
|
|
1364
1364
|
function initWithRevalidate(init) {
|
|
1365
1365
|
const {
|
|
1366
1366
|
revalidate,
|
|
1367
1367
|
...responseInit
|
|
1368
1368
|
} = init;
|
|
1369
1369
|
const headers = new Headers(responseInit.headers);
|
|
1370
|
-
revalidate !== undefined && headers.set(
|
|
1370
|
+
revalidate !== undefined && headers.set(REVALIDATE_HEADER, revalidate.toString());
|
|
1371
1371
|
return {
|
|
1372
1372
|
responseInit,
|
|
1373
1373
|
headers
|
|
@@ -1417,33 +1417,12 @@ function respond(value, init = {}) {
|
|
|
1417
1417
|
const isServer = true;
|
|
1418
1418
|
const isDev = false;
|
|
1419
1419
|
function dynamic(source) {
|
|
1420
|
-
const
|
|
1421
|
-
|
|
1420
|
+
const cached = solidJs.createMemo(source, {
|
|
1421
|
+
serialize: false
|
|
1422
|
+
});
|
|
1422
1423
|
return props => {
|
|
1423
|
-
const comp = source();
|
|
1424
|
-
let p;
|
|
1425
|
-
let settled = false;
|
|
1426
|
-
let value;
|
|
1427
|
-
let error;
|
|
1428
|
-
if (comp && typeof comp.then === "function") {
|
|
1429
|
-
p = comp;
|
|
1430
|
-
p.then(v => {
|
|
1431
|
-
value = v;
|
|
1432
|
-
settled = true;
|
|
1433
|
-
}, err => {
|
|
1434
|
-
error = err;
|
|
1435
|
-
settled = true;
|
|
1436
|
-
});
|
|
1437
|
-
const ctx = solidJs.sharedConfig.context;
|
|
1438
|
-
if (ctx?.async) ctx.block(p.then(() => {}, () => {}));
|
|
1439
|
-
}
|
|
1440
1424
|
return solidJs.createMemo(() => {
|
|
1441
|
-
|
|
1442
|
-
if (p) {
|
|
1443
|
-
if (!settled) throw new solidJs.NotReadyError(p);
|
|
1444
|
-
if (error) throw error;
|
|
1445
|
-
c = value;
|
|
1446
|
-
}
|
|
1425
|
+
const c = cached();
|
|
1447
1426
|
if (c) {
|
|
1448
1427
|
if (typeof c === "function") return c(props);
|
|
1449
1428
|
if (typeof c === "string") {
|
|
@@ -1536,6 +1515,7 @@ exports.HydrationScript = HydrationScript;
|
|
|
1536
1515
|
exports.MathMLElements = MathMLElements;
|
|
1537
1516
|
exports.Namespaces = Namespaces;
|
|
1538
1517
|
exports.Portal = Portal;
|
|
1518
|
+
exports.REVALIDATE_HEADER = REVALIDATE_HEADER;
|
|
1539
1519
|
exports.RawTextElements = RawTextElements;
|
|
1540
1520
|
exports.RequestContext = RequestContext;
|
|
1541
1521
|
exports.ResponseEnvelope = ResponseEnvelope;
|
package/dist/server.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createRenderEffect, createMemo, sharedConfig, createRoot, ssrHandleError, getOwner, runWithOwner, createComponent, omit, getNextChildId
|
|
1
|
+
import { createRenderEffect, createMemo, sharedConfig, createRoot, ssrHandleError, getOwner, runWithOwner, createComponent, omit, getNextChildId } from 'solid-js';
|
|
2
2
|
export { Errored, For, Hydration, Loading, Match, NoHydration, Repeat, Reveal, Show, Switch, createComponent, getOwner, merge as mergeProps, ssrScope as scope, untrack } from 'solid-js';
|
|
3
3
|
import { Serializer, getCrossReferenceHeader, Feature } from 'seroval';
|
|
4
4
|
import { AbortSignalPlugin, CustomEventPlugin, DOMExceptionPlugin, EventPlugin, FormDataPlugin, HeadersPlugin, ReadableStreamPlugin, RequestPlugin, ResponsePlugin, URLSearchParamsPlugin, URLPlugin } from 'seroval-plugins/web';
|
|
@@ -64,6 +64,7 @@ const effect = (fn, effectFn, options) => createRenderEffect(fn, effectFn, optio
|
|
|
64
64
|
const memo = fn => createMemo(() => fn(), syncOptions);
|
|
65
65
|
|
|
66
66
|
const DEFAULT_DISABLED_FEATURES = Feature.AggregateError | Feature.BigIntTypedArray;
|
|
67
|
+
const serializeOnlyDisabledFeatures = () => process.env.NODE_ENV === "development" ? 0 : Feature.ErrorPrototypeStack;
|
|
67
68
|
const HYDRATION_GLOBAL = "_$HY.r";
|
|
68
69
|
const DEFAULT_WEB_PLUGINS = Object.freeze([AbortSignalPlugin,
|
|
69
70
|
CustomEventPlugin, DOMExceptionPlugin, EventPlugin,
|
|
@@ -75,7 +76,7 @@ function createSerializer(options) {
|
|
|
75
76
|
return new Serializer({
|
|
76
77
|
...options,
|
|
77
78
|
plugins: resolveSerializerPlugins(options.plugins),
|
|
78
|
-
disabledFeatures: options.disabledFeatures === undefined ? DEFAULT_DISABLED_FEATURES : options.disabledFeatures
|
|
79
|
+
disabledFeatures: (options.disabledFeatures === undefined ? DEFAULT_DISABLED_FEATURES : options.disabledFeatures) | serializeOnlyDisabledFeatures()
|
|
79
80
|
});
|
|
80
81
|
}
|
|
81
82
|
function createHydrationSerializer({
|
|
@@ -197,7 +198,24 @@ function createAssetTracking() {
|
|
|
197
198
|
}
|
|
198
199
|
};
|
|
199
200
|
}
|
|
200
|
-
function
|
|
201
|
+
function warnUnresolvedModuleAssets(moduleUrl, warned) {
|
|
202
|
+
if (warned.has(moduleUrl)) return;
|
|
203
|
+
warned.add(moduleUrl);
|
|
204
|
+
console.error(`Asset manifest returned no client assets for module "${moduleUrl}". ` + "If this module is a server-rendered lazy() component, its entry will be missing from " + "the serialized hydration asset map, the client will be unable to preload it, and " + "hydration will fail with 'lazy() module \"…\" was not preloaded before hydration'. " + "This means the integration's asset resolver (dev manifest bridge or build client " + "manifest) failed to answer for this module — check the integration's server logs, " + "restart the dev server, or verify the module is included in the client build.");
|
|
205
|
+
}
|
|
206
|
+
function guardResolvedAssets(moduleUrl, result, warned) {
|
|
207
|
+
if (result && typeof result.then === "function") {
|
|
208
|
+
return result.then(assets => {
|
|
209
|
+
if (!assets || !assets.js || !assets.js.length) warnUnresolvedModuleAssets(moduleUrl, warned);
|
|
210
|
+
return assets;
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
if (!result || !result.js || !result.js.length) warnUnresolvedModuleAssets(moduleUrl, warned);
|
|
214
|
+
return result;
|
|
215
|
+
}
|
|
216
|
+
function applyAssetTracking(context, tracking, manifest, noScripts) {
|
|
217
|
+
const warned = new Set();
|
|
218
|
+
const guard = noScripts ? resolve => resolve : resolve => moduleUrl => guardResolvedAssets(moduleUrl, resolve(moduleUrl), warned);
|
|
201
219
|
Object.defineProperty(context, "_currentBoundaryId", {
|
|
202
220
|
get() {
|
|
203
221
|
return tracking.currentBoundaryId;
|
|
@@ -211,20 +229,20 @@ function applyAssetTracking(context, tracking, manifest) {
|
|
|
211
229
|
context.registerModule = tracking.registerModule;
|
|
212
230
|
context.getBoundaryModules = tracking.getBoundaryModules;
|
|
213
231
|
if (typeof manifest === "function") {
|
|
214
|
-
context.resolveAssets = manifest;
|
|
232
|
+
context.resolveAssets = guard(manifest);
|
|
215
233
|
} else if (manifest && typeof manifest.resolve === "function") {
|
|
216
|
-
context.resolveAssets = key => manifest.resolve(key);
|
|
234
|
+
context.resolveAssets = guard(key => manifest.resolve(key));
|
|
217
235
|
if (typeof manifest.resolveSync === "function") {
|
|
218
236
|
context.resolveAssetsSync = key => manifest.resolveSync(key);
|
|
219
237
|
}
|
|
220
238
|
} else if (manifest) {
|
|
221
239
|
const resolve = moduleUrl => resolveAssets(moduleUrl, manifest);
|
|
222
|
-
context.resolveAssets = resolve;
|
|
240
|
+
context.resolveAssets = guard(resolve);
|
|
223
241
|
context.resolveAssetsSync = resolve;
|
|
224
242
|
}
|
|
225
243
|
}
|
|
226
244
|
const VOID_ELEMENTS = /^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i;
|
|
227
|
-
const REPLACE_SCRIPT = `function $df(e,n,o,t){if(!(n=document.getElementById(e)))return 0;if(!(o=document.getElementById("pl-"+e)))return(_$HY.dq=_$HY.dq||{})[e]=1,0;for(;o&&(8!==o.nodeType||o.nodeValue!=="pl-"+e);)t=o.nextSibling,o.remove(),o=t;_$HY.done?o.remove():o.replaceWith(n.content),n.remove(),_$HY.fe(e),$dfd();return 1}function $dfl(e,o,n){if(!(o=document.getElementById("pl-"+e)))return(_$HY.dlq=_$HY.dlq||{})[e]=1,0;if(o._$fl)return 1;for(n=o.nextSibling;n;){if(8===n.nodeType&&n.nodeValue==="pl-"+e){o.parentNode&&o.parentNode.insertBefore(o.content.cloneNode(!0),n),o._$fl=1,$dfd();return 1}n=n.nextSibling}return 0}function $dflj(e,i){for(i=0;i<e.length;i++)$dfl(e[i])}function $dfd(e,i){if(e=_$HY.dq){_$HY.dq=0;for(i in e)$df(i)}if(e=_$HY.dlq){_$HY.dlq=0;for(i in e)$dfl(i)}}function $dfs(e,c,d){(_$HY.sc=_$HY.sc||{})[e]=c,d&&((_$HY.sd=_$HY.sd||{})[e]=1)}function $dfg(e,g,i,k){if(!(g=_$HY.sg&&_$HY.sg[e]))return;for(i=0;i<g.length;i++)if(_$HY.sc&&_$HY.sc[g[i]]>0)return;for(i=0;i<g.length;i++)k=g[i],delete _$HY.sg[k],$df(k)}function $dfc(e){if(--_$HY.sc[e]<=0){delete _$HY.sc[e],_$HY.sg&&_$HY.sg[e]?$dfg(e):!(_$HY.sd&&_$HY.sd[e])&&$df(e);_$HY.sd&&delete _$HY.sd[e]}}function $dfj(e,i,n){for(i=0;i<e.length;i++)if(_$HY.sc&&_$HY.sc[e[i]]>0){for(n=0;n<e.length;n++)(_$HY.sg=_$HY.sg||{})[e[n]]=e;return}for(i=0;i<e.length;i++)$df(e[i])}`;
|
|
245
|
+
const REPLACE_SCRIPT = `function $df(e,n,o,t){if(!(n=document.getElementById(e)))return 0;if(!(o=document.getElementById("pl-"+e)))return(_$HY.dq=_$HY.dq||{})[e]=1,0;for(;o&&(8!==o.nodeType||o.nodeValue!=="pl-"+e);)t=o.nextSibling,o.remove(),o=t;t=o.parentNode,_$HY.done?o.remove():o.replaceWith(n.content),n.remove(),_$HY.fe(e,t),$dfd();return 1}function $dfl(e,o,n){if(!(o=document.getElementById("pl-"+e)))return(_$HY.dlq=_$HY.dlq||{})[e]=1,0;if(o._$fl)return 1;for(n=o.nextSibling;n;){if(8===n.nodeType&&n.nodeValue==="pl-"+e){o.parentNode&&o.parentNode.insertBefore(o.content.cloneNode(!0),n),o._$fl=1,$dfd();return 1}n=n.nextSibling}return 0}function $dflj(e,i){for(i=0;i<e.length;i++)$dfl(e[i])}function $dfd(e,i){if(e=_$HY.dq){_$HY.dq=0;for(i in e)$df(i)}if(e=_$HY.dlq){_$HY.dlq=0;for(i in e)$dfl(i)}}function $dfs(e,c,d){(_$HY.sc=_$HY.sc||{})[e]=c,d&&((_$HY.sd=_$HY.sd||{})[e]=1)}function $dfg(e,g,i,k){if(!(g=_$HY.sg&&_$HY.sg[e]))return;for(i=0;i<g.length;i++)if(_$HY.sc&&_$HY.sc[g[i]]>0)return;for(i=0;i<g.length;i++)k=g[i],delete _$HY.sg[k],$df(k)}function $dfc(e){if(--_$HY.sc[e]<=0){delete _$HY.sc[e],_$HY.sg&&_$HY.sg[e]?$dfg(e):!(_$HY.sd&&_$HY.sd[e])&&$df(e);_$HY.sd&&delete _$HY.sd[e]}}function $dfj(e,i,n){for(i=0;i<e.length;i++)if(_$HY.sc&&_$HY.sc[e[i]]>0){for(n=0;n<e.length;n++)(_$HY.sg=_$HY.sg||{})[e[n]]=e;return}for(i=0;i<e.length;i++)$df(e[i])}`;
|
|
228
246
|
function renderToString(code, options = {}) {
|
|
229
247
|
const {
|
|
230
248
|
renderId = "",
|
|
@@ -275,7 +293,7 @@ function renderToString(code, options = {}) {
|
|
|
275
293
|
tracking.emittedAssets.add(value);
|
|
276
294
|
}
|
|
277
295
|
};
|
|
278
|
-
applyAssetTracking(sharedConfig.context, tracking, manifest);
|
|
296
|
+
applyAssetTracking(sharedConfig.context, tracking, manifest, noScripts);
|
|
279
297
|
registerEntryAssets(manifest);
|
|
280
298
|
let html = createRoot(d => {
|
|
281
299
|
setTimeout(d);
|
|
@@ -286,11 +304,8 @@ function renderToString(code, options = {}) {
|
|
|
286
304
|
serializeFragmentAssets("", tracking.boundaryModules, sharedConfig.context);
|
|
287
305
|
sharedConfig.context.noHydrate = true;
|
|
288
306
|
serializer.close();
|
|
289
|
-
|
|
290
|
-
html
|
|
291
|
-
html = injectInlineStyles(tracking.inlineStyles, html, nonce);
|
|
292
|
-
if (scripts.length) html = injectScripts(html, scripts, options.nonce);
|
|
293
|
-
return html;
|
|
307
|
+
const assetsHtml = resolveAssetsHtml(sharedConfig.context.assets);
|
|
308
|
+
return assembleDocument(html, assetsHtml, tracking.emittedAssets, tracking.inlineStyles, scripts.length ? scripts : "", nonce);
|
|
294
309
|
}
|
|
295
310
|
function renderToStream(code, options = {}) {
|
|
296
311
|
let {
|
|
@@ -363,11 +378,7 @@ function renderToStream(code, options = {}) {
|
|
|
363
378
|
}
|
|
364
379
|
},
|
|
365
380
|
shell(shellHtml, meta) {
|
|
366
|
-
shellHtml
|
|
367
|
-
shellHtml = injectPreloadLinks(meta.preloads, shellHtml);
|
|
368
|
-
shellHtml = injectInlineStyles(meta.inlineStyles, shellHtml, nonce);
|
|
369
|
-
if (meta.tasks.length) shellHtml = injectScripts(shellHtml, meta.tasks, nonce);
|
|
370
|
-
buffer.write(shellHtml);
|
|
381
|
+
buffer.write(assembleDocument(shellHtml, meta.assets, meta.preloads, meta.inlineStyles, meta.tasks.length ? meta.tasks : "", nonce));
|
|
371
382
|
},
|
|
372
383
|
...options.sink
|
|
373
384
|
};
|
|
@@ -570,7 +581,7 @@ function renderToStream(code, options = {}) {
|
|
|
570
581
|
});
|
|
571
582
|
}
|
|
572
583
|
};
|
|
573
|
-
applyAssetTracking(context, tracking, manifest);
|
|
584
|
+
applyAssetTracking(context, tracking, manifest, noScripts);
|
|
574
585
|
registerEntryAssets(manifest);
|
|
575
586
|
let html = createRoot(d => {
|
|
576
587
|
dispose = d;
|
|
@@ -1112,28 +1123,36 @@ function resolveAssetsHtml(assets) {
|
|
|
1112
1123
|
for (let i = 0, len = assets.length; i < len; i++) out += assets[i]();
|
|
1113
1124
|
return out;
|
|
1114
1125
|
}
|
|
1115
|
-
function
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1126
|
+
function assembleDocument(html, assetsHtml, emittedAssets, inlineStyles, scripts, nonce) {
|
|
1127
|
+
const scriptTag = scripts ? `<script${nonce ? ` nonce="${nonce}"` : ""}>${scripts}</script>` : "";
|
|
1128
|
+
if (!assetsHtml && !(emittedAssets && emittedAssets.size) && !(inlineStyles && inlineStyles.size)) {
|
|
1129
|
+
if (!scriptTag) return html;
|
|
1130
|
+
const xs = html.indexOf("<!--xs-->");
|
|
1131
|
+
return xs === -1 ? html + scriptTag : html.slice(0, xs) + scriptTag + html.slice(xs);
|
|
1132
|
+
}
|
|
1133
|
+
const headIdx = html.indexOf("</head>");
|
|
1134
|
+
if (headIdx === -1) {
|
|
1135
|
+
if (!scriptTag) return html;
|
|
1136
|
+
const xs = html.indexOf("<!--xs-->");
|
|
1137
|
+
return xs === -1 ? html + scriptTag : html.slice(0, xs) + scriptTag + html.slice(xs);
|
|
1138
|
+
}
|
|
1139
|
+
let head = assetsHtml || "";
|
|
1140
|
+
if (emittedAssets && emittedAssets.size) {
|
|
1141
|
+
for (const url of emittedAssets) {
|
|
1142
|
+
head += url.endsWith(".css") ? `<link rel="stylesheet" href="${url}">` : `<link rel="modulepreload" href="${url}">`;
|
|
1143
|
+
}
|
|
1144
|
+
}
|
|
1145
|
+
if (inlineStyles && inlineStyles.size) {
|
|
1146
|
+
for (const entry of inlineStyles.values()) {
|
|
1147
|
+
if (entry.emitted) continue;
|
|
1148
|
+
entry.emitted = true;
|
|
1149
|
+
head += renderInlineStyle(entry, nonce);
|
|
1132
1150
|
}
|
|
1133
1151
|
}
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
return html.slice(0,
|
|
1152
|
+
if (!scriptTag) return html.slice(0, headIdx) + head + html.slice(headIdx);
|
|
1153
|
+
const xsIdx = html.indexOf("<!--xs-->");
|
|
1154
|
+
if (xsIdx === -1) return html.slice(0, headIdx) + head + html.slice(headIdx) + scriptTag;
|
|
1155
|
+
return xsIdx < headIdx ? html.slice(0, xsIdx) + scriptTag + html.slice(xsIdx, headIdx) + head + html.slice(headIdx) : html.slice(0, headIdx) + head + html.slice(headIdx, xsIdx) + scriptTag + html.slice(xsIdx);
|
|
1137
1156
|
}
|
|
1138
1157
|
function serializeFragmentAssets(key, boundaryModules, context) {
|
|
1139
1158
|
const map = boundaryModules.get(key);
|
|
@@ -1185,26 +1204,6 @@ function renderInlineStyle(entry, nonce) {
|
|
|
1185
1204
|
}
|
|
1186
1205
|
return `<style${nonce ? ` nonce="${nonce}"` : ""} data-asset="${escape(entry.id, true)}"${attrs}>${escapeStyleContent(entry.content)}</style>`;
|
|
1187
1206
|
}
|
|
1188
|
-
function injectInlineStyles(inlineStyles, html, nonce) {
|
|
1189
|
-
if (!inlineStyles.size) return html;
|
|
1190
|
-
const index = html.indexOf("</head>");
|
|
1191
|
-
if (index === -1) return html;
|
|
1192
|
-
let out = "";
|
|
1193
|
-
for (const entry of inlineStyles.values()) {
|
|
1194
|
-
if (entry.emitted) continue;
|
|
1195
|
-
entry.emitted = true;
|
|
1196
|
-
out += renderInlineStyle(entry, nonce);
|
|
1197
|
-
}
|
|
1198
|
-
return out ? html.slice(0, index) + out + html.slice(index) : html;
|
|
1199
|
-
}
|
|
1200
|
-
function injectScripts(html, scripts, nonce) {
|
|
1201
|
-
const tag = `<script${nonce ? ` nonce="${nonce}"` : ""}>${scripts}</script>`;
|
|
1202
|
-
const index = html.indexOf("<!--xs-->");
|
|
1203
|
-
if (index > -1) {
|
|
1204
|
-
return html.slice(0, index) + tag + html.slice(index);
|
|
1205
|
-
}
|
|
1206
|
-
return html + tag;
|
|
1207
|
-
}
|
|
1208
1207
|
function waitForFragments(registry, key) {
|
|
1209
1208
|
for (const k of [...registry.keys()].reverse()) {
|
|
1210
1209
|
if (key.startsWith(k)) return k;
|
|
@@ -1360,13 +1359,14 @@ const HREF = Symbol.for("solid.Href");
|
|
|
1360
1359
|
function isHref(value) {
|
|
1361
1360
|
return !!(value && (typeof value === "object" || typeof value === "function") && value[HREF]);
|
|
1362
1361
|
}
|
|
1362
|
+
const REVALIDATE_HEADER = "X-Revalidate";
|
|
1363
1363
|
function initWithRevalidate(init) {
|
|
1364
1364
|
const {
|
|
1365
1365
|
revalidate,
|
|
1366
1366
|
...responseInit
|
|
1367
1367
|
} = init;
|
|
1368
1368
|
const headers = new Headers(responseInit.headers);
|
|
1369
|
-
revalidate !== undefined && headers.set(
|
|
1369
|
+
revalidate !== undefined && headers.set(REVALIDATE_HEADER, revalidate.toString());
|
|
1370
1370
|
return {
|
|
1371
1371
|
responseInit,
|
|
1372
1372
|
headers
|
|
@@ -1416,33 +1416,12 @@ function respond(value, init = {}) {
|
|
|
1416
1416
|
const isServer = true;
|
|
1417
1417
|
const isDev = false;
|
|
1418
1418
|
function dynamic(source) {
|
|
1419
|
-
const
|
|
1420
|
-
|
|
1419
|
+
const cached = createMemo(source, {
|
|
1420
|
+
serialize: false
|
|
1421
|
+
});
|
|
1421
1422
|
return props => {
|
|
1422
|
-
const comp = source();
|
|
1423
|
-
let p;
|
|
1424
|
-
let settled = false;
|
|
1425
|
-
let value;
|
|
1426
|
-
let error;
|
|
1427
|
-
if (comp && typeof comp.then === "function") {
|
|
1428
|
-
p = comp;
|
|
1429
|
-
p.then(v => {
|
|
1430
|
-
value = v;
|
|
1431
|
-
settled = true;
|
|
1432
|
-
}, err => {
|
|
1433
|
-
error = err;
|
|
1434
|
-
settled = true;
|
|
1435
|
-
});
|
|
1436
|
-
const ctx = sharedConfig.context;
|
|
1437
|
-
if (ctx?.async) ctx.block(p.then(() => {}, () => {}));
|
|
1438
|
-
}
|
|
1439
1423
|
return createMemo(() => {
|
|
1440
|
-
|
|
1441
|
-
if (p) {
|
|
1442
|
-
if (!settled) throw new NotReadyError(p);
|
|
1443
|
-
if (error) throw error;
|
|
1444
|
-
c = value;
|
|
1445
|
-
}
|
|
1424
|
+
const c = cached();
|
|
1446
1425
|
if (c) {
|
|
1447
1426
|
if (typeof c === "function") return c(props);
|
|
1448
1427
|
if (typeof c === "string") {
|
|
@@ -1464,4 +1443,4 @@ function Portal(props) {
|
|
|
1464
1443
|
return undefined;
|
|
1465
1444
|
}
|
|
1466
1445
|
|
|
1467
|
-
export { Assets, ChildProperties, DOMElements, DOMWithState, DelegatedEvents, Dynamic, HREF, HydrationScript, MathMLElements, Namespaces, Portal, RawTextElements, RequestContext, ResponseEnvelope, SVGElements, VoidElements, notSup as acquireAsset, notSup as addEvent, applyRef, notSup as assign, claimElement, claimElementTree, notSup as className, notSup as delegateEvents, dynamic, notSup as dynamicProperty, effect, escape, generateHydrationScript, getAssets, notSup as getDelegatedRoot, getHydrationKey, notSup as getNextElement, notSup as getNextMarker, notSup as getNextMatch, getRequestEvent, notSup as hydrate, notSup as insert, isDev, isHref, isResponseEnvelope, isServer, memo, redirect, notSup as ref, notSup as registerDelegatedContainer, notSup as registerDelegatedRoot, registerElementClaim, reload, notSup as render, renderToStream, renderToString, renderToStringAsync, respond, notSup as runHydrationEvents, notSup as setAttribute, notSup as setAttributeNS, notSup as setProperty, notSup as setStyleProperty, notSup as spread, ssr, ssrAttribute, ssrClassName, ssrElement, ssrGroup, ssrHydrationKey, ssrStyle, ssrStyleProperty, notSup as style, notSup as template, notSup as unregisterDelegatedContainer, notSup as unregisterDelegatedRoot, useAssets };
|
|
1446
|
+
export { Assets, ChildProperties, DOMElements, DOMWithState, DelegatedEvents, Dynamic, HREF, HydrationScript, MathMLElements, Namespaces, Portal, REVALIDATE_HEADER, RawTextElements, RequestContext, ResponseEnvelope, SVGElements, VoidElements, notSup as acquireAsset, notSup as addEvent, applyRef, notSup as assign, claimElement, claimElementTree, notSup as className, notSup as delegateEvents, dynamic, notSup as dynamicProperty, effect, escape, generateHydrationScript, getAssets, notSup as getDelegatedRoot, getHydrationKey, notSup as getNextElement, notSup as getNextMarker, notSup as getNextMatch, getRequestEvent, notSup as hydrate, notSup as insert, isDev, isHref, isResponseEnvelope, isServer, memo, redirect, notSup as ref, notSup as registerDelegatedContainer, notSup as registerDelegatedRoot, registerElementClaim, reload, notSup as render, renderToStream, renderToString, renderToStringAsync, respond, notSup as runHydrationEvents, notSup as setAttribute, notSup as setAttributeNS, notSup as setProperty, notSup as setStyleProperty, notSup as spread, ssr, ssrAttribute, ssrClassName, ssrElement, ssrGroup, ssrHydrationKey, ssrStyle, ssrStyleProperty, notSup as style, notSup as template, notSup as unregisterDelegatedContainer, notSup as unregisterDelegatedRoot, useAssets };
|
package/dist/web.cjs
CHANGED
|
@@ -1118,13 +1118,14 @@ const HREF = Symbol.for("solid.Href");
|
|
|
1118
1118
|
function isHref(value) {
|
|
1119
1119
|
return !!(value && (typeof value === "object" || typeof value === "function") && value[HREF]);
|
|
1120
1120
|
}
|
|
1121
|
+
const REVALIDATE_HEADER = "X-Revalidate";
|
|
1121
1122
|
function initWithRevalidate(init) {
|
|
1122
1123
|
const {
|
|
1123
1124
|
revalidate,
|
|
1124
1125
|
...responseInit
|
|
1125
1126
|
} = init;
|
|
1126
1127
|
const headers = new Headers(responseInit.headers);
|
|
1127
|
-
revalidate !== undefined && headers.set(
|
|
1128
|
+
revalidate !== undefined && headers.set(REVALIDATE_HEADER, revalidate.toString());
|
|
1128
1129
|
return {
|
|
1129
1130
|
responseInit,
|
|
1130
1131
|
headers
|
|
@@ -1332,6 +1333,7 @@ exports.HydrationScript = voidFn;
|
|
|
1332
1333
|
exports.MathMLElements = MathMLElements;
|
|
1333
1334
|
exports.Namespaces = Namespaces;
|
|
1334
1335
|
exports.Portal = Portal;
|
|
1336
|
+
exports.REVALIDATE_HEADER = REVALIDATE_HEADER;
|
|
1335
1337
|
exports.RawTextElements = RawTextElements;
|
|
1336
1338
|
exports.RequestContext = RequestContext;
|
|
1337
1339
|
exports.ResponseEnvelope = ResponseEnvelope;
|
package/dist/web.js
CHANGED
|
@@ -1117,13 +1117,14 @@ const HREF = Symbol.for("solid.Href");
|
|
|
1117
1117
|
function isHref(value) {
|
|
1118
1118
|
return !!(value && (typeof value === "object" || typeof value === "function") && value[HREF]);
|
|
1119
1119
|
}
|
|
1120
|
+
const REVALIDATE_HEADER = "X-Revalidate";
|
|
1120
1121
|
function initWithRevalidate(init) {
|
|
1121
1122
|
const {
|
|
1122
1123
|
revalidate,
|
|
1123
1124
|
...responseInit
|
|
1124
1125
|
} = init;
|
|
1125
1126
|
const headers = new Headers(responseInit.headers);
|
|
1126
|
-
revalidate !== undefined && headers.set(
|
|
1127
|
+
revalidate !== undefined && headers.set(REVALIDATE_HEADER, revalidate.toString());
|
|
1127
1128
|
return {
|
|
1128
1129
|
responseInit,
|
|
1129
1130
|
headers
|
|
@@ -1268,4 +1269,4 @@ function createElement(tagName, is = undefined) {
|
|
|
1268
1269
|
});
|
|
1269
1270
|
}
|
|
1270
1271
|
|
|
1271
|
-
export { voidFn as Assets, ChildProperties, DOMElements, DOMWithState, DelegatedEvents, Dynamic, HREF, voidFn as HydrationScript, MathMLElements, Namespaces, Portal, RawTextElements, RequestContext, ResponseEnvelope, SVGElements, VoidElements, acquireAsset, addEvent, applyRef, assign, claimElement, claimElementTree, className, delegateEvents, dynamic, dynamicProperty, effect, escape, voidFn as generateHydrationScript, voidFn as getAssets, getDelegatedRoot, getFirstChild, getHydrationKey, getNextElement, getNextMarker, getNextMatch, getNextSibling, voidFn as getRequestEvent, hydrate, insert, installHydrationRuntime, isDev, isHref, isResponseEnvelope, isServer, memo, mergeProps, redirect, ref, registerDelegatedContainer, registerDelegatedRoot, registerElementClaim, reload, render, renderToStream, renderToString, renderToStringAsync, resolveSSRNode, respond, runHydrationEvents, scope, setAttribute, setAttributeNS, setProperty, setStyleProperty, spread, ssr, ssrAttribute, ssrClassList, ssrElement, ssrHydrationKey, ssrStyle, style, template, unregisterDelegatedContainer, unregisterDelegatedRoot, voidFn as useAssets };
|
|
1272
|
+
export { voidFn as Assets, ChildProperties, DOMElements, DOMWithState, DelegatedEvents, Dynamic, HREF, voidFn as HydrationScript, MathMLElements, Namespaces, Portal, REVALIDATE_HEADER, RawTextElements, RequestContext, ResponseEnvelope, SVGElements, VoidElements, acquireAsset, addEvent, applyRef, assign, claimElement, claimElementTree, className, delegateEvents, dynamic, dynamicProperty, effect, escape, voidFn as generateHydrationScript, voidFn as getAssets, getDelegatedRoot, getFirstChild, getHydrationKey, getNextElement, getNextMarker, getNextMatch, getNextSibling, voidFn as getRequestEvent, hydrate, insert, installHydrationRuntime, isDev, isHref, isResponseEnvelope, isServer, memo, mergeProps, redirect, ref, registerDelegatedContainer, registerDelegatedRoot, registerElementClaim, reload, render, renderToStream, renderToString, renderToStringAsync, resolveSSRNode, respond, runHydrationEvents, scope, setAttribute, setAttributeNS, setProperty, setStyleProperty, spread, ssr, ssrAttribute, ssrClassList, ssrElement, ssrHydrationKey, ssrStyle, style, template, unregisterDelegatedContainer, unregisterDelegatedRoot, voidFn as useAssets };
|