@fluixi/server 1.0.0-alpha.53

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Fluixi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,88 @@
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/fluixi/assets/main/logos/128x128.png" alt="Fluixi" width="120" height="120" />
3
+ </p>
4
+
5
+ # @fluixi/server
6
+
7
+ **Server-side rendering for Fluixi — request-scoped, streaming, framework-agnostic.**
8
+
9
+ [![License: MIT](https://img.shields.io/badge/License-MIT-22c55e.svg)](./LICENSE)
10
+ ![TypeScript](https://img.shields.io/badge/TypeScript-strict-3178c6?logo=typescript&logoColor=white)
11
+ ![Registry](https://img.shields.io/badge/registry-GitHub%20Packages-181717?logo=github)
12
+ ![SSR](https://img.shields.io/badge/SSR-streaming%20%2B%20hydration-2c4f7c)
13
+
14
+ ---
15
+
16
+ ## ✨ Overview
17
+
18
+ The universal string renderer lives in [`@fluixi/dom`](../dom) (`renderToString` +
19
+ request-scoping); `@fluixi/server` is the **Node-side home** that makes it
20
+ concurrency-safe and ergonomic:
21
+
22
+ - injects an `AsyncLocalStorage` into `@fluixi/dom`'s request store so concurrent SSR
23
+ requests are isolated (`@fluixi/dom` stays browser-safe by never importing
24
+ `node:async_hooks` itself);
25
+ - re-exports the SSR surface (`renderToString`, `renderToStringAsync`, `getRequestEvent`,
26
+ the request-context primitives);
27
+ - adds request helpers (`renderRequest`, `renderRequestAsync`, `renderRequestToPage`,
28
+ `renderToBodyStream`, `startServer`, `createHtmlDocument`).
29
+
30
+ No meta-framework coupling — SSR is a plain function you call from any server (Express,
31
+ Hono, a worker, or [`@fluixi/start`](../start)).
32
+
33
+ ## 📦 Installation
34
+
35
+ ```ini
36
+ # .npmrc
37
+ @fluixi:registry=https://npm.pkg.github.com
38
+ //npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}
39
+ ```
40
+
41
+ ```sh
42
+ pnpm add @fluixi/server
43
+ ```
44
+
45
+ ## 🚀 Usage
46
+
47
+ ```ts
48
+ import { startServer } from '@fluixi/server';
49
+ import App from './app';
50
+
51
+ const { render, page, renderAsync, stream } = startServer(App);
52
+ // express: res.send(page(req.url))
53
+ ```
54
+
55
+ ### Async data (Suspense / resources)
56
+
57
+ `renderRequestAsync` (and `startServer().renderAsync`) await data loaders before
58
+ serializing, then emit a `window.__FX_DATA__` script so the client seeds resources
59
+ without refetching:
60
+
61
+ ```ts
62
+ import { renderRequestAsync } from '@fluixi/server';
63
+ const html = await renderRequestAsync(App, { url });
64
+ ```
65
+
66
+ ### Streaming
67
+
68
+ ```ts
69
+ import { renderToBodyStream } from '@fluixi/server';
70
+ // a web ReadableStream of the app body — the host owns the surrounding document
71
+ export const renderStream = (url) => renderToBodyStream(App, { url });
72
+ ```
73
+
74
+ ### Request-scoped data + redaction
75
+
76
+ ```ts
77
+ import { getRequestEvent, setDataRedactor } from '@fluixi/server';
78
+
79
+ // inside a component / loader:
80
+ getRequestEvent()?.request; // the web Request (headers, cookies, …)
81
+
82
+ // strip server-only fields from __FX_DATA__ before they reach the page:
83
+ setDataRedactor((v) => (v?.passwordHash ? { ...v, passwordHash: undefined } : v));
84
+ ```
85
+
86
+ ## 📄 License
87
+
88
+ [MIT](./LICENSE) © [Fluixi](https://fluixi.dev)
@@ -0,0 +1,114 @@
1
+ /**
2
+ * @fluixi/server — the environment-agnostic SSR engine.
3
+ *
4
+ * The string renderer itself lives in @fluixi/dom (the universal `renderToString`
5
+ * + the request-scoping primitives), so it stays usable in any environment.
6
+ * This package is the Node-side home that:
7
+ *
8
+ * 1. injects a real AsyncLocalStorage into @fluixi/dom's request store, so
9
+ * concurrent SSR requests are isolated out of the box (the "P0 #4" fix) —
10
+ * @fluixi/dom can't import `node:async_hooks` itself without breaking
11
+ * browser bundles, so the Node-only server package wires it here;
12
+ * 2. re-exports the SSR surface so apps import one place;
13
+ * 3. adds request helpers (renderRequest / renderToPage / startServer).
14
+ *
15
+ * No vinxi coupling — the meta-framework was never wired into the render path;
16
+ * SSR is a plain function you call from any server (Express/Hono/Nitro/worker).
17
+ */
18
+ import { renderToString, renderToStringAsync, serializeNode, setDataRedactor, getRequestEvent, getRequestContext, getLocals, getRequestLocals, runWithRequestContext, createRequestContext, setRequestStore, isServer, setServerMode, type RequestEvent } from '@fluixi/dom';
19
+ export { renderToString, renderToStringAsync, serializeNode, setDataRedactor, getRequestEvent, getRequestContext, getLocals, getRequestLocals, runWithRequestContext, createRequestContext, setRequestStore, isServer, setServerMode, };
20
+ export type { RequestContext, RequestEvent, RequestLocals, RequestStore, RenderOptions } from '@fluixi/dom';
21
+ export interface DocumentOptions {
22
+ title?: string;
23
+ lang?: string;
24
+ stylesheets?: string[];
25
+ scripts?: string[];
26
+ head?: string;
27
+ bodyAttributes?: string;
28
+ /** Emit the pre-hydration event-capture script in <head> (default true). */
29
+ eventReplay?: boolean;
30
+ }
31
+ /** Discrete events captured before hydration and replayed by startClient. */
32
+ export declare const EVENT_REPLAY_TYPES: string[];
33
+ /**
34
+ * Inline script that records events fired BEFORE hydration so the client can
35
+ * replay them once the delegated handlers are wired (see startClient →
36
+ * replayEvents). Must run early — emit it near the top of <head>. Records only
37
+ * `{type, target}`; since hydration REUSES the server DOM nodes, each recorded
38
+ * target stays live for replay. Custom servers that don't use createHtmlDocument
39
+ * should inject this string into their <head> themselves.
40
+ */
41
+ export declare function eventCaptureScript(): string;
42
+ /** Wrap rendered content in a complete HTML document. */
43
+ export declare function createHtmlDocument(content: string, options?: DocumentOptions): string;
44
+ /** Render a request to an HTML string, exposing the event via getRequestEvent(). */
45
+ export declare function renderRequest(app: (props: {
46
+ url: string;
47
+ }) => any, event: RequestEvent): string;
48
+ /**
49
+ * Resolve every registered isomorphic state for THIS request (before the app renders):
50
+ * run its `server(event)` resolver, set its signal so the server render reads the value,
51
+ * and stash it in the request data so it serializes into the `__FX_DATA__` JSON transport
52
+ * and the client seeds from the same value (no hydration mismatch, no refetch). Passed as the
53
+ * `preload` hook to the renderer; runs inside the request context.
54
+ */
55
+ export declare function preloadServerState(event?: RequestEvent): Promise<void>;
56
+ /** Async variant — awaits resources/Suspense before serializing. */
57
+ export declare function renderRequestAsync(app: (props: {
58
+ url: string;
59
+ }) => any, event: RequestEvent): Promise<string>;
60
+ /** Render a full HTML document for a request. */
61
+ export declare function renderRequestToPage(app: (props: {
62
+ url: string;
63
+ }) => any, event: RequestEvent, options?: DocumentOptions): string;
64
+ /**
65
+ * Render a request to a web `ReadableStream<Uint8Array>` — works in Node 18+,
66
+ * Deno, Bun, and edge/worker runtimes (which want a web stream, not a Node
67
+ * Readable). The document **shell** (`<head>` + open `<body>`) is flushed
68
+ * immediately so the browser can start loading assets, then the app HTML
69
+ * (awaiting data loaders/Suspense) and the closing tags follow.
70
+ *
71
+ * Progressive out-of-order Suspense streaming is a later pass; today the body is
72
+ * a single chunk emitted after the async render resolves.
73
+ */
74
+ export declare function renderToStream(app: (props: {
75
+ url: string;
76
+ }) => any, event: RequestEvent, options?: DocumentOptions): ReadableStream<Uint8Array>;
77
+ /**
78
+ * Render a request to a web `ReadableStream<Uint8Array>` of JUST the app content —
79
+ * NO document shell. For hosts that own the surrounding HTML document (e.g. a
80
+ * `@fluixi/start` app streaming its `index.html` around the app body): the host
81
+ * flushes the document head first, then pipes this body stream into the mount point,
82
+ * then the document tail. The content includes the `__FX_DATA__` resource-transport
83
+ * script (it's part of the async render output), so hydration seeds without refetch.
84
+ *
85
+ * Single chunk today (the async render resolves fully before emitting); progressive
86
+ * out-of-order Suspense streaming is a later pass — same signature.
87
+ */
88
+ export declare function renderToBodyStream(app: (props: {
89
+ url: string;
90
+ }) => any, event: RequestEvent): ReadableStream<Uint8Array>;
91
+ /**
92
+ * Server entry helper — returns render/page closures bound to an app.
93
+ *
94
+ * @example
95
+ * import { startServer } from '@fluixi/server';
96
+ * import App from './app';
97
+ * const { render, page } = startServer(App);
98
+ * // express: res.send(page(req.url))
99
+ */
100
+ export declare function startServer(App: (props: {
101
+ url: string;
102
+ }) => any): {
103
+ render: (url: string) => string;
104
+ page: (url: string, opts?: DocumentOptions) => string;
105
+ /** async render — awaits data loaders/Suspense */
106
+ renderAsync: (url: string) => Promise<string>;
107
+ /** async full-document render */
108
+ pageAsync: (url: string, opts?: DocumentOptions) => Promise<string>;
109
+ /** web ReadableStream of the document (shell flushed first) */
110
+ stream: (url: string, opts?: DocumentOptions) => ReadableStream<Uint8Array<ArrayBufferLike>>;
111
+ /** web ReadableStream of the app body only (host owns the document) */
112
+ bodyStream: (url: string) => ReadableStream<Uint8Array<ArrayBufferLike>>;
113
+ };
114
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,EACf,QAAQ,EACR,aAAa,EAEb,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AA4BrB,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,EACf,QAAQ,EACR,aAAa,GACd,CAAC;AACF,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5G,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4EAA4E;IAC5E,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,6EAA6E;AAC7E,eAAO,MAAM,kBAAkB,UAAoD,CAAC;AAEpF;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAW3C;AA8BD,yDAAyD;AACzD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,MAAM,CAEzF;AAED,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,KAAK,GAAG,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM,CAE/F;AAQD;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB5E;AAED,oEAAoE;AACpE,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,CAAC,KAAK,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,KAAK,GAAG,EACpC,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,MAAM,CAAC,CAkBjB;AAED,iDAAiD;AACjD,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,CAAC,KAAK,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,KAAK,GAAG,EACpC,KAAK,EAAE,YAAY,EACnB,OAAO,CAAC,EAAE,eAAe,GACxB,MAAM,CAER;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,CAAC,KAAK,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,KAAK,GAAG,EACpC,KAAK,EAAE,YAAY,EACnB,OAAO,GAAE,eAAoB,GAC5B,cAAc,CAAC,UAAU,CAAC,CAmB5B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,CAAC,KAAK,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,KAAK,GAAG,EACpC,KAAK,EAAE,YAAY,GAClB,cAAc,CAAC,UAAU,CAAC,CAgB5B;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,KAAK,GAAG;kBAE9C,MAAM;gBACR,MAAM,SAAS,eAAe;IAC1C,kDAAkD;uBAC/B,MAAM;IACzB,iCAAiC;qBACV,MAAM,SAAS,eAAe;IAErD,+DAA+D;kBACjD,MAAM,SAAS,eAAe;IAC5C,uEAAuE;sBACrD,MAAM;EAE3B"}
package/dist/index.js ADDED
@@ -0,0 +1,228 @@
1
+ /**
2
+ * @fluixi/server — the environment-agnostic SSR engine.
3
+ *
4
+ * The string renderer itself lives in @fluixi/dom (the universal `renderToString`
5
+ * + the request-scoping primitives), so it stays usable in any environment.
6
+ * This package is the Node-side home that:
7
+ *
8
+ * 1. injects a real AsyncLocalStorage into @fluixi/dom's request store, so
9
+ * concurrent SSR requests are isolated out of the box (the "P0 #4" fix) —
10
+ * @fluixi/dom can't import `node:async_hooks` itself without breaking
11
+ * browser bundles, so the Node-only server package wires it here;
12
+ * 2. re-exports the SSR surface so apps import one place;
13
+ * 3. adds request helpers (renderRequest / renderToPage / startServer).
14
+ *
15
+ * No vinxi coupling — the meta-framework was never wired into the render path;
16
+ * SSR is a plain function you call from any server (Express/Hono/Nitro/worker).
17
+ */
18
+ import { renderToString, renderToStringAsync, serializeNode, setDataRedactor, getRequestEvent, getRequestContext, getLocals, getRequestLocals, runWithRequestContext, createRequestContext, setRequestStore, isServer, setServerMode, } from '@fluixi/dom';
19
+ import { createHead, setActiveHead, renderHead, encodeHeadMarker } from '@fluixi/head';
20
+ function resolveALS() {
21
+ const g = globalThis.AsyncLocalStorage;
22
+ if (g)
23
+ return g;
24
+ const proc = globalThis.process;
25
+ try {
26
+ return proc?.getBuiltinModule?.('node:async_hooks')?.AsyncLocalStorage;
27
+ }
28
+ catch {
29
+ return undefined;
30
+ }
31
+ }
32
+ const ALS = resolveALS();
33
+ if (ALS) {
34
+ setRequestStore(new ALS());
35
+ }
36
+ else {
37
+ console.warn('[fluixi/server] AsyncLocalStorage unavailable — using a sync request store (no async isolation across concurrent requests)');
38
+ }
39
+ export { renderToString, renderToStringAsync, serializeNode, setDataRedactor, getRequestEvent, getRequestContext, getLocals, getRequestLocals, runWithRequestContext, createRequestContext, setRequestStore, isServer, setServerMode, };
40
+ /** Discrete events captured before hydration and replayed by startClient. */
41
+ export const EVENT_REPLAY_TYPES = ['click', 'input', 'change', 'submit', 'keydown'];
42
+ /**
43
+ * Inline script that records events fired BEFORE hydration so the client can
44
+ * replay them once the delegated handlers are wired (see startClient →
45
+ * replayEvents). Must run early — emit it near the top of <head>. Records only
46
+ * `{type, target}`; since hydration REUSES the server DOM nodes, each recorded
47
+ * target stays live for replay. Custom servers that don't use createHtmlDocument
48
+ * should inject this string into their <head> themselves.
49
+ */
50
+ export function eventCaptureScript() {
51
+ const t = JSON.stringify(EVENT_REPLAY_TYPES);
52
+ // Minified IIFE: queue events on window.__FX_REPLAY__ via capture-phase
53
+ // listeners; expose __FX_REPLAY_STOP__ so the client detaches them after replay.
54
+ return (`<script>(function(){var q=window.__FX_REPLAY__=[],t=${t},` +
55
+ `r=function(e){q.push({type:e.type,target:e.target})},i=0;` +
56
+ `for(;i<t.length;i++)document.addEventListener(t[i],r,true);` +
57
+ `window.__FX_REPLAY_STOP__=function(){for(var j=0;j<t.length;j++)` +
58
+ `document.removeEventListener(t[j],r,true)}})();</script>`);
59
+ }
60
+ /** The document up to (and including) the open <body> — flushable before content. */
61
+ function documentShell(options = {}) {
62
+ const { title = 'Fluixi App', lang = 'en', stylesheets = [], head = '', bodyAttributes = '', eventReplay = true } = options;
63
+ const styleTags = stylesheets.map((href) => `<link rel="stylesheet" href="${href}">`).join('\n ');
64
+ return `<!DOCTYPE html>
65
+ <html lang="${lang}">
66
+ <head>
67
+ <meta charset="UTF-8">
68
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
69
+ <title>${title}</title>
70
+ ${eventReplay ? eventCaptureScript() : ''}
71
+ ${styleTags}
72
+ ${head}
73
+ </head>
74
+ <body${bodyAttributes ? ' ' + bodyAttributes : ''}>
75
+ `;
76
+ }
77
+ /** The trailing scripts + closing tags — flushed after the app content. */
78
+ function documentClose(options = {}) {
79
+ const { scripts = [] } = options;
80
+ const scriptTags = scripts.map((src) => `<script type="module" src="${src}"></script>`).join('\n ');
81
+ return `
82
+ ${scriptTags}
83
+ </body>
84
+ </html>`;
85
+ }
86
+ /** Wrap rendered content in a complete HTML document. */
87
+ export function createHtmlDocument(content, options = {}) {
88
+ return documentShell(options) + content + documentClose(options);
89
+ }
90
+ /** Render a request to an HTML string, exposing the event via getRequestEvent(). */
91
+ export function renderRequest(app, event) {
92
+ return renderToString(() => app({ url: event.url ?? '/' }), { event });
93
+ }
94
+ // Isomorphic request state (paired with @fluixi/core's createIsomorphicState). The
95
+ // two halves communicate only through this globalThis registry — no import edge, so
96
+ // the client half stays free of this server module.
97
+ const ISO_REGISTRY_KEY = '__fluixi_iso_states__';
98
+ const ISO_SEED_PREFIX = '__iso:';
99
+ /**
100
+ * Resolve every registered isomorphic state for THIS request (before the app renders):
101
+ * run its `server(event)` resolver, set its signal so the server render reads the value,
102
+ * and stash it in the request data so it serializes into the `__FX_DATA__` JSON transport
103
+ * and the client seeds from the same value (no hydration mismatch, no refetch). Passed as the
104
+ * `preload` hook to the renderer; runs inside the request context.
105
+ */
106
+ export async function preloadServerState(event) {
107
+ const reg = globalThis[ISO_REGISTRY_KEY];
108
+ if (!reg || reg.size === 0)
109
+ return;
110
+ const ctx = getRequestContext();
111
+ for (const [key, st] of reg) {
112
+ try {
113
+ const value = await st.server(event);
114
+ st.set(value); // populate the signal for the server render
115
+ ctx?.data.set(ISO_SEED_PREFIX + key, value); // → client seed
116
+ }
117
+ catch (err) {
118
+ // A failing resolver (e.g. the backend is down/restarting) must NOT abort the
119
+ // whole render. Leave the state at its fallback, skip its seed, and let the
120
+ // client resolve/retry after hydration. Resilient SSR degrades, never blanks.
121
+ console.error(`[fluixi] isomorphic state "${key}" failed to resolve on the server:`, err);
122
+ }
123
+ }
124
+ }
125
+ /** Async variant — awaits resources/Suspense before serializing. */
126
+ export function renderRequestAsync(app, event) {
127
+ // Collect @fluixi/head metadata registered via seo()/useHead during the render, and prepend it
128
+ // as an (inert) marker the adapter/prerender lifts into <head>. No seo() → no marker, no change.
129
+ // NB: active head is a module global here — fine for sequential prerender/SSG; concurrent live
130
+ // SSR scoping rides on the request context (a later pass).
131
+ const head = createHead();
132
+ setActiveHead(head);
133
+ return renderToStringAsync(() => app({ url: event.url ?? '/' }), { event, preload: preloadServerState }).then((body) => {
134
+ const marker = encodeHeadMarker(renderHead(head));
135
+ setActiveHead(null);
136
+ return marker + body;
137
+ }, (err) => {
138
+ setActiveHead(null);
139
+ throw err;
140
+ });
141
+ }
142
+ /** Render a full HTML document for a request. */
143
+ export function renderRequestToPage(app, event, options) {
144
+ return createHtmlDocument(renderRequest(app, event), options);
145
+ }
146
+ /**
147
+ * Render a request to a web `ReadableStream<Uint8Array>` — works in Node 18+,
148
+ * Deno, Bun, and edge/worker runtimes (which want a web stream, not a Node
149
+ * Readable). The document **shell** (`<head>` + open `<body>`) is flushed
150
+ * immediately so the browser can start loading assets, then the app HTML
151
+ * (awaiting data loaders/Suspense) and the closing tags follow.
152
+ *
153
+ * Progressive out-of-order Suspense streaming is a later pass; today the body is
154
+ * a single chunk emitted after the async render resolves.
155
+ */
156
+ export function renderToStream(app, event, options = {}) {
157
+ const encoder = new TextEncoder();
158
+ return new ReadableStream({
159
+ async start(controller) {
160
+ controller.enqueue(encoder.encode(documentShell(options))); // flush shell first
161
+ try {
162
+ const content = await renderRequestAsync(app, event); // awaits resources
163
+ controller.enqueue(encoder.encode(content));
164
+ }
165
+ catch (err) {
166
+ // SSR failed (e.g. backend down). The head/shell is already flushed (status 200),
167
+ // so we can't send a 500. Emit an EMPTY body and still close the document so it
168
+ // stays well-formed and the client bundle renders the app client-side (CSR
169
+ // fallback) — degrade, never blank-and-truncate.
170
+ console.error('[fluixi] SSR render failed — falling back to client render:', err);
171
+ }
172
+ controller.enqueue(encoder.encode(documentClose(options)));
173
+ controller.close();
174
+ },
175
+ });
176
+ }
177
+ /**
178
+ * Render a request to a web `ReadableStream<Uint8Array>` of JUST the app content —
179
+ * NO document shell. For hosts that own the surrounding HTML document (e.g. a
180
+ * `@fluixi/start` app streaming its `index.html` around the app body): the host
181
+ * flushes the document head first, then pipes this body stream into the mount point,
182
+ * then the document tail. The content includes the `__FX_DATA__` resource-transport
183
+ * script (it's part of the async render output), so hydration seeds without refetch.
184
+ *
185
+ * Single chunk today (the async render resolves fully before emitting); progressive
186
+ * out-of-order Suspense streaming is a later pass — same signature.
187
+ */
188
+ export function renderToBodyStream(app, event) {
189
+ const encoder = new TextEncoder();
190
+ return new ReadableStream({
191
+ async start(controller) {
192
+ try {
193
+ controller.enqueue(encoder.encode(await renderRequestAsync(app, event)));
194
+ }
195
+ catch (err) {
196
+ // SSR failed (e.g. backend down) and the host already flushed the document head.
197
+ // Emit an EMPTY body and close cleanly so the page stays well-formed and the
198
+ // client bundle renders the app client-side, instead of erroring/truncating the
199
+ // stream into a blank page.
200
+ console.error('[fluixi] SSR render failed — falling back to client render:', err);
201
+ }
202
+ controller.close();
203
+ },
204
+ });
205
+ }
206
+ /**
207
+ * Server entry helper — returns render/page closures bound to an app.
208
+ *
209
+ * @example
210
+ * import { startServer } from '@fluixi/server';
211
+ * import App from './app';
212
+ * const { render, page } = startServer(App);
213
+ * // express: res.send(page(req.url))
214
+ */
215
+ export function startServer(App) {
216
+ return {
217
+ render: (url) => renderRequest(App, { url }),
218
+ page: (url, opts) => renderRequestToPage(App, { url }, opts),
219
+ /** async render — awaits data loaders/Suspense */
220
+ renderAsync: (url) => renderRequestAsync(App, { url }),
221
+ /** async full-document render */
222
+ pageAsync: async (url, opts) => createHtmlDocument(await renderRequestAsync(App, { url }), opts),
223
+ /** web ReadableStream of the document (shell flushed first) */
224
+ stream: (url, opts) => renderToStream(App, { url }, opts),
225
+ /** web ReadableStream of the app body only (host owns the document) */
226
+ bodyStream: (url) => renderToBodyStream(App, { url }),
227
+ };
228
+ }
@@ -0,0 +1 @@
1
+ {"fileNames":["../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.d.ts","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/modules/index.d.ts","../../dom/dist/lib/dom/utils.d.ts","../../dom/dist/lib/dom/runtime.d.ts","../../reactive/dist/lib/observable/types.d.ts","../../reactive/dist/lib/observable/subscription.d.ts","../../reactive/dist/lib/observable/observable.d.ts","../../reactive/dist/lib/observable/index.d.ts","../../reactive/dist/lib/subject.d.ts","../../reactive/dist/lib/signal/graph/detect.d.ts","../../reactive/dist/lib/signal/graph/derived.d.ts","../../reactive/dist/lib/signal/graph/runtime.d.ts","../../reactive/dist/lib/signal/graph/compat.d.ts","../../reactive/dist/lib/signal/graph/children.d.ts","../../reactive/dist/lib/signal/graph/ssr-hooks.d.ts","../../reactive/dist/lib/signal/signal.d.ts","../../reactive/dist/lib/signal/list.d.ts","../../reactive/dist/lib/signal/graph/resource.d.ts","../../reactive/dist/lib/signal/graph/suspense.d.ts","../../reactive/dist/lib/signal/graph/error-boundary.d.ts","../../reactive/dist/lib/signal/graph/core.d.ts","../../reactive/dist/lib/signal/graph/index.d.ts","../../reactive/dist/lib/signal/graph/signal-next.d.ts","../../reactive/dist/lib/signal/index.d.ts","../../utils/dist/lib/maths/types/basic.d.ts","../../utils/dist/lib/maths/types/advanced.d.ts","../../utils/dist/lib/maths/types/negative.d.ts","../../utils/dist/lib/maths/types/operations.d.ts","../../utils/dist/lib/maths/types/index.d.ts","../../utils/dist/lib/maths/constants.d.ts","../../utils/dist/lib/maths/guards.d.ts","../../utils/dist/lib/maths/fn/basic.d.ts","../../utils/dist/lib/maths/fn/advanced.d.ts","../../utils/dist/lib/maths/fn/vector.d.ts","../../utils/dist/lib/maths/fn/complex.d.ts","../../utils/dist/lib/maths/fn/trigo.d.ts","../../utils/dist/lib/maths/fn/index.d.ts","../../utils/dist/lib/maths/formatter.d.ts","../../utils/dist/lib/maths/random.d.ts","../../utils/dist/lib/maths/parser.d.ts","../../utils/dist/lib/maths/index.d.ts","../../utils/dist/lib/primitive/string/string.d.ts","../../utils/dist/lib/primitive/string/types.d.ts","../../utils/dist/lib/primitive/string/index.d.ts","../../utils/dist/lib/primitive/boolean/types.d.ts","../../utils/dist/lib/primitive/boolean/boolean.d.ts","../../utils/dist/lib/primitive/boolean/index.d.ts","../../utils/dist/lib/primitive/date/types.d.ts","../../utils/dist/lib/primitive/date/date.d.ts","../../utils/dist/lib/primitive/date/index.d.ts","../../utils/dist/lib/primitive/types.d.ts","../../utils/dist/lib/primitive/index.d.ts","../../utils/dist/lib/object/types.d.ts","../../utils/dist/lib/object/object.d.ts","../../utils/dist/lib/object/diff.d.ts","../../utils/dist/lib/object/selector.d.ts","../../utils/dist/lib/object/merge.d.ts","../../utils/dist/lib/object/clone.d.ts","../../utils/dist/lib/object/getter-setter.d.ts","../../utils/dist/lib/object/omit.d.ts","../../utils/dist/lib/object/transform.d.ts","../../utils/dist/lib/object/reconcile.d.ts","../../utils/dist/lib/object/sort.d.ts","../../utils/dist/lib/object/utils.d.ts","../../utils/dist/lib/object/index.d.ts","../../reactive/dist/lib/store/setter.types.d.ts","../../reactive/dist/lib/store/types.d.ts","../../reactive/dist/lib/store/store.d.ts","../../reactive/dist/lib/store/utils.d.ts","../../reactive/dist/lib/store/index.d.ts","../../reactive/dist/lib/index.d.ts","../../reactive/dist/index.d.ts","../../dom/dist/lib/dom/types.d.ts","../../dom/dist/lib/dom/integration.d.ts","../../dom/dist/lib/dom/server/host.d.ts","../../dom/dist/lib/dom/island.d.ts","../../dom/dist/lib/dom/hydration.d.ts","../../dom/dist/lib/dom/hydration-state.d.ts","../../dom/dist/lib/dom/index.d.ts","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/development/css-tag.d.ts","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/development/reactive-controller.d.ts","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/development/reactive-element.d.ts","../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/development/directive.d.ts","../../../node_modules/.pnpm/@types+trusted-types@2.0.7/node_modules/@types/trusted-types/lib/index.d.ts","../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/development/lit-html.d.ts","../../../node_modules/.pnpm/lit-element@4.2.2/node_modules/lit-element/development/lit-element.d.ts","../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/development/is-server.d.ts","../../../node_modules/.pnpm/lit@3.3.3/node_modules/lit/development/index.d.ts","../../dom/dist/lib/shared/types.d.ts","../../dom/dist/lib/component/modifiers.d.ts","../../dom/dist/lib/component/index.d.ts","../../dom/dist/lib/flow/show.d.ts","../../dom/dist/lib/flow/for.d.ts","../../dom/dist/lib/flow/index-flow.d.ts","../../dom/dist/lib/flow/switch.d.ts","../../dom/dist/lib/flow/dynamic.d.ts","../../dom/dist/lib/flow/portal.d.ts","../../dom/dist/lib/flow/error-boundary.d.ts","../../dom/dist/lib/flow/class-map.d.ts","../../dom/dist/lib/flow/style-map.d.ts","../../dom/dist/lib/flow/index.d.ts","../../dom/dist/lib/dom/server/nodes.d.ts","../../dom/dist/lib/dom/server/serialize.d.ts","../../dom/dist/lib/dom/server/fx-data.d.ts","../../dom/dist/lib/dom/server/request-context.d.ts","../../dom/dist/lib/dom/server/render.d.ts","../../dom/dist/lib/dom/server/index.d.ts","../../dom/dist/lib/index.d.ts","../../dom/dist/index.d.ts","../../head/dist/types.d.ts","../../head/dist/core.d.ts","../../head/dist/serialize.d.ts","../../head/dist/transport.d.ts","../../head/dist/reconcile.d.ts","../../head/dist/jsonld.d.ts","../../head/dist/components.d.ts","../../head/dist/sitemap.d.ts","../../head/dist/index.d.ts","../src/index.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/dom-events.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/inspector.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/globals.global.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/index.d.ts"],"fileIdsList":[[219],[133,134,219],[173,219],[176,219],[177,182,210,219],[178,189,190,197,207,218,219],[178,179,189,197,219],[180,219],[181,182,190,198,219],[182,207,215,219],[183,185,189,197,219],[184,219],[185,186,219],[189,219],[187,189,219],[189,190,191,207,218,219],[189,190,191,204,207,210,219],[219,223],[185,189,192,197,207,218,219],[189,190,192,193,197,207,215,218,219],[192,194,207,215,218,219],[173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225],[189,195,219],[196,218,219],[185,189,197,207,219],[198,219],[199,219],[176,200,219],[201,217,219,223],[202,219],[203,219],[189,204,205,219],[204,206,219,221],[177,189,207,208,209,210,219],[177,207,209,219],[207,208,219],[210,219],[211,219],[189,213,214,219],[213,214,219],[182,197,207,215,219],[216,219],[197,217,219],[177,192,203,218,219],[182,219],[207,219,220],[219,221],[219,222],[177,182,189,191,200,207,218,219,221,223],[207,219,224],[135,138,219],[138,219],[136,137,219],[135,138,139,140,219],[54,219],[161,219],[143,219],[56,57,126,127,128,129,130,131,219],[126,219],[128,155,156,157,158,159,219],[128,219],[158,219],[125,219],[77,219],[77,145,146,147,148,149,150,151,152,153,219],[126,127,132,142,144,154,160,219],[141,219],[163,219],[77,163,219],[163,164,165,166,167,168,169,170,219],[164,219],[165,219],[124,219],[61,62,77,123,219],[58,59,60,219],[59,219],[58,219],[66,219],[65,219],[69,219],[74,219],[63,64,65,66,67,68,69,70,71,72,73,75,219],[76,219],[60,63,64,67,68,219],[120,121,122,219],[118,219],[60,77,119,120,219],[120,219],[61,219],[55,162,171,219],[79,219],[78,219],[85,86,87,88,89,219],[82,219],[82,83,84,90,91,92,93,219],[78,79,81,219],[78,80,219],[106,219],[106,107,108,109,110,111,112,113,114,115,116,117,219],[94,105,219],[105,106,219],[98,219],[98,99,219],[101,219],[101,102,219],[97,100,103,104,219],[95,96,219]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"092c2bfe125ce69dbb1223c85d68d4d2397d7d8411867b5cc03cec902c233763","affectsGlobalScope":true,"impliedFormat":1},{"version":"07f073f19d67f74d732b1adea08e1dc66b1b58d77cb5b43931dee3d798a2fd53","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6a5253138c5432c68a1510c70fe78a644fe2e632111ba778e1978010d6edfec","impliedFormat":1},{"version":"b8f34dd1757f68e03262b1ca3ddfa668a855b872f8bdd5224d6f993a7b37dc2c","impliedFormat":99},{"version":"8fe10058c65480f8667d1099d1ca25c75f07091ae303f287eda65bb622d7e1d5","impliedFormat":99},{"version":"13bb96268e358a7e2a50476df6db22b4258ec01edbd3f9de3ed2fafffed11e1d","impliedFormat":99},{"version":"e592cf1b998ce8043e72ca38e2f40c5631e65e937e3102223f7086140bf979a3","impliedFormat":99},{"version":"0ceea501c52cdf869e3562ea96fca2785a3394a9e1e446afb5e11092ad2dc7fc","impliedFormat":99},{"version":"ebe92631232ee90bd0cd2668b349a8ecf869a42f94aa5a80505aaf7833be6819","impliedFormat":99},{"version":"e6597aaf78157a53337c8794d2f7eee5eecef77a6ec0c60480c74a936811fa36","impliedFormat":99},{"version":"7112073e38bc7d171cbc5530734f550065ecbc76eb302319c5e8a06105dae5bb","impliedFormat":99},{"version":"892323d83df6c419a9f961e7156e70184b4a27638de72f7b92931ab3c165298e","impliedFormat":99},{"version":"ed51ea7ddcddfe0523b5a8d3112c55f8494f3f419ad6b830a1aac7dfe499a8ab","impliedFormat":99},{"version":"f930ceeb25ec3a15c78ff12771c202a67164e232a5b588635c89603c6c961928","impliedFormat":99},{"version":"96e415a91946f00ac400e74dfeb26b575aade405169df35621a822e6b4d5abf0","impliedFormat":99},{"version":"e8be3e24c3b98c301590ee0fefc462accc9a0f1fa674f62a3b63be9786ef9a99","impliedFormat":99},{"version":"e08f70018aeffb92654e466522e4b194b712da2091b20bdb0922c8441f2a43b7","impliedFormat":99},{"version":"97b4ab5a8db570e67a3a764a456486d97b8808b658e0e0a3eb9e38b63270d086","impliedFormat":99},{"version":"1f33d92b487c119aee6f7cf04ac95c0dab317c228b388fead9d7d87540f8adf7","impliedFormat":99},{"version":"e972de4985925f07d08dfb7eb73a400506f75b3596cac60591fab948eade26b7","impliedFormat":99},{"version":"c03135439ad665f4a011a75586bf96098f6fe0b0716e78afc8cdf651bcc8f879","impliedFormat":99},{"version":"290111961dc134d534be036cd591c09a0e65ceed2fcf9aa9666ae2bcdac7034f","impliedFormat":99},{"version":"ac292cffbb31f9c76b09f7b0c630cfc2b9c7e5070dfc4472cfc60023ec447bd2","impliedFormat":99},{"version":"ac23329299d15c989ebe7e62bb1858a58de39aa3cd4fb1265e93ddc6d9631b07","impliedFormat":99},{"version":"16b49126ba492eb0b4abc93a518addf8ca7e850bed2fc56c111ffa768d23113e","impliedFormat":99},{"version":"1122b4ca26147813c76ac7a2f38911854cb2bd5cf0af003f578175f3db1c3aee","impliedFormat":99},{"version":"631287e5e4a8a6ff2348789b7d2d00944c0f09ff3fed60cc3642323a1ff0ed4a","impliedFormat":99},{"version":"4f24eafbd6e05dd55f4597c6d286171fbe5066785625c482ab5c5cbba2fc7487","impliedFormat":99},{"version":"e9ad8fb60df94fd4f929f944a12d496271d6523e69d5ad4de20fc080a0a30711","impliedFormat":99},{"version":"a928f91a183425984c472e4d2763f7649e8d63c92c74a2fa59482ad8905bc664","impliedFormat":99},{"version":"c323e45a420e39e384e86db3e4470969016e8f507e04a9ceff1f073d8e5efeff","impliedFormat":99},{"version":"120b522225d94dea3356d056952f0ca9c626a4643a7734fbff1b031f16a0cb65","impliedFormat":99},{"version":"52a743346fe3f9758188a0ba974989e2ec948d8bb145539b6b6d6058204f2612","impliedFormat":99},{"version":"b19bb5d1b4f1ed34aad8e57dc096f7f333dc2fccb0a86633b9c8405c4797b190","impliedFormat":99},{"version":"fde9c3aaca2fb4f489fe2c25d3d0a5d56c145272cf92c6fd1f39f41589d9d0b1","impliedFormat":99},{"version":"2289a9520455d5a74bff1f23ddf0bee2593baedb8b9cda9c3e8720ca66338f65","impliedFormat":99},{"version":"1ff7de3d6cb03553a07592092fcd7a0ed61a88c6be9f5344239ac247be712cfd","impliedFormat":99},{"version":"b071dcadeb17235e2a1116231ca370bac5c97ec090fc73b3736791cb0a2aa91d","impliedFormat":99},{"version":"b4ed0f4d07ca274437eb9d49400de8c81659760e59507f08b94442873eb49a25","impliedFormat":99},{"version":"88978beb444b1d65c0f48d1099717d2a935ce74d9e3e1411bcaa1fe497910ab6","impliedFormat":99},{"version":"712fdf289306e77c2c097843e29560d99ff83bd336da277498ea18ca8cd999f0","impliedFormat":99},{"version":"ceb05e55219637c8dcb77490777c52e537363adc0a060af39cc95d46310f2128","impliedFormat":99},{"version":"a1b05ca68a811afb49605cf1346a53efadc4ec6269caf9e19d97bee4543f1479","impliedFormat":99},{"version":"4e454ae8246e2b13c51c12adaccda8d0fe8e36e120d4e5bbc554021244240fdb","impliedFormat":99},{"version":"4edc87837b7285fe2141b92b492ecc6428a5fc152d7d013af9d0e7017e78befa","impliedFormat":99},{"version":"20e3c2b6bfdfbde9073c6309992943094ab954bd50954c2561daa4d377c78bbc","impliedFormat":99},{"version":"de969e2fcf0e6bfe70c844762f81e47e713dfdf3f1b8ed89378ff3865e78f16d","impliedFormat":99},{"version":"7349d52ef2d997de63d4298417883a9ae8d94ad2d6b0a1ad4a11971fbf01ec3d","impliedFormat":99},{"version":"1673bc6ee9b15e4bc9e4de777b1497bd1ec544d6939061ce7a25de9a0c09565d","impliedFormat":99},{"version":"73eae9a32499f88a8c73cedd49a43ecf441116bb55c7a150f346e333b35c687b","impliedFormat":99},{"version":"9b1c12fce85d708544c70e12e0d8ca6c4a9b27690a27448577b9f4053c49908d","impliedFormat":99},{"version":"68e1a72149e6384295c078bdb945bc3238afcaeb850be14f3ba0571661addf82","impliedFormat":99},{"version":"abc4efc89e29e107946fd0a40b96c4c862d4d340c4c26dd7647183568c3e33c3","impliedFormat":99},{"version":"e1cb7303d3d49535d39fac5d8ded4b5e5e430526eb8a44411cfec3694eae6223","impliedFormat":99},{"version":"1fb68873fd2a769163972685c0516cb3f88fcedd57409f285dfe7c71be13cbbd","impliedFormat":99},{"version":"6685db351c23e0cb6cec2426ea1680a41d29c1633d722c7d7621207c55f6491e","impliedFormat":99},{"version":"cc74864af16373ee02499f7e65758f13f903d37aa1e13e7ad5598facc70dc274","impliedFormat":99},{"version":"71830cf6fc186afa64f4d6d015eed23c78a3af68bd8dc770ffa4d5cee77744b3","impliedFormat":99},{"version":"72ff78881cb1d71790e047eba022ce05845b7dd05e94ba64267dc478ce1457f1","impliedFormat":99},{"version":"fdf1008f43e52d69c62571db0aaa782604dca7e7c2206825a9f46ada5154b610","impliedFormat":99},{"version":"9b3b063cf484aa4088728e28f73f98c7b8fa267debd6f289acec4d70f5977253","impliedFormat":99},{"version":"fe21672b2e8f8ad092ba5ca8ecc4c83f3952dd5144e459f1f001dfdac2f9e7a5","impliedFormat":99},{"version":"95b067197bb5c2f7ca7ee0ede9be77c4724aa09687b75d6e8cacf0904ff565f9","impliedFormat":99},{"version":"3ab7a86cdb01a3f6d3845a82add1feee0ec6b0620fde0224ada4ab929f459b61","impliedFormat":99},{"version":"0c40740c1cb8ae5f8a74182579c5a392f7e0ce20826d1a4907417e6929e20666","impliedFormat":99},{"version":"ea7a689828afde6f1565f81d9a675c48daa0b91c36020aaeef7193b8769cccf9","impliedFormat":99},{"version":"4c362ca187c7fc9d6a986d33da9966cac1738dc14f8da9f1315b0703214f7be5","impliedFormat":99},{"version":"45d0b9f6985725909f26094b518f6e5017ecc9fff784fb71792addb7c90c70bf","impliedFormat":99},{"version":"62512a36ef5e3ed8dca2f7ac0800e2d3bd461025c7b4ae5539cd871258dcd00c","impliedFormat":99},{"version":"f431bb373494e78c5e01546c80fc41921ca9b24386c388da802a2afbe9705392","impliedFormat":99},{"version":"07a2317b33ba403c06f14a9c8cf0ed93a83d85d22ffc64cab4452327a1e08e24","impliedFormat":99},{"version":"415f940ff9853f2e98ac9864385e88ac819ae9dda1a1ca69c8cdb170054b2820","impliedFormat":99},{"version":"f6e6e7e47824c8366b0cad7f6582ac611143a12bac48ecff2f6b88ff78187d68","impliedFormat":99},{"version":"9a6c3e2900643e20e37b47f712af6420048e737db80c1975707cfde23681b2c9","impliedFormat":99},{"version":"3f06e42c5281bc88f1de705b90b69da10d106a09296ae2bda90e62b5cc0e8cc8","impliedFormat":99},{"version":"73f3a592934d6163184e94890ac9c369ff8d4338e57cdad77a1b775830a06642","impliedFormat":99},{"version":"9dbe39e850dcc9124b71341467f46bb1a0f34e0e15066291bd8f98ec15c03280","impliedFormat":99},{"version":"746a5c6e2eb8982e2b0cd37bab36ff773d1e9f84abd8244a598f9af0d2ecfe9f","impliedFormat":99},{"version":"9f41d91eeb174fefed6f6317fe406b39be79e87f7c4de3388e6657ea797e8b8c","impliedFormat":99},{"version":"4c0bfb5426c29cbb62fef9241e667b70a7350086ac62b64c3dc94a7985af4c72","impliedFormat":99},{"version":"d211c8d3dbf70442d54e6b5ea5bbfb3e394001d8c802b842a7ced12c1c7d536c","impliedFormat":99},{"version":"74012d464fbc5354ca3a7d5e71bee43b17da01a853c8ff10971bbe3680c76f40","impliedFormat":99},{"version":"5e30131b6a5587fe666926ad1d9807e733c0a597ed12d682669fcaa331aea576","impliedFormat":99},{"version":"a0f82d2f9450bd147a8c137798d9501bd49b7c9e118f75b07b76709ff39b6b55","affectsGlobalScope":true,"impliedFormat":99},{"version":"00cb63103f9670f8094c238a4a7e252c8b4c06ba371fea5c44add7e41b7247e4","impliedFormat":99},{"version":"15fe687c59d62741b4494d5e623d497d55eb38966ecf5bea7f36e48fc3fbe15e","impliedFormat":1},{"version":"e09db3291e6b440f7debed2227d8357e80c95987a0d0d67ac17521d8f7b11bdb","impliedFormat":99},{"version":"9a318e3a8900672b85cd3c8c3a5acf51b88049557a3ae897ccdcf2b85a8f61f9","impliedFormat":99},{"version":"1bcd560deed90a43c51b08aa18f7f55229f2e30974ab5ed1b7bb5721be379013","impliedFormat":99},{"version":"dc08fe04e50bc24d1baded4f33e942222bbdd5d77d6341a93cfe6e4e4586a3be","impliedFormat":99},{"version":"35b2e19d086f311343f1ffae8a1bd1f0fd4f70de2f49d9605241c4f74b53ddc2","impliedFormat":99},{"version":"5a2fad844d16083a48af5d82bffb196e7bdd6f44e46e80f552e16b170c4a8f71","impliedFormat":99},{"version":"c6650df9082a55ae635b96b371b9957d8eafbc12ffdbc0e0b77f0b002fdd8e7f","impliedFormat":99},{"version":"326daff479c598c3230df94051092329abffd458689dc3cce3f21b767b499d99","impliedFormat":99},{"version":"9291566976678663eb96b938d284bf09d2139043d0d7d0976cffbdcbe44f0d0e","impliedFormat":99},{"version":"213b1ac213e38d56741eee5e31ca39ee579d7489084e7c30486fe3b3b9684028","impliedFormat":99},{"version":"0e416bf225e5eb5ec5b58e890d34d9c645feb834b95b73bd767d9a1526e58fbf","impliedFormat":99},{"version":"44b89266a40c97f4d533e43a64342d12b7f03c818b0ea0b5ed3314f27a5ea3c1","impliedFormat":99},{"version":"9c44147ff2f963a6a6430664b8073eba81fe22adfdceefe5d4b94c58a1744247","impliedFormat":99},{"version":"1e46f8f10c9d81c3c36accfe6076d8abd35e6218d28e3f7deadd08e2cf99857a","impliedFormat":99},{"version":"91ef71cd917ce22fd4a3f7fac1094bd492dcc85e7e4646af6a982268fbb5f89b","impliedFormat":99},{"version":"04353aa31b2939f6ff9a67ad4937896b2ff275852248d2549731e05fc9ea3fe0","impliedFormat":99},{"version":"f3209b787ae8fb62327ebc904a12ee79ae0638a3c423d66b4f5186ff08b891a0","impliedFormat":99},{"version":"8da735bbcdf3eef496c20933a969c898c45abf151d6ef9f1a3f719eb54495e59","impliedFormat":99},{"version":"cca8d9f11c7209da2e992525500746ff81ccb0e74597dc482338b56bbca43977","impliedFormat":99},{"version":"09eea8ae8576e45b470e9506ef332fc71e07dca2dd3c8b4da89fc9ef9d3cc0b0","impliedFormat":99},{"version":"e9e4b5e403d534250d1ae0cfc12a3b14b975a106886ddcafc4c1b44fe362000a","impliedFormat":99},{"version":"963c208c61e15b6a1226512b80a2a63aa80d9195956b0a087e6fe382eeb7b3ba","impliedFormat":99},{"version":"4b6a4593207c56d2da0a64f8f5ce34c54b7af90754c9e5964f696e72f0037530","impliedFormat":99},{"version":"30295332c8cc2b18f1691fb3f9785e48ea3b7d7b544c915b666b8963a414162d","impliedFormat":99},{"version":"73cbc0a2e4774f7128943e055cdce1195b4a66587d8f00e5b7ce64fd5423584a","impliedFormat":99},{"version":"24f1729f5f6ac5f7ffa0af00cda41d8829a669dba666ae844640d85bbd1ccf31","impliedFormat":99},{"version":"c754353736627d493d87b015e9a1644b1017192184bef4a872df9f588264302b","impliedFormat":99},{"version":"2932ca1163434a0518e079bc06ea83f012a9275094967cf9351bd321b4d498fe","impliedFormat":99},{"version":"a6750496dd5b35c94c23fb93b8b526bfe4553ba72ae9c682696f2e8d40516020","impliedFormat":99},{"version":"f0ccb7165e12cdc7a8e9456aad79d5d875fbf5cf342809b33f315c133f09c2fa","impliedFormat":99},{"version":"411e31a03a0069f6ef923d114cefc6e614bdf037662428576d5f8c5451108c2b","impliedFormat":99},{"version":"880db5da134fcf5169e7f4ad553ab850c2eba41892bd9f4f8ebd68f554459051","impliedFormat":99},{"version":"61438cfd151f86ee0ce8133fd1f4707cdd09a924852dae7e3875046bf83cef1e","impliedFormat":99},{"version":"fa2aae455473d171334f3d5ab16547787cca9cde77ccea46bf14db600d5947e3","impliedFormat":99},{"version":"7ab6f43519bf87e0d1c33eb58053eb9774414efef1353e05f853ed9ca676ec74","signature":"7f00b121429a775c13187de037e43e7e922ca9fc993c9d23484b93515f513a14","impliedFormat":99},{"version":"7e771891adaa85b690266bc37bd6eb43bc57eecc4b54693ead36467e7369952a","impliedFormat":1},{"version":"a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a","impliedFormat":1},{"version":"f749812878fecfa53cfc13b36e5d35086fb6377983a9df44175da83ccc23af1f","affectsGlobalScope":true,"impliedFormat":1},{"version":"7d2e3fea24c712c99c03ad8f556abedbfe105f87f1be10b95dbd409d24bc05a3","impliedFormat":1},{"version":"211e3f15fbced4ab4be19f49ffa990b9ff20d749d33b65ff753be691e7616239","affectsGlobalScope":true,"impliedFormat":1},{"version":"3719525a8f6ab731e3dfd585d9f87df55ec7d50d461df84f74eb4d68bb165244","impliedFormat":1},{"version":"5a94487653355b56018122d92392beb2e5f4a6c63ba5cef83bbe1c99775ef713","impliedFormat":1},{"version":"d5135ad93b33adcce80b18f8065087934cdc1730d63db58562edcf017e1aad9b","affectsGlobalScope":true,"impliedFormat":1},{"version":"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","impliedFormat":1},{"version":"e596c9bb2f29a2699fdd4ae89139612652245192f67f45617c5a4b20832aaae9","impliedFormat":1},{"version":"bb9c4ffa5e6290c6980b63c815cdd1625876dadb2efaf77edbe82984be93e55e","impliedFormat":1},{"version":"1cdcfc1f624d6c08aa12c73935f6e13f095919cd99edf95752951796eb225729","impliedFormat":1},{"version":"4eaff3d8e10676fd7913d8c108890e71c688e1e7d52f6d1d55c39514f493dc47","impliedFormat":1},{"version":"14b5aa23c5d0ae1907bc696ac7b6915d88f7d85799cc0dc2dcf98fbce2c5a67c","impliedFormat":1},{"version":"5c439dafdc09abe4d6c260a96b822fa0ba5be7203c71a63ab1f1423cd9e838ea","impliedFormat":1},{"version":"6b526a5ec4a401ca7c26cfe6a48e641d8f30af76673bad3b06a1b4504594a960","affectsGlobalScope":true,"impliedFormat":1},{"version":"00dee7cdca8b8420c47ea4a31a34b8e8294013ebc4f463fd941e867e7bf05029","affectsGlobalScope":true,"impliedFormat":1},{"version":"3256f3cccd578f9e7fe3a28096c505634bebcee8afb738ffa99368e536ca3a0b","impliedFormat":1},{"version":"1c84b46267610a34028edfd0d035509341751262bac1062857f3c8df7aff7153","impliedFormat":1},{"version":"7f138842074d0a40681775af008c8452093b68c383c94de31759e853c6d06b5c","impliedFormat":1},{"version":"a3d541d303ee505053f5dcbf9fafb65cac3d5631037501cd616195863a6c5740","impliedFormat":1},{"version":"8d3c583a07e0c37e876908c2d5da575019f689df8d9fa4c081d99119d53dba22","impliedFormat":1},{"version":"2c828a5405191d006115ab34e191b8474bc6c86ffdc401d1a9864b1b6e088a58","impliedFormat":1},{"version":"e630e5528e899219ae319e83bef54bf3bcb91b01d76861ecf881e8e614b167f0","affectsGlobalScope":true,"impliedFormat":1},{"version":"bcebb922784739bdb34c18ee51095d25a92b560c78ccd2eaacd6bd00f7443d83","impliedFormat":1},{"version":"7ee6ed878c4528215c82b664fe0cfe80e8b4da6c0d4cc80869367868774db8b1","impliedFormat":1},{"version":"b0973c3cbcdc59b37bf477731d468696ecaf442593ec51bab497a613a580fe30","impliedFormat":1},{"version":"4989e92ba5b69b182d2caaea6295af52b7dc73a4f7a2e336a676722884e7139d","affectsGlobalScope":true,"impliedFormat":1},{"version":"0715e4cd28ad471b2a93f3e552ff51a3ae423417a01a10aa1d3bc7c6b95059d6","affectsGlobalScope":true,"impliedFormat":1},{"version":"5153a2fd150e46ce57bb3f8db1318d33f6ad3261ed70ceeff92281c0608c74a3","impliedFormat":1},{"version":"210d54cd652ec0fec8c8916e4af59bb341065576ecda039842f9ffb2e908507c","impliedFormat":1},{"version":"36b03690b628eab08703d63f04eaa89c5df202e5f1edf3989f13ad389cd2c091","impliedFormat":1},{"version":"0effadd232a20498b11308058e334d3339cc5bf8c4c858393e38d9d4c0013dcf","impliedFormat":1},{"version":"25846d43937c672bab7e8195f3d881f93495df712ee901860effc109918938cc","impliedFormat":1},{"version":"4f3fdeba4e28e21aa719c081b8dc8f91d47e12e773389b9d35679c08151c9d37","impliedFormat":1},{"version":"1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff","impliedFormat":1},{"version":"69ee23dd0d215b09907ad30d23f88b7790c93329d1faf31d7835552a10cf7cbf","impliedFormat":1},{"version":"44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","impliedFormat":1},{"version":"23b89798789dffbd437c0c423f5d02d11f9736aea73d6abf16db4f812ff36eda","impliedFormat":1},{"version":"f69ff39996a61a0dd10f4bce73272b52e8024a4d58b13ab32bf4712909d0a2b7","impliedFormat":1},{"version":"3c4ba1dd9b12ffa284b565063108f2f031d150ea15b8fafbdc17f5d2a07251f3","affectsGlobalScope":true,"impliedFormat":1},{"version":"e10177274a35a9d07c825615340b2fcde2f610f53f3fb40269fd196b4288dda6","impliedFormat":1},{"version":"1422cd9e705adcc09088fda85a900c2b70e3ad36ea85846f68bd1a884cdf4e2b","impliedFormat":1},{"version":"3c13ef48634e7b5012fcf7e8fce7496352c2d779a7201389ca96a2a81ee4314d","impliedFormat":1},{"version":"5d0a25ec910fa36595f85a67ac992d7a53dd4064a1ba6aea1c9f14ab73a023f2","impliedFormat":1},{"version":"a73ae8c0e62103bb9e21bb6538700881bf135b9a8b125b857ec68edfa0da4ed3","affectsGlobalScope":true,"impliedFormat":1},{"version":"e1c1b2fbe236bf7ee3e342eeae7e20efb8988a0ac7da1cbbfa2c1f66b76c3423","affectsGlobalScope":true,"impliedFormat":1},{"version":"868831cab82b65dfe1d68180e898af1f2101e89ba9b754d1db6fb8cc2fac1921","impliedFormat":1},{"version":"0fe8985a28f82c450a04a6edf1279d7181c0893f37da7d2a27f8efd4fd5edb03","impliedFormat":1},{"version":"e59a892d87e72733e2a9ca21611b9beb52977be2696c7ba4b216cbbb9a48f5aa","impliedFormat":1},{"version":"52120bb7e4583612225bdf08e7c12559548170f11e660d33a33623bae9bbdbba","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a300fa9b698845a1f9c41ecbe2c5966634582a8e2020d51abcace9b55aa959e","impliedFormat":1},{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6dd3dba8e665ac43d279e0fdf5219edda0eed69b5e9a5061f46cd6a65c4f7a1","impliedFormat":1}],"root":[172],"options":{"composite":true,"declarationMap":true,"emitDeclarationOnly":false,"importHelpers":true,"module":199,"noEmitOnError":true,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noImplicitReturns":true,"noUnusedLocals":false,"noUnusedParameters":false,"outDir":"./","rootDir":"../src","skipLibCheck":true,"strict":true,"target":9,"tsBuildInfoFile":"./tsconfig.lib.tsbuildinfo"},"referencedMap":[[133,1],[134,1],[135,2],[173,3],[174,3],[176,4],[177,5],[178,6],[179,7],[180,8],[181,9],[182,10],[183,11],[184,12],[185,13],[186,13],[188,14],[187,15],[189,14],[190,16],[191,17],[175,18],[225,1],[192,19],[193,20],[194,21],[226,22],[195,23],[196,24],[197,25],[198,26],[199,27],[200,28],[201,29],[202,30],[203,31],[204,32],[205,32],[206,33],[207,34],[209,35],[208,36],[210,37],[211,38],[212,1],[213,39],[214,40],[215,41],[216,42],[217,43],[218,44],[219,45],[220,46],[221,47],[222,48],[223,49],[224,50],[137,1],[139,51],[136,52],[140,1],[138,53],[141,54],[55,55],[54,1],[52,1],[53,1],[9,1],[10,1],[12,1],[11,1],[2,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[3,1],[21,1],[22,1],[4,1],[23,1],[27,1],[24,1],[25,1],[26,1],[28,1],[29,1],[30,1],[5,1],[31,1],[32,1],[33,1],[34,1],[6,1],[38,1],[35,1],[36,1],[37,1],[39,1],[7,1],[40,1],[45,1],[46,1],[41,1],[42,1],[43,1],[44,1],[8,1],[50,1],[47,1],[48,1],[49,1],[1,1],[51,1],[162,56],[144,57],[143,1],[131,1],[130,1],[132,58],[127,59],[129,1],[57,1],[157,1],[128,1],[160,60],[155,61],[159,62],[158,1],[156,1],[126,63],[56,1],[152,64],[149,64],[151,64],[146,64],[147,64],[154,65],[150,1],[145,64],[153,64],[148,64],[161,66],[142,67],[169,68],[164,69],[171,70],[168,1],[167,71],[165,71],[170,1],[166,72],[163,64],[125,73],[124,74],[61,75],[60,76],[59,77],[58,76],[67,78],[66,79],[74,1],[64,80],[63,80],[73,79],[75,81],[71,1],[65,1],[76,82],[68,1],[72,79],[77,83],[70,78],[69,84],[123,85],[119,86],[121,87],[120,1],[122,88],[62,89],[172,90],[83,1],[86,91],[85,92],[88,91],[90,93],[89,92],[87,91],[91,1],[84,94],[94,95],[93,1],[92,1],[79,92],[78,1],[82,96],[80,1],[81,97],[111,1],[108,98],[112,98],[118,99],[110,98],[107,98],[113,98],[115,1],[109,98],[116,98],[114,98],[106,100],[117,101],[99,102],[100,103],[98,1],[102,104],[103,105],[101,1],[105,106],[97,107],[95,1],[96,1],[104,1]],"latestChangedDtsFile":"./index.d.ts","version":"5.8.3"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@fluixi/server",
3
+ "version": "1.0.0-alpha.53",
4
+ "repository": {
5
+ "type": "git",
6
+ "url": "https://github.com/fluixi/core.git",
7
+ "directory": "packages/server"
8
+ },
9
+ "private": false,
10
+ "publishConfig": {
11
+ "registry": "https://registry.npmjs.org/",
12
+ "access": "public"
13
+ },
14
+ "type": "module",
15
+ "main": "./dist/index.js",
16
+ "module": "./dist/index.js",
17
+ "types": "./dist/index.d.ts",
18
+ "files": [
19
+ "dist",
20
+ "README.md"
21
+ ],
22
+ "exports": {
23
+ "./package.json": "./package.json",
24
+ ".": {
25
+ "types": "./dist/index.d.ts",
26
+ "import": "./dist/index.js",
27
+ "default": "./dist/index.js"
28
+ }
29
+ },
30
+ "dependencies": {
31
+ "@fluixi/head": "0.1.0-alpha.20"
32
+ },
33
+ "peerDependencies": {
34
+ "@fluixi/dom": "1.0.0-alpha.53",
35
+ "@fluixi/reactive": "1.0.0-alpha.53"
36
+ },
37
+ "devDependencies": {
38
+ "@fluixi/dom": "1.0.0-alpha.53",
39
+ "@fluixi/reactive": "1.0.0-alpha.53"
40
+ },
41
+ "scripts": {
42
+ "test": "vitest run",
43
+ "build": "tsc -p tsconfig.lib.json"
44
+ }
45
+ }