@mojojs/core 1.11.0 → 1.12.1

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 CHANGED
@@ -20,7 +20,7 @@ If you want to stay up to date on the
20
20
 
21
21
  ## Features
22
22
 
23
- * 3x faster than Express.js.
23
+ * 3x faster than Express.js and 15x faster than Mojolicious.
24
24
  * A **real-time web framework**, allowing you to easily grow single file prototypes into well-structured MVC web
25
25
  applications.
26
26
  * Powerful out of the box with RESTful routes, WebSockets, plugins, commands, logging, templates, content negotiation,
@@ -34,7 +34,8 @@ If you want to stay up to date on the
34
34
  * HTML/XML parser with CSS selector support.
35
35
  * No frontend framework, mojo.js is for the **backend**.
36
36
  * Written in [TypeScript](https://www.typescriptlang.org), with very clean `class` and `async`/`await` based APIs.
37
- * Very few dependencies, to avoid supply chain attacks and allow for "Perl-grade" **long term support**.
37
+ * Very few dependencies, to avoid supply chain attacks and allow for "Perl-grade" long term support and
38
+ **backwards compatibility**.
38
39
  * Fresh code based upon decades of experience developing [Mojolicious](https://mojolicious.org) and
39
40
  [Catalyst](http://catalyst.perl.org), free and open source.
40
41
 
package/lib/app.d.ts CHANGED
@@ -15,9 +15,9 @@ import { MockUserAgent } from './user-agent/mock.js';
15
15
  import { TestUserAgent } from './user-agent/test.js';
16
16
  import { Validator } from './validator.js';
17
17
  import Path from '@mojojs/path';
18
- declare type AppHook = (app: App, ...args: any[]) => any;
19
- declare type ContextHook = (app: MojoContext, ...args: any[]) => any;
20
- declare type Decoration = ((...args: any[]) => any) | {
18
+ type AppHook = (app: App, ...args: any[]) => any;
19
+ type ContextHook = (app: MojoContext, ...args: any[]) => any;
20
+ type Decoration = ((...args: any[]) => any) | {
21
21
  get?: () => any;
22
22
  set?: (value: any) => any;
23
23
  };
package/lib/context.d.ts CHANGED
@@ -13,7 +13,7 @@ import type { BusboyConfig } from 'busboy';
13
13
  import EventEmitter from 'node:events';
14
14
  import { Params } from './body/params.js';
15
15
  import { SafeString } from './util.js';
16
- declare type WebSocketHandler = (ws: WebSocket) => void | Promise<void>;
16
+ type WebSocketHandler = (ws: WebSocket) => void | Promise<void>;
17
17
  interface ContextEvents {
18
18
  connection: (ws: WebSocket) => void;
19
19
  finish: () => void;
package/lib/headers.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- declare type HeaderBuffer = Record<string, {
1
+ type HeaderBuffer = Record<string, {
2
2
  normalCase: string;
3
3
  values: string[];
4
4
  }>;
@@ -13,6 +13,14 @@ export declare class Headers {
13
13
  * Append header value.
14
14
  */
15
15
  append(name: string, value: string): void;
16
+ /**
17
+ * Clone headers.
18
+ */
19
+ clone(): Headers;
20
+ /**
21
+ * Remove hop-by-hop headers that should not be retransmitted.
22
+ */
23
+ dehop(): void;
16
24
  /**
17
25
  * Get header value.
18
26
  */
@@ -21,6 +29,10 @@ export declare class Headers {
21
29
  * Get all headers values individually.
22
30
  */
23
31
  getAll(name: string): string[];
32
+ /**
33
+ * Remove header.
34
+ */
35
+ remove(name: string): void;
24
36
  /**
25
37
  * Set header value.
26
38
  */
package/lib/headers.js CHANGED
@@ -1,3 +1,13 @@
1
+ const HOP_BY_HOP = [
2
+ 'connection',
3
+ 'keep-alive',
4
+ 'proxy-authenticate',
5
+ 'proxy-authorization',
6
+ 'te',
7
+ 'trailer',
8
+ 'transfer-encoding',
9
+ 'upgrade'
10
+ ];
1
11
  /**
2
12
  * HTTP header class.
3
13
  */
@@ -20,6 +30,19 @@ export class Headers {
20
30
  headers[lowerCase].values = [[...headers[lowerCase].values, value].join(', ')];
21
31
  }
22
32
  }
33
+ /**
34
+ * Clone headers.
35
+ */
36
+ clone() {
37
+ return new Headers(this.toArray());
38
+ }
39
+ /**
40
+ * Remove hop-by-hop headers that should not be retransmitted.
41
+ */
42
+ dehop() {
43
+ const headers = this._getHeaders();
44
+ HOP_BY_HOP.forEach(name => delete headers[name]);
45
+ }
23
46
  /**
24
47
  * Get header value.
25
48
  */
@@ -36,6 +59,12 @@ export class Headers {
36
59
  const values = this._getHeaders()[name.toLowerCase()]?.values ?? [];
37
60
  return [...values];
38
61
  }
62
+ /**
63
+ * Remove header.
64
+ */
65
+ remove(name) {
66
+ delete this._getHeaders()[name.toLowerCase()];
67
+ }
39
68
  /**
40
69
  * Set header value.
41
70
  */
@@ -1 +1 @@
1
- {"version":3,"file":"headers.js","sourceRoot":"","sources":["../src/headers.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,OAAO;IAIlB,YAAY,OAAiB,EAAE;QAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAY,EAAE,KAAa;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAEnE,IAAI,SAAS,KAAK,YAAY,EAAE;YAC9B,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACvC;aAAM;YACL,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;SAChF;IACH,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACtD,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACtC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAY;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC;QACpE,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY,EAAE,KAAa;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,GAAG,EAAC,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACH,OAAO;QACL,MAAM,KAAK,GAAG,EAAE,CAAC;QAEjB,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE;YACtD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE;gBACjC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;aACtC;SACF;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE;YACtD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtD;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE;YACtD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE;gBACjC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,KAAK,KAAK,MAAM,CAAC,CAAC;aAClD;SACF;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;IACjC,CAAC;IAED,WAAW;QACT,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC/B,MAAM,OAAO,GAAiB,CAAC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;YACnD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;YACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;gBACvC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACrB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrC,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,SAAS,EAAE;oBACpC,OAAO,CAAC,SAAS,CAAC,GAAG,EAAC,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAC,CAAC;iBAC1D;qBAAM;oBACL,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBACvC;aACF;SACF;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF"}
1
+ {"version":3,"file":"headers.js","sourceRoot":"","sources":["../src/headers.ts"],"names":[],"mappings":"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"}
package/lib/hooks.d.ts CHANGED
@@ -1,15 +1,10 @@
1
1
  import type { MojoApp } from './types.js';
2
- declare type Hook = (...args: any[]) => any;
2
+ import { AsyncHooks } from '@mojojs/util';
3
3
  /**
4
4
  * Hook class.
5
5
  */
6
- export declare class Hooks {
7
- _hooks: Record<string, Hook[]>;
6
+ export declare class Hooks extends AsyncHooks {
8
7
  _lifecycleHookScore: number;
9
- /**
10
- * Add hook.
11
- */
12
- addHook(name: string, fn: Hook): void;
13
8
  /**
14
9
  * Run `command:start` hook with dependencies. Note that this method is EXPERIMENTAL and might change without
15
10
  * warning!
@@ -20,10 +15,6 @@ export declare class Hooks {
20
15
  * warning!
21
16
  */
22
17
  commandAfter(app: MojoApp, commandArgs: string[]): Promise<void>;
23
- /**
24
- * Run hook.
25
- */
26
- runHook(name: string, ...args: any[]): Promise<any>;
27
18
  /**
28
19
  * Run `server:start` hook with dependencies. Note that this method is EXPERIMENTAL and might change without warning!
29
20
  */
@@ -34,6 +25,4 @@ export declare class Hooks {
34
25
  serverStop(app: MojoApp): Promise<void>;
35
26
  _appStart(app: MojoApp): Promise<void>;
36
27
  _appStop(app: MojoApp): Promise<void>;
37
- _prepareHook(chain: Hook[]): (...args: any[]) => Promise<any>;
38
28
  }
39
- export {};
package/lib/hooks.js CHANGED
@@ -1,19 +1,12 @@
1
+ import { AsyncHooks } from '@mojojs/util';
1
2
  /**
2
3
  * Hook class.
3
4
  */
4
- export class Hooks {
5
+ export class Hooks extends AsyncHooks {
5
6
  constructor() {
6
- this._hooks = {};
7
+ super(...arguments);
7
8
  this._lifecycleHookScore = 0;
8
9
  }
9
- /**
10
- * Add hook.
11
- */
12
- addHook(name, fn) {
13
- if (this._hooks[name] === undefined)
14
- this._hooks[name] = [];
15
- this._hooks[name].push(fn);
16
- }
17
10
  /**
18
11
  * Run `command:start` hook with dependencies. Note that this method is EXPERIMENTAL and might change without
19
12
  * warning!
@@ -31,14 +24,6 @@ export class Hooks {
31
24
  await this.runHook('command:after', app, commandArgs);
32
25
  await this._appStop(app);
33
26
  }
34
- /**
35
- * Run hook.
36
- */
37
- async runHook(name, ...args) {
38
- if (this._hooks[name] === undefined)
39
- return await Promise.resolve();
40
- return await this._prepareHook(this._hooks[name])(...args);
41
- }
42
27
  /**
43
28
  * Run `server:start` hook with dependencies. Note that this method is EXPERIMENTAL and might change without warning!
44
29
  */
@@ -63,16 +48,5 @@ export class Hooks {
63
48
  if (this._lifecycleHookScore === 0)
64
49
  await this.runHook('app:stop', app);
65
50
  }
66
- _prepareHook(chain) {
67
- return async function hook(...args) {
68
- return await next(0);
69
- async function next(i, result) {
70
- const fn = chain[i];
71
- if (result !== undefined || fn === undefined)
72
- return result;
73
- return await new Promise(resolve => resolve(fn(...args))).then(next.bind(null, i + 1));
74
- }
75
- };
76
- }
77
51
  }
78
52
  //# sourceMappingURL=hooks.js.map
package/lib/hooks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AAExC;;GAEG;AACH,MAAM,OAAO,KAAM,SAAQ,UAAU;IAArC;;QACE,wBAAmB,GAAG,CAAC,CAAC;IA8C1B,CAAC;IA5CC;;;OAGG;IACH,KAAK,CAAC,aAAa,CAAC,GAAY,EAAE,WAAqB;QACrD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;QACtE,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC1B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,YAAY,CAAC,GAAY,EAAE,WAAqB;QACpD,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;QACtD,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,GAAY;QAC5B,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QACxC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,GAAY;QAC3B,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAY;QAC1B,IAAI,IAAI,CAAC,mBAAmB,KAAK,CAAC;YAAE,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACzE,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAY;QACzB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,mBAAmB,KAAK,CAAC;YAAE,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAC1E,CAAC;CACF"}
package/lib/logger.d.ts CHANGED
@@ -10,7 +10,7 @@ interface LogEvent extends LogContext {
10
10
  time: string;
11
11
  msg: string;
12
12
  }
13
- declare type LogFormatter = (data: LogEvent) => string;
13
+ type LogFormatter = (data: LogEvent) => string;
14
14
  /**
15
15
  * A simple logger class.
16
16
  */
package/lib/renderer.d.ts CHANGED
@@ -10,7 +10,7 @@ interface ViewSuggestion {
10
10
  path: string;
11
11
  variant?: string;
12
12
  }
13
- declare type ViewIndex = Record<string, ViewSuggestion[]>;
13
+ type ViewIndex = Record<string, ViewSuggestion[]>;
14
14
  interface ViewEngine {
15
15
  render: (ctx: MojoContext, options: MojoRenderOptions) => Promise<Buffer>;
16
16
  }
@@ -5,7 +5,7 @@ interface MatchOptions {
5
5
  interface PlaceholderTypes {
6
6
  [name: string]: PlaceholderType;
7
7
  }
8
- declare type ASTNode = [symbol, ...string[]];
8
+ type ASTNode = [symbol, ...string[]];
9
9
  /**
10
10
  * Route pattern class.
11
11
  */
package/lib/router.d.ts CHANGED
@@ -2,14 +2,14 @@ import type { MojoContext, PlaceholderType } from './types.js';
2
2
  import { Cache } from './cache.js';
3
3
  import { Plan } from './router/plan.js';
4
4
  import { Route } from './router/route.js';
5
- declare type RouteIndex = Record<string, Route>;
5
+ type RouteIndex = Record<string, Route>;
6
6
  interface RouteSpec {
7
7
  ctx?: MojoContext;
8
8
  method: string;
9
9
  path: string;
10
10
  websocket: boolean;
11
11
  }
12
- declare type RouteCondition = (ctx: MojoContext, requirements: any) => Promise<boolean>;
12
+ type RouteCondition = (ctx: MojoContext, requirements: any) => Promise<boolean>;
13
13
  /**
14
14
  * Router class.
15
15
  */
@@ -1,16 +1,14 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="node" />
3
- /// <reference types="node" />
4
3
  import type { Context } from '../context.js';
5
4
  import type { CookieOptions } from '../types.js';
6
5
  import type { Stream } from 'node:stream';
7
- import EventEmitter from 'node:events';
8
6
  import { Headers } from '../headers.js';
9
- declare type SendResponse = (res: ServerResponse, body?: string | Buffer | Stream) => void;
7
+ type SendResponse = (res: ServerResponse, body?: string | Buffer | Stream) => void;
10
8
  /**
11
9
  * Server response class.
12
10
  */
13
- export declare class ServerResponse extends EventEmitter {
11
+ export declare class ServerResponse {
14
12
  /**
15
13
  * Response headers.
16
14
  */
@@ -1,12 +1,10 @@
1
- import EventEmitter from 'node:events';
2
1
  import { Headers } from '../headers.js';
3
2
  import { stringifyCookie } from './cookie.js';
4
3
  /**
5
4
  * Server response class.
6
5
  */
7
- export class ServerResponse extends EventEmitter {
6
+ export class ServerResponse {
8
7
  constructor(sendResponse) {
9
- super();
10
8
  /**
11
9
  * Response headers.
12
10
  */
@@ -1 +1 @@
1
- {"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/server/response.ts"],"names":[],"mappings":"AAGA,OAAO,YAAY,MAAM,aAAa,CAAC;AACvC,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AACtC,OAAO,EAAC,eAAe,EAAC,MAAM,aAAa,CAAC;AAI5C;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,YAAY;IAqB9C,YAAY,YAA0B;QACpC,KAAK,EAAE,CAAC;QArBV;;WAEG;QACH,YAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QACxB;;WAEG;QACH,WAAM,GAAG,KAAK,CAAC;QACf;;WAEG;QACH,eAAU,GAAG,GAAG,CAAC;QACjB;;WAEG;QACH,kBAAa,GAAkB,IAAI,CAAC;QAEpC,SAAI,GAAiC,SAAS,CAAC;QAK7C,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAY,EAAE,KAAa;QAChC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,GAAY;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,GAAW;QAChB,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,IAA+B;QACxC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;QACzB,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO;QACjC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO;QAE9B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;QACpB,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAClE,IAAI,OAAO,KAAK,SAAS;YAAE,IAAI,GAAG,OAAO,CAAC;QAE1C,IAAI,GAAG,CAAC,eAAe,KAAK,IAAI;YAAE,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAEpF,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY,EAAE,KAAa;QAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,IAAY,EAAE,KAAa,EAAE,OAAsB;QAC3D,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAY,EAAE,OAAgB;QACnC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,IAAY;QACf,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;CACF"}
1
+ {"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/server/response.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AACtC,OAAO,EAAC,eAAe,EAAC,MAAM,aAAa,CAAC;AAI5C;;GAEG;AACH,MAAM,OAAO,cAAc;IAqBzB,YAAY,YAA0B;QApBtC;;WAEG;QACH,YAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QACxB;;WAEG;QACH,WAAM,GAAG,KAAK,CAAC;QACf;;WAEG;QACH,eAAU,GAAG,GAAG,CAAC;QACjB;;WAEG;QACH,kBAAa,GAAkB,IAAI,CAAC;QAEpC,SAAI,GAAiC,SAAS,CAAC;QAI7C,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAY,EAAE,KAAa;QAChC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,GAAY;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,GAAW;QAChB,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,IAA+B;QACxC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;QACzB,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO;QACjC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO;QAE9B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;QACpB,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAClE,IAAI,OAAO,KAAK,SAAS;YAAE,IAAI,GAAG,OAAO,CAAC;QAE1C,IAAI,GAAG,CAAC,eAAe,KAAK,IAAI;YAAE,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAEpF,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY,EAAE,KAAa;QAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,IAAY,EAAE,KAAa,EAAE,OAAsB;QAC3D,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAY,EAAE,OAAgB;QACnC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,IAAY;QACf,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;CACF"}
package/lib/server.d.ts CHANGED
@@ -10,7 +10,7 @@ import https from 'node:https';
10
10
  import { URL } from 'node:url';
11
11
  import { ServerRequest } from './server/request.js';
12
12
  import { WebSocketServer } from 'ws';
13
- declare type ListenArgs = any[];
13
+ type ListenArgs = any[];
14
14
  /**
15
15
  * HTTP and WebSocket server class.
16
16
  */
package/lib/static.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { MojoContext } from './types.js';
2
2
  import Path from '@mojojs/path';
3
- declare type AssetIndex = Record<string, string>;
3
+ type AssetIndex = Record<string, string>;
4
4
  /**
5
5
  * Static file server class.
6
6
  */
package/lib/types.d.ts CHANGED
@@ -21,8 +21,8 @@ export interface JSONSchema {
21
21
  $id?: string;
22
22
  [key: string]: any;
23
23
  }
24
- export declare type MojoApp = App;
25
- export declare type MojoRoute = Route;
24
+ export type MojoApp = App;
25
+ export type MojoRoute = Route;
26
26
  export interface MojoContext extends Context {
27
27
  assetTag: (path: string, attrs?: TagAttrs) => SafeString;
28
28
  buttonTo: (target: URLTarget, attrs: TagAttrs, text: string) => SafeString;
@@ -70,14 +70,14 @@ export interface MojoContext extends Context {
70
70
  weekFieldTag: (name: string, attrs?: TagAttrs) => Promise<SafeString>;
71
71
  [key: string]: any;
72
72
  }
73
- export declare type MojoAction = (ctx: MojoContext, ...args: any[]) => any;
73
+ export type MojoAction = (ctx: MojoContext, ...args: any[]) => any;
74
74
  export interface MojoModels {
75
75
  [key: string]: any;
76
76
  }
77
- export declare type AnyArguments = Array<string | string[] | MojoAction | Record<string, string[] | RegExp>>;
78
- export declare type RouteArguments = Array<string | MojoAction | Record<string, string[] | RegExp>>;
79
- export declare type PlaceholderType = RegExp | string | string[];
80
- export declare type TagAttrs = Record<string, string | boolean | Record<string, string>>;
77
+ export type AnyArguments = Array<string | string[] | MojoAction | Record<string, string[] | RegExp>>;
78
+ export type RouteArguments = Array<string | MojoAction | Record<string, string[] | RegExp>>;
79
+ export type PlaceholderType = RegExp | string | string[];
80
+ export type TagAttrs = Record<string, string | boolean | Record<string, string>>;
81
81
  export interface SessionData {
82
82
  expiration?: number;
83
83
  expires?: number;
@@ -109,7 +109,7 @@ export interface CookieOptions {
109
109
  sameSite?: 'lax' | 'strict' | 'none';
110
110
  secure?: boolean;
111
111
  }
112
- export declare type MojoURLOptions = {
112
+ export type MojoURLOptions = {
113
113
  absolute?: boolean;
114
114
  query?: Record<string, string>;
115
115
  values?: Record<string, string>;
@@ -151,7 +151,7 @@ export interface ServerRequestOptions {
151
151
  reverseProxy: boolean;
152
152
  url?: string;
153
153
  }
154
- export declare type ServerResponseBody = string | Buffer | Stream | undefined;
154
+ export type ServerResponseBody = string | Buffer | Stream | undefined;
155
155
  export interface UserAgentOptions {
156
156
  baseURL?: string | URL;
157
157
  cookieJar?: CookieJar;
@@ -181,8 +181,8 @@ export interface UserAgentWebSocketOptions extends SharedUserAgentRequestOptions
181
181
  json?: boolean;
182
182
  protocols?: string[];
183
183
  }
184
- export declare type URLTarget = string | [string, MojoURLOptions];
185
- export declare type TestUserAgentOptions = UserAgentOptions & {
184
+ export type URLTarget = string | [string, MojoURLOptions];
185
+ export type TestUserAgentOptions = UserAgentOptions & {
186
186
  tap?: Tap.Test;
187
187
  };
188
188
  export interface ValidationError {
@@ -190,7 +190,7 @@ export interface ValidationError {
190
190
  message?: string;
191
191
  schemaPath: string;
192
192
  }
193
- export declare type ValidatorFunction = (data: any) => ValidatorResult;
193
+ export type ValidatorFunction = (data: any) => ValidatorResult;
194
194
  interface WebSocketBackendEvents {
195
195
  close: () => void;
196
196
  error: (this: WebSocketBackend, error: Error) => void;
@@ -11,7 +11,7 @@ import assert from 'node:assert/strict';
11
11
  import { MockUserAgent } from './mock.js';
12
12
  import DOM from '@mojojs/dom';
13
13
  import StackUtils from 'stack-utils';
14
- declare type SkipFunction = (...args: any[]) => any;
14
+ type SkipFunction = (...args: any[]) => any;
15
15
  /**
16
16
  * Test user agent class.
17
17
  */
package/lib/util.d.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  import type { Mode } from 'node:fs';
4
4
  import { setTimeout } from 'node:timers/promises';
5
5
  export * from '@mojojs/util';
6
- declare type FixOptions = {
6
+ type FixOptions = {
7
7
  author?: string;
8
8
  dependencies?: Record<string, string>;
9
9
  description?: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mojojs/core",
3
- "version": "1.11.0",
3
+ "version": "1.12.1",
4
4
  "description": "Real-time web framework",
5
5
  "keywords": [
6
6
  "mojojs",
@@ -80,10 +80,10 @@
80
80
  "node": ">= 16"
81
81
  },
82
82
  "dependencies": {
83
- "@mojojs/dom": "^1.6.0",
84
- "@mojojs/path": "^1.4.0",
85
- "@mojojs/template": "^2.1.0",
86
- "@mojojs/util": "^1.4.1",
83
+ "@mojojs/dom": "^2.0.0",
84
+ "@mojojs/path": "^1.5.3",
85
+ "@mojojs/template": "^2.1.1",
86
+ "@mojojs/util": "^1.5.0",
87
87
  "ajv": "^8.5.0",
88
88
  "busboy": "^1.0.0",
89
89
  "chalk": "^5.0.0",