@alepha/react 0.7.3 → 0.7.4

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.
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
- var jsxRuntime = require('react/jsx-runtime');
4
3
  var core = require('@alepha/core');
5
- var React = require('react');
6
4
  var server = require('@alepha/server');
7
5
  var router = require('@alepha/router');
6
+ var React = require('react');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
8
 
9
9
  const KEY = "PAGE";
10
10
  const $page = (options) => {
@@ -945,253 +945,16 @@ class ReactBrowserProvider {
945
945
  });
946
946
  }
947
947
 
948
- class RouterHookApi {
949
- constructor(pages, state, layer, browser) {
950
- this.pages = pages;
951
- this.state = state;
952
- this.layer = layer;
953
- this.browser = browser;
954
- }
955
- get current() {
956
- return this.state;
957
- }
958
- get pathname() {
959
- return this.state.pathname;
960
- }
961
- get query() {
962
- const query = {};
963
- for (const [key, value] of new URLSearchParams(
964
- this.state.search
965
- ).entries()) {
966
- query[key] = String(value);
967
- }
968
- return query;
969
- }
970
- async back() {
971
- this.browser?.history.back();
972
- }
973
- async forward() {
974
- this.browser?.history.forward();
975
- }
976
- async invalidate(props) {
977
- await this.browser?.invalidate(props);
978
- }
979
- /**
980
- * Create a valid href for the given pathname.
981
- *
982
- * @param pathname
983
- * @param layer
984
- */
985
- createHref(pathname, layer = this.layer, options = {}) {
986
- if (typeof pathname === "object") {
987
- pathname = pathname.options.path ?? "";
988
- }
989
- if (options.params) {
990
- for (const [key, value] of Object.entries(options.params)) {
991
- pathname = pathname.replace(`:${key}`, String(value));
992
- }
993
- }
994
- return pathname.startsWith("/") ? pathname : `${layer.path}/${pathname}`.replace(/\/\/+/g, "/");
995
- }
996
- async go(path, options) {
997
- for (const page of this.pages) {
998
- if (page.name === path) {
999
- path = page.path ?? "";
1000
- break;
1001
- }
1002
- }
1003
- await this.browser?.go(this.createHref(path, this.layer, options), options);
1004
- }
1005
- anchor(path, options = {}) {
1006
- for (const page of this.pages) {
1007
- if (page.name === path) {
1008
- path = page.path ?? "";
1009
- break;
1010
- }
1011
- }
1012
- const href = this.createHref(path, this.layer, options);
1013
- return {
1014
- href,
1015
- onClick: (ev) => {
1016
- ev.stopPropagation();
1017
- ev.preventDefault();
1018
- this.go(path, options).catch(console.error);
1019
- }
1020
- };
1021
- }
1022
- /**
1023
- * Set query params.
1024
- *
1025
- * @param record
1026
- * @param options
1027
- */
1028
- setQueryParams(record, options = {}) {
1029
- const func = typeof record === "function" ? record : () => record;
1030
- const search = new URLSearchParams(func(this.query)).toString();
1031
- const state = search ? `${this.pathname}?${search}` : this.pathname;
1032
- if (options.push) {
1033
- window.history.pushState({}, "", state);
1034
- } else {
1035
- window.history.replaceState({}, "", state);
1036
- }
1037
- }
1038
- }
1039
-
1040
- const useRouter = () => {
1041
- const ctx = React.useContext(RouterContext);
1042
- const layer = React.useContext(RouterLayerContext);
1043
- if (!ctx || !layer) {
1044
- throw new Error("useRouter must be used within a RouterProvider");
1045
- }
1046
- const pages = React.useMemo(() => {
1047
- return ctx.alepha.get(PageDescriptorProvider).getPages();
1048
- }, []);
1049
- return React.useMemo(
1050
- () => new RouterHookApi(
1051
- pages,
1052
- ctx.state,
1053
- layer,
1054
- ctx.alepha.isBrowser() ? ctx.alepha.get(ReactBrowserProvider) : void 0
1055
- ),
1056
- [layer]
1057
- );
1058
- };
1059
-
1060
- const Link = (props) => {
1061
- React.useContext(RouterContext);
1062
- const router = useRouter();
1063
- const to = typeof props.to === "string" ? props.to : props.to[core.OPTIONS].path;
1064
- if (!to) {
1065
- return null;
1066
- }
1067
- const can = typeof props.to === "string" ? void 0 : props.to[core.OPTIONS].can;
1068
- if (can && !can()) {
1069
- return null;
1070
- }
1071
- const name = typeof props.to === "string" ? void 0 : props.to[core.OPTIONS].name;
1072
- const anchorProps = {
1073
- ...props,
1074
- to: void 0
1075
- };
1076
- return /* @__PURE__ */ jsxRuntime.jsx("a", { ...router.anchor(to), ...anchorProps, children: props.children ?? name });
1077
- };
1078
-
1079
- const useActive = (path) => {
1080
- const router = useRouter();
1081
- const ctx = React.useContext(RouterContext);
1082
- const layer = React.useContext(RouterLayerContext);
1083
- if (!ctx || !layer) {
1084
- throw new Error("useRouter must be used within a RouterProvider");
1085
- }
1086
- let name;
1087
- if (typeof path === "object" && path.options.name) {
1088
- name = path.options.name;
1089
- }
1090
- const [current, setCurrent] = React.useState(ctx.state.pathname);
1091
- const href = React.useMemo(() => router.createHref(path, layer), [path, layer]);
1092
- const [isPending, setPending] = React.useState(false);
1093
- const isActive = current === href;
1094
- useRouterEvents({
1095
- onEnd: ({ state }) => setCurrent(state.pathname)
1096
- });
1097
- return {
1098
- name,
1099
- isPending,
1100
- isActive,
1101
- anchorProps: {
1102
- href,
1103
- onClick: (ev) => {
1104
- ev.stopPropagation();
1105
- ev.preventDefault();
1106
- if (isActive) return;
1107
- if (isPending) return;
1108
- setPending(true);
1109
- router.go(href).then(() => {
1110
- setPending(false);
1111
- });
1112
- }
1113
- }
1114
- };
1115
- };
1116
-
1117
- const useInject = (clazz) => {
1118
- const ctx = React.useContext(RouterContext);
1119
- if (!ctx) {
1120
- throw new Error("useRouter must be used within a <RouterProvider>");
1121
- }
1122
- return React.useMemo(() => ctx.alepha.get(clazz), []);
1123
- };
1124
-
1125
- const useClient = (_scope) => {
1126
- return useInject(server.HttpClient).of();
1127
- };
1128
-
1129
- const useQueryParams = (schema, options = {}) => {
1130
- const ctx = React.useContext(RouterContext);
1131
- if (!ctx) {
1132
- throw new Error("useQueryParams must be used within a RouterProvider");
1133
- }
1134
- const key = options.key ?? "q";
1135
- const router = useRouter();
1136
- const querystring = router.query[key];
1137
- const [queryParams, setQueryParams] = React.useState(
1138
- decode(ctx.alepha, schema, router.query[key])
1139
- );
1140
- React.useEffect(() => {
1141
- setQueryParams(decode(ctx.alepha, schema, querystring));
1142
- }, [querystring]);
1143
- return [
1144
- queryParams,
1145
- (queryParams2) => {
1146
- setQueryParams(queryParams2);
1147
- router.setQueryParams((data) => {
1148
- return { ...data, [key]: encode(ctx.alepha, schema, queryParams2) };
1149
- });
1150
- }
1151
- ];
1152
- };
1153
- const encode = (alepha, schema, data) => {
1154
- return btoa(JSON.stringify(alepha.parse(schema, data)));
1155
- };
1156
- const decode = (alepha, schema, data) => {
1157
- try {
1158
- return alepha.parse(schema, JSON.parse(atob(decodeURIComponent(data))));
1159
- } catch (_error) {
1160
- return {};
1161
- }
1162
- };
1163
-
1164
- const useRouterState = () => {
1165
- const ctx = React.useContext(RouterContext);
1166
- const layer = React.useContext(RouterLayerContext);
1167
- if (!ctx || !layer) {
1168
- throw new Error("useRouter must be used within a RouterProvider");
1169
- }
1170
- const [state, setState] = React.useState(ctx.state);
1171
- useRouterEvents({
1172
- onEnd: ({ state: state2 }) => setState({ ...state2 })
1173
- });
1174
- return state;
1175
- };
1176
-
1177
948
  exports.$page = $page;
