lit-ui-router-ssr 0.1.0 → 0.2.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 CHANGED
@@ -22,6 +22,10 @@ imports the pre-1.0 renderer or re-derives the incantation.
22
22
  per page — so a template's `<ui-router>` descendants answer `context-request` and its `srefHref`
23
23
  attribute directives emit real hrefs. The render passes `deferHydration`, so every custom element
24
24
  on the page carries `defer-hydration` and renders nothing until the client's walk reaches it.
25
+ - **The hydration signature.** A page rendered from a template opens on a JSON data block,
26
+ `<script type="application/json" data-lit-ui-router-ssr>`, naming this package's version, the
27
+ state the router stood on, and that state's url parameter values. A page `renderShell` returns
28
+ as a string is written as-is, without one.
25
29
  - **The emit loop.** Verdict to file name, redirect to rules line, tally, warnings for paths that
26
30
  matched nothing.
27
31
  - **The host rules file.** `_redirects` by default, every generated line paired with and without a
@@ -45,7 +49,8 @@ yarn add lit-ui-router-ssr
45
49
 
46
50
  `lit-ui-router`, `ui-router-server`, `@lit-labs/ssr`, `@lit-labs/ssr-client`, `lit`, and
47
51
  `@uirouter/core` are peer dependencies. `@lit-labs/ssr` is the server half and `@lit-labs/ssr-client`
48
- the client half, so a bundle takes one or the other, never both.
52
+ the client half, so a bundle takes one or the other, never both. `@lit-labs/ssr-client` is optional:
53
+ install it when you import `lit-ui-router-ssr/client`.
49
54
 
50
55
  ## Quick Start
51
56
 
@@ -344,11 +349,20 @@ if (!release) render(page(router), root);
344
349
  `hydrateRoot()`. The walk commits `.uiRouter` onto `<ui-router>` and each `<ui-view>` re-seeks the
345
350
  router before its own first render, so every view finds the settled router rather than the
346
351
  placeholder it registered against. Nothing constrains when `lit-ui-router-ssr/register` is imported.
352
+ - **The signature decides first.** `hydrateRoot()` reads the container's hydration signature before
353
+ it touches the document, and returns `false` over an emptied container when there is none — a
354
+ cold client render, a dev server, a page from an earlier `prerender()`, a string `renderShell` —
355
+ or when it names another release line: below 1.0 a document adopts only on the client's own minor,
356
+ from 1.0 its own major. The development build warns on that skew, naming both versions, and on a
357
+ block no `lit-part` marker follows, which is what a comment-stripping minifier leaves. The emptied
358
+ container is what lets `render(page(router), root)` draw the page once. A container it adopts
359
+ keeps the block. `readHydrationSignature(container)` returns the parsed `HydrationSignature`, or
360
+ `null` when there is none or it does not parse to an object with a string `version`; only
361
+ `version` is typed, so narrow `state` and `params` before use.
347
362
  - **`hydrateRoot(container, value, options?)`** provides `adoptUiViewContext` under `container` with
348
363
  core's `provideContext()` and runs one `hydrate()` over `container`. It returns that provider's
349
- release function, or `false` when there is nothing to adopt — a cold client render, a dev server.
350
- Release it once the page has settled; a nested view wakes on its parent's own update, after this
351
- call returns.
364
+ release function, or `false` when there is nothing to adopt. Release it once the page has settled;
365
+ a nested view wakes on its parent's own update, after this call returns.
352
366
  - **One walk wakes the page.** A served `<ui-view>` sleeps under `defer-hydration` and renders
353
367
  nothing. Removing the attribute wakes it: it re-seeks its router, requests `adoptUiViewContext`
354
368
  and calls the adopter it gets, which adopts the nodes the view holds. A view the app detaches
@@ -382,8 +396,7 @@ if (!release) render(page(router), root);
382
396
  production as in development. `hydrateRoot()`'s `onAdopt(view, outcome, error)` option receives
383
397
  the same reports for every view its walk reaches, a view the pin adopts after the release included.
