@ereo/router 0.2.1 → 0.2.3
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/dist/file-router.d.ts +8 -0
- package/dist/file-router.d.ts.map +1 -1
- package/dist/index.js +41 -0
- package/package.json +2 -2
package/dist/file-router.d.ts
CHANGED
|
@@ -19,6 +19,8 @@ export declare class FileRouter {
|
|
|
19
19
|
private matcher;
|
|
20
20
|
private watcher;
|
|
21
21
|
private eventHandlers;
|
|
22
|
+
/** Tracks file mtimes to detect changes in dev mode */
|
|
23
|
+
private mtimeCache;
|
|
22
24
|
constructor(options?: RouterOptions);
|
|
23
25
|
/**
|
|
24
26
|
* Initialize the router by discovering routes.
|
|
@@ -45,6 +47,10 @@ export declare class FileRouter {
|
|
|
45
47
|
*/
|
|
46
48
|
private debounceTimer;
|
|
47
49
|
private handleFileChange;
|
|
50
|
+
/**
|
|
51
|
+
* Clear cached module for a route by ID (searches nested children).
|
|
52
|
+
*/
|
|
53
|
+
private invalidateRouteModule;
|
|
48
54
|
/**
|
|
49
55
|
* Convert route node to Route type.
|
|
50
56
|
*/
|
|
@@ -79,6 +85,8 @@ export declare class FileRouter {
|
|
|
79
85
|
private emit;
|
|
80
86
|
/**
|
|
81
87
|
* Load a route module and parse its configuration.
|
|
88
|
+
* In dev mode (watch: true), checks file mtime to detect changes
|
|
89
|
+
* and re-imports when the file has been modified on disk.
|
|
82
90
|
*/
|
|
83
91
|
loadModule(route: Route): Promise<void>;
|
|
84
92
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-router.d.ts","sourceRoot":"","sources":["../src/file-router.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAa,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,EAAkB,SAAS,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAiB,YAAY,EAAE,MAAM,WAAW,CAAC;AAkBxD;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,IAAI,CAA0B;IACtC,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,OAAO,CAA2D;IAC1E,OAAO,CAAC,aAAa,CAA6B;
|
|
1
|
+
{"version":3,"file":"file-router.d.ts","sourceRoot":"","sources":["../src/file-router.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -773,6 +773,7 @@ class FileRouter {
|
|
|
773
773
|
matcher = null;
|
|
774
774
|
watcher = null;
|
|
775
775
|
eventHandlers = {};
|
|
776
|
+
mtimeCache = new Map;
|
|
776
777
|
constructor(options = {}) {
|
|
777
778
|
this.options = { ...defaultOptions, ...options };
|
|
778
779
|
const routesDir = this.options.routesDir;
|
|
@@ -858,6 +859,7 @@ class FileRouter {
|
|
|
858
859
|
const node = this.tree?.findById(routeId);
|
|
859
860
|
if (node) {
|
|
860
861
|
delete node.module;
|
|
862
|
+
this.invalidateRouteModule(routeId);
|
|
861
863
|
this.emit("change", this.nodeToRoute(node));
|
|
862
864
|
}
|
|
863
865
|
}
|
|
@@ -873,6 +875,20 @@ class FileRouter {
|
|
|
873
875
|
}
|
|
874
876
|
}, 50);
|
|
875
877
|
}
|
|
878
|
+
invalidateRouteModule(routeId) {
|
|
879
|
+
const search = (routes) => {
|
|
880
|
+
for (const route of routes) {
|
|
881
|
+
if (route.id === routeId) {
|
|
882
|
+
delete route.module;
|
|
883
|
+
delete route.config;
|
|
884
|
+
return;
|
|
885
|
+
}
|
|
886
|
+
if (route.children)
|
|
887
|
+
search(route.children);
|
|
888
|
+
}
|
|
889
|
+
};
|
|
890
|
+
search(this.routes);
|
|
891
|
+
}
|
|
876
892
|
nodeToRoute(node) {
|
|
877
893
|
return {
|
|
878
894
|
id: node.id,
|
|
@@ -912,6 +928,31 @@ class FileRouter {
|
|
|
912
928
|
}
|
|
913
929
|
}
|
|
914
930
|
async loadModule(route) {
|
|
931
|
+
if (this.options.watch) {
|
|
932
|
+
try {
|
|
933
|
+
const fileStat = await stat(route.file);
|
|
934
|
+
const mtime = fileStat.mtimeMs;
|
|
935
|
+
const cachedMtime = this.mtimeCache.get(route.file);
|
|
936
|
+
if (route.module && cachedMtime === mtime) {
|
|
937
|
+
return;
|
|
938
|
+
}
|
|
939
|
+
const mod = await import(`${route.file}?v=${mtime}`);
|
|
940
|
+
route.module = mod;
|
|
941
|
+
this.mtimeCache.set(route.file, mtime);
|
|
942
|
+
route.config = undefined;
|
|
943
|
+
if (mod.config) {
|
|
944
|
+
route.config = parseRouteConfig(mod.config);
|
|
945
|
+
}
|
|
946
|
+
const parent = this.findParentRoute(route);
|
|
947
|
+
if (parent?.config) {
|
|
948
|
+
route.config = mergeRouteConfigs(parent.config, route.config);
|
|
949
|
+
}
|
|
950
|
+
} catch (error) {
|
|
951
|
+
console.error(`Failed to load route module: ${route.file}`, error);
|
|
952
|
+
throw error;
|
|
953
|
+
}
|
|
954
|
+
return;
|
|
955
|
+
}
|
|
915
956
|
if (route.module)
|
|
916
957
|
return;
|
|
917
958
|
try {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ereo/router",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.3",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "Ereo Team",
|
|
6
6
|
"homepage": "https://ereojs.github.io/ereoJS",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"typecheck": "tsc --noEmit"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@ereo/core": "^0.2.
|
|
35
|
+
"@ereo/core": "^0.2.3"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"@types/bun": "^1.1.0",
|