@mojojs/core 0.18.0 → 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/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();
package/lib/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
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,11 +3,23 @@ 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 = {};
12
24
  this._flash = undefined;
13
25
  this._params = undefined;
@@ -22,6 +34,9 @@ class Context extends EventEmitter {
22
34
  [EventEmitter.captureRejectionSymbol](error) {
23
35
  this.exception(error);
24
36
  }
37
+ /**
38
+ * Select best possible representation for resource.
39
+ */
25
40
  accepts(allowed) {
26
41
  const formats = this.app.mime.detect(this.req.headers.accept ?? '');
27
42
  const stash = this.stash;
@@ -32,9 +47,15 @@ class Context extends EventEmitter {
32
47
  const results = formats.filter(format => allowed.includes(format));
33
48
  return results.length > 0 ? results : null;
34
49
  }
50
+ /**
51
+ * Application config shortcut.
52
+ */
35
53
  get config() {
36
54
  return this.app.config;
37
55
  }
56
+ /**
57
+ * Data storage persistent only for the next request.
58
+ */
38
59
  async flash() {
39
60
  if (this._flash === undefined) {
40
61
  const session = await this.session();
@@ -54,33 +75,60 @@ class Context extends EventEmitter {
54
75
  }
55
76
  return this._flash;
56
77
  }
78
+ /**
79
+ * Handle WebSocket upgrade, used by servers.
80
+ */
57
81
  handleUpgrade(ws) {
58
82
  this._ws = new WeakRef(ws);
59
83
  this.emit('connection', ws);
60
84
  ws.on('error', error => this.exception(error));
61
85
  }
86
+ /**
87
+ * Home directory shortcut.
88
+ */
62
89
  get home() {
63
90
  return this.app.home;
64
91
  }
92
+ /**
93
+ * Check if WebSocket connection has been accepted.
94
+ */
65
95
  get isAccepted() {
66
96
  return this.listenerCount('connection') > 0;
67
97
  }
98
+ /**
99
+ * Check if WebSocket connection has been established.
100
+ */
68
101
  get isEstablished() {
69
102
  return this._ws !== null;
70
103
  }
104
+ /**
105
+ * Check if session is active.
106
+ */
71
107
  get isSessionActive() {
72
108
  return this._session !== undefined;
73
109
  }
110
+ /**
111
+ * Check if HTTP request is a WebSocket handshake.
112
+ */
74
113
  get isWebSocket() {
75
114
  return this.req.isWebSocket;
76
115
  }
116
+ /**
117
+ * Accept WebSocket connection and activate JSON mode.
118
+ */
77
119
  json(fn) {
78
120
  this.jsonMode = true;
79
121
  return this.on('connection', fn);
80
122
  }
123
+ /**
124
+ * Model shortcut.
125
+ */
81
126
  get models() {
82
127
  return this.app.models;
83
128
  }
129
+ /**
130
+ * GET and POST parameters.
131
+ */
84
132
  async params(options) {
85
133
  if (this._params === undefined) {
86
134
  const req = this.req;
@@ -91,15 +139,24 @@ class Context extends EventEmitter {
91
139
  }
92
140
  return this._params;
93
141
  }
142
+ /**
143
+ * Accept WebSocket connection.
144
+ */
94
145
  plain(fn) {
95
146
  return this.on('connection', fn);
96
147
  }
148
+ /**
149
+ * Send `302` redirect response.
150
+ */
97
151
  async redirectTo(target, options = {}) {
98
152
  await this.res
99
153
  .status(options.status ?? 302)
100
154
  .set('Location', this.urlFor(target, options.values) ?? '')
101
155
  .send();
102
156
  }
157
+ /**
158
+ * Render dynamic content.
159
+ */
103
160
  async render(options = {}, stash) {
104
161
  if (typeof options === 'string')
105
162
  options = { view: options };
@@ -114,6 +171,9 @@ class Context extends EventEmitter {
114
171
  }
115
172
  return await app.renderer.respond(this, result, { status: options.status });
116
173
  }
174
+ /**
175
+ * Try to render dynamic content to string.
176
+ */
117
177
  async renderToString(options, stash) {
118
178
  if (typeof options === 'string')
119
179
  options = { view: options };
@@ -121,6 +181,9 @@ class Context extends EventEmitter {
121
181
  const result = await this.app.renderer.render(this, options);
122
182
  return result === null ? null : result.output.toString();
123
183
  }
184
+ /**
185
+ * Automatically select best possible representation for resource.
186
+ */
124
187
  async respondTo(spec) {
125
188
  const formats = this.accepts() ?? [];
126
189
  for (const format of formats) {
@@ -135,20 +198,35 @@ class Context extends EventEmitter {
135
198
  }
136
199
  await this.res.status(204).send();
137
200
  }
201
+ /**
202
+ * Send static file.
203
+ */
138
204
  async sendFile(file) {
139
205
  return await this.app.static.serveFile(this, file);
140
206
  }
207
+ /**
208
+ * Get JSON schema for validation.
209
+ */
141
210
  schema(schema) {
142
211
  return this.app.validator.schema(schema);
143
212
  }
213
+ /**
214
+ * Persistent data storage for the next few requests.
215
+ */
144
216
  async session() {
145
217
  if (this._session === undefined)
146
218
  this._session = (await this.app.session.load(this)) ?? {};
147
219
  return this._session;
148
220
  }
221
+ /**
222
+ * HTTP/WebSocket user agent shortcut.
223
+ */
149
224
  get ua() {
150
225
  return this.app.ua;
151
226
  }
227
+ /**
228
+ * Generate URL for route of path.
229
+ */
152
230
  urlFor(target, values) {
153
231
  if (target === undefined || target === 'current') {
154
232
  if (this.plan === null)
@@ -165,11 +243,17 @@ class Context extends EventEmitter {
165
243
  return null;
166
244
  return this._urlForPath(route.render(values), route.hasWebSocket());
167
245
  }
246
+ /**
247
+ * Generate URL for static file.
248
+ */
168
249
  urlForFile(path) {
169
250
  if (ABSOLUTE.test(path))
170
251
  return path;
171
252
  return this.req.baseURL + this.app.static.filePath(path);
172
253
  }
254
+ /**
255
+ * Established WebSocket connection.
256
+ */
173
257
  get ws() {
174
258
  return this._ws?.deref() ?? null;
175
259
  }
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
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;;GAEG;AACH,MAAM,OAAQ,SAAQ,YAAY;IAuChC,YAAY,GAAQ,EAAE,GAAyB,EAAE,GAAwB,EAAE,OAA6B;QACtG,KAAK,CAAC,EAAC,iBAAiB,EAAE,IAAI,EAAC,CAAC,CAAC;QA/BnC;;WAEG;QACH,aAAQ,GAAG,KAAK,CAAC;QAKjB;;WAEG;QACH,SAAI,GAAgB,IAAI,CAAC;QASzB;;WAEG;QACH,UAAK,GAAwB,EAAE,CAAC;QAEhC,WAAM,GAA4B,SAAS,CAAC;QAC5C,YAAO,GAAuB,SAAS,CAAC;QACxC,aAAQ,GAAoC,SAAS,CAAC;QACtD,QAAG,GAA8B,IAAI,CAAC;QAKpC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC,eAAe,CAAC;QAC3C,IAAI,CAAC,GAAG,GAAG,IAAI,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC,GAAG,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAC,CAAC,CAAC;IAC5D,CAAC;IAED,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC,KAAY;QAC/C,IAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,OAAkB;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ;YAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE9D,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAEtE,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACnE,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;YAC7B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;gBAC/B,GAAG,EAAE,UAAU,MAAmB,EAAE,IAAY;oBAC9C,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;wBAAE,OAAO,SAAS,CAAC;oBACjD,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5B,CAAC;gBACD,GAAG,EAAE,UAAU,MAAmB,EAAE,IAAY,EAAE,KAAU;oBAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;oBACzC,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;oBACxB,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;oBAC7B,OAAO,IAAI,CAAC;gBACd,CAAC;aACF,CAAC,CAAC;SACJ;QAED,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,EAAa;QACzB,IAAI,CAAC,GAAG,GAAG,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAC5B,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAE,IAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,EAAoB;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,OAAO,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,EAAgB,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,OAAsB;QACjC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;YAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YACrB,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YACtD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;gBACnD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;aAC5B;SACF;QAED,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,EAAoB;QACxB,OAAO,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,EAAgB,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,MAAc,EAAE,UAA2D,EAAE;QAC5F,MAAM,IAAI,CAAC,GAAG;aACX,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC;aAC7B,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;aAC1D,IAAI,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,UAAyB,EAAE,EAAE,KAA2B;QACnE,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,GAAG,EAAC,IAAI,EAAE,OAAO,EAAC,CAAC;QAC3D,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAE1D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACrB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxD,IAAI,MAAM,KAAK,IAAI,EAAE;YACnB,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YACzE,OAAO,KAAK,CAAC;SACd;QAED,OAAO,MAAM,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAC,CAAC,CAAC;IAC5E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,OAAsB,EAAE,KAA2B;QACtE,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,GAAG,EAAC,IAAI,EAAE,OAAO,EAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7D,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC3D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,IAAgC;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;QAErC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,SAAS;gBAAE,SAAS;YACzC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;YACzB,OAAO;SACR;QAED,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE;YAC1B,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACrB,OAAO;SACR;QAED,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,IAAU;QACvB,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAoC;QACzC,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3F,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAA0B,EAAE,MAA4B;QAC7D,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE;YAChD,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YACpC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACxC,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;SACxD;QAED,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC;QAC7D,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;QAEzC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAChC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAY;QACrB,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACrC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED;;OAEG;IACH,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC;IACnC,CAAC;IAED,WAAW,CAAC,IAAY,EAAE,WAAoB;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;QACpC,OAAO,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACxD,CAAC;CACF;AAED,OAAO,EAAC,OAAO,EAAC,CAAC"}
package/lib/mime.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  export declare class Mime {
2
+ custom: Record<string, string>;
3
+ _reverseCustom: Record<string, string> | undefined;
2
4
  detect(accepts: string): string[];
3
5
  extType(ext: string): string | null;
4
6
  }
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 detected = Object.keys(types).sort((a, b) => types[b] - types[a]);
18
- return detected.map(type => mime.extension(type)).filter(ext => ext !== false);
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 COMMON[ext] ?? mime.types[ext] ?? null;
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,MAAM,GAA2B;IACrC,IAAI,EAAE,0BAA0B;IAChC,IAAI,EAAE,iCAAiC;IACvC,GAAG,EAAE,2BAA2B;IAChC,IAAI,EAAE,0BAA0B;CACjC,CAAC;AAEF,MAAM,OAAO,IAAI;IACf,MAAM,CAAC,OAAe;QACpB,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,QAAQ,GAAG,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,CAAC;QACxE,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,KAAK,CAAa,CAAC;IAC7F,CAAC;IAED,OAAO,CAAC,GAAW;QACjB,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IAChD,CAAC;CACF"}
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,2 @@
1
+ import type { MojoApp } from '../types.js';
2
+ export default function defaultHelpersPlugin(app: MojoApp): void;
@@ -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":"AAEA,OAAO,EAAC,OAAO,EAAC,MAAM,MAAM,CAAC;AAC7B,OAAO,GAAG,EAAE,EAAC,UAAU,EAAC,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,GAAY;IACpD,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;IAE5C,GAAG,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,MAA2B,EAAE,OAAuB,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAEnH,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,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;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"}
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 {};
package/lib/router.js CHANGED
@@ -23,7 +23,7 @@ export class Router extends Route {
23
23
  return this;
24
24
  }
25
25
  async dispatch(ctx) {
26
- const plan = this._getPlan(ctx);
26
+ const plan = await this._getPlan(ctx);
27
27
  if (plan === null)
28
28
  return false;
29
29
  ctx.plan = plan;
@@ -79,12 +79,12 @@ export class Router extends Route {
79
79
  }
80
80
  return this._lookupIndex[name] === undefined ? null : this._lookupIndex[name];
81
81
  }
82
- plot(spec) {
82
+ async plot(spec) {
83
83
  const plan = new Plan();
84
84
  const steps = plan.steps;
85
85
  const stops = plan.stops;
86
86
  for (const child of this.children) {
87
- if (this._walk(plan, child, spec))
87
+ if (await this._walk(plan, child, spec))
88
88
  break;
89
89
  steps.pop();
90
90
  stops.pop();
@@ -94,7 +94,7 @@ export class Router extends Route {
94
94
  async warmup() {
95
95
  Object.assign(this.controllers, await util.loadModules(this.controllerPaths));
96
96
  }
97
- _getPlan(ctx) {
97
+ async _getPlan(ctx) {
98
98
  const req = ctx.req;
99
99
  const realMethod = req.method;
100
100
  if (realMethod === null)
@@ -107,7 +107,7 @@ export class Router extends Route {
107
107
  ctx.log.trace(`${realMethod} "${path}"`);
108
108
  // Cache deactivated
109
109
  if (this.cache === null)
110
- return this.plot({ ctx, method, path, websocket: isWebSocket });
110
+ return await this.plot({ ctx, method, path, websocket: isWebSocket });
111
111
  // Cached
112
112
  const cacheKey = `${method}:${path}:${isWebSocket.toString()}`;
113
113
  const cache = this.cache;
@@ -115,13 +115,13 @@ export class Router extends Route {
115
115
  if (cachedPlan !== undefined)
116
116
  return cachedPlan;
117
117
  // Not yet cached
118
- const plan = this.plot({ ctx, method, path, websocket: isWebSocket });
118
+ const plan = await this.plot({ ctx, method, path, websocket: isWebSocket });
119
119
  if (plan === null)
120
120
  return null;
121
121
  cache.set(cacheKey, plan);
122
122
  return plan;
123
123
  }
124
- _walk(plan, route, spec) {
124
+ async _walk(plan, route, spec) {
125
125
  // Path
126
126
  const isEndpoint = route.isEndpoint();
127
127
  const result = route.pattern.matchPartial(spec.path, { isEndpoint });
@@ -149,8 +149,9 @@ export class Router extends Route {
149
149
  return false;
150
150
  const conditions = root.conditions;
151
151
  for (const value of route.requirements) {
152
- if (spec.ctx === undefined || !conditions[value.condition](spec.ctx, value.requirement))
152
+ if (spec.ctx === undefined || (await conditions[value.condition](spec.ctx, value.requirement)) === false) {
153
153
  return false;
154
+ }
154
155
  }
155
156
  }
156
157
  // Endpoint
@@ -162,7 +163,7 @@ export class Router extends Route {
162
163
  for (const child of route.children) {
163
164
  const old = spec.path;
164
165
  spec.path = result.remainder;
165
- if (this._walk(plan, child, spec) === true)
166
+ if ((await this._walk(plan, child, spec)) === true)
166
167
  return true;
167
168
  spec.path = old;
168
169
  steps.pop();