@reckona/mreact-router 0.0.202 → 0.0.203

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.
Files changed (60) hide show
  1. package/README.md +5 -2
  2. package/dist/actions.d.ts +2 -3
  3. package/dist/actions.d.ts.map +1 -1
  4. package/dist/actions.js +61 -41
  5. package/dist/actions.js.map +1 -1
  6. package/dist/adapters/cloudflare.d.ts +3 -1
  7. package/dist/adapters/cloudflare.d.ts.map +1 -1
  8. package/dist/adapters/cloudflare.js +26 -10
  9. package/dist/adapters/cloudflare.js.map +1 -1
  10. package/dist/build.d.ts +3 -1
  11. package/dist/build.d.ts.map +1 -1
  12. package/dist/build.js +98 -12
  13. package/dist/build.js.map +1 -1
  14. package/dist/cache.d.ts +1 -1
  15. package/dist/cache.d.ts.map +1 -1
  16. package/dist/cache.js +5 -4
  17. package/dist/cache.js.map +1 -1
  18. package/dist/cli-options.d.ts +3 -0
  19. package/dist/cli-options.d.ts.map +1 -1
  20. package/dist/cli-options.js +10 -2
  21. package/dist/cli-options.js.map +1 -1
  22. package/dist/cli.js +2 -2
  23. package/dist/cli.js.map +1 -1
  24. package/dist/client.d.ts +5 -0
  25. package/dist/client.d.ts.map +1 -1
  26. package/dist/client.js +11 -2
  27. package/dist/client.js.map +1 -1
  28. package/dist/navigation-marker.d.ts +2 -0
  29. package/dist/navigation-marker.d.ts.map +1 -0
  30. package/dist/navigation-marker.js +294 -0
  31. package/dist/navigation-marker.js.map +1 -0
  32. package/dist/navigation-runtime.d.ts +1 -1
  33. package/dist/navigation-runtime.d.ts.map +1 -1
  34. package/dist/navigation-runtime.js +1 -1
  35. package/dist/navigation-runtime.js.map +1 -1
  36. package/dist/prerender-entry.d.ts +3 -1
  37. package/dist/prerender-entry.d.ts.map +1 -1
  38. package/dist/prerender-entry.js +61 -3
  39. package/dist/prerender-entry.js.map +1 -1
  40. package/dist/render.d.ts +7 -1
  41. package/dist/render.d.ts.map +1 -1
  42. package/dist/render.js +51 -23
  43. package/dist/render.js.map +1 -1
  44. package/dist/serve.d.ts +3 -0
  45. package/dist/serve.d.ts.map +1 -1
  46. package/dist/serve.js +54 -30
  47. package/dist/serve.js.map +1 -1
  48. package/package.json +11 -11
  49. package/src/actions.ts +72 -56
  50. package/src/adapters/cloudflare.ts +40 -10
  51. package/src/build.ts +107 -10
  52. package/src/cache.ts +10 -4
  53. package/src/cli-options.ts +15 -2
  54. package/src/cli.ts +2 -1
  55. package/src/client.ts +15 -2
  56. package/src/navigation-marker.ts +353 -0
  57. package/src/navigation-runtime.ts +1 -0
  58. package/src/prerender-entry.ts +78 -5
  59. package/src/render.ts +80 -24
  60. package/src/serve.ts +71 -34
