rasengan 1.1.3 → 1.2.0-beta.1

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.
Files changed (33) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/lib/esm/core/config/vite/defaults.js +1 -17
  3. package/lib/esm/core/dynamic/index.js +32 -0
  4. package/lib/esm/core/plugins/index.js +1 -1
  5. package/lib/esm/entries/client/render.js +45 -16
  6. package/lib/esm/entries/server/entry.server.js +1 -0
  7. package/lib/esm/entries/server/index.js +3 -3
  8. package/lib/esm/routing/components/fallback.js +8 -0
  9. package/lib/esm/routing/components/index.js +7 -4
  10. package/lib/esm/routing/components/template.js +8 -7
  11. package/lib/esm/routing/providers/metadata.js +37 -32
  12. package/lib/esm/routing/utils/define-router.js +10 -6
  13. package/lib/esm/routing/utils/flat-routes.js +46 -75
  14. package/lib/esm/routing/utils/generate-routes.js +279 -178
  15. package/lib/esm/server/build/manifest.js +19 -7
  16. package/lib/esm/server/dev/handlers.js +1 -1
  17. package/lib/esm/server/dev/server.js +19 -1
  18. package/lib/esm/server/node/index.js +8 -2
  19. package/lib/tsconfig.esm.tsbuildinfo +1 -1
  20. package/lib/tsconfig.types.tsbuildinfo +1 -1
  21. package/lib/types/core/dynamic/index.d.ts +15 -0
  22. package/lib/types/core/types.d.ts +1 -1
  23. package/lib/types/entries/client/render.d.ts +3 -2
  24. package/lib/types/routing/components/fallback.d.ts +5 -0
  25. package/lib/types/routing/components/template.d.ts +1 -1
  26. package/lib/types/routing/interfaces.d.ts +5 -4
  27. package/lib/types/routing/providers/metadata.d.ts +1 -3
  28. package/lib/types/routing/types.d.ts +21 -3
  29. package/lib/types/routing/utils/define-routes-group.d.ts +1 -1
  30. package/lib/types/routing/utils/flat-routes.d.ts +21 -3
  31. package/lib/types/routing/utils/generate-routes.d.ts +6 -6
  32. package/lib/types/server/build/manifest.d.ts +4 -4
  33. package/package.json +1 -1
