aaex-file-router 1.5.0 → 1.6.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.
- package/README.md +37 -2
- package/dist/components/FileLink.d.ts.map +1 -1
- package/dist/components/FileLink.js +7 -0
- package/dist/components/FileLink.js.map +1 -1
- package/dist/core/RouteGenerator.d.ts +7 -0
- package/dist/core/RouteGenerator.d.ts.map +1 -1
- package/dist/core/RouteGenerator.js +76 -19
- package/dist/core/RouteGenerator.js.map +1 -1
- package/dist/plugin/index.d.ts +4 -2
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +2 -1
- package/dist/plugin/index.js.map +1 -1
- package/dist/plugin/serverPlugin.d.ts +12 -0
- package/dist/plugin/serverPlugin.d.ts.map +1 -0
- package/dist/plugin/serverPlugin.js +69 -0
- package/dist/plugin/serverPlugin.js.map +1 -0
- package/dist/test/index.js +1 -1
- package/dist/test/index.js.map +1 -1
- package/package.json +7 -12
package/README.md
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
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.
|
|
4
4
|
|
|
5
|
-
## V. 1.
|
|
5
|
+
## V. 1.6.0
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Added server side routing mainly for AaExJS but it also works inside vite SSR.
|
|
8
8
|
|
|
9
9
|
## Table of Contents
|
|
10
10
|
|
|
@@ -415,6 +415,41 @@ export default defineConfig({
|
|
|
415
415
|
});
|
|
416
416
|
```
|
|
417
417
|
|
|
418
|
+
## Server routing
|
|
419
|
+
|
|
420
|
+
If you are using vite SSR you want to configure your vite config with the serverRouter plugin instead of the normal one.
|
|
421
|
+
|
|
422
|
+
```ts
|
|
423
|
+
import { defineConfig } from "vite";
|
|
424
|
+
import react from "@vitejs/plugin-react";
|
|
425
|
+
import { aaexServerRouter } from "aaex-file-router/plugin";
|
|
426
|
+
|
|
427
|
+
// https://vite.dev/config/
|
|
428
|
+
export default defineConfig({
|
|
429
|
+
plugins: [react(), aaexServerRouter()],
|
|
430
|
+
});
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
this plugin generates 2 route files
|
|
434
|
+
|
|
435
|
+
### 1. server-routes.ts
|
|
436
|
+
|
|
437
|
+
Includes absolute path to the file `modulePath`
|
|
438
|
+
|
|
439
|
+
route example:
|
|
440
|
+
|
|
441
|
+
```ts
|
|
442
|
+
{
|
|
443
|
+
"path": "",
|
|
444
|
+
"element": React.createElement(Index),
|
|
445
|
+
"modulePath": "C:/Users/tmraa/OneDrive/Dokument/AaExJS-documentation/test-app/src/pages/index.tsx"
|
|
446
|
+
},
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
### 2. client-routes.ts
|
|
450
|
+
|
|
451
|
+
Just the normal route file.
|
|
452
|
+
|
|
418
453
|
## How It Works
|
|
419
454
|
|
|
420
455
|
1. **File Scanning**: Recursively scans your pages directory and builds a file tree
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileLink.d.ts","sourceRoot":"","sources":["../../src/components/FileLink.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,aAAa,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM;IACvD,EAAE,EAAE,SAAS,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,QAAQ,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM,EAAE,EAC1D,EAAE,EACF,QAAQ,GACT,EAAE,aAAa,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"FileLink.d.ts","sourceRoot":"","sources":["../../src/components/FileLink.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,aAAa,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM;IACvD,EAAE,EAAE,SAAS,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,QAAQ,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM,EAAE,EAC1D,EAAE,EACF,QAAQ,GACT,EAAE,aAAa,CAAC,SAAS,CAAC,2CAY1B"}
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { Link } from "react-router-dom";
|
|
3
3
|
export function FileLink({ to, children, }) {
|
|
4
|
+
const isServer = typeof window === "undefined";
|
|
5
|
+
console.log("isServer", isServer);
|
|
6
|
+
if (isServer) {
|
|
7
|
+
//supports server side routing
|
|
8
|
+
return _jsx("a", { href: to, children: children });
|
|
9
|
+
}
|
|
10
|
+
// client side routing
|
|
4
11
|
return _jsx(Link, { to: to, children: children });
|
|
5
12
|
}
|
|
6
13
|
//# sourceMappingURL=FileLink.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileLink.js","sourceRoot":"","sources":["../../src/components/FileLink.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAOxC,MAAM,UAAU,QAAQ,CAAoC,EAC1D,EAAE,EACF,QAAQ,GACiB;IACzB,OAAO,KAAC,IAAI,IAAC,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"FileLink.js","sourceRoot":"","sources":["../../src/components/FileLink.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAOxC,MAAM,UAAU,QAAQ,CAAoC,EAC1D,EAAE,EACF,QAAQ,GACiB;IACzB,MAAM,QAAQ,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;IAE/C,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAGlC,IAAI,QAAQ,EAAE,CAAC;QACb,+BAA+B;QAC/B,OAAO,YAAG,IAAI,EAAE,EAAY,YAAG,QAAQ,GAAK,CAAC;IAC/C,CAAC;IACD,sBAAsB;IACtB,OAAO,KAAC,IAAI,IAAC,EAAE,EAAE,EAAY,YAAG,QAAQ,GAAQ,CAAC;AACnD,CAAC"}
|
|
@@ -28,6 +28,13 @@ export declare class RouteGenerator {
|
|
|
28
28
|
private collectPaths;
|
|
29
29
|
/** Build TypeScript union type string */
|
|
30
30
|
private buildTypeUnion;
|
|
31
|
+
/** ---------------- Server specific functions for AaExJS ---------------- */
|
|
32
|
+
private createServerDirectoryRoute;
|
|
33
|
+
/** Creates server route with the module path included */
|
|
34
|
+
private createServerFileRoute;
|
|
35
|
+
/**Builds routes usable by vite ssr to extend functionality */
|
|
36
|
+
private fileDataToServerRoutes;
|
|
37
|
+
generateServerRoutesFile(fileData: FileNode[]): string;
|
|
31
38
|
/** Generate routes.ts content */
|
|
32
39
|
generateRoutesFile(fileData: FileNode[]): string;
|
|
33
40
|
/** Generate route type file (route paths as union) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouteGenerator.d.ts","sourceRoot":"","sources":["../../src/core/RouteGenerator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RouteGenerator.d.ts","sourceRoot":"","sources":["../../src/core/RouteGenerator.ts"],"names":[],"mappings":"AAYA,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;IAsBvB,gEAAgE;IAChE,OAAO,CAAC,gBAAgB;IAexB,kDAAkD;IAClD,OAAO,CAAC,YAAY;IA0BpB,yCAAyC;IACzC,OAAO,CAAC,cAAc;IAStB,6EAA6E;IAE7E,OAAO,CAAC,0BAA0B;IAwClC,yDAAyD;IACzD,OAAO,CAAC,qBAAqB;IAyC7B,8DAA8D;IAC9D,OAAO,CAAC,sBAAsB;IAYvB,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM;IAsB7D,iCAAiC;IAC1B,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM;IAoBvD,sDAAsD;IAC/C,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM;CASvD"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import path from "path";
|
|
1
2
|
export class RouteGenerator {
|
|
2
3
|
topLevelImports = [];
|
|
3
4
|
importSet = new Set();
|
|
@@ -76,29 +77,10 @@ export class RouteGenerator {
|
|
|
76
77
|
if (!isChild && parentPath)
|
|
77
78
|
pathSegment = `${parentPath}/${pathSegment}`;
|
|
78
79
|
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
80
|
this.addImport(file, importName);
|
|
88
81
|
return {
|
|
89
82
|
path: pathSegment,
|
|
90
83
|
element: `React.createElement(${importName})`,
|
|
91
|
-
// // Nested: lazy + Suspense
|
|
92
|
-
// const fallback = folderLoadingName
|
|
93
|
-
// ? `React.createElement(${folderLoadingName})`
|
|
94
|
-
// : `React.createElement('div', null, 'loading...')`;
|
|
95
|
-
// return {
|
|
96
|
-
// path: pathSegment,
|
|
97
|
-
// element: `React.createElement(React.Suspense, { fallback: ${fallback} }, React.createElement(React.lazy(() => import('./${file.relative_path.replace(
|
|
98
|
-
// /^src[\/\\]/,
|
|
99
|
-
// ""
|
|
100
|
-
// )}'))))`,
|
|
101
|
-
// };
|
|
102
84
|
};
|
|
103
85
|
// ---------------- Route Recursion ----------------
|
|
104
86
|
}
|
|
@@ -142,6 +124,81 @@ export class RouteGenerator {
|
|
|
142
124
|
.sort();
|
|
143
125
|
return normalized.map((p) => ` | "${p}"`).join("\n");
|
|
144
126
|
}
|
|
127
|
+
/** ---------------- Server specific functions for AaExJS ---------------- */
|
|
128
|
+
createServerDirectoryRoute(file, isChild) {
|
|
129
|
+
const route = { path: this.normalizeSegment(file.name) };
|
|
130
|
+
const layoutFile = file.children?.find((f) => /^layout\.(tsx|jsx|ts|js)$/i.test(f.name));
|
|
131
|
+
let layoutName = null;
|
|
132
|
+
if (layoutFile) {
|
|
133
|
+
layoutName = this.getPrefixedName(layoutFile, file.relative_path, "Layout");
|
|
134
|
+
this.addImport(layoutFile, layoutName);
|
|
135
|
+
route.element = `React.createElement(${layoutName})`;
|
|
136
|
+
route.modulePath = path
|
|
137
|
+
.resolve(process.cwd(), layoutFile.relative_path)
|
|
138
|
+
.replace(/\\/g, "/");
|
|
139
|
+
}
|
|
140
|
+
const children = file.children?.filter((f) => !/^layout\.(tsx|jsx|ts|js)$/i.test(f.name) &&
|
|
141
|
+
!/^loading\.(tsx|jsx|ts|js)$/i.test(f.name));
|
|
142
|
+
if (children?.length) {
|
|
143
|
+
// nested = true for children
|
|
144
|
+
//sorting dosnt work, might need to be moved?
|
|
145
|
+
route.children = this.fileDataToServerRoutes(children, route.path, true);
|
|
146
|
+
route.children.sort((a, b) => a.path === "" ? -1 : b.path === "" ? 1 : 0);
|
|
147
|
+
}
|
|
148
|
+
return route;
|
|
149
|
+
}
|
|
150
|
+
/** Creates server route with the module path included */
|
|
151
|
+
createServerFileRoute(file, parentPath, isChild) {
|
|
152
|
+
const fileName = file.name;
|
|
153
|
+
// Build route path
|
|
154
|
+
const nameWithoutExt = fileName.replace(/\.[jt]sx?$/, "");
|
|
155
|
+
const isIndex = nameWithoutExt.toLowerCase() === "index";
|
|
156
|
+
let pathSegment = isIndex ? "" : this.normalizeSegment(nameWithoutExt);
|
|
157
|
+
if (!isChild && parentPath) {
|
|
158
|
+
pathSegment = `${parentPath}/${pathSegment}`;
|
|
159
|
+
}
|
|
160
|
+
// Get import identifier
|
|
161
|
+
const importName = this.getPrefixedName(file, parentPath, "");
|
|
162
|
+
// Static import for server
|
|
163
|
+
this.addImport(file, importName);
|
|
164
|
+
// Create ABSOLUTE FILE PATH
|
|
165
|
+
//
|
|
166
|
+
// Example:
|
|
167
|
+
// projectRoot = /Users/me/myapp
|
|
168
|
+
// file.relative_path = src/pages/test/index.tsx
|
|
169
|
+
//
|
|
170
|
+
// → /Users/me/myapp/src/pages/test/index.tsx
|
|
171
|
+
const absolutePath = path.resolve(process.cwd(), file.relative_path);
|
|
172
|
+
// Normalize for Node ESM (Windows requires forward slashes)
|
|
173
|
+
const normalizedAbsolutePath = absolutePath.replace(/\\/g, "/");
|
|
174
|
+
return {
|
|
175
|
+
path: pathSegment,
|
|
176
|
+
element: `React.createElement(${importName})`,
|
|
177
|
+
modulePath: normalizedAbsolutePath,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
/**Builds routes usable by vite ssr to extend functionality */
|
|
181
|
+
fileDataToServerRoutes(files, parentPath = "", isChild = false) {
|
|
182
|
+
return files.map((file) => {
|
|
183
|
+
return file.isDirectory
|
|
184
|
+
? this.createServerDirectoryRoute(file, isChild)
|
|
185
|
+
: this.createServerFileRoute(file, parentPath, isChild);
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
generateServerRoutesFile(fileData) {
|
|
189
|
+
this.topLevelImports = [];
|
|
190
|
+
this.importSet.clear();
|
|
191
|
+
const routes = this.fileDataToServerRoutes(fileData);
|
|
192
|
+
return `//* AUTO GENERATED: DO NOT EDIT
|
|
193
|
+
import React from 'react';
|
|
194
|
+
${this.topLevelImports.join("\n")}
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
const serverRoutes: any[] = ${JSON.stringify(routes, null, 2).replace(/"React\.createElement\(([\s\S]*?)\)"/g, (_, inner) => `${inner}`)};
|
|
198
|
+
|
|
199
|
+
export default serverRoutes;
|
|
200
|
+
`;
|
|
201
|
+
}
|
|
145
202
|
// ---------------- PUBLIC METHODS ----------------
|
|
146
203
|
/** Generate routes.ts content */
|
|
147
204
|
generateRoutesFile(fileData) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouteGenerator.js","sourceRoot":"","sources":["../../src/core/RouteGenerator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RouteGenerator.js","sourceRoot":"","sources":["../../src/core/RouteGenerator.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin/index.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
export { aaexFileRouter } from
|
|
2
|
-
export type { VitePluginOptions } from
|
|
1
|
+
export { aaexFileRouter } from "./plugin.js";
|
|
2
|
+
export type { VitePluginOptions } from "./plugin.js";
|
|
3
|
+
export { aaexServerRouter } from "./serverPlugin.js";
|
|
4
|
+
export type { ViteServerPluginOptions } from "./serverPlugin.js";
|
|
3
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,YAAY,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/plugin/index.js
CHANGED
package/dist/plugin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Plugin } from "vite";
|
|
2
|
+
export interface ViteServerPluginOptions {
|
|
3
|
+
pagesDir?: string;
|
|
4
|
+
clientOutputFile?: string;
|
|
5
|
+
serverOutputFile?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Vite plugin that auto-generates server + client route files
|
|
9
|
+
* whenever files change in the pages directory.
|
|
10
|
+
*/
|
|
11
|
+
export declare function aaexServerRouter(options?: ViteServerPluginOptions): Plugin;
|
|
12
|
+
//# sourceMappingURL=serverPlugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serverPlugin.d.ts","sourceRoot":"","sources":["../../src/plugin/serverPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAM9B,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAmBD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,GAAE,uBAA4B,GACpC,MAAM,CA+DR"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { promises as fs } from "node:fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { FileScanner } from "../core/FileScanner.js";
|
|
4
|
+
import { RouteGenerator } from "../core/RouteGenerator.js";
|
|
5
|
+
/**
|
|
6
|
+
* Compute a relative import path between two locations.
|
|
7
|
+
* Ensures clean POSIX-style paths and proper "./" or "../" prefixes.
|
|
8
|
+
*/
|
|
9
|
+
function getRelativeImportPath(fromFile, toDir) {
|
|
10
|
+
// Relative path from the generated file → target directory
|
|
11
|
+
let rel = path.relative(path.dirname(fromFile), toDir);
|
|
12
|
+
// Convert backslashes to slashes (Windows fix)
|
|
13
|
+
rel = rel.replace(/\\/g, "/");
|
|
14
|
+
// Ensure valid import path prefix
|
|
15
|
+
if (!rel.startsWith("."))
|
|
16
|
+
rel = "./" + rel;
|
|
17
|
+
return rel;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Vite plugin that auto-generates server + client route files
|
|
21
|
+
* whenever files change in the pages directory.
|
|
22
|
+
*/
|
|
23
|
+
export function aaexServerRouter(options = {}) {
|
|
24
|
+
const pagesDir = options.pagesDir || "./src/pages";
|
|
25
|
+
const clientOutputFile = options.clientOutputFile || "./src/client-routes.ts";
|
|
26
|
+
const serverOutputFile = options.serverOutputFile || "./src/server-routes.ts";
|
|
27
|
+
let scanner;
|
|
28
|
+
let generator;
|
|
29
|
+
return {
|
|
30
|
+
name: "aaex-server-router",
|
|
31
|
+
apply: "serve", // Only run in dev mode
|
|
32
|
+
configResolved() {
|
|
33
|
+
scanner = new FileScanner(pagesDir);
|
|
34
|
+
generator = new RouteGenerator();
|
|
35
|
+
},
|
|
36
|
+
async configureServer(server) {
|
|
37
|
+
// Convert to absolute paths
|
|
38
|
+
const pagesAbs = path.resolve(process.cwd(), pagesDir);
|
|
39
|
+
const clientOutputAbs = path.resolve(process.cwd(), clientOutputFile);
|
|
40
|
+
const serverOutputAbs = path.resolve(process.cwd(), serverOutputFile);
|
|
41
|
+
// Watch the pages directory for changes
|
|
42
|
+
server.watcher.add(pagesAbs);
|
|
43
|
+
server.watcher.on("all", async (event, filePath) => {
|
|
44
|
+
// Only regenerate on add/delete
|
|
45
|
+
if (event === "add" || event === "unlink") {
|
|
46
|
+
try {
|
|
47
|
+
// Re-scan and regenerate route info
|
|
48
|
+
scanner = new FileScanner(pagesDir);
|
|
49
|
+
generator = new RouteGenerator();
|
|
50
|
+
const fileData = await scanner.get_file_data();
|
|
51
|
+
// Generate files using the relative paths
|
|
52
|
+
const routesCode = generator.generateRoutesFile(fileData);
|
|
53
|
+
const serverRoutesCode = generator.generateServerRoutesFile(fileData);
|
|
54
|
+
const routesType = generator.generateTypesFile(fileData);
|
|
55
|
+
// Write to disk
|
|
56
|
+
await fs.writeFile(clientOutputAbs, routesCode, "utf-8");
|
|
57
|
+
await fs.writeFile(serverOutputAbs, serverRoutesCode, "utf-8");
|
|
58
|
+
await fs.writeFile("src/routeTypes.ts", routesType, "utf-8");
|
|
59
|
+
console.log(`[aaex-server-router] Routes regenerated at ${clientOutputFile} & ${serverOutputFile}`);
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
console.error("[aaex-server-router] Error regenerating routes:", error);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=serverPlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serverPlugin.js","sourceRoot":"","sources":["../../src/plugin/serverPlugin.ts"],"names":[],"mappings":"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"}
|
package/dist/test/index.js
CHANGED
|
@@ -11,7 +11,7 @@ async function generateRoutes() {
|
|
|
11
11
|
// console.log(fileData);
|
|
12
12
|
console.dir(fileData, { depth: null });
|
|
13
13
|
const generator = new RouteGenerator();
|
|
14
|
-
const routeMap = generator.
|
|
14
|
+
const routeMap = generator.generateServerRoutesFile(fileData);
|
|
15
15
|
// console.log("Route map: ", routeMap)
|
|
16
16
|
const routType = generator.generateTypesFile(fileData);
|
|
17
17
|
console.log(routType);
|
package/dist/test/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,OAAO,EAAE,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,QAAQ,GAAG,YAAY,CAAC;AAE9B,KAAK,UAAU,cAAc;IAC3B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;QAE/C,yBAAyB;QAEzB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAEvC,MAAM,SAAS,GAAG,IAAI,cAAc,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,SAAS,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAE9D,uCAAuC;QAEvC,MAAM,QAAQ,GAAG,SAAS,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEtB,yBAAyB;QAEzB,EAAE,CAAC,SAAS,CAAC,sBAAsB,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC9D,IAAI,GAAG,EAAE,CAAC;gBACR,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,cAAc,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aaex-file-router",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.1",
|
|
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": {
|
|
@@ -8,18 +8,16 @@
|
|
|
8
8
|
"build": "npx tsc",
|
|
9
9
|
"dev": "npx tsc --watch",
|
|
10
10
|
"release": "npx tsc && npm publish "
|
|
11
|
-
|
|
12
11
|
},
|
|
13
12
|
"keywords": [
|
|
14
13
|
"react",
|
|
15
14
|
"router",
|
|
16
15
|
"vite-plugin"
|
|
17
16
|
],
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
"./plugin": "./dist/plugin/index.js"
|
|
17
|
+
"exports": {
|
|
18
|
+
".": "./dist/index.js",
|
|
19
|
+
"./core": "./dist/core/index.js",
|
|
20
|
+
"./plugin": "./dist/plugin/index.js"
|
|
23
21
|
},
|
|
24
22
|
"author": "TmRAaEx",
|
|
25
23
|
"license": "MIT",
|
|
@@ -34,17 +32,14 @@
|
|
|
34
32
|
"@types/node": "^24.10.1",
|
|
35
33
|
"@types/react": "^19.2.7",
|
|
36
34
|
"@types/react-dom": "^19.2.3",
|
|
37
|
-
"react": "^19.2.0",
|
|
38
|
-
"react-dom": "^19.2.0",
|
|
39
35
|
"react-router-dom": "^7.9.6",
|
|
40
36
|
"typescript": "^5.9.3",
|
|
41
37
|
"vite": "^7.2.4",
|
|
42
38
|
"vite-plugin-dts": "^4.5.4"
|
|
43
39
|
},
|
|
44
|
-
|
|
45
40
|
"peerDependencies": {
|
|
46
|
-
"react": "^19.2.
|
|
47
|
-
"react-dom": "^19.2.
|
|
41
|
+
"react": "^19.2.1",
|
|
42
|
+
"react-dom": "^19.2.1",
|
|
48
43
|
"react-router-dom": "^7.9.6",
|
|
49
44
|
"vite": "^7.2.4"
|
|
50
45
|
}
|