fs-router-dom 0.0.7 → 0.0.8
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
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Lightweight file-based router for Vite + React Router DOM, like Next.js.
|
|
4
4
|
|
|
5
|
-
## What's New in 0.0.
|
|
5
|
+
## What's New in 0.0.8
|
|
6
6
|
|
|
7
7
|
- **Nested Routes**: Routes are now automatically nested, providing better support for `react-router-dom` features and improving route management.
|
|
8
8
|
- **Nested Layout Support**: Create complex and reusable UI structures with nested layouts that apply to specific sections of your application.
|
package/dist/FSRouter.js
CHANGED
|
@@ -42,26 +42,26 @@ const build_route_tree_1 = require("./utils/build-route-tree");
|
|
|
42
42
|
function FSRouter({ routes, notFoundComponent = (0, jsx_runtime_1.jsx)("div", { children: "404 - Not Found" }), suspenseFallback = (0, jsx_runtime_1.jsx)("div", { children: "Loading..." }), }) {
|
|
43
43
|
const routeTree = (0, build_route_tree_1.buildRouteTree)(routes);
|
|
44
44
|
function renderNode(node) {
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
element = null; // Fallback for groups
|
|
58
|
-
}
|
|
59
|
-
return ((0, jsx_runtime_1.jsx)(react_router_dom_1.Route, { path: node.segment, element: element, children: node.children.map((child) => renderNode(child)) }));
|
|
45
|
+
const LayoutComponent = node.isLayout && node.component
|
|
46
|
+
? react_1.default.lazy(node.component)
|
|
47
|
+
: null;
|
|
48
|
+
const PageComponent = !node.isLayout && node.component
|
|
49
|
+
? react_1.default.lazy(node.component)
|
|
50
|
+
: null;
|
|
51
|
+
const IndexComponent = node.indexComponent
|
|
52
|
+
? react_1.default.lazy(node.indexComponent)
|
|
53
|
+
: null;
|
|
54
|
+
const element = LayoutComponent ? ((0, jsx_runtime_1.jsx)(react_1.Suspense, { fallback: suspenseFallback, children: react_1.default.createElement(LayoutComponent, null, (0, jsx_runtime_1.jsx)(react_router_dom_1.Outlet, {})) })) : PageComponent ? ((0, jsx_runtime_1.jsx)(react_1.Suspense, { fallback: suspenseFallback, children: (0, jsx_runtime_1.jsx)(PageComponent, {}) })) : ((0, jsx_runtime_1.jsx)(react_router_dom_1.Outlet, {}));
|
|
55
|
+
return ((0, jsx_runtime_1.jsxs)(react_router_dom_1.Route, { path: node.segment, element: element, children: [IndexComponent && ((0, jsx_runtime_1.jsx)(react_router_dom_1.Route, { index: true, element: (0, jsx_runtime_1.jsx)(react_1.Suspense, { fallback: suspenseFallback, children: (0, jsx_runtime_1.jsx)(IndexComponent, {}) }) })), node.children.map((child) => renderNode(child))] }));
|
|
60
56
|
}
|
|
61
|
-
const
|
|
57
|
+
const RootLayout = routeTree.isLayout && routeTree.component
|
|
62
58
|
? react_1.default.lazy(routeTree.component)
|
|
63
59
|
: null;
|
|
64
|
-
|
|
60
|
+
const RootIndex = routeTree.indexComponent
|
|
61
|
+
? react_1.default.lazy(routeTree.indexComponent)
|
|
62
|
+
: null;
|
|
63
|
+
const rootElement = RootLayout ? ((0, jsx_runtime_1.jsx)(react_1.Suspense, { fallback: suspenseFallback, children: react_1.default.createElement(RootLayout, null, (0, jsx_runtime_1.jsx)(react_router_dom_1.Outlet, {})) })) : ((0, jsx_runtime_1.jsx)(react_router_dom_1.Outlet, {}));
|
|
64
|
+
return ((0, jsx_runtime_1.jsxs)(react_router_dom_1.Routes, { children: [(0, jsx_runtime_1.jsxs)(react_router_dom_1.Route, { path: "/", element: rootElement, children: [RootIndex && ((0, jsx_runtime_1.jsx)(react_router_dom_1.Route, { index: true, element: (0, jsx_runtime_1.jsx)(react_1.Suspense, { fallback: suspenseFallback, children: (0, jsx_runtime_1.jsx)(RootIndex, {}) }) })), routeTree.children.map((child) => renderNode(child))] }), (0, jsx_runtime_1.jsx)(react_router_dom_1.Route, { path: "*", element: notFoundComponent })] }));
|
|
65
65
|
}
|
|
66
66
|
function FullFSRouter({ routes, notFoundComponent, suspenseFallback, ...browserProps }) {
|
|
67
67
|
return ((0, jsx_runtime_1.jsx)(react_router_dom_1.BrowserRouter, { ...browserProps, children: (0, jsx_runtime_1.jsx)(FSRouter, { routes: routes, notFoundComponent: notFoundComponent, suspenseFallback: suspenseFallback }) }));
|
package/dist/FSRouter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FSRouter.js","sourceRoot":"","sources":["../src/FSRouter.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,
|
|
1
|
+
{"version":3,"file":"FSRouter.js","sourceRoot":"","sources":["../src/FSRouter.tsx"],"names":[],"mappings":"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"}
|
|
@@ -4,17 +4,21 @@ exports.buildRouteTree = buildRouteTree;
|
|
|
4
4
|
function buildRouteTree(routes) {
|
|
5
5
|
const root = { segment: "", children: [], isRoot: true };
|
|
6
6
|
Object.entries(routes).forEach(([fileRoute, importFn]) => {
|
|
7
|
-
let path = fileRoute.replace(/.*?\/pages\//, "").replace(/\.[jt]sx?$/, "");
|
|
8
|
-
const segments = path.split("/").filter(Boolean);
|
|
7
|
+
let path = fileRoute.replace(/.*?\/pages\//, "").replace(/\.[jt]sx?$/, "");
|
|
8
|
+
const segments = path.split("/").filter(Boolean);
|
|
9
9
|
let currentNode = root;
|
|
10
|
-
segments.
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
for (let i = 0; i < segments.length; i++) {
|
|
11
|
+
const seg = segments[i];
|
|
12
|
+
if (seg === "index") {
|
|
13
|
+
currentNode.indexComponent = importFn;
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (seg === "_layout") {
|
|
13
17
|
currentNode.component = importFn;
|
|
18
|
+
currentNode.isLayout = true;
|
|
14
19
|
return;
|
|
15
20
|
}
|
|
16
21
|
let cleanSeg = seg.replace(/\[(.*?)\]/g, ":$1"); // Handle [param] -> :param
|
|
17
|
-
// Find or create child node for this segment
|
|
18
22
|
let child = currentNode.children.find((c) => c.segment === cleanSeg);
|
|
19
23
|
if (!child) {
|
|
20
24
|
child = {
|
|
@@ -24,15 +28,11 @@ function buildRouteTree(routes) {
|
|
|
24
28
|
};
|
|
25
29
|
currentNode.children.push(child);
|
|
26
30
|
}
|
|
27
|
-
if (
|
|
28
|
-
child.isLayout = true;
|
|
29
|
-
}
|
|
30
|
-
// If last segment, assign component
|
|
31
|
-
if (index === segments.length - 1) {
|
|
31
|
+
if (i === segments.length - 1) {
|
|
32
32
|
child.component = importFn;
|
|
33
33
|
}
|
|
34
34
|
currentNode = child;
|
|
35
|
-
}
|
|
35
|
+
}
|
|
36
36
|
});
|
|
37
37
|
return root;
|
|
38
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-route-tree.js","sourceRoot":"","sources":["../../src/utils/build-route-tree.tsx"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"build-route-tree.js","sourceRoot":"","sources":["../../src/utils/build-route-tree.tsx"],"names":[],"mappings":";;AASA,wCA6CC;AA7CD,SAAgB,cAAc,CAC5B,MAA8C;IAE9C,MAAM,IAAI,GAAc,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAEpE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE;QACvD,IAAI,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAE3E,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEjD,IAAI,WAAW,GAAG,IAAI,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAExB,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;gBACpB,WAAW,CAAC,cAAc,GAAG,QAAQ,CAAC;gBACtC,OAAO;YACT,CAAC;YACD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACtB,WAAW,CAAC,SAAS,GAAG,QAAQ,CAAC;gBACjC,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAC5B,OAAO;YACT,CAAC;YAED,IAAI,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,2BAA2B;YAE5E,IAAI,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC;YACrE,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,KAAK,GAAG;oBACN,OAAO,EAAE,QAAQ;oBACjB,MAAM,EAAE,KAAK;oBACb,QAAQ,EAAE,EAAE;iBACb,CAAC;gBACF,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC;YAED,IAAI,CAAC,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC;YAC7B,CAAC;YAED,WAAW,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC"}
|