@ereo/router 0.1.11 → 0.1.12

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/index.js CHANGED
@@ -398,40 +398,24 @@ class RouteTree {
398
398
  }
399
399
  return layouts;
400
400
  }
401
+ middlewareByPath = new Map;
401
402
  attachMiddleware(path, middlewareFile) {
402
- const node = this.findByPath(path);
403
- if (node) {
404
- node.middlewareFile = middlewareFile;
405
- return;
406
- }
407
- if (path === "/") {
408
- this.root.middlewareFile = middlewareFile;
409
- }
403
+ this.middlewareByPath.set(path, { file: middlewareFile });
410
404
  }
411
405
  getMiddlewareChain(routeId) {
412
406
  const node = this.findById(routeId);
413
407
  if (!node)
414
408
  return [];
409
+ const routePath = node.path;
415
410
  const middlewares = [];
416
- const collectMiddleware = (current) => {
417
- if (!current)
418
- return;
419
- if (current.parent) {
420
- collectMiddleware(current.parent);
421
- }
422
- if (current.middlewareFile) {
423
- middlewares.push({
424
- file: current.middlewareFile,
425
- module: current.middlewareModule
426
- });
411
+ const sortedPaths = Array.from(this.middlewareByPath.keys()).sort((a, b) => a.length - b.length);
412
+ for (const middlewarePath of sortedPaths) {
413
+ if (middlewarePath === "/" || routePath === middlewarePath || routePath.startsWith(middlewarePath + "/")) {
414
+ const mw = this.middlewareByPath.get(middlewarePath);
415
+ if (mw) {
416
+ middlewares.push(mw);
417
+ }
427
418
  }
428
- };
429
- collectMiddleware(node);
430
- if (this.root.middlewareFile && !middlewares.find((m) => m.file === this.root.middlewareFile)) {
431
- middlewares.unshift({
432
- file: this.root.middlewareFile,
433
- module: this.root.middlewareModule
434
- });
435
419
  }
436
420
  return middlewares;
437
421
  }
@@ -63,6 +63,11 @@ export declare class RouteTree {
63
63
  * Get the layout chain for a route.
64
64
  */
65
65
  getLayoutChain(routeId: string): RouteNode[];
66
+ /**
67
+ * Middleware stored by path prefix.
68
+ * Separate from route nodes since middleware can exist without a route at that path.
69
+ */
70
+ private middlewareByPath;
66
71
  /**
67
72
  * Attach middleware to a route segment.
68
73
  * Middleware applies to all routes in and below this segment.
@@ -1 +1 @@
1
- {"version":3,"file":"route-tree.d.ts","sourceRoot":"","sources":["../src/route-tree.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAgB,MAAM,SAAS,CAAC;AAIvD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,IAAI,CAAY;;IAMxB;;OAEG;IACH,OAAO,CAAC,UAAU;IAoBlB;;OAEG;IACH,QAAQ,CACN,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAO,GAClD,SAAS;IAeZ;;OAEG;IACH,OAAO,CAAC,UAAU;IA8BlB;;OAEG;IACH,OAAO,IAAI,SAAS;IAIpB;;OAEG;IACH,QAAQ,IAAI,KAAK,EAAE;IAInB;;OAEG;IACH,OAAO,CAAC,WAAW;IAoBnB;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAc1C;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IActC;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAe/B;;OAEG;IACH,OAAO,IAAI,SAAS,EAAE;IActB;;OAEG;IACH,UAAU,IAAI,SAAS,EAAE;IAIzB;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE;IAiB5C;;;OAGG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI;IAc5D;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE;YAAE,UAAU,CAAC,EAAE,GAAG,CAAA;SAAE,CAAA;KAAE,CAAC;CAoC5F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAwCxE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,KAAK,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,EAC5D,SAAS,EAAE,MAAM,GAChB,SAAS,CAsCX;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,SAAS,CAE3C"}
1
+ {"version":3,"file":"route-tree.d.ts","sourceRoot":"","sources":["../src/route-tree.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAgB,MAAM,SAAS,CAAC;AAIvD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,IAAI,CAAY;;IAMxB;;OAEG;IACH,OAAO,CAAC,UAAU;IAoBlB;;OAEG;IACH,QAAQ,CACN,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAO,GAClD,SAAS;IAeZ;;OAEG;IACH,OAAO,CAAC,UAAU;IA8BlB;;OAEG;IACH,OAAO,IAAI,SAAS;IAIpB;;OAEG;IACH,QAAQ,IAAI,KAAK,EAAE;IAInB;;OAEG;IACH,OAAO,CAAC,WAAW;IAoBnB;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAc1C;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IActC;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAe/B;;OAEG;IACH,OAAO,IAAI,SAAS,EAAE;IActB;;OAEG;IACH,UAAU,IAAI,SAAS,EAAE;IAIzB;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE;IAiB5C;;;OAGG;IACH,OAAO,CAAC,gBAAgB,CAA2E;IAEnG;;;OAGG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI;IAK5D;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE;YAAE,UAAU,CAAC,EAAE,GAAG,CAAA;SAAE,CAAA;KAAE,CAAC;CA8B5F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAwCxE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,KAAK,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,EAC5D,SAAS,EAAE,MAAM,GAChB,SAAS,CAsCX;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,SAAS,CAE3C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ereo/router",
3
- "version": "0.1.11",
3
+ "version": "0.1.12",
4
4
  "license": "MIT",
5
5
  "author": "Ereo Team",
6
6
  "homepage": "https://ereo.dev",