1178
949
  exports.BrowserRouterProvider = BrowserRouterProvider;
1179
950
  exports.ClientOnly = ClientOnly;
1180
951
  exports.ErrorBoundary = ErrorBoundary;
1181
- exports.Link = Link;
1182
952
  exports.NestedView = NestedView;
1183
953
  exports.PageDescriptorProvider = PageDescriptorProvider;
1184
954
  exports.ReactBrowserProvider = ReactBrowserProvider;
1185
955
  exports.RedirectionError = RedirectionError;
1186
956
  exports.RouterContext = RouterContext;
1187
- exports.RouterHookApi = RouterHookApi;
1188
957
  exports.RouterLayerContext = RouterLayerContext;
1189
958
  exports.isPageRoute = isPageRoute;
1190
- exports.useActive = useActive;
1191
959
  exports.useAlepha = useAlepha;
1192
- exports.useClient = useClient;
1193
- exports.useInject = useInject;
1194
- exports.useQueryParams = useQueryParams;
1195
- exports.useRouter = useRouter;
1196
960
  exports.useRouterEvents = useRouterEvents;
1197
- exports.useRouterState = useRouterState;
@@ -1,8 +1,8 @@
1
- import { jsx, jsxs } from 'react/jsx-runtime';
2
1
  import { __descriptor, OPTIONS, NotImplementedError, KIND, t, $logger, $inject, Alepha, $hook } from '@alepha/core';
