@plumile/site 0.2.3 → 0.2.5
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 +102 -29
- package/lib/esm/node/httpResponse.d.ts +4 -0
- package/lib/esm/node/httpResponse.d.ts.map +1 -0
- package/lib/esm/node/httpResponse.js +29 -0
- package/lib/esm/node/index.d.ts +4 -48
- package/lib/esm/node/index.d.ts.map +1 -1
- package/lib/esm/node/index.js +4 -102
- package/lib/esm/node/renderSiteRequest.d.ts +4 -0
- package/lib/esm/node/renderSiteRequest.d.ts.map +1 -0
- package/lib/esm/node/renderSiteRequest.js +293 -0
- package/lib/esm/node/types.d.ts +106 -0
- package/lib/esm/node/types.d.ts.map +1 -0
- package/lib/esm/node/types.js +2 -0
- package/lib/esm/node/writeStaticSite.d.ts +3 -0
- package/lib/esm/node/writeStaticSite.d.ts.map +1 -0
- package/lib/esm/node/writeStaticSite.js +77 -0
- package/lib/esm/runtime/hydrationPayload.d.ts +8 -0
- package/lib/esm/runtime/hydrationPayload.d.ts.map +1 -0
- package/lib/esm/runtime/hydrationPayload.js +81 -0
- package/lib/esm/runtime/index.d.ts +36 -28
- package/lib/esm/runtime/index.d.ts.map +1 -1
- package/lib/esm/runtime/index.js +92 -78
- package/lib/esm/runtime/scrollRestoration.d.ts +12 -0
- package/lib/esm/runtime/scrollRestoration.d.ts.map +1 -0
- package/lib/esm/runtime/scrollRestoration.js +66 -0
- package/lib/esm/vite/index.d.ts +3 -1
- package/lib/esm/vite/index.d.ts.map +1 -1
- package/lib/esm/vite/index.js +23 -5
- package/lib/esm/vite/resolveSiteAssetsFromViteManifest.d.ts +14 -0
- package/lib/esm/vite/resolveSiteAssetsFromViteManifest.d.ts.map +1 -0
- package/lib/esm/vite/resolveSiteAssetsFromViteManifest.js +81 -0
- package/lib/tsconfig.esm.tsbuildinfo +1 -1
- package/lib/types/node/httpResponse.d.ts +4 -0
- package/lib/types/node/httpResponse.d.ts.map +1 -0
- package/lib/types/node/index.d.ts +4 -48
- package/lib/types/node/index.d.ts.map +1 -1
- package/lib/types/node/renderSiteRequest.d.ts +4 -0
- package/lib/types/node/renderSiteRequest.d.ts.map +1 -0
- package/lib/types/node/types.d.ts +106 -0
- package/lib/types/node/types.d.ts.map +1 -0
- package/lib/types/node/writeStaticSite.d.ts +3 -0
- package/lib/types/node/writeStaticSite.d.ts.map +1 -0
- package/lib/types/runtime/hydrationPayload.d.ts +8 -0
- package/lib/types/runtime/hydrationPayload.d.ts.map +1 -0
- package/lib/types/runtime/index.d.ts +36 -28
- package/lib/types/runtime/index.d.ts.map +1 -1
- package/lib/types/runtime/scrollRestoration.d.ts +12 -0
- package/lib/types/runtime/scrollRestoration.d.ts.map +1 -0
- package/lib/types/vite/index.d.ts +3 -1
- package/lib/types/vite/index.d.ts.map +1 -1
- package/lib/types/vite/resolveSiteAssetsFromViteManifest.d.ts +14 -0
- package/lib/types/vite/resolveSiteAssetsFromViteManifest.d.ts.map +1 -0
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -1,32 +1,105 @@
|
|
|
1
1
|
# @plumile/site
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
- `@plumile/site/
|
|
14
|
-
|
|
15
|
-
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
3
|
+
Universal SSG/SSR document and browser runtime for applications using
|
|
4
|
+
`@plumile/router`.
|
|
5
|
+
|
|
6
|
+
The package deliberately separates browser-safe APIs from Node-only rendering
|
|
7
|
+
and filesystem APIs:
|
|
8
|
+
|
|
9
|
+
- `@plumile/site/node` exports `renderSiteRequest`, `writeStaticSite`, the head,
|
|
10
|
+
page, asset and response types, plus the framework-neutral HTTP adapters.
|
|
11
|
+
- `@plumile/site/runtime` exports `hydratePlumileSite`,
|
|
12
|
+
`createScrollRestoration`, navigation helpers and static search helpers.
|
|
13
|
+
- `@plumile/site/vite` exports `plumileSiteVitePlugin` and the pure
|
|
14
|
+
`resolveSiteAssetsFromViteManifest` helper.
|
|
15
|
+
- The existing `config`, `i18n`, `manifest`, `markdown`, `relay`, and `theme`
|
|
16
|
+
subpaths retain their specialized APIs.
|
|
17
|
+
|
|
18
|
+
## Request rendering
|
|
19
|
+
|
|
20
|
+
Define an explicit concrete page list; dynamic router patterns are not used as
|
|
21
|
+
the SSG enumeration. Every path begins and ends with `/`, and hydration is an
|
|
22
|
+
explicit per-page choice.
|
|
23
|
+
|
|
24
|
+
```ts
|
|
25
|
+
import { renderSiteRequest, type SitePageDefinition } from '@plumile/site/node';
|
|
26
|
+
|
|
27
|
+
const page: SitePageDefinition<{ locale: string }> = {
|
|
28
|
+
path: '/guide/',
|
|
29
|
+
locale: 'en',
|
|
30
|
+
hydrate: false,
|
|
31
|
+
head: () => ({
|
|
32
|
+
title: 'Guide',
|
|
33
|
+
meta: [{ name: 'description', content: 'Product guide' }],
|
|
34
|
+
}),
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const response = await renderSiteRequest({
|
|
38
|
+
location: { pathname: page.path },
|
|
39
|
+
routes,
|
|
40
|
+
context: { locale: page.locale },
|
|
41
|
+
page,
|
|
42
|
+
assets,
|
|
43
|
+
});
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
`renderSiteRequest` returns a discriminated HTML, redirect, or not-found
|
|
47
|
+
response. It is the shared request renderer for prerendering and SSR. Static
|
|
48
|
+
pages always receive CSS and no browser entry; hydrated pages additionally
|
|
49
|
+
receive module preloads, a versioned JSON payload, and the client module.
|
|
50
|
+
|
|
51
|
+
Prepared route data crosses the server/client boundary only when that route
|
|
52
|
+
declares `preparedHydration.serialize` and `preparedHydration.deserialize`.
|
|
53
|
+
The router validates the payload as finite JSON and rejects unsafe or stale
|
|
54
|
+
snapshots.
|
|
55
|
+
|
|
56
|
+
## Static output and SSR
|
|
57
|
+
|
|
58
|
+
`writeStaticSite` writes validated HTML responses to deterministic directory
|
|
59
|
+
indexes and refuses traversal, duplicate paths, output collisions, redirects,
|
|
60
|
+
and no-match results in the normal page list. The caller owns cleaning the
|
|
61
|
+
output directory and Vite owns public asset copying.
|
|
62
|
+
|
|
63
|
+
For an HTTP host, map successful results with `siteResponseToHttpResponse`.
|
|
64
|
+
Catch request-rendering failures at the outer host boundary and map them with
|
|
65
|
+
`siteRenderErrorToHttpResponse`; the latter intentionally exposes no error
|
|
66
|
+
details and performs no logging.
|
|
67
|
+
|
|
68
|
+
## Client hydration
|
|
69
|
+
|
|
70
|
+
```ts
|
|
71
|
+
import {
|
|
72
|
+
createScrollRestoration,
|
|
73
|
+
hydratePlumileSite,
|
|
74
|
+
} from '@plumile/site/runtime';
|
|
75
|
+
|
|
76
|
+
const scroll = createScrollRestoration({});
|
|
77
|
+
await hydratePlumileSite({
|
|
78
|
+
routes,
|
|
79
|
+
getContext: createContextFromBrowserPath,
|
|
80
|
+
onRouteCommit: scroll.onRouteCommit,
|
|
81
|
+
});
|
|
32
82
|
```
|
|
83
|
+
|
|
84
|
+
Hydration reads exactly one `#__PLUMILE_SITE__` JSON element, verifies its
|
|
85
|
+
route and router snapshot against the current location, preserves server HTML,
|
|
86
|
+
and hydrates once. Wire `scroll.beforeRouteChange` to the router subscription
|
|
87
|
+
before updating the stored current entry, and call `scroll.dispose()` with the
|
|
88
|
+
router cleanup when the application shuts down.
|
|
89
|
+
|
|
90
|
+
## Vite
|
|
91
|
+
|
|
92
|
+
```ts
|
|
93
|
+
import { defineConfig } from 'vite';
|
|
94
|
+
import { plumileSiteVitePlugin } from '@plumile/site/vite';
|
|
95
|
+
|
|
96
|
+
export default defineConfig({
|
|
97
|
+
plugins: [plumileSiteVitePlugin({ clientEntry: 'app/entry.client.tsx' })],
|
|
98
|
+
});
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
The client build has a single JavaScript entry and emits a Vite manifest. The
|
|
102
|
+
SSR build keeps its CLI-provided server input, emits no manifest, and does not
|
|
103
|
+
copy the public directory. Read the client manifest in application-owned Node
|
|
104
|
+
or prerender code, then pass it to `resolveSiteAssetsFromViteManifest` with the
|
|
105
|
+
client entry and the concrete page's dynamic route entry.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { SiteHttpResponse, SiteResponse } from './types.js';
|
|
2
|
+
export declare function siteResponseToHttpResponse(response: SiteResponse): SiteHttpResponse;
|
|
3
|
+
export declare function siteRenderErrorToHttpResponse(): SiteHttpResponse;
|
|
4
|
+
//# sourceMappingURL=httpResponse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"httpResponse.d.ts","sourceRoot":"","sources":["../../../src/node/httpResponse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGjE,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,YAAY,GACrB,gBAAgB,CAoBlB;AAGD,wBAAgB,6BAA6B,IAAI,gBAAgB,CAMhE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export function siteResponseToHttpResponse(response) {
|
|
2
|
+
if (response.kind === 'html') {
|
|
3
|
+
return {
|
|
4
|
+
status: response.status,
|
|
5
|
+
headers: { 'Content-Type': 'text/html; charset=utf-8' },
|
|
6
|
+
body: response.html,
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
if (response.kind === 'redirect') {
|
|
10
|
+
return {
|
|
11
|
+
status: response.status,
|
|
12
|
+
headers: { Location: response.location },
|
|
13
|
+
body: '',
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
status: 404,
|
|
18
|
+
headers: { 'Content-Type': 'text/plain; charset=utf-8' },
|
|
19
|
+
body: 'Not Found',
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export function siteRenderErrorToHttpResponse() {
|
|
23
|
+
return {
|
|
24
|
+
status: 500,
|
|
25
|
+
headers: { 'Content-Type': 'text/plain; charset=utf-8' },
|
|
26
|
+
body: 'Internal Server Error',
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cFJlc3BvbnNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25vZGUvaHR0cFJlc3BvbnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sVUFBVSwwQkFBMEIsQ0FDeEMsUUFBc0I7SUFFdEIsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQzdCLE9BQU87WUFDTCxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07WUFDdkIsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLDBCQUEwQixFQUFFO1lBQ3ZELElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtTQUNwQixDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUNqQyxPQUFPO1lBQ0wsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO1lBQ3ZCLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFO1lBQ3hDLElBQUksRUFBRSxFQUFFO1NBQ1QsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPO1FBQ0wsTUFBTSxFQUFFLEdBQUc7UUFDWCxPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsMkJBQTJCLEVBQUU7UUFDeEQsSUFBSSxFQUFFLFdBQVc7S0FDbEIsQ0FBQztBQUNKLENBQUM7QUFHRCxNQUFNLFVBQVUsNkJBQTZCO0lBQzNDLE9BQU87UUFDTCxNQUFNLEVBQUUsR0FBRztRQUNYLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSwyQkFBMkIsRUFBRTtRQUN4RCxJQUFJLEVBQUUsdUJBQXVCO0tBQzlCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTaXRlSHR0cFJlc3BvbnNlLCBTaXRlUmVzcG9uc2UgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqIENvbnZlcnRzIGEgc2l0ZSByZW5kZXJpbmcgb3V0Y29tZSBpbnRvIGEgZnJhbWV3b3JrLW5ldXRyYWwgSFRUUCByZXNwb25zZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaXRlUmVzcG9uc2VUb0h0dHBSZXNwb25zZShcbiAgcmVzcG9uc2U6IFNpdGVSZXNwb25zZSxcbik6IFNpdGVIdHRwUmVzcG9uc2Uge1xuICBpZiAocmVzcG9uc2Uua2luZCA9PT0gJ2h0bWwnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ3RleHQvaHRtbDsgY2hhcnNldD11dGYtOCcgfSxcbiAgICAgIGJvZHk6IHJlc3BvbnNlLmh0bWwsXG4gICAgfTtcbiAgfVxuICBpZiAocmVzcG9uc2Uua2luZCA9PT0gJ3JlZGlyZWN0Jykge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIGhlYWRlcnM6IHsgTG9jYXRpb246IHJlc3BvbnNlLmxvY2F0aW9uIH0sXG4gICAgICBib2R5OiAnJyxcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgc3RhdHVzOiA0MDQsXG4gICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ3RleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgnIH0sXG4gICAgYm9keTogJ05vdCBGb3VuZCcsXG4gIH07XG59XG5cbi8qKiBSZXR1cm5zIHRoZSBzdGFibGUgSFRUUCByZXNwb25zZSB1c2VkIHdoZW4gc2l0ZSByZW5kZXJpbmcgZmFpbHMuICovXG5leHBvcnQgZnVuY3Rpb24gc2l0ZVJlbmRlckVycm9yVG9IdHRwUmVzcG9uc2UoKTogU2l0ZUh0dHBSZXNwb25zZSB7XG4gIHJldHVybiB7XG4gICAgc3RhdHVzOiA1MDAsXG4gICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ3RleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgnIH0sXG4gICAgYm9keTogJ0ludGVybmFsIFNlcnZlciBFcnJvcicsXG4gIH07XG59XG4iXX0=
|
package/lib/esm/node/index.d.ts
CHANGED
|
@@ -1,51 +1,7 @@
|
|
|
1
|
-
import React, { type ReactElement } from 'react';
|
|
2
1
|
import { type SiteConfig } from '../config/index.js';
|
|
3
|
-
|
|
2
|
+
export type * from './types.js';
|
|
3
|
+
export { siteRenderErrorToHttpResponse, siteResponseToHttpResponse, } from './httpResponse.js';
|
|
4
|
+
export { renderSiteRequest, serializeHydrationPayload, } from './renderSiteRequest.js';
|
|
5
|
+
export { writeStaticSite } from './writeStaticSite.js';
|
|
4
6
|
export declare function resolveSiteConfigFile(path: string): Promise<SiteConfig>;
|
|
5
|
-
export type RenderStaticSiteRouteOptions<TContext> = {
|
|
6
|
-
context?: TContext;
|
|
7
|
-
fallback?: ReactElement | string | null;
|
|
8
|
-
location: {
|
|
9
|
-
pathname: string;
|
|
10
|
-
search?: string;
|
|
11
|
-
hash?: string;
|
|
12
|
-
};
|
|
13
|
-
routerModule?: SiteRouterModule<TContext>;
|
|
14
|
-
routes: unknown[];
|
|
15
|
-
};
|
|
16
|
-
export type RenderStaticSiteRouteResult = {
|
|
17
|
-
body: string;
|
|
18
|
-
routePath: string | null;
|
|
19
|
-
};
|
|
20
|
-
export type RenderStaticSiteDocumentOptions = {
|
|
21
|
-
body: string;
|
|
22
|
-
manifest: PlumileSiteManifest;
|
|
23
|
-
route: PlumileSiteRouteManifest;
|
|
24
|
-
hydration?: Record<string, unknown>;
|
|
25
|
-
};
|
|
26
|
-
export type RenderStaticSiteDocumentResult = {
|
|
27
|
-
html: string;
|
|
28
|
-
hydrationPayload: string;
|
|
29
|
-
};
|
|
30
|
-
type SiteRouterModule<TContext> = {
|
|
31
|
-
createStaticRouter: (routes: unknown[], options: {
|
|
32
|
-
context?: TContext;
|
|
33
|
-
location: RenderStaticSiteRouteOptions<TContext>['location'];
|
|
34
|
-
}) => Promise<{
|
|
35
|
-
context: React.ComponentProps<React.Context<unknown>['Provider']>['value'];
|
|
36
|
-
entry: {
|
|
37
|
-
route?: {
|
|
38
|
-
path?: string;
|
|
39
|
-
} | null;
|
|
40
|
-
};
|
|
41
|
-
}>;
|
|
42
|
-
RouterRenderer: React.ComponentType<{
|
|
43
|
-
fallback?: ReactElement | string | null;
|
|
44
|
-
}>;
|
|
45
|
-
RoutingContext: React.Context<unknown>;
|
|
46
|
-
};
|
|
47
|
-
export declare function renderStaticSiteRoute<TContext = unknown>(options: RenderStaticSiteRouteOptions<TContext>): Promise<RenderStaticSiteRouteResult>;
|
|
48
|
-
export declare function renderStaticSiteDocument(options: RenderStaticSiteDocumentOptions): RenderStaticSiteDocumentResult;
|
|
49
|
-
export declare function serializeHydrationPayload(value: unknown): string;
|
|
50
|
-
export {};
|
|
51
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/node/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/node/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,UAAU,EAEhB,MAAM,oBAAoB,CAAC;AAE5B,mBAAmB,YAAY,CAAC;AAChC,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,iBAAiB,EACjB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAQ7E"}
|
package/lib/esm/node/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { pathToFileURL } from 'node:url';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { renderToString } from 'react-dom/server';
|
|
4
2
|
import { normalizeSiteConfig, } from '../config/index.js';
|
|
3
|
+
export { siteRenderErrorToHttpResponse, siteResponseToHttpResponse, } from './httpResponse.js';
|
|
4
|
+
export { renderSiteRequest, serializeHydrationPayload, } from './renderSiteRequest.js';
|
|
5
|
+
export { writeStaticSite } from './writeStaticSite.js';
|
|
5
6
|
export async function resolveSiteConfigFile(path) {
|
|
6
7
|
const module = (await import(pathToFileURL(path).href));
|
|
7
8
|
if (module.default == null) {
|
|
@@ -9,103 +10,4 @@ export async function resolveSiteConfigFile(path) {
|
|
|
9
10
|
}
|
|
10
11
|
return normalizeSiteConfig(module.default);
|
|
11
12
|
}
|
|
12
|
-
|
|
13
|
-
const { createStaticRouter, RouterRenderer, RoutingContext } = options.routerModule ?? (await loadSiteRouterModule());
|
|
14
|
-
const router = await createStaticRouter(options.routes, {
|
|
15
|
-
context: options.context,
|
|
16
|
-
location: options.location,
|
|
17
|
-
});
|
|
18
|
-
const body = renderToString(React.createElement(RoutingContext.Provider, { value: router.context }, React.createElement(RouterRenderer, {
|
|
19
|
-
fallback: options.fallback ?? null,
|
|
20
|
-
})));
|
|
21
|
-
return {
|
|
22
|
-
body,
|
|
23
|
-
routePath: router.entry.route?.path ?? null,
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
export function renderStaticSiteDocument(options) {
|
|
27
|
-
const baseUrl = options.manifest.site.baseUrl?.replace(/\/+$/, '') ?? '';
|
|
28
|
-
const canonicalUrl = `${baseUrl}${options.route.path}`;
|
|
29
|
-
const hydrationPayload = serializeHydrationPayload({
|
|
30
|
-
manifest: options.manifest,
|
|
31
|
-
routePath: options.route.path,
|
|
32
|
-
...options.hydration,
|
|
33
|
-
});
|
|
34
|
-
const description = options.route.description ?? '';
|
|
35
|
-
const alternates = findLocaleAlternates(options.manifest, options.route).map((alternate) => {
|
|
36
|
-
return `<link rel="alternate" hreflang="${escapeHtml(alternate.locale)}" href="${escapeHtml(`${baseUrl}${alternate.path}`)}">`;
|
|
37
|
-
});
|
|
38
|
-
if (alternates.length > 0) {
|
|
39
|
-
alternates.push(`<link rel="alternate" hreflang="x-default" href="${escapeHtml(`${baseUrl}${options.route.path}`)}">`);
|
|
40
|
-
}
|
|
41
|
-
const html = [
|
|
42
|
-
'<!doctype html>',
|
|
43
|
-
`<html lang="${escapeHtml(options.route.locale)}">`,
|
|
44
|
-
'<head>',
|
|
45
|
-
'<meta charset="utf-8">',
|
|
46
|
-
'<meta name="viewport" content="width=device-width, initial-scale=1">',
|
|
47
|
-
`<title>${escapeHtml(options.route.title)}</title>`,
|
|
48
|
-
`<meta name="description" content="${escapeHtml(description)}">`,
|
|
49
|
-
`<link rel="canonical" href="${escapeHtml(canonicalUrl)}">`,
|
|
50
|
-
...alternates,
|
|
51
|
-
'</head>',
|
|
52
|
-
'<body>',
|
|
53
|
-
`<div id="root">${options.body}</div>`,
|
|
54
|
-
`<script type="application/json" id="__PLUMILE_SITE__">${escapeJsonForHtml(hydrationPayload)}</script>`,
|
|
55
|
-
'</body>',
|
|
56
|
-
'</html>',
|
|
57
|
-
'',
|
|
58
|
-
].join('\n');
|
|
59
|
-
return {
|
|
60
|
-
html,
|
|
61
|
-
hydrationPayload,
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
export function serializeHydrationPayload(value) {
|
|
65
|
-
return JSON.stringify(sortJsonValue(value));
|
|
66
|
-
}
|
|
67
|
-
async function loadSiteRouterModule() {
|
|
68
|
-
const routerSpecifier = '@plumile/router';
|
|
69
|
-
const routerModule = (await import(routerSpecifier));
|
|
70
|
-
return routerModule;
|
|
71
|
-
}
|
|
72
|
-
function findLocaleAlternates(manifest, route) {
|
|
73
|
-
const groupKey = localeSourceGroupKey(route.source, manifest.site.locales);
|
|
74
|
-
return manifest.routes.filter((candidate) => {
|
|
75
|
-
return (candidate.path !== route.path &&
|
|
76
|
-
localeSourceGroupKey(candidate.source, manifest.site.locales) === groupKey);
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
function localeSourceGroupKey(source, locales) {
|
|
80
|
-
for (const locale of locales) {
|
|
81
|
-
const suffix = `.${locale}.md`;
|
|
82
|
-
if (source.endsWith(suffix)) {
|
|
83
|
-
return `${source.slice(0, -suffix.length)}.md`;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
return source;
|
|
87
|
-
}
|
|
88
|
-
function sortJsonValue(value) {
|
|
89
|
-
if (Array.isArray(value)) {
|
|
90
|
-
return value.map(sortJsonValue);
|
|
91
|
-
}
|
|
92
|
-
if (value == null || typeof value !== 'object') {
|
|
93
|
-
return value;
|
|
94
|
-
}
|
|
95
|
-
const result = {};
|
|
96
|
-
for (const key of Object.keys(value).sort()) {
|
|
97
|
-
result[key] = sortJsonValue(value[key]);
|
|
98
|
-
}
|
|
99
|
-
return result;
|
|
100
|
-
}
|
|
101
|
-
function escapeHtml(value) {
|
|
102
|
-
return value
|
|
103
|
-
.replace(/&/g, '&')
|
|
104
|
-
.replace(/</g, '<')
|
|
105
|
-
.replace(/>/g, '>')
|
|
106
|
-
.replace(/"/g, '"');
|
|
107
|
-
}
|
|
108
|
-
function escapeJsonForHtml(value) {
|
|
109
|
-
return value.replace(/</g, '\\u003c');
|
|
110
|
-
}
|
|
111
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbm9kZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pDLE9BQU8sS0FBNEIsTUFBTSxPQUFPLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWxELE9BQU8sRUFDTCxtQkFBbUIsR0FHcEIsTUFBTSxvQkFBb0IsQ0FBQztBQVM1QixNQUFNLENBQUMsS0FBSyxVQUFVLHFCQUFxQixDQUFDLElBQVk7SUFDdEQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBRXJELENBQUM7SUFDRixJQUFJLE1BQU0sQ0FBQyxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7UUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBQ0QsT0FBTyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQXVERCxNQUFNLENBQUMsS0FBSyxVQUFVLHFCQUFxQixDQUN6QyxPQUErQztJQUUvQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxHQUMxRCxPQUFPLENBQUMsWUFBWSxJQUFJLENBQUMsTUFBTSxvQkFBb0IsRUFBWSxDQUFDLENBQUM7SUFDbkUsTUFBTSxNQUFNLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO1FBQ3RELE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztRQUN4QixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7S0FDM0IsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUN6QixLQUFLLENBQUMsYUFBYSxDQUNqQixjQUFjLENBQUMsUUFBUSxFQUN2QixFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQ3pCLEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFO1FBQ2xDLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUk7S0FDbkMsQ0FBQyxDQUNILENBQ0YsQ0FBQztJQUVGLE9BQU87UUFDTCxJQUFJO1FBQ0osU0FBUyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksSUFBSSxJQUFJO0tBQzVDLENBQUM7QUFDSixDQUFDO0FBS0QsTUFBTSxVQUFVLHdCQUF3QixDQUN0QyxPQUF3QztJQUV4QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekUsTUFBTSxZQUFZLEdBQUcsR0FBRyxPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2RCxNQUFNLGdCQUFnQixHQUFHLHlCQUF5QixDQUFDO1FBQ2pELFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtRQUMxQixTQUFTLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJO1FBQzdCLEdBQUcsT0FBTyxDQUFDLFNBQVM7S0FDckIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO0lBQ3BELE1BQU0sVUFBVSxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FDMUUsQ0FBQyxTQUFTLEVBQUUsRUFBRTtRQUNaLE9BQU8sbUNBQW1DLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsVUFBVSxDQUN6RixHQUFHLE9BQU8sR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQzlCLElBQUksQ0FBQztJQUNSLENBQUMsQ0FDRixDQUFDO0lBQ0YsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzFCLFVBQVUsQ0FBQyxJQUFJLENBQ2Isb0RBQW9ELFVBQVUsQ0FDNUQsR0FBRyxPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FDbEMsSUFBSSxDQUNOLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUc7UUFDWCxpQkFBaUI7UUFDakIsZUFBZSxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSTtRQUNuRCxRQUFRO1FBQ1Isd0JBQXdCO1FBQ3hCLHNFQUFzRTtRQUN0RSxVQUFVLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVO1FBQ25ELHFDQUFxQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUk7UUFDaEUsK0JBQStCLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSTtRQUMzRCxHQUFHLFVBQVU7UUFDYixTQUFTO1FBQ1QsUUFBUTtRQUNSLGtCQUFrQixPQUFPLENBQUMsSUFBSSxRQUFRO1FBQ3RDLHlEQUF5RCxpQkFBaUIsQ0FDeEUsZ0JBQWdCLENBQ2pCLFdBQVc7UUFDWixTQUFTO1FBQ1QsU0FBUztRQUNULEVBQUU7S0FDSCxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUViLE9BQU87UUFDTCxJQUFJO1FBQ0osZ0JBQWdCO0tBQ2pCLENBQUM7QUFDSixDQUFDO0FBS0QsTUFBTSxVQUFVLHlCQUF5QixDQUFDLEtBQWM7SUFDdEQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFLRCxLQUFLLFVBQVUsb0JBQW9CO0lBR2pDLE1BQU0sZUFBZSxHQUFHLGlCQUFpQixDQUFDO0lBQzFDLE1BQU0sWUFBWSxHQUFHLENBQUMsTUFBTSxNQUFNLENBQUMsZUFBZSxDQUFDLENBQVksQ0FBQztJQUNoRSxPQUFPLFlBQTBDLENBQUM7QUFDcEQsQ0FBQztBQUtELFNBQVMsb0JBQW9CLENBQzNCLFFBQTZCLEVBQzdCLEtBQStCO0lBRS9CLE1BQU0sUUFBUSxHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzRSxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7UUFDMUMsT0FBTyxDQUNMLFNBQVMsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUk7WUFDN0Isb0JBQW9CLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FDM0UsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUtELFNBQVMsb0JBQW9CLENBQzNCLE1BQWMsRUFDZCxPQUEwQjtJQUUxQixLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzdCLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxLQUFLLENBQUM7UUFDL0IsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDNUIsT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDakQsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBS0QsU0FBUyxhQUFhLENBQUMsS0FBYztJQUNuQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUNELElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMvQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBNEIsRUFBRSxDQUFDO0lBQzNDLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUUsS0FBaUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBS0QsU0FBUyxVQUFVLENBQUMsS0FBYTtJQUMvQixPQUFPLEtBQUs7U0FDVCxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQztTQUN0QixPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztTQUNyQixPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztTQUNyQixPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUFLRCxTQUFTLGlCQUFpQixDQUFDLEtBQWE7SUFDdEMsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCBSZWFjdCwgeyB0eXBlIFJlYWN0RWxlbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJlbmRlclRvU3RyaW5nIH0gZnJvbSAncmVhY3QtZG9tL3NlcnZlcic7XG5cbmltcG9ydCB7XG4gIG5vcm1hbGl6ZVNpdGVDb25maWcsXG4gIHR5cGUgU2l0ZUNvbmZpZyxcbiAgdHlwZSBTaXRlQ29uZmlnSW5wdXQsXG59IGZyb20gJy4uL2NvbmZpZy9pbmRleC5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIFBsdW1pbGVTaXRlTWFuaWZlc3QsXG4gIFBsdW1pbGVTaXRlUm91dGVNYW5pZmVzdCxcbn0gZnJvbSAnLi4vbWFuaWZlc3QvaW5kZXguanMnO1xuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2l0ZUNvbmZpZ0ZpbGUocGF0aDogc3RyaW5nKTogUHJvbWlzZTxTaXRlQ29uZmlnPiB7XG4gIGNvbnN0IG1vZHVsZSA9IChhd2FpdCBpbXBvcnQocGF0aFRvRmlsZVVSTChwYXRoKS5ocmVmKSkgYXMge1xuICAgIGRlZmF1bHQ/OiBTaXRlQ29uZmlnSW5wdXQ7XG4gIH07XG4gIGlmIChtb2R1bGUuZGVmYXVsdCA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTaXRlIGNvbmZpZyBkb2VzIG5vdCBleHBvcnQgYSBkZWZhdWx0IGNvbmZpZzogJHtwYXRofWApO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVTaXRlQ29uZmlnKG1vZHVsZS5kZWZhdWx0KTtcbn1cblxuZXhwb3J0IHR5cGUgUmVuZGVyU3RhdGljU2l0ZVJvdXRlT3B0aW9uczxUQ29udGV4dD4gPSB7XG4gIGNvbnRleHQ/OiBUQ29udGV4dDtcbiAgZmFsbGJhY2s/OiBSZWFjdEVsZW1lbnQgfCBzdHJpbmcgfCBudWxsO1xuICBsb2NhdGlvbjoge1xuICAgIHBhdGhuYW1lOiBzdHJpbmc7XG4gICAgc2VhcmNoPzogc3RyaW5nO1xuICAgIGhhc2g/OiBzdHJpbmc7XG4gIH07XG4gIHJvdXRlck1vZHVsZT86IFNpdGVSb3V0ZXJNb2R1bGU8VENvbnRleHQ+O1xuICByb3V0ZXM6IHVua25vd25bXTtcbn07XG5cbmV4cG9ydCB0eXBlIFJlbmRlclN0YXRpY1NpdGVSb3V0ZVJlc3VsdCA9IHtcbiAgYm9keTogc3RyaW5nO1xuICByb3V0ZVBhdGg6IHN0cmluZyB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBSZW5kZXJTdGF0aWNTaXRlRG9jdW1lbnRPcHRpb25zID0ge1xuICBib2R5OiBzdHJpbmc7XG4gIG1hbmlmZXN0OiBQbHVtaWxlU2l0ZU1hbmlmZXN0O1xuICByb3V0ZTogUGx1bWlsZVNpdGVSb3V0ZU1hbmlmZXN0O1xuICBoeWRyYXRpb24/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn07XG5cbmV4cG9ydCB0eXBlIFJlbmRlclN0YXRpY1NpdGVEb2N1bWVudFJlc3VsdCA9IHtcbiAgaHRtbDogc3RyaW5nO1xuICBoeWRyYXRpb25QYXlsb2FkOiBzdHJpbmc7XG59O1xuXG50eXBlIFNpdGVSb3V0ZXJNb2R1bGU8VENvbnRleHQ+ID0ge1xuICBjcmVhdGVTdGF0aWNSb3V0ZXI6IChcbiAgICByb3V0ZXM6IHVua25vd25bXSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBjb250ZXh0PzogVENvbnRleHQ7XG4gICAgICBsb2NhdGlvbjogUmVuZGVyU3RhdGljU2l0ZVJvdXRlT3B0aW9uczxUQ29udGV4dD5bJ2xvY2F0aW9uJ107XG4gICAgfSxcbiAgKSA9PiBQcm9taXNlPHtcbiAgICBjb250ZXh0OiBSZWFjdC5Db21wb25lbnRQcm9wczxSZWFjdC5Db250ZXh0PHVua25vd24+WydQcm92aWRlciddPlsndmFsdWUnXTtcbiAgICBlbnRyeToge1xuICAgICAgcm91dGU/OiB7XG4gICAgICAgIHBhdGg/OiBzdHJpbmc7XG4gICAgICB9IHwgbnVsbDtcbiAgICB9O1xuICB9PjtcbiAgUm91dGVyUmVuZGVyZXI6IFJlYWN0LkNvbXBvbmVudFR5cGU8e1xuICAgIGZhbGxiYWNrPzogUmVhY3RFbGVtZW50IHwgc3RyaW5nIHwgbnVsbDtcbiAgfT47XG4gIFJvdXRpbmdDb250ZXh0OiBSZWFjdC5Db250ZXh0PHVua25vd24+O1xufTtcblxuLyoqXG4gKlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyU3RhdGljU2l0ZVJvdXRlPFRDb250ZXh0ID0gdW5rbm93bj4oXG4gIG9wdGlvbnM6IFJlbmRlclN0YXRpY1NpdGVSb3V0ZU9wdGlvbnM8VENvbnRleHQ+LFxuKTogUHJvbWlzZTxSZW5kZXJTdGF0aWNTaXRlUm91dGVSZXN1bHQ+IHtcbiAgY29uc3QgeyBjcmVhdGVTdGF0aWNSb3V0ZXIsIFJvdXRlclJlbmRlcmVyLCBSb3V0aW5nQ29udGV4dCB9ID1cbiAgICBvcHRpb25zLnJvdXRlck1vZHVsZSA/PyAoYXdhaXQgbG9hZFNpdGVSb3V0ZXJNb2R1bGU8VENvbnRleHQ+KCkpO1xuICBjb25zdCByb3V0ZXIgPSBhd2FpdCBjcmVhdGVTdGF0aWNSb3V0ZXIob3B0aW9ucy5yb3V0ZXMsIHtcbiAgICBjb250ZXh0OiBvcHRpb25zLmNvbnRleHQsXG4gICAgbG9jYXRpb246IG9wdGlvbnMubG9jYXRpb24sXG4gIH0pO1xuICBjb25zdCBib2R5ID0gcmVuZGVyVG9TdHJpbmcoXG4gICAgUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgIFJvdXRpbmdDb250ZXh0LlByb3ZpZGVyLFxuICAgICAgeyB2YWx1ZTogcm91dGVyLmNvbnRleHQgfSxcbiAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGVyUmVuZGVyZXIsIHtcbiAgICAgICAgZmFsbGJhY2s6IG9wdGlvbnMuZmFsbGJhY2sgPz8gbnVsbCxcbiAgICAgIH0pLFxuICAgICksXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICBib2R5LFxuICAgIHJvdXRlUGF0aDogcm91dGVyLmVudHJ5LnJvdXRlPy5wYXRoID8/IG51bGwsXG4gIH07XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclN0YXRpY1NpdGVEb2N1bWVudChcbiAgb3B0aW9uczogUmVuZGVyU3RhdGljU2l0ZURvY3VtZW50T3B0aW9ucyxcbik6IFJlbmRlclN0YXRpY1NpdGVEb2N1bWVudFJlc3VsdCB7XG4gIGNvbnN0IGJhc2VVcmwgPSBvcHRpb25zLm1hbmlmZXN0LnNpdGUuYmFzZVVybD8ucmVwbGFjZSgvXFwvKyQvLCAnJykgPz8gJyc7XG4gIGNvbnN0IGNhbm9uaWNhbFVybCA9IGAke2Jhc2VVcmx9JHtvcHRpb25zLnJvdXRlLnBhdGh9YDtcbiAgY29uc3QgaHlkcmF0aW9uUGF5bG9hZCA9IHNlcmlhbGl6ZUh5ZHJhdGlvblBheWxvYWQoe1xuICAgIG1hbmlmZXN0OiBvcHRpb25zLm1hbmlmZXN0LFxuICAgIHJvdXRlUGF0aDogb3B0aW9ucy5yb3V0ZS5wYXRoLFxuICAgIC4uLm9wdGlvbnMuaHlkcmF0aW9uLFxuICB9KTtcbiAgY29uc3QgZGVzY3JpcHRpb24gPSBvcHRpb25zLnJvdXRlLmRlc2NyaXB0aW9uID8/ICcnO1xuICBjb25zdCBhbHRlcm5hdGVzID0gZmluZExvY2FsZUFsdGVybmF0ZXMob3B0aW9ucy5tYW5pZmVzdCwgb3B0aW9ucy5yb3V0ZSkubWFwKFxuICAgIChhbHRlcm5hdGUpID0+IHtcbiAgICAgIHJldHVybiBgPGxpbmsgcmVsPVwiYWx0ZXJuYXRlXCIgaHJlZmxhbmc9XCIke2VzY2FwZUh0bWwoYWx0ZXJuYXRlLmxvY2FsZSl9XCIgaHJlZj1cIiR7ZXNjYXBlSHRtbChcbiAgICAgICAgYCR7YmFzZVVybH0ke2FsdGVybmF0ZS5wYXRofWAsXG4gICAgICApfVwiPmA7XG4gICAgfSxcbiAgKTtcbiAgaWYgKGFsdGVybmF0ZXMubGVuZ3RoID4gMCkge1xuICAgIGFsdGVybmF0ZXMucHVzaChcbiAgICAgIGA8bGluayByZWw9XCJhbHRlcm5hdGVcIiBocmVmbGFuZz1cIngtZGVmYXVsdFwiIGhyZWY9XCIke2VzY2FwZUh0bWwoXG4gICAgICAgIGAke2Jhc2VVcmx9JHtvcHRpb25zLnJvdXRlLnBhdGh9YCxcbiAgICAgICl9XCI+YCxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaHRtbCA9IFtcbiAgICAnPCFkb2N0eXBlIGh0bWw+JyxcbiAgICBgPGh0bWwgbGFuZz1cIiR7ZXNjYXBlSHRtbChvcHRpb25zLnJvdXRlLmxvY2FsZSl9XCI+YCxcbiAgICAnPGhlYWQ+JyxcbiAgICAnPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+JyxcbiAgICAnPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xXCI+JyxcbiAgICBgPHRpdGxlPiR7ZXNjYXBlSHRtbChvcHRpb25zLnJvdXRlLnRpdGxlKX08L3RpdGxlPmAsXG4gICAgYDxtZXRhIG5hbWU9XCJkZXNjcmlwdGlvblwiIGNvbnRlbnQ9XCIke2VzY2FwZUh0bWwoZGVzY3JpcHRpb24pfVwiPmAsXG4gICAgYDxsaW5rIHJlbD1cImNhbm9uaWNhbFwiIGhyZWY9XCIke2VzY2FwZUh0bWwoY2Fub25pY2FsVXJsKX1cIj5gLFxuICAgIC4uLmFsdGVybmF0ZXMsXG4gICAgJzwvaGVhZD4nLFxuICAgICc8Ym9keT4nLFxuICAgIGA8ZGl2IGlkPVwicm9vdFwiPiR7b3B0aW9ucy5ib2R5fTwvZGl2PmAsXG4gICAgYDxzY3JpcHQgdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIiBpZD1cIl9fUExVTUlMRV9TSVRFX19cIj4ke2VzY2FwZUpzb25Gb3JIdG1sKFxuICAgICAgaHlkcmF0aW9uUGF5bG9hZCxcbiAgICApfTwvc2NyaXB0PmAsXG4gICAgJzwvYm9keT4nLFxuICAgICc8L2h0bWw+JyxcbiAgICAnJyxcbiAgXS5qb2luKCdcXG4nKTtcblxuICByZXR1cm4ge1xuICAgIGh0bWwsXG4gICAgaHlkcmF0aW9uUGF5bG9hZCxcbiAgfTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplSHlkcmF0aW9uUGF5bG9hZCh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShzb3J0SnNvblZhbHVlKHZhbHVlKSk7XG59XG5cbi8qKlxuICpcbiAqL1xuYXN5bmMgZnVuY3Rpb24gbG9hZFNpdGVSb3V0ZXJNb2R1bGU8VENvbnRleHQ+KCk6IFByb21pc2U8XG4gIFNpdGVSb3V0ZXJNb2R1bGU8VENvbnRleHQ+XG4+IHtcbiAgY29uc3Qgcm91dGVyU3BlY2lmaWVyID0gJ0BwbHVtaWxlL3JvdXRlcic7XG4gIGNvbnN0IHJvdXRlck1vZHVsZSA9IChhd2FpdCBpbXBvcnQocm91dGVyU3BlY2lmaWVyKSkgYXMgdW5rbm93bjtcbiAgcmV0dXJuIHJvdXRlck1vZHVsZSBhcyBTaXRlUm91dGVyTW9kdWxlPFRDb250ZXh0Pjtcbn1cblxuLyoqXG4gKlxuICovXG5mdW5jdGlvbiBmaW5kTG9jYWxlQWx0ZXJuYXRlcyhcbiAgbWFuaWZlc3Q6IFBsdW1pbGVTaXRlTWFuaWZlc3QsXG4gIHJvdXRlOiBQbHVtaWxlU2l0ZVJvdXRlTWFuaWZlc3QsXG4pOiBQbHVtaWxlU2l0ZVJvdXRlTWFuaWZlc3RbXSB7XG4gIGNvbnN0IGdyb3VwS2V5ID0gbG9jYWxlU291cmNlR3JvdXBLZXkocm91dGUuc291cmNlLCBtYW5pZmVzdC5zaXRlLmxvY2FsZXMpO1xuICByZXR1cm4gbWFuaWZlc3Qucm91dGVzLmZpbHRlcigoY2FuZGlkYXRlKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNhbmRpZGF0ZS5wYXRoICE9PSByb3V0ZS5wYXRoICYmXG4gICAgICBsb2NhbGVTb3VyY2VHcm91cEtleShjYW5kaWRhdGUuc291cmNlLCBtYW5pZmVzdC5zaXRlLmxvY2FsZXMpID09PSBncm91cEtleVxuICAgICk7XG4gIH0pO1xufVxuXG4vKipcbiAqXG4gKi9cbmZ1bmN0aW9uIGxvY2FsZVNvdXJjZUdyb3VwS2V5KFxuICBzb3VyY2U6IHN0cmluZyxcbiAgbG9jYWxlczogcmVhZG9ubHkgc3RyaW5nW10sXG4pOiBzdHJpbmcge1xuICBmb3IgKGNvbnN0IGxvY2FsZSBvZiBsb2NhbGVzKSB7XG4gICAgY29uc3Qgc3VmZml4ID0gYC4ke2xvY2FsZX0ubWRgO1xuICAgIGlmIChzb3VyY2UuZW5kc1dpdGgoc3VmZml4KSkge1xuICAgICAgcmV0dXJuIGAke3NvdXJjZS5zbGljZSgwLCAtc3VmZml4Lmxlbmd0aCl9Lm1kYDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNvdXJjZTtcbn1cblxuLyoqXG4gKlxuICovXG5mdW5jdGlvbiBzb3J0SnNvblZhbHVlKHZhbHVlOiB1bmtub3duKTogdW5rbm93biB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZS5tYXAoc29ydEpzb25WYWx1ZSk7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModmFsdWUpLnNvcnQoKSkge1xuICAgIHJlc3VsdFtrZXldID0gc29ydEpzb25WYWx1ZSgodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICpcbiAqL1xuZnVuY3Rpb24gZXNjYXBlSHRtbCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlXG4gICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcbiAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKVxuICAgIC5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbi8qKlxuICpcbiAqL1xuZnVuY3Rpb24gZXNjYXBlSnNvbkZvckh0bWwodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZS5yZXBsYWNlKC88L2csICdcXFxcdTAwM2MnKTtcbn1cbiJdfQ==
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbm9kZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXpDLE9BQU8sRUFDTCxtQkFBbUIsR0FHcEIsTUFBTSxvQkFBb0IsQ0FBQztBQUc1QixPQUFPLEVBQ0wsNkJBQTZCLEVBQzdCLDBCQUEwQixHQUMzQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIseUJBQXlCLEdBQzFCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR3ZELE1BQU0sQ0FBQyxLQUFLLFVBQVUscUJBQXFCLENBQUMsSUFBWTtJQUN0RCxNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FFckQsQ0FBQztJQUNGLElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRCxPQUFPLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gJ25vZGU6dXJsJztcblxuaW1wb3J0IHtcbiAgbm9ybWFsaXplU2l0ZUNvbmZpZyxcbiAgdHlwZSBTaXRlQ29uZmlnLFxuICB0eXBlIFNpdGVDb25maWdJbnB1dCxcbn0gZnJvbSAnLi4vY29uZmlnL2luZGV4LmpzJztcblxuZXhwb3J0IHR5cGUgKiBmcm9tICcuL3R5cGVzLmpzJztcbmV4cG9ydCB7XG4gIHNpdGVSZW5kZXJFcnJvclRvSHR0cFJlc3BvbnNlLFxuICBzaXRlUmVzcG9uc2VUb0h0dHBSZXNwb25zZSxcbn0gZnJvbSAnLi9odHRwUmVzcG9uc2UuanMnO1xuZXhwb3J0IHtcbiAgcmVuZGVyU2l0ZVJlcXVlc3QsXG4gIHNlcmlhbGl6ZUh5ZHJhdGlvblBheWxvYWQsXG59IGZyb20gJy4vcmVuZGVyU2l0ZVJlcXVlc3QuanMnO1xuZXhwb3J0IHsgd3JpdGVTdGF0aWNTaXRlIH0gZnJvbSAnLi93cml0ZVN0YXRpY1NpdGUuanMnO1xuXG4vKiogTG9hZHMgYW5kIHZhbGlkYXRlcyBhIHNpdGUgY29uZmlndXJhdGlvbiBtb2R1bGUgZnJvbSBkaXNrLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTaXRlQ29uZmlnRmlsZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPFNpdGVDb25maWc+IHtcbiAgY29uc3QgbW9kdWxlID0gKGF3YWl0IGltcG9ydChwYXRoVG9GaWxlVVJMKHBhdGgpLmhyZWYpKSBhcyB7XG4gICAgZGVmYXVsdD86IFNpdGVDb25maWdJbnB1dDtcbiAgfTtcbiAgaWYgKG1vZHVsZS5kZWZhdWx0ID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNpdGUgY29uZmlnIGRvZXMgbm90IGV4cG9ydCBhIGRlZmF1bHQgY29uZmlnOiAke3BhdGh9YCk7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZVNpdGVDb25maWcobW9kdWxlLmRlZmF1bHQpO1xufVxuIl19
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { RenderSiteRequestOptions, SiteResponse } from './types.js';
|
|
2
|
+
export declare function serializeHydrationPayload(value: unknown): string;
|
|
3
|
+
export declare function renderSiteRequest<TContext>(options: RenderSiteRequestOptions<TContext>): Promise<SiteResponse>;
|
|
4
|
+
//# sourceMappingURL=renderSiteRequest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderSiteRequest.d.ts","sourceRoot":"","sources":["../../../src/node/renderSiteRequest.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAEV,wBAAwB,EAMxB,YAAY,EAGb,MAAM,YAAY,CAAC;AAGpB,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEhE;AAGD,wBAAsB,iBAAiB,CAAC,QAAQ,EAC9C,OAAO,EAAE,wBAAwB,CAAC,QAAQ,CAAC,GAC1C,OAAO,CAAC,YAAY,CAAC,CAuFvB"}
|