@mojojs/core 0.18.0 → 0.19.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/app.d.ts +117 -4
- package/lib/app.js +105 -8
- package/lib/app.js.map +1 -1
- package/lib/body/params.d.ts +6 -0
- package/lib/body/params.js +6 -0
- package/lib/body/params.js.map +1 -1
- package/lib/body.d.ts +48 -0
- package/lib/body.js +45 -0
- package/lib/body.js.map +1 -1
- package/lib/cli/create-full-app.d.ts +3 -0
- package/lib/cli/create-full-app.js +3 -0
- package/lib/cli/create-full-app.js.map +1 -1
- package/lib/cli/create-lite-app.d.ts +3 -0
- package/lib/cli/create-lite-app.js +3 -0
- package/lib/cli/create-lite-app.js.map +1 -1
- package/lib/cli/eval.d.ts +3 -0
- package/lib/cli/eval.js +3 -0
- package/lib/cli/eval.js.map +1 -1
- package/lib/cli/get.d.ts +3 -0
- package/lib/cli/get.js +3 -0
- package/lib/cli/get.js.map +1 -1
- package/lib/cli/repl.d.ts +3 -0
- package/lib/cli/repl.js +3 -0
- package/lib/cli/repl.js.map +1 -1
- package/lib/cli/routes.d.ts +3 -0
- package/lib/cli/routes.js +3 -0
- package/lib/cli/routes.js.map +1 -1
- package/lib/cli/server.d.ts +3 -0
- package/lib/cli/server.js +3 -0
- package/lib/cli/server.js.map +1 -1
- package/lib/cli/version.d.ts +3 -0
- package/lib/cli/version.js +3 -0
- package/lib/cli/version.js.map +1 -1
- package/lib/cli.d.ts +15 -0
- package/lib/cli.js +15 -0
- package/lib/cli.js.map +1 -1
- package/lib/context.d.ts +99 -0
- package/lib/context.js +84 -0
- package/lib/context.js.map +1 -1
- package/lib/core.d.ts +3 -0
- package/lib/core.js +3 -0
- package/lib/core.js.map +1 -1
- package/lib/hooks.d.ts +9 -0
- package/lib/hooks.js +9 -0
- package/lib/hooks.js.map +1 -1
- package/lib/logger.d.ts +69 -0
- package/lib/logger.js +63 -0
- package/lib/logger.js.map +1 -1
- package/lib/mime.d.ts +14 -0
- package/lib/mime.js +39 -9
- package/lib/mime.js.map +1 -1
- package/lib/mock/request.d.ts +3 -0
- package/lib/mock/request.js +3 -0
- package/lib/mock/request.js.map +1 -1
- package/lib/mock/response.d.ts +3 -0
- package/lib/mock/response.js +3 -0
- package/lib/mock/response.js.map +1 -1
- package/lib/plugins/default-helpers.d.ts +5 -0
- package/lib/plugins/default-helpers.js +18 -0
- package/lib/plugins/default-helpers.js.map +1 -0
- package/lib/plugins/exception-helpers.d.ts +3 -0
- package/lib/plugins/exception-helpers.js +3 -0
- package/lib/plugins/exception-helpers.js.map +1 -1
- package/lib/plugins/header-conditions.d.ts +3 -0
- package/lib/plugins/header-conditions.js +3 -0
- package/lib/plugins/header-conditions.js.map +1 -1
- package/lib/plugins/json-config.d.ts +3 -0
- package/lib/plugins/json-config.js +3 -0
- package/lib/plugins/json-config.js.map +1 -1
- package/lib/plugins/mt-engine.d.ts +3 -0
- package/lib/plugins/mt-engine.js +4 -1
- package/lib/plugins/mt-engine.js.map +1 -1
- package/lib/plugins/view-helpers.d.ts +3 -0
- package/lib/plugins/view-helpers.js +3 -12
- package/lib/plugins/view-helpers.js.map +1 -1
- package/lib/plugins/yaml-config.d.ts +3 -0
- package/lib/plugins/yaml-config.js +3 -0
- package/lib/plugins/yaml-config.js.map +1 -1
- package/lib/renderer.d.ts +38 -0
- package/lib/renderer.js +38 -0
- package/lib/renderer.js.map +1 -1
- package/lib/router/pattern.d.ts +33 -0
- package/lib/router/pattern.js +24 -0
- package/lib/router/pattern.js.map +1 -1
- package/lib/router/plan.d.ts +15 -0
- package/lib/router/plan.js +15 -0
- package/lib/router/plan.js.map +1 -1
- package/lib/router/route.d.ts +83 -0
- package/lib/router/route.js +83 -0
- package/lib/router/route.js.map +1 -1
- package/lib/router.d.ts +39 -3
- package/lib/router.js +47 -10
- package/lib/router.js.map +1 -1
- package/lib/server/cookie.d.ts +6 -0
- package/lib/server/cookie.js +6 -0
- package/lib/server/cookie.js.map +1 -1
- package/lib/server.d.ts +21 -0
- package/lib/server.js +15 -1
- package/lib/server.js.map +1 -1
- package/lib/session.d.ts +35 -0
- package/lib/session.js +35 -0
- package/lib/session.js.map +1 -1
- package/lib/static.d.ts +22 -0
- package/lib/static.js +22 -0
- package/lib/static.js.map +1 -1
- package/lib/user-agent/cookie-jar.d.ts +12 -0
- package/lib/user-agent/cookie-jar.js +12 -0
- package/lib/user-agent/cookie-jar.js.map +1 -1
- package/lib/user-agent/mock.d.ts +15 -0
- package/lib/user-agent/mock.js +15 -0
- package/lib/user-agent/mock.js.map +1 -1
- package/lib/user-agent/response.d.ts +27 -0
- package/lib/user-agent/response.js +27 -0
- package/lib/user-agent/response.js.map +1 -1
- package/lib/user-agent/test.d.ts +115 -2
- package/lib/user-agent/test.js +123 -10
- package/lib/user-agent/test.js.map +1 -1
- package/lib/user-agent/transport/http.d.ts +12 -0
- package/lib/user-agent/transport/http.js +12 -0
- package/lib/user-agent/transport/http.js.map +1 -1
- package/lib/user-agent/transport/https.d.ts +3 -0
- package/lib/user-agent/transport/https.js +3 -0
- package/lib/user-agent/transport/https.js.map +1 -1
- package/lib/user-agent/transport/ws.d.ts +6 -0
- package/lib/user-agent/transport/ws.js +6 -0
- package/lib/user-agent/transport/ws.js.map +1 -1
- package/lib/util.d.ts +31 -1
- package/lib/util.js +30 -0
- package/lib/util.js.map +1 -1
- package/lib/validator/result.d.ts +9 -0
- package/lib/validator/result.js +3 -0
- package/lib/validator/result.js.map +1 -1
- package/lib/validator.d.ts +9 -0
- package/lib/validator.js +9 -0
- package/lib/validator.js.map +1 -1
- package/lib/websocket.d.ts +18 -0
- package/lib/websocket.js +12 -0
- package/lib/websocket.js.map +1 -1
- package/package.json +3 -3
package/lib/router/route.js
CHANGED
|
@@ -1,23 +1,56 @@
|
|
|
1
1
|
import { Pattern } from './pattern.js';
|
|
2
|
+
/**
|
|
3
|
+
* Route class.
|
|
4
|
+
*/
|
|
2
5
|
export class Route {
|
|
3
6
|
constructor() {
|
|
7
|
+
/**
|
|
8
|
+
* The children of this route, used for nesting routes.
|
|
9
|
+
*/
|
|
4
10
|
this.children = [];
|
|
11
|
+
/**
|
|
12
|
+
* Custom route name, if defined.
|
|
13
|
+
*/
|
|
5
14
|
this.customName = undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Default route name.
|
|
17
|
+
*/
|
|
6
18
|
this.defaultName = undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Allow `under` semantics for this route.
|
|
21
|
+
*/
|
|
7
22
|
this.underRoute = false;
|
|
23
|
+
/**
|
|
24
|
+
* Restrict HTTP methods this route is allowed to handle, defaults to no restrictions.
|
|
25
|
+
*/
|
|
8
26
|
this.methods = [];
|
|
27
|
+
/**
|
|
28
|
+
* Pattern for this route.
|
|
29
|
+
*/
|
|
9
30
|
this.pattern = new Pattern();
|
|
31
|
+
/**
|
|
32
|
+
* Activate conditions for this route.
|
|
33
|
+
*/
|
|
10
34
|
this.requirements = [];
|
|
35
|
+
/**
|
|
36
|
+
* Activate `websocket` semantics for this route.
|
|
37
|
+
*/
|
|
11
38
|
this.websocketRoute = false;
|
|
12
39
|
this._parent = undefined;
|
|
13
40
|
this._root = undefined;
|
|
14
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Add a child to this route.
|
|
44
|
+
*/
|
|
15
45
|
addChild(child) {
|
|
16
46
|
this.children.push(child);
|
|
17
47
|
child.parent = this;
|
|
18
48
|
child.root = this.root;
|
|
19
49
|
return child;
|
|
20
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Generate route matching any of the listed HTTP request methods or all.
|
|
53
|
+
*/
|
|
21
54
|
any(...args) {
|
|
22
55
|
const child = new Route();
|
|
23
56
|
const childPattern = child.pattern;
|
|
@@ -39,42 +72,76 @@ export class Route {
|
|
|
39
72
|
childPattern.types = this.root?.types ?? {};
|
|
40
73
|
return this.addChild(child);
|
|
41
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* Generate route matching only `DELETE` requests.
|
|
77
|
+
*/
|
|
42
78
|
delete(...args) {
|
|
43
79
|
return this.any(['DELETE'], ...args);
|
|
44
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Generate route matching only `GET` requests.
|
|
83
|
+
*/
|
|
45
84
|
get(...args) {
|
|
46
85
|
return this.any(['GET'], ...args);
|
|
47
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* Check if this route has a WebSocket ancestor and cache the result for future checks.
|
|
89
|
+
*/
|
|
48
90
|
hasWebSocket() {
|
|
49
91
|
return this._branch()
|
|
50
92
|
.map(route => route.websocketRoute)
|
|
51
93
|
.includes(true);
|
|
52
94
|
}
|
|
95
|
+
/**
|
|
96
|
+
* Check if this route qualifies as an endpoint.
|
|
97
|
+
*/
|
|
53
98
|
isEndpoint() {
|
|
54
99
|
return this.children.length === 0;
|
|
55
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* The name of this route, defaults to an automatically generated name based on the route pattern. Note that the name
|
|
103
|
+
* `current` is reserved for referring to the current route.
|
|
104
|
+
*/
|
|
56
105
|
name(name) {
|
|
57
106
|
this.customName = name;
|
|
58
107
|
return this;
|
|
59
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* Generate route matching only `OPTIONS` requests.
|
|
111
|
+
*/
|
|
60
112
|
options(...args) {
|
|
61
113
|
return this.any(['OPTIONS'], ...args);
|
|
62
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* The parent of this route.
|
|
117
|
+
*/
|
|
63
118
|
get parent() {
|
|
64
119
|
return this._parent?.deref();
|
|
65
120
|
}
|
|
66
121
|
set parent(parent) {
|
|
67
122
|
this._parent = parent === undefined ? undefined : new WeakRef(parent);
|
|
68
123
|
}
|
|
124
|
+
/**
|
|
125
|
+
* Generate route matching only `PATCH` requests.
|
|
126
|
+
*/
|
|
69
127
|
patch(...args) {
|
|
70
128
|
return this.any(['PATCH'], ...args);
|
|
71
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
* Generate route matching only `POST` requests.
|
|
132
|
+
*/
|
|
72
133
|
post(...args) {
|
|
73
134
|
return this.any(['POST'], ...args);
|
|
74
135
|
}
|
|
136
|
+
/**
|
|
137
|
+
* Generate route matching only `PUT` requests.
|
|
138
|
+
*/
|
|
75
139
|
put(...args) {
|
|
76
140
|
return this.any(['PUT'], ...args);
|
|
77
141
|
}
|
|
142
|
+
/**
|
|
143
|
+
* Render route with parameters into a path.
|
|
144
|
+
*/
|
|
78
145
|
render(values = {}) {
|
|
79
146
|
const parts = [];
|
|
80
147
|
const branch = this._branch();
|
|
@@ -84,6 +151,10 @@ export class Route {
|
|
|
84
151
|
}
|
|
85
152
|
return parts.reverse().join('');
|
|
86
153
|
}
|
|
154
|
+
/**
|
|
155
|
+
* Activate conditions for this route. Note that this automatically disables the routing cache, since conditions are
|
|
156
|
+
* too complex for caching.
|
|
157
|
+
*/
|
|
87
158
|
requires(condition, requirement) {
|
|
88
159
|
const root = this.root;
|
|
89
160
|
if (root === undefined)
|
|
@@ -94,12 +165,18 @@ export class Route {
|
|
|
94
165
|
root.cache = null;
|
|
95
166
|
return this;
|
|
96
167
|
}
|
|
168
|
+
/**
|
|
169
|
+
* Return the `Router` object this route is a descendant of.
|
|
170
|
+
*/
|
|
97
171
|
get root() {
|
|
98
172
|
return this._root?.deref();
|
|
99
173
|
}
|
|
100
174
|
set root(root) {
|
|
101
175
|
this._root = root === undefined ? undefined : new WeakRef(root);
|
|
102
176
|
}
|
|
177
|
+
/**
|
|
178
|
+
* Set default parameters for this route.
|
|
179
|
+
*/
|
|
103
180
|
to(...targets) {
|
|
104
181
|
const defaults = this.pattern.defaults;
|
|
105
182
|
for (const target of targets) {
|
|
@@ -119,11 +196,17 @@ export class Route {
|
|
|
119
196
|
}
|
|
120
197
|
return this;
|
|
121
198
|
}
|
|
199
|
+
/**
|
|
200
|
+
* Generate route for a nested route with its own intermediate destination.
|
|
201
|
+
*/
|
|
122
202
|
under(...args) {
|
|
123
203
|
const child = this.any(...args);
|
|
124
204
|
child.underRoute = true;
|
|
125
205
|
return child;
|
|
126
206
|
}
|
|
207
|
+
/**
|
|
208
|
+
* Generate route matching only WebSocket handshake requests.
|
|
209
|
+
*/
|
|
127
210
|
websocket(...args) {
|
|
128
211
|
const child = this.any(...args);
|
|
129
212
|
child.websocketRoute = true;
|
package/lib/router/route.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../src/router/route.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,OAAO,EAAC,MAAM,cAAc,CAAC;AAErC,MAAM,OAAO,KAAK;IAAlB;QACE,aAAQ,GAAY,EAAE,CAAC;QACvB,eAAU,GAAuB,SAAS,CAAC;QAC3C,gBAAW,GAAuB,SAAS,CAAC;QAC5C,eAAU,GAAG,KAAK,CAAC;QACnB,YAAO,GAAa,EAAE,CAAC;QACvB,YAAO,GAAY,IAAI,OAAO,EAAE,CAAC;QACjC,iBAAY,GAA+B,EAAE,CAAC;QAC9C,mBAAc,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../src/router/route.ts"],"names":[],"mappings":"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"}
|
package/lib/router.d.ts
CHANGED
|
@@ -10,21 +10,57 @@ interface RouteSpec {
|
|
|
10
10
|
websocket: boolean;
|
|
11
11
|
}
|
|
12
12
|
declare type RouteCondition = (ctx: MojoContext, requirements: any) => boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Router class.
|
|
15
|
+
*/
|
|
13
16
|
export declare class Router extends Route {
|
|
17
|
+
/**
|
|
18
|
+
* Routing cache.
|
|
19
|
+
*/
|
|
14
20
|
cache: LRU<string, Plan> | null;
|
|
21
|
+
/**
|
|
22
|
+
* Contains all available conditions.
|
|
23
|
+
*/
|
|
15
24
|
conditions: Record<string, RouteCondition>;
|
|
25
|
+
/**
|
|
26
|
+
* Directories to look for controllers in, first one has the highest precedence.
|
|
27
|
+
*/
|
|
16
28
|
controllerPaths: string[];
|
|
29
|
+
/**
|
|
30
|
+
* Already loaded controllers.
|
|
31
|
+
*/
|
|
17
32
|
controllers: Record<string, any>;
|
|
33
|
+
/**
|
|
34
|
+
* Registered placeholder types, by default only `num` is already defined.
|
|
35
|
+
*/
|
|
18
36
|
types: Record<string, PlaceholderType>;
|
|
19
37
|
_lookupIndex: RouteIndex | undefined;
|
|
20
38
|
constructor();
|
|
39
|
+
/**
|
|
40
|
+
* Register a condition.
|
|
41
|
+
*/
|
|
21
42
|
addCondition(name: string, fn: RouteCondition): this;
|
|
43
|
+
/**
|
|
44
|
+
* Register a placeholder type.
|
|
45
|
+
*/
|
|
22
46
|
addType(name: string, value: PlaceholderType): this;
|
|
47
|
+
/**
|
|
48
|
+
* Match routes and dispatch to actions with and without controllers.
|
|
49
|
+
*/
|
|
23
50
|
dispatch(ctx: MojoContext): Promise<boolean>;
|
|
51
|
+
/**
|
|
52
|
+
* Find route by name and cache all results for future lookups.
|
|
53
|
+
*/
|
|
24
54
|
lookup(name: string): Route | null;
|
|
25
|
-
|
|
55
|
+
/**
|
|
56
|
+
* Plot a route.
|
|
57
|
+
*/
|
|
58
|
+
plot(spec: RouteSpec): Promise<Plan | null>;
|
|
59
|
+
/**
|
|
60
|
+
* Prepare controllers for routing.
|
|
61
|
+
*/
|
|
26
62
|
warmup(): Promise<void>;
|
|
27
|
-
_getPlan(ctx: MojoContext): Plan | null
|
|
28
|
-
_walk(plan: Plan, route: Route, spec: RouteSpec): boolean
|
|
63
|
+
_getPlan(ctx: MojoContext): Promise<Plan | null>;
|
|
64
|
+
_walk(plan: Plan, route: Route, spec: RouteSpec): Promise<boolean>;
|
|
29
65
|
}
|
|
30
66
|
export {};
|
package/lib/router.js
CHANGED
|
@@ -3,27 +3,54 @@ import { Route } from './router/route.js';
|
|
|
3
3
|
import * as util from './util.js';
|
|
4
4
|
import LRU from 'lru-cache';
|
|
5
5
|
const PLACEHOLDER = {};
|
|
6
|
+
/**
|
|
7
|
+
* Router class.
|
|
8
|
+
*/
|
|
6
9
|
export class Router extends Route {
|
|
7
10
|
constructor() {
|
|
8
11
|
super();
|
|
9
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Routing cache.
|
|
14
|
+
*/
|
|
15
|
+
this.cache = new LRU({ max: 500 });
|
|
16
|
+
/**
|
|
17
|
+
* Contains all available conditions.
|
|
18
|
+
*/
|
|
10
19
|
this.conditions = {};
|
|
20
|
+
/**
|
|
21
|
+
* Directories to look for controllers in, first one has the highest precedence.
|
|
22
|
+
*/
|
|
11
23
|
this.controllerPaths = [];
|
|
24
|
+
/**
|
|
25
|
+
* Already loaded controllers.
|
|
26
|
+
*/
|
|
12
27
|
this.controllers = {};
|
|
28
|
+
/**
|
|
29
|
+
* Registered placeholder types, by default only `num` is already defined.
|
|
30
|
+
*/
|
|
13
31
|
this.types = { num: /[0-9]+/ };
|
|
14
32
|
this._lookupIndex = undefined;
|
|
15
33
|
this.root = this;
|
|
16
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Register a condition.
|
|
37
|
+
*/
|
|
17
38
|
addCondition(name, fn) {
|
|
18
39
|
this.conditions[name] = fn;
|
|
19
40
|
return this;
|
|
20
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Register a placeholder type.
|
|
44
|
+
*/
|
|
21
45
|
addType(name, value) {
|
|
22
46
|
this.types[name] = value;
|
|
23
47
|
return this;
|
|
24
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Match routes and dispatch to actions with and without controllers.
|
|
51
|
+
*/
|
|
25
52
|
async dispatch(ctx) {
|
|
26
|
-
const plan = this._getPlan(ctx);
|
|
53
|
+
const plan = await this._getPlan(ctx);
|
|
27
54
|
if (plan === null)
|
|
28
55
|
return false;
|
|
29
56
|
ctx.plan = plan;
|
|
@@ -60,6 +87,9 @@ export class Router extends Route {
|
|
|
60
87
|
}
|
|
61
88
|
return true;
|
|
62
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Find route by name and cache all results for future lookups.
|
|
92
|
+
*/
|
|
63
93
|
lookup(name) {
|
|
64
94
|
if (this._lookupIndex === undefined) {
|
|
65
95
|
const defaultNames = {};
|
|
@@ -79,22 +109,28 @@ export class Router extends Route {
|
|
|
79
109
|
}
|
|
80
110
|
return this._lookupIndex[name] === undefined ? null : this._lookupIndex[name];
|
|
81
111
|
}
|
|
82
|
-
|
|
112
|
+
/**
|
|
113
|
+
* Plot a route.
|
|
114
|
+
*/
|
|
115
|
+
async plot(spec) {
|
|
83
116
|
const plan = new Plan();
|
|
84
117
|
const steps = plan.steps;
|
|
85
118
|
const stops = plan.stops;
|
|
86
119
|
for (const child of this.children) {
|
|
87
|
-
if (this._walk(plan, child, spec))
|
|
120
|
+
if (await this._walk(plan, child, spec))
|
|
88
121
|
break;
|
|
89
122
|
steps.pop();
|
|
90
123
|
stops.pop();
|
|
91
124
|
}
|
|
92
125
|
return plan.endpoint === undefined ? null : plan;
|
|
93
126
|
}
|
|
127
|
+
/**
|
|
128
|
+
* Prepare controllers for routing.
|
|
129
|
+
*/
|
|
94
130
|
async warmup() {
|
|
95
131
|
Object.assign(this.controllers, await util.loadModules(this.controllerPaths));
|
|
96
132
|
}
|
|
97
|
-
_getPlan(ctx) {
|
|
133
|
+
async _getPlan(ctx) {
|
|
98
134
|
const req = ctx.req;
|
|
99
135
|
const realMethod = req.method;
|
|
100
136
|
if (realMethod === null)
|
|
@@ -107,7 +143,7 @@ export class Router extends Route {
|
|
|
107
143
|
ctx.log.trace(`${realMethod} "${path}"`);
|
|
108
144
|
// Cache deactivated
|
|
109
145
|
if (this.cache === null)
|
|
110
|
-
return this.plot({ ctx, method, path, websocket: isWebSocket });
|
|
146
|
+
return await this.plot({ ctx, method, path, websocket: isWebSocket });
|
|
111
147
|
// Cached
|
|
112
148
|
const cacheKey = `${method}:${path}:${isWebSocket.toString()}`;
|
|
113
149
|
const cache = this.cache;
|
|
@@ -115,13 +151,13 @@ export class Router extends Route {
|
|
|
115
151
|
if (cachedPlan !== undefined)
|
|
116
152
|
return cachedPlan;
|
|
117
153
|
// Not yet cached
|
|
118
|
-
const plan = this.plot({ ctx, method, path, websocket: isWebSocket });
|
|
154
|
+
const plan = await this.plot({ ctx, method, path, websocket: isWebSocket });
|
|
119
155
|
if (plan === null)
|
|
120
156
|
return null;
|
|
121
157
|
cache.set(cacheKey, plan);
|
|
122
158
|
return plan;
|
|
123
159
|
}
|
|
124
|
-
_walk(plan, route, spec) {
|
|
160
|
+
async _walk(plan, route, spec) {
|
|
125
161
|
// Path
|
|
126
162
|
const isEndpoint = route.isEndpoint();
|
|
127
163
|
const result = route.pattern.matchPartial(spec.path, { isEndpoint });
|
|
@@ -149,8 +185,9 @@ export class Router extends Route {
|
|
|
149
185
|
return false;
|
|
150
186
|
const conditions = root.conditions;
|
|
151
187
|
for (const value of route.requirements) {
|
|
152
|
-
if (spec.ctx === undefined ||
|
|
188
|
+
if (spec.ctx === undefined || (await conditions[value.condition](spec.ctx, value.requirement)) === false) {
|
|
153
189
|
return false;
|
|
190
|
+
}
|
|
154
191
|
}
|
|
155
192
|
}
|
|
156
193
|
// Endpoint
|
|
@@ -162,7 +199,7 @@ export class Router extends Route {
|
|
|
162
199
|
for (const child of route.children) {
|
|
163
200
|
const old = spec.path;
|
|
164
201
|
spec.path = result.remainder;
|
|
165
|
-
if (this._walk(plan, child, spec) === true)
|
|
202
|
+
if ((await this._walk(plan, child, spec)) === true)
|
|
166
203
|
return true;
|
|
167
204
|
spec.path = old;
|
|
168
205
|
steps.pop();
|
package/lib/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAC,KAAK,EAAC,MAAM,mBAAmB,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,GAAG,MAAM,WAAW,CAAC;AAa5B,MAAM,WAAW,GAAG,EAAE,CAAC;AAEvB,MAAM,OAAO,MAAO,SAAQ,KAAK;
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|
package/lib/server/cookie.d.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
1
|
import type { CookieOptions } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Parse cookie.
|
|
4
|
+
*/
|
|
2
5
|
export declare function parseCookie(cookie: string): Record<string, string>;
|
|
6
|
+
/**
|
|
7
|
+
* Stringify cookie.
|
|
8
|
+
*/
|
|
3
9
|
export declare function stringifyCookie(name: string, value: string, options?: CookieOptions): string;
|
package/lib/server/cookie.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { decodeURIComponentSafe } from '../util.js';
|
|
2
|
+
/**
|
|
3
|
+
* Parse cookie.
|
|
4
|
+
*/
|
|
2
5
|
export function parseCookie(cookie) {
|
|
3
6
|
const values = {};
|
|
4
7
|
for (const pair of cookie.split(/[,;]/)) {
|
|
@@ -12,6 +15,9 @@ export function parseCookie(cookie) {
|
|
|
12
15
|
}
|
|
13
16
|
return values;
|
|
14
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Stringify cookie.
|
|
20
|
+
*/
|
|
15
21
|
export function stringifyCookie(name, value, options = {}) {
|
|
16
22
|
const cookie = [name + '=' + encodeURIComponent(value)];
|
|
17
23
|
if (options.domain !== undefined)
|
package/lib/server/cookie.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cookie.js","sourceRoot":"","sources":["../../src/server/cookie.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,sBAAsB,EAAC,MAAM,YAAY,CAAC;AAElD,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC1D,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QAC7B,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;KAC3D;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAa,EAAE,UAAyB,EAAE;IACtF,MAAM,MAAM,GAAa,CAAC,IAAI,GAAG,GAAG,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;IAElE,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1E,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC3F,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI;QAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3E,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAEpE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,IAAI,QAAQ,KAAK,SAAS,EAAE;QAC1B,IAAI,QAAQ,KAAK,KAAK,EAAE;YACtB,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SAC7B;aAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE;YAChC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SAChC;aAAM,IAAI,QAAQ,KAAK,MAAM,EAAE;YAC9B,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SAC9B;KACF;IAED,IAAI,OAAO,EAAE,MAAM,KAAK,IAAI;QAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEpD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC"}
|
|
1
|
+
{"version":3,"file":"cookie.js","sourceRoot":"","sources":["../../src/server/cookie.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,sBAAsB,EAAC,MAAM,YAAY,CAAC;AAElD;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC1D,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QAC7B,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;KAC3D;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAa,EAAE,UAAyB,EAAE;IACtF,MAAM,MAAM,GAAa,CAAC,IAAI,GAAG,GAAG,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;IAElE,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1E,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC3F,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI;QAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3E,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAEpE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,IAAI,QAAQ,KAAK,SAAS,EAAE;QAC1B,IAAI,QAAQ,KAAK,KAAK,EAAE;YACtB,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SAC7B;aAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE;YAChC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SAChC;aAAM,IAAI,QAAQ,KAAK,MAAM,EAAE;YAC9B,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SAC9B;KACF;IAED,IAAI,OAAO,EAAE,MAAM,KAAK,IAAI;QAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEpD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC"}
|
package/lib/server.d.ts
CHANGED
|
@@ -13,9 +13,21 @@ interface ServerOptions {
|
|
|
13
13
|
reverseProxy?: boolean;
|
|
14
14
|
workers?: number;
|
|
15
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Server class.
|
|
18
|
+
*/
|
|
16
19
|
export declare class Server {
|
|
20
|
+
/**
|
|
21
|
+
* Application this server handles.
|
|
22
|
+
*/
|
|
17
23
|
app: App;
|
|
24
|
+
/**
|
|
25
|
+
* Reverse proxy mode.
|
|
26
|
+
*/
|
|
18
27
|
reverseProxy: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Server URLs.
|
|
30
|
+
*/
|
|
19
31
|
urls: URL[];
|
|
20
32
|
_cluster: boolean;
|
|
21
33
|
_listen: string[];
|
|
@@ -23,8 +35,17 @@ export declare class Server {
|
|
|
23
35
|
_quiet: boolean;
|
|
24
36
|
_workers: number;
|
|
25
37
|
constructor(app: App, options?: ServerOptions);
|
|
38
|
+
/**
|
|
39
|
+
* Turn URL into listen arguments.
|
|
40
|
+
*/
|
|
26
41
|
static listenArgsForURL(url: URL): ListenArgs;
|
|
42
|
+
/**
|
|
43
|
+
* Start server.
|
|
44
|
+
*/
|
|
27
45
|
start(): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Stop server.
|
|
48
|
+
*/
|
|
28
49
|
stop(): Promise<void>;
|
|
29
50
|
_createServer(location: string): Promise<void>;
|
|
30
51
|
_handleRequest(req: http.IncomingMessage, res: http.ServerResponse): void;
|
package/lib/server.js
CHANGED
|
@@ -6,11 +6,16 @@ import { URL } from 'url';
|
|
|
6
6
|
import { WebSocket } from './websocket.js';
|
|
7
7
|
import Path from '@mojojs/path';
|
|
8
8
|
import { WebSocketServer } from 'ws';
|
|
9
|
+
/**
|
|
10
|
+
* Server class.
|
|
11
|
+
*/
|
|
9
12
|
export class Server {
|
|
10
13
|
constructor(app, options = {}) {
|
|
14
|
+
/**
|
|
15
|
+
* Server URLs.
|
|
16
|
+
*/
|
|
11
17
|
this.urls = [];
|
|
12
18
|
this._servers = [];
|
|
13
|
-
app.server = this;
|
|
14
19
|
this.app = app;
|
|
15
20
|
this.reverseProxy = options.reverseProxy ?? false;
|
|
16
21
|
this._cluster = options.cluster ?? false;
|
|
@@ -19,6 +24,9 @@ export class Server {
|
|
|
19
24
|
this._quiet = options.quiet ?? false;
|
|
20
25
|
this._workers = options.workers ?? os.cpus().length;
|
|
21
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Turn URL into listen arguments.
|
|
29
|
+
*/
|
|
22
30
|
static listenArgsForURL(url) {
|
|
23
31
|
const listen = [];
|
|
24
32
|
const hostname = url.hostname;
|
|
@@ -36,6 +44,9 @@ export class Server {
|
|
|
36
44
|
}
|
|
37
45
|
return listen;
|
|
38
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Start server.
|
|
49
|
+
*/
|
|
39
50
|
async start() {
|
|
40
51
|
await this.app.hooks.runHook('server:start', this.app);
|
|
41
52
|
if (this._cluster === true && cluster.isPrimary === true) {
|
|
@@ -49,6 +60,9 @@ export class Server {
|
|
|
49
60
|
}
|
|
50
61
|
}
|
|
51
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Stop server.
|
|
65
|
+
*/
|
|
52
66
|
async stop() {
|
|
53
67
|
await Promise.all(this._servers.map(async (server) => await new Promise(resolve => server.close(resolve))));
|
|
54
68
|
await this.app.hooks.runHook('server:stop', this.app);
|
package/lib/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAEA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAC;AACxB,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AACzC,OAAO,IAAI,MAAM,cAAc,CAAC;AAChC,OAAO,EAAC,eAAe,EAAC,MAAM,IAAI,CAAC;AAYnC,MAAM,OAAO,MAAM;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/lib/session.d.ts
CHANGED
|
@@ -1,17 +1,52 @@
|
|
|
1
1
|
import type { App } from './app.js';
|
|
2
2
|
import type { Context } from './context.js';
|
|
3
3
|
import type { SessionData } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Session manager class.
|
|
6
|
+
*/
|
|
4
7
|
export declare class Session {
|
|
8
|
+
/**
|
|
9
|
+
* Name for session cookies, defaults to `mojo`.
|
|
10
|
+
*/
|
|
5
11
|
cookieName: string;
|
|
12
|
+
/**
|
|
13
|
+
* Path for session cookies, defaults to `/`.
|
|
14
|
+
*/
|
|
6
15
|
cookiePath: string;
|
|
16
|
+
/**
|
|
17
|
+
* Default time for sessions to expire in seconds from now, defaults to `3600`. The expiration timeout gets refreshed
|
|
18
|
+
* for every request. Setting the value to `0` will allow sessions to persist until the browser window is closed,
|
|
19
|
+
* this can have security implications though.
|
|
20
|
+
*/
|
|
7
21
|
expiration: number;
|
|
22
|
+
/**
|
|
23
|
+
* Set the `HttpOnly` value on all session cookies.
|
|
24
|
+
*/
|
|
8
25
|
httpOnly: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Set the `SameSite` value on all session cookies, defaults to `lax`.
|
|
28
|
+
*/
|
|
9
29
|
sameSite: 'lax' | 'strict' | 'none';
|
|
30
|
+
/**
|
|
31
|
+
* Set the secure flag on all session cookies, so that browsers send them only over HTTPS connections.
|
|
32
|
+
*/
|
|
10
33
|
secure: boolean;
|
|
11
34
|
_app: WeakRef<App>;
|
|
12
35
|
constructor(app: App);
|
|
36
|
+
/**
|
|
37
|
+
* Decrypt cookie.
|
|
38
|
+
*/
|
|
13
39
|
static decrypt(secrets: string[], encrypted: string): Promise<string | null>;
|
|
40
|
+
/**
|
|
41
|
+
* Encrypt cookie.
|
|
42
|
+
*/
|
|
14
43
|
static encrypt(secret: string, value: string): Promise<string>;
|
|
44
|
+
/**
|
|
45
|
+
* Load session data from encrypted cookie.
|
|
46
|
+
*/
|
|
15
47
|
load(ctx: Context): Promise<SessionData | null>;
|
|
48
|
+
/**
|
|
49
|
+
* Store session data in encrypted cookie.
|
|
50
|
+
*/
|
|
16
51
|
store(ctx: Context, data: SessionData): Promise<void>;
|
|
17
52
|
}
|