@@ -0,0 +1,2 @@
1
+ export declare function hasNavigationRouteMarker(html: string): boolean;
2
+ //# sourceMappingURL=navigation-marker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation-marker.d.ts","sourceRoot":"","sources":["../src/navigation-marker.ts"],"names":[],"mappings":"AAoBA,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAmD9D"}
@@ -0,0 +1,294 @@
1
+ import { routeHydrationContract } from "./route-hydration-contract.js";
2
+ const markerAttribute = routeHydrationContract.routeMarkerAttribute;
3
+ const rawTextElementNames = new Set([
4
+ "iframe",
5
+ "noembed",
6
+ "noframes",
7
+ "noscript",
8
+ "style",
9
+ "textarea",
10
+ "title",
11
+ "xmp",
12
+ ]);
13
+ export function hasNavigationRouteMarker(html) {
14
+ let cursor = 0;
15
+ while (cursor < html.length) {
16
+ const openingBracket = html.indexOf("<", cursor);
17
+ if (openingBracket < 0) {
18
+ return false;
19
+ }
20
+ if (html.startsWith("<!--", openingBracket)) {
21
+ cursor = skipComment(html, openingBracket + 4);
22
+ continue;
23
+ }
24
+ if (html.startsWith("<![CDATA[", openingBracket)) {
25
+ cursor = skipCdataSection(html, openingBracket + 9);
26
+ continue;
27
+ }
28
+ const discriminator = html[openingBracket + 1];
29
+ if (discriminator === "!" || discriminator === "?" || discriminator === "/") {
30
+ cursor = skipTagTail(html, openingBracket + 2);
31
+ continue;
32
+ }
33
+ if (!isAsciiLetter(discriminator)) {
34
+ cursor = openingBracket + 1;
35
+ continue;
36
+ }
37
+ const tag = parseStartTag(html, openingBracket);
38
+ if (tag === undefined) {
39
+ cursor = openingBracket + 1;
40
+ continue;
41
+ }
42
+ if (tag.hasMarker) {
43
+ return true;
44
+ }
45
+ if (tag.name === "plaintext") {
46
+ return false;
47
+ }
48
+ cursor =
49
+ tag.name === "script"
50
+ ? skipScriptElement(html, tag.end)
51
+ : rawTextElementNames.has(tag.name)
52
+ ? skipRawTextElement(html, tag.end, tag.name)
53
+ : tag.end;
54
+ }
55
+ return false;
56
+ }
57
+ function parseStartTag(html, openingBracket) {
58
+ let cursor = openingBracket + 1;
59
+ const nameStart = cursor;
60
+ while (cursor < html.length && !isTagNameTerminator(html[cursor])) {
61
+ if (isForbiddenTagNameCharacter(html[cursor])) {
62
+ return invalidStartTag(html, cursor, "");
63
+ }
64
+ cursor += 1;
65
+ }
66
+ if (cursor === nameStart) {
67
+ return undefined;
68
+ }
69
+ const name = html.slice(nameStart, cursor).toLowerCase();
70
+ let markerValueIsNonEmpty;
71
+ for (;;) {
72
+ cursor = skipAsciiWhitespace(html, cursor);
73
+ if (cursor >= html.length) {
74
+ return { end: html.length, hasMarker: false, name };
75
+ }
76
+ if (html[cursor] === ">") {
77
+ return { end: cursor + 1, hasMarker: markerValueIsNonEmpty === true, name };
78
+ }
79
+ if (html[cursor] === "/" && html[cursor + 1] === ">") {
80
+ return { end: cursor + 2, hasMarker: markerValueIsNonEmpty === true, name };
81
+ }
82
+ if (html[cursor] === "/") {
83
+ return invalidStartTag(html, cursor, name);
84
+ }
85
+ const attributeNameStart = cursor;
86
+ while (cursor < html.length && !isAttributeNameTerminator(html[cursor])) {
87
+ if (isForbiddenAttributeNameCharacter(html[cursor])) {
88
+ return invalidStartTag(html, cursor, name);
89
+ }
90
+ cursor += 1;
91
+ }
92
+ if (cursor === attributeNameStart) {
93
+ return invalidStartTag(html, cursor, name);
94
+ }
95
+ const attributeName = html.slice(attributeNameStart, cursor).toLowerCase();
96
+ cursor = skipAsciiWhitespace(html, cursor);
97
+ let valueIsNonEmpty = false;
98
+ if (html[cursor] === "=") {
99
+ cursor = skipAsciiWhitespace(html, cursor + 1);
100
+ const quote = html[cursor];
101
+ if (quote === '"' || quote === "'") {
102
+ const valueStart = cursor + 1;
103
+ const valueEnd = html.indexOf(quote, valueStart);
104
+ if (valueEnd < 0) {
105
+ return { end: html.length, hasMarker: false, name };
106
+ }
107
+ valueIsNonEmpty = valueEnd > valueStart;
108
+ cursor = valueEnd + 1;
109
+ }
110
+ else {
111
+ const valueStart = cursor;
112
+ while (cursor < html.length && !isUnquotedValueTerminator(html[cursor])) {
113
+ if (isForbiddenUnquotedValueCharacter(html[cursor])) {
114
+ return invalidStartTag(html, cursor, name);
115
+ }
116
+ cursor += 1;
117
+ }
118
+ if (cursor === valueStart) {
119
+ return invalidStartTag(html, cursor, name);
120
+ }
121
+ valueIsNonEmpty = true;
122
+ }
123
+ }
124
+ if (attributeName === markerAttribute && markerValueIsNonEmpty === undefined) {
125
+ markerValueIsNonEmpty = valueIsNonEmpty;
126
+ }
127
+ }
128
+ }
129
+ function invalidStartTag(html, cursor, name) {
130
+ return { end: skipTagTail(html, cursor), hasMarker: false, name };
131
+ }
132
+ function skipComment(html, cursor) {
133
+ const standardEnd = html.indexOf("-->", cursor);
134
+ const abruptEnd = html.indexOf("--!>", cursor);
135
+ const end = standardEnd < 0 ? abruptEnd : abruptEnd < 0 ? standardEnd : Math.min(standardEnd, abruptEnd);
136
+ return end < 0 ? html.length : end + (end === abruptEnd ? 4 : 3);
137
+ }
138
+ function skipCdataSection(html, cursor) {
139
+ const end = html.indexOf("]]>", cursor);
140
+ return end < 0 ? html.length : end + 3;
141
+ }
142
+ function skipTagTail(html, cursor) {
143
+ let quote;
144
+ while (cursor < html.length) {
145
+ const character = html[cursor];
146
+ if (quote !== undefined) {
147
+ if (character === quote) {
148
+ quote = undefined;
149
+ }
150
+ }
151
+ else if (character === '"' || character === "'") {
152
+ quote = character;
153
+ }
154
+ else if (character === ">") {
155
+ return cursor + 1;
156
+ }
157
+ cursor += 1;
158
+ }
159
+ return html.length;
160
+ }
161
+ function skipRawTextElement(html, cursor, name) {
162
+ const closingPrefix = `</${name}`;
163
+ for (;;) {
164
+ const closingStart = indexOfAsciiCaseInsensitive(html, closingPrefix, cursor);
165
+ if (closingStart < 0) {
166
+ return html.length;
167
+ }
168
+ const delimiter = html[closingStart + closingPrefix.length];
169
+ if (delimiter === ">" || delimiter === "/" || isAsciiWhitespace(delimiter)) {
170
+ return skipTagTail(html, closingStart + closingPrefix.length);
171
+ }
172
+ cursor = closingStart + 2;
173
+ }
174
+ }
175
+ function skipScriptElement(html, cursor) {
176
+ let state = "data";
177
+ while (cursor < html.length) {
178
+ if (state === "data" && html.startsWith("<!--", cursor)) {
179
+ state = "escaped";
180
+ cursor += 4;
181
+ continue;
182
+ }
183
+ if (state !== "data" && html.startsWith("-->", cursor)) {
184
+ state = "data";
185
+ cursor += 3;
186
+ continue;
187
+ }
188
+ if (html[cursor] === "<") {
189
+ if (isScriptTagAt(html, cursor, true)) {
190
+ if (state === "double-escaped") {
191
+ state = "escaped";
192
+ cursor += 8;
193
+ continue;
194
+ }
195
+ return skipTagTail(html, cursor + 8);
196
+ }
197
+ if (state === "escaped" && isScriptTagAt(html, cursor, false)) {
198
+ state = "double-escaped";
199
+ cursor += 7;
200
+ continue;
201
+ }
202
+ }
203
+ cursor += 1;
204
+ }
205
+ return html.length;
206
+ }
207
+ function isScriptTagAt(html, cursor, closing) {
208
+ const prefix = closing ? "</script" : "<script";
209
+ if (!matchesAsciiCaseInsensitive(html, prefix, cursor)) {
210
+ return false;
211
+ }
212
+ const delimiter = html[cursor + prefix.length];
213
+ return delimiter === ">" || delimiter === "/" || isAsciiWhitespace(delimiter);
214
+ }
215
+ function matchesAsciiCaseInsensitive(html, needle, start) {
216
+ if (start + needle.length > html.length) {
217
+ return false;
218
+ }
219
+ for (let offset = 0; offset < needle.length; offset += 1) {
220
+ if (html.charAt(start + offset).toLowerCase() !== needle.charAt(offset)) {
221
+ return false;
222
+ }
223
+ }
224
+ return true;
225
+ }
226
+ function indexOfAsciiCaseInsensitive(html, needle, start) {
227
+ const lastStart = html.length - needle.length;
228
+ for (let index = start; index <= lastStart; index += 1) {
229
+ let offset = 0;
230
+ while (offset < needle.length &&
231
+ html.charAt(index + offset).toLowerCase() === needle.charAt(offset)) {
232
+ offset += 1;
233
+ }
234
+ if (offset === needle.length) {
235
+ return index;
236
+ }
237
+ }
238
+ return -1;
239
+ }
240
+ function skipAsciiWhitespace(html, cursor) {
241
+ while (isAsciiWhitespace(html[cursor])) {
242
+ cursor += 1;
243
+ }
244
+ return cursor;
245
+ }
246
+ function isAsciiWhitespace(character) {
247
+ return (character === " " ||
248
+ character === "\t" ||
249
+ character === "\n" ||
250
+ character === "\f" ||
251
+ character === "\r");
252
+ }
253
+ function isAsciiLetter(character) {
254
+ if (character === undefined) {
255
+ return false;
256
+ }
257
+ const code = character.charCodeAt(0);
258
+ return (code >= 65 && code <= 90) || (code >= 97 && code <= 122);
259
+ }
260
+ function isTagNameTerminator(character) {
261
+ return (character === undefined ||
262
+ character === ">" ||
263
+ character === "/" ||
264
+ isAsciiWhitespace(character));
265
+ }
266
+ function isForbiddenTagNameCharacter(character) {
267
+ return (character === "\0" ||
268
+ character === '"' ||
269
+ character === "'" ||
270
+ character === "<" ||
271
+ character === "=");
272
+ }
273
+ function isAttributeNameTerminator(character) {
274
+ return (character === undefined ||
275
+ character === ">" ||
276
+ character === "/" ||
277
+ character === "=" ||
278
+ isAsciiWhitespace(character));
279
+ }
280
+ function isForbiddenAttributeNameCharacter(character) {
281
+ return character === "\0" || character === '"' || character === "'" || character === "<";
282
+ }
283
+ function isUnquotedValueTerminator(character) {
284
+ return character === undefined || character === ">" || isAsciiWhitespace(character);
285
+ }
286
+ function isForbiddenUnquotedValueCharacter(character) {
287
+ return (character === "\0" ||
288
+ character === '"' ||
289
+ character === "'" ||
290
+ character === "`" ||
291
+ character === "<" ||
292
+ character === "=");
293
+ }
294
+ //# sourceMappingURL=navigation-marker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation-marker.js","sourceRoot":"","sources":["../src/navigation-marker.ts"],"names":[],"mappings":"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","sourcesContent":["import { routeHydrationContract } from \"./route-hydration-contract.js\";\n\nconst markerAttribute = routeHydrationContract.routeMarkerAttribute;\nconst rawTextElementNames = new Set([\n \"iframe\",\n \"noembed\",\n \"noframes\",\n \"noscript\",\n \"style\",\n \"textarea\",\n \"title\",\n \"xmp\",\n]);\n\ninterface ParsedStartTag {\n end: number;\n hasMarker: boolean;\n name: string;\n}\n\nexport function hasNavigationRouteMarker(html: string): boolean {\n let cursor = 0;\n\n while (cursor < html.length) {\n const openingBracket = html.indexOf(\"<\", cursor);\n if (openingBracket < 0) {\n return false;\n }\n\n if (html.startsWith(\"<!--\", openingBracket)) {\n cursor = skipComment(html, openingBracket + 4);\n continue;\n }\n\n if (html.startsWith(\"<![CDATA[\", openingBracket)) {\n cursor = skipCdataSection(html, openingBracket + 9);\n continue;\n }\n\n const discriminator = html[openingBracket + 1];\n if (discriminator === \"!\" || discriminator === \"?\" || discriminator === \"/\") {\n cursor = skipTagTail(html, openingBracket + 2);\n continue;\n }\n if (!isAsciiLetter(discriminator)) {\n cursor = openingBracket + 1;\n continue;\n }\n\n const tag = parseStartTag(html, openingBracket);\n if (tag === undefined) {\n cursor = openingBracket + 1;\n continue;\n }\n if (tag.hasMarker) {\n return true;\n }\n\n if (tag.name === \"plaintext\") {\n return false;\n }\n\n cursor =\n tag.name === \"script\"\n ? skipScriptElement(html, tag.end)\n : rawTextElementNames.has(tag.name)\n ? skipRawTextElement(html, tag.end, tag.name)\n : tag.end;\n }\n\n return false;\n}\n\nfunction parseStartTag(html: string, openingBracket: number): ParsedStartTag | undefined {\n let cursor = openingBracket + 1;\n const nameStart = cursor;\n\n while (cursor < html.length && !isTagNameTerminator(html[cursor])) {\n if (isForbiddenTagNameCharacter(html[cursor])) {\n return invalidStartTag(html, cursor, \"\");\n }\n cursor += 1;\n }\n\n if (cursor === nameStart) {\n return undefined;\n }\n\n const name = html.slice(nameStart, cursor).toLowerCase();\n let markerValueIsNonEmpty: boolean | undefined;\n\n for (;;) {\n cursor = skipAsciiWhitespace(html, cursor);\n if (cursor >= html.length) {\n return { end: html.length, hasMarker: false, name };\n }\n if (html[cursor] === \">\") {\n return { end: cursor + 1, hasMarker: markerValueIsNonEmpty === true, name };\n }\n if (html[cursor] === \"/\" && html[cursor + 1] === \">\") {\n return { end: cursor + 2, hasMarker: markerValueIsNonEmpty === true, name };\n }\n if (html[cursor] === \"/\") {\n return invalidStartTag(html, cursor, name);\n }\n\n const attributeNameStart = cursor;\n while (cursor < html.length && !isAttributeNameTerminator(html[cursor])) {\n if (isForbiddenAttributeNameCharacter(html[cursor])) {\n return invalidStartTag(html, cursor, name);\n }\n cursor += 1;\n }\n if (cursor === attributeNameStart) {\n return invalidStartTag(html, cursor, name);\n }\n\n const attributeName = html.slice(attributeNameStart, cursor).toLowerCase();\n cursor = skipAsciiWhitespace(html, cursor);\n let valueIsNonEmpty = false;\n\n if (html[cursor] === \"=\") {\n cursor = skipAsciiWhitespace(html, cursor + 1);\n const quote = html[cursor];\n\n if (quote === '\"' || quote === \"'\") {\n const valueStart = cursor + 1;\n const valueEnd = html.indexOf(quote, valueStart);\n if (valueEnd < 0) {\n return { end: html.length, hasMarker: false, name };\n }\n valueIsNonEmpty = valueEnd > valueStart;\n cursor = valueEnd + 1;\n } else {\n const valueStart = cursor;\n while (cursor < html.length && !isUnquotedValueTerminator(html[cursor])) {\n if (isForbiddenUnquotedValueCharacter(html[cursor])) {\n return invalidStartTag(html, cursor, name);\n }\n cursor += 1;\n }\n if (cursor === valueStart) {\n return invalidStartTag(html, cursor, name);\n }\n valueIsNonEmpty = true;\n }\n }\n\n if (attributeName === markerAttribute && markerValueIsNonEmpty === undefined) {\n markerValueIsNonEmpty = valueIsNonEmpty;\n }\n }\n}\n\nfunction invalidStartTag(html: string, cursor: number, name: string): ParsedStartTag {\n return { end: skipTagTail(html, cursor), hasMarker: false, name };\n}\n\nfunction skipComment(html: string, cursor: number): number {\n const standardEnd = html.indexOf(\"-->\", cursor);\n const abruptEnd = html.indexOf(\"--!>\", cursor);\n const end =\n standardEnd < 0 ? abruptEnd : abruptEnd < 0 ? standardEnd : Math.min(standardEnd, abruptEnd);\n return end < 0 ? html.length : end + (end === abruptEnd ? 4 : 3);\n}\n\nfunction skipCdataSection(html: string, cursor: number): number {\n const end = html.indexOf(\"]]>\", cursor);\n return end < 0 ? html.length : end + 3;\n}\n\nfunction skipTagTail(html: string, cursor: number): number {\n let quote: '\"' | \"'\" | undefined;\n while (cursor < html.length) {\n const character = html[cursor];\n if (quote !== undefined) {\n if (character === quote) {\n quote = undefined;\n }\n } else if (character === '\"' || character === \"'\") {\n quote = character;\n } else if (character === \">\") {\n return cursor + 1;\n }\n cursor += 1;\n }\n return html.length;\n}\n\nfunction skipRawTextElement(html: string, cursor: number, name: string): number {\n const closingPrefix = `</${name}`;\n for (;;) {\n const closingStart = indexOfAsciiCaseInsensitive(html, closingPrefix, cursor);\n if (closingStart < 0) {\n return html.length;\n }\n const delimiter = html[closingStart + closingPrefix.length];\n if (delimiter === \">\" || delimiter === \"/\" || isAsciiWhitespace(delimiter)) {\n return skipTagTail(html, closingStart + closingPrefix.length);\n }\n cursor = closingStart + 2;\n }\n}\n\nfunction skipScriptElement(html: string, cursor: number): number {\n let state: \"data\" | \"double-escaped\" | \"escaped\" = \"data\";\n\n while (cursor < html.length) {\n if (state === \"data\" && html.startsWith(\"<!--\", cursor)) {\n state = \"escaped\";\n cursor += 4;\n continue;\n }\n\n if (state !== \"data\" && html.startsWith(\"-->\", cursor)) {\n state = \"data\";\n cursor += 3;\n continue;\n }\n\n if (html[cursor] === \"<\") {\n if (isScriptTagAt(html, cursor, true)) {\n if (state === \"double-escaped\") {\n state = \"escaped\";\n cursor += 8;\n continue;\n }\n return skipTagTail(html, cursor + 8);\n }\n\n if (state === \"escaped\" && isScriptTagAt(html, cursor, false)) {\n state = \"double-escaped\";\n cursor += 7;\n continue;\n }\n }\n\n cursor += 1;\n }\n\n return html.length;\n}\n\nfunction isScriptTagAt(html: string, cursor: number, closing: boolean): boolean {\n const prefix = closing ? \"</script\" : \"<script\";\n if (!matchesAsciiCaseInsensitive(html, prefix, cursor)) {\n return false;\n }\n const delimiter = html[cursor + prefix.length];\n return delimiter === \">\" || delimiter === \"/\" || isAsciiWhitespace(delimiter);\n}\n\nfunction matchesAsciiCaseInsensitive(html: string, needle: string, start: number): boolean {\n if (start + needle.length > html.length) {\n return false;\n }\n for (let offset = 0; offset < needle.length; offset += 1) {\n if (html.charAt(start + offset).toLowerCase() !== needle.charAt(offset)) {\n return false;\n }\n }\n return true;\n}\n\nfunction indexOfAsciiCaseInsensitive(html: string, needle: string, start: number): number {\n const lastStart = html.length - needle.length;\n for (let index = start; index <= lastStart; index += 1) {\n let offset = 0;\n while (\n offset < needle.length &&\n html.charAt(index + offset).toLowerCase() === needle.charAt(offset)\n ) {\n offset += 1;\n }\n if (offset === needle.length) {\n return index;\n }\n }\n return -1;\n}\n\nfunction skipAsciiWhitespace(html: string, cursor: number): number {\n while (isAsciiWhitespace(html[cursor])) {\n cursor += 1;\n }\n return cursor;\n}\n\nfunction isAsciiWhitespace(character: string | undefined): boolean {\n return (\n character === \" \" ||\n character === \"\\t\" ||\n character === \"\\n\" ||\n character === \"\\f\" ||\n character === \"\\r\"\n );\n}\n\nfunction isAsciiLetter(character: string | undefined): boolean {\n if (character === undefined) {\n return false;\n }\n const code = character.charCodeAt(0);\n return (code >= 65 && code <= 90) || (code >= 97 && code <= 122);\n}\n\nfunction isTagNameTerminator(character: string | undefined): boolean {\n return (\n character === undefined ||\n character === \">\" ||\n character === \"/\" ||\n isAsciiWhitespace(character)\n );\n}\n\nfunction isForbiddenTagNameCharacter(character: string | undefined): boolean {\n return (\n character === \"\\0\" ||\n character === '\"' ||\n character === \"'\" ||\n character === \"<\" ||\n character === \"=\"\n );\n}\n\nfunction isAttributeNameTerminator(character: string | undefined): boolean {\n return (\n character === undefined ||\n character === \">\" ||\n character === \"/\" ||\n character === \"=\" ||\n isAsciiWhitespace(character)\n );\n}\n\nfunction isForbiddenAttributeNameCharacter(character: string | undefined): boolean {\n return character === \"\\0\" || character === '\"' || character === \"'\" || character === \"<\";\n}\n\nfunction isUnquotedValueTerminator(character: string | undefined): boolean {\n return character === undefined || character === \">\" || isAsciiWhitespace(character);\n}\n\nfunction isForbiddenUnquotedValueCharacter(character: string | undefined): boolean {\n return (\n character === \"\\0\" ||\n character === '\"' ||\n character === \"'\" ||\n character === \"`\" ||\n character === \"<\" ||\n character === \"=\"\n );\n}\n"]}
@@ -1,2 +1,2 @@
1
- export { buildClientRouteBatchOutput, buildClientRouteBundle, buildClientRouteEntrySource, buildClientRouteOutput, buildNavigationRuntimeBundle, clientScriptForPath, hydrationMarkerParts, navigationRuntimeScriptForDev, routeIdForPath, withHydrationMarkers, withRouteMarkers, type BuildClientRouteBatchOutput, type BuildClientRouteBatchRouteOutput, type BuildClientRouteOutputOptions, } from "./client.js";
1
+ export { buildClientRouteBatchOutput, buildClientRouteBundle, buildClientRouteEntrySource, buildClientRouteOutput, buildNavigationRuntimeBundle, clientScriptForPath, hydrationMarkerParts, navigationRuntimeScriptForDev, routeMarkerParts, routeIdForPath, withHydrationMarkers, withRouteMarkers, type BuildClientRouteBatchOutput, type BuildClientRouteBatchRouteOutput, type BuildClientRouteOutputOptions, } from "./client.js";
2
2
  //# sourceMappingURL=navigation-runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"navigation-runtime.d.ts","sourceRoot":"","sources":["../src/navigation-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,EACtB,2BAA2B,EAC3B,sBAAsB,EACtB,4BAA4B,EAC5B,mBAAmB,EACnB,oBAAoB,EACpB,6BAA6B,EAC7B,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,KAAK,2BAA2B,EAChC,KAAK,gCAAgC,EACrC,KAAK,6BAA6B,GACnC,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"navigation-runtime.d.ts","sourceRoot":"","sources":["../src/navigation-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,EACtB,2BAA2B,EAC3B,sBAAsB,EACtB,4BAA4B,EAC5B,mBAAmB,EACnB,oBAAoB,EACpB,6BAA6B,EAC7B,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,KAAK,2BAA2B,EAChC,KAAK,gCAAgC,EACrC,KAAK,6BAA6B,GACnC,MAAM,aAAa,CAAC"}
