@mojojs/core 0.17.3 → 0.19.2
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 +1 -1
- package/lib/app.d.ts +114 -4
- package/lib/app.js +107 -16
- 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 +20 -4
- package/lib/cli.js.map +1 -1
- package/lib/context.d.ts +99 -0
- package/lib/context.js +88 -3
- 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 +3 -0
- 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/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.d.ts +3 -3
- package/lib/router.js +11 -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/request.d.ts +3 -5
- package/lib/server/request.js +10 -14
- package/lib/server/request.js.map +1 -1
- package/lib/server/response.js +1 -1
- package/lib/server/response.js.map +1 -1
- package/lib/server.d.ts +21 -0
- package/lib/server.js +17 -3
- 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 +19 -0
- package/lib/static.js +20 -1
- package/lib/static.js.map +1 -1
- package/lib/types.d.ts +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 +18 -2
- 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/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/user-agent.d.ts +1 -1
- package/lib/user-agent.js +10 -2
- package/lib/user-agent.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 +2 -2
- package/vendor/views/mojo/debug.html.mt +1 -1
- package/vendor/views/mojo/not-found.html.mt +1 -1
package/lib/context.js
CHANGED
|
@@ -3,12 +3,25 @@ import { Params } from './body/params.js';
|
|
|
3
3
|
import { ServerRequest } from './server/request.js';
|
|
4
4
|
import { ServerResponse } from './server/response.js';
|
|
5
5
|
const ABSOLUTE = /^[a-zA-Z][a-zA-Z0-9]*:\/\//;
|
|
6
|
+
/**
|
|
7
|
+
* Context class.
|
|
8
|
+
*/
|
|
6
9
|
class Context extends EventEmitter {
|
|
7
10
|
constructor(app, req, res, options) {
|
|
8
11
|
super({ captureRejections: true });
|
|
12
|
+
/**
|
|
13
|
+
* WebSocket JSON mode.
|
|
14
|
+
*/
|
|
9
15
|
this.jsonMode = false;
|
|
16
|
+
/**
|
|
17
|
+
* Router dispatch plan.
|
|
18
|
+
*/
|
|
10
19
|
this.plan = null;
|
|
20
|
+
/**
|
|
21
|
+
* Non-persistent data storage and exchange for the current request.
|
|
22
|
+
*/
|
|
11
23
|
this.stash = {};
|
|
24
|
+
this._flash = undefined;
|
|
12
25
|
this._params = undefined;
|
|
13
26
|
this._session = undefined;
|
|
14
27
|
this._ws = null;
|
|
@@ -21,6 +34,9 @@ class Context extends EventEmitter {
|
|
|
21
34
|
[EventEmitter.captureRejectionSymbol](error) {
|
|
22
35
|
this.exception(error);
|
|
23
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Select best possible representation for resource.
|
|
39
|
+
*/
|
|
24
40
|
accepts(allowed) {
|
|
25
41
|
const formats = this.app.mime.detect(this.req.headers.accept ?? '');
|
|
26
42
|
const stash = this.stash;
|
|
@@ -31,9 +47,15 @@ class Context extends EventEmitter {
|
|
|
31
47
|
const results = formats.filter(format => allowed.includes(format));
|
|
32
48
|
return results.length > 0 ? results : null;
|
|
33
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* Application config shortcut.
|
|
52
|
+
*/
|
|
34
53
|
get config() {
|
|
35
54
|
return this.app.config;
|
|
36
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* Data storage persistent only for the next request.
|
|
58
|
+
*/
|
|
37
59
|
async flash() {
|
|
38
60
|
if (this._flash === undefined) {
|
|
39
61
|
const session = await this.session();
|
|
@@ -53,33 +75,60 @@ class Context extends EventEmitter {
|
|
|
53
75
|
}
|
|
54
76
|
return this._flash;
|
|
55
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Handle WebSocket upgrade, used by servers.
|
|
80
|
+
*/
|
|
56
81
|
handleUpgrade(ws) {
|
|
57
82
|
this._ws = new WeakRef(ws);
|
|
58
83
|
this.emit('connection', ws);
|
|
59
84
|
ws.on('error', error => this.exception(error));
|
|
60
85
|
}
|
|
86
|
+
/**
|
|
87
|
+
* Home directory shortcut.
|
|
88
|
+
*/
|
|
61
89
|
get home() {
|
|
62
90
|
return this.app.home;
|
|
63
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Check if WebSocket connection has been accepted.
|
|
94
|
+
*/
|
|
64
95
|
get isAccepted() {
|
|
65
96
|
return this.listenerCount('connection') > 0;
|
|
66
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* Check if WebSocket connection has been established.
|
|
100
|
+
*/
|
|
67
101
|
get isEstablished() {
|
|
68
102
|
return this._ws !== null;
|
|
69
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* Check if session is active.
|
|
106
|
+
*/
|
|
70
107
|
get isSessionActive() {
|
|
71
108
|
return this._session !== undefined;
|
|
72
109
|
}
|
|
110
|
+
/**
|
|
111
|
+
* Check if HTTP request is a WebSocket handshake.
|
|
112
|
+
*/
|
|
73
113
|
get isWebSocket() {
|
|
74
114
|
return this.req.isWebSocket;
|
|
75
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Accept WebSocket connection and activate JSON mode.
|
|
118
|
+
*/
|
|
76
119
|
json(fn) {
|
|
77
120
|
this.jsonMode = true;
|
|
78
121
|
return this.on('connection', fn);
|
|
79
122
|
}
|
|
123
|
+
/**
|
|
124
|
+
* Model shortcut.
|
|
125
|
+
*/
|
|
80
126
|
get models() {
|
|
81
127
|
return this.app.models;
|
|
82
128
|
}
|
|
129
|
+
/**
|
|
130
|
+
* GET and POST parameters.
|
|
131
|
+
*/
|
|
83
132
|
async params(options) {
|
|
84
133
|
if (this._params === undefined) {
|
|
85
134
|
const req = this.req;
|
|
@@ -90,15 +139,24 @@ class Context extends EventEmitter {
|
|
|
90
139
|
}
|
|
91
140
|
return this._params;
|
|
92
141
|
}
|
|
142
|
+
/**
|
|
143
|
+
* Accept WebSocket connection.
|
|
144
|
+
*/
|
|
93
145
|
plain(fn) {
|
|
94
146
|
return this.on('connection', fn);
|
|
95
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
* Send `302` redirect response.
|
|
150
|
+
*/
|
|
96
151
|
async redirectTo(target, options = {}) {
|
|
97
152
|
await this.res
|
|
98
153
|
.status(options.status ?? 302)
|
|
99
154
|
.set('Location', this.urlFor(target, options.values) ?? '')
|
|
100
155
|
.send();
|
|
101
156
|
}
|
|
157
|
+
/**
|
|
158
|
+
* Render dynamic content.
|
|
159
|
+
*/
|
|
102
160
|
async render(options = {}, stash) {
|
|
103
161
|
if (typeof options === 'string')
|
|
104
162
|
options = { view: options };
|
|
@@ -113,6 +171,9 @@ class Context extends EventEmitter {
|
|
|
113
171
|
}
|
|
114
172
|
return await app.renderer.respond(this, result, { status: options.status });
|
|
115
173
|
}
|
|
174
|
+
/**
|
|
175
|
+
* Try to render dynamic content to string.
|
|
176
|
+
*/
|
|
116
177
|
async renderToString(options, stash) {
|
|
117
178
|
if (typeof options === 'string')
|
|
118
179
|
options = { view: options };
|
|
@@ -120,6 +181,9 @@ class Context extends EventEmitter {
|
|
|
120
181
|
const result = await this.app.renderer.render(this, options);
|
|
121
182
|
return result === null ? null : result.output.toString();
|
|
122
183
|
}
|
|
184
|
+
/**
|
|
185
|
+
* Automatically select best possible representation for resource.
|
|
186
|
+
*/
|
|
123
187
|
async respondTo(spec) {
|
|
124
188
|
const formats = this.accepts() ?? [];
|
|
125
189
|
for (const format of formats) {
|
|
@@ -134,20 +198,35 @@ class Context extends EventEmitter {
|
|
|
134
198
|
}
|
|
135
199
|
await this.res.status(204).send();
|
|
136
200
|
}
|
|
201
|
+
/**
|
|
202
|
+
* Send static file.
|
|
203
|
+
*/
|
|
137
204
|
async sendFile(file) {
|
|
138
205
|
return await this.app.static.serveFile(this, file);
|
|
139
206
|
}
|
|
207
|
+
/**
|
|
208
|
+
* Get JSON schema validation function.
|
|
209
|
+
*/
|
|
140
210
|
schema(schema) {
|
|
141
211
|
return this.app.validator.schema(schema);
|
|
142
212
|
}
|
|
213
|
+
/**
|
|
214
|
+
* Persistent data storage for the next few requests.
|
|
215
|
+
*/
|
|
143
216
|
async session() {
|
|
144
217
|
if (this._session === undefined)
|
|
145
218
|
this._session = (await this.app.session.load(this)) ?? {};
|
|
146
219
|
return this._session;
|
|
147
220
|
}
|
|
221
|
+
/**
|
|
222
|
+
* HTTP/WebSocket user agent shortcut.
|
|
223
|
+
*/
|
|
148
224
|
get ua() {
|
|
149
225
|
return this.app.ua;
|
|
150
226
|
}
|
|
227
|
+
/**
|
|
228
|
+
* Generate URL for route of path.
|
|
229
|
+
*/
|
|
151
230
|
urlFor(target, values) {
|
|
152
231
|
if (target === undefined || target === 'current') {
|
|
153
232
|
if (this.plan === null)
|
|
@@ -156,7 +235,7 @@ class Context extends EventEmitter {
|
|
|
156
235
|
return this._urlForPath(result.path, result.websocket);
|
|
157
236
|
}
|
|
158
237
|
if (target.startsWith('/'))
|
|
159
|
-
return this.req.
|
|
238
|
+
return this.req.baseURL + target;
|
|
160
239
|
if (ABSOLUTE.test(target))
|
|
161
240
|
return target;
|
|
162
241
|
const route = this.app.router.lookup(target);
|
|
@@ -164,16 +243,22 @@ class Context extends EventEmitter {
|
|
|
164
243
|
return null;
|
|
165
244
|
return this._urlForPath(route.render(values), route.hasWebSocket());
|
|
166
245
|
}
|
|
246
|
+
/**
|
|
247
|
+
* Generate URL for static file.
|
|
248
|
+
*/
|
|
167
249
|
urlForFile(path) {
|
|
168
250
|
if (ABSOLUTE.test(path))
|
|
169
251
|
return path;
|
|
170
|
-
return this.req.
|
|
252
|
+
return this.req.baseURL + this.app.static.filePath(path);
|
|
171
253
|
}
|
|
254
|
+
/**
|
|
255
|
+
* Established WebSocket connection.
|
|
256
|
+
*/
|
|
172
257
|
get ws() {
|
|
173
258
|
return this._ws?.deref() ?? null;
|
|
174
259
|
}
|
|
175
260
|
_urlForPath(path, isWebSocket) {
|
|
176
|
-
const url = this.req.
|
|
261
|
+
const url = this.req.baseURL + path;
|
|
177
262
|
return isWebSocket ? url.replace(/^http/, 'ws') : url;
|
|
178
263
|
}
|
|
179
264
|
}
|
package/lib/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAUA,OAAO,YAAY,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAC,MAAM,EAAC,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAC,cAAc,EAAC,MAAM,sBAAsB,CAAC;AAapD,MAAM,QAAQ,GAAG,4BAA4B,CAAC;AAE9C,MAAM,OAAQ,SAAQ,YAAY;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
|
package/lib/core.d.ts
CHANGED
|
@@ -6,6 +6,9 @@
|
|
|
6
6
|
import type { AppOptions } from './types.js';
|
|
7
7
|
import { App } from './app.js';
|
|
8
8
|
export declare const version: any;
|
|
9
|
+
/**
|
|
10
|
+
* Create a new mojo.js application.
|
|
11
|
+
*/
|
|
9
12
|
export default function mojo(options?: AppOptions): App;
|
|
10
13
|
export { default as jsonConfigPlugin } from './plugins/json-config.js';
|
|
11
14
|
export { default as yamlConfigPlugin } from './plugins/yaml-config.js';
|
package/lib/core.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { App } from './app.js';
|
|
2
2
|
import Path from '@mojojs/path';
|
|
3
3
|
export const version = JSON.parse(Path.currentFile().dirname().sibling('package.json').readFileSync().toString()).version;
|
|
4
|
+
/**
|
|
5
|
+
* Create a new mojo.js application.
|
|
6
|
+
*/
|
|
4
7
|
export default function mojo(options) {
|
|
5
8
|
const app = new App(options);
|
|
6
9
|
const caller = (app.home = Path.callerFile().dirname());
|
package/lib/core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,GAAG,EAAC,MAAM,UAAU,CAAC;AAC7B,OAAO,IAAI,MAAM,cAAc,CAAC;AAEhC,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAC/B,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE,CAC/E,CAAC,OAAO,CAAC;AAEV,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,OAAoB;IAC/C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAE7B,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IACjC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,UAAU,EAAE,CAAC;IAC/D,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,UAAU,EAAE,CAAC;IACjE,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAElC,wFAAwF;IACxF,IAAI,YAAY,KAAK,KAAK,IAAI,aAAa,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;QACzG,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC;KACpB;IAED,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC1D,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjE,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEhE,OAAO,GAAG,CAAC;AACb,CAAC;AAED,iHAAiH;AACjH,OAAO,EAAC,OAAO,IAAI,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAC,OAAO,IAAI,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACnC,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACnC,OAAO,EAAC,OAAO,EAAC,MAAM,cAAc,CAAC;AACrC,OAAO,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,GAAG,EAAC,MAAM,UAAU,CAAC;AAC7B,OAAO,IAAI,MAAM,cAAc,CAAC;AAEhC,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAC/B,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE,CAC/E,CAAC,OAAO,CAAC;AAEV;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,OAAoB;IAC/C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAE7B,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IACjC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,UAAU,EAAE,CAAC;IAC/D,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,UAAU,EAAE,CAAC;IACjE,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAElC,wFAAwF;IACxF,IAAI,YAAY,KAAK,KAAK,IAAI,aAAa,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;QACzG,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC;KACpB;IAED,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC1D,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjE,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEhE,OAAO,GAAG,CAAC;AACb,CAAC;AAED,iHAAiH;AACjH,OAAO,EAAC,OAAO,IAAI,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAC,OAAO,IAAI,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACnC,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACnC,OAAO,EAAC,OAAO,EAAC,MAAM,cAAc,CAAC;AACrC,OAAO,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC"}
|
package/lib/hooks.d.ts
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
declare type Hook = (...args: any[]) => any;
|
|
2
|
+
/**
|
|
3
|
+
* Hook class.
|
|
4
|
+
*/
|
|
2
5
|
export declare class Hooks {
|
|
3
6
|
_hooks: Record<string, Hook[]>;
|
|
7
|
+
/**
|
|
8
|
+
* Add hook.
|
|
9
|
+
*/
|
|
4
10
|
addHook(name: string, fn: Hook): void;
|
|
11
|
+
/**
|
|
12
|
+
* Run hook.
|
|
13
|
+
*/
|
|
5
14
|
runHook(name: string, ...args: any[]): Promise<any>;
|
|
6
15
|
_prepareHook(chain: Hook[]): (...args: any[]) => Promise<any>;
|
|
7
16
|
}
|
package/lib/hooks.js
CHANGED
|
@@ -1,12 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook class.
|
|
3
|
+
*/
|
|
1
4
|
export class Hooks {
|
|
2
5
|
constructor() {
|
|
3
6
|
this._hooks = {};
|
|
4
7
|
}
|
|
8
|
+
/**
|
|
9
|
+
* Add hook.
|
|
10
|
+
*/
|
|
5
11
|
addHook(name, fn) {
|
|
6
12
|
if (this._hooks[name] === undefined)
|
|
7
13
|
this._hooks[name] = [];
|
|
8
14
|
this._hooks[name].push(fn);
|
|
9
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Run hook.
|
|
18
|
+
*/
|
|
10
19
|
async runHook(name, ...args) {
|
|
11
20
|
if (this._hooks[name] === undefined)
|
|
12
21
|
return await Promise.resolve();
|
package/lib/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,KAAK;IAAlB;QACE,WAAM,GAA2B,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,KAAK;IAAlB;QACE,WAAM,GAA2B,EAAE,CAAC;IA6BtC,CAAC;IA3BC;;OAEG;IACH,OAAO,CAAC,IAAY,EAAE,EAAQ;QAC5B,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS;YAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,GAAG,IAAW;QACxC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS;YAAE,OAAO,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACpE,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7D,CAAC;IAED,YAAY,CAAC,KAAa;QACxB,OAAO,KAAK,UAAU,IAAI,CAAC,GAAG,IAAW;YACvC,OAAO,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;YAErB,KAAK,UAAU,IAAI,CAAC,CAAS,EAAE,MAAY;gBACzC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,MAAM,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS;oBAAE,OAAO,MAAM,CAAC;gBAC5D,OAAO,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACzF,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;CACF"}
|
package/lib/logger.d.ts
CHANGED
|
@@ -11,9 +11,21 @@ interface LogEvent extends LogContext {
|
|
|
11
11
|
msg: string;
|
|
12
12
|
}
|
|
13
13
|
declare type LogFormatter = (data: LogEvent) => string;
|
|
14
|
+
/**
|
|
15
|
+
* A simple logger class.
|
|
16
|
+
*/
|
|
14
17
|
export declare class Logger {
|
|
18
|
+
/**
|
|
19
|
+
* Log destination stream.
|
|
20
|
+
*/
|
|
15
21
|
destination: NodeJS.WritableStream;
|
|
22
|
+
/**
|
|
23
|
+
* Log formatter.
|
|
24
|
+
*/
|
|
16
25
|
formatter: LogFormatter;
|
|
26
|
+
/**
|
|
27
|
+
* The last few logged messages.
|
|
28
|
+
*/
|
|
17
29
|
history: LogEvent[];
|
|
18
30
|
_historySize: number;
|
|
19
31
|
_level: number;
|
|
@@ -23,30 +35,87 @@ export declare class Logger {
|
|
|
23
35
|
historySize?: number;
|
|
24
36
|
level?: string;
|
|
25
37
|
});
|
|
38
|
+
/**
|
|
39
|
+
* Create a child logger that will include context information with every log message.
|
|
40
|
+
*/
|
|
26
41
|
child(context: LogContext): ChildLogger;
|
|
42
|
+
/**
|
|
43
|
+
* Log formatter with color highlighting.
|
|
44
|
+
*/
|
|
27
45
|
static colorFormatter(data: LogEvent): string;
|
|
46
|
+
/**
|
|
47
|
+
* Log `debug` message.
|
|
48
|
+
*/
|
|
28
49
|
debug(msg: string, context?: LogContext): void;
|
|
50
|
+
/**
|
|
51
|
+
* Log formatter without color highlighting.
|
|
52
|
+
*/
|
|
29
53
|
static stringFormatter(data: LogEvent): string;
|
|
54
|
+
/**
|
|
55
|
+
* Log formatter for systemd.
|
|
56
|
+
*/
|
|
30
57
|
static systemdFormatter(data: LogEvent): string;
|
|
58
|
+
/**
|
|
59
|
+
* Log `error` message.
|
|
60
|
+
*/
|
|
31
61
|
error(msg: string, context?: LogContext): void;
|
|
62
|
+
/**
|
|
63
|
+
* Log `fatal` message.
|
|
64
|
+
*/
|
|
32
65
|
fatal(msg: string, context?: LogContext): void;
|
|
66
|
+
/**
|
|
67
|
+
* Log `infor` message.
|
|
68
|
+
*/
|
|
33
69
|
info(msg: string, context?: LogContext): void;
|
|
70
|
+
/**
|
|
71
|
+
* JSON log formatter.
|
|
72
|
+
*/
|
|
34
73
|
static jsonFormatter(data: LogEvent): string;
|
|
74
|
+
/**
|
|
75
|
+
* Currently active log level.
|
|
76
|
+
*/
|
|
35
77
|
get level(): string;
|
|
36
78
|
set level(level: string);
|
|
79
|
+
/**
|
|
80
|
+
* Log `trace` message.
|
|
81
|
+
*/
|
|
37
82
|
trace(msg: string, context?: LogContext): void;
|
|
83
|
+
/**
|
|
84
|
+
* Log `warn` message.
|
|
85
|
+
*/
|
|
38
86
|
warn(msg: string, context?: LogContext): void;
|
|
39
87
|
_log(level: string, msg: string, context?: LogContext): void;
|
|
40
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* Child logger class.
|
|
91
|
+
*/
|
|
41
92
|
export declare class ChildLogger {
|
|
42
93
|
parent: Logger;
|
|
43
94
|
context: LogContext;
|
|
44
95
|
constructor(parent: Logger, context: LogContext);
|
|
96
|
+
/**
|
|
97
|
+
* Log `debug` message.
|
|
98
|
+
*/
|
|
45
99
|
debug(msg: string): void;
|
|
100
|
+
/**
|
|
101
|
+
* Log `error` message.
|
|
102
|
+
*/
|
|
46
103
|
error(msg: string): void;
|
|
104
|
+
/**
|
|
105
|
+
* Log `fatal` message.
|
|
106
|
+
*/
|
|
47
107
|
fatal(msg: string): void;
|
|
108
|
+
/**
|
|
109
|
+
* Log `info` message.
|
|
110
|
+
*/
|
|
48
111
|
info(msg: string): void;
|
|
112
|
+
/**
|
|
113
|
+
* Log `trace` message.
|
|
114
|
+
*/
|
|
49
115
|
trace(msg: string): void;
|
|
116
|
+
/**
|
|
117
|
+
* Log `warn` message.
|
|
118
|
+
*/
|
|
50
119
|
warn(msg: string): void;
|
|
51
120
|
}
|
|
52
121
|
export {};
|
package/lib/logger.js
CHANGED
|
@@ -8,8 +8,14 @@ const LEVEL = {
|
|
|
8
8
|
debug: 6,
|
|
9
9
|
trace: 7
|
|
10
10
|
};
|
|
11
|
+
/**
|
|
12
|
+
* A simple logger class.
|
|
13
|
+
*/
|
|
11
14
|
export class Logger {
|
|
12
15
|
constructor(options = {}) {
|
|
16
|
+
/**
|
|
17
|
+
* The last few logged messages.
|
|
18
|
+
*/
|
|
13
19
|
this.history = [];
|
|
14
20
|
this._level = 7;
|
|
15
21
|
this.destination = options.destination ?? process.stderr;
|
|
@@ -17,9 +23,15 @@ export class Logger {
|
|
|
17
23
|
this.level = process.env.MOJO_LOG_LEVEL ?? options.level ?? 'trace';
|
|
18
24
|
this._historySize = options.historySize ?? 0;
|
|
19
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Create a child logger that will include context information with every log message.
|
|
28
|
+
*/
|
|
20
29
|
child(context) {
|
|
21
30
|
return new ChildLogger(this, context);
|
|
22
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Log formatter with color highlighting.
|
|
34
|
+
*/
|
|
23
35
|
static colorFormatter(data) {
|
|
24
36
|
const formatted = Logger.stringFormatter(data);
|
|
25
37
|
if (data.level === 'error' || data.level === 'fatal')
|
|
@@ -28,35 +40,59 @@ export class Logger {
|
|
|
28
40
|
return chalk.yellow(formatted);
|
|
29
41
|
return formatted;
|
|
30
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Log `debug` message.
|
|
45
|
+
*/
|
|
31
46
|
debug(msg, context) {
|
|
32
47
|
if (this._level >= LEVEL.debug)
|
|
33
48
|
this._log('debug', msg, context);
|
|
34
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* Log formatter without color highlighting.
|
|
52
|
+
*/
|
|
35
53
|
static stringFormatter(data) {
|
|
36
54
|
if (data.requestId !== undefined)
|
|
37
55
|
return `[${data.time}] [${data.level}] [${data.requestId}] ${data.msg}\n`;
|
|
38
56
|
return `[${data.time}] [${data.level}] ${data.msg}\n`;
|
|
39
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Log formatter for systemd.
|
|
60
|
+
*/
|
|
40
61
|
static systemdFormatter(data) {
|
|
41
62
|
if (data.requestId === undefined)
|
|
42
63
|
return `<${LEVEL[data.level]}>[${data.level.substring(0, 1)}] ${data.msg}\n`;
|
|
43
64
|
return `<${LEVEL[data.level]}>[${data.level.substring(0, 1)}] [${data.requestId}] ${data.msg}\n`;
|
|
44
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Log `error` message.
|
|
68
|
+
*/
|
|
45
69
|
error(msg, context) {
|
|
46
70
|
if (this._level >= LEVEL.error)
|
|
47
71
|
this._log('error', msg, context);
|
|
48
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Log `fatal` message.
|
|
75
|
+
*/
|
|
49
76
|
fatal(msg, context) {
|
|
50
77
|
if (this._level >= LEVEL.fatal)
|
|
51
78
|
this._log('fatal', msg, context);
|
|
52
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* Log `infor` message.
|
|
82
|
+
*/
|
|
53
83
|
info(msg, context) {
|
|
54
84
|
if (this._level >= LEVEL.info)
|
|
55
85
|
this._log('info', msg, context);
|
|
56
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* JSON log formatter.
|
|
89
|
+
*/
|
|
57
90
|
static jsonFormatter(data) {
|
|
58
91
|
return JSON.stringify(data);
|
|
59
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Currently active log level.
|
|
95
|
+
*/
|
|
60
96
|
get level() {
|
|
61
97
|
return Object.keys(LEVEL).find(key => LEVEL[key] === this._level);
|
|
62
98
|
}
|
|
@@ -64,10 +100,16 @@ export class Logger {
|
|
|
64
100
|
assert(LEVEL[level] !== undefined, `Unsupported log level "${level}"`);
|
|
65
101
|
this._level = LEVEL[level];
|
|
66
102
|
}
|
|
103
|
+
/**
|
|
104
|
+
* Log `trace` message.
|
|
105
|
+
*/
|
|
67
106
|
trace(msg, context) {
|
|
68
107
|
if (this._level >= LEVEL.trace)
|
|
69
108
|
this._log('trace', msg, context);
|
|
70
109
|
}
|
|
110
|
+
/**
|
|
111
|
+
* Log `warn` message.
|
|
112
|
+
*/
|
|
71
113
|
warn(msg, context) {
|
|
72
114
|
if (this._level >= LEVEL.warn)
|
|
73
115
|
this._log('warn', msg, context);
|
|
@@ -88,26 +130,47 @@ export class Logger {
|
|
|
88
130
|
}
|
|
89
131
|
}
|
|
90
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* Child logger class.
|
|
135
|
+
*/
|
|
91
136
|
export class ChildLogger {
|
|
92
137
|
constructor(parent, context) {
|
|
93
138
|
this.parent = parent;
|
|
94
139
|
this.context = context;
|
|
95
140
|
}
|
|
141
|
+
/**
|
|
142
|
+
* Log `debug` message.
|
|
143
|
+
*/
|
|
96
144
|
debug(msg) {
|
|
97
145
|
this.parent.debug(msg, this.context);
|
|
98
146
|
}
|
|
147
|
+
/**
|
|
148
|
+
* Log `error` message.
|
|
149
|
+
*/
|
|
99
150
|
error(msg) {
|
|
100
151
|
this.parent.error(msg, this.context);
|
|
101
152
|
}
|
|
153
|
+
/**
|
|
154
|
+
* Log `fatal` message.
|
|
155
|
+
*/
|
|
102
156
|
fatal(msg) {
|
|
103
157
|
this.parent.fatal(msg, this.context);
|
|
104
158
|
}
|
|
159
|
+
/**
|
|
160
|
+
* Log `info` message.
|
|
161
|
+
*/
|
|
105
162
|
info(msg) {
|
|
106
163
|
this.parent.info(msg, this.context);
|
|
107
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* Log `trace` message.
|
|
167
|
+
*/
|
|
108
168
|
trace(msg) {
|
|
109
169
|
this.parent.trace(msg, this.context);
|
|
110
170
|
}
|
|
171
|
+
/**
|
|
172
|
+
* Log `warn` message.
|
|
173
|
+
*/
|
|
111
174
|
warn(msg) {
|
|
112
175
|
this.parent.warn(msg, this.context);
|
|
113
176
|
}
|
package/lib/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAEA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,MAAM,OAAO,CAAC;AAa1B,MAAM,KAAK,GAA2B;IACpC,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,MAAM,OAAO,MAAM;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
|
package/lib/mime.d.ts
CHANGED
|
@@ -1,4 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MIME class.
|
|
3
|
+
*/
|
|
1
4
|
export declare class Mime {
|
|
5
|
+
/**
|
|
6
|
+
* Custom MIME types.
|
|
7
|
+
*/
|
|
8
|
+
custom: Record<string, string>;
|
|
9
|
+
_reverseCustom: Record<string, string> | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* Detect file extensions from `Accept` header value.
|
|
12
|
+
*/
|
|
2
13
|
detect(accepts: string): string[];
|
|
14
|
+
/**
|
|
15
|
+
* Get MIME type for file extension.
|
|
16
|
+
*/
|
|
3
17
|
extType(ext: string): string | null;
|
|
4
18
|
}
|