@arikajs/router 0.0.4 → 0.0.5

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
@@ -12,12 +12,14 @@ Arika Router integrates directly with **@arikajs/http** and **@arikajs/foundatio
12
12
 
13
13
  - **Stage**: Early Development / v0.x
14
14
  - **Scope (v1.x)**:
15
- - HTTP method based routing (GET, POST, PUT, PATCH, DELETE)
15
+ - HTTP method based routing (GET, POST, PUT, PATCH, DELETE, ANY)
16
16
  - Path-based route matching (Static & Regex)
17
- - Route parameters (`/users/:id`)
17
+ - Route parameters with Regex constraints (`/users/:id`)
18
+ - Resourceful routing (`Route.resource`)
19
+ - Redirect routes (`Route.redirect`)
18
20
  - Central route registry
19
- - Route grouping with prefixes & middleware
20
- - Route naming
21
+ - Route grouping with prefixes & middleware (fluent chaining)
22
+ - Route naming and URL generation (Reverse Routing)
21
23
  - Controller resolution from container
22
24
  - Route handler execution (dispatching)
23
25
  - **Out of scope (for now)**:
@@ -29,18 +31,23 @@ Arika Router integrates directly with **@arikajs/http** and **@arikajs/foundatio
29
31
  ## Features
30
32
 
31
33
  - **Core Routing**
32
- - HTTP method based routing (GET, POST, PUT, PATCH, DELETE)
34
+ - HTTP method based routing (GET, POST, PUT, PATCH, DELETE, ANY)
35
+ - Redirect routes directly from the router
36
+ - Resourceful routing capabilities
33
37
  - Path-based route matching
34
- - Central route registry
35
38
 
36
- - **Route Grouping**
39
+ - **Route Grouping & Chaining**
37
40
  - Group routes with a common prefix
38
41
  - Nested groups support
42
+ - Fluent configuration (`Route.prefix('api').middleware('auth').group(...)`)
39
43
 
40
- - **Request Matching**
44
+ - **Advanced Matching**
45
+ - Parameter regular expression constraints (`where()`)
41
46
  - Method + path matching
42
- - First match wins logic
43
- - Predictable matching order
47
+ - Match specific parameter subsets cleanly
48
+
49
+ - **Reverse Routing**
50
+ - Name your routes and generate fully qualified URLs dynamically
44
51
 
45
52
  - **Dispatching**
46
53
  - Route handler execution
@@ -79,17 +86,32 @@ Route.post('/submit', (request) => {
79
86
  });
80
87
  ```
81
88
 
82
- ### 2. Route Parameters & Fluent Chaining
89
+ ### 2. Route Parameters & Constraints
83
90
 
84
91
  ```ts
85
92
  Route.get('/users/:id', (request, id) => {
86
93
  return `User ID: ${id}`;
87
94
  })
95
+ .where('id', '[0-9]+') // Enforces that ID must be digits!
88
96
  .as('users.show')
89
97
  .withMiddleware(AuthMiddleware);
90
98
  ```
91
99
 
92
- ### 3. Controller Resolution
100
+ ### 3. Advanced Route Types
101
+
102
+ ```ts
103
+ // Respond to multiple methods
104
+ Route.any('/webhook', (req) => { ... });
105
+
106
+ // Instant 301/302 Redirection
107
+ Route.redirect('/old-path', '/new-path', 301);
108
+
109
+ // Automatic Resourceful Routes (index, create, store, show, edit, update, destroy)
110
+ import { PostController } from './controllers/PostController';
111
+ Route.resource('posts', PostController);
112
+ ```
113
+
114
+ ### 4. Controller Resolution
93
115
 
94
116
  ```ts
95
117
  import { UserController } from './controllers/UserController';
@@ -97,34 +119,47 @@ import { UserController } from './controllers/UserController';
97
119
  Route.get('/users', [UserController, 'index']);
98
120
  ```
99
121
 
100
- ### 4. Route Grouping
122
+ ### 5. Route Grouping (Fluent)
101
123
 
102
124
  ```ts
