aaex-file-router 1.4.1 → 1.4.2
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
|
@@ -8,17 +8,29 @@ interface FileNode {
|
|
|
8
8
|
export declare class RouteGenerator {
|
|
9
9
|
private topLevelImports;
|
|
10
10
|
private importSet;
|
|
11
|
+
/** Convert file/folder name to route segment, replacing [slug] with :slug */
|
|
11
12
|
private normalizeSegment;
|
|
13
|
+
/** Convert file/folder name to type segment, replacing [slug] with {string} */
|
|
12
14
|
private normalizeTypeSegment;
|
|
15
|
+
/** Convert string to PascalCase */
|
|
13
16
|
private toPascal;
|
|
17
|
+
/** Add import statement if not already imported */
|
|
14
18
|
private addImport;
|
|
15
|
-
|
|
19
|
+
/** Generate import name with folder prefix */
|
|
20
|
+
private getPrefixedName;
|
|
21
|
+
/** Create route object for a directory (may contain layout/loading/children) */
|
|
16
22
|
private createDirectoryRoute;
|
|
23
|
+
/** Create route object for a file */
|
|
17
24
|
private createFileRoute;
|
|
25
|
+
/** Recursively convert FileNode array into RouteConfig array */
|
|
18
26
|
private fileDataToRoutes;
|
|
27
|
+
/** Collect all route paths for type generation */
|
|
19
28
|
private collectPaths;
|
|
29
|
+
/** Build TypeScript union type string */
|
|
20
30
|
private buildTypeUnion;
|
|
31
|
+
/** Generate routes.ts content */
|
|
21
32
|
generateRoutesFile(fileData: FileNode[]): string;
|
|
33
|
+
/** Generate route type file (route paths as union) */
|
|
22
34
|
generateTypesFile(fileData: FileNode[]): string;
|
|
23
35
|
}
|
|
24
36
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouteGenerator.d.ts","sourceRoot":"","sources":["../../src/core/RouteGenerator.ts"],"names":[],"mappings":"AAMA,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,SAAS,CAA0B;
|
|
1
|
+
{"version":3,"file":"RouteGenerator.d.ts","sourceRoot":"","sources":["../../src/core/RouteGenerator.ts"],"names":[],"mappings":"AAMA,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,SAAS,CAA0B;IAI3C,6EAA6E;IAC7E,OAAO,CAAC,gBAAgB;IAIxB,+EAA+E;IAC/E,OAAO,CAAC,oBAAoB;IAI5B,mCAAmC;IACnC,OAAO,CAAC,QAAQ;IAMhB,mDAAmD;IACnD,OAAO,CAAC,SAAS;IAQjB,8CAA8C;IAC9C,OAAO,CAAC,eAAe;IA6BvB,gFAAgF;IAChF,OAAO,CAAC,oBAAoB;IAiD5B,qCAAqC;IACrC,OAAO,CAAC,eAAe;IAuCvB,gEAAgE;IAChE,OAAO,CAAC,gBAAgB;IAexB,kDAAkD;IAClD,OAAO,CAAC,YAAY;IA0BpB,yCAAyC;IACzC,OAAO,CAAC,cAAc;IAWtB,iCAAiC;IAC1B,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM;IAoBvD,sDAAsD;IAC/C,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM;CASvD"}
|
|
@@ -2,17 +2,21 @@ export class RouteGenerator {
|
|
|
2
2
|
topLevelImports = [];
|
|
3
3
|
importSet = new Set();
|
|
4
4
|
// ---------------- Helpers ----------------
|
|
5
|
+
/** Convert file/folder name to route segment, replacing [slug] with :slug */
|
|
5
6
|
normalizeSegment(name) {
|
|
6
7
|
return name.replace(/\[([^\]]+)\]/g, ":$1").toLowerCase();
|
|
7
8
|
}
|
|
9
|
+
/** Convert file/folder name to type segment, replacing [slug] with {string} */
|
|
8
10
|
normalizeTypeSegment(name) {
|
|
9
11
|
return name.replace(/\[([^\]]+)\]/g, "{string}");
|
|
10
12
|
}
|
|
13
|
+
/** Convert string to PascalCase */
|
|
11
14
|
toPascal(str) {
|
|
12
15
|
return str
|
|
13
16
|
.replace(/\[|\]/g, "")
|
|
14
17
|
.replace(/(^\w|[-_]\w)/g, (m) => m.replace(/[-_]/, "").toUpperCase());
|
|
15
18
|
}
|
|
19
|
+
/** Add import statement if not already imported */
|
|
16
20
|
addImport(file, importName) {
|
|
17
21
|
if (!this.importSet.has(file.relative_path)) {
|
|
18
22
|
const importPath = `./${file.relative_path.replace(/^src[\/\\]/, "")}`;
|
|
@@ -20,57 +24,84 @@ export class RouteGenerator {
|
|
|
20
24
|
this.importSet.add(file.relative_path);
|
|
21
25
|
}
|
|
22
26
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
/** Generate import name with folder prefix */
|
|
28
|
+
getPrefixedName(file, parentPath, suffix) {
|
|
29
|
+
const baseName = file.name.replace(/\.[jt]sx?$/, "");
|
|
30
|
+
// Only add folder prefix if file is layout or loading
|
|
31
|
+
if (baseName.toLowerCase() === "layout" ||
|
|
32
|
+
baseName.toLowerCase() === "loading") {
|
|
33
|
+
let segments = parentPath.split("/").filter(Boolean).map(this.toPascal);
|
|
34
|
+
if (segments.toString() === ["src", "pages"].toString()) {
|
|
35
|
+
segments = ["root"];
|
|
36
|
+
}
|
|
37
|
+
return ((segments[segments.length - 1] || this.toPascal(baseName)) + suffix);
|
|
38
|
+
}
|
|
39
|
+
// For normal files, just PascalCase without suffix
|
|
40
|
+
if (baseName.toLowerCase() === "index" && parentPath) {
|
|
41
|
+
const segments = parentPath.split("/").filter(Boolean).map(this.toPascal);
|
|
42
|
+
return segments.join("") + suffix; // optional suffix for index if needed
|
|
28
43
|
}
|
|
29
|
-
return this.toPascal(
|
|
44
|
+
return this.toPascal(baseName) + suffix;
|
|
30
45
|
}
|
|
31
46
|
// ---------------- Route Creation ----------------
|
|
32
|
-
|
|
47
|
+
/** Create route object for a directory (may contain layout/loading/children) */
|
|
48
|
+
createDirectoryRoute(file, isChild) {
|
|
33
49
|
const route = { path: this.normalizeSegment(file.name) };
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
this.
|
|
38
|
-
|
|
50
|
+
const layoutFile = file.children?.find((f) => /^layout\.(tsx|jsx|ts|js)$/i.test(f.name));
|
|
51
|
+
let layoutName = null;
|
|
52
|
+
if (layoutFile) {
|
|
53
|
+
layoutName = this.getPrefixedName(layoutFile, file.relative_path, "Layout");
|
|
54
|
+
this.addImport(layoutFile, layoutName);
|
|
55
|
+
route.element = `React.createElement(${layoutName})`;
|
|
39
56
|
}
|
|
40
57
|
const loadingFile = file.children?.find((f) => /^loading\.(tsx|jsx|ts|js)$/i.test(f.name));
|
|
41
58
|
let loadingName = null;
|
|
42
59
|
if (loadingFile) {
|
|
43
|
-
loadingName = this.
|
|
60
|
+
loadingName = this.getPrefixedName(loadingFile, file.relative_path, "Loading");
|
|
44
61
|
this.addImport(loadingFile, loadingName);
|
|
45
62
|
}
|
|
46
63
|
const children = file.children?.filter((f) => !/^layout\.(tsx|jsx|ts|js)$/i.test(f.name) &&
|
|
47
64
|
!/^loading\.(tsx|jsx|ts|js)$/i.test(f.name));
|
|
48
65
|
if (children?.length) {
|
|
66
|
+
// nested = true for children
|
|
49
67
|
route.children = this.fileDataToRoutes(children, route.path, true, loadingName);
|
|
50
68
|
}
|
|
51
69
|
return route;
|
|
52
70
|
}
|
|
71
|
+
/** Create route object for a file */
|
|
53
72
|
createFileRoute(file, parentPath, isChild, folderLoadingName) {
|
|
54
73
|
const nameWithoutExt = file.name.replace(/\.[jt]sx?$/, "");
|
|
55
74
|
const isIndex = nameWithoutExt.toLowerCase() === "index";
|
|
56
75
|
let pathSegment = isIndex ? "" : this.normalizeSegment(nameWithoutExt);
|
|
57
76
|
if (!isChild && parentPath)
|
|
58
77
|
pathSegment = `${parentPath}/${pathSegment}`;
|
|
59
|
-
const importName = this.
|
|
60
|
-
|
|
78
|
+
const importName = this.getPrefixedName(file, parentPath, "");
|
|
79
|
+
if (!isChild) {
|
|
80
|
+
// Top-level: static import
|
|
81
|
+
this.addImport(file, importName);
|
|
82
|
+
return {
|
|
83
|
+
path: pathSegment,
|
|
84
|
+
element: `React.createElement(${importName})`,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
// Nested: lazy + Suspense
|
|
61
88
|
const fallback = folderLoadingName
|
|
62
89
|
? `React.createElement(${folderLoadingName})`
|
|
63
|
-
: `React.createElement('div',null,'loading...')`;
|
|
64
|
-
|
|
65
|
-
|
|
90
|
+
: `React.createElement('div', null, 'loading...')`;
|
|
91
|
+
return {
|
|
92
|
+
path: pathSegment,
|
|
93
|
+
element: `React.createElement(React.Suspense, { fallback: ${fallback} }, React.createElement(React.lazy(() => import('./${file.relative_path.replace(/^src[\/\\]/, "")}'))))`,
|
|
94
|
+
};
|
|
66
95
|
}
|
|
67
96
|
// ---------------- Route Recursion ----------------
|
|
97
|
+
/** Recursively convert FileNode array into RouteConfig array */
|
|
68
98
|
fileDataToRoutes(files, parentPath = "", isChild = false, folderLoadingName = null) {
|
|
69
99
|
return files.map((file) => file.isDirectory
|
|
70
|
-
? this.createDirectoryRoute(file)
|
|
100
|
+
? this.createDirectoryRoute(file, isChild) // pass isChild
|
|
71
101
|
: this.createFileRoute(file, parentPath, isChild, folderLoadingName));
|
|
72
102
|
}
|
|
73
|
-
// ---------------- Type Helpers ----------------
|
|
103
|
+
// ---------------- TypeScript Route Type Helpers ----------------
|
|
104
|
+
/** Collect all route paths for type generation */
|
|
74
105
|
collectPaths(files, prefix = "") {
|
|
75
106
|
let result = [];
|
|
76
107
|
for (const file of files) {
|
|
@@ -95,6 +126,7 @@ export class RouteGenerator {
|
|
|
95
126
|
}
|
|
96
127
|
return result;
|
|
97
128
|
}
|
|
129
|
+
/** Build TypeScript union type string */
|
|
98
130
|
buildTypeUnion(paths) {
|
|
99
131
|
const normalized = [...new Set(paths)]
|
|
100
132
|
.map((p) => p.replace(/\/+/g, "/"))
|
|
@@ -103,6 +135,7 @@ export class RouteGenerator {
|
|
|
103
135
|
return normalized.map((p) => ` | "${p}"`).join("\n");
|
|
104
136
|
}
|
|
105
137
|
// ---------------- PUBLIC METHODS ----------------
|
|
138
|
+
/** Generate routes.ts content */
|
|
106
139
|
generateRoutesFile(fileData) {
|
|
107
140
|
this.topLevelImports = [];
|
|
108
141
|
this.importSet.clear();
|
|
@@ -112,12 +145,12 @@ import React from 'react';
|
|
|
112
145
|
${this.topLevelImports.join("\n")}
|
|
113
146
|
import type { RouteObject } from 'react-router-dom';
|
|
114
147
|
|
|
115
|
-
const routes: RouteObject[] = ${JSON.stringify(routes, null, 2).replace(/"React\.createElement\(([\s\S]*?)\)"/g, (_, inner) => `React.createElement(${inner})`)}
|
|
116
|
-
|
|
148
|
+
const routes: RouteObject[] = ${JSON.stringify(routes, null, 2).replace(/"React\.createElement\(([\s\S]*?)\)"/g, (_, inner) => `React.createElement(${inner})`)};
|
|
117
149
|
|
|
118
150
|
export default routes;
|
|
119
151
|
`;
|
|
120
152
|
}
|
|
153
|
+
/** Generate route type file (route paths as union) */
|
|
121
154
|
generateTypesFile(fileData) {
|
|
122
155
|
const paths = this.collectPaths(fileData, "");
|
|
123
156
|
const union = this.buildTypeUnion(paths);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouteGenerator.js","sourceRoot":"","sources":["../../src/core/RouteGenerator.ts"],"names":[],"mappings":"AAcA,MAAM,OAAO,cAAc;IACjB,eAAe,GAAa,EAAE,CAAC;IAC/B,SAAS,GAAgB,IAAI,GAAG,EAAE,CAAC;IAE3C,4CAA4C;
|
|
1
|
+
{"version":3,"file":"RouteGenerator.js","sourceRoot":"","sources":["../../src/core/RouteGenerator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aaex-file-router",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.2",
|
|
4
4
|
"description": "A file-based routing system for React projects that automatically generates routes from your file structure. Similar to Next.js App Router or Remix file conventions.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"test": "node ./dist/test/index.js",
|
|
8
8
|
"build": "npx tsc",
|
|
9
|
-
"dev": "npx tsc --watch"
|
|
9
|
+
"dev": "npx tsc --watch",
|
|
10
|
+
"publish": "npx tsc && npm publish"
|
|
11
|
+
|
|
10
12
|
},
|
|
11
13
|
"keywords": [
|
|
12
14
|
"react",
|