@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 +66 -31
- package/dist/Route.d.ts +13 -0
- package/dist/Route.d.ts.map +1 -1
- package/dist/Route.js +52 -1
- package/dist/Route.js.map +1 -1
- package/dist/RouteEntry.d.ts +10 -1
- package/dist/RouteEntry.d.ts.map +1 -1
- package/dist/RouteEntry.js +29 -5
- package/dist/RouteEntry.js.map +1 -1
- package/dist/RouteMatcher.d.ts +4 -1
- package/dist/RouteMatcher.d.ts.map +1 -1
- package/dist/RouteMatcher.js +79 -18
- package/dist/RouteMatcher.js.map +1 -1
- package/dist/RouteRegistry.d.ts +1 -0
- package/dist/RouteRegistry.d.ts.map +1 -1
- package/dist/RouteRegistry.js +3 -0
- package/dist/RouteRegistry.js.map +1 -1
- package/dist/Router.d.ts +7 -0
- package/dist/Router.d.ts.map +1 -1
- package/dist/Router.js +30 -0
- package/dist/Router.js.map +1 -1
- package/dist/tests/Router.test.js +1 -1
- package/dist/tests/Router.test.js.map +1 -1
- package/dist/types.d.ts +3 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +47 -45
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
|
-
- **
|
|
44
|
+
- **Advanced Matching**
|
|
45
|
+
- Parameter regular expression constraints (`where()`)
|
|
41
46
|
- Method + path matching
|
|
42
|
-
-
|
|
43
|
-
|
|
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 &
|
|
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.
|
|
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
|
-
###
|
|
122
|
+
### 5. Route Grouping (Fluent)
|
|
101
123
|
|
|
102
124
|
```ts
|
|
103
|
-
Route.
|
|
104
|
-
|
|
105
|
-
|
|
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
|
-
|
|
143
|
+
---
|
|
113
144
|
|
|
114
|
-
|
|
145
|
+
## 🏗 Architecture
|
|
115
146
|
|
|
116
147
|
```text
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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
|
package/dist/Route.d.ts.map
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"Route.js","sourceRoot":"","sources":["../src/Route.ts"],"names":[],"mappings":"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"}
|
package/dist/RouteEntry.d.ts
CHANGED
|
@@ -3,15 +3,24 @@ export declare class RouteEntry implements RouteDefinition {
|
|
|
3
3
|
method: string;
|
|
4
4
|
path: string;
|
|
5
5
|
handler: RouteHandler;
|
|
6
|
-
|
|
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.
|
package/dist/RouteEntry.d.ts.map
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/RouteEntry.js
CHANGED
|
@@ -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
|
-
|
|
21
|
-
this.
|
|
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
|
-
|
|
62
|
+
let paramKeys = [];
|
|
41
63
|
const pattern = path
|
|
42
64
|
.replace(/:([a-zA-Z0-9_]+)|\{([a-zA-Z0-9_]+)\}/g, (_, key1, key2) => {
|
|
43
|
-
|
|
44
|
-
|
|
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 {
|
package/dist/RouteEntry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouteEntry.js","sourceRoot":"","sources":["../src/RouteEntry.ts"],"names":[],"mappings":";;;AAEA,MAAa,UAAU;
|
|
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"}
|
package/dist/RouteMatcher.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/RouteMatcher.js
CHANGED
|
@@ -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
|
-
|
|
14
|
+
constructor() {
|
|
15
|
+
this.root = new RadixNode();
|
|
16
|
+
this.isBuilt = false;
|
|
17
|
+
}
|
|
18
|
+
buildTree() {
|
|
7
19
|
const routes = RouteRegistry_1.RouteRegistry.getInstance().getRoutes();
|
|
8
|
-
|
|
9
|
-
const normalizedPath = this.normalizePath(path);
|
|
20
|
+
this.root = new RadixNode(); // Reset root
|
|
10
21
|
for (const route of routes) {
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
|
|
45
|
+
node.routes.push(route);
|
|
27
46
|
}
|
|
28
|
-
|
|
29
|
-
|
|
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;
|
package/dist/RouteMatcher.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouteMatcher.js","sourceRoot":"","sources":["../src/RouteMatcher.ts"],"names":[],"mappings":";;;AACA,mDAAgD;AAEhD,MAAa,YAAY;
|
|
1
|
+
{"version":3,"file":"RouteMatcher.js","sourceRoot":"","sources":["../src/RouteMatcher.ts"],"names":[],"mappings":"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"}
|
package/dist/RouteRegistry.d.ts
CHANGED
|
@@ -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"}
|
package/dist/RouteRegistry.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouteRegistry.js","sourceRoot":"","sources":["../src/RouteRegistry.ts"],"names":[],"mappings":"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
|
|
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
|
*/
|
package/dist/Router.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
*/
|
package/dist/Router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Router.js","sourceRoot":"","sources":["../src/Router.ts"],"names":[],"mappings":";;;AACA,iDAA8C;AAC9C,oDAAiD;AAEjD,mDAAgD;AAEhD,MAAa,MAAM;
|
|
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
|
-
.
|
|
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":"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
|
|
1
|
+
{"version":3,"file":"Router.test.js","sourceRoot":"","sources":["../../src/tests/Router.test.ts"],"names":[],"mappings":"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"}
|
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
|
-
|
|
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;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
"
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
"
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
"
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
"
|
|
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
|
}
|