@mojojs/core 0.17.1 → 0.19.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/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.d.ts +48 -0
- package/lib/body.js +45 -0
- package/lib/body.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/mime.d.ts +2 -0
- package/lib/mime.js +27 -9
- package/lib/mime.js.map +1 -1
- package/lib/plugins/default-helpers.d.ts +2 -0
- package/lib/plugins/default-helpers.js +15 -0
- package/lib/plugins/default-helpers.js.map +1 -0
- package/lib/plugins/view-helpers.js +0 -12
- package/lib/plugins/view-helpers.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/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.js +2 -3
- package/lib/server.js.map +1 -1
- package/lib/static.js +1 -1
- package/lib/static.js.map +1 -1
- package/lib/types.d.ts +1 -1
- package/lib/user-agent/mock.js +3 -2
- package/lib/user-agent/mock.js.map +1 -1
- package/lib/user-agent/test.js +7 -7
- 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 +1 -1
- package/lib/util.js +2 -3
- package/lib/util.js.map +1 -1
- package/package.json +3 -3
- package/vendor/views/mojo/debug.html.mt +1 -1
- package/vendor/views/mojo/not-found.html.mt +1 -1
package/lib/cli.js
CHANGED
|
@@ -1,16 +1,31 @@
|
|
|
1
1
|
import * as util from './util.js';
|
|
2
2
|
import Path from '@mojojs/path';
|
|
3
3
|
import nopt from 'nopt';
|
|
4
|
+
/**
|
|
5
|
+
* Command line interface class.
|
|
6
|
+
*/
|
|
4
7
|
export class CLI {
|
|
5
8
|
constructor(app) {
|
|
9
|
+
/**
|
|
10
|
+
* Paths to search for commands.
|
|
11
|
+
*/
|
|
6
12
|
this.commandPaths = [Path.currentFile().sibling('cli').toString()];
|
|
13
|
+
/**
|
|
14
|
+
* Registered commands.
|
|
15
|
+
*/
|
|
7
16
|
this.commands = {};
|
|
8
17
|
this._loaded = undefined;
|
|
9
18
|
this._app = new WeakRef(app);
|
|
10
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Add a command.
|
|
22
|
+
*/
|
|
11
23
|
addCommand(name, command) {
|
|
12
24
|
this.commands[name] = command;
|
|
13
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Start command line interface.
|
|
28
|
+
*/
|
|
14
29
|
async start(command, ...args) {
|
|
15
30
|
if (this._loaded === undefined)
|
|
16
31
|
await this._loadCommands();
|
|
@@ -18,8 +33,7 @@ export class CLI {
|
|
|
18
33
|
const app = this._app.deref();
|
|
19
34
|
if (app === undefined)
|
|
20
35
|
return;
|
|
21
|
-
|
|
22
|
-
return;
|
|
36
|
+
await app.hooks.runHook('command:before', app, commandArgs);
|
|
23
37
|
const parsed = nopt({ help: Boolean }, { h: '--help' }, commandArgs);
|
|
24
38
|
const argv = parsed.argv;
|
|
25
39
|
if (argv.remain.length > 0) {
|
|
@@ -34,9 +48,11 @@ export class CLI {
|
|
|
34
48
|
else {
|
|
35
49
|
await command(app, argv.original);
|
|
36
50
|
}
|
|
37
|
-
return;
|
|
38
51
|
}
|
|
39
|
-
|
|
52
|
+
else {
|
|
53
|
+
await this._listCommands();
|
|
54
|
+
}
|
|
55
|
+
await app.hooks.runHook('command:after', app, commandArgs);
|
|
40
56
|
}
|
|
41
57
|
async _listCommands() {
|
|
42
58
|
const commands = Object.keys(this.commands)
|
package/lib/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,IAAI,MAAM,cAAc,CAAC;AAChC,OAAO,IAAI,MAAM,MAAM,CAAC;AAQxB,MAAM,OAAO,GAAG;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/lib/context.d.ts
CHANGED
|
@@ -21,14 +21,41 @@ declare interface Context {
|
|
|
21
21
|
on: <T extends keyof ContextEvents>(event: T, listener: ContextEvents[T]) => this;
|
|
22
22
|
emit: <T extends keyof ContextEvents>(event: T, ...args: Parameters<ContextEvents[T]>) => boolean;
|
|
23
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Context class.
|
|
26
|
+
*/
|
|
24
27
|
declare class Context extends EventEmitter {
|
|
28
|
+
/**
|
|
29
|
+
* Application this context belongs to.
|
|
30
|
+
*/
|
|
25
31
|
app: App;
|
|
32
|
+
/**
|
|
33
|
+
* Format for HTTP exceptions.
|
|
34
|
+
*/
|
|
26
35
|
exceptionFormat: string;
|
|
36
|
+
/**
|
|
37
|
+
* WebSocket JSON mode.
|
|
38
|
+
*/
|
|
27
39
|
jsonMode: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Logger with request id.
|
|
42
|
+
*/
|
|
28
43
|
log: ChildLogger;
|
|
44
|
+
/**
|
|
45
|
+
* Router dispatch plan.
|
|
46
|
+
*/
|
|
29
47
|
plan: Plan | null;
|
|
48
|
+
/**
|
|
49
|
+
* HTTP request information.
|
|
50
|
+
*/
|
|
30
51
|
req: ServerRequest;
|
|
52
|
+
/**
|
|
53
|
+
* HTTP response information.
|
|
54
|
+
*/
|
|
31
55
|
res: ServerResponse;
|
|
56
|
+
/**
|
|
57
|
+
* Non-persistent data storage and exchange for the current request.
|
|
58
|
+
*/
|
|
32
59
|
stash: Record<string, any>;
|
|
33
60
|
_flash: SessionData | undefined;
|
|
34
61
|
_params: Params | undefined;
|
|
@@ -36,32 +63,104 @@ declare class Context extends EventEmitter {
|
|
|
36
63
|
_ws: WeakRef<WebSocket> | null;
|
|
37
64
|
constructor(app: App, req: http.IncomingMessage, res: http.ServerResponse, options: ServerRequestOptions);
|
|
38
65
|
[EventEmitter.captureRejectionSymbol](error: Error): void;
|
|
66
|
+
/**
|
|
67
|
+
* Select best possible representation for resource.
|
|
68
|
+
*/
|
|
39
69
|
accepts(allowed?: string[]): string[] | null;
|
|
70
|
+
/**
|
|
71
|
+
* Application config shortcut.
|
|
72
|
+
*/
|
|
40
73
|
get config(): Record<string, any>;
|
|
74
|
+
/**
|
|
75
|
+
* Data storage persistent only for the next request.
|
|
76
|
+
*/
|
|
41
77
|
flash(): Promise<Record<string, any>>;
|
|
78
|
+
/**
|
|
79
|
+
* Handle WebSocket upgrade, used by servers.
|
|
80
|
+
*/
|
|
42
81
|
handleUpgrade(ws: WebSocket): void;
|
|
82
|
+
/**
|
|
83
|
+
* Home directory shortcut.
|
|
84
|
+
*/
|
|
43
85
|
get home(): Path;
|
|
86
|
+
/**
|
|
87
|
+
* Check if WebSocket connection has been accepted.
|
|
88
|
+
*/
|
|
44
89
|
get isAccepted(): boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Check if WebSocket connection has been established.
|
|
92
|
+
*/
|
|
45
93
|
get isEstablished(): boolean;
|
|
94
|
+
/**
|
|
95
|
+
* Check if session is active.
|
|
96
|
+
*/
|
|
46
97
|
get isSessionActive(): boolean;
|
|
98
|
+
/**
|
|
99
|
+
* Check if HTTP request is a WebSocket handshake.
|
|
100
|
+
*/
|
|
47
101
|
get isWebSocket(): boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Accept WebSocket connection and activate JSON mode.
|
|
104
|
+
*/
|
|
48
105
|
json(fn: WebSocketHandler): this;
|
|
106
|
+
/**
|
|
107
|
+
* Model shortcut.
|
|
108
|
+
*/
|
|
49
109
|
get models(): Record<string, any>;
|
|
110
|
+
/**
|
|
111
|
+
* GET and POST parameters.
|
|
112
|
+
*/
|
|
50
113
|
params(options?: BusboyConfig): Promise<Params>;
|
|
114
|
+
/**
|
|
115
|
+
* Accept WebSocket connection.
|
|
116
|
+
*/
|
|
51
117
|
plain(fn: WebSocketHandler): this;
|
|
118
|
+
/**
|
|
119
|
+
* Send `302` redirect response.
|
|
120
|
+
*/
|
|
52
121
|
redirectTo(target: string, options?: {
|
|
53
122
|
status?: number;
|
|
54
123
|
values?: Record<string, any>;
|
|
55
124
|
}): Promise<void>;
|
|
125
|
+
/**
|
|
126
|
+
* Render dynamic content.
|
|
127
|
+
*/
|
|
56
128
|
render(options?: RenderOptions, stash?: Record<string, any>): Promise<boolean>;
|
|
129
|
+
/**
|
|
130
|
+
* Try to render dynamic content to string.
|
|
131
|
+
*/
|
|
57
132
|
renderToString(options: RenderOptions, stash?: Record<string, any>): Promise<string | null>;
|
|
133
|
+
/**
|
|
134
|
+
* Automatically select best possible representation for resource.
|
|
135
|
+
*/
|
|
58
136
|
respondTo(spec: Record<string, MojoAction>): Promise<void>;
|
|
137
|
+
/**
|
|
138
|
+
* Send static file.
|
|
139
|
+
*/
|
|
59
140
|
sendFile(file: Path): Promise<void>;
|
|
141
|
+
/**
|
|
142
|
+
* Get JSON schema for validation.
|
|
143
|
+
*/
|
|
60
144
|
schema(schema: Record<string, any> | string): ValidatorFunction | null;
|
|
145
|
+
/**
|
|
146
|
+
* Persistent data storage for the next few requests.
|
|
147
|
+
*/
|
|
61
148
|
session(): Promise<SessionData>;
|
|
149
|
+
/**
|
|
150
|
+
* HTTP/WebSocket user agent shortcut.
|
|
151
|
+
*/
|
|
62
152
|
get ua(): UserAgent;
|
|
153
|
+
/**
|
|
154
|
+
* Generate URL for route of path.
|
|
155
|
+
*/
|
|
63
156
|
urlFor(target: string | undefined, values?: Record<string, any>): string | null;
|
|
157
|
+
/**
|
|
158
|
+
* Generate URL for static file.
|
|
159
|
+
*/
|
|
64
160
|
urlForFile(path: string): string;
|
|
161
|
+
/**
|
|
162
|
+
* Established WebSocket connection.
|
|
163
|
+
*/
|
|
65
164
|
get ws(): WebSocket | null;
|
|
66
165
|
_urlForPath(path: string, isWebSocket: boolean): string;
|
|
67
166
|
}
|
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 for validation.
|
|
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/mime.d.ts
CHANGED
package/lib/mime.js
CHANGED
|
@@ -1,12 +1,25 @@
|
|
|
1
1
|
import mime from 'mime-types';
|
|
2
|
-
const COMMON = {
|
|
3
|
-
html: 'text/html; charset=utf-8',
|
|
4
|
-
json: 'application/json; charset=utf-8',
|
|
5
|
-
txt: 'text/plain; charset=utf-8',
|
|
6
|
-
yaml: 'text/yaml; charset=utf-8'
|
|
7
|
-
};
|
|
8
2
|
export class Mime {
|
|
3
|
+
constructor() {
|
|
4
|
+
this.custom = {
|
|
5
|
+
html: 'text/html; charset=utf-8',
|
|
6
|
+
json: 'application/json; charset=utf-8',
|
|
7
|
+
txt: 'text/plain; charset=utf-8',
|
|
8
|
+
yaml: 'text/yaml; charset=utf-8'
|
|
9
|
+
};
|
|
10
|
+
this._reverseCustom = undefined;
|
|
11
|
+
}
|
|
9
12
|
detect(accepts) {
|
|
13
|
+
if (this._reverseCustom === undefined) {
|
|
14
|
+
this._reverseCustom = {};
|
|
15
|
+
for (const [name, value] of Object.entries(this.custom)) {
|
|
16
|
+
const match = value.match(/^\s*([^,; ]+)/);
|
|
17
|
+
if (match === null)
|
|
18
|
+
continue;
|
|
19
|
+
this._reverseCustom[match[1]] = name;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
const reverse = this._reverseCustom;
|
|
10
23
|
const types = {};
|
|
11
24
|
for (const accept of accepts.split(/\s*,\s*/)) {
|
|
12
25
|
const match = accept.match(/^\s*([^,; ]+)(?:\s*;\s*q\s*=\s*(\d+(?:\.\d+)?))?\s*$/i);
|
|
@@ -14,11 +27,16 @@ export class Mime {
|
|
|
14
27
|
continue;
|
|
15
28
|
types[match[1].toLowerCase()] = parseFloat(match[2] ?? 1);
|
|
16
29
|
}
|
|
17
|
-
const
|
|
18
|
-
|
|
30
|
+
const exts = [];
|
|
31
|
+
for (const type of Object.keys(types).sort((a, b) => types[b] - types[a])) {
|
|
32
|
+
const ext = reverse[type] ?? mime.extension(type);
|
|
33
|
+
if (typeof ext === 'string')
|
|
34
|
+
exts.push(ext);
|
|
35
|
+
}
|
|
36
|
+
return exts;
|
|
19
37
|
}
|
|
20
38
|
extType(ext) {
|
|
21
|
-
return
|
|
39
|
+
return this.custom[ext] ?? mime.types[ext] ?? null;
|
|
22
40
|
}
|
|
23
41
|
}
|
|
24
42
|
//# sourceMappingURL=mime.js.map
|
package/lib/mime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mime.js","sourceRoot":"","sources":["../src/mime.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,YAAY,CAAC;AAE9B,MAAM,
|
|
1
|
+
{"version":3,"file":"mime.js","sourceRoot":"","sources":["../src/mime.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,YAAY,CAAC;AAE9B,MAAM,OAAO,IAAI;IAAjB;QACE,WAAM,GAA2B;YAC/B,IAAI,EAAE,0BAA0B;YAChC,IAAI,EAAE,iCAAiC;YACvC,GAAG,EAAE,2BAA2B;YAChC,IAAI,EAAE,0BAA0B;SACjC,CAAC;QACF,mBAAc,GAAuC,SAAS,CAAC;IA+BjE,CAAC;IA7BC,MAAM,CAAC,OAAe;QACpB,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE;YACrC,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;YACzB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBACvD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;gBAC3C,IAAI,KAAK,KAAK,IAAI;oBAAE,SAAS;gBAC7B,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;aACtC;SACF;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC;QAEpC,MAAM,KAAK,GAA2B,EAAE,CAAC;QACzC,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;YAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;YACpF,IAAI,KAAK,KAAK,IAAI;gBAAE,SAAS;YAC7B,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;SAC3D;QAED,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;YACzE,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAClD,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC7C;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,GAAW;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IACrD,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { inspect } from 'util';
|
|
2
|
+
export default function defaultHelpersPlugin(app) {
|
|
3
|
+
app.addHelper('currentRoute', currentRoute);
|
|
4
|
+
app.decorateContext('inspect', (object, options) => inspect(object, options));
|
|
5
|
+
}
|
|
6
|
+
function currentRoute(ctx) {
|
|
7
|
+
const plan = ctx.plan;
|
|
8
|
+
if (plan === null)
|
|
9
|
+
return null;
|
|
10
|
+
const endpoint = plan.endpoint;
|
|
11
|
+
if (endpoint === undefined)
|
|
12
|
+
return null;
|
|
13
|
+
return endpoint.customName ?? endpoint.defaultName ?? null;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=default-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-helpers.js","sourceRoot":"","sources":["../../src/plugins/default-helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,OAAO,EAAC,MAAM,MAAM,CAAC;AAE7B,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,GAAY;IACvD,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;IAC5C,GAAG,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,MAA2B,EAAE,OAAuB,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AACrH,CAAC;AAED,SAAS,YAAY,CAAC,GAAgB;IACpC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IACtB,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC/B,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,WAAW,IAAI,IAAI,CAAC;AAC7D,CAAC"}
|
|
@@ -1,23 +1,11 @@
|
|
|
1
|
-
import { inspect } from 'util';
|
|
2
1
|
import DOM, { SafeString } from '@mojojs/dom';
|
|
3
2
|
export default function viewHelpersPlugin(app) {
|
|
4
|
-
app.addHelper('currentRoute', currentRoute);
|
|
5
|
-
app.decorateContext('inspect', (object, options) => inspect(object, options));
|
|
6
3
|
app.addHelper('include', include);
|
|
7
4
|
app.addHelper('mojoFaviconTag', mojoFaviconTag);
|
|
8
5
|
app.addHelper('scriptTag', scriptTag);
|
|
9
6
|
app.addHelper('styleTag', styleTag);
|
|
10
7
|
app.addHelper('tag', tag);
|
|
11
8
|
}
|
|
12
|
-
function currentRoute(ctx) {
|
|
13
|
-
const plan = ctx.plan;
|
|
14
|
-
if (plan === null)
|
|
15
|
-
return null;
|
|
16
|
-
const endpoint = plan.endpoint;
|
|
17
|
-
if (endpoint === undefined)
|
|
18
|
-
return null;
|
|
19
|
-
return endpoint.customName ?? endpoint.defaultName ?? null;
|
|
20
|
-
}
|
|
21
9
|
async function include(ctx, options, stash) {
|
|
22
10
|
return await ctx.renderToString(options, stash);
|
|
23
11
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view-helpers.js","sourceRoot":"","sources":["../../src/plugins/view-helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"view-helpers.js","sourceRoot":"","sources":["../../src/plugins/view-helpers.ts"],"names":[],"mappings":"AACA,OAAO,GAAG,EAAE,EAAC,UAAU,EAAC,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,GAAY;IACpD,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAElC,GAAG,CAAC,SAAS,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;IAChD,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACtC,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACpC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,GAAgB,EAAE,OAAsB,EAAE,KAA0B;IACzF,OAAO,MAAM,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,cAAc,CAAC,GAAgB;IACtC,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,EAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAC,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,SAAS,CAAC,GAAgB,EAAE,MAAc;IACjD,OAAO,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAC,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAC,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,QAAQ,CAAC,GAAgB,EAAE,MAAc;IAChD,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,EAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAC,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,GAAG,CACV,GAAgB,EAChB,IAAY,EACZ,QAAgC,EAAE,EAClC,UAA+B,EAAE;IAEjC,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AACrE,CAAC"}
|
package/lib/router.d.ts
CHANGED
|
@@ -22,9 +22,9 @@ export declare class Router extends Route {
|
|
|
22
22
|
addType(name: string, value: PlaceholderType): this;
|
|
23
23
|
dispatch(ctx: MojoContext): Promise<boolean>;
|
|
24
24
|
lookup(name: string): Route | null;
|
|
25
|
-
plot(spec: RouteSpec): Plan | null
|
|
25
|
+
plot(spec: RouteSpec): Promise<Plan | null>;
|
|
26
26
|
warmup(): Promise<void>;
|
|
27
|
-
_getPlan(ctx: MojoContext): Plan | null
|
|
28
|
-
_walk(plan: Plan, route: Route, spec: RouteSpec): boolean
|
|
27
|
+
_getPlan(ctx: MojoContext): Promise<Plan | null>;
|
|
28
|
+
_walk(plan: Plan, route: Route, spec: RouteSpec): Promise<boolean>;
|
|
29
29
|
}
|
|
30
30
|
export {};
|