@alepha/react 0.11.11 → 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
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { $atom, $env, $hook, $inject, $module, $use, Alepha, AlephaError, Atom, Descriptor, KIND, createDescriptor, t } from "
|
|
2
|
-
import { AlephaDateTime, DateTimeProvider } from "
|
|
3
|
-
import { AlephaServer, HttpClient, ServerProvider, ServerRouterProvider, ServerTimingProvider } from "
|
|
4
|
-
import { AlephaServerCache } from "
|
|
5
|
-
import { AlephaServerLinks, LinkProvider, ServerLinksProvider } from "
|
|
6
|
-
import { $logger } from "
|
|
1
|
+
import { $atom, $env, $hook, $inject, $module, $use, Alepha, AlephaError, Atom, Descriptor, KIND, createDescriptor, t } from "alepha";
|
|
2
|
+
import { AlephaDateTime, DateTimeProvider } from "alepha/datetime";
|
|
3
|
+
import { AlephaServer, HttpClient, ServerProvider, ServerRouterProvider, ServerTimingProvider } from "alepha/server";
|
|
4
|
+
import { AlephaServerCache } from "alepha/server/cache";
|
|
5
|
+
import { AlephaServerLinks, LinkProvider, ServerLinksProvider } from "alepha/server/links";
|
|
6
|
+
import { $logger } from "alepha/logger";
|
|
7
7
|
import React, { StrictMode, createContext, createElement, memo, use, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
|
|
8
8
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
9
9
|
import { existsSync } from "node:fs";
|
|
10
10
|
import { join } from "node:path";
|
|
11
|
-
import { ServerStaticProvider } from "
|
|
11
|
+
import { ServerStaticProvider } from "alepha/server/static";
|
|
12
12
|
import { renderToString } from "react-dom/server";
|
|
13
|
-
import { RouterProvider } from "
|
|
13
|
+
import { RouterProvider } from "alepha/router";
|
|
14
14
|
|
|
15
|
-
//#region src/services/ReactPageService.ts
|
|
15
|
+
//#region src/core/services/ReactPageService.ts
|
|
16
16
|
var ReactPageService = class {
|
|
17
17
|
fetch(pathname, options = {}) {
|
|
18
18
|
throw new AlephaError("Fetch is not available for this environment.");
|
|
@@ -23,7 +23,7 @@ var ReactPageService = class {
|
|
|
23
23
|
};
|
|
24
24
|
|
|
25
25
|
//#endregion
|
|
26
|
-
//#region src/descriptors/$page.ts
|
|
26
|
+
//#region src/core/descriptors/$page.ts
|
|
27
27
|
/**
|
|
28
28
|
* Main descriptor for defining a React route in the application.
|
|
29
29
|
*
|
|
@@ -148,7 +148,7 @@ var PageDescriptor = class extends Descriptor {
|
|
|
148
148
|
$page[KIND] = PageDescriptor;
|
|
149
149
|
|
|
150
150
|
//#endregion
|
|
151
|
-
//#region src/components/ClientOnly.tsx
|
|
151
|
+
//#region src/core/components/ClientOnly.tsx
|
|
152
152
|
/**
|
|
153
153
|
* A small utility component that renders its children only on the client side.
|
|
154
154
|
*
|
|
@@ -168,7 +168,7 @@ const ClientOnly = (props) => {
|
|
|
168
168
|
var ClientOnly_default = ClientOnly;
|
|
169
169
|
|
|
170
170
|
//#endregion
|
|
171
|
-
//#region src/components/ErrorViewer.tsx
|
|
171
|
+
//#region src/core/components/ErrorViewer.tsx
|
|
172
172
|
const ErrorViewer = ({ error, alepha }) => {
|
|
173
173
|
const [expanded, setExpanded] = useState(false);
|
|
174
174
|
if (alepha.isProduction()) return /* @__PURE__ */ jsx(ErrorViewerProduction, {});
|
|
@@ -254,6 +254,7 @@ const ErrorViewer = ({ error, alepha }) => {
|
|
|
254
254
|
] }), stackLines.length > 0 && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("div", {
|
|
255
255
|
style: styles.sectionHeader,
|
|
256
256
|
children: [/* @__PURE__ */ jsx("span", { children: "Stack trace" }), /* @__PURE__ */ jsx("button", {
|
|
257
|
+
type: "button",
|
|
257
258
|
onClick: () => copyToClipboard(error.stack),
|
|
258
259
|
style: styles.copyButton,
|
|
259
260
|
children: "Copy all"
|
|
@@ -315,11 +316,11 @@ const ErrorViewerProduction = () => {
|
|
|
315
316
|
};
|
|
316
317
|
|
|
317
318
|
//#endregion
|
|
318
|
-
//#region src/contexts/RouterLayerContext.ts
|
|
319
|
+
//#region src/core/contexts/RouterLayerContext.ts
|
|
319
320
|
const RouterLayerContext = createContext(void 0);
|
|
320
321
|
|
|
321
322
|
//#endregion
|
|
322
|
-
//#region src/errors/Redirection.ts
|
|
323
|
+
//#region src/core/errors/Redirection.ts
|
|
323
324
|
/**
|
|
324
325
|
* Used for Redirection during the page loading.
|
|
325
326
|
*
|
|
@@ -334,11 +335,11 @@ var Redirection = class extends Error {
|
|
|
334
335
|
};
|
|
335
336
|
|
|
336
337
|
//#endregion
|
|
337
|
-
//#region src/contexts/AlephaContext.ts
|
|
338
|
+
//#region src/core/contexts/AlephaContext.ts
|
|
338
339
|
const AlephaContext = createContext(void 0);
|
|
339
340
|
|
|
340
341
|
//#endregion
|
|
341
|
-
//#region src/hooks/useAlepha.ts
|
|
342
|
+
//#region src/core/hooks/useAlepha.ts
|
|
342
343
|
/**
|
|
343
344
|
* Main Alepha hook.
|
|
344
345
|
*
|
|
@@ -358,7 +359,7 @@ const useAlepha = () => {
|
|
|
358
359
|
};
|
|
359
360
|
|
|
360
361
|
//#endregion
|
|
361
|
-
//#region src/hooks/useEvents.ts
|
|
362
|
+
//#region src/core/hooks/useEvents.ts
|
|
362
363
|
/**
|
|
363
364
|
* Allow subscribing to multiple Alepha events. See {@link Hooks} for available events.
|
|
364
365
|
*
|
|
@@ -395,7 +396,7 @@ const useEvents = (opts, deps) => {
|
|
|
395
396
|
};
|
|
396
397
|
|
|
397
398
|
//#endregion
|
|
398
|
-
//#region src/hooks/useStore.ts
|
|
399
|
+
//#region src/core/hooks/useStore.ts
|
|
399
400
|
function useStore(target, defaultValue) {
|
|
400
401
|
const alepha = useAlepha();
|
|
401
402
|
useMemo(() => {
|
|
@@ -415,7 +416,7 @@ function useStore(target, defaultValue) {
|
|
|
415
416
|
}
|
|
416
417
|
|
|
417
418
|
//#endregion
|
|
418
|
-
//#region src/hooks/useRouterState.ts
|
|
419
|
+
//#region src/core/hooks/useRouterState.ts
|
|
419
420
|
const useRouterState = () => {
|
|
420
421
|
const [state] = useStore("alepha.react.router.state");
|
|
421
422
|
if (!state) throw new AlephaError("Missing react router state");
|
|
@@ -423,7 +424,7 @@ const useRouterState = () => {
|
|
|
423
424
|
};
|
|
424
425
|
|
|
425
426
|
//#endregion
|
|
426
|
-
//#region src/components/ErrorBoundary.tsx
|
|
427
|
+
//#region src/core/components/ErrorBoundary.tsx
|
|
427
428
|
/**
|
|
428
429
|
* A reusable error boundary for catching rendering errors
|
|
429
430
|
* in any part of the React component tree.
|
|
@@ -454,7 +455,7 @@ var ErrorBoundary = class extends React.Component {
|
|
|
454
455
|
var ErrorBoundary_default = ErrorBoundary;
|
|
455
456
|
|
|
456
457
|
//#endregion
|
|
457
|
-
//#region src/components/NestedView.tsx
|
|
458
|
+
//#region src/core/components/NestedView.tsx
|
|
458
459
|
/**
|
|
459
460
|
* A component that renders the current view of the nested router layer.
|
|
460
461
|
*
|
|
@@ -462,7 +463,7 @@ var ErrorBoundary_default = ErrorBoundary;
|
|
|
462
463
|
*
|
|
463
464
|
* @example
|
|
464
465
|
* ```tsx
|
|
465
|
-
* import { NestedView } from "alepha/react";
|
|
466
|
+
* import { NestedView } from "@alepha/react";
|
|
466
467
|
*
|
|
467
468
|
* class App {
|
|
468
469
|
* parent = $page({
|
|
@@ -576,7 +577,7 @@ function parseAnimation(animationLike, state, type = "enter") {
|
|
|
576
577
|
}
|
|
577
578
|
|
|
578
579
|
//#endregion
|
|
579
|
-
//#region src/components/NotFound.tsx
|
|
580
|
+
//#region src/core/components/NotFound.tsx
|
|
580
581
|
function NotFoundPage(props) {
|
|
581
582
|
return /* @__PURE__ */ jsx("div", {
|
|
582
583
|
style: {
|
|
@@ -601,7 +602,7 @@ function NotFoundPage(props) {
|
|
|
601
602
|
}
|
|
602
603
|
|
|
603
604
|
//#endregion
|
|
604
|
-
//#region src/providers/ReactPageProvider.ts
|
|
605
|
+
//#region src/core/providers/ReactPageProvider.ts
|
|
605
606
|
const envSchema$2 = t.object({ REACT_STRICT_MODE: t.boolean({ default: true }) });
|
|
606
607
|
var ReactPageProvider = class {
|
|
607
608
|
log = $logger();
|
|
@@ -924,7 +925,7 @@ const isPageRoute = (it) => {
|
|
|
924
925
|
};
|
|
925
926
|
|
|
926
927
|
//#endregion
|
|
927
|
-
//#region src/providers/ReactServerProvider.ts
|
|
928
|
+
//#region src/core/providers/ReactServerProvider.ts
|
|
928
929
|
const envSchema$1 = t.object({
|
|
929
930
|
REACT_SSR_ENABLED: t.optional(t.boolean()),
|
|
930
931
|
REACT_ROOT_ID: t.text({ default: "root" }),
|
|
@@ -1230,7 +1231,7 @@ var ReactServerProvider = class {
|
|
|
1230
1231
|
};
|
|
1231
1232
|
|
|
1232
1233
|
//#endregion
|
|
1233
|
-
//#region src/services/ReactPageServerService.ts
|
|
1234
|
+
//#region src/core/services/ReactPageServerService.ts
|
|
1234
1235
|
var ReactPageServerService = class extends ReactPageService {
|
|
1235
1236
|
reactServerProvider = $inject(ReactServerProvider);
|
|
1236
1237
|
serverProvider = $inject(ServerProvider);
|
|
@@ -1254,7 +1255,7 @@ var ReactPageServerService = class extends ReactPageService {
|
|
|
1254
1255
|
};
|
|
1255
1256
|
|
|
1256
1257
|
//#endregion
|
|
1257
|
-
//#region src/providers/ReactBrowserRouterProvider.ts
|
|
1258
|
+
//#region src/core/providers/ReactBrowserRouterProvider.ts
|
|
1258
1259
|
var ReactBrowserRouterProvider = class extends RouterProvider {
|
|
1259
1260
|
log = $logger();
|
|
1260
1261
|
alepha = $inject(Alepha);
|
|
@@ -1335,7 +1336,7 @@ var ReactBrowserRouterProvider = class extends RouterProvider {
|
|
|
1335
1336
|
};
|
|
1336
1337
|
|
|
1337
1338
|
//#endregion
|
|
1338
|
-
//#region src/providers/ReactBrowserProvider.ts
|
|
1339
|
+
//#region src/core/providers/ReactBrowserProvider.ts
|
|
1339
1340
|
const envSchema = t.object({ REACT_ROOT_ID: t.text({ default: "root" }) });
|
|
1340
1341
|
/**
|
|
1341
1342
|
* React browser renderer configuration atom
|
|
@@ -1500,7 +1501,7 @@ var ReactBrowserProvider = class {
|
|
|
1500
1501
|
};
|
|
1501
1502
|
|
|
1502
1503
|
//#endregion
|
|
1503
|
-
//#region src/services/ReactRouter.ts
|
|
1504
|
+
//#region src/core/services/ReactRouter.ts
|
|
1504
1505
|
var ReactRouter = class {
|
|
1505
1506
|
alepha = $inject(Alepha);
|
|
1506
1507
|
pageApi = $inject(ReactPageProvider);
|
|
@@ -1613,7 +1614,7 @@ var ReactRouter = class {
|
|
|
1613
1614
|
};
|
|
1614
1615
|
|
|
1615
1616
|
//#endregion
|
|
1616
|
-
//#region src/hooks/useInject.ts
|
|
1617
|
+
//#region src/core/hooks/useInject.ts
|
|
1617
1618
|
/**
|
|
1618
1619
|
* Hook to inject a service instance.
|
|
1619
1620
|
* It's a wrapper of `useAlepha().inject(service)` with a memoization.
|
|
@@ -1624,7 +1625,7 @@ const useInject = (service) => {
|
|
|
1624
1625
|
};
|
|
1625
1626
|
|
|
1626
1627
|
//#endregion
|
|
1627
|
-
//#region src/hooks/useRouter.ts
|
|
1628
|
+
//#region src/core/hooks/useRouter.ts
|
|
1628
1629
|
/**
|
|
1629
1630
|
* Use this hook to access the React Router instance.
|
|
1630
1631
|
*
|
|
@@ -1644,7 +1645,7 @@ const useRouter = () => {
|
|
|
1644
1645
|
};
|
|
1645
1646
|
|
|
1646
1647
|
//#endregion
|
|
1647
|
-
//#region src/components/Link.tsx
|
|
1648
|
+
//#region src/core/components/Link.tsx
|
|
1648
1649
|
const Link = (props) => {
|
|
1649
1650
|
const router = useRouter();
|
|
1650
1651
|
return /* @__PURE__ */ jsx("a", {
|
|
@@ -1656,7 +1657,7 @@ const Link = (props) => {
|
|
|
1656
1657
|
var Link_default = Link;
|
|
1657
1658
|
|
|
1658
1659
|
//#endregion
|
|
1659
|
-
//#region src/hooks/useAction.ts
|
|
1660
|
+
//#region src/core/hooks/useAction.ts
|
|
1660
1661
|
/**
|
|
1661
1662
|
* Hook for handling async actions with automatic error handling and event emission.
|
|
1662
1663
|
*
|
|
@@ -1883,7 +1884,7 @@ function useAction(options, deps) {
|
|
|
1883
1884
|
}
|
|
1884
1885
|
|
|
1885
1886
|
//#endregion
|
|
1886
|
-
//#region src/hooks/useActive.ts
|
|
1887
|
+
//#region src/core/hooks/useActive.ts
|
|
1887
1888
|
const useActive = (args) => {
|
|
1888
1889
|
const router = useRouter();
|
|
1889
1890
|
const [isPending, setPending] = useState(false);
|
|
@@ -1916,7 +1917,7 @@ const useActive = (args) => {
|
|
|
1916
1917
|
};
|
|
1917
1918
|
|
|
1918
1919
|
//#endregion
|
|
1919
|
-
//#region src/hooks/useClient.ts
|
|
1920
|
+
//#region src/core/hooks/useClient.ts
|
|
1920
1921
|
/**
|
|
1921
1922
|
* Hook to get a virtual client for the specified scope.
|
|
1922
1923
|
*
|
|
@@ -1927,7 +1928,7 @@ const useClient = (scope) => {
|
|
|
1927
1928
|
};
|
|
1928
1929
|
|
|
1929
1930
|
//#endregion
|
|
1930
|
-
//#region src/hooks/useQueryParams.ts
|
|
1931
|
+
//#region src/core/hooks/useQueryParams.ts
|
|
1931
1932
|
/**
|
|
1932
1933
|
* Not well tested. Use with caution.
|
|
1933
1934
|
*/
|
|
@@ -1962,7 +1963,7 @@ const decode = (alepha, schema, data) => {
|
|
|
1962
1963
|
};
|
|
1963
1964
|
|
|
1964
1965
|
//#endregion
|
|
1965
|
-
//#region src/hooks/useSchema.ts
|
|
1966
|
+
//#region src/core/hooks/useSchema.ts
|
|
1966
1967
|
const useSchema = (action) => {
|
|
1967
1968
|
const name = action.name;
|
|
1968
1969
|
const alepha = useAlepha();
|
|
@@ -1996,7 +1997,7 @@ const ssrSchemaLoading = (alepha, name) => {
|
|
|
1996
1997
|
};
|
|
1997
1998
|
|
|
1998
1999
|
//#endregion
|
|
1999
|
-
//#region src/index.ts
|
|
2000
|
+
//#region src/core/index.ts
|
|
2000
2001
|
/**
|
|
2001
2002
|
* Provides full-stack React development with declarative routing, server-side rendering, and client-side hydration.
|
|
2002
2003
|
*
|