@mojojs/core 0.19.0 → 0.20.0
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 +3 -0
- package/lib/app.js +3 -0
- 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/cache.d.ts +23 -0
- package/lib/cache.js +45 -0
- package/lib/cache.js.map +1 -0
- package/lib/cli/create-full-app.d.ts +3 -0
- package/lib/cli/create-full-app.js +5 -2
- 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/context.d.ts +1 -1
- package/lib/context.js +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 +12 -0
- package/lib/mime.js +12 -0
- 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 +3 -0
- package/lib/plugins/default-helpers.js +3 -0
- package/lib/plugins/default-helpers.js.map +1 -1
- 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 +5 -2
- 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 -0
- 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 +38 -2
- package/lib/router.js +38 -2
- 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 -0
- 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 +30 -0
- 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 +2 -4
package/lib/router.js
CHANGED
|
@@ -1,27 +1,54 @@
|
|
|
1
|
+
import { Cache } from './cache.js';
|
|
1
2
|
import { Plan } from './router/plan.js';
|
|
2
3
|
import { Route } from './router/route.js';
|
|
3
4
|
import * as util from './util.js';
|
|
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 Cache();
|
|
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
53
|
const plan = await this._getPlan(ctx);
|
|
27
54
|
if (plan === null)
|
|
@@ -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,6 +109,9 @@ export class Router extends Route {
|
|
|
79
109
|
}
|
|
80
110
|
return this._lookupIndex[name] === undefined ? null : this._lookupIndex[name];
|
|
81
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* Plot a route.
|
|
114
|
+
*/
|
|
82
115
|
async plot(spec) {
|
|
83
116
|
const plan = new Plan();
|
|
84
117
|
const steps = plan.steps;
|
|
@@ -91,6 +124,9 @@ export class Router extends Route {
|
|
|
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
|
}
|
package/lib/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,
|
|
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,8 +6,14 @@ 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
19
|
this.app = app;
|
|
@@ -18,6 +24,9 @@ export class Server {
|
|
|
18
24
|
this._quiet = options.quiet ?? false;
|
|
19
25
|
this._workers = options.workers ?? os.cpus().length;
|
|
20
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Turn URL into listen arguments.
|
|
29
|
+
*/
|
|
21
30
|
static listenArgsForURL(url) {
|
|
22
31
|
const listen = [];
|
|
23
32
|
const hostname = url.hostname;
|
|
@@ -35,6 +44,9 @@ export class Server {
|
|
|
35
44
|
}
|
|
36
45
|
return listen;
|
|
37
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Start server.
|
|
49
|
+
*/
|
|
38
50
|
async start() {
|
|
39
51
|
await this.app.hooks.runHook('server:start', this.app);
|
|
40
52
|
if (this._cluster === true && cluster.isPrimary === true) {
|
|
@@ -48,6 +60,9 @@ export class Server {
|
|
|
48
60
|
}
|
|
49
61
|
}
|
|
50
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Stop server.
|
|
65
|
+
*/
|
|
51
66
|
async stop() {
|
|
52
67
|
await Promise.all(this._servers.map(async (server) => await new Promise(resolve => server.close(resolve))));
|
|
53
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
|
}
|
package/lib/session.js
CHANGED
|
@@ -2,16 +2,42 @@ import crypto from 'crypto';
|
|
|
2
2
|
import { promisify } from 'util';
|
|
3
3
|
const scrypt = promisify(crypto.scrypt);
|
|
4
4
|
const randomBytes = promisify(crypto.randomBytes);
|
|
5
|
+
/**
|
|
6
|
+
* Session manager class.
|
|
7
|
+
*/
|
|
5
8
|
export class Session {
|
|
6
9
|
constructor(app) {
|
|
10
|
+
/**
|
|
11
|
+
* Name for session cookies, defaults to `mojo`.
|
|
12
|
+
*/
|
|
7
13
|
this.cookieName = 'mojo';
|
|
14
|
+
/**
|
|
15
|
+
* Path for session cookies, defaults to `/`.
|
|
16
|
+
*/
|
|
8
17
|
this.cookiePath = '/';
|
|
18
|
+
/**
|
|
19
|
+
* Default time for sessions to expire in seconds from now, defaults to `3600`. The expiration timeout gets refreshed
|
|
20
|
+
* for every request. Setting the value to `0` will allow sessions to persist until the browser window is closed,
|
|
21
|
+
* this can have security implications though.
|
|
22
|
+
*/
|
|
9
23
|
this.expiration = 3600;
|
|
24
|
+
/**
|
|
25
|
+
* Set the `HttpOnly` value on all session cookies.
|
|
26
|
+
*/
|
|
10
27
|
this.httpOnly = true;
|
|
28
|
+
/**
|
|
29
|
+
* Set the `SameSite` value on all session cookies, defaults to `lax`.
|
|
30
|
+
*/
|
|
11
31
|
this.sameSite = 'lax';
|
|
32
|
+
/**
|
|
33
|
+
* Set the secure flag on all session cookies, so that browsers send them only over HTTPS connections.
|
|
34
|
+
*/
|
|
12
35
|
this.secure = false;
|
|
13
36
|
this._app = new WeakRef(app);
|
|
14
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Decrypt cookie.
|
|
40
|
+
*/
|
|
15
41
|
static async decrypt(secrets, encrypted) {
|
|
16
42
|
const match = encrypted.match(/^([^-]+)--([^-]+)--([^-]+)$/);
|
|
17
43
|
if (match === null)
|
|
@@ -33,6 +59,9 @@ export class Session {
|
|
|
33
59
|
}
|
|
34
60
|
return null;
|
|
35
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Encrypt cookie.
|
|
64
|
+
*/
|
|
36
65
|
static async encrypt(secret, value) {
|
|
37
66
|
const key = await scrypt(secret, 'salt', 32);
|
|
38
67
|
const iv = await randomBytes(12);
|
|
@@ -40,6 +69,9 @@ export class Session {
|
|
|
40
69
|
const encrypted = cipher.update(value, 'utf8', 'base64') + cipher.final('base64');
|
|
41
70
|
return encrypted + '--' + iv.toString('base64') + '--' + cipher.getAuthTag().toString('base64');
|
|
42
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Load session data from encrypted cookie.
|
|
74
|
+
*/
|
|
43
75
|
async load(ctx) {
|
|
44
76
|
const cookie = ctx.req.getCookie(this.cookieName);
|
|
45
77
|
if (cookie === null)
|
|
@@ -61,6 +93,9 @@ export class Session {
|
|
|
61
93
|
}
|
|
62
94
|
return data;
|
|
63
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* Store session data in encrypted cookie.
|
|
98
|
+
*/
|
|
64
99
|
async store(ctx, data) {
|
|
65
100
|
if (typeof data.expires !== 'number') {
|
|
66
101
|
const expiration = data.expiration ?? this.expiration;
|
package/lib/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAGA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAC,SAAS,EAAC,MAAM,MAAM,CAAC;AAE/B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACxC,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAElD,MAAM,OAAO,OAAO;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
package/lib/static.d.ts
CHANGED
|
@@ -1,14 +1,36 @@
|
|
|
1
1
|
import type { MojoContext } from './types.js';
|
|
2
2
|
import Path from '@mojojs/path';
|
|
3
|
+
/**
|
|
4
|
+
* Static file server class.
|
|
5
|
+
*/
|
|
3
6
|
export declare class Static {
|
|
7
|
+
/**
|
|
8
|
+
* Prefix to use for all static files.
|
|
9
|
+
*/
|
|
4
10
|
prefix: string;
|
|
11
|
+
/**
|
|
12
|
+
* Directories to serve static files from, first one has the highest precedence.
|
|
13
|
+
*/
|
|
5
14
|
publicPaths: string[];
|
|
15
|
+
/**
|
|
16
|
+
* Serve static files.
|
|
17
|
+
*/
|
|
6
18
|
dispatch(ctx: MojoContext): Promise<boolean>;
|
|
19
|
+
/**
|
|
20
|
+
* Get static file path with prefix.
|
|
21
|
+
*/
|
|
7
22
|
filePath(path: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* Check freshness of request by comparing the `If-None-Match` and `If-Modified-Since` request headers to the `ETag`
|
|
25
|
+
* and `Last-Modified` response headers.
|
|
26
|
+
*/
|
|
8
27
|
isFresh(ctx: MojoContext, options?: {
|
|
9
28
|
etag?: string;
|
|
10
29
|
lastModified?: Date;
|
|
11
30
|
}): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Serve a specific file.
|
|
33
|
+
*/
|
|
12
34
|
serveFile(ctx: MojoContext, file: Path): Promise<void>;
|
|
13
35
|
_rangeNotSatisfiable(ctx: MojoContext): Promise<void>;
|
|
14
36
|
}
|
package/lib/static.js
CHANGED
|
@@ -1,11 +1,23 @@
|
|
|
1
1
|
import crypto from 'crypto';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import Path from '@mojojs/path';
|
|
4
|
+
/**
|
|
5
|
+
* Static file server class.
|
|
6
|
+
*/
|
|
4
7
|
export class Static {
|
|
5
8
|
constructor() {
|
|
9
|
+
/**
|
|
10
|
+
* Prefix to use for all static files.
|
|
11
|
+
*/
|
|
6
12
|
this.prefix = '/public';
|
|
13
|
+
/**
|
|
14
|
+
* Directories to serve static files from, first one has the highest precedence.
|
|
15
|
+
*/
|
|
7
16
|
this.publicPaths = [Path.currentFile().sibling('..', 'vendor', 'public').toString()];
|
|
8
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Serve static files.
|
|
20
|
+
*/
|
|
9
21
|
async dispatch(ctx) {
|
|
10
22
|
const req = ctx.req;
|
|
11
23
|
const unsafePath = req.path;
|
|
@@ -26,11 +38,18 @@ export class Static {
|
|
|
26
38
|
}
|
|
27
39
|
return false;
|
|
28
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Get static file path with prefix.
|
|
43
|
+
*/
|
|
29
44
|
filePath(path) {
|
|
30
45
|
if (path.startsWith('/') === false)
|
|
31
46
|
path = '/' + path;
|
|
32
47
|
return this.prefix + path;
|
|
33
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Check freshness of request by comparing the `If-None-Match` and `If-Modified-Since` request headers to the `ETag`
|
|
51
|
+
* and `Last-Modified` response headers.
|
|
52
|
+
*/
|
|
34
53
|
isFresh(ctx, options = {}) {
|
|
35
54
|
const etag = options.etag;
|
|
36
55
|
const lastModified = options.lastModified;
|
|
@@ -60,6 +79,9 @@ export class Static {
|
|
|
60
79
|
}
|
|
61
80
|
return false;
|
|
62
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Serve a specific file.
|
|
84
|
+
*/
|
|
63
85
|
async serveFile(ctx, file) {
|
|
64
86
|
const app = ctx.app;
|
|
65
87
|
if ((await app.hooks.runHook('static:before', ctx, file)) === true)
|
package/lib/static.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static.js","sourceRoot":"","sources":["../src/static.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,IAAI,MAAM,cAAc,CAAC;AAEhC,MAAM,OAAO,MAAM;IAAnB;QACE,WAAM,GAAG,SAAS,CAAC;QACnB,gBAAW,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"static.js","sourceRoot":"","sources":["../src/static.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,21 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import type { URL } from 'url';
|
|
3
3
|
import tough from 'tough-cookie';
|
|
4
|
+
/**
|
|
5
|
+
* Cookie jar class.
|
|
6
|
+
*/
|
|
4
7
|
export declare class CookieJar {
|
|
8
|
+
/**
|
|
9
|
+
* Cookie storage.
|
|
10
|
+
*/
|
|
5
11
|
storage: tough.CookieJar;
|
|
12
|
+
/**
|
|
13
|
+
* Load cookies from storage.
|
|
14
|
+
*/
|
|
6
15
|
loadCookies(url: URL): Promise<string | null>;
|
|
16
|
+
/**
|
|
17
|
+
* Store cookies.
|
|
18
|
+
*/
|
|
7
19
|
storeCookies(url: URL, header?: string[]): Promise<void>;
|
|
8
20
|
_cookieURL(currentURL: URL): string;
|
|
9
21
|
}
|
|
@@ -1,15 +1,27 @@
|
|
|
1
1
|
import { format } from 'url';
|
|
2
2
|
import tough from 'tough-cookie';
|
|
3
|
+
/**
|
|
4
|
+
* Cookie jar class.
|
|
5
|
+
*/
|
|
3
6
|
export class CookieJar {
|
|
4
7
|
constructor() {
|
|
8
|
+
/**
|
|
9
|
+
* Cookie storage.
|
|
10
|
+
*/
|
|
5
11
|
this.storage = new tough.CookieJar();
|
|
6
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* Load cookies from storage.
|
|
15
|
+
*/
|
|
7
16
|
async loadCookies(url) {
|
|
8
17
|
const cookies = await this.storage.getCookies(this._cookieURL(url));
|
|
9
18
|
if (cookies.length > 0)
|
|
10
19
|
return cookies.map(cookie => cookie.cookieString()).join('; ');
|
|
11
20
|
return null;
|
|
12
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Store cookies.
|
|
24
|
+
*/
|
|
13
25
|
async storeCookies(url, header) {
|
|
14
26
|
if (header === undefined)
|
|
15
27
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cookie-jar.js","sourceRoot":"","sources":["../../src/user-agent/cookie-jar.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,KAAK,CAAC;AAC3B,OAAO,KAAK,MAAM,cAAc,CAAC;AAEjC,MAAM,OAAO,SAAS;IAAtB;QACE,YAAO,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"cookie-jar.js","sourceRoot":"","sources":["../../src/user-agent/cookie-jar.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,KAAK,CAAC;AAC3B,OAAO,KAAK,MAAM,cAAc,CAAC;AAEjC;;GAEG;AACH,MAAM,OAAO,SAAS;IAAtB;QACE;;WAEG;QACH,YAAO,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;IA2BlC,CAAC;IAzBC;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,GAAQ;QACxB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QACpE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvF,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,GAAQ,EAAE,MAAiB;QAC5C,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO;QAEjC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACvC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE;YACzE,IAAI,MAAM,KAAK,SAAS;gBAAE,SAAS;YACnC,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;SACjD;IACH,CAAC;IAED,UAAU,CAAC,UAAe;QACxB,OAAO,MAAM,CAAC,UAAU,EAAE,EAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAC,CAAC,CAAC;IAC3E,CAAC;CACF"}
|
package/lib/user-agent/mock.d.ts
CHANGED
|
@@ -2,10 +2,25 @@ import type { App } from '../app.js';
|
|
|
2
2
|
import type { UserAgentOptions } from '../types.js';
|
|
3
3
|
import { Server } from '../server.js';
|
|
4
4
|
import { UserAgent } from '../user-agent.js';
|
|
5
|
+
/**
|
|
6
|
+
* Mock user agent class.
|
|
7
|
+
*/
|
|
5
8
|
export declare class MockUserAgent extends UserAgent {
|
|
9
|
+
/**
|
|
10
|
+
* Server to use for mock requests.
|
|
11
|
+
*/
|
|
6
12
|
server: Server | undefined;
|
|
7
13
|
constructor(options?: UserAgentOptions);
|
|
14
|
+
/**
|
|
15
|
+
* Create a new mock user agent.
|
|
16
|
+
*/
|
|
8
17
|
static newMockUserAgent(app: App, options?: UserAgentOptions): Promise<MockUserAgent>;
|
|
18
|
+
/**
|
|
19
|
+
* Start mock server.
|
|
20
|
+
*/
|
|
9
21
|
start(app: App): Promise<this>;
|
|
22
|
+
/**
|
|
23
|
+
* Stop mock server.
|
|
24
|
+
*/
|
|
10
25
|
stop(): Promise<void>;
|
|
11
26
|
}
|
package/lib/user-agent/mock.js
CHANGED
|
@@ -1,14 +1,26 @@
|
|
|
1
1
|
import { Server } from '../server.js';
|
|
2
2
|
import { UserAgent } from '../user-agent.js';
|
|
3
|
+
/**
|
|
4
|
+
* Mock user agent class.
|
|
5
|
+
*/
|
|
3
6
|
export class MockUserAgent extends UserAgent {
|
|
4
7
|
constructor(options) {
|
|
5
8
|
super(options);
|
|
9
|
+
/**
|
|
10
|
+
* Server to use for mock requests.
|
|
11
|
+
*/
|
|
6
12
|
this.server = undefined;
|
|
7
13
|
this.server = undefined;
|
|
8
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Create a new mock user agent.
|
|
17
|
+
*/
|
|
9
18
|
static async newMockUserAgent(app, options) {
|
|
10
19
|
return await new MockUserAgent(options).start(app);
|
|
11
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Start mock server.
|
|
23
|
+
*/
|
|
12
24
|
async start(app) {
|
|
13
25
|
const server = (this.server = new Server(app, { listen: ['http://*'], quiet: true }));
|
|
14
26
|
await server.start();
|
|
@@ -16,6 +28,9 @@ export class MockUserAgent extends UserAgent {
|
|
|
16
28
|
this.baseURL = server.urls[0];
|
|
17
29
|
return this;
|
|
18
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* Stop mock server.
|
|
33
|
+
*/
|
|
19
34
|
async stop() {
|
|
20
35
|
this.destroy();
|
|
21
36
|
if (this.server === undefined)
|