@@ -1,2 +1,2 @@
1
- export { buildClientRouteBatchOutput, buildClientRouteBundle, buildClientRouteEntrySource, buildClientRouteOutput, buildNavigationRuntimeBundle, clientScriptForPath, hydrationMarkerParts, navigationRuntimeScriptForDev, routeIdForPath, withHydrationMarkers, withRouteMarkers, } from "./client.js";
1
+ export { buildClientRouteBatchOutput, buildClientRouteBundle, buildClientRouteEntrySource, buildClientRouteOutput, buildNavigationRuntimeBundle, clientScriptForPath, hydrationMarkerParts, navigationRuntimeScriptForDev, routeMarkerParts, routeIdForPath, withHydrationMarkers, withRouteMarkers, } from "./client.js";
2
2
  //# sourceMappingURL=navigation-runtime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"navigation-runtime.js","sourceRoot":"","sources":["../src/navigation-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,EACtB,2BAA2B,EAC3B,sBAAsB,EACtB,4BAA4B,EAC5B,mBAAmB,EACnB,oBAAoB,EACpB,6BAA6B,EAC7B,cAAc,EACd,oBAAoB,EACpB,gBAAgB,GAIjB,MAAM,aAAa,CAAC","sourcesContent":["export {\n buildClientRouteBatchOutput,\n buildClientRouteBundle,\n buildClientRouteEntrySource,\n buildClientRouteOutput,\n buildNavigationRuntimeBundle,\n clientScriptForPath,\n hydrationMarkerParts,\n navigationRuntimeScriptForDev,\n routeIdForPath,\n withHydrationMarkers,\n withRouteMarkers,\n type BuildClientRouteBatchOutput,\n type BuildClientRouteBatchRouteOutput,\n type BuildClientRouteOutputOptions,\n} from \"./client.js\";\n"]}