3
- import React, { useState, useEffect, createContext, useContext, createElement, StrictMode, useMemo } from 'react';
4
2
  import { HttpClient } from '@alepha/server';
5
3
  import { RouterProvider } from '@alepha/router';
4
+ import React, { useState, useEffect, createContext, useContext, createElement, StrictMode } from 'react';
5
+ import { jsx, jsxs } from 'react/jsx-runtime';
6
6
 
7
7
  const KEY = "PAGE";
8
8
  const $page = (options) => {
@@ -943,233 +943,4 @@ class ReactBrowserProvider {
943
943
  });
944
944
  }
945
945
 
946
- class RouterHookApi {
947
- constructor(pages, state, layer, browser) {
948
- this.pages = pages;
949
- this.state = state;
950
- this.layer = layer;
951
- this.browser = browser;
952
- }
953
- get current() {
954
- return this.state;
955
- }
956
- get pathname() {
957
- return this.state.pathname;
958
- }
959
- get query() {
960
- const query = {};
961
- for (const [key, value] of new URLSearchParams(
962
- this.state.search
963
- ).entries()) {
964
- query[key] = String(value);
965
- }
966
- return query;
967
- }
968
- async back() {
969
- this.browser?.history.back();
970
- }
971
- async forward() {
972
- this.browser?.history.forward();
973
- }
974
- async invalidate(props) {
975
- await this.browser?.invalidate(props);
976
- }
977
- /**
978
- * Create a valid href for the given pathname.
979
- *
980
- * @param pathname
981
- * @param layer
982
- */
983
- createHref(pathname, layer = this.layer, options = {}) {
984
- if (typeof pathname === "object") {
985
- pathname = pathname.options.path ?? "";
986
- }
987
- if (options.params) {
988
- for (const [key, value] of Object.entries(options.params)) {
989
- pathname = pathname.replace(`:${key}`, String(value));
990
- }
991
- }
992
- return pathname.startsWith("/") ? pathname : `${layer.path}/${pathname}`.replace(/\/\/+/g, "/");
993
- }
994
- async go(path, options) {
995
- for (const page of this.pages) {
996
- if (page.name === path) {
997
- path = page.path ?? "";
998
- break;
999
- }
1000
- }
1001
- await this.browser?.go(this.createHref(path, this.layer, options), options);
1002
- }
1003
- anchor(path, options = {}) {
1004
- for (const page of this.pages) {
1005
- if (page.name === path) {
1006
- path = page.path ?? "";
1007
- break;
1008
- }
1009
- }
1010
- const href = this.createHref(path, this.layer, options);
1011
- return {
1012
- href,
1013
- onClick: (ev) => {
1014
- ev.stopPropagation();
1015
- ev.preventDefault();
1016
- this.go(path, options).catch(console.error);
1017
- }
1018
- };
1019
- }
1020
- /**
1021
- * Set query params.
1022
- *
1023
- * @param record
1024
- * @param options
1025
- */
1026
- setQueryParams(record, options = {}) {
1027
- const func = typeof record === "function" ? record : () => record;
1028
- const search = new URLSearchParams(func(this.query)).toString();
1029
- const state = search ? `${this.pathname}?${search}` : this.pathname;
1030
- if (options.push) {
1031
- window.history.pushState({}, "", state);
1032
- } else {
1033
- window.history.replaceState({}, "", state);
1034
- }
1035
- }
1036
- }
1037
-
1038
- const useRouter = () => {
1039
- const ctx = useContext(RouterContext);
1040
- const layer = useContext(RouterLayerContext);
1041
- if (!ctx || !layer) {
1042
- throw new Error("useRouter must be used within a RouterProvider");
1043
- }
1044
- const pages = useMemo(() => {
1045
- return ctx.alepha.get(PageDescriptorProvider).getPages();
1046
- }, []);
1047
- return useMemo(
1048
- () => new RouterHookApi(
1049
- pages,
1050
- ctx.state,
1051
- layer,
1052
- ctx.alepha.isBrowser() ? ctx.alepha.get(ReactBrowserProvider) : void 0
1053
- ),
1054
- [layer]
1055
- );
1056
- };
1057
-
1058
- const Link = (props) => {
1059
- React.useContext(RouterContext);
1060
- const router = useRouter();
1061
- const to = typeof props.to === "string" ? props.to : props.to[OPTIONS].path;
1062
- if (!to) {
1063
- return null;
1064
- }
1065
- const can = typeof props.to === "string" ? void 0 : props.to[OPTIONS].can;
1066
- if (can && !can()) {
1067
- return null;
1068
- }
1069
- const name = typeof props.to === "string" ? void 0 : props.to[OPTIONS].name;
1070
- const anchorProps = {
1071
- ...props,
1072
- to: void 0
1073
- };
1074
- return /* @__PURE__ */ jsx("a", { ...router.anchor(to), ...anchorProps, children: props.children ?? name });
1075
- };
1076
-
1077
- const useActive = (path) => {
1078
- const router = useRouter();
1079
- const ctx = useContext(RouterContext);
1080
- const layer = useContext(RouterLayerContext);
1081
- if (!ctx || !layer) {
1082
- throw new Error("useRouter must be used within a RouterProvider");
1083
- }
1084
- let name;
1085
- if (typeof path === "object" && path.options.name) {
1086
- name = path.options.name;
1087
- }
1088
- const [current, setCurrent] = useState(ctx.state.pathname);
1089
- const href = useMemo(() => router.createHref(path, layer), [path, layer]);
1090
- const [isPending, setPending] = useState(false);
1091
- const isActive = current === href;
1092
- useRouterEvents({
1093
- onEnd: ({ state }) => setCurrent(state.pathname)
1094
- });
1095
- return {
1096
- name,
1097
- isPending,
1098
- isActive,
1099
- anchorProps: {
1100
- href,
1101
- onClick: (ev) => {
1102
- ev.stopPropagation();
1103
- ev.preventDefault();
1104
- if (isActive) return;
1105
- if (isPending) return;
1106
- setPending(true);
1107
- router.go(href).then(() => {
1108
- setPending(false);
1109
- });
1110
- }
1111
- }
1112
- };
1113
- };
1114
-
1115
- const useInject = (clazz) => {
1116
- const ctx = useContext(RouterContext);
1117
- if (!ctx) {
1118
- throw new Error("useRouter must be used within a <RouterProvider>");
1119
- }
1120
- return useMemo(() => ctx.alepha.get(clazz), []);
1121
- };
1122
-
1123
- const useClient = (_scope) => {
1124
- return useInject(HttpClient).of();
1125
- };
1126
-
1127
- const useQueryParams = (schema, options = {}) => {
1128
- const ctx = useContext(RouterContext);
1129
- if (!ctx) {
1130
- throw new Error("useQueryParams must be used within a RouterProvider");
1131
- }
1132
- const key = options.key ?? "q";
1133
- const router = useRouter();
1134
- const querystring = router.query[key];
1135
- const [queryParams, setQueryParams] = useState(
1136
- decode(ctx.alepha, schema, router.query[key])
1137
- );
1138
- useEffect(() => {
1139
- setQueryParams(decode(ctx.alepha, schema, querystring));
1140
- }, [querystring]);
1141
- return [
1142
- queryParams,
1143
- (queryParams2) => {
1144
- setQueryParams(queryParams2);
1145
- router.setQueryParams((data) => {
1146
- return { ...data, [key]: encode(ctx.alepha, schema, queryParams2) };
1147
- });
1148
- }
1149
- ];
1150
- };
1151
- const encode = (alepha, schema, data) => {
1152
- return btoa(JSON.stringify(alepha.parse(schema, data)));
1153
- };
1154
- const decode = (alepha, schema, data) => {
1155
- try {
1156
- return alepha.parse(schema, JSON.parse(atob(decodeURIComponent(data))));
1157
- } catch (_error) {
1158
- return {};
1159
- }
1160
- };
1161
-
1162
- const useRouterState = () => {
1163
- const ctx = useContext(RouterContext);
1164
- const layer = useContext(RouterLayerContext);
1165
- if (!ctx || !layer) {
1166
- throw new Error("useRouter must be used within a RouterProvider");
1167
- }
1168
- const [state, setState] = useState(ctx.state);
1169
- useRouterEvents({
1170
- onEnd: ({ state: state2 }) => setState({ ...state2 })
1171
- });
1172
- return state;
1173
- };
1174
-
1175
- export { $page as $, BrowserRouterProvider as B, ClientOnly as C, ErrorBoundary as E, Link as L, NestedView as N, PageDescriptorProvider as P, RedirectionError as R, RouterContext as a, RouterLayerContext as b, RouterHookApi as c, useAlepha as d, useClient as e, useInject as f, useQueryParams as g, useRouter as h, useRouterEvents as i, useRouterState as j, isPageRoute as k, ReactBrowserProvider as l, useActive as u };
946
+ export { $page as $, BrowserRouterProvider as B, ClientOnly as C, ErrorBoundary as E, NestedView as N, PageDescriptorProvider as P, RouterContext as R, RouterLayerContext as a, ReactBrowserProvider as b, RedirectionError as c, useAlepha as d, isPageRoute as i, useRouterEvents as u };
@@ -1,19 +1,19 @@
1
1
  'use strict';