@@ -1 +1 @@
1
- {"root":["../src/client.ts","../src/index.ts","../src/plugin.ts","../src/server.ts","../src/cli/index.ts","../src/core/index.ts","../src/core/types.ts","../src/core/config/index.ts","../src/core/config/type.ts","../src/core/config/utils/define-config.ts","../src/core/config/utils/load-modules.ts","../src/core/config/utils/path.ts","../src/core/config/vite/defaults.ts","../src/core/dynamic/index.tsx","../src/core/middlewares/index.ts","../src/core/middlewares/logger.ts","../src/core/plugins/index.ts","../src/core/utils/log.ts","../src/entries/client/render.tsx","../src/entries/server/entry.server.tsx","../src/entries/server/index.tsx","../src/routing/index.ts","../src/routing/interfaces.tsx","../src/routing/types.ts","../src/routing/components/index.tsx","../src/routing/components/template.tsx","../src/routing/providers/metadata.tsx","../src/routing/utils/define-router.tsx","../src/routing/utils/define-routes-group.tsx","../src/routing/utils/flat-routes.tsx","../src/routing/utils/generate-metadata.tsx","../src/routing/utils/generate-routes.tsx","../src/routing/utils/index.tsx","../src/scripts/build-command.js","../src/scripts/generate-package-json.js","../src/scripts/utils/check-os.js","../src/scripts/utils/copy.js","../src/server/build/index.ts","../src/server/build/manifest.tsx","../src/server/build/rendering.tsx","../src/server/dev/handlers.tsx","../src/server/dev/server.ts","../src/server/dev/utils.ts","../src/server/node/index.tsx","../src/server/node/rendering.ts","../src/server/node/stream.ts","../src/server/node/utils.ts","../src/server/runtime/mode.ts","../src/server/runtime/utils.ts","../src/server/virtual/index.ts","../types/client.d.ts"],"version":"5.9.2"}
1
+ {"root":["../src/client.ts","../src/index.ts","../src/plugin.ts","../src/server.ts","../src/cli/index.ts","../src/core/index.ts","../src/core/types.ts","../src/core/config/index.ts","../src/core/config/type.ts","../src/core/config/utils/define-config.ts","../src/core/config/utils/load-modules.ts","../src/core/config/utils/path.ts","../src/core/config/vite/defaults.ts","../src/core/dynamic/index.tsx","../src/core/middlewares/index.ts","../src/core/middlewares/logger.ts","../src/core/plugins/index.ts","../src/core/utils/log.ts","../src/entries/client/render.tsx","../src/entries/server/entry.server.tsx","../src/entries/server/index.tsx","../src/routing/index.ts","../src/routing/interfaces.tsx","../src/routing/types.ts","../src/routing/components/fallback.tsx","../src/routing/components/index.tsx","../src/routing/components/template.tsx","../src/routing/providers/metadata.tsx","../src/routing/utils/define-router.tsx","../src/routing/utils/define-routes-group.tsx","../src/routing/utils/flat-routes.tsx","../src/routing/utils/generate-metadata.tsx","../src/routing/utils/generate-routes.tsx","../src/routing/utils/index.tsx","../src/scripts/build-command.js","../src/scripts/generate-package-json.js","../src/scripts/utils/check-os.js","../src/scripts/utils/copy.js","../src/server/build/index.ts","../src/server/build/manifest.tsx","../src/server/build/rendering.tsx","../src/server/dev/handlers.tsx","../src/server/dev/server.ts","../src/server/dev/utils.ts","../src/server/node/index.tsx","../src/server/node/rendering.ts","../src/server/node/stream.ts","../src/server/node/utils.ts","../src/server/runtime/mode.ts","../src/server/runtime/utils.ts","../src/server/virtual/index.ts","../types/client.d.ts"],"version":"5.9.2"}
@@ -1 +1 @@
1
- {"root":["../src/client.ts","../src/index.ts","../src/plugin.ts","../src/server.ts","../src/cli/index.ts","../src/core/index.ts","../src/core/types.ts","../src/core/config/index.ts","../src/core/config/type.ts","../src/core/config/utils/define-config.ts","../src/core/config/utils/load-modules.ts","../src/core/config/utils/path.ts","../src/core/config/vite/defaults.ts","../src/core/dynamic/index.tsx","../src/core/middlewares/index.ts","../src/core/middlewares/logger.ts","../src/core/plugins/index.ts","../src/core/utils/log.ts","../src/entries/client/render.tsx","../src/entries/server/entry.server.tsx","../src/entries/server/index.tsx","../src/routing/index.ts","../src/routing/interfaces.tsx","../src/routing/types.ts","../src/routing/components/index.tsx","../src/routing/components/template.tsx","../src/routing/providers/metadata.tsx","../src/routing/utils/define-router.tsx","../src/routing/utils/define-routes-group.tsx","../src/routing/utils/flat-routes.tsx","../src/routing/utils/generate-metadata.tsx","../src/routing/utils/generate-routes.tsx","../src/routing/utils/index.tsx","../src/scripts/build-command.js","../src/scripts/generate-package-json.js","../src/scripts/utils/check-os.js","../src/scripts/utils/copy.js","../src/server/build/index.ts","../src/server/build/manifest.tsx","../src/server/build/rendering.tsx","../src/server/dev/handlers.tsx","../src/server/dev/server.ts","../src/server/dev/utils.ts","../src/server/node/index.tsx","../src/server/node/rendering.ts","../src/server/node/stream.ts","../src/server/node/utils.ts","../src/server/runtime/mode.ts","../src/server/runtime/utils.ts","../src/server/virtual/index.ts","../types/client.d.ts"],"version":"5.9.2"}
1
+ {"root":["../src/client.ts","../src/index.ts","../src/plugin.ts","../src/server.ts","../src/cli/index.ts","../src/core/index.ts","../src/core/types.ts","../src/core/config/index.ts","../src/core/config/type.ts","../src/core/config/utils/define-config.ts","../src/core/config/utils/load-modules.ts","../src/core/config/utils/path.ts","../src/core/config/vite/defaults.ts","../src/core/dynamic/index.tsx","../src/core/middlewares/index.ts","../src/core/middlewares/logger.ts","../src/core/plugins/index.ts","../src/core/utils/log.ts","../src/entries/client/render.tsx","../src/entries/server/entry.server.tsx","../src/entries/server/index.tsx","../src/routing/index.ts","../src/routing/interfaces.tsx","../src/routing/types.ts","../src/routing/components/fallback.tsx","../src/routing/components/index.tsx","../src/routing/components/template.tsx","../src/routing/providers/metadata.tsx","../src/routing/utils/define-router.tsx","../src/routing/utils/define-routes-group.tsx","../src/routing/utils/flat-routes.tsx","../src/routing/utils/generate-metadata.tsx","../src/routing/utils/generate-routes.tsx","../src/routing/utils/index.tsx","../src/scripts/build-command.js","../src/scripts/generate-package-json.js","../src/scripts/utils/check-os.js","../src/scripts/utils/copy.js","../src/server/build/index.ts","../src/server/build/manifest.tsx","../src/server/build/rendering.tsx","../src/server/dev/handlers.tsx","../src/server/dev/server.ts","../src/server/dev/utils.ts","../src/server/node/index.tsx","../src/server/node/rendering.ts","../src/server/node/stream.ts","../src/server/node/utils.ts","../src/server/runtime/mode.ts","../src/server/runtime/utils.ts","../src/server/virtual/index.ts","../types/client.d.ts"],"version":"5.9.2"}
@@ -1,4 +1,5 @@
1
1
  import type { FunctionComponent, ComponentType, ComponentProps } from 'react';