1
+ {"version":3,"file":"navigation-runtime.js","sourceRoot":"","sources":["../src/navigation-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,EACtB,2BAA2B,EAC3B,sBAAsB,EACtB,4BAA4B,EAC5B,mBAAmB,EACnB,oBAAoB,EACpB,6BAA6B,EAC7B,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,gBAAgB,GAIjB,MAAM,aAAa,CAAC","sourcesContent":["export {\n buildClientRouteBatchOutput,\n buildClientRouteBundle,\n buildClientRouteEntrySource,\n buildClientRouteOutput,\n buildNavigationRuntimeBundle,\n clientScriptForPath,\n hydrationMarkerParts,\n navigationRuntimeScriptForDev,\n routeMarkerParts,\n routeIdForPath,\n withHydrationMarkers,\n withRouteMarkers,\n type BuildClientRouteBatchOutput,\n type BuildClientRouteBatchRouteOutput,\n type BuildClientRouteOutputOptions,\n} from \"./client.js\";\n"]}
@@ -1,5 +1,7 @@
1
1
  import type { BuiltPrerenderedRoute } from "./build.js";
2
- export declare const PRERENDERED_ROUTE_SCHEMA_VERSION = 2;
2
+ export declare const PRERENDERED_ROUTE_SCHEMA_VERSION = 4;
3
3
  export declare function isCurrentPrerenderedRoute(value: unknown): value is BuiltPrerenderedRoute;
4
4
  export declare function isVisitorDependentResponse(response: Response): boolean;
5
+ export declare function storedPrerenderedRouteHeaders(headers: Headers): Record<string, string>;
6
+ export declare function replayedPrerenderedRouteHeaders(entry: BuiltPrerenderedRoute, request: Request): Headers;
5
7
  //# sourceMappingURL=prerender-entry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prerender-entry.d.ts","sourceRoot":"","sources":["../src/prerender-entry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAElD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,qBAAqB,CAgBxF;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAEtE"}
1
+ {"version":3,"file":"prerender-entry.d.ts","sourceRoot":"","sources":["../src/prerender-entry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGxD,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAElD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,qBAAqB,CAsBxF;AAkBD,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAEtE;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUtF;AAED,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,qBAAqB,EAC5B,OAAO,EAAE,OAAO,GACf,OAAO,CAYT"}
@@ -1,4 +1,5 @@
1
- export const PRERENDERED_ROUTE_SCHEMA_VERSION = 2;
1
+ import { hasNavigationRouteMarker } from "./navigation-marker.js";
2
+ export const PRERENDERED_ROUTE_SCHEMA_VERSION = 4;
2
3
  export function isCurrentPrerenderedRoute(value) {
3
4
  if (typeof value !== "object" || value === null || Array.isArray(value)) {
4
5
  return false;
@@ -7,15 +8,67 @@ export function isCurrentPrerenderedRoute(value) {
7
8
  return (entry.schemaVersion === PRERENDERED_ROUTE_SCHEMA_VERSION &&
8
9
  isStringRecord(entry.headers) &&
9
10
  isShareableHeaderRecord(entry.headers) &&
11
+ hasRequiredNavigationVary(entry.headers) &&
12
+ !hasStoredHstsHeader(entry.headers) &&
13
+ isCanonicalHstsHeader(entry.strictTransportSecurity) &&
10
14
  typeof entry.html === "string" &&
15
+ (entry.navigationHtml === undefined ||
16
+ (typeof entry.navigationHtml === "string" &&
17
+ hasNavigationRouteMarker(entry.navigationHtml))) &&
11
18
  typeof entry.status === "number" &&
12
19
  Number.isInteger(entry.status) &&
13
20
  entry.status >= 100 &&
14
21
  entry.status <= 599);
15
22
  }
23
+ function hasStoredHstsHeader(headers) {
24
+ try {
25
+ return new Headers(headers).has("strict-transport-security");
26
+ }
27
+ catch {
28
+ return true;
29
+ }
30
+ }
31
+ function isCanonicalHstsHeader(value) {
32
+ return (value === undefined ||
33
+ (typeof value === "string" &&
34
+ /^max-age=(?:0|[1-9][0-9]*)(?:; includeSubDomains)?(?:; preload)?$/.test(value)));
35
+ }
16
36
  export function isVisitorDependentResponse(response) {
17
37
  return isVisitorDependentHeaders(response.headers);
18
38
  }
39
+ export function storedPrerenderedRouteHeaders(headers) {
40
+ const stored = {};
41
+ headers.forEach((value, key) => {
42
+ if (key !== "strict-transport-security") {
43
+ stored[key] = value;
44
+ }
45
+ });
46
+ return stored;
47
+ }
48
+ export function replayedPrerenderedRouteHeaders(entry, request) {
49
+ const headers = new Headers(entry.headers);
50
+ if (!hasNavigationVary(headers)) {
51
+ headers.append("vary", "x-mreact-navigation");
52
+ }
53
+ if (entry.strictTransportSecurity !== undefined && request.url.startsWith("https://")) {
54
+ headers.set("strict-transport-security", entry.strictTransportSecurity);
55
+ }
56
+ return headers;
57
+ }
58
+ function hasRequiredNavigationVary(headers) {
59
+ try {
60
+ return hasNavigationVary(new Headers(headers));
61
+ }
62
+ catch {
63
+ return false;
64
+ }
65
+ }
66
+ function hasNavigationVary(headers) {
67
+ return (headers
68
+ .get("vary")
69
+ ?.split(",")
70
+ .some((value) => value.trim().toLowerCase() === "x-mreact-navigation") === true);
71
+ }
19
72
  function isShareableHeaderRecord(headers) {
20
73
  try {
21
74
  return !isVisitorDependentHeaders(new Headers(headers));
@@ -26,10 +79,15 @@ function isShareableHeaderRecord(headers) {
26
79
  }
27
80
  function isVisitorDependentHeaders(headers) {
28
81
  const cacheControl = headers.get("cache-control") ?? "";
29
- const forbidsSharedStorage = cacheControl.split(",").some((directive) => /^(?:private|no-cache|no-store)(?:=|$)/i.test(directive.trim()));
82
+ const vary = headers.get("vary");
83
+ const hasVisitorDependentVary = vary !== null &&
84
+ vary.split(",").some((value) => value.trim().toLowerCase() !== "x-mreact-navigation");
85
+ const forbidsSharedStorage = cacheControl
86
+ .split(",")
87
+ .some((directive) => /^(?:private|no-cache|no-store)(?:=|$)/i.test(directive.trim()));
30
88
  return (headers.get("x-mreact-cache")?.toUpperCase() === "DYNAMIC" ||
31
89
  headers.has("set-cookie") ||
32
- headers.has("vary") ||
90
+ hasVisitorDependentVary ||
33
91
  forbidsSharedStorage);
34
92
  }
35
93
  function isStringRecord(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"prerender-entry.js","sourceRoot":"","sources":["../src/prerender-entry.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAC;AAElD,MAAM,UAAU,yBAAyB,CAAC,KAAc;IACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAG,KAAuC,CAAC;IACtD,OAAO,CACL,KAAK,CAAC,aAAa,KAAK,gCAAgC;QACxD,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC;QAC7B,uBAAuB,CAAC,KAAK,CAAC,OAAO,CAAC;QACtC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;QAChC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;QAC9B,KAAK,CAAC,MAAM,IAAI,GAAG;QACnB,KAAK,CAAC,MAAM,IAAI,GAAG,CACpB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,QAAkB;IAC3D,OAAO,yBAAyB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,uBAAuB,CAAC,OAA+B;IAC9D,IAAI,CAAC;QACH,OAAO,CAAC,yBAAyB,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAAC,OAAgB;IACjD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IACxD,MAAM,oBAAoB,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CACtE,wCAAwC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAChE,CAAC;IAEF,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,WAAW,EAAE,KAAK,SAAS;QAC1D,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QACnB,oBAAoB,CACrB,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CACjE,CAAC;AACJ,CAAC","sourcesContent":["import type { BuiltPrerenderedRoute } from \"./build.js\";\n\nexport const PRERENDERED_ROUTE_SCHEMA_VERSION = 2;\n\nexport function isCurrentPrerenderedRoute(value: unknown): value is BuiltPrerenderedRoute {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n\n const entry = value as Partial<BuiltPrerenderedRoute>;\n return (\n entry.schemaVersion === PRERENDERED_ROUTE_SCHEMA_VERSION &&\n isStringRecord(entry.headers) &&\n isShareableHeaderRecord(entry.headers) &&\n typeof entry.html === \"string\" &&\n typeof entry.status === \"number\" &&\n Number.isInteger(entry.status) &&\n entry.status >= 100 &&\n entry.status <= 599\n );\n}\n\nexport function isVisitorDependentResponse(response: Response): boolean {\n return isVisitorDependentHeaders(response.headers);\n}\n\nfunction isShareableHeaderRecord(headers: Record<string, string>): boolean {\n try {\n return !isVisitorDependentHeaders(new Headers(headers));\n } catch {\n return false;\n }\n}\n\nfunction isVisitorDependentHeaders(headers: Headers): boolean {\n const cacheControl = headers.get(\"cache-control\") ?? \"\";\n const forbidsSharedStorage = cacheControl.split(\",\").some((directive) =>\n /^(?:private|no-cache|no-store)(?:=|$)/i.test(directive.trim()),\n );\n\n return (\n headers.get(\"x-mreact-cache\")?.toUpperCase() === \"DYNAMIC\" ||\n headers.has(\"set-cookie\") ||\n headers.has(\"vary\") ||\n forbidsSharedStorage\n );\n}\n\nfunction isStringRecord(value: unknown): value is Record<string, string> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n Object.values(value).every((entry) => typeof entry === \"string\")\n );\n}\n"]}
1
+ {"version":3,"file":"prerender-entry.js","sourceRoot":"","sources":["../src/prerender-entry.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BuiltPrerenderedRoute } from \"./build.js\";\nimport { hasNavigationRouteMarker } from \"./navigation-marker.js\";\n\nexport const PRERENDERED_ROUTE_SCHEMA_VERSION = 4;\n\nexport function isCurrentPrerenderedRoute(value: unknown): value is BuiltPrerenderedRoute {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n\n const entry = value as Partial<BuiltPrerenderedRoute>;\n return (\n entry.schemaVersion === PRERENDERED_ROUTE_SCHEMA_VERSION &&\n isStringRecord(entry.headers) &&\n isShareableHeaderRecord(entry.headers) &&\n hasRequiredNavigationVary(entry.headers) &&\n !hasStoredHstsHeader(entry.headers) &&\n isCanonicalHstsHeader(entry.strictTransportSecurity) &&\n typeof entry.html === \"string\" &&\n (entry.navigationHtml === undefined ||\n (typeof entry.navigationHtml === \"string\" &&\n hasNavigationRouteMarker(entry.navigationHtml))) &&\n typeof entry.status === \"number\" &&\n Number.isInteger(entry.status) &&\n entry.status >= 100 &&\n entry.status <= 599\n );\n}\n\nfunction hasStoredHstsHeader(headers: Record<string, string>): boolean {\n try {\n return new Headers(headers).has(\"strict-transport-security\");\n } catch {\n return true;\n }\n}\n\nfunction isCanonicalHstsHeader(value: unknown): value is string | undefined {\n return (\n value === undefined ||\n (typeof value === \"string\" &&\n /^max-age=(?:0|[1-9][0-9]*)(?:; includeSubDomains)?(?:; preload)?$/.test(value))\n );\n}\n\nexport function isVisitorDependentResponse(response: Response): boolean {\n return isVisitorDependentHeaders(response.headers);\n}\n\nexport function storedPrerenderedRouteHeaders(headers: Headers): Record<string, string> {\n const stored: Record<string, string> = {};\n\n headers.forEach((value, key) => {\n if (key !== \"strict-transport-security\") {\n stored[key] = value;\n }\n });\n\n return stored;\n}\n\nexport function replayedPrerenderedRouteHeaders(\n entry: BuiltPrerenderedRoute,\n request: Request,\n): Headers {\n const headers = new Headers(entry.headers);\n\n if (!hasNavigationVary(headers)) {\n headers.append(\"vary\", \"x-mreact-navigation\");\n }\n\n if (entry.strictTransportSecurity !== undefined && request.url.startsWith(\"https://\")) {\n headers.set(\"strict-transport-security\", entry.strictTransportSecurity);\n }\n\n return headers;\n}\n\nfunction hasRequiredNavigationVary(headers: Record<string, string>): boolean {\n try {\n return hasNavigationVary(new Headers(headers));\n } catch {\n return false;\n }\n}\n\nfunction hasNavigationVary(headers: Headers): boolean {\n return (\n headers\n .get(\"vary\")\n ?.split(\",\")\n .some((value) => value.trim().toLowerCase() === \"x-mreact-navigation\") === true\n );\n}\n\nfunction isShareableHeaderRecord(headers: Record<string, string>): boolean {\n try {\n return !isVisitorDependentHeaders(new Headers(headers));\n } catch {\n return false;\n }\n}\n\nfunction isVisitorDependentHeaders(headers: Headers): boolean {\n const cacheControl = headers.get(\"cache-control\") ?? \"\";\n const vary = headers.get(\"vary\");\n const hasVisitorDependentVary =\n vary !== null &&\n vary.split(\",\").some((value) => value.trim().toLowerCase() !== \"x-mreact-navigation\");\n const forbidsSharedStorage = cacheControl\n .split(\",\")\n .some((directive) => /^(?:private|no-cache|no-store)(?:=|$)/i.test(directive.trim()));\n\n return (\n headers.get(\"x-mreact-cache\")?.toUpperCase() === \"DYNAMIC\" ||\n headers.has(\"set-cookie\") ||\n hasVisitorDependentVary ||\n forbidsSharedStorage\n );\n}\n\nfunction isStringRecord(value: unknown): value is Record<string, string> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n Object.values(value).every((entry) => typeof entry === \"string\")\n );\n}\n"]}
package/dist/render.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { ServerOutputMode, TransformOutput } from "@reckona/mreact-shared/compiler-contract";
2
- import { type QueryClient } from "@reckona/mreact-query";
2
+ import { type DehydrateOptions, type QueryClient } from "@reckona/mreact-query";
3
3
  import { type ClientRouteInferenceCache } from "./client-route-inference.js";
4
4
  import type { AppRoute, MatchedRoute, RouteMatcher } from "./routes.js";
5
5
  import { type AppRouterServerActionOptions, type PreparedFormActionReference } from "./actions.js";
@@ -31,6 +31,7 @@ export interface RenderAppRequestOptions {
31
31
  clientStylesByFile?: ReadonlyMap<string, readonly string[]>;
32
32
  clientStyles?: ReadonlyMap<string, readonly string[]>;
33
33
  define?: UserConfig["define"] | undefined;
34
+ dehydrateOptions?: DehydrateOptions | undefined;
34
35
  env?: unknown;
35
36
  importPolicy?: AppRouterImportPolicy | undefined;
36
37
  instrumentation?: RouterInstrumentation | undefined;
@@ -69,6 +70,7 @@ export interface RenderAppRequestRuntimeOptions extends RenderAppRequestOptions
69
70
  */
70
71
  renderSignals?: {
71
72
  headerDependent: () => boolean;
73
+ strictTransportSecurity: () => string | undefined;
72
74
  } | undefined;
73
75
  serverRenderArtifactLoader?: AppRouterServerRenderArtifactLoader | undefined;
74
76
  }
@@ -125,6 +127,10 @@ export declare function resolveAppRouterMiddleware(options: {
125
127
  vitePlugins?: readonly PluginOption[] | undefined;
126
128
  }): Promise<AppRouterMiddlewareResult>;
127
129
  export declare function resolveAppRouterResponseHook(options: Pick<RenderAppRequestOptions, "appDir" | "define" | "devServerModuleCacheVersion" | "importPolicy" | "onResponse" | "serverModules" | "serverModuleCacheVersion" | "serverSourceFiles" | "vitePlugins">): Promise<AppRouterResponseHook | undefined>;
130
+ export declare function prerenderVariantMarkerParts(routePath: string): {
131
+ prefix: string;
132
+ suffix: string;
133
+ };
128
134
  export declare function bundleMiddlewareModuleCode(options: {
129
135
  appDir: string;
130
136
  code: string;
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}