2
2
 
3
3
  var core = require('@alepha/core');
4
- var useRouterState = require('./useRouterState-C2uo0jXu.cjs');
4
+ var ReactBrowserProvider = require('./ReactBrowserProvider-CXDElhnK.cjs');
5
5
  var client = require('react-dom/client');
6
- require('react/jsx-runtime');
7
- require('react');
8
6
  require('@alepha/server');
9
7
  require('@alepha/router');
8
+ require('react');
9
+ require('react/jsx-runtime');
10
10
 
11
11
  const envSchema = core.t.object({
12
12
  REACT_ROOT_ID: core.t.string({ default: "root" })
13
13
  });
14
14
  class ReactBrowserRenderer {
15
- browserProvider = core.$inject(useRouterState.ReactBrowserProvider);
16
- browserRouterProvider = core.$inject(useRouterState.BrowserRouterProvider);
15
+ browserProvider = core.$inject(ReactBrowserProvider.ReactBrowserProvider);
16
+ browserRouterProvider = core.$inject(ReactBrowserProvider.BrowserRouterProvider);
17
17
  env = core.$inject(envSchema);
18
18
  log = core.$logger();
19
19
  root;
@@ -45,30 +45,14 @@ class ReactBrowserRenderer {
45
45
  });
46
46
  }
