@alepha/react 0.14.4 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -0
- package/dist/auth/index.d.ts +4 -4
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +22 -31
- package/dist/auth/index.js.map +1 -1
- package/dist/core/index.d.ts +118 -118
- package/dist/core/index.d.ts.map +1 -1
- package/dist/form/index.d.ts +27 -28
- package/dist/form/index.d.ts.map +1 -1
- package/dist/head/index.d.ts +30 -40
- package/dist/head/index.d.ts.map +1 -1
- package/dist/i18n/index.d.ts +33 -33
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/router/index.d.ts +458 -458
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +22 -31
- package/dist/router/index.js.map +1 -1
- package/dist/websocket/index.d.ts +38 -39
- package/dist/websocket/index.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/auth/__tests__/$auth.spec.ts +10 -11
- package/src/router/providers/ReactServerProvider.ts +3 -13
- package/src/router/providers/ReactServerTemplateProvider.ts +47 -29
package/README.md
CHANGED
|
@@ -10,3 +10,13 @@ This package is part of the Alepha framework and can be installed via the all-in
|
|
|
10
10
|
npm install alepha
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
+
## API Reference
|
|
14
|
+
|
|
15
|
+
### Environment Variables
|
|
16
|
+
|
|
17
|
+
Environment variables used to configure this package.
|
|
18
|
+
|
|
19
|
+
| Variable | Type | Default | Description |
|
|
20
|
+
|----------|------|---------|-------------|
|
|
21
|
+
| `REACT_SSR_ENABLED` | boolean | - | |
|
|
22
|
+
| `REACT_STRICT_MODE` | boolean | true | |
|
package/dist/auth/index.d.ts
CHANGED
|
@@ -41,10 +41,10 @@ declare class ReactAuth {
|
|
|
41
41
|
protected readonly onBeginTransition: alepha2.HookPrimitive<"react:transition:begin">;
|
|
42
42
|
protected readonly onFetchRequest: alepha2.HookPrimitive<"client:onRequest">;
|
|
43
43
|
/**
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
* Get the current authenticated user.
|
|
45
|
+
*
|
|
46
|
+
* Alias for `alepha.state.get("user")`
|
|
47
|
+
*/
|
|
48
48
|
get user(): UserAccountToken | undefined;
|
|
49
49
|
ping(): Promise<{
|
|
50
50
|
name?: string | undefined;
|
package/dist/auth/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/auth/hooks/useAuth.ts","../../src/auth/services/ReactAuth.ts","../../src/auth/providers/ReactAuthProvider.ts","../../src/auth/index.ts"],"
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/auth/hooks/useAuth.ts","../../src/auth/services/ReactAuth.ts","../../src/auth/providers/ReactAuthProvider.ts","../../src/auth/index.ts"],"mappings":";;;;;;;;;cAIa,OAAA;EAAA,IAAA;IAAA,IAAA;IAAA,KAAA;IAAA,QAAA;IAAA,OAAA;IAAA,SAAA;IAAA,aAAA;IAAA,KAAA;IAAA,EAAA;EAAA;EAAA,MAAA;EAAA,KAAA,GAAA,QAAA,QAUS,CAAA,EAAA,OAAA;IAAA,QAAA;IAAA,QAAA;IAAA,QAAA;IAAA,KAAA;IAAA,CAAA,KAAA;EAAA,MAOf,OAAA;EAAA,GAAA,6BAAA,IAAA,QAKW,iBAAA,CAAkB,GAAA;AAAA;;;;ACfpC;;cAAa,SAAA;EAAA,mBAAA,GAAA,EAAS,cAAA,CACE,MAAA;EAAA,mBAAA,MAAA,EACG,MAAA;EAAA,mBAAA,UAAA,EACI,UAAA;EAAA,mBAAA,YAAA,EACE,YAAA;EAAA,mBAAA,iBAAA,EAAA,OAAA,CAEK,aAAA;EAAA,mBAAA,cAAA,EAAA,OAAA,CAWH,aAAA;EAAA;;;;;EAAA,IAAA,KAAA,GAed,gBAAA;EAAA,KAAA,GAIF,OAAA;IAAA,IAAA;IAAA,KAAA;IAAA,QAAA;IAAA,OAAA;IAAA,SAAA;IAAA,aAAA;IAAA,KAAA;IAAA,EAAA;EAAA;EAAA,IAAA,MAAA;EAAA,MAAA,QAAA,UAAA,OAAA;IAAA,QAAA;IAAA,QAAA;IAAA,QAAA;IAAA,QAAA;IAAA,KAAA;IAAA,CAAA,KAAA;EAAA,IA6Bd,OAAA,CAAQ,MAAA;EAAA,OAAA;AAAA;;;cC1EA,iBAAA;EAAA,mBAAA,MAAA,EACc,MAAA;EAAA,SAAA,QAAA,EAAA,OAAA,CAED,aAAA;AAAA;;;;;WCYf,WAAA;EAAA;AAAA;AAAA;;;AAYX;;;AAZW,cAYE,eAAA,EAAe,OAAA,CAAA,OAAA,CAI1B,OAAA,CAJ0B,MAAA"}
|
package/dist/auth/index.js
CHANGED
|
@@ -1735,23 +1735,19 @@ var ReactServerTemplateProvider = class {
|
|
|
1735
1735
|
*/
|
|
1736
1736
|
buildHydrationData(state) {
|
|
1737
1737
|
const { request, context, ...store } = this.alepha.context.als?.getStore() ?? {};
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
element: void 0,
|
|
1752
|
-
route: void 0
|
|
1753
|
-
}))
|
|
1754
|
-
};
|
|
1738
|
+
const hydrationData = { layers: state.layers.map((layer) => ({
|
|
1739
|
+
name: layer.name,
|
|
1740
|
+
props: layer.props,
|
|
1741
|
+
config: layer.config,
|
|
1742
|
+
error: layer.error ? {
|
|
1743
|
+
...layer.error,
|
|
1744
|
+
name: layer.error.name,
|
|
1745
|
+
message: layer.error.message,
|
|
1746
|
+
stack: !this.alepha.isProduction() ? layer.error.stack : void 0
|
|
1747
|
+
} : void 0
|
|
1748
|
+
})) };
|
|
1749
|
+
for (const [key, value] of Object.entries(store)) if (key.charAt(0) !== "_" && key !== "alepha.react.router.state" && key !== "registry") hydrationData[key] = value;
|
|
1750
|
+
return hydrationData;
|
|
1755
1751
|
}
|
|
1756
1752
|
/**
|
|
1757
1753
|
* Encode a string to Uint8Array using the shared encoder.
|
|
@@ -1882,7 +1878,7 @@ var ReactServerTemplateProvider = class {
|
|
|
1882
1878
|
* @param options - Streaming options
|
|
1883
1879
|
*/
|
|
1884
1880
|
createEarlyHtmlStream(globalHead, asyncWork, options = {}) {
|
|
1885
|
-
const { hydration = true, onError
|
|
1881
|
+
const { hydration = true, onError } = options;
|
|
1886
1882
|
const slots = this.getSlots();
|
|
1887
1883
|
const encoder = this.encoder;
|
|
1888
1884
|
return new ReadableStream({ start: async (controller) => {
|
|
@@ -1894,7 +1890,11 @@ var ReactServerTemplateProvider = class {
|
|
|
1894
1890
|
controller.enqueue(slots.headOpen);
|
|
1895
1891
|
if (this.earlyHeadContent) controller.enqueue(encoder.encode(this.earlyHeadContent));
|
|
1896
1892
|
const result = await asyncWork();
|
|
1897
|
-
if (!result) {
|
|
1893
|
+
if (!result || "redirect" in result) {
|
|
1894
|
+
if (result && "redirect" in result) {
|
|
1895
|
+
this.log.debug("Loader redirect detected after streaming started, using meta refresh", { redirect: result.redirect });
|
|
1896
|
+
controller.enqueue(encoder.encode(`<meta http-equiv="refresh" content="0; url=${this.escapeHtml(result.redirect)}">\n`));
|
|
1897
|
+
}
|
|
1898
1898
|
controller.enqueue(slots.headClose);
|
|
1899
1899
|
controller.enqueue(encoder.encode("<body></body></html>"));
|
|
1900
1900
|
controller.close();
|
|
@@ -2238,7 +2238,6 @@ var ReactServerProvider = class {
|
|
|
2238
2238
|
handler: async () => {
|
|
2239
2239
|
const ssrEnabled = this.alepha.primitives($page).length > 0 && this.env.REACT_SSR_ENABLED !== false;
|
|
2240
2240
|
this.alepha.store.set("alepha.react.server.ssr", ssrEnabled);
|
|
2241
|
-
if (ssrEnabled) this.log.info("SSR streaming enabled");
|
|
2242
2241
|
if (this.alepha.isViteDev()) {
|
|
2243
2242
|
await this.configureVite(ssrEnabled);
|
|
2244
2243
|
return;
|
|
@@ -2399,10 +2398,7 @@ var ReactServerProvider = class {
|
|
|
2399
2398
|
const globalHead = this.serverHeadProvider.resolveGlobalHead();
|
|
2400
2399
|
const htmlStream = this.templateProvider.createEarlyHtmlStream(globalHead, async () => {
|
|
2401
2400
|
const result = await this.renderPage(route, state);
|
|
2402
|
-
if (result.redirect) {
|
|
2403
|
-
reply.redirect(result.redirect);
|
|
2404
|
-
return null;
|
|
2405
|
-
}
|
|
2401
|
+
if (result.redirect) return { redirect: result.redirect };
|
|
2406
2402
|
return {
|
|
2407
2403
|
state,
|
|
2408
2404
|
reactStream: result.reactStream
|
|
@@ -2434,9 +2430,7 @@ var ReactServerProvider = class {
|
|
|
2434
2430
|
* @returns Render result with redirect or React stream
|
|
2435
2431
|
*/
|
|
2436
2432
|
async renderPage(route, state) {
|
|
2437
|
-
this.serverTimingProvider.beginTiming("createLayers");
|
|
2438
2433
|
const { redirect } = await this.pageApi.createLayers(route, state);
|
|
2439
|
-
this.serverTimingProvider.endTiming("createLayers");
|
|
2440
2434
|
if (redirect) {
|
|
2441
2435
|
this.log.debug("Resolver resulted in redirection", { redirect });
|
|
2442
2436
|
return { redirect };
|
|
@@ -2447,15 +2441,12 @@ var ReactServerProvider = class {
|
|
|
2447
2441
|
state.head ??= {};
|
|
2448
2442
|
state.head.link = [...state.head.link ?? [], ...preloadLinks];
|
|
2449
2443
|
}
|
|
2450
|
-
this.serverTimingProvider.beginTiming("renderToStream");
|
|
2451
2444
|
const element = this.pageApi.root(state);
|
|
2452
2445
|
this.alepha.store.set("alepha.react.router.state", state);
|
|
2453
|
-
|
|
2446
|
+
return { reactStream: await renderToReadableStream(element, { onError: (error) => {
|
|
2454
2447
|
if (error instanceof Redirection) this.log.warn("Redirect during streaming ignored", { redirect: error.redirect });
|
|
2455
2448
|
else this.log.error("Streaming render error", error);
|
|
2456
|
-
} });
|
|
2457
|
-
this.serverTimingProvider.endTiming("renderToStream");
|
|
2458
|
-
return { reactStream };
|
|
2449
|
+
} }) };
|
|
2459
2450
|
}
|
|
2460
2451
|
/**
|
|
2461
2452
|
* For testing purposes, renders a page to HTML string.
|