384
398
  - **A mutated document throws.** `hydrateRoot()` rethrows what `hydrate()` threw, over a container it
385
- first leaves cold-renderable: no element still asleep behind `defer-hydration`, no marker still
386
- hidden behind the prefix. The caller renders over the container.
399
+ first empties. The caller renders into it.
387
400
 
388
401
  ### How this compares
389
402
 
package/dist/client.d.ts CHANGED
@@ -1,7 +1,9 @@
1
1
  import { renderLight } from "@lit-labs/ssr-client/directives/render-light.js";
2
2
  import type { RenderOptions } from "lit";
3
+ import type { HydrationSignature } from "./signature.js";
3
4
  export { adoptUiViewContext, type AdoptableView, type AdoptUiViewContext, type AdoptUiViewContextKey } from "./adopt-context.js";
4
5
  export { isServedViewClass, type ServedUiView, type ServedUiViewConstructor, servedViewBrand, withServedRender } from "./served-view.js";
6
+ export type { HydrationSignature } from "./signature.js";
5
7
  /**
6
8
  * What a served `<ui-view>`'s wake came to.
7
9
  *
@@ -89,8 +91,49 @@ declare global {
89
91
  */
90
92
  export declare const uiViewSlot: typeof renderLight;
91
93
  /**
94
+ * Reads the hydration signature `prerender()` wrote ahead of the render a
95
+ * container holds: the version of this package that drew the document, and
96
+ * the state and parameter values it was drawn for.
97
+ *
98
+ * The signature is a `<script type="application/json" data-lit-ui-router-ssr>`
99
+ * data block among the container's own children, so this reads no deeper than
100
+ * they are; the first one wins. It reads the same before and after a
101
+ * {@link hydrateRoot} that adopts, which leaves the block in place; one that
102
+ * returns `false` clears the container.
103
+ *
104
+ * Only `version` is checked. `state` and `params` are whatever the block
105
+ * carries, so narrow them before use. Read it before {@link hydrateRoot}, which
106
+ * clears a container it does not adopt.
107
+ *
108
+ * @example
109
+ * ```ts
110
+ * import { hydrateRoot, readHydrationSignature } from 'lit-ui-router-ssr/client';
111
+ *
112
+ * await booted;
113
+ * const { state } = readHydrationSignature(root) ?? {};
114
+ * const drawnForBoot = state === router.globals.current.name;
115
+ * const release = hydrateRoot(root, page(router));
116
+ * ```
117
+ *
118
+ * @param container - the element the server's markup was written into
119
+ * @returns the signature, or `null` when the container holds none, or one that
120
+ * does not parse to an object with a string `version`
121
+ *
122
+ * @category client
123
+ */
124
+ export declare function readHydrationSignature(container: ParentNode): HydrationSignature | null;
125
+ /**
92
126
  * Adopts a server-rendered container, and the `<ui-view>`s that wake under it.
93
127
  *
128
+ * The container's {@link readHydrationSignature | hydration signature} is read
129
+ * first, and decides whether there is anything to adopt. A container with no
130
+ * signature renders cold, and so does one whose signature names another release
131
+ * line of this package — another minor below 1.0, another major from 1.0 — with
132
+ * a development warning naming both versions, and so does one whose signature
133
+ * no `lit-part` marker follows, as a comment-stripping minifier leaves it. Each
134
+ * time the container is emptied and this returns `false`, so the caller's
135
+ * `render()` draws the page once. A container this adopts keeps its signature.
136
+ *
94
137
  * {@link adoptUiViewContext} is provided on `container` with core's
95
138
  * `provideContext()` first, so a view woken by the walk finds it; `hydrate()`
96
139
  * then runs over `container`. The walk reaches each `<ui-view>`'s {@link
@@ -120,9 +163,8 @@ export declare const uiViewSlot: typeof renderLight;
120
163
  * the view, and to `options.onAdopt` when given. The pin carries that callback,
121
164
  * so a view adopted after the release still reaches it.
122
165
  *
123
- * A `hydrate()` that throws is rethrown, over a container left cold-renderable:
124
- * nothing asleep behind `defer-hydration`, no marker still hidden. The caller
125
- * renders over it.
166
+ * A `hydrate()` that throws is rethrown, over a container emptied the same
167
+ * way. The caller renders into it.
126
168
  *
127
169
  * The boot is the router first: `router.start()`, await its first successful
128
170
  * transition, then this call. The walk commits `.uiRouter` onto `<ui-router>`
@@ -143,7 +185,7 @@ export declare const uiViewSlot: typeof renderLight;
143
185
  * @param container - the element the server's markup was written into
144
186
  * @param value - the same template the server rendered, with every `<ui-view>` hole empty
145
187
  * @param options - lit render options, passed on to `hydrate()`, and `onAdopt`
146
- * @returns the function that releases the provider, or `false` when the container holds nothing to adopt — a cold client render, a dev server
188
+ * @returns the function that releases the provider, or `false`, over an emptied container, when there is nothing to adopt — no signature, as on a cold client render or a dev server, one from another release line, or one no render marker follows
147
189
  *
148
190
  * @category client
149
191
  */
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","mappings":"AAMA,SAAS,mBAAmB;AAG5B,cAAyB,qBAAqB;AAU9C,SACE,yBACK,oBACA,yBACA,6BACA;AACP,SACE,wBACK,mBACA,yBACL,iBACA,wBACK;;;;;;;;;;;;AAgBP,YAAY,eAAe,YAAY,cAAc;;;;;;;AAQrD,OAAO,cAAM,sBAAuB;;;;;;AAOpC,iBAAiB,kBAAkB;;UAExB,SAAS;;UAET;AACX;;;;;;;AAQA,YAAY,mBAAmB,YAAY;;;;;;AAO3C,YAAY,iBACV,MAAM,SACN,SAAS,cACT;;;;;;;AASF,iBAAiB,2BAA2B,cAAc;;;;;;CAMxD,UAAU;AACZ;eAEe;WACH,oBAAoB;;EAE5B,iBAAiB;CACnB;AACF;;;;;;;;;;;;;;;;;;;;;;;AA6DA,OAAO,cAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoWhC,OAAO,iBAAS,YACd,WAAW,aACX,gBACA,UAAS,qBACR","names":[],"ignoreList":[],"sources":["../src/client.ts"]}
1
+ {"version":3,"file":"client.d.ts","mappings":"AAMA,SAAS,mBAAmB;AAG5B,cAAyB,qBAAqB;AAU9C,cAAc,0BAA0B;AAExC,SACE,yBACK,oBACA,yBACA,6BACA;AACP,SACE,wBACK,mBACA,yBACL,iBACA,wBACK;AACP,cAAc,0BAA0B;;;;;;;;;;;;AAgBxC,YAAY,eAAe,YAAY,cAAc;;;;;;;AAQrD,OAAO,cAAM,sBAAuB;;;;;;AAOpC,iBAAiB,kBAAkB;;UAExB,SAAS;;UAET;AACX;;;;;;;AAQA,YAAY,mBAAmB,YAAY;;;;;;AAO3C,YAAY,iBACV,MAAM,SACN,SAAS,cACT;;;;;;;AASF,iBAAiB,2BAA2B,cAAc;;;;;;CAMxD,UAAU;AACZ;eAEe;WACH,oBAAoB;;EAE5B,iBAAiB;CACnB;AACF;;;;;;;;;;;;;;;;;;;;;;;AA6DA,OAAO,cAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0ThC,OAAO,iBAAS,uBACd,WAAW,aACV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoIH,OAAO,iBAAS,YACd,WAAW,aACX,gBACA,UAAS,qBACR","names":[],"ignoreList":[],"sources":["../src/client.ts"]}
package/dist/client.js CHANGED
@@ -7,6 +7,7 @@ import { provideContext } from "lit-ui-router/context";
7
7
  import { UiView } from "lit-ui-router/pure";
