@alepha/react 0.11.10 → 0.11.12
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 +1 -183
- package/dist/auth/index.browser.js +1460 -0
- package/dist/auth/index.browser.js.map +1 -0
- package/dist/auth/index.cjs +3647 -0
- package/dist/auth/index.cjs.map +1 -0
- package/dist/auth/index.d.cts +564 -0
- package/dist/auth/index.d.cts.map +1 -0
- package/dist/auth/index.d.ts +564 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +3615 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/{index.browser.js → core/index.browser.js} +36 -35
- package/dist/core/index.browser.js.map +1 -0
- package/dist/{index.cjs → core/index.cjs} +141 -140
- package/dist/core/index.cjs.map +1 -0
- package/dist/{index.d.cts → core/index.d.cts} +68 -68
- package/dist/core/index.d.cts.map +1 -0
- package/dist/{index.d.ts → core/index.d.ts} +68 -68
- package/dist/core/index.d.ts.map +1 -0
- package/dist/{index.js → core/index.js} +39 -38
- package/dist/core/index.js.map +1 -0
- package/dist/form/index.cjs +2054 -0
- package/dist/form/index.cjs.map +1 -0
- package/dist/form/index.d.cts +211 -0
- package/dist/form/index.d.cts.map +1 -0
- package/dist/form/index.d.ts +211 -0
- package/dist/form/index.d.ts.map +1 -0
- package/dist/form/index.js +2026 -0
- package/dist/form/index.js.map +1 -0
- package/dist/head/index.browser.js +1503 -0
- package/dist/head/index.browser.js.map +1 -0
- package/dist/head/index.cjs +1908 -0
- package/dist/head/index.cjs.map +1 -0
- package/dist/head/index.d.cts +595 -0
- package/dist/head/index.d.cts.map +1 -0
- package/dist/head/index.d.ts +601 -0
- package/dist/head/index.d.ts.map +1 -0
- package/dist/head/index.js +1880 -0
- package/dist/head/index.js.map +1 -0
- package/dist/i18n/index.cjs +1886 -0
- package/dist/i18n/index.cjs.map +1 -0
- package/dist/i18n/index.d.cts +168 -0
- package/dist/i18n/index.d.cts.map +1 -0
- package/dist/i18n/index.d.ts +168 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +1857 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/websocket/index.cjs +1774 -0
- package/dist/websocket/index.cjs.map +1 -0
- package/dist/websocket/index.d.cts +118 -0
- package/dist/websocket/index.d.cts.map +1 -0
- package/dist/websocket/index.d.ts +118 -0
- package/dist/websocket/index.d.ts.map +1 -0
- package/dist/websocket/index.js +1750 -0
- package/dist/websocket/index.js.map +1 -0
- package/package.json +89 -67
- package/src/auth/descriptors/$auth.ts +436 -0
- package/src/auth/descriptors/$authApple.ts +8 -0
- package/src/auth/descriptors/$authGithub.ts +81 -0
- package/src/auth/descriptors/$authGoogle.ts +38 -0
- package/src/auth/errors/SessionExpiredError.ts +6 -0
- package/src/auth/hooks/useAuth.ts +31 -0
- package/src/auth/index.browser.ts +16 -0
- package/src/auth/index.shared.ts +3 -0
- package/src/auth/index.ts +47 -0
- package/src/auth/providers/ReactAuthProvider.ts +629 -0
- package/src/auth/schemas/tokenResponseSchema.ts +11 -0
- package/src/auth/schemas/tokensSchema.ts +21 -0
- package/src/auth/schemas/userinfoResponseSchema.ts +10 -0
- package/src/auth/services/ReactAuth.ts +124 -0
- package/src/{components → core/components}/ErrorViewer.tsx +3 -2
- package/src/{components → core/components}/NestedView.tsx +1 -1
- package/src/{contexts → core/contexts}/AlephaContext.ts +1 -1
- package/src/{descriptors → core/descriptors}/$page.ts +4 -4
- package/src/{hooks → core/hooks}/useAction.ts +1 -1
- package/src/{hooks → core/hooks}/useAlepha.ts +1 -1
- package/src/{hooks → core/hooks}/useClient.ts +1 -1
- package/src/{hooks → core/hooks}/useEvents.ts +1 -1
- package/src/{hooks → core/hooks}/useInject.ts +1 -1
- package/src/{hooks → core/hooks}/useQueryParams.ts +1 -1
- package/src/{hooks → core/hooks}/useRouterState.ts +1 -1
- package/src/{hooks → core/hooks}/useSchema.ts +3 -3
- package/src/{hooks → core/hooks}/useStore.ts +2 -2
- package/src/{index.browser.ts → core/index.browser.ts} +4 -4
- package/src/{index.ts → core/index.ts} +6 -6
- package/src/{providers → core/providers}/ReactBrowserProvider.ts +6 -6
- package/src/{providers → core/providers}/ReactBrowserRendererProvider.ts +2 -2
- package/src/{providers → core/providers}/ReactBrowserRouterProvider.ts +3 -3
- package/src/{providers → core/providers}/ReactPageProvider.ts +3 -3
- package/src/{providers → core/providers}/ReactServerProvider.ts +7 -7
- package/src/{services → core/services}/ReactPageServerService.ts +2 -2
- package/src/{services → core/services}/ReactPageService.ts +1 -1
- package/src/{services → core/services}/ReactRouter.ts +1 -1
- package/src/form/components/FormState.tsx +17 -0
- package/src/form/hooks/useForm.ts +47 -0
- package/src/form/hooks/useFormState.ts +130 -0
- package/src/form/index.ts +38 -0
- package/src/form/services/FormModel.ts +548 -0
- package/src/head/descriptors/$head.ts +25 -0
- package/src/head/hooks/useHead.ts +62 -0
- package/src/head/index.browser.ts +25 -0
- package/src/head/index.ts +47 -0
- package/src/head/interfaces/Head.ts +46 -0
- package/src/head/providers/BrowserHeadProvider.ts +105 -0
- package/src/head/providers/HeadProvider.ts +73 -0
- package/src/head/providers/ServerHeadProvider.ts +109 -0
- package/src/i18n/README.md +76 -0
- package/src/i18n/components/Localize.tsx +35 -0
- package/src/i18n/descriptors/$dictionary.ts +65 -0
- package/src/i18n/hooks/useI18n.ts +18 -0
- package/src/i18n/index.ts +34 -0
- package/src/i18n/providers/I18nProvider.ts +277 -0
- package/src/websocket/hooks/useRoom.tsx +223 -0
- package/src/websocket/index.ts +7 -0
- package/dist/index.browser.js.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- /package/src/{components → core/components}/ClientOnly.tsx +0 -0
- /package/src/{components → core/components}/ErrorBoundary.tsx +0 -0
- /package/src/{components → core/components}/Link.tsx +0 -0
- /package/src/{components → core/components}/NotFound.tsx +0 -0
- /package/src/{contexts → core/contexts}/RouterLayerContext.ts +0 -0
- /package/src/{errors → core/errors}/Redirection.ts +0 -0
- /package/src/{hooks → core/hooks}/useActive.ts +0 -0
- /package/src/{hooks → core/hooks}/useRouter.ts +0 -0
- /package/src/{index.shared.ts → core/index.shared.ts} +0 -0
|
@@ -21,33 +21,33 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
21
21
|
}) : target, mod));
|
|
22
22
|
|
|
23
23
|
//#endregion
|
|
24
|
-
let
|
|
25
|
-
let
|
|
26
|
-
let
|
|
27
|
-
let
|
|
28
|
-
let
|
|
29
|
-
let
|
|
24
|
+
let alepha = require("alepha");
|
|
25
|
+
let alepha_datetime = require("alepha/datetime");
|
|
26
|
+
let alepha_server = require("alepha/server");
|
|
27
|
+
let alepha_server_cache = require("alepha/server/cache");
|
|
28
|
+
let alepha_server_links = require("alepha/server/links");
|
|
29
|
+
let alepha_logger = require("alepha/logger");
|
|
30
30
|
let react = require("react");
|
|
31
31
|
react = __toESM(react);
|
|
32
32
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
33
33
|
let node_fs = require("node:fs");
|
|
34
34
|
let node_path = require("node:path");
|
|
35
|
-
let
|
|
35
|
+
let alepha_server_static = require("alepha/server/static");
|
|
36
36
|
let react_dom_server = require("react-dom/server");
|
|
37
|
-
let
|
|
37
|
+
let alepha_router = require("alepha/router");
|
|
38
38
|
|
|
39
|
-
//#region src/services/ReactPageService.ts
|
|
39
|
+
//#region src/core/services/ReactPageService.ts
|
|
40
40
|
var ReactPageService = class {
|
|
41
41
|
fetch(pathname, options = {}) {
|
|
42
|
-
throw new
|
|
42
|
+
throw new alepha.AlephaError("Fetch is not available for this environment.");
|
|
43
43
|
}
|
|
44
44
|
render(name, options = {}) {
|
|
45
|
-
throw new
|
|
45
|
+
throw new alepha.AlephaError("Render is not available for this environment.");
|
|
46
46
|
}
|
|
47
47
|
};
|
|
48
48
|
|
|
49
49
|
//#endregion
|
|
50
|
-
//#region src/descriptors/$page.ts
|
|
50
|
+
//#region src/core/descriptors/$page.ts
|
|
51
51
|
/**
|
|
52
52
|
* Main descriptor for defining a React route in the application.
|
|
53
53
|
*
|
|
@@ -137,10 +137,10 @@ var ReactPageService = class {
|
|
|
137
137
|
* ```
|
|
138
138
|
*/
|
|
139
139
|
const $page = (options) => {
|
|
140
|
-
return (0,
|
|
140
|
+
return (0, alepha.createDescriptor)(PageDescriptor, options);
|
|
141
141
|
};
|
|
142
|
-
var PageDescriptor = class extends
|
|
143
|
-
reactPageService = (0,
|
|
142
|
+
var PageDescriptor = class extends alepha.Descriptor {
|
|
143
|
+
reactPageService = (0, alepha.$inject)(ReactPageService);
|
|
144
144
|
onInit() {
|
|
145
145
|
if (this.options.static) this.options.cache ??= { store: {
|
|
146
146
|
provider: "memory",
|
|
@@ -169,10 +169,10 @@ var PageDescriptor = class extends __alepha_core.Descriptor {
|
|
|
169
169
|
return this.options.path || "";
|
|
170
170
|
}
|
|
171
171
|
};
|
|
172
|
-
$page[
|
|
172
|
+
$page[alepha.KIND] = PageDescriptor;
|
|
173
173
|
|
|
174
174
|
//#endregion
|
|
175
|
-
//#region src/components/ClientOnly.tsx
|
|
175
|
+
//#region src/core/components/ClientOnly.tsx
|
|
176
176
|
/**
|
|
177
177
|
* A small utility component that renders its children only on the client side.
|
|
178
178
|
*
|
|
@@ -192,10 +192,10 @@ const ClientOnly = (props) => {
|
|
|
192
192
|
var ClientOnly_default = ClientOnly;
|
|
193
193
|
|
|
194
194
|
//#endregion
|
|
195
|
-
//#region src/components/ErrorViewer.tsx
|
|
196
|
-
const ErrorViewer = ({ error, alepha }) => {
|
|
195
|
+
//#region src/core/components/ErrorViewer.tsx
|
|
196
|
+
const ErrorViewer = ({ error, alepha: alepha$1 }) => {
|
|
197
197
|
const [expanded, setExpanded] = (0, react.useState)(false);
|
|
198
|
-
if (alepha.isProduction()) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ErrorViewerProduction, {});
|
|
198
|
+
if (alepha$1.isProduction()) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ErrorViewerProduction, {});
|
|
199
199
|
const stackLines = error.stack?.split("\n") ?? [];
|
|
200
200
|
const previewLines = stackLines.slice(0, 5);
|
|
201
201
|
const hiddenLineCount = stackLines.length - previewLines.length;
|
|
@@ -278,6 +278,7 @@ const ErrorViewer = ({ error, alepha }) => {
|
|
|
278
278
|
] }), stackLines.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
279
279
|
style: styles.sectionHeader,
|
|
280
280
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "Stack trace" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
281
|
+
type: "button",
|
|
281
282
|
onClick: () => copyToClipboard(error.stack),
|
|
282
283
|
style: styles.copyButton,
|
|
283
284
|
children: "Copy all"
|
|
@@ -339,11 +340,11 @@ const ErrorViewerProduction = () => {
|
|
|
339
340
|
};
|
|
340
341
|
|
|
341
342
|
//#endregion
|
|
342
|
-
//#region src/contexts/RouterLayerContext.ts
|
|
343
|
+
//#region src/core/contexts/RouterLayerContext.ts
|
|
343
344
|
const RouterLayerContext = (0, react.createContext)(void 0);
|
|
344
345
|
|
|
345
346
|
//#endregion
|
|
346
|
-
//#region src/errors/Redirection.ts
|
|
347
|
+
//#region src/core/errors/Redirection.ts
|
|
347
348
|
/**
|
|
348
349
|
* Used for Redirection during the page loading.
|
|
349
350
|
*
|
|
@@ -358,11 +359,11 @@ var Redirection = class extends Error {
|
|
|
358
359
|
};
|
|
359
360
|
|
|
360
361
|
//#endregion
|
|
361
|
-
//#region src/contexts/AlephaContext.ts
|
|
362
|
+
//#region src/core/contexts/AlephaContext.ts
|
|
362
363
|
const AlephaContext = (0, react.createContext)(void 0);
|
|
363
364
|
|
|
364
365
|
//#endregion
|
|
365
|
-
//#region src/hooks/useAlepha.ts
|
|
366
|
+
//#region src/core/hooks/useAlepha.ts
|
|
366
367
|
/**
|
|
367
368
|
* Main Alepha hook.
|
|
368
369
|
*
|
|
@@ -376,13 +377,13 @@ const AlephaContext = (0, react.createContext)(void 0);
|
|
|
376
377
|
* etc...
|
|
377
378
|
*/
|
|
378
379
|
const useAlepha = () => {
|
|
379
|
-
const alepha = (0, react.useContext)(AlephaContext);
|
|
380
|
-
if (!alepha) throw new
|
|
381
|
-
return alepha;
|
|
380
|
+
const alepha$1 = (0, react.useContext)(AlephaContext);
|
|
381
|
+
if (!alepha$1) throw new alepha.AlephaError("Hook 'useAlepha()' must be used within an AlephaContext.Provider");
|
|
382
|
+
return alepha$1;
|
|
382
383
|
};
|
|
383
384
|
|
|
384
385
|
//#endregion
|
|
385
|
-
//#region src/hooks/useEvents.ts
|
|
386
|
+
//#region src/core/hooks/useEvents.ts
|
|
386
387
|
/**
|
|
387
388
|
* Allow subscribing to multiple Alepha events. See {@link Hooks} for available events.
|
|
388
389
|
*
|
|
@@ -407,11 +408,11 @@ const useAlepha = () => {
|
|
|
407
408
|
* ```
|
|
408
409
|
*/
|
|
409
410
|
const useEvents = (opts, deps) => {
|
|
410
|
-
const alepha = useAlepha();
|
|
411
|
+
const alepha$1 = useAlepha();
|
|
411
412
|
(0, react.useEffect)(() => {
|
|
412
|
-
if (!alepha.isBrowser()) return;
|
|
413
|
+
if (!alepha$1.isBrowser()) return;
|
|
413
414
|
const subs = [];
|
|
414
|
-
for (const [name, hook] of Object.entries(opts)) subs.push(alepha.events.on(name, hook));
|
|
415
|
+
for (const [name, hook] of Object.entries(opts)) subs.push(alepha$1.events.on(name, hook));
|
|
415
416
|
return () => {
|
|
416
417
|
for (const clear of subs) clear();
|
|
417
418
|
};
|
|
@@ -419,35 +420,35 @@ const useEvents = (opts, deps) => {
|
|
|
419
420
|
};
|
|
420
421
|
|
|
421
422
|
//#endregion
|
|
422
|
-
//#region src/hooks/useStore.ts
|
|
423
|
+
//#region src/core/hooks/useStore.ts
|
|
423
424
|
function useStore(target, defaultValue) {
|
|
424
|
-
const alepha = useAlepha();
|
|
425
|
+
const alepha$1 = useAlepha();
|
|
425
426
|
(0, react.useMemo)(() => {
|
|
426
|
-
if (defaultValue != null && alepha.state.get(target) == null) alepha.state.set(target, defaultValue);
|
|
427
|
+
if (defaultValue != null && alepha$1.state.get(target) == null) alepha$1.state.set(target, defaultValue);
|
|
427
428
|
}, [defaultValue]);
|
|
428
|
-
const [state, setState] = (0, react.useState)(alepha.state.get(target));
|
|
429
|
+
const [state, setState] = (0, react.useState)(alepha$1.state.get(target));
|
|
429
430
|
(0, react.useEffect)(() => {
|
|
430
|
-
if (!alepha.isBrowser()) return;
|
|
431
|
-
const key = target instanceof
|
|
432
|
-
return alepha.events.on("state:mutate", (ev) => {
|
|
431
|
+
if (!alepha$1.isBrowser()) return;
|
|
432
|
+
const key = target instanceof alepha.Atom ? target.key : target;
|
|
433
|
+
return alepha$1.events.on("state:mutate", (ev) => {
|
|
433
434
|
if (ev.key === key) setState(ev.value);
|
|
434
435
|
});
|
|
435
436
|
}, []);
|
|
436
437
|
return [state, (value) => {
|
|
437
|
-
alepha.state.set(target, value);
|
|
438
|
+
alepha$1.state.set(target, value);
|
|
438
439
|
}];
|
|
439
440
|
}
|
|
440
441
|
|
|
441
442
|
//#endregion
|
|
442
|
-
//#region src/hooks/useRouterState.ts
|
|
443
|
+
//#region src/core/hooks/useRouterState.ts
|
|
443
444
|
const useRouterState = () => {
|
|
444
445
|
const [state] = useStore("alepha.react.router.state");
|
|
445
|
-
if (!state) throw new
|
|
446
|
+
if (!state) throw new alepha.AlephaError("Missing react router state");
|
|
446
447
|
return state;
|
|
447
448
|
};
|
|
448
449
|
|
|
449
450
|
//#endregion
|
|
450
|
-
//#region src/components/ErrorBoundary.tsx
|
|
451
|
+
//#region src/core/components/ErrorBoundary.tsx
|
|
451
452
|
/**
|
|
452
453
|
* A reusable error boundary for catching rendering errors
|
|
453
454
|
* in any part of the React component tree.
|
|
@@ -478,7 +479,7 @@ var ErrorBoundary = class extends react.default.Component {
|
|
|
478
479
|
var ErrorBoundary_default = ErrorBoundary;
|
|
479
480
|
|
|
480
481
|
//#endregion
|
|
481
|
-
//#region src/components/NestedView.tsx
|
|
482
|
+
//#region src/core/components/NestedView.tsx
|
|
482
483
|
/**
|
|
483
484
|
* A component that renders the current view of the nested router layer.
|
|
484
485
|
*
|
|
@@ -486,7 +487,7 @@ var ErrorBoundary_default = ErrorBoundary;
|
|
|
486
487
|
*
|
|
487
488
|
* @example
|
|
488
489
|
* ```tsx
|
|
489
|
-
* import { NestedView } from "alepha/react";
|
|
490
|
+
* import { NestedView } from "@alepha/react";
|
|
490
491
|
*
|
|
491
492
|
* class App {
|
|
492
493
|
* parent = $page({
|
|
@@ -600,7 +601,7 @@ function parseAnimation(animationLike, state, type = "enter") {
|
|
|
600
601
|
}
|
|
601
602
|
|
|
602
603
|
//#endregion
|
|
603
|
-
//#region src/components/NotFound.tsx
|
|
604
|
+
//#region src/core/components/NotFound.tsx
|
|
604
605
|
function NotFoundPage(props) {
|
|
605
606
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
606
607
|
style: {
|
|
@@ -625,12 +626,12 @@ function NotFoundPage(props) {
|
|
|
625
626
|
}
|
|
626
627
|
|
|
627
628
|
//#endregion
|
|
628
|
-
//#region src/providers/ReactPageProvider.ts
|
|
629
|
-
const envSchema$2 =
|
|
629
|
+
//#region src/core/providers/ReactPageProvider.ts
|
|
630
|
+
const envSchema$2 = alepha.t.object({ REACT_STRICT_MODE: alepha.t.boolean({ default: true }) });
|
|
630
631
|
var ReactPageProvider = class {
|
|
631
|
-
log = (0,
|
|
632
|
-
env = (0,
|
|
633
|
-
alepha = (0,
|
|
632
|
+
log = (0, alepha_logger.$logger)();
|
|
633
|
+
env = (0, alepha.$env)(envSchema$2);
|
|
634
|
+
alepha = (0, alepha.$inject)(alepha.Alepha);
|
|
634
635
|
pages = [];
|
|
635
636
|
getPages() {
|
|
636
637
|
return this.pages;
|
|
@@ -662,7 +663,7 @@ var ReactPageProvider = class {
|
|
|
662
663
|
}
|
|
663
664
|
page(name) {
|
|
664
665
|
for (const page of this.pages) if (page.name === name) return page;
|
|
665
|
-
throw new
|
|
666
|
+
throw new alepha.AlephaError(`Page '${name}' not found`);
|
|
666
667
|
}
|
|
667
668
|
pathname(name, options = {}) {
|
|
668
669
|
const page = this.page(name);
|
|
@@ -689,8 +690,8 @@ var ReactPageProvider = class {
|
|
|
689
690
|
return root;
|
|
690
691
|
}
|
|
691
692
|
convertStringObjectToObject = (schema, value) => {
|
|
692
|
-
if (
|
|
693
|
-
for (const key in schema.properties) if (
|
|
693
|
+
if (alepha.t.schema.isObject(schema) && typeof value === "object") {
|
|
694
|
+
for (const key in schema.properties) if (alepha.t.schema.isObject(schema.properties[key]) && typeof value[key] === "string") try {
|
|
694
695
|
value[key] = this.alepha.codec.decode(schema.properties[key], decodeURIComponent(value[key]));
|
|
695
696
|
} catch (e) {}
|
|
696
697
|
}
|
|
@@ -875,7 +876,7 @@ var ReactPageProvider = class {
|
|
|
875
876
|
path
|
|
876
877
|
} }, element);
|
|
877
878
|
}
|
|
878
|
-
configure = (0,
|
|
879
|
+
configure = (0, alepha.$hook)({
|
|
879
880
|
on: "configure",
|
|
880
881
|
handler: () => {
|
|
881
882
|
let hasNotFoundHandler = false;
|
|
@@ -916,7 +917,7 @@ var ReactPageProvider = class {
|
|
|
916
917
|
};
|
|
917
918
|
}
|
|
918
919
|
add(entry) {
|
|
919
|
-
if (this.alepha.isReady()) throw new
|
|
920
|
+
if (this.alepha.isReady()) throw new alepha.AlephaError("Router is already initialized");
|
|
920
921
|
entry.name ??= this.nextId();
|
|
921
922
|
const page = entry;
|
|
922
923
|
page.match = this.createMatch(page);
|
|
@@ -948,22 +949,22 @@ const isPageRoute = (it) => {
|
|
|
948
949
|
};
|
|
949
950
|
|
|
950
951
|
//#endregion
|
|
951
|
-
//#region src/providers/ReactServerProvider.ts
|
|
952
|
-
const envSchema$1 =
|
|
953
|
-
REACT_SSR_ENABLED:
|
|
954
|
-
REACT_ROOT_ID:
|
|
955
|
-
REACT_SERVER_TEMPLATE:
|
|
952
|
+
//#region src/core/providers/ReactServerProvider.ts
|
|
953
|
+
const envSchema$1 = alepha.t.object({
|
|
954
|
+
REACT_SSR_ENABLED: alepha.t.optional(alepha.t.boolean()),
|
|
955
|
+
REACT_ROOT_ID: alepha.t.text({ default: "root" }),
|
|
956
|
+
REACT_SERVER_TEMPLATE: alepha.t.optional(alepha.t.text({ size: "rich" }))
|
|
956
957
|
});
|
|
957
958
|
/**
|
|
958
959
|
* React server provider configuration atom
|
|
959
960
|
*/
|
|
960
|
-
const reactServerOptions = (0,
|
|
961
|
+
const reactServerOptions = (0, alepha.$atom)({
|
|
961
962
|
name: "alepha.react.server.options",
|
|
962
|
-
schema:
|
|
963
|
-
publicDir:
|
|
964
|
-
staticServer:
|
|
965
|
-
disabled:
|
|
966
|
-
path:
|
|
963
|
+
schema: alepha.t.object({
|
|
964
|
+
publicDir: alepha.t.string(),
|
|
965
|
+
staticServer: alepha.t.object({
|
|
966
|
+
disabled: alepha.t.boolean(),
|
|
967
|
+
path: alepha.t.string({ description: "URL path where static files will be served." })
|
|
967
968
|
})
|
|
968
969
|
}),
|
|
969
970
|
default: {
|
|
@@ -975,21 +976,21 @@ const reactServerOptions = (0, __alepha_core.$atom)({
|
|
|
975
976
|
}
|
|
976
977
|
});
|
|
977
978
|
var ReactServerProvider = class {
|
|
978
|
-
log = (0,
|
|
979
|
-
alepha = (0,
|
|
980
|
-
env = (0,
|
|
981
|
-
pageApi = (0,
|
|
982
|
-
serverProvider = (0,
|
|
983
|
-
serverStaticProvider = (0,
|
|
984
|
-
serverRouterProvider = (0,
|
|
985
|
-
serverTimingProvider = (0,
|
|
979
|
+
log = (0, alepha_logger.$logger)();
|
|
980
|
+
alepha = (0, alepha.$inject)(alepha.Alepha);
|
|
981
|
+
env = (0, alepha.$env)(envSchema$1);
|
|
982
|
+
pageApi = (0, alepha.$inject)(ReactPageProvider);
|
|
983
|
+
serverProvider = (0, alepha.$inject)(alepha_server.ServerProvider);
|
|
984
|
+
serverStaticProvider = (0, alepha.$inject)(alepha_server_static.ServerStaticProvider);
|
|
985
|
+
serverRouterProvider = (0, alepha.$inject)(alepha_server.ServerRouterProvider);
|
|
986
|
+
serverTimingProvider = (0, alepha.$inject)(alepha_server.ServerTimingProvider);
|
|
986
987
|
ROOT_DIV_REGEX = new RegExp(`<div([^>]*)\\s+id=["']${this.env.REACT_ROOT_ID}["']([^>]*)>(.*?)<\\/div>`, "is");
|
|
987
988
|
preprocessedTemplate = null;
|
|
988
|
-
options = (0,
|
|
989
|
+
options = (0, alepha.$use)(reactServerOptions);
|
|
989
990
|
/**
|
|
990
991
|
* Configure the React server provider.
|
|
991
992
|
*/
|
|
992
|
-
onConfigure = (0,
|
|
993
|
+
onConfigure = (0, alepha.$hook)({
|
|
993
994
|
on: "configure",
|
|
994
995
|
handler: async () => {
|
|
995
996
|
const ssrEnabled = this.alepha.descriptors($page).length > 0 && this.env.REACT_SSR_ENABLED !== false;
|
|
@@ -1123,7 +1124,7 @@ var ReactServerProvider = class {
|
|
|
1123
1124
|
return async (serverRequest) => {
|
|
1124
1125
|
const { url, reply, query, params } = serverRequest;
|
|
1125
1126
|
const template = await templateLoader();
|
|
1126
|
-
if (!template) throw new
|
|
1127
|
+
if (!template) throw new alepha.AlephaError("Missing template for SSR rendering");
|
|
1127
1128
|
this.log.trace("Rendering page", { name: route.name });
|
|
1128
1129
|
const state = {
|
|
1129
1130
|
url,
|
|
@@ -1132,7 +1133,7 @@ var ReactServerProvider = class {
|
|
|
1132
1133
|
onError: () => null,
|
|
1133
1134
|
layers: []
|
|
1134
1135
|
};
|
|
1135
|
-
if (this.alepha.has(
|
|
1136
|
+
if (this.alepha.has(alepha_server_links.ServerLinksProvider)) this.alepha.state.set("alepha.server.request.apiLinks", await this.alepha.inject(alepha_server_links.ServerLinksProvider).getUserApiLinks({
|
|
1136
1137
|
user: serverRequest.user,
|
|
1137
1138
|
authorization: serverRequest.headers.authorization
|
|
1138
1139
|
}));
|
|
@@ -1254,10 +1255,10 @@ var ReactServerProvider = class {
|
|
|
1254
1255
|
};
|
|
1255
1256
|
|
|
1256
1257
|
//#endregion
|
|
1257
|
-
//#region src/services/ReactPageServerService.ts
|
|
1258
|
+
//#region src/core/services/ReactPageServerService.ts
|
|
1258
1259
|
var ReactPageServerService = class extends ReactPageService {
|
|
1259
|
-
reactServerProvider = (0,
|
|
1260
|
-
serverProvider = (0,
|
|
1260
|
+
reactServerProvider = (0, alepha.$inject)(ReactServerProvider);
|
|
1261
|
+
serverProvider = (0, alepha.$inject)(alepha_server.ServerProvider);
|
|
1261
1262
|
async render(name, options = {}) {
|
|
1262
1263
|
return this.reactServerProvider.render(name, options);
|
|
1263
1264
|
}
|
|
@@ -1273,20 +1274,20 @@ var ReactPageServerService = class extends ReactPageService {
|
|
|
1273
1274
|
html: match[3],
|
|
1274
1275
|
response
|
|
1275
1276
|
};
|
|
1276
|
-
throw new
|
|
1277
|
+
throw new alepha.AlephaError("Invalid HTML response");
|
|
1277
1278
|
}
|
|
1278
1279
|
};
|
|
1279
1280
|
|
|
1280
1281
|
//#endregion
|
|
1281
|
-
//#region src/providers/ReactBrowserRouterProvider.ts
|
|
1282
|
-
var ReactBrowserRouterProvider = class extends
|
|
1283
|
-
log = (0,
|
|
1284
|
-
alepha = (0,
|
|
1285
|
-
pageApi = (0,
|
|
1282
|
+
//#region src/core/providers/ReactBrowserRouterProvider.ts
|
|
1283
|
+
var ReactBrowserRouterProvider = class extends alepha_router.RouterProvider {
|
|
1284
|
+
log = (0, alepha_logger.$logger)();
|
|
1285
|
+
alepha = (0, alepha.$inject)(alepha.Alepha);
|
|
1286
|
+
pageApi = (0, alepha.$inject)(ReactPageProvider);
|
|
1286
1287
|
add(entry) {
|
|
1287
1288
|
this.pageApi.add(entry);
|
|
1288
1289
|
}
|
|
1289
|
-
configure = (0,
|
|
1290
|
+
configure = (0, alepha.$hook)({
|
|
1290
1291
|
on: "configure",
|
|
1291
1292
|
handler: async () => {
|
|
1292
1293
|
for (const page of this.pageApi.getPages()) if (page.component || page.lazy) this.push({
|
|
@@ -1359,24 +1360,24 @@ var ReactBrowserRouterProvider = class extends __alepha_router.RouterProvider {
|
|
|
1359
1360
|
};
|
|
1360
1361
|
|
|
1361
1362
|
//#endregion
|
|
1362
|
-
//#region src/providers/ReactBrowserProvider.ts
|
|
1363
|
-
const envSchema =
|
|
1363
|
+
//#region src/core/providers/ReactBrowserProvider.ts
|
|
1364
|
+
const envSchema = alepha.t.object({ REACT_ROOT_ID: alepha.t.text({ default: "root" }) });
|
|
1364
1365
|
/**
|
|
1365
1366
|
* React browser renderer configuration atom
|
|
1366
1367
|
*/
|
|
1367
|
-
const reactBrowserOptions = (0,
|
|
1368
|
+
const reactBrowserOptions = (0, alepha.$atom)({
|
|
1368
1369
|
name: "alepha.react.browser.options",
|
|
1369
|
-
schema:
|
|
1370
|
+
schema: alepha.t.object({ scrollRestoration: alepha.t.enum(["top", "manual"]) }),
|
|
1370
1371
|
default: { scrollRestoration: "top" }
|
|
1371
1372
|
});
|
|
1372
1373
|
var ReactBrowserProvider = class {
|
|
1373
|
-
env = (0,
|
|
1374
|
-
log = (0,
|
|
1375
|
-
client = (0,
|
|
1376
|
-
alepha = (0,
|
|
1377
|
-
router = (0,
|
|
1378
|
-
dateTimeProvider = (0,
|
|
1379
|
-
options = (0,
|
|
1374
|
+
env = (0, alepha.$env)(envSchema);
|
|
1375
|
+
log = (0, alepha_logger.$logger)();
|
|
1376
|
+
client = (0, alepha.$inject)(alepha_server_links.LinkProvider);
|
|
1377
|
+
alepha = (0, alepha.$inject)(alepha.Alepha);
|
|
1378
|
+
router = (0, alepha.$inject)(ReactBrowserRouterProvider);
|
|
1379
|
+
dateTimeProvider = (0, alepha.$inject)(alepha_datetime.DateTimeProvider);
|
|
1380
|
+
options = (0, alepha.$use)(reactBrowserOptions);
|
|
1380
1381
|
getRootElement() {
|
|
1381
1382
|
const root = this.document.getElementById(this.env.REACT_ROOT_ID);
|
|
1382
1383
|
if (root) return root;
|
|
@@ -1489,7 +1490,7 @@ var ReactBrowserProvider = class {
|
|
|
1489
1490
|
console.error(error);
|
|
1490
1491
|
}
|
|
1491
1492
|
}
|
|
1492
|
-
onTransitionEnd = (0,
|
|
1493
|
+
onTransitionEnd = (0, alepha.$hook)({
|
|
1493
1494
|
on: "react:transition:end",
|
|
1494
1495
|
handler: () => {
|
|
1495
1496
|
if (this.options.scrollRestoration === "top" && typeof window !== "undefined" && !this.alepha.isTest()) {
|
|
@@ -1498,7 +1499,7 @@ var ReactBrowserProvider = class {
|
|
|
1498
1499
|
}
|
|
1499
1500
|
}
|
|
1500
1501
|
});
|
|
1501
|
-
ready = (0,
|
|
1502
|
+
ready = (0, alepha.$hook)({
|
|
1502
1503
|
on: "ready",
|
|
1503
1504
|
handler: async () => {
|
|
1504
1505
|
const hydration = this.getHydrationState();
|
|
@@ -1524,10 +1525,10 @@ var ReactBrowserProvider = class {
|
|
|
1524
1525
|
};
|
|
1525
1526
|
|
|
1526
1527
|
//#endregion
|
|
1527
|
-
//#region src/services/ReactRouter.ts
|
|
1528
|
+
//#region src/core/services/ReactRouter.ts
|
|
1528
1529
|
var ReactRouter = class {
|
|
1529
|
-
alepha = (0,
|
|
1530
|
-
pageApi = (0,
|
|
1530
|
+
alepha = (0, alepha.$inject)(alepha.Alepha);
|
|
1531
|
+
pageApi = (0, alepha.$inject)(ReactPageProvider);
|
|
1531
1532
|
get state() {
|
|
1532
1533
|
return this.alepha.state.get("alepha.react.router.state");
|
|
1533
1534
|
}
|
|
@@ -1637,18 +1638,18 @@ var ReactRouter = class {
|
|
|
1637
1638
|
};
|
|
1638
1639
|
|
|
1639
1640
|
//#endregion
|
|
1640
|
-
//#region src/hooks/useInject.ts
|
|
1641
|
+
//#region src/core/hooks/useInject.ts
|
|
1641
1642
|
/**
|
|
1642
1643
|
* Hook to inject a service instance.
|
|
1643
1644
|
* It's a wrapper of `useAlepha().inject(service)` with a memoization.
|
|
1644
1645
|
*/
|
|
1645
1646
|
const useInject = (service) => {
|
|
1646
|
-
const alepha = useAlepha();
|
|
1647
|
-
return (0, react.useMemo)(() => alepha.inject(service), []);
|
|
1647
|
+
const alepha$1 = useAlepha();
|
|
1648
|
+
return (0, react.useMemo)(() => alepha$1.inject(service), []);
|
|
1648
1649
|
};
|
|
1649
1650
|
|
|
1650
1651
|
//#endregion
|
|
1651
|
-
//#region src/hooks/useRouter.ts
|
|
1652
|
+
//#region src/core/hooks/useRouter.ts
|
|
1652
1653
|
/**
|
|
1653
1654
|
* Use this hook to access the React Router instance.
|
|
1654
1655
|
*
|
|
@@ -1668,7 +1669,7 @@ const useRouter = () => {
|
|
|
1668
1669
|
};
|
|
1669
1670
|
|
|
1670
1671
|
//#endregion
|
|
1671
|
-
//#region src/components/Link.tsx
|
|
1672
|
+
//#region src/core/components/Link.tsx
|
|
1672
1673
|
const Link = (props) => {
|
|
1673
1674
|
const router = useRouter();
|
|
1674
1675
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
|
|
@@ -1680,7 +1681,7 @@ const Link = (props) => {
|
|
|
1680
1681
|
var Link_default = Link;
|
|
1681
1682
|
|
|
1682
1683
|
//#endregion
|
|
1683
|
-
//#region src/hooks/useAction.ts
|
|
1684
|
+
//#region src/core/hooks/useAction.ts
|
|
1684
1685
|
/**
|
|
1685
1686
|
* Hook for handling async actions with automatic error handling and event emission.
|
|
1686
1687
|
*
|
|
@@ -1786,8 +1787,8 @@ var Link_default = Link;
|
|
|
1786
1787
|
* ```
|
|
1787
1788
|
*/
|
|
1788
1789
|
function useAction(options, deps) {
|
|
1789
|
-
const alepha = useAlepha();
|
|
1790
|
-
const dateTimeProvider = useInject(
|
|
1790
|
+
const alepha$1 = useAlepha();
|
|
1791
|
+
const dateTimeProvider = useInject(alepha_datetime.DateTimeProvider);
|
|
1791
1792
|
const [loading, setLoading] = (0, react.useState)(false);
|
|
1792
1793
|
const [error, setError] = (0, react.useState)();
|
|
1793
1794
|
const isExecutingRef = (0, react.useRef)(false);
|
|
@@ -1820,14 +1821,14 @@ function useAction(options, deps) {
|
|
|
1820
1821
|
isExecutingRef.current = true;
|
|
1821
1822
|
setLoading(true);
|
|
1822
1823
|
setError(void 0);
|
|
1823
|
-
await alepha.events.emit("react:action:begin", {
|
|
1824
|
+
await alepha$1.events.emit("react:action:begin", {
|
|
1824
1825
|
type: "custom",
|
|
1825
1826
|
id: options.id
|
|
1826
1827
|
});
|
|
1827
1828
|
try {
|
|
1828
1829
|
const result = await options.handler(...args, { signal: abortController.signal });
|
|
1829
1830
|
if (!isMountedRef.current || abortController.signal.aborted) return;
|
|
1830
|
-
await alepha.events.emit("react:action:success", {
|
|
1831
|
+
await alepha$1.events.emit("react:action:success", {
|
|
1831
1832
|
type: "custom",
|
|
1832
1833
|
id: options.id
|
|
1833
1834
|
});
|
|
@@ -1838,7 +1839,7 @@ function useAction(options, deps) {
|
|
|
1838
1839
|
if (!isMountedRef.current) return;
|
|
1839
1840
|
const error$1 = err;
|
|
1840
1841
|
setError(error$1);
|
|
1841
|
-
await alepha.events.emit("react:action:error", {
|
|
1842
|
+
await alepha$1.events.emit("react:action:error", {
|
|
1842
1843
|
type: "custom",
|
|
1843
1844
|
id: options.id,
|
|
1844
1845
|
error: error$1
|
|
@@ -1848,7 +1849,7 @@ function useAction(options, deps) {
|
|
|
1848
1849
|
} finally {
|
|
1849
1850
|
isExecutingRef.current = false;
|
|
1850
1851
|
setLoading(false);
|
|
1851
|
-
await alepha.events.emit("react:action:end", {
|
|
1852
|
+
await alepha$1.events.emit("react:action:end", {
|
|
1852
1853
|
type: "custom",
|
|
1853
1854
|
id: options.id
|
|
1854
1855
|
});
|
|
@@ -1907,7 +1908,7 @@ function useAction(options, deps) {
|
|
|
1907
1908
|
}
|
|
1908
1909
|
|
|
1909
1910
|
//#endregion
|
|
1910
|
-
//#region src/hooks/useActive.ts
|
|
1911
|
+
//#region src/core/hooks/useActive.ts
|
|
1911
1912
|
const useActive = (args) => {
|
|
1912
1913
|
const router = useRouter();
|
|
1913
1914
|
const [isPending, setPending] = (0, react.useState)(false);
|
|
@@ -1940,70 +1941,70 @@ const useActive = (args) => {
|
|
|
1940
1941
|
};
|
|
1941
1942
|
|
|
1942
1943
|
//#endregion
|
|
1943
|
-
//#region src/hooks/useClient.ts
|
|
1944
|
+
//#region src/core/hooks/useClient.ts
|
|
1944
1945
|
/**
|
|
1945
1946
|
* Hook to get a virtual client for the specified scope.
|
|
1946
1947
|
*
|
|
1947
1948
|
* It's the React-hook version of `$client()`, from `AlephaServerLinks` module.
|
|
1948
1949
|
*/
|
|
1949
1950
|
const useClient = (scope) => {
|
|
1950
|
-
return useInject(
|
|
1951
|
+
return useInject(alepha_server_links.LinkProvider).client(scope);
|
|
1951
1952
|
};
|
|
1952
1953
|
|
|
1953
1954
|
//#endregion
|
|
1954
|
-
//#region src/hooks/useQueryParams.ts
|
|
1955
|
+
//#region src/core/hooks/useQueryParams.ts
|
|
1955
1956
|
/**
|
|
1956
1957
|
* Not well tested. Use with caution.
|
|
1957
1958
|
*/
|
|
1958
1959
|
const useQueryParams = (schema, options = {}) => {
|
|
1959
|
-
const alepha = useAlepha();
|
|
1960
|
+
const alepha$1 = useAlepha();
|
|
1960
1961
|
const key = options.key ?? "q";
|
|
1961
1962
|
const router = useRouter();
|
|
1962
1963
|
const querystring = router.query[key];
|
|
1963
|
-
const [queryParams = {}, setQueryParams] = (0, react.useState)(decode(alepha, schema, router.query[key]));
|
|
1964
|
+
const [queryParams = {}, setQueryParams] = (0, react.useState)(decode(alepha$1, schema, router.query[key]));
|
|
1964
1965
|
(0, react.useEffect)(() => {
|
|
1965
|
-
setQueryParams(decode(alepha, schema, querystring));
|
|
1966
|
+
setQueryParams(decode(alepha$1, schema, querystring));
|
|
1966
1967
|
}, [querystring]);
|
|
1967
1968
|
return [queryParams, (queryParams$1) => {
|
|
1968
1969
|
setQueryParams(queryParams$1);
|
|
1969
1970
|
router.setQueryParams((data) => {
|
|
1970
1971
|
return {
|
|
1971
1972
|
...data,
|
|
1972
|
-
[key]: encode(alepha, schema, queryParams$1)
|
|
1973
|
+
[key]: encode(alepha$1, schema, queryParams$1)
|
|
1973
1974
|
};
|
|
1974
1975
|
});
|
|
1975
1976
|
}];
|
|
1976
1977
|
};
|
|
1977
|
-
const encode = (alepha, schema, data) => {
|
|
1978
|
-
return btoa(JSON.stringify(alepha.codec.decode(schema, data)));
|
|
1978
|
+
const encode = (alepha$1, schema, data) => {
|
|
1979
|
+
return btoa(JSON.stringify(alepha$1.codec.decode(schema, data)));
|
|
1979
1980
|
};
|
|
1980
|
-
const decode = (alepha, schema, data) => {
|
|
1981
|
+
const decode = (alepha$1, schema, data) => {
|
|
1981
1982
|
try {
|
|
1982
|
-
return alepha.codec.decode(schema, JSON.parse(atob(decodeURIComponent(data))));
|
|
1983
|
+
return alepha$1.codec.decode(schema, JSON.parse(atob(decodeURIComponent(data))));
|
|
1983
1984
|
} catch {
|
|
1984
1985
|
return;
|
|
1985
1986
|
}
|
|
1986
1987
|
};
|
|
1987
1988
|
|
|
1988
1989
|
//#endregion
|
|
1989
|
-
//#region src/hooks/useSchema.ts
|
|
1990
|
+
//#region src/core/hooks/useSchema.ts
|
|
1990
1991
|
const useSchema = (action) => {
|
|
1991
1992
|
const name = action.name;
|
|
1992
|
-
const alepha = useAlepha();
|
|
1993
|
-
const httpClient = useInject(
|
|
1994
|
-
const [schema, setSchema] = (0, react.useState)(ssrSchemaLoading(alepha, name));
|
|
1993
|
+
const alepha$1 = useAlepha();
|
|
1994
|
+
const httpClient = useInject(alepha_server.HttpClient);
|
|
1995
|
+
const [schema, setSchema] = (0, react.useState)(ssrSchemaLoading(alepha$1, name));
|
|
1995
1996
|
(0, react.useEffect)(() => {
|
|
1996
1997
|
if (!schema.loading) return;
|
|
1997
|
-
httpClient.fetch(`${
|
|
1998
|
+
httpClient.fetch(`${alepha_server_links.LinkProvider.path.apiLinks}/${name}/schema`, { localCache: true }).then((it) => setSchema(it.data));
|
|
1998
1999
|
}, [name]);
|
|
1999
2000
|
return schema;
|
|
2000
2001
|
};
|
|
2001
2002
|
/**
|
|
2002
2003
|
* Get an action schema during server-side rendering (SSR) or client-side rendering (CSR).
|
|
2003
2004
|
*/
|
|
2004
|
-
const ssrSchemaLoading = (alepha, name) => {
|
|
2005
|
-
if (!alepha.isBrowser()) {
|
|
2006
|
-
const linkProvider = alepha.inject(
|
|
2005
|
+
const ssrSchemaLoading = (alepha$1, name) => {
|
|
2006
|
+
if (!alepha$1.isBrowser()) {
|
|
2007
|
+
const linkProvider = alepha$1.inject(alepha_server_links.LinkProvider);
|
|
2007
2008
|
const can = linkProvider.getServerLinks().find((link) => link.name === name);
|
|
2008
2009
|
if (can) {
|
|
2009
2010
|
const schema$1 = linkProvider.links.find((it) => it.name === name)?.schema;
|
|
@@ -2014,13 +2015,13 @@ const ssrSchemaLoading = (alepha, name) => {
|
|
|
2014
2015
|
}
|
|
2015
2016
|
return { loading: true };
|
|
2016
2017
|
}
|
|
2017
|
-
const schema = alepha.inject(
|
|
2018
|
+
const schema = alepha$1.inject(alepha_server_links.LinkProvider).links.find((it) => it.name === name)?.schema;
|
|
2018
2019
|
if (schema) return schema;
|
|
2019
2020
|
return { loading: true };
|
|
2020
2021
|
};
|
|
2021
2022
|
|
|
2022
2023
|
//#endregion
|
|
2023
|
-
//#region src/index.ts
|
|
2024
|
+
//#region src/core/index.ts
|
|
2024
2025
|
/**
|
|
2025
2026
|
* Provides full-stack React development with declarative routing, server-side rendering, and client-side hydration.
|
|
2026
2027
|
*
|
|
@@ -2031,7 +2032,7 @@ const ssrSchemaLoading = (alepha, name) => {
|
|
|
2031
2032
|
* @see {@link $page}
|
|
2032
2033
|
* @module alepha.react
|
|
2033
2034
|
*/
|
|
2034
|
-
const AlephaReact = (0,
|
|
2035
|
+
const AlephaReact = (0, alepha.$module)({
|
|
2035
2036
|
name: "alepha.react",
|
|
2036
2037
|
descriptors: [$page],
|
|
2037
2038
|
services: [
|
|
@@ -2041,7 +2042,7 @@ const AlephaReact = (0, __alepha_core.$module)({
|
|
|
2041
2042
|
ReactPageService,
|
|
2042
2043
|
ReactPageServerService
|
|
2043
2044
|
],
|
|
2044
|
-
register: (alepha) => alepha.with(
|
|
2045
|
+
register: (alepha$1) => alepha$1.with(alepha_datetime.AlephaDateTime).with(alepha_server.AlephaServer).with(alepha_server_cache.AlephaServerCache).with(alepha_server_links.AlephaServerLinks).with({
|
|
2045
2046
|
provide: ReactPageService,
|
|
2046
2047
|
use: ReactPageServerService
|
|
2047
2048
|
}).with(ReactServerProvider).with(ReactPageProvider).with(ReactRouter)
|