47
47
 
48
- class ReactModule {
49
- alepha = core.$inject(core.Alepha);
50
- constructor() {
51
- this.alepha.with(useRouterState.PageDescriptorProvider).with(useRouterState.ReactBrowserProvider).with(useRouterState.BrowserRouterProvider).with(ReactBrowserRenderer);
52
- }
48
+ class AlephaReact {
49
+ name = "alepha.react";
50
+ $services = (alepha) => alepha.with(ReactBrowserProvider.PageDescriptorProvider).with(ReactBrowserProvider.ReactBrowserProvider).with(ReactBrowserProvider.BrowserRouterProvider).with(ReactBrowserRenderer);
53
51
  }
54
- core.__bind(useRouterState.$page, ReactModule);
52
+ core.__bind(ReactBrowserProvider.$page, AlephaReact);
55
53
 
56
- exports.$page = useRouterState.$page;
57
- exports.ClientOnly = useRouterState.ClientOnly;
58
- exports.ErrorBoundary = useRouterState.ErrorBoundary;
59
- exports.Link = useRouterState.Link;
60
- exports.NestedView = useRouterState.NestedView;
61
- exports.ReactBrowserProvider = useRouterState.ReactBrowserProvider;
62
- exports.RedirectionError = useRouterState.RedirectionError;
63
- exports.RouterContext = useRouterState.RouterContext;
64
- exports.RouterHookApi = useRouterState.RouterHookApi;
65
- exports.RouterLayerContext = useRouterState.RouterLayerContext;
66
- exports.useActive = useRouterState.useActive;
67
- exports.useAlepha = useRouterState.useAlepha;
68
- exports.useClient = useRouterState.useClient;
69
- exports.useInject = useRouterState.useInject;
70
- exports.useQueryParams = useRouterState.useQueryParams;
71
- exports.useRouter = useRouterState.useRouter;
72
- exports.useRouterEvents = useRouterState.useRouterEvents;
73
- exports.useRouterState = useRouterState.useRouterState;
74
- exports.ReactModule = ReactModule;
54
+ exports.BrowserRouterProvider = ReactBrowserProvider.BrowserRouterProvider;
55
+ exports.PageDescriptorProvider = ReactBrowserProvider.PageDescriptorProvider;
56
+ exports.ReactBrowserProvider = ReactBrowserProvider.ReactBrowserProvider;
57
+ exports.isPageRoute = ReactBrowserProvider.isPageRoute;
58
+ exports.AlephaReact = AlephaReact;
@@ -1,11 +1,11 @@
1
- import { t, $inject, $logger, $hook, __bind, Alepha } from '@alepha/core';
2
- import { l as ReactBrowserProvider, B as BrowserRouterProvider, $ as $page, P as PageDescriptorProvider } from './useRouterState-D5__ZcUV.js';
3
- export { C as ClientOnly, E as ErrorBoundary, L as Link, N as NestedView, R as RedirectionError, a as RouterContext, c as RouterHookApi, b as RouterLayerContext, u as useActive, d as useAlepha, e as useClient, f as useInject, g as useQueryParams, h as useRouter, i as useRouterEvents, j as useRouterState } from './useRouterState-D5__ZcUV.js';
1
+ import { t, $inject, $logger, $hook, __bind } from '@alepha/core';
2
+ import { b as ReactBrowserProvider, B as BrowserRouterProvider, $ as $page, P as PageDescriptorProvider } from './ReactBrowserProvider-ufHSOTmv.js';
3
+ export { i as isPageRoute } from './ReactBrowserProvider-ufHSOTmv.js';
4
4
  import { hydrateRoot, createRoot } from 'react-dom/client';
5
- import 'react/jsx-runtime';
6
- import 'react';
7
5
  import '@alepha/server';
8
6
  import '@alepha/router';
7
+ import 'react';
8
+ import 'react/jsx-runtime';
9
9
 
10
10
  const envSchema = t.object({
11
11
  REACT_ROOT_ID: t.string({ default: "root" })
@@ -44,12 +44,10 @@ class ReactBrowserRenderer {
44
44
  });
45
45
  }
46
46
 
47
- class ReactModule {
48
- alepha = $inject(Alepha);
49
- constructor() {
50
- this.alepha.with(PageDescriptorProvider).with(ReactBrowserProvider).with(BrowserRouterProvider).with(ReactBrowserRenderer);
51
- }
47
+ class AlephaReact {
48
+ name = "alepha.react";
49
+ $services = (alepha) => alepha.with(PageDescriptorProvider).with(ReactBrowserProvider).with(BrowserRouterProvider).with(ReactBrowserRenderer);
52
50
  }
53
- __bind($page, ReactModule);
51
+ __bind($page, AlephaReact);
54
52
 
55
- export { $page, ReactBrowserProvider, ReactModule };
53
+ export { AlephaReact, BrowserRouterProvider, PageDescriptorProvider, ReactBrowserProvider };