8
8
  import { adoptUiViewContext } from "./adopt-context.js";
9
9
  import { servedMarkerPrefix } from "./served-markers.js";
10
+ import { packageVersion, signatureSelector } from "./signature.js";
10
11
  export { adoptUiViewContext } from "./adopt-context.js";
11
12
  export { isServedViewClass, servedViewBrand, withServedRender } from "./served-view.js";
12
13
  const DEFER = "defer-hydration";
@@ -52,9 +53,8 @@ const report = (view, reporter, outcome, error) => {
52
53
  try {
53
54
  reporter?.(view, outcome, error);
54
55
  } catch (thrown) {
55
- queueMicrotask(() => {
56
- throw thrown;
57
- });
56
+ if (typeof globalThis.reportError !== "function") throw thrown;
57
+ globalThis.reportError(thrown);
58
58
  }
59
59
  };
60
60
  const isPart = (node, data) => node?.nodeType === Node.COMMENT_NODE && node.data.startsWith(data);
@@ -86,13 +86,6 @@ const revealServedMarkers = (node) => {
86
86
  revealServedMarkers(child);
87
87
  }
88
88
  };
89
- const revealEveryMarker = (node) => {
90
- for (const child of node.childNodes) if (child.nodeType === Node.COMMENT_NODE) revealMarker(child);
91
- else if (child instanceof Element) {
92
- if (child.shadowRoot) revealEveryMarker(child.shadowRoot);
93
- revealEveryMarker(child);
94
- }
95
- };
96
89
  const dropServedRender = (view) => {
97
90
  const children = [...view.childNodes];
98
91
  const from = children.findIndex((child) => isPart(child, servedMarkerPrefix) || child instanceof Element && hasServedMarkers(child));
@@ -140,21 +133,47 @@ const pinAdopter = (view, reporter) => {
140
133
  adopt(woken, reporter);
141
134
  });