2
+ import { Module } from '../../routing/utils';
2
3
  type DynamicComponent<T extends ComponentType<any>> = FunctionComponent<ComponentProps<T>>;
3
4
  /**
4
5
  * It allows you to defer loading of Client Components,
@@ -10,4 +11,18 @@ type DynamicComponent<T extends ComponentType<any>> = FunctionComponent<Componen
10
11
  export declare function dynamicLoad<T extends ComponentType<any>>(load: () => Promise<{
11
12
  default: T;
12
13
  }>, fallback?: import("react/jsx-runtime").JSX.Element): DynamicComponent<T>;
14
+ /**
15
+ * It allows you to defer loading of page components,
16
+ * and only include them in the client bundle when they're needed
17
+ * @param filePath Path to the page component we want to load lazily
18
+ * @returns
19
+ */
20
+ export declare function lazyLoadPage(routePath: string, filePath: string): {
21
+ path: string;
22
+ fullPath: string;
23
+ segment: string;
24
+ module: () => Promise<Module>;
25
+ source: string;
26
+ isLayout: false;
27
+ };
13
28
  export {};
@@ -7,7 +7,7 @@ export type AppProps = {
7
7
  /**
8
8
  * Represents the component that will be rendered
9
9
  */
10
- Component: React.FC<RootComponentProps>;
10
+ Component: React.FC<Omit<RootComponentProps, 'Router'>>;
11
11
  /**
12
12
  * Represents the children of the component
13
13
  */
@@ -1,5 +1,6 @@
1
1
  import { FunctionComponent } from 'react';
2
2
  import { type AppProps } from '../../core/index.js';
3
- export default function renderApp(App: FunctionComponent<AppProps>, options: {
3
+ import { RouterComponent } from '../../routing/interfaces.js';
4
+ export default function renderApp(App: FunctionComponent<AppProps>, AppRouter: Promise<RouterComponent>, options: {
4
5
  reactStrictMode?: boolean;
5
- }): void;
6
+ }): Promise<void>;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * This component is used as a fallback when the page is not yet hydrated
3
+ * @returns
4
+ */
5
+ export declare const HydrationFallback: () => import("react/jsx-runtime").JSX.Element;
@@ -4,7 +4,7 @@ import { LayoutComponent, Metadata, MetadataWithoutTitleAndDescription } from '.
4
4
  /**
5
5
  * App component that represent the entry point of the application
6
6
  */
7
- export declare const RootComponent: ({ router: AppRouterPromise, children, }: RootComponentProps) => string | number | bigint | true | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode>> | import("react/jsx-runtime.js").JSX.Element;
7
+ export declare const RootComponent: ({ Router, children, }: RootComponentProps) => string | number | bigint | true | import("react/jsx-runtime.js").JSX.Element | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode>>;
8
8
  /**
9
9
  * Head component
10
10
  * @params data - Helmet context
@@ -1,5 +1,6 @@
1
1
  import React, { FunctionComponent } from 'react';
2
2
  import { LayoutComponent, PageComponent } from './types.js';
3
+ import { RouteNode } from './utils/flat-routes.js';
3
4
  /**
4
5
  * Router component that define a routing system
5
6
  */
@@ -31,7 +32,7 @@ export declare class RouterComponent {
31
32
  /**
32
33
  * Get the layout value
33
34
  */
34
- get layout(): LayoutComponent;
35
+ get layout(): LayoutComponent | RouteNode;
35
36
  /**
36
37
  * Get the list of routers
37
38
  */
@@ -39,7 +40,7 @@ export declare class RouterComponent {
39
40
  /**
40
41
  * Get the list of pages
41
42
  */
42
- get pages(): Array<PageComponent>;
43
+ get pages(): Array<PageComponent | RouteNode>;
43
44
  /**
44
45
  * Get the loader component
45
46
  */
@@ -55,7 +56,7 @@ export declare class RouterComponent {
55
56
  /**
56
57
  * Set the layout value
57
58
  */
58
- set layout(layout: LayoutComponent);
59
+ set layout(layout: LayoutComponent | RouteNode);
59
60
  /**
60
61
  * Set the list of routers
61
62
  */
@@ -63,7 +64,7 @@ export declare class RouterComponent {
63
64
  /**
64
65
  * Set the list of pages
65
66
  */
66
- set pages(pages: Array<PageComponent>);
67
+ set pages(pages: Array<PageComponent | RouteNode>);
67
68
  /**
68
69
  * Set the loader component
69
70
  */
@@ -1,5 +1,3 @@
1
- import { Metadata } from '../types.js';
2
- export default function MetadataProvider({ children, metadataMapping, }: {
1
+ export default function MetadataProvider({ children, }: {
3
2
  children: React.ReactNode;
4
- metadataMapping: Record<string, Metadata>;
5
3
  }): import("react/jsx-runtime.js").JSX.Element;
@@ -1,6 +1,7 @@
1
1
  import { FunctionComponent } from 'react';
2
2
  import { RouteObject as RRRouteObject } from 'react-router';
3
3
  import { RouterComponent } from './interfaces.js';
4
+ import { RouteNode } from './utils/index.js';
4
5
  export type MetadataLink = {
5
6
  rel: string;
6
7
  type?: string;
@@ -70,7 +71,7 @@ export type RouterProps = {
70
71
  /**
71
72
  * Usefull to collect pages
72
73
  */
73
- pages?: Array<PageComponent | MDXPageComponent | Array<PageComponent | MDXPageComponent>>;
74
+ pages?: Array<PageComponent | MDXPageComponent | RouteNode | Array<PageComponent | MDXPageComponent | RouteNode>>;
74
75
  /**
75
76
  * Usefull to display a screen that let know to the user that the page is loading.
76
77
  */
@@ -101,9 +102,20 @@ export type LoaderResponse = {
101
102
  [key: string]: any;
102
103
  };
103
104
  redirect?: string;
105
+ /**
106
+ * Represent the set of metadata for the page to which the loader is linked to
107
+ */
104
108
  meta?: Metadata | MetadataWithoutTitleAndDescription;
109
+ /**
110
+ * Should contain the source of the loader
111
+ *
112
+ * It represent the source file of the page in which it's defined
113
+ *
114
+ * Not available from config-based routing
115
+ */
116
+ source?: string;
105
117
  };
106
- export type RouteLoaderFunction = (options: LoaderOptions) => Promise<LoaderResponse>;
118
+ export type RouteLoaderFunction = (options: LoaderOptions) => Promise<Omit<LoaderResponse, 'source'>>;
107
119
  export type LoaderFunction = ({ params, request, }: {
108
120
  params: Record<string, string>;
109
121
  request: Request;
@@ -158,6 +170,12 @@ export type LayoutComponent<T = ReactComponentProps> = FunctionComponent<T> & {
158
170
  * Loader function that loads data for the page from the server
159
171
  */
160
172
  loader?: RouteLoaderFunction;
173
+ /**
174
+ * Source of the route
175
+ *
176
+ * Not available from config-based routing
177
+ */
178
+ source?: string;
161
179
  };
162
180
  /**
163
181
  * Page component that extends LayoutComponent and represents a page
@@ -213,6 +231,6 @@ export type TemplateProps = {
213
231
  * Props for the base Component that takes the app router
214
232
  */
215
233
  export type RootComponentProps = {
216
- router: Promise<RouterComponent>;
234
+ Router?: FunctionComponent;
217
235
  children: React.ReactNode;
218
236
  };
@@ -4,4 +4,4 @@ import { RoutesGroupProps, PageComponent, MDXPageComponent } from '../types.js';
4
4
  * @param option - An object containing the `path` and `children` properties, which are used to define a routes group.
5
5
  * @returns An array of `PageComponent` or `MDXPageComponent` objects.
6
6
  */
7
- export declare const defineRoutesGroup: (option: RoutesGroupProps) => (PageComponent | MDXPageComponent)[];
7
+ export declare const defineRoutesGroup: (option: RoutesGroupProps) => (MDXPageComponent | PageComponent)[];
@@ -1,12 +1,30 @@
1
1
  import { FunctionComponent } from 'react';
2
2
  import { RouterComponent } from '../interfaces.js';
3
- type Module = {
3
+ import { Metadata } from '../types.js';
4
+ export type RouteNode = {
5
+ path: string;
6
+ segment: string;
7
+ fullPath: string;
8
+ isLayout?: boolean;
9
+ module?: () => Promise<Module>;
10
+ component?: FunctionComponent<any>;
11
+ metadata?: Metadata;
12
+ children?: RouteNode[];
13
+ source?: string;
14
+ };
15
+ export type Module = {
4
16
  default: FunctionComponent<any>;
5
17
  };
18
+ /**
19
+ * Get path segments from file path
20
+ * @param filePath File path
21
+ * @param foldersOnly Whether to return only folders
22
+ * @returns Path segments
23
+ */
24
+ export declare function getPathSegments(filePath: string, foldersOnly?: boolean): string[];
6
25
  /**
7
26
  * This function receives a function that returns a record of modules and generate a router component
8
27
  * @param fn Function that returns a record of modules
9
28
  * @returns Router component
10
29
  */
11
- export declare function flatRoutes(fn: () => Record<string, Module>): Promise<RouterComponent>;
12
- export {};
30
+ export declare function flatRoutes(fn: () => Record<string, () => Promise<Module>>): Promise<RouterComponent>;
@@ -1,19 +1,19 @@
1
1
  import { RouterComponent } from '../interfaces.js';
2
- import { RouteObject, LayoutComponent, Metadata } from '../types.js';
2
+ import { RouteObject } from '../types.js';
3
3
  /**
4
- * This function receives a router component and get a formated router first
5
- * and then return a router.
4
+ * This function preload the matching lazy routes
5
+ * @param url
6
+ * @param routes
6
7
  */
7
- export declare const getRouter: (routerInstance: RouterComponent) => () => import("react/jsx-runtime.js").JSX.Element;
8
+ export declare const preloadMatches: (url: Partial<Location> | string, routes: RouteObject[]) => Promise<void>;
8
9
  /**
9
10
  * This function receives a router component and return a formated router for static routing
10
11
  * @param router Represents the router component
11
12
  * @returns
12
13
  */
13
- export declare const generateRoutes: (router: RouterComponent, isRoot?: boolean, parentLayout?: LayoutComponent | undefined) => RouteObject[];
14
+ export declare const generateRoutes: (router: RouterComponent, isRoot?: boolean, parentLayoutPath?: string | undefined) => RouteObject[];
14
15
  /**
15
16
  * This function receives a router component and return a mapping from path to metadata
16
17
  * @param router Represents the router component
17
18
  * @returns
18
19
  */
19
- export declare const generateMetadataMapping: (router: RouterComponent, isRoot?: boolean, parentLayout?: LayoutComponent | undefined) => Record<string, Metadata>;
@@ -13,15 +13,15 @@ export declare class ManifestManager {
13
13
  private loadManifest;
14
14
  /**
15
15
  * Resolve all assets for a given page.
16
- * @param pageName - The name of the page to resolve.
16
+ * @param source - The file path of the page to resolve.
17
17
  * @returns Resolved assets with scripts and styles.
18
18
  */
19
- resolveAssets(pageName: string): ResolvedAssets;
19
+ resolveAssets(source: string): ResolvedAssets;
20
20
  /**
21
21
  * Generate meta tags for a given page.
22
- * @param pageName - The name of the page to generate meta tags for.
22
+ * @param source - The file path of the page to generate meta tags for.
23
23
  * @returns HTML string containing script and style tags.
24
24
  */
25
- generateMetaTags(pageName: string): import("react/jsx-runtime").JSX.Element[];
25
+ generateMetaTags(source: string): import("react/jsx-runtime").JSX.Element[];
26
26
  }
27
27
  export {};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "rasengan",
3
3
  "private": false,
4
- "version": "1.1.3",
4
+ "version": "1.2.0-beta.1",
5
5
  "description": "The modern React Framework",
6
6
  "type": "module",
7
7
  "main": "lib/esm/index.js",