103
- Route.group('/api', () => {
104
- Route.get('/users', () => {
105
- return ['user1', 'user2'];
125
+ Route.prefix('api/v1')
126
+ .middleware(['auth', 'throttle'])
127
+ .group(() => {
128
+ Route.get('/profile', [ProfileController, 'show']);
106
129
  });
107
- });
108
130
  ```
109
131
 
110
- ---
132
+ ### 6. Reverse Routing (URL Generation)
133
+
134
+ You can generate dynamic URLs based purely on a named route.
135
+
136
+ ```ts
137
+ Route.get('/posts/:id/comments/:commentId', () => { ... }).as('post.comment');
138
+
139
+ const url = router.route('post.comment', { id: 5, commentId: 10 });
140
+ // Returns: "/posts/5/comments/10"
141
+ ```
111
142
 
112
- ## Architecture Overview
143
+ ---
113
144
 
114
- The router follows a simple flow:
145
+ ## 🏗 Architecture
115
146
 
116
147
  ```text
117
- HTTP Request
118
-
119
- HttpKernel (@arikajs/http)
120
-
121
- RouteMatcher
122
-
123
- Matched Route
124
-
125
- Dispatcher
126
-
127
- Handler Execution
148
+ router/
149
+ ├── src/
150
+ │ ├── tests
151
+ │ │ └── Router.test.ts
152
+ │ ├── index.ts
153
+ │ ├── Route.ts
154
+ │ ├── RouteEntry.ts
155
+ │ ├── RouteMatcher.ts
156
+ │ ├── Router.ts
157
+ │ ├── RouteRegistry.ts
158
+ │ └── types.ts
159
+ ├── tests/
160
+ ├── package.json
161
+ ├── tsconfig.json
162
+ └── README.md
128
163
  ```
129
164
 
130
165
  The router never writes to the response directly. It only decides **which handler should run**.
package/dist/Route.d.ts CHANGED
@@ -1,15 +1,28 @@
1
1
  import { RouteHandler } from './types';
2
2
  import { RouteEntry } from './RouteEntry';
3
+ export declare class RouteGroupBuilder {
4
+ private options;
5
+ prefix(prefix: string): this;
6
+ middleware(middleware: any | any[]): this;
7
+ group(callback: () => void): void;
8
+ }
3
9
  export declare class Route {
4
10
  static get(path: string, handler: RouteHandler): RouteEntry;
5
11
  static post(path: string, handler: RouteHandler): RouteEntry;
6
12
  static put(path: string, handler: RouteHandler): RouteEntry;
7
13
  static patch(path: string, handler: RouteHandler): RouteEntry;
8
14
  static delete(path: string, handler: RouteHandler): RouteEntry;
15
+ static any(path: string, handler: RouteHandler): RouteEntry[];
16
+ static options(path: string, handler: RouteHandler): RouteEntry;
17
+ static match(methods: string[], path: string, handler: RouteHandler): RouteEntry[];
18
+ static redirect(path: string, destination: string, status?: number): RouteEntry;
19
+ static resource(name: string, controller: any): void;
9
20
  static group(options: string | {
10
21
  prefix?: string;
11
22
  middleware?: any | any[];
12
23
  }, callback: () => void): void;
24
+ static prefix(prefix: string): RouteGroupBuilder;
25
+ static middleware(middleware: any | any[]): RouteGroupBuilder;
13
26
  static model(key: string, resolver: any): void;
14
27
  }
15
28
  //# sourceMappingURL=Route.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Route.d.ts","sourceRoot":"","sources":["../src/Route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,qBAAa,KAAK;WACA,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,UAAU;WAIpD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,UAAU;WAIrD,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,UAAU;WAIpD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,UAAU;WAItD,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,UAAU;WAIvD,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,CAAA;KAAE,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;WAIlG,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,IAAI;CAGxD"}
1
+ {"version":3,"file":"Route.d.ts","sourceRoot":"","sources":["../src/Route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,OAAO,CAA+C;IAEvD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK5B,UAAU,CAAC,UAAU,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI;IAKzC,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;CAG3C;AAED,qBAAa,KAAK;WACA,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,UAAU;WAIpD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,UAAU;WAIrD,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,UAAU;WAIpD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,UAAU;WAItD,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,UAAU;WAIvD,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,UAAU,EAAE;WAKtD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,UAAU;WAIxD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,UAAU,EAAE;WAI3E,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,SAAM,GAAG,UAAU;WASrE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,GAAG,IAAI;WAW7C,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,CAAA;KAAE,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;WAIlG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB;WAIzC,UAAU,CAAC,UAAU,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,iBAAiB;WAItD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,IAAI;CAGxD"}
package/dist/Route.js CHANGED
@@ -1,7 +1,24 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Route = void 0;
3
+ exports.Route = exports.RouteGroupBuilder = void 0;
4
4
  const RouteRegistry_1 = require("./RouteRegistry");
5
+ class RouteGroupBuilder {
6
+ constructor() {
7
+ this.options = {};
8
+ }
9
+ prefix(prefix) {
10
+ this.options.prefix = prefix;
11
+ return this;
12
+ }
13
+ middleware(middleware) {
14
+ this.options.middleware = Array.isArray(middleware) ? middleware : [middleware];
15
+ return this;
16
+ }
17
+ group(callback) {
18
+ RouteRegistry_1.RouteRegistry.getInstance().group(this.options, callback);
19
+ }
20
+ }
21
+ exports.RouteGroupBuilder = RouteGroupBuilder;
5
22
  class Route {
6
23
  static get(path, handler) {
7
24
  return RouteRegistry_1.RouteRegistry.getInstance().addRoute('GET', path, handler);
@@ -18,9 +35,43 @@ class Route {
18
35
  static delete(path, handler) {
19
36
  return RouteRegistry_1.RouteRegistry.getInstance().addRoute('DELETE', path, handler);
20
37
  }
38
+ static any(path, handler) {
39
+ const methods = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS', 'HEAD'];
40
+ return methods.map(method => RouteRegistry_1.RouteRegistry.getInstance().addRoute(method, path, handler));
41
+ }
42
+ static options(path, handler) {
43
+ return RouteRegistry_1.RouteRegistry.getInstance().addRoute('OPTIONS', path, handler);
44
+ }
45
+ static match(methods, path, handler) {
46
+ return methods.map(method => RouteRegistry_1.RouteRegistry.getInstance().addRoute(method.toUpperCase(), path, handler));
47
+ }
48
+ static redirect(path, destination, status = 302) {
49
+ return RouteRegistry_1.RouteRegistry.getInstance().addRoute('ANY', path, (request, response) => {
50
+ if (response && typeof response.redirect === 'function') {
51
+ return response.redirect(destination, status);
52
+ }
53
+ return { $status: status, $redirect: destination }; // Fallback signaling for dispatcher
54
+ });
55
+ }
56
+ static resource(name, controller) {
57
+ Route.get(`/${name}`, [controller, 'index']).name(`${name}.index`);
58
+ Route.get(`/${name}/create`, [controller, 'create']).name(`${name}.create`);
59
+ Route.post(`/${name}`, [controller, 'store']).name(`${name}.store`);
60
+ Route.get(`/${name}/:id`, [controller, 'show']).name(`${name}.show`);
61
+ Route.get(`/${name}/:id/edit`, [controller, 'edit']).name(`${name}.edit`);
62
+ Route.put(`/${name}/:id`, [controller, 'update']).name(`${name}.update`);
63
+ Route.patch(`/${name}/:id`, [controller, 'update']).name(`${name}.update`);
64
+ Route.delete(`/${name}/:id`, [controller, 'destroy']).name(`${name}.destroy`);
65
+ }
21
66
  static group(options, callback) {
22
67
  RouteRegistry_1.RouteRegistry.getInstance().group(options, callback);
23
68
  }
69
+ static prefix(prefix) {
70
+ return new RouteGroupBuilder().prefix(prefix);
71
+ }
72
+ static middleware(middleware) {
73
+ return new RouteGroupBuilder().middleware(middleware);
74
+ }
24
75
  static model(key, resolver) {
25
76
  RouteRegistry_1.RouteRegistry.getInstance().model(key, resolver);
26
77
  }
package/dist/Route.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Route.js","sourceRoot":"","sources":["../src/Route.ts"],"names":[],"mappings":";;;AAAA,mDAAgD;AAIhD,MAAa,KAAK;IACP,MAAM,CAAC,GAAG,CAAC,IAAY,EAAE,OAAqB;QACjD,OAAO,6BAAa,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC;IAEM,MAAM,CAAC,IAAI,CAAC,IAAY,EAAE,OAAqB;QAClD,OAAO,6BAAa,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACvE,CAAC;IAEM,MAAM,CAAC,GAAG,CAAC,IAAY,EAAE,OAAqB;QACjD,OAAO,6BAAa,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,IAAY,EAAE,OAAqB;QACnD,OAAO,6BAAa,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,IAAY,EAAE,OAAqB;QACpD,OAAO,6BAAa,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,OAA+D,EAAE,QAAoB;QACrG,6BAAa,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACzD,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,GAAW,EAAE,QAAa;QAC1C,6BAAa,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;CACJ;AA5BD,sBA4BC"}
1
+ {"version":3,"file":"Route.js","sourceRoot":"","sources":["../src/Route.ts"],"names":[],"mappings":"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"}
@@ -3,15 +3,24 @@ export declare class RouteEntry implements RouteDefinition {
3
3
  method: string;
4
4
  path: string;
5
5
  handler: RouteHandler;
6
- name?: string;
6
+ _name?: string;
7
7
  prefix?: string;
8
8
  middleware: any[];
9
9
  regex: RegExp;
10
10
  paramKeys: string[];
11
+ constraints: Record<string, string>;
11
12
  constructor(method: string, path: string, handler: RouteHandler, prefix?: string, groupMiddleware?: any[]);
13
+ /**
14
+ * Add a regular expression requirement for a route parameter.
15
+ */
16
+ where(param: string | Record<string, string>, regex?: string): this;
12
17
  /**
13
18
  * Set a name for the route.
14
19
  */
20
+ name(name: string): this;
21
+ /**
22
+ * Set an alias name for the route.
23
+ */
15
24
  as(name: string): this;
16
25
  /**
17
26
  * Add middleware to the route.
@@ -1 +1 @@
1
- {"version":3,"file":"RouteEntry.d.ts","sourceRoot":"","sources":["../src/RouteEntry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAExD,qBAAa,UAAW,YAAW,eAAe;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,GAAG,EAAE,CAAM;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,CAAM;gBAEpB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,eAAe,GAAE,GAAG,EAAO;IAY7G;;OAEG;IACI,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK7B;;OAEG;IACI,cAAc,CAAC,UAAU,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI;IASpD;;OAEG;IACH,OAAO,CAAC,WAAW;CActB"}
1
+ {"version":3,"file":"RouteEntry.d.ts","sourceRoot":"","sources":["../src/RouteEntry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAExD,qBAAa,UAAW,YAAW,eAAe;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,GAAG,EAAE,CAAM;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,CAAM;IACzB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM;gBAEpC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,eAAe,GAAE,GAAG,EAAO;IAY7G;;OAEG;IACI,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAc1E;;OAEG;IACI,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK/B;;OAEG;IACI,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI7B;;OAEG;IACI,cAAc,CAAC,UAAU,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI;IASpD;;OAEG;IACH,OAAO,CAAC,WAAW;CAgBtB"}
@@ -5,6 +5,7 @@ class RouteEntry {
5
5
  constructor(method, path, handler, prefix, groupMiddleware = []) {
6
6
  this.middleware = [];
7
7
  this.paramKeys = [];
8
+ this.constraints = {};
8
9
  this.method = method.toUpperCase();
9
10
  this.path = path;
10
11
  this.handler = handler;
@@ -14,13 +15,34 @@ class RouteEntry {
14
15
  this.regex = regex;
15
16
  this.paramKeys = paramKeys;
16
17
  }
18
+ /**
19
+ * Add a regular expression requirement for a route parameter.
20
+ */
21
+ where(param, regex) {
22
+ if (typeof param === 'string') {
23
+ this.constraints[param] = regex;
24
+ }
25
+ else {
26
+ Object.assign(this.constraints, param);
27
+ }
28
+ // Re-compile regex when constraints are updated
29
+ const compiled = this.compilePath(this.path);
30
+ this.regex = compiled.regex;
31
+ return this;
32
+ }
17
33
  /**
18
34
  * Set a name for the route.
19
35
  */
20
- as(name) {
21
- this.name = name;
36
+ name(name) {
37
+ this._name = name;
22
38
  return this;
23
39
  }
40
+ /**
41
+ * Set an alias name for the route.
42
+ */
43
+ as(name) {
44
+ return this.name(name);
45
+ }
24
46
  /**
25
47
  * Add middleware to the route.
26
48
  */
@@ -37,11 +59,13 @@ class RouteEntry {
37
59
  * Compile the path into a regex.
38
60
  */
39
61
  compilePath(path) {
40
- const paramKeys = [];
62
+ let paramKeys = [];
41
63
  const pattern = path
42
64
  .replace(/:([a-zA-Z0-9_]+)|\{([a-zA-Z0-9_]+)\}/g, (_, key1, key2) => {
43
- paramKeys.push(key1 || key2);
44
- return '([^/]+)';
65
+ const key = key1 || key2;
66
+ paramKeys.push(key);
67
+ const constrain = this.constraints[key] || '[^/]+';
68
+ return `(${constrain})`;
45
69
  })
46
70
  .replace(/\//g, '\\/');
47
71
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"RouteEntry.js","sourceRoot":"","sources":["../src/RouteEntry.ts"],"names":[],"mappings":";;;AAEA,MAAa,UAAU;IAUnB,YAAY,MAAc,EAAE,IAAY,EAAE,OAAqB,EAAE,MAAe,EAAE,kBAAyB,EAAE;QAJtG,eAAU,GAAU,EAAE,CAAC;QAEvB,cAAS,GAAa,EAAE,CAAC;QAG5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,eAAe,CAAC,CAAC;QAEvC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED;;OAEG;IACI,EAAE,CAAC,IAAY;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,cAAc,CAAC,UAAuB;QACzC,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,IAAY;QAC5B,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,IAAI;aACf,OAAO,CAAC,uCAAuC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;YAChE,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;YAC7B,OAAO,SAAS,CAAC;QACrB,CAAC,CAAC;aACD,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAE3B,OAAO;YACH,KAAK,EAAE,IAAI,MAAM,CAAC,IAAI,OAAO,GAAG,CAAC;YACjC,SAAS;SACZ,CAAC;IACN,CAAC;CACJ;AA3DD,gCA2DC"}
1
+ {"version":3,"file":"RouteEntry.js","sourceRoot":"","sources":["../src/RouteEntry.ts"],"names":[],"mappings":";;;AAEA,MAAa,UAAU;IAWnB,YAAY,MAAc,EAAE,IAAY,EAAE,OAAqB,EAAE,MAAe,EAAE,kBAAyB,EAAE;QALtG,eAAU,GAAU,EAAE,CAAC;QAEvB,cAAS,GAAa,EAAE,CAAC;QACzB,gBAAW,GAA2B,EAAE,CAAC;QAG5C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,eAAe,CAAC,CAAC;QAEvC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,KAAsC,EAAE,KAAc;QAC/D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,KAAM,CAAC;QACrC,CAAC;aAAM,CAAC;YACJ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;QAED,gDAAgD;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAE5B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,IAAI,CAAC,IAAY;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,EAAE,CAAC,IAAY;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACI,cAAc,CAAC,UAAuB;QACzC,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,IAAY;QAC5B,IAAI,SAAS,GAAa,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI;aACf,OAAO,CAAC,uCAAuC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;YAChE,MAAM,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC;YACzB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpB,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC;YACnD,OAAO,IAAI,SAAS,GAAG,CAAC;QAC5B,CAAC,CAAC;aACD,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAE3B,OAAO;YACH,KAAK,EAAE,IAAI,MAAM,CAAC,IAAI,OAAO,GAAG,CAAC;YACjC,SAAS;SACZ,CAAC;IACN,CAAC;CACJ;AAtFD,gCAsFC"}
@@ -1,6 +1,9 @@
1
1
  import { MatchedRoute } from './types';
2
2
  export declare class RouteMatcher {
3
+ private root;
4
+ private isBuilt;
5
+ private buildTree;
6
+ private insert;
3
7
  match(method: string, path: string): MatchedRoute | null;
4
- private normalizePath;
5
8
  }
6
9
  //# sourceMappingURL=RouteMatcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RouteMatcher.d.ts","sourceRoot":"","sources":["../src/RouteMatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvC,qBAAa,YAAY;IACd,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IA2B/D,OAAO,CAAC,aAAa;CAGxB"}
1
+ {"version":3,"file":"RouteMatcher.d.ts","sourceRoot":"","sources":["../src/RouteMatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAUvC,qBAAa,YAAY;IACrB,OAAO,CAAC,IAAI,CAA8B;IAC1C,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,MAAM;IAsBP,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;CA8ClE"}
@@ -2,31 +2,92 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RouteMatcher = void 0;
4
4
  const RouteRegistry_1 = require("./RouteRegistry");
5
+ class RadixNode {
6
+ constructor() {
7
+ this.children = new Map();
8
+ this.paramName = null;
9
+ this.paramNode = null;
10
+ this.routes = []; // Support multiple methods on same path
11
+ }
12
+ }
5
13
  class RouteMatcher {
6
- match(method, path) {
14
+ constructor() {
15
+ this.root = new RadixNode();
16
+ this.isBuilt = false;
17
+ }
18
+ buildTree() {
7
19
  const routes = RouteRegistry_1.RouteRegistry.getInstance().getRoutes();
8
- const normalizedMethod = method.toUpperCase();
9
- const normalizedPath = this.normalizePath(path);
20
+ this.root = new RadixNode(); // Reset root
10
21
  for (const route of routes) {
11
- if (route.method !== normalizedMethod) {
12
- continue;
22
+ this.insert(route);
23
+ }
24
+ this.isBuilt = true;
25
+ }
26
+ insert(route) {
27
+ let node = this.root;
28
+ const parts = route.path.split('/').filter(Boolean);
29
+ for (const part of parts) {
30
+ if (part.startsWith(':')) {
31
+ const paramName = part.slice(1);
32
+ if (!node.paramNode) {
33
+ node.paramNode = new RadixNode();
34
+ node.paramName = paramName;
35
+ }
36
+ node = node.paramNode;
13
37
  }
14
- const match = normalizedPath.match(route.regex);
15
- if (match) {
16
- const params = {};
17
- route.paramKeys.forEach((key, index) => {
18
- params[key] = match[index + 1];
19
- });
20
- return {
21
- route,
22
- params
23
- };
38
+ else {
39
+ if (!node.children.has(part)) {
40
+ node.children.set(part, new RadixNode());
41
+ }
42
+ node = node.children.get(part);
24
43
  }
25
44
  }
26
- return null;
45
+ node.routes.push(route);
27
46
  }
28
- normalizePath(path) {
29
- return path.replace(/\/+/g, '/') || '/';
47
+ match(method, path) {
48
+ if (!this.isBuilt)
49
+ this.buildTree();
50
+ let node = this.root;
51
+ const normalizedPath = path.split('?')[0];
52
+ const parts = normalizedPath.split('/').filter(Boolean);
53
+ const params = {};
54
+ const normalizedMethod = method.toUpperCase();
55
+ for (let i = 0; i < parts.length; i++) {
56
+ const part = parts[i];
57
+ const nextNode = node.children.get(part);
58
+ if (nextNode) {
59
+ node = nextNode;
60
+ }
61
+ else if (node.paramNode) {
62
+ if (node.paramName) {
63
+ params[node.paramName] = part;
64
+ }
65
+ node = node.paramNode;
66
+ }
67
+ else {
68
+ return null;
69
+ }
70
+ }
71
+ if (node.routes.length > 0) {
72
+ // Find a route that matches the method OR has method 'ANY'
73
+ const route = node.routes.find(r => r.method === normalizedMethod || r.method === 'ANY');
74
+ if (route) {
75
+ const hasParams = Object.keys(params).length > 0;
76
+ // If there are constraints, verify them
77
+ if (route.constraints && Object.keys(route.constraints).length > 0) {
78
+ for (const [key, pattern] of Object.entries(route.constraints)) {
79
+ if (params[key]) {
80
+ const regex = new RegExp(`^${pattern}$`);
81
+ if (!regex.test(params[key])) {
82
+ return null;
83
+ }
84
+ }
85
+ }
86
+ }
87
+ return { route, params, hasParams };
88
+ }
89
+ }
90
+ return null;
30
91
  }
31
92
  }
32
93
  exports.RouteMatcher = RouteMatcher;
@@ -1 +1 @@
1
- {"version":3,"file":"RouteMatcher.js","sourceRoot":"","sources":["../src/RouteMatcher.ts"],"names":[],"mappings":";;;AACA,mDAAgD;AAEhD,MAAa,YAAY;IACd,KAAK,CAAC,MAAc,EAAE,IAAY;QACrC,MAAM,MAAM,GAAG,6BAAa,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,CAAC;QACvD,MAAM,gBAAgB,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QAC9C,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAEhD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,KAAK,CAAC,MAAM,KAAK,gBAAgB,EAAE,CAAC;gBACpC,SAAS;YACb,CAAC;YAED,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAChD,IAAI,KAAK,EAAE,CAAC;gBACR,MAAM,MAAM,GAA2B,EAAE,CAAC;gBAC1C,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;oBACnC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBACnC,CAAC,CAAC,CAAC;gBAEH,OAAO;oBACH,KAAK;oBACL,MAAM;iBACT,CAAC;YACN,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,aAAa,CAAC,IAAY;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC;IAC5C,CAAC;CACJ;AA/BD,oCA+BC"}
1
+ {"version":3,"file":"RouteMatcher.js","sourceRoot":"","sources":["../src/RouteMatcher.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@ export declare class RouteRegistry {
16
16
  middleware?: any | any[];
17
17
  }, callback: () => void): void;
18
18
  getRoutes(): RouteEntry[];
19
+ getRouteByName(name: string): RouteEntry | undefined;
19
20
  clear(): void;
20
21
  private normalizePath;
21
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RouteRegistry.d.ts","sourceRoot":"","sources":["../src/RouteRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,qBAAa,aAAa;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB;IACvC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,eAAe,CAAe;IACtC,OAAO,CAAC,MAAM,CAA+B;IAE7C,OAAO;WAEO,WAAW,IAAI,aAAa;IAOnC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,IAAI;IAIvC,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;IAI7B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,UAAU;IAiBzE,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,CAAA;KAAE,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAkBlG,SAAS,IAAI,UAAU,EAAE;IAIzB,KAAK,IAAI,IAAI;IAMpB,OAAO,CAAC,aAAa;CAIxB"}
1
+ {"version":3,"file":"RouteRegistry.d.ts","sourceRoot":"","sources":["../src/RouteRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,qBAAa,aAAa;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB;IACvC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,eAAe,CAAe;IACtC,OAAO,CAAC,MAAM,CAA+B;IAE7C,OAAO;WAEO,WAAW,IAAI,aAAa;IAOnC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,IAAI;IAIvC,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;IAI7B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,UAAU;IAiBzE,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,CAAA;KAAE,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAkBlG,SAAS,IAAI,UAAU,EAAE;IAIzB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIpD,KAAK,IAAI,IAAI;IAMpB,OAAO,CAAC,aAAa;CAIxB"}
@@ -44,6 +44,9 @@ class RouteRegistry {
44
44
  getRoutes() {
45
45
  return this.routes;
46
46
  }
47
+ getRouteByName(name) {
48
+ return this.routes.find(r => r._name === name);
49
+ }
47
50
  clear() {
48
51
  this.routes = [];
49
52
  this.groupStack = [];
@@ -1 +1 @@
1
- {"version":3,"file":"RouteRegistry.js","sourceRoot":"","sources":["../src/RouteRegistry.ts"],"names":[],"mappings":";;;AACA,6CAA0C;AAE1C,MAAa,aAAa;IAOtB;QALQ,WAAM,GAAiB,EAAE,CAAC;QAC1B,eAAU,GAAa,EAAE,CAAC;QAC1B,oBAAe,GAAY,EAAE,CAAC;QAC9B,WAAM,GAAqB,IAAI,GAAG,EAAE,CAAC;IAErB,CAAC;IAElB,MAAM,CAAC,WAAW;QACrB,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC1B,aAAa,CAAC,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;QACjD,CAAC;QACD,OAAO,aAAa,CAAC,QAAQ,CAAC;IAClC,CAAC;IAEM,KAAK,CAAC,GAAW,EAAE,QAAa;QACnC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IAEM,SAAS;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAEM,QAAQ,CAAC,MAAc,EAAE,IAAY,EAAE,OAAqB;QAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;QACzD,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QAEpD,MAAM,KAAK,GAAG,IAAI,uBAAU,CACxB,MAAM,EACN,QAAQ,EACR,OAAO,EACP,MAAM,IAAI,SAAS,EACnB,eAAe,CAClB,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,KAAK,CAAC,OAA+D,EAAE,QAAoB;QAC9F,IAAI,MAAM,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;QAE1E,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC;QAC1B,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAElK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEtC,QAAQ,EAAE,CAAC;QAEX,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;IAC1B,CAAC;IAEM,SAAS;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAEM,KAAK;QACR,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;IAC9B,CAAC;IAEO,aAAa,CAAC,IAAY;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC7C,OAAO,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,UAAU,CAAC;IACtE,CAAC;CACJ;AAzED,sCAyEC"}
1
+ {"version":3,"file":"RouteRegistry.js","sourceRoot":"","sources":["../src/RouteRegistry.ts"],"names":[],"mappings":"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"}
package/dist/Router.d.ts CHANGED
@@ -4,11 +4,14 @@ export declare class Router {
4
4
  private matcher;
5
5
  private dispatcher;
6
6
  private cache;
7
+ private modelsSynced;
8
+ private isSynced;
7
9
  constructor(container?: Container);
8
10
  /**
9
11
  * Sync models from the static registry.
10
12
  */
11
13
  private syncModels;
14
+ sync(): void;
12
15
  /**
13
16
  * Set the container for the dispatcher.
14
17
  */
@@ -31,6 +34,10 @@ export declare class Router {
31
34
  * Match a request to a route.
32
35
  */
33
36
  match(method: string, path: string): MatchedRoute | null;
37
+ /**
38
+ * Generate a URL for a named route.
39
+ */
40
+ route(name: string, params?: Record<string, string | number>): string;
34
41
  /**
35
42
  * Clear the route cache.
36
43
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Router.d.ts","sourceRoot":"","sources":["../src/Router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGlD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGlD,qBAAa,MAAM;IACf,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,KAAK,CAA+C;gBAEhD,SAAS,CAAC,EAAE,SAAS;IAKjC;;OAEG;IACH,OAAO,CAAC,UAAU;IAOlB;;OAEG;IACI,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAK/C;;OAEG;IACI,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;IAK/D;;OAEG;IACI,kBAAkB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAKhE;;OAEG;IACI,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG;QAAE,UAAU,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;KAAE,GAAG,IAAI;IAKrH;;OAEG;IACI,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAa/D;;OAEG;IACI,UAAU,IAAI,IAAI;IAIzB;;;OAGG;IACU,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;CAU5E"}
1
+ {"version":3,"file":"Router.d.ts","sourceRoot":"","sources":["../src/Router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGlD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGlD,qBAAa,MAAM;IACf,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAS;gBAEb,SAAS,CAAC,EAAE,SAAS;IAKjC;;OAEG;IACH,OAAO,CAAC,UAAU;IASX,IAAI;IAOX;;OAEG;IACI,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAK/C;;OAEG;IACI,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;IAK/D;;OAEG;IACI,kBAAkB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAKhE;;OAEG;IACI,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG;QAAE,UAAU,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;KAAE,GAAG,IAAI;IAKrH;;OAEG;IACI,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAc/D;;OAEG;IACI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAM,GAAG,MAAM;IAkBhF;;OAEG;IACI,UAAU,IAAI,IAAI;IAIzB;;;OAGG;IACU,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;CAU5E"}
package/dist/Router.js CHANGED
@@ -7,6 +7,8 @@ const RouteRegistry_1 = require("./RouteRegistry");
7
7
  class Router {
8
8
  constructor(container) {
9
9
  this.cache = new Map();
10
+ this.modelsSynced = false;
11
+ this.isSynced = false;
10
12
  this.matcher = new RouteMatcher_1.RouteMatcher();
11
13
  this.dispatcher = new dispatcher_1.Dispatcher(container);
12
14
  }
@@ -14,10 +16,20 @@ class Router {
14
16
  * Sync models from the static registry.
15
17
  */
16
18
  syncModels() {
19
+ if (this.modelsSynced)
20
+ return;
17
21
  const models = RouteRegistry_1.RouteRegistry.getInstance().getModels();
18
22
  for (const [key, resolver] of models.entries()) {
19
23
  this.dispatcher.bind(key, resolver);
20
24
  }
25
+ this.modelsSynced = true;
26
+ }
27
+ sync() {
28
+ if (this.isSynced)
29
+ return;
30
+ this.syncModels();
31
+ this.dispatcher.precompile(RouteRegistry_1.RouteRegistry.getInstance().getRoutes());
32
+ this.isSynced = true;
21
33
  }
22
34
  /**
23
35
  * Set the container for the dispatcher.
@@ -51,6 +63,8 @@ class Router {
51
63
  * Match a request to a route.
52
64
  */
53
65
  match(method, path) {
66
+ if (!this.isSynced)
67
+ this.sync();
54
68
  const cacheKey = `${method.toUpperCase()}:${path}`;
55
69
  if (this.cache.has(cacheKey)) {
56
70
  return this.cache.get(cacheKey);
@@ -59,6 +73,22 @@ class Router {
59
73
  this.cache.set(cacheKey, matched);
60
74
  return matched;
61
75
  }
76
+ /**
77
+ * Generate a URL for a named route.
78
+ */
79
+ route(name, params = {}) {
80
+ const route = RouteRegistry_1.RouteRegistry.getInstance().getRouteByName(name);
81
+ if (!route) {
82
+ throw new Error(`Route [${name}] not found.`);
83
+ }
84
+ let path = route.path;
85
+ for (const [key, value] of Object.entries(params)) {
86
+ path = path.replace(`:${key}`, String(value)).replace(`{${key}}`, String(value));
87
+ }
88
+ // Return without checking for lingering parameters (that could be optional in regex)
89
+ // just a basic replacement implementation.
90
+ return path;
91
+ }
62
92
  /**
63
93
  * Clear the route cache.
64
94
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Router.js","sourceRoot":"","sources":["../src/Router.ts"],"names":[],"mappings":";;;AACA,iDAA8C;AAC9C,oDAAiD;AAEjD,mDAAgD;AAEhD,MAAa,MAAM;IAKf,YAAY,SAAqB;QAFzB,UAAK,GAAqC,IAAI,GAAG,EAAE,CAAC;QAGxD,IAAI,CAAC,OAAO,GAAG,IAAI,2BAAY,EAAE,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,IAAI,uBAAU,CAAC,SAAS,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACK,UAAU;QACd,MAAM,MAAM,GAAG,6BAAa,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,CAAC;QACvD,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACxC,CAAC;IACL,CAAC;IAED;;OAEG;IACI,YAAY,CAAC,SAAoB;QACpC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,mBAAmB,CAAC,MAA6B;QACpD,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,kBAAkB,CAAC,UAA+B;QACrD,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,GAAW,EAAE,QAAoF;QAC1G,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,MAAc,EAAE,IAAY;QACrC,MAAM,QAAQ,GAAG,GAAG,MAAM,CAAC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC;QAEnD,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;QACrC,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAElC,OAAO,OAAO,CAAC;IACnB,CAAC;IAED;;OAEG;IACI,UAAU;QACb,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,QAAQ,CAAC,OAAgB,EAAE,QAAkB;QACtD,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAE7D,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACtE,CAAC;CACJ;AAzFD,wBAyFC"}
1
+ {"version":3,"file":"Router.js","sourceRoot":"","sources":["../src/Router.ts"],"names":[],"mappings":"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"}
@@ -70,7 +70,7 @@ const index_1 = require("../index");
70
70
  (0, node_test_1.test)('Router supports fluent chaining', async (t) => {
71
71
  index_1.RouteRegistry.getInstance().clear();
72
72
  const route = index_1.Route.get('/fluent', () => 'ok')
73
- .as('fluent.route')
73
+ .name('fluent.route')
74
74
  .withMiddleware('some-middleware');
75
75
  node_assert_1.default.strictEqual(route.name, 'fluent.route');
76
76
  node_assert_1.default.strictEqual(route.middleware[0], 'some-middleware');
@@ -1 +1 @@
1
- {"version":3,"file":"Router.test.js","sourceRoot":"","sources":["../../src/tests/Router.test.ts"],"names":[],"mappings":";;;;;AAAA,yCAAiC;AACjC,8DAAiC;AACjC,oCAAwD;AAGxD,IAAA,gBAAI,EAAC,sCAAsC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACrD,qBAAa,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;IAEpC,aAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;IAEnC,MAAM,MAAM,GAAG,IAAI,cAAM,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAE9C,qBAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IACnB,qBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjD,qBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACpD,CAAC,CAAC,CAAC;AAEH,IAAA,gBAAI,EAAC,wCAAwC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACvD,qBAAa,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;IAEpC,aAAK,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE;QACrB,aAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,cAAM,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAElD,qBAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IACnB,qBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AACzD,CAAC,CAAC,CAAC;AAEH,IAAA,gBAAI,EAAC,+BAA+B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC9C,qBAAa,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;IAEpC,aAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE;QACvB,aAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE;YACvB,aAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,cAAM,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;IAEzD,qBAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IACnB,qBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;AAChE,CAAC,CAAC,CAAC;AAEH,IAAA,gBAAI,EAAC,qCAAqC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACpD,qBAAa,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;IAEpC,aAAK,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,OAAgB,EAAE,EAAU,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IAE9D,MAAM,MAAM,GAAG,IAAI,cAAM,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAElD,qBAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IACnB,qBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAE7C,eAAe;IACf,MAAM,WAAW,GAAG;QAChB,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK;QACnB,IAAI,EAAE,GAAG,EAAE,CAAC,YAAY;KACL,CAAC;IAExB,MAAM,YAAY,GAAG,EAAyB,CAAC;IAE/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAChE,qBAAM,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACtC,CAAC,CAAC,CAAC;AAEH,IAAA,gBAAI,EAAC,kCAAkC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACjD,qBAAa,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;IAEpC,MAAM,WAAW,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9B,MAAM,WAAW,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;IAE9B,aAAK,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,GAAG,EAAE;QAC5D,aAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,cAAM,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAElD,qBAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IACnB,qBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACvD,qBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IAC7D,qBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;AACjE,CAAC,CAAC,CAAC;AAEH,IAAA,gBAAI,EAAC,iCAAiC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAChD,qBAAa,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;IAEpC,MAAM,KAAK,GAAG,aAAK,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;SACzC,EAAE,CAAC,cAAc,CAAC;SAClB,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAEvC,qBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC/C,qBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAC/D,CAAC,CAAC,CAAC;AAEH,IAAA,gBAAI,EAAC,4BAA4B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC3C,qBAAa,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;IAEpC,aAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;IAEnC,MAAM,MAAM,GAAG,IAAI,cAAM,EAAE,CAAC;IAC5B,eAAe;IACf,MAAM,WAAW,GAAG;QAChB,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK;QACnB,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ;KACD,CAAC;IAExB,MAAM,YAAY,GAAG,EAAyB,CAAC;IAE/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAChE,qBAAM,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,IAAA,gBAAI,EAAC,iCAAiC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAChD,qBAAa,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;IAEpC,aAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;IAEnC,MAAM,MAAM,GAAG,IAAI,cAAM,EAAE,CAAC;IAC5B,MAAM,WAAW,GAAG;QAChB,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK;QACnB,IAAI,EAAE,GAAG,EAAE,CAAC,YAAY;KACL,CAAC;IAExB,MAAM,YAAY,GAAG,EAAyB,CAAC;IAE/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAChE,qBAAM,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,IAAA,gBAAI,EAAC,6BAA6B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC5C,qBAAa,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;IACpC,aAAK,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAErC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,MAAM,GAAG,IAAI,cAAM,EAAE,CAAC;IAE5B,mCAAmC;IACnC,MAAM,OAAO,GAAI,MAAc,CAAC,OAAO,CAAC;IACxC,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC;IACpC,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,IAAW,EAAE,EAAE;QAC/B,UAAU,EAAE,CAAC;QACb,OAAO,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IACnC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAElD,qBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAClB,qBAAM,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,EAAE,mDAAmD,CAAC,CAAC;AAC3F,CAAC,CAAC,CAAC;AAEH,IAAA,gBAAI,EAAC,wBAAwB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACvC,qBAAa,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;IACpC,aAAK,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAErC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,MAAM,GAAG,IAAI,cAAM,EAAE,CAAC;IAE5B,MAAM,OAAO,GAAI,MAAc,CAAC,OAAO,CAAC;IACxC,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC;IACpC,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,IAAW,EAAE,EAAE;QAC/B,UAAU,EAAE,CAAC;QACb,OAAO,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IACnC,MAAM,CAAC,UAAU,EAAE,CAAC;IACpB,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAEnC,qBAAM,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,EAAE,0DAA0D,CAAC,CAAC;AAClG,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"Router.test.js","sourceRoot":"","sources":["../../src/tests/Router.test.ts"],"names":[],"mappings":";;;;;AAAA,yCAAiC;AACjC,8DAAiC;AACjC,oCAAwD;AAGxD,IAAA,gBAAI,EAAC,sCAAsC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACrD,qBAAa,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;IAEpC,aAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;IAEnC,MAAM,MAAM,GAAG,IAAI,cAAM,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAE9C,qBAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IACnB,qBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjD,qBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACpD,CAAC,CAAC,CAAC;AAEH,IAAA,gBAAI,EAAC,wCAAwC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACvD,qBAAa,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;IAEpC,aAAK,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE;QACrB,aAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,cAAM,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAElD,qBAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IACnB,qBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AACzD,CAAC,CAAC,CAAC;AAEH,IAAA,gBAAI,EAAC,+BAA+B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC9C,qBAAa,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;IAEpC,aAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE;QACvB,aAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE;YACvB,aAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,cAAM,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;IAEzD,qBAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IACnB,qBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;AAChE,CAAC,CAAC,CAAC;AAEH,IAAA,gBAAI,EAAC,qCAAqC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACpD,qBAAa,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;IAEpC,aAAK,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,OAAgB,EAAE,EAAU,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IAE9D,MAAM,MAAM,GAAG,IAAI,cAAM,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAElD,qBAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IACnB,qBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAE7C,eAAe;IACf,MAAM,WAAW,GAAG;QAChB,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK;QACnB,IAAI,EAAE,GAAG,EAAE,CAAC,YAAY;KACL,CAAC;IAExB,MAAM,YAAY,GAAG,EAAyB,CAAC;IAE/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAChE,qBAAM,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACtC,CAAC,CAAC,CAAC;AAEH,IAAA,gBAAI,EAAC,kCAAkC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACjD,qBAAa,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;IAEpC,MAAM,WAAW,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9B,MAAM,WAAW,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;IAE9B,aAAK,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,GAAG,EAAE;QAC5D,aAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,cAAM,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAElD,qBAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IACnB,qBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACvD,qBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IAC7D,qBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;AACjE,CAAC,CAAC,CAAC;AAEH,IAAA,gBAAI,EAAC,iCAAiC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAChD,qBAAa,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;IAEpC,MAAM,KAAK,GAAG,aAAK,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;SACzC,IAAI,CAAC,cAAc,CAAC;SACpB,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAEvC,qBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC/C,qBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAC/D,CAAC,CAAC,CAAC;AAEH,IAAA,gBAAI,EAAC,4BAA4B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC3C,qBAAa,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;IAEpC,aAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;IAEnC,MAAM,MAAM,GAAG,IAAI,cAAM,EAAE,CAAC;IAC5B,eAAe;IACf,MAAM,WAAW,GAAG;QAChB,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK;QACnB,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ;KACD,CAAC;IAExB,MAAM,YAAY,GAAG,EAAyB,CAAC;IAE/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAChE,qBAAM,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,IAAA,gBAAI,EAAC,iCAAiC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAChD,qBAAa,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;IAEpC,aAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;IAEnC,MAAM,MAAM,GAAG,IAAI,cAAM,EAAE,CAAC;IAC5B,MAAM,WAAW,GAAG;QAChB,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK;QACnB,IAAI,EAAE,GAAG,EAAE,CAAC,YAAY;KACL,CAAC;IAExB,MAAM,YAAY,GAAG,EAAyB,CAAC;IAE/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAChE,qBAAM,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,IAAA,gBAAI,EAAC,6BAA6B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC5C,qBAAa,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;IACpC,aAAK,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAErC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,MAAM,GAAG,IAAI,cAAM,EAAE,CAAC;IAE5B,mCAAmC;IACnC,MAAM,OAAO,GAAI,MAAc,CAAC,OAAO,CAAC;IACxC,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC;IACpC,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,IAAW,EAAE,EAAE;QAC/B,UAAU,EAAE,CAAC;QACb,OAAO,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IACnC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAElD,qBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAClB,qBAAM,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,EAAE,mDAAmD,CAAC,CAAC;AAC3F,CAAC,CAAC,CAAC;AAEH,IAAA,gBAAI,EAAC,wBAAwB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACvC,qBAAa,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;IACpC,aAAK,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAErC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,MAAM,GAAG,IAAI,cAAM,EAAE,CAAC;IAE5B,MAAM,OAAO,GAAI,MAAc,CAAC,OAAO,CAAC;IACxC,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC;IACpC,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,IAAW,EAAE,EAAE;QAC/B,UAAU,EAAE,CAAC;QACb,OAAO,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IACnC,MAAM,CAAC,UAAU,EAAE,CAAC;IACpB,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAEnC,qBAAM,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,EAAE,0DAA0D,CAAC,CAAC;AAClG,CAAC,CAAC,CAAC"}
package/dist/types.d.ts CHANGED
@@ -3,15 +3,17 @@ export interface RouteDefinition {
3
3
  method: string;
4
4
  path: string;
5
5
  handler: RouteHandler;
6
- name?: string;
6
+ _name?: string;
7
7
  prefix?: string;
8
8
  middleware: any[];
9
9
  regex?: RegExp;
10
10
  paramKeys?: string[];
11
+ constraints?: Record<string, string>;
11
12
  }
12
13
  export interface MatchedRoute {
13
14
  route: RouteDefinition;
14
15
  params: Record<string, string>;
16
+ hasParams: boolean;
15
17
  }
16
18
  export interface Container {
17
19
  make<T>(token: any): T;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,GAAG,CAAC;AAE/B,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,GAAG,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IACzB,KAAK,EAAE,eAAe,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,SAAS;IACtB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC;CAC1B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,GAAG,CAAC;AAE/B,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,GAAG,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,YAAY;IACzB,KAAK,EAAE,eAAe,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,SAAS,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACtB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC;CAC1B"}
package/package.json CHANGED
@@ -1,47 +1,49 @@
1
1
  {
2
- "name": "@arikajs/router",
3
- "version": "0.0.4",
4
- "description": "Routing and request-dispatching layer of the ArikaJS framework.",
5
- "license": "MIT",
6
- "main": "dist/index.js",
7
- "types": "dist/index.d.ts",
8
- "scripts": {
9
- "build": "tsc -p tsconfig.json",
10
- "clean": "rm -rf dist",
11
- "prepare": "echo skip",
12
- "lint": "eslint src --ext .ts",
13
- "test": "npx tsx --test tests/**/*.test.ts",
14
- "test:watch": "npx tsx --test --watch tests/**/*.test.ts"
15
- },
16
- "files": [
17
- "dist"
18
- ],
19
- "keywords": [
20
- "arika",
21
- "arika-js",
22
- "framework",
23
- "router",
24
- "routing",
25
- "dispatcher"
26
- ],
27
- "engines": {
28
- "node": ">=20.0.0"
29
- },
30
- "repository": {
31
- "type": "git",
32
- "url": "git+https://github.com/arikajs/router.git"
33
- },
34
- "bugs": {
35
- "url": "https://github.com/arikajs/router/issues"
36
- },
37
- "homepage": "https://github.com/arikajs/router#readme",
38
- "dependencies": {
39
- "@arikajs/http": "^0.0.4",
40
- "@arikajs/dispatcher": "^0.0.4"
41
- },
42
- "devDependencies": {
43
- "@types/node": "^20.11.24",
44
- "typescript": "^5.3.3"
45
- },
46
- "author": "Prakash Tank"
2
+ "name": "@arikajs/router",
3
+ "version": "0.0.5",
4
+ "description": "Routing and request-dispatching layer of the ArikaJS framework.",
5
+ "license": "MIT",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "scripts": {
9
+ "build": "tsc -p tsconfig.json",
10
+ "clean": "rm -rf dist",
11
+ "prepare": "echo skip",
12
+ "lint": "eslint src --ext .ts",
13
+ "test": "npx tsx --test tests/**/*.test.ts",
14
+ "test:watch": "npx tsx --test --watch tests/**/*.test.ts",
15
+ "dev": "tsc -p tsconfig.json --watch"
16
+ },
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "keywords": [
21
+ "arika",
22
+ "arika-js",
23
+ "framework",
24
+ "router",
25
+ "routing",
26
+ "dispatcher"
27
+ ],
28
+ "engines": {
29
+ "node": ">=20.0.0"
30
+ },
31
+ "repository": {
32
+ "type": "git",
33
+ "url": "git+https://github.com/ArikaJs/arikajs.git",
34
+ "directory": "packages/router"
35
+ },
36
+ "bugs": {
37
+ "url": "https://github.com/ArikaJs/arikajs/issues"
38
+ },
39
+ "homepage": "https://github.com/ArikaJs/arikajs/tree/main/packages/router#readme",
40
+ "dependencies": {
41
+ "@arikajs/http": "*",
42
+ "@arikajs/dispatcher": "*"
43
+ },
44
+ "devDependencies": {
45
+ "@types/node": "^20.11.24",
46
+ "typescript": "^5.3.3"
47
+ },
48
+ "author": "Prakash Tank"
47
49
  }