142
135
  };
143
- const isServed = (container) => {
144
- for (const child of container.childNodes) {
145
- if (isPart(child, "lit-part")) return true;
146
- if (child.nodeType === Node.COMMENT_NODE) continue;
147
- if (child.nodeType === Node.TEXT_NODE && !child.data.trim()) continue;
136
+ const parseSignature = (json) => {
137
+ try {
138
+ const signature = JSON.parse(json);
139
+ return typeof signature?.version === "string" ? signature : null;
140
+ } catch {
141
+ return null;
142
+ }
143
+ };
144
+ export function readHydrationSignature(container) {
145
+ const block = signatureBlockIn(container);
146
+ return block ? parseSignature(block.text) : null;
147
+ }
148
+ const signatureBlockIn = (container) => [...container.children].find((child) => child.matches(signatureSelector));
149
+ const precedesRender = (block) => {
150
+ let node = block.nextSibling;
151
+ while (node?.nodeType === Node.TEXT_NODE && !node.data.trim()) node = node.nextSibling;
152
+ return isPart(node, "lit-part");
153
+ };
154
+ const releaseLine = (version) => {
155
+ const [major = "", minor = ""] = version.split(".");
156
+ return major === "0" ? `0.${minor}` : major;
157
+ };
158
+ const isAdoptable = (container) => {
159
+ const block = signatureBlockIn(container);
160
+ const signature = block && parseSignature(block.text);
161
+ if (!signature) return false;
162
+ if (releaseLine(signature.version) !== releaseLine(packageVersion)) {
163
+ signature.version;
148
164
  return false;
149
165
  }
166
+ if (precedesRender(block)) return true;
150
167
  return false;
151
168
  };
152
169
  const makeCold = (container) => {
153
- for (const element of container.querySelectorAll(`[${DEFER}]`)) element.removeAttribute(DEFER);
154
- revealEveryMarker(container);
170
+ container.replaceChildren();
155
171
  };
156
172
  export function hydrateRoot(container, value, options = {}) {
157
- if (!isServed(container)) return false;
173
+ if (!isAdoptable(container)) {
174
+ makeCold(container);
175
+ return false;
176
+ }
158
177
  const { onAdopt, ...renderOptions } = options;
159
178
  const release = provideContext(container, adoptUiViewContext, (view) => adopt(view, onAdopt));
160
179
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","mappings":"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","names":[],"ignoreList":[],"sources":["../src/client.ts"]}
1
+ {"version":3,"file":"client.js","mappings":"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","names":[],"ignoreList":[],"sources":["../src/client.ts"]}
@@ -7,6 +7,7 @@ import { provideContext } from "lit-ui-router/context";
7
7
  import { UiView } from "lit-ui-router/pure";
8
8
  import { adoptUiViewContext } from "./adopt-context.js";
9
9
  import { servedMarkerPrefix } from "./served-markers.js";
10
+ import { packageVersion, signatureSelector } from "./signature.js";
10
11
  export { adoptUiViewContext } from "./adopt-context.js";
11
12
  export { isServedViewClass, servedViewBrand, withServedRender } from "./served-view.js";
12
13
  const DEFER = "defer-hydration";
@@ -52,9 +53,8 @@ const report = (view, reporter, outcome, error) => {
52
53
  try {
53
54
  reporter?.(view, outcome, error);
54
55
  } catch (thrown) {
55
- queueMicrotask(() => {
56
- throw thrown;
57
- });
56
+ if (typeof globalThis.reportError !== "function") throw thrown;
57
+ globalThis.reportError(thrown);
58
58
  }
59
59
  };
60
60
  const warnMismatch = (view, error) => {
@@ -89,13 +89,6 @@ const revealServedMarkers = (node) => {
89
89
  revealServedMarkers(child);
90
90
  }
91
91
  };
92
- const revealEveryMarker = (node) => {
93
- for (const child of node.childNodes) if (child.nodeType === Node.COMMENT_NODE) revealMarker(child);
94
- else if (child instanceof Element) {
95
- if (child.shadowRoot) revealEveryMarker(child.shadowRoot);
96
- revealEveryMarker(child);
97
- }
98
- };
99
92
  const dropServedRender = (view) => {
100
93
  const children = [...view.childNodes];
101
94
  const from = children.findIndex((child) => isPart(child, servedMarkerPrefix) || child instanceof Element && hasServedMarkers(child));
@@ -145,21 +138,54 @@ const pinAdopter = (view, reporter) => {
145
138
  adopt(woken, reporter);
146
139
  });
147
140
  };
148
- const isServed = (container) => {
149
- for (const child of container.childNodes) {
150
- if (isPart(child, "lit-part")) return true;
151
- if (child.nodeType === Node.COMMENT_NODE) continue;
152
- if (child.nodeType === Node.TEXT_NODE && !child.data.trim()) continue;
141
+ const parseSignature = (json) => {
142
+ try {
143
+ const signature = JSON.parse(json);
144
+ return typeof signature?.version === "string" ? signature : null;
145
+ } catch {
146
+ return null;
147
+ }
148
+ };
149
+ export function readHydrationSignature(container) {
150
+ const block = signatureBlockIn(container);
151
+ return block ? parseSignature(block.text) : null;
152
+ }
153
+ const signatureBlockIn = (container) => [...container.children].find((child) => child.matches(signatureSelector));
154
+ const precedesRender = (block) => {
155
+ let node = block.nextSibling;
156
+ while (node?.nodeType === Node.TEXT_NODE && !node.data.trim()) node = node.nextSibling;
157
+ return isPart(node, "lit-part");
158
+ };
159
+ const releaseLine = (version) => {
160
+ const [major = "", minor = ""] = version.split(".");
161
+ return major === "0" ? `0.${minor}` : major;
162
+ };
163
+ const warnVersionSkew = (served) => {
164
+ console.warn("lit-ui-router-ssr: this document was prerendered by a release line this client does not adopt, so hydrateRoot() left it to a cold render. Prerender it again with the version the client ships. Prerendered by, then client:", served, packageVersion);
165
+ };
166
+ const warnMarkersStripped = () => {
167
+ console.warn("lit-ui-router-ssr: this document carries a hydration signature but no lit-part marker follows it, so hydrateRoot() left it to a cold render. hydrate() reads html comments: serve prerendered pages without stripping them.");
168
+ };
169
+ const isAdoptable = (container) => {
170
+ const block = signatureBlockIn(container);
171
+ const signature = block && parseSignature(block.text);
172
+ if (!signature) return false;
173
+ if (releaseLine(signature.version) !== releaseLine(packageVersion)) {
174
+ warnVersionSkew(signature.version);
153
175
  return false;
154
176
  }
177
+ if (precedesRender(block)) return true;
178
+ warnMarkersStripped();
155
179
  return false;
156
180
  };
157
181
  const makeCold = (container) => {
158
- for (const element of container.querySelectorAll(`[${DEFER}]`)) element.removeAttribute(DEFER);
159
- revealEveryMarker(container);
182
+ container.replaceChildren();
160
183
  };
161
184
  export function hydrateRoot(container, value, options = {}) {
162
- if (!isServed(container)) return false;
185
+ if (!isAdoptable(container)) {
186
+ makeCold(container);
187
+ return false;
188
+ }
163
189
  const { onAdopt, ...renderOptions } = options;
164
190
  const release = provideContext(container, adoptUiViewContext, (view) => adopt(view, onAdopt));
165
191
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","mappings":"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","names":[],"ignoreList":[],"sources":["../../src/client.ts"]}
1
+ {"version":3,"file":"client.js","mappings":"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","names":[],"ignoreList":[],"sources":["../../src/client.ts"]}
@@ -1,7 +1,9 @@
1
1
  import { render } from "@lit-labs/ssr";
2
2
  import { collectResultSync } from "@lit-labs/ssr/lib/render-result.js";
3
3
  import { provideRouter, withRouterSync } from "lit-ui-router/context";
4
+ import { DefType } from "@uirouter/core";
4
5
  import { createServerRouter } from "ui-router-server";
6
+ import { packageVersion, signatureAttribute } from "./signature.js";
5
7
  import { UiViewRenderer } from "./ui-view-renderer.js";
6
8
  const NODE_FS = "node:fs/promises";
7
9
  const DEFAULT_NOT_FOUND_FILE = "404.html";
@@ -39,6 +41,23 @@ const rootedStack = (root) => {
39
41
  const litServerRoot = globalThis.litServerRoot;
40
42
  return litServerRoot && litServerRoot !== root ? [litServerRoot, root] : [root];
41
43
  };
44
+ export const signatureOf = (router) => {
45
+ const { $current, params } = router.globals;
46
+ return {
47
+ version: packageVersion,
48
+ state: $current.name,
49
+ params: Object.fromEntries($current.parameters().filter((param) => param.location !== DefType.CONFIG).map((param) => [param.id, param.type.encode(params[param.id])]))
50
+ };
51
+ };
52
+ export const signatureBlock = (signature) => {
53
+ const json = JSON.stringify(signature).replaceAll("<", "\\u003c").replaceAll(">", "\\u003e");
54
+ return `<script type="application/json" ${signatureAttribute}>${json}<\/script>`;
55
+ };
56
+ export const renderPage = (body, router, root, elementRenderers) => signatureBlock(signatureOf(router)) + withRouterSync(router, () => collectResultSync(render(body, {
57
+ eventTargetStack: rootedStack(root),
58
+ elementRenderers,
59
+ deferHydration: true
60
+ })));
42
61
  const warnUnclaimed = (path) => {
43
62
  console.warn("lit-ui-router-ssr: no route matched this path and its mount declares no otherwise projection, so no page was emitted for it:", path);
44
63
  };
@@ -47,14 +66,52 @@ const warnStrictSlash = async (resolver, path) => {
47
66
  if (slashed.kind === "shell" && slashed.status === void 0) return;
48
67
  console.warn("lit-ui-router-ssr: this page is written as <subpath>/index.html, which static hosts serve by redirecting <subpath> to <subpath>/, and its mount rejects the trailing slash. Pass `config: { strict: false }` on the mount and call `router.urlService.config.strictMode(false)` on the client:", path);
49
68
  };
69
+ const wantsSlashProbe = (verdict, path, subpath) => subpath !== "" && verdict.status === void 0 && !path.endsWith("/");
70
+ const redirectLines = (path, verdict, trailingSlash) => {
71
+ const line = {
72
+ from: path,
73
+ to: verdict.location,
74
+ status: verdict.status
75
+ };
76
+ const paired = trailingSlash === "both" ? otherSpelling(path) : void 0;
77
+ return paired === void 0 ? [line] : [line, {
78
+ ...line,
79
+ from: paired
80
+ }];
81
+ };
82
+ const notFoundPage = async (notFound, mounts, resolver) => {
83
+ if (notFound === false) return void 0;
84
+ const probe = notFound?.probe ?? defaultProbe(mounts);
85
+ const verdict = await resolver.resolve(probe);
86
+ if (verdict.kind !== "shell" || verdict.status !== 404) return void 0;
87
+ return {
88
+ verdict,
89
+ probe,
90
+ file: notFound?.file ?? DEFAULT_NOT_FOUND_FILE
91
+ };
92
+ };
93
+ const writeRules = async (lines, rules, write, outDir) => {
94
+ if (rules === "none") return;
95
+ if (typeof rules === "function") {
96
+ await rules(lines);
97
+ return;
98
+ }
99
+ if (lines.length === 0) return;
100
+ const body = lines.map((line) => `${line.from} ${line.to} ${line.status}`).join("\n");
101
+ await write(joinPath(outDir, "_redirects"), `${body}\n`);
102
+ };
103
+ const resolverOf = (options) => {
104
+ if (options.resolver) return options.resolver;
105
+ if (!options.mounts) throw new Error("prerender() needs a mount table: pass `mounts`, or a `resolver` from createServerRouter().");
106
+ return createServerRouter({ mounts: options.mounts });
107
+ };
50
108
  const warnUnregistered = () => {
51
109
  if (globalThis.customElements?.get("ui-view")) return;
52
110
  console.warn("lit-ui-router-ssr: <ui-view> is not defined on the current customElements registry, so every <ui-view> on these pages renders empty. The DOM shim replaces the registry when it finishes installing: load lit-ui-router-ssr/register by dynamic import after the shim, or preload the shim with node --import.");
53
111
  };
54
112
  export async function prerender(options) {
55
113
  const { mounts, router, paths, outDir, renderShell, document, notFound, rules = "_redirects", extraRules = [], trailingSlash = "both", elementRenderers = [UiViewRenderer], write = nodeWrite, dryRun = false } = options;
56
- if (!options.resolver && !mounts) throw new Error("prerender() needs a mount table: pass `mounts`, or a `resolver` from createServerRouter().");
57
- const resolver = options.resolver ?? createServerRouter({ mounts });
114
+ const resolver = resolverOf(options);
58
115
  warnUnregistered();
59
116
  const root = options.root ?? new EventTarget();
60
117
  const tally = {
@@ -74,11 +131,7 @@ export async function prerender(options) {
74
131
  root
75
132
  };
76
133
  const body = await renderShell(verdict, context);
77
- const markup = typeof body === "string" ? body : withRouterSync(router, () => collectResultSync(render(body, {
78
- eventTargetStack: rootedStack(root),
79
- elementRenderers,
80
- deferHydration: true
81
- })));
134
+ const markup = typeof body === "string" ? body : renderPage(body, router, root, elementRenderers);
82
135
  const html = document ? await document(markup, context) : markup;
83
136
  if (!dryRun) await write(joinPath(outDir, file), html);
84
137
  pages.push({
@@ -89,58 +142,41 @@ export async function prerender(options) {
89
142
  });
90
143
  };
91
144
  let slashProbed = false;
92
- const uninstall = provideRouter(root, router);
93
- try {
94
- for await (const path of paths) {
95
- const verdict = await resolver.resolve(path);
96
- if (verdict.kind === "shell") {
97
- const subpath = subpathIn(verdict.mount, path);
98
- tally.shell += 1;
99
- if (!slashProbed && subpath !== "" && verdict.status === void 0 && !path.endsWith("/")) {
100
- slashProbed = true;
101
- await warnStrictSlash(resolver, path);
102
- }
103
- await emit(verdict, path, subpath, fileFor(subpath));
104
- continue;
145
+ const visit = async (path) => {
146
+ const verdict = await resolver.resolve(path);
147
+ if (verdict.kind === "shell") {
148
+ const subpath = subpathIn(verdict.mount, path);
149
+ tally.shell += 1;
150
+ if (!slashProbed && wantsSlashProbe(verdict, path, subpath)) {
151
+ slashProbed = true;
152
+ await warnStrictSlash(resolver, path);
105
153
  }
106
- if (verdict.kind === "redirect") {
107
- tally.redirect += 1;
108
- const line = {
109
- from: path,
110
- to: verdict.location,
111
- status: verdict.status
112
- };
113
- generated.push(line);
114
- const paired = trailingSlash === "both" ? otherSpelling(path) : void 0;
115
- if (paired !== void 0) generated.push({
116
- ...line,
117
- from: paired
118
- });
119
- continue;
120
- }
121
- tally.notFound += 1;
122
- warnings.push(path);
123
- warnUnclaimed(path);
154
+ await emit(verdict, path, subpath, fileFor(subpath));
155
+ return;
124
156
  }
125
- if (notFound !== false) {
126
- const probe = notFound?.probe ?? defaultProbe(mounts);
127
- const verdict = await resolver.resolve(probe);
128
- if (verdict.kind === "shell" && verdict.status === 404) {
129
- tally.document += 1;
130
- await emit(verdict, probe, subpathIn(verdict.mount, probe), notFound?.file ?? DEFAULT_NOT_FOUND_FILE);
131
- }
157
+ if (verdict.kind === "redirect") {
158
+ tally.redirect += 1;
159
+ generated.push(...redirectLines(path, verdict, trailingSlash));
160
+ return;
161
+ }
162
+ tally.notFound += 1;
163
+ warnings.push(path);
164
+ warnUnclaimed(path);
165
+ };
166
+ const uninstall = provideRouter(root, router);
167
+ try {
168
+ for await (const path of paths) await visit(path);
169
+ const page = await notFoundPage(notFound, mounts, resolver);
170
+ if (page) {
171
+ tally.document += 1;
172
+ const { verdict, probe, file } = page;
173
+ await emit(verdict, probe, subpathIn(verdict.mount, probe), file);
132
174
  }
133
175
  } finally {
134
176
  uninstall();
135
177
  }
136
178
  const lines = [...extraRules, ...generated];
137
- if (!dryRun && rules !== "none") {
138
- if (typeof rules === "function") await rules(lines);
139
- else if (lines.length > 0) {
140
- const body = lines.map((line) => `${line.from} ${line.to} ${line.status}`).join("\n");
141
- await write(joinPath(outDir, "_redirects"), `${body}\n`);
142
- }
143
- }
179
+ if (!dryRun) await writeRules(lines, rules, write, outDir);
144
180
  return {
145
181
  tally,
146
182
  pages,
@@ -1 +1 @@
1
- {"version":3,"file":"prerender.js","mappings":"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","names":[],"ignoreList":[],"sources":["../../src/prerender.ts"]}
1
+ {"version":3,"file":"prerender.js","mappings":"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","names":[],"ignoreList":[],"sources":["../../src/prerender.ts"]}
@@ -0,0 +1,4 @@
1
+ export const signatureAttribute = "data-lit-ui-router-ssr";
2
+ export const signatureSelector = `script[type="application/json"][${signatureAttribute}]`;
3
+ export const packageVersion = "0.2.0";
4
+ //# sourceMappingURL=signature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signature.js","mappings":"AA4BA,OAAO,MAAM,qBAAqB;AAOlC,OAAO,MAAM,oBAA4B,mCAAmC,mBAAmB;AAO/F,OAAO,MAAM","names":[],"ignoreList":[],"sources":["../../src/signature.ts"]}