@fluxfast/react 0.0.0-oidc-bootstrap.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +52 -0
- package/dist/client.d.ts +10 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +41 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +17 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +3 -0
- package/dist/config.js.map +1 -0
- package/dist/document.d.ts +7 -0
- package/dist/document.d.ts.map +1 -0
- package/dist/document.js +10 -0
- package/dist/document.js.map +1 -0
- package/dist/esm/client.js +35 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/config.js +2 -0
- package/dist/esm/config.js.map +1 -0
- package/dist/esm/document.js +7 -0
- package/dist/esm/document.js.map +1 -0
- package/dist/esm/form.js +204 -0
- package/dist/esm/form.js.map +1 -0
- package/dist/esm/hooks.js +50 -0
- package/dist/esm/hooks.js.map +1 -0
- package/dist/esm/hydration.js +40 -0
- package/dist/esm/hydration.js.map +1 -0
- package/dist/esm/index.js +11 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/link.js +61 -0
- package/dist/esm/link.js.map +1 -0
- package/dist/esm/live.js +17 -0
- package/dist/esm/live.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/provider.js +77 -0
- package/dist/esm/provider.js.map +1 -0
- package/dist/esm/resolver.js +31 -0
- package/dist/esm/resolver.js.map +1 -0
- package/dist/esm/root.js +40 -0
- package/dist/esm/root.js.map +1 -0
- package/dist/esm/server/handler.js +115 -0
- package/dist/esm/server/handler.js.map +1 -0
- package/dist/esm/server/index.js +4 -0
- package/dist/esm/server/index.js.map +1 -0
- package/dist/esm/server/render.js +70 -0
- package/dist/esm/server/render.js.map +1 -0
- package/dist/form.d.ts +31 -0
- package/dist/form.d.ts.map +1 -0
- package/dist/form.js +207 -0
- package/dist/form.js.map +1 -0
- package/dist/hooks.d.ts +20 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +58 -0
- package/dist/hooks.js.map +1 -0
- package/dist/hydration.d.ts +5 -0
- package/dist/hydration.d.ts.map +1 -0
- package/dist/hydration.js +44 -0
- package/dist/hydration.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/link.d.ts +10 -0
- package/dist/link.d.ts.map +1 -0
- package/dist/link.js +65 -0
- package/dist/link.js.map +1 -0
- package/dist/live.d.ts +5 -0
- package/dist/live.d.ts.map +1 -0
- package/dist/live.js +20 -0
- package/dist/live.js.map +1 -0
- package/dist/provider.d.ts +22 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +82 -0
- package/dist/provider.js.map +1 -0
- package/dist/resolver.d.ts +13 -0
- package/dist/resolver.d.ts.map +1 -0
- package/dist/resolver.js +39 -0
- package/dist/resolver.js.map +1 -0
- package/dist/root.d.ts +15 -0
- package/dist/root.d.ts.map +1 -0
- package/dist/root.js +43 -0
- package/dist/root.js.map +1 -0
- package/dist/server/handler.d.ts +20 -0
- package/dist/server/handler.d.ts.map +1 -0
- package/dist/server/handler.js +118 -0
- package/dist/server/handler.js.map +1 -0
- package/dist/server/index.d.ts +6 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +9 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/render.d.ts +11 -0
- package/dist/server/render.d.ts.map +1 -0
- package/dist/server/render.js +77 -0
- package/dist/server/render.js.map +1 -0
- package/package.json +72 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 FluxFast Contributors
|
|
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,52 @@
|
|
|
1
|
+
# @fluxfast/react
|
|
2
|
+
|
|
3
|
+
Host-independent React bindings introduced in FluxFast 1.2. These bindings are
|
|
4
|
+
shared by the Next.js and React/Vite hosts, not a standalone HTTP server.
|
|
5
|
+
Existing Next.js applications continue importing `@fluxfast/next`;
|
|
6
|
+
that adapter re-exports the same context, components, hooks, and types.
|
|
7
|
+
|
|
8
|
+
FastAPI owns application URLs, authentication, resource loading, validation,
|
|
9
|
+
and mutations. These bindings subscribe to `@fluxfast/core`; they do not
|
|
10
|
+
introduce another router or resource cache. A host supplies SSR, the HTML
|
|
11
|
+
document, safe serialization, hydration, assets, and same-origin transport.
|
|
12
|
+
|
|
13
|
+
## Render a server-selected page
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
import { FluxRoot, useResource, type FluxApplicationProps } from "@fluxfast/react";
|
|
17
|
+
|
|
18
|
+
function Rooms() {
|
|
19
|
+
const rooms = useResource<Array<{ id: number; name: string }>>("rooms");
|
|
20
|
+
return <ul>{rooms.map(room => <li key={room.id}>{room.name}</li>)}</ul>;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function Application(props: FluxApplicationProps) {
|
|
24
|
+
return <FluxRoot {...props} registry={{ "rooms/index": Rooms }} />;
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Given an envelope selecting `rooms/index` with a ready `rooms` resource, SSR
|
|
29
|
+
renders its list. The host must hydrate from that same envelope. `FluxRoot`
|
|
30
|
+
starts history, deferred work, and live subscriptions only after hydration.
|
|
31
|
+
Unknown component identifiers fail against the explicit registry; they never
|
|
32
|
+
become arbitrary module paths. Use `Link` for eligible same-origin visits,
|
|
33
|
+
`useResourceState` for status/errors/staleness, `useDeferredResource` for deferred
|
|
34
|
+
values and retry, `useLiveStatus` for connection state, and `useForm` for mutations
|
|
35
|
+
and generated client validation. These retain the existing Next binding semantics.
|
|
36
|
+
|
|
37
|
+
For custom layouts, `FluxProvider` accepts the same envelope and registry and
|
|
38
|
+
wraps children that use these hooks. `FluxContext` and `useFluxContext` expose
|
|
39
|
+
the shared runtime to integration authors. Core owns navigation, caching,
|
|
40
|
+
deferred authority, mutation patches, and live synchronization.
|
|
41
|
+
|
|
42
|
+
See the [adapter contract](https://github.com/El37628/FluxFast/blob/main/docs/adapter-contract.md)
|
|
43
|
+
for the host lifecycle and [React API reference](https://github.com/El37628/FluxFast/blob/main/docs/react-api.md)
|
|
44
|
+
for the complete binding API. Application developers can use the
|
|
45
|
+
[React/Vite tutorial](https://github.com/El37628/FluxFast/blob/main/docs/react-getting-started.md).
|
|
46
|
+
|
|
47
|
+
Separate `@fluxfast/react/server` and `@fluxfast/react/client` entries
|
|
48
|
+
provide safe document SSR and exact-envelope hydration for host authors. They
|
|
49
|
+
do not export a Vite plugin, asset server, or process supervisor; those belong
|
|
50
|
+
to the complete `@fluxfast/vite` host and Python CLI.
|
|
51
|
+
See the [SSR integration reference](https://github.com/El37628/FluxFast/blob/main/docs/react-ssr.md); never import the
|
|
52
|
+
Node server entry into browser application code.
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type Root, type HydrationOptions } from "react-dom/client";
|
|
3
|
+
import type { FluxApplicationProps } from "./config.js";
|
|
4
|
+
export interface HydrateFluxApplicationOptions {
|
|
5
|
+
document?: Document;
|
|
6
|
+
onRecoverableError?: HydrationOptions["onRecoverableError"];
|
|
7
|
+
}
|
|
8
|
+
/** Hydrate the actual SSR markup from its exact envelope, without a fetch. */
|
|
9
|
+
export declare function hydrateFluxApplication(application: React.ComponentType<FluxApplicationProps>, options?: HydrateFluxApplicationOptions): Root;
|
|
10
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAe,KAAK,IAAI,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEjF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAIxD,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,kBAAkB,CAAC,EAAE,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;CAC7D;AAED,8EAA8E;AAC9E,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC,oBAAoB,CAAC,EACtD,OAAO,GAAE,6BAAkC,GAC1C,IAAI,CA0BN"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.hydrateFluxApplication = hydrateFluxApplication;
|
|
8
|
+
const react_1 = __importDefault(require("react"));
|
|
9
|
+
const client_1 = require("react-dom/client");
|
|
10
|
+
const core_1 = require("@fluxfast/core");
|
|
11
|
+
const document_js_1 = require("./document.js");
|
|
12
|
+
const hydration_js_1 = require("./hydration.js");
|
|
13
|
+
/** Hydrate the actual SSR markup from its exact envelope, without a fetch. */
|
|
14
|
+
function hydrateFluxApplication(application, options = {}) {
|
|
15
|
+
const document = options.document ?? globalThis.document;
|
|
16
|
+
const roots = document.querySelectorAll(`[id="${document_js_1.ROOT_ID}"]`);
|
|
17
|
+
const payloads = document.querySelectorAll(`[id="${document_js_1.PAYLOAD_ID}"]`);
|
|
18
|
+
if (roots.length !== 1 || payloads.length !== 1 || payloads[0].tagName !== "SCRIPT" || payloads[0].getAttribute("type") !== "application/json") {
|
|
19
|
+
throw new TypeError("FluxFast document requires one SSR root and one JSON payload");
|
|
20
|
+
}
|
|
21
|
+
const payload = JSON.parse(payloads[0].textContent ?? "");
|
|
22
|
+
if (!payload || typeof payload !== "object" || Array.isArray(payload) || !("initialEnvelope" in payload)) {
|
|
23
|
+
throw new TypeError("Invalid FluxFast hydration payload");
|
|
24
|
+
}
|
|
25
|
+
(0, core_1.assertPageEnvelope)(payload.initialEnvelope);
|
|
26
|
+
// Only server-owned application props cross this boundary; do not spread an
|
|
27
|
+
// arbitrary object into React or allow it to choose a private transport URL.
|
|
28
|
+
const props = { initialEnvelope: payload.initialEnvelope };
|
|
29
|
+
if ("cache" in payload && payload.cache !== undefined) {
|
|
30
|
+
props.cache = (0, hydration_js_1.readFluxCacheConfig)(payload.cache);
|
|
31
|
+
}
|
|
32
|
+
if ("development" in payload && payload.development !== undefined) {
|
|
33
|
+
if (typeof process === "undefined" || process.env?.NODE_ENV !== "production") {
|
|
34
|
+
props.development = (0, hydration_js_1.readFluxDevelopmentMetadata)(payload.development);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return (0, client_1.hydrateRoot)(roots[0], react_1.default.createElement(application, props), {
|
|
38
|
+
identifierPrefix: document_js_1.IDENTIFIER_PREFIX, onRecoverableError: options.onRecoverableError,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;;;;AAEb,kDAA0B;AAC1B,6CAAiF;AACjF,yCAAoD;AAEpD,+CAAuE;AACvE,iDAAkF;AAOlF,8EAA8E;AAC9E,gCACE,WAAsD,EACtD,OAAO,GAAkC,EAAE;IAE3C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC;IACzD,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,qBAAO,IAAI,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,wBAAU,IAAI,CAAC,CAAC;IACnE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,kBAAkB,EAAE,CAAC;QAC/I,MAAM,IAAI,SAAS,CAAC,8DAA8D,CAAC,CAAC;IACtF,CAAC;IACD,MAAM,OAAO,GAAY,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IACnE,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,iBAAiB,IAAI,OAAO,CAAC,EAAE,CAAC;QACzG,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;IAC5D,CAAC;IACD,IAAA,yBAAkB,EAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5C,4EAA4E;IAC5E,6EAA6E;IAC7E,MAAM,KAAK,GAAyB,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC;IACjF,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACtD,KAAK,CAAC,KAAK,GAAG,IAAA,kCAAmB,EAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,aAAa,IAAI,OAAO,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QAClE,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC7E,KAAK,CAAC,WAAW,GAAG,IAAA,0CAA2B,EAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IACD,OAAO,IAAA,oBAAW,EAAC,KAAK,CAAC,CAAC,CAAC,EAAE,eAAK,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE;QACpE,gBAAgB,EAAE,+BAAiB,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;KACpF,CAAC,CAAC;AACL,CAAC"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { FluxServerDiagnosticTrace, PageEnvelope } from "@fluxfast/core";
|
|
2
|
+
export interface FluxCacheConfig {
|
|
3
|
+
maxResources?: number;
|
|
4
|
+
maxPages?: number;
|
|
5
|
+
}
|
|
6
|
+
/** Safe, development-only metadata captured before browser hydration. */
|
|
7
|
+
export interface FluxDevelopmentMetadata {
|
|
8
|
+
initialPath: string;
|
|
9
|
+
initialServerTrace: FluxServerDiagnosticTrace;
|
|
10
|
+
}
|
|
11
|
+
export interface FluxApplicationProps {
|
|
12
|
+
initialEnvelope: PageEnvelope;
|
|
13
|
+
development?: FluxDevelopmentMetadata;
|
|
14
|
+
clientUrl?: string;
|
|
15
|
+
cache?: FluxCacheConfig;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9E,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,yEAAyE;AACzE,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,yBAAyB,CAAC;CAC/C;AAED,MAAM,WAAW,oBAAoB;IACnC,eAAe,EAAE,YAAY,CAAC;IAC9B,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,eAAe,CAAC;CACzB"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Shared document identifiers, never a backend URL or application route table. */
|
|
2
|
+
export declare const ROOT_ID = "fluxfast-root";
|
|
3
|
+
export declare const PAYLOAD_ID = "fluxfast-page";
|
|
4
|
+
export declare const IDENTIFIER_PREFIX = "fluxfast-";
|
|
5
|
+
export declare const SSR_MARKER = "<!--fluxfast:ssr-->";
|
|
6
|
+
export declare const PAYLOAD_MARKER = "<!--fluxfast:payload-->";
|
|
7
|
+
//# sourceMappingURL=document.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,eAAO,MAAM,OAAO,kBAAkB,CAAC;AACvC,eAAO,MAAM,UAAU,kBAAkB,CAAC;AAC1C,eAAO,MAAM,iBAAiB,cAAc,CAAC;AAC7C,eAAO,MAAM,UAAU,wBAAwB,CAAC;AAChD,eAAO,MAAM,cAAc,4BAA4B,CAAC"}
|
package/dist/document.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PAYLOAD_MARKER = exports.SSR_MARKER = exports.IDENTIFIER_PREFIX = exports.PAYLOAD_ID = exports.ROOT_ID = void 0;
|
|
4
|
+
/** Shared document identifiers, never a backend URL or application route table. */
|
|
5
|
+
exports.ROOT_ID = "fluxfast-root";
|
|
6
|
+
exports.PAYLOAD_ID = "fluxfast-page";
|
|
7
|
+
exports.IDENTIFIER_PREFIX = "fluxfast-";
|
|
8
|
+
exports.SSR_MARKER = "<!--fluxfast:ssr-->";
|
|
9
|
+
exports.PAYLOAD_MARKER = "<!--fluxfast:payload-->";
|
|
10
|
+
//# sourceMappingURL=document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document.js","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":";;;AAAA,mFAAmF;AACtE,QAAA,OAAO,GAAG,eAAe,CAAC;AAC1B,QAAA,UAAU,GAAG,eAAe,CAAC;AAC7B,QAAA,iBAAiB,GAAG,WAAW,CAAC;AAChC,QAAA,UAAU,GAAG,qBAAqB,CAAC;AACnC,QAAA,cAAc,GAAG,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { hydrateRoot } from "react-dom/client";
|
|
4
|
+
import { assertPageEnvelope } from "@fluxfast/core";
|
|
5
|
+
import { IDENTIFIER_PREFIX, PAYLOAD_ID, ROOT_ID } from "./document.js";
|
|
6
|
+
import { readFluxCacheConfig, readFluxDevelopmentMetadata } from "./hydration.js";
|
|
7
|
+
/** Hydrate the actual SSR markup from its exact envelope, without a fetch. */
|
|
8
|
+
export function hydrateFluxApplication(application, options = {}) {
|
|
9
|
+
const document = options.document ?? globalThis.document;
|
|
10
|
+
const roots = document.querySelectorAll(`[id="${ROOT_ID}"]`);
|
|
11
|
+
const payloads = document.querySelectorAll(`[id="${PAYLOAD_ID}"]`);
|
|
12
|
+
if (roots.length !== 1 || payloads.length !== 1 || payloads[0].tagName !== "SCRIPT" || payloads[0].getAttribute("type") !== "application/json") {
|
|
13
|
+
throw new TypeError("FluxFast document requires one SSR root and one JSON payload");
|
|
14
|
+
}
|
|
15
|
+
const payload = JSON.parse(payloads[0].textContent ?? "");
|
|
16
|
+
if (!payload || typeof payload !== "object" || Array.isArray(payload) || !("initialEnvelope" in payload)) {
|
|
17
|
+
throw new TypeError("Invalid FluxFast hydration payload");
|
|
18
|
+
}
|
|
19
|
+
assertPageEnvelope(payload.initialEnvelope);
|
|
20
|
+
// Only server-owned application props cross this boundary; do not spread an
|
|
21
|
+
// arbitrary object into React or allow it to choose a private transport URL.
|
|
22
|
+
const props = { initialEnvelope: payload.initialEnvelope };
|
|
23
|
+
if ("cache" in payload && payload.cache !== undefined) {
|
|
24
|
+
props.cache = readFluxCacheConfig(payload.cache);
|
|
25
|
+
}
|
|
26
|
+
if ("development" in payload && payload.development !== undefined) {
|
|
27
|
+
if (typeof process === "undefined" || process.env?.NODE_ENV !== "production") {
|
|
28
|
+
props.development = readFluxDevelopmentMetadata(payload.development);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return hydrateRoot(roots[0], React.createElement(application, props), {
|
|
32
|
+
identifierPrefix: IDENTIFIER_PREFIX, onRecoverableError: options.onRecoverableError,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAoC,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAOlF,8EAA8E;AAC9E,MAAM,UAAU,sBAAsB,CACpC,WAAsD,EACtD,OAAO,GAAkC,EAAE;IAE3C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC;IACzD,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,OAAO,IAAI,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,UAAU,IAAI,CAAC,CAAC;IACnE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,kBAAkB,EAAE,CAAC;QAC/I,MAAM,IAAI,SAAS,CAAC,8DAA8D,CAAC,CAAC;IACtF,CAAC;IACD,MAAM,OAAO,GAAY,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IACnE,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,iBAAiB,IAAI,OAAO,CAAC,EAAE,CAAC;QACzG,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;IAC5D,CAAC;IACD,kBAAkB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5C,4EAA4E;IAC5E,6EAA6E;IAC7E,MAAM,KAAK,GAAyB,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC;IACjF,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACtD,KAAK,CAAC,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,aAAa,IAAI,OAAO,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QAClE,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC7E,KAAK,CAAC,WAAW,GAAG,2BAA2B,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE;QACpE,gBAAgB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;KACpF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Shared document identifiers, never a backend URL or application route table. */
|
|
2
|
+
export const ROOT_ID = "fluxfast-root";
|
|
3
|
+
export const PAYLOAD_ID = "fluxfast-page";
|
|
4
|
+
export const IDENTIFIER_PREFIX = "fluxfast-";
|
|
5
|
+
export const SSR_MARKER = "<!--fluxfast:ssr-->";
|
|
6
|
+
export const PAYLOAD_MARKER = "<!--fluxfast:payload-->";
|
|
7
|
+
//# sourceMappingURL=document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document.js","sourceRoot":"","sources":["../../src/document.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,MAAM,CAAC,MAAM,OAAO,GAAG,eAAe,CAAC;AACvC,MAAM,CAAC,MAAM,UAAU,GAAG,eAAe,CAAC;AAC1C,MAAM,CAAC,MAAM,iBAAiB,GAAG,WAAW,CAAC;AAC7C,MAAM,CAAC,MAAM,UAAU,GAAG,qBAAqB,CAAC;AAChD,MAAM,CAAC,MAAM,cAAc,GAAG,yBAAyB,CAAC"}
|
package/dist/esm/form.js
ADDED
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useState, useCallback, useEffect, useMemo, useRef } from "react";
|
|
3
|
+
import { ValidationError, formatValidationPath } from "@fluxfast/core";
|
|
4
|
+
import { useRouter } from "./hooks.js";
|
|
5
|
+
const EMPTY_ISSUES = Object.freeze([]);
|
|
6
|
+
const EMPTY_ERROR_MAP = Object.freeze(Object.create(null));
|
|
7
|
+
function issuesToTopLevelErrors(issues) {
|
|
8
|
+
const errors = Object.create(null);
|
|
9
|
+
for (const issue of issues) {
|
|
10
|
+
const key = issue.path[0];
|
|
11
|
+
if (typeof key === "string" &&
|
|
12
|
+
!Object.prototype.hasOwnProperty.call(errors, key)) {
|
|
13
|
+
errors[key] = issue.message;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return errors;
|
|
17
|
+
}
|
|
18
|
+
function issuesToErrorMap(issues) {
|
|
19
|
+
if (issues.length === 0)
|
|
20
|
+
return EMPTY_ERROR_MAP;
|
|
21
|
+
const errorMap = Object.create(null);
|
|
22
|
+
for (const issue of issues) {
|
|
23
|
+
const path = formatValidationPath(issue.path);
|
|
24
|
+
if (!Object.prototype.hasOwnProperty.call(errorMap, path)) {
|
|
25
|
+
errorMap[path] = issue.message;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return Object.freeze(errorMap);
|
|
29
|
+
}
|
|
30
|
+
export function useForm(initialValues, formOptions = {}) {
|
|
31
|
+
const router = useRouter();
|
|
32
|
+
const initialRef = useRef(initialValues);
|
|
33
|
+
const [data, setDataState] = useState(initialValues);
|
|
34
|
+
const dataRef = useRef(initialValues);
|
|
35
|
+
const [manualErrors, setManualErrors] = useState({});
|
|
36
|
+
const [issues, setIssues] = useState(EMPTY_ISSUES);
|
|
37
|
+
const [processing, setProcessing] = useState(false);
|
|
38
|
+
const [wasSuccessful, setWasSuccessful] = useState(false);
|
|
39
|
+
const [recentlySuccessful, setRecentlySuccessful] = useState(false);
|
|
40
|
+
const recentTimerRef = useRef(null);
|
|
41
|
+
const localErrors = useMemo(() => issuesToTopLevelErrors(issues), [issues]);
|
|
42
|
+
const errors = useMemo(() => ({ ...manualErrors, ...localErrors }), [manualErrors, localErrors]);
|
|
43
|
+
const localErrorMap = useMemo(() => issuesToErrorMap(issues), [issues]);
|
|
44
|
+
const errorMap = useMemo(() => {
|
|
45
|
+
const entries = Object.entries(manualErrors);
|
|
46
|
+
if (entries.length === 0)
|
|
47
|
+
return localErrorMap;
|
|
48
|
+
const combined = Object.create(null);
|
|
49
|
+
for (const [key, message] of entries) {
|
|
50
|
+
if (message !== undefined)
|
|
51
|
+
combined[key] = message;
|
|
52
|
+
}
|
|
53
|
+
for (const [path, message] of Object.entries(localErrorMap)) {
|
|
54
|
+
combined[path] = message;
|
|
55
|
+
}
|
|
56
|
+
return Object.freeze(combined);
|
|
57
|
+
}, [manualErrors, localErrorMap]);
|
|
58
|
+
useEffect(() => () => {
|
|
59
|
+
if (recentTimerRef.current)
|
|
60
|
+
clearTimeout(recentTimerRef.current);
|
|
61
|
+
}, []);
|
|
62
|
+
const setData = useCallback((keyOrValues, maybeValue) => {
|
|
63
|
+
if (typeof keyOrValues === "string") {
|
|
64
|
+
const next = { ...dataRef.current, [keyOrValues]: maybeValue };
|
|
65
|
+
dataRef.current = next;
|
|
66
|
+
setDataState(next);
|
|
67
|
+
}
|
|
68
|
+
else if (typeof keyOrValues === "function") {
|
|
69
|
+
const next = keyOrValues(dataRef.current);
|
|
70
|
+
dataRef.current = next;
|
|
71
|
+
setDataState(next);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
const next = { ...dataRef.current, ...keyOrValues };
|
|
75
|
+
dataRef.current = next;
|
|
76
|
+
setDataState(next);
|
|
77
|
+
}
|
|
78
|
+
}, []);
|
|
79
|
+
const setError = useCallback((key, message) => {
|
|
80
|
+
setManualErrors(prev => ({ ...prev, [key]: message }));
|
|
81
|
+
}, []);
|
|
82
|
+
const clearErrors = useCallback((...keys) => {
|
|
83
|
+
if (keys.length === 0) {
|
|
84
|
+
setManualErrors({});
|
|
85
|
+
setIssues(EMPTY_ISSUES);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
const selected = new Set(keys);
|
|
89
|
+
setManualErrors(prev => {
|
|
90
|
+
const next = { ...prev };
|
|
91
|
+
for (const k of keys) {
|
|
92
|
+
delete next[k];
|
|
93
|
+
}
|
|
94
|
+
return next;
|
|
95
|
+
});
|
|
96
|
+
setIssues(prev => {
|
|
97
|
+
const next = prev.filter(issue => {
|
|
98
|
+
const key = issue.path[0];
|
|
99
|
+
return typeof key !== "string" || !selected.has(key);
|
|
100
|
+
});
|
|
101
|
+
return next.length === prev.length ? prev : Object.freeze(next);
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}, []);
|
|
105
|
+
const reset = useCallback((...keys) => {
|
|
106
|
+
if (keys.length === 0) {
|
|
107
|
+
dataRef.current = initialRef.current;
|
|
108
|
+
setDataState(initialRef.current);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
const next = { ...dataRef.current };
|
|
112
|
+
for (const k of keys)
|
|
113
|
+
next[k] = initialRef.current[k];
|
|
114
|
+
dataRef.current = next;
|
|
115
|
+
setDataState(next);
|
|
116
|
+
}
|
|
117
|
+
}, []);
|
|
118
|
+
const validateCurrent = useCallback(() => {
|
|
119
|
+
const validator = formOptions.validator;
|
|
120
|
+
return validator?.validate(dataRef.current);
|
|
121
|
+
}, [formOptions.validator]);
|
|
122
|
+
const validate = useCallback(() => {
|
|
123
|
+
const result = validateCurrent();
|
|
124
|
+
if (!result || result.valid) {
|
|
125
|
+
setIssues(EMPTY_ISSUES);
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
setIssues(result.issues);
|
|
129
|
+
return false;
|
|
130
|
+
}, [validateCurrent]);
|
|
131
|
+
const submit = useCallback((url, options) => {
|
|
132
|
+
return async (e) => {
|
|
133
|
+
if (e && typeof e.preventDefault === "function") {
|
|
134
|
+
e.preventDefault();
|
|
135
|
+
}
|
|
136
|
+
setWasSuccessful(false);
|
|
137
|
+
clearErrors();
|
|
138
|
+
const validationResult = validateCurrent();
|
|
139
|
+
if (validationResult && !validationResult.valid) {
|
|
140
|
+
setIssues(validationResult.issues);
|
|
141
|
+
if (options?.onError) {
|
|
142
|
+
options.onError({
|
|
143
|
+
...issuesToTopLevelErrors(validationResult.issues)
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
setIssues(EMPTY_ISSUES);
|
|
149
|
+
setProcessing(true);
|
|
150
|
+
try {
|
|
151
|
+
await router.mutate(url, dataRef.current, {
|
|
152
|
+
method: options?.method || "POST",
|
|
153
|
+
preserveScroll: options?.preserveScroll,
|
|
154
|
+
});
|
|
155
|
+
setWasSuccessful(true);
|
|
156
|
+
setRecentlySuccessful(true);
|
|
157
|
+
if (recentTimerRef.current) {
|
|
158
|
+
clearTimeout(recentTimerRef.current);
|
|
159
|
+
}
|
|
160
|
+
recentTimerRef.current = setTimeout(() => {
|
|
161
|
+
setRecentlySuccessful(false);
|
|
162
|
+
}, 2000);
|
|
163
|
+
if (options?.onSuccess) {
|
|
164
|
+
options.onSuccess();
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
catch (err) {
|
|
168
|
+
if (err instanceof ValidationError && err.details) {
|
|
169
|
+
const formattedErrors = Object.create(null);
|
|
170
|
+
for (const [k, v] of Object.entries(err.details)) {
|
|
171
|
+
formattedErrors[k] = Array.isArray(v) ? v[0] : String(v);
|
|
172
|
+
}
|
|
173
|
+
setManualErrors(formattedErrors);
|
|
174
|
+
setIssues(EMPTY_ISSUES);
|
|
175
|
+
if (options?.onError) {
|
|
176
|
+
options.onError({ ...formattedErrors });
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
throw err;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
finally {
|
|
184
|
+
setProcessing(false);
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
}, [router, clearErrors, validateCurrent]);
|
|
188
|
+
return {
|
|
189
|
+
data,
|
|
190
|
+
errors,
|
|
191
|
+
issues,
|
|
192
|
+
errorMap,
|
|
193
|
+
processing,
|
|
194
|
+
wasSuccessful,
|
|
195
|
+
recentlySuccessful,
|
|
196
|
+
setData,
|
|
197
|
+
setError,
|
|
198
|
+
clearErrors,
|
|
199
|
+
reset,
|
|
200
|
+
validate,
|
|
201
|
+
submit,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=form.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form.js","sourceRoot":"","sources":["../../src/form.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useSyncExternalStore, useCallback, useMemo } from "react";
|
|
3
|
+
import { useFluxContext } from "./provider.js";
|
|
4
|
+
export function useRouter() {
|
|
5
|
+
return useFlux().router;
|
|
6
|
+
}
|
|
7
|
+
export function useFlux() {
|
|
8
|
+
return useFluxContext();
|
|
9
|
+
}
|
|
10
|
+
export function usePage() {
|
|
11
|
+
const router = useRouter();
|
|
12
|
+
const subscribe = useCallback((callback) => router.pageStore.subscribe(callback), [router]);
|
|
13
|
+
const getSnapshot = useCallback(() => router.pageStore.getSnapshot(), [router]);
|
|
14
|
+
return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
|
|
15
|
+
}
|
|
16
|
+
export function useResource(key) {
|
|
17
|
+
const router = useRouter();
|
|
18
|
+
if (typeof process !== "undefined" &&
|
|
19
|
+
process.env?.NODE_ENV !== "production") {
|
|
20
|
+
const status = router.resourceStore.getStateSnapshot(key).status;
|
|
21
|
+
if (status === "pending") {
|
|
22
|
+
console.warn(`[fluxfast] Resource "${key}" is deferred and has not resolved yet.\n\nUse useDeferredResource("${key}") for deferred resources.`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const subscribe = useCallback((callback) => router.resourceStore.subscribe(key, callback), [router, key]);
|
|
26
|
+
const getSnapshot = useCallback(() => router.resourceStore.getSnapshot(key), [router, key]);
|
|
27
|
+
const getServerSnapshot = useCallback(() => router.resourceStore.getServerSnapshot(key), [router, key]);
|
|
28
|
+
const val = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
|
|
29
|
+
return val;
|
|
30
|
+
}
|
|
31
|
+
export function useResourceState(key) {
|
|
32
|
+
const router = useRouter();
|
|
33
|
+
const subscribe = useCallback((callback) => router.resourceStore.subscribe(key, callback), [router, key]);
|
|
34
|
+
const getSnapshot = useCallback(() => router.resourceStore.getStateSnapshot(key), [router, key]);
|
|
35
|
+
return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
|
|
36
|
+
}
|
|
37
|
+
export function useDeferredResource(key) {
|
|
38
|
+
const router = useRouter();
|
|
39
|
+
const state = useResourceState(key);
|
|
40
|
+
const retry = useCallback(() => router.loadResources([key], { reason: "retry" }), [router, key]);
|
|
41
|
+
return useMemo(() => ({
|
|
42
|
+
...state,
|
|
43
|
+
retry,
|
|
44
|
+
isLoading: state.status === "loading",
|
|
45
|
+
isError: state.status === "error",
|
|
46
|
+
isReady: state.status === "ready",
|
|
47
|
+
isPending: state.status === "pending",
|
|
48
|
+
}), [state, retry]);
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { decodeServerDiagnosticTrace } from "@fluxfast/core";
|
|
2
|
+
/** Private payload validation shared by the host and browser entry. */
|
|
3
|
+
export function readFluxCacheConfig(value) {
|
|
4
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
5
|
+
throw new TypeError("Invalid FluxFast hydration cache configuration");
|
|
6
|
+
}
|
|
7
|
+
const source = value;
|
|
8
|
+
const cache = {};
|
|
9
|
+
for (const name of ["maxResources", "maxPages"]) {
|
|
10
|
+
if (Object.hasOwn(source, name)) {
|
|
11
|
+
const limit = source[name];
|
|
12
|
+
if (!Number.isSafeInteger(limit) || limit <= 0) {
|
|
13
|
+
throw new TypeError("Invalid FluxFast hydration cache configuration");
|
|
14
|
+
}
|
|
15
|
+
cache[name] = limit;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return cache;
|
|
19
|
+
}
|
|
20
|
+
export function readFluxDevelopmentMetadata(value) {
|
|
21
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
22
|
+
throw new TypeError("Invalid FluxFast hydration development metadata");
|
|
23
|
+
}
|
|
24
|
+
const source = value;
|
|
25
|
+
if (typeof source.initialPath !== "string" || !source.initialPath.startsWith("/") || source.initialPath.length > 2_048) {
|
|
26
|
+
throw new TypeError("Invalid FluxFast hydration development metadata");
|
|
27
|
+
}
|
|
28
|
+
const json = JSON.stringify(source.initialServerTrace);
|
|
29
|
+
if (typeof json !== "string" || json.length > 16_384) {
|
|
30
|
+
throw new TypeError("Invalid FluxFast hydration development metadata");
|
|
31
|
+
}
|
|
32
|
+
const bytes = new TextEncoder().encode(json);
|
|
33
|
+
const encoded = btoa(Array.from(bytes, byte => String.fromCharCode(byte)).join(""))
|
|
34
|
+
.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
35
|
+
const trace = decodeServerDiagnosticTrace(encoded);
|
|
36
|
+
if (!trace)
|
|
37
|
+
throw new TypeError("Invalid FluxFast hydration development metadata");
|
|
38
|
+
return { initialPath: source.initialPath, initialServerTrace: trace };
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=hydration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hydration.js","sourceRoot":"","sources":["../../src/hydration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAG7D,uEAAuE;AACvE,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,SAAS,CAAC,gDAAgD,CAAC,CAAC;IACxE,CAAC;IACD,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,UAAU,CAAU,EAAE,CAAC;QACzD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAK,KAAgB,IAAI,CAAC,EAAE,CAAC;gBAC3D,MAAM,IAAI,SAAS,CAAC,gDAAgD,CAAC,CAAC;YACxE,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,KAAe,CAAC;QAChC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAAc;IACxD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;QACvH,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACvD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;QACrD,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAChF,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;IACnF,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
/** Host-independent React bindings over the public FluxFast Core runtime. */
|
|
3
|
+
export * from "./provider.js";
|
|
4
|
+
export * from "./root.js";
|
|
5
|
+
export * from "./hooks.js";
|
|
6
|
+
export * from "./live.js";
|
|
7
|
+
export * from "./link.js";
|
|
8
|
+
export * from "./form.js";
|
|
9
|
+
export * from "./resolver.js";
|
|
10
|
+
export * from "./config.js";
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,6EAA6E;AAC7E,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC"}
|