@mojojs/core 0.18.0 → 0.19.3

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.
Files changed (139) hide show
  1. package/lib/app.d.ts +117 -4
  2. package/lib/app.js +105 -8
  3. package/lib/app.js.map +1 -1
  4. package/lib/body/params.d.ts +6 -0
  5. package/lib/body/params.js +6 -0
  6. package/lib/body/params.js.map +1 -1
  7. package/lib/body.d.ts +48 -0
  8. package/lib/body.js +45 -0
  9. package/lib/body.js.map +1 -1
  10. package/lib/cli/create-full-app.d.ts +3 -0
  11. package/lib/cli/create-full-app.js +3 -0
  12. package/lib/cli/create-full-app.js.map +1 -1
  13. package/lib/cli/create-lite-app.d.ts +3 -0
  14. package/lib/cli/create-lite-app.js +3 -0
  15. package/lib/cli/create-lite-app.js.map +1 -1
  16. package/lib/cli/eval.d.ts +3 -0
  17. package/lib/cli/eval.js +3 -0
  18. package/lib/cli/eval.js.map +1 -1
  19. package/lib/cli/get.d.ts +3 -0
  20. package/lib/cli/get.js +3 -0
  21. package/lib/cli/get.js.map +1 -1
  22. package/lib/cli/repl.d.ts +3 -0
  23. package/lib/cli/repl.js +3 -0
  24. package/lib/cli/repl.js.map +1 -1
  25. package/lib/cli/routes.d.ts +3 -0
  26. package/lib/cli/routes.js +3 -0
  27. package/lib/cli/routes.js.map +1 -1
  28. package/lib/cli/server.d.ts +3 -0
  29. package/lib/cli/server.js +3 -0
  30. package/lib/cli/server.js.map +1 -1
  31. package/lib/cli/version.d.ts +3 -0
  32. package/lib/cli/version.js +3 -0
  33. package/lib/cli/version.js.map +1 -1
  34. package/lib/cli.d.ts +15 -0
  35. package/lib/cli.js +15 -0
  36. package/lib/cli.js.map +1 -1
  37. package/lib/context.d.ts +99 -0
  38. package/lib/context.js +84 -0
  39. package/lib/context.js.map +1 -1
  40. package/lib/core.d.ts +3 -0
  41. package/lib/core.js +3 -0
  42. package/lib/core.js.map +1 -1
  43. package/lib/hooks.d.ts +9 -0
  44. package/lib/hooks.js +9 -0
  45. package/lib/hooks.js.map +1 -1
  46. package/lib/logger.d.ts +69 -0
  47. package/lib/logger.js +63 -0
  48. package/lib/logger.js.map +1 -1
  49. package/lib/mime.d.ts +14 -0
  50. package/lib/mime.js +39 -9
  51. package/lib/mime.js.map +1 -1
  52. package/lib/mock/request.d.ts +3 -0
  53. package/lib/mock/request.js +3 -0
  54. package/lib/mock/request.js.map +1 -1
  55. package/lib/mock/response.d.ts +3 -0
  56. package/lib/mock/response.js +3 -0
  57. package/lib/mock/response.js.map +1 -1
  58. package/lib/plugins/default-helpers.d.ts +5 -0
  59. package/lib/plugins/default-helpers.js +18 -0
  60. package/lib/plugins/default-helpers.js.map +1 -0
  61. package/lib/plugins/exception-helpers.d.ts +3 -0
  62. package/lib/plugins/exception-helpers.js +3 -0
  63. package/lib/plugins/exception-helpers.js.map +1 -1
  64. package/lib/plugins/header-conditions.d.ts +3 -0
  65. package/lib/plugins/header-conditions.js +3 -0
  66. package/lib/plugins/header-conditions.js.map +1 -1
  67. package/lib/plugins/json-config.d.ts +3 -0
  68. package/lib/plugins/json-config.js +3 -0
  69. package/lib/plugins/json-config.js.map +1 -1
  70. package/lib/plugins/mt-engine.d.ts +3 -0
  71. package/lib/plugins/mt-engine.js +4 -1
  72. package/lib/plugins/mt-engine.js.map +1 -1
  73. package/lib/plugins/view-helpers.d.ts +3 -0
  74. package/lib/plugins/view-helpers.js +3 -12
  75. package/lib/plugins/view-helpers.js.map +1 -1
  76. package/lib/plugins/yaml-config.d.ts +3 -0
  77. package/lib/plugins/yaml-config.js +3 -0
  78. package/lib/plugins/yaml-config.js.map +1 -1
  79. package/lib/renderer.d.ts +38 -0
  80. package/lib/renderer.js +38 -0
  81. package/lib/renderer.js.map +1 -1
  82. package/lib/router/pattern.d.ts +33 -0
  83. package/lib/router/pattern.js +24 -0
  84. package/lib/router/pattern.js.map +1 -1
  85. package/lib/router/plan.d.ts +15 -0
  86. package/lib/router/plan.js +15 -0
  87. package/lib/router/plan.js.map +1 -1
  88. package/lib/router/route.d.ts +83 -0
  89. package/lib/router/route.js +83 -0
  90. package/lib/router/route.js.map +1 -1
  91. package/lib/router.d.ts +39 -3
  92. package/lib/router.js +47 -10
  93. package/lib/router.js.map +1 -1
  94. package/lib/server/cookie.d.ts +6 -0
  95. package/lib/server/cookie.js +6 -0
  96. package/lib/server/cookie.js.map +1 -1
  97. package/lib/server.d.ts +21 -0
  98. package/lib/server.js +15 -1
  99. package/lib/server.js.map +1 -1
  100. package/lib/session.d.ts +35 -0
  101. package/lib/session.js +35 -0
  102. package/lib/session.js.map +1 -1
  103. package/lib/static.d.ts +22 -0
  104. package/lib/static.js +22 -0
  105. package/lib/static.js.map +1 -1
  106. package/lib/user-agent/cookie-jar.d.ts +12 -0
  107. package/lib/user-agent/cookie-jar.js +12 -0
  108. package/lib/user-agent/cookie-jar.js.map +1 -1
  109. package/lib/user-agent/mock.d.ts +15 -0
  110. package/lib/user-agent/mock.js +15 -0
  111. package/lib/user-agent/mock.js.map +1 -1
  112. package/lib/user-agent/response.d.ts +27 -0
  113. package/lib/user-agent/response.js +27 -0
  114. package/lib/user-agent/response.js.map +1 -1
  115. package/lib/user-agent/test.d.ts +115 -2
  116. package/lib/user-agent/test.js +123 -10
  117. package/lib/user-agent/test.js.map +1 -1
  118. package/lib/user-agent/transport/http.d.ts +12 -0
  119. package/lib/user-agent/transport/http.js +12 -0
  120. package/lib/user-agent/transport/http.js.map +1 -1
  121. package/lib/user-agent/transport/https.d.ts +3 -0
  122. package/lib/user-agent/transport/https.js +3 -0
  123. package/lib/user-agent/transport/https.js.map +1 -1
  124. package/lib/user-agent/transport/ws.d.ts +6 -0
  125. package/lib/user-agent/transport/ws.js +6 -0
  126. package/lib/user-agent/transport/ws.js.map +1 -1
  127. package/lib/util.d.ts +31 -1
  128. package/lib/util.js +30 -0
  129. package/lib/util.js.map +1 -1
  130. package/lib/validator/result.d.ts +9 -0
  131. package/lib/validator/result.js +3 -0
  132. package/lib/validator/result.js.map +1 -1
  133. package/lib/validator.d.ts +9 -0
  134. package/lib/validator.js +9 -0
  135. package/lib/validator.js.map +1 -1
  136. package/lib/websocket.d.ts +18 -0
  137. package/lib/websocket.js +12 -0
  138. package/lib/websocket.js.map +1 -1
  139. package/package.json +3 -3
package/lib/session.js CHANGED
@@ -2,16 +2,42 @@ import crypto from 'crypto';
2
2
  import { promisify } from 'util';
3
3
  const scrypt = promisify(crypto.scrypt);
4
4
  const randomBytes = promisify(crypto.randomBytes);
5
+ /**
6
+ * Session manager class.
7
+ */
5
8
  export class Session {
6
9
  constructor(app) {
10
+ /**
11
+ * Name for session cookies, defaults to `mojo`.
12
+ */
7
13
  this.cookieName = 'mojo';
14
+ /**
15
+ * Path for session cookies, defaults to `/`.
16
+ */
8
17
  this.cookiePath = '/';
18
+ /**
19
+ * Default time for sessions to expire in seconds from now, defaults to `3600`. The expiration timeout gets refreshed
20
+ * for every request. Setting the value to `0` will allow sessions to persist until the browser window is closed,
21
+ * this can have security implications though.
22
+ */
9
23
  this.expiration = 3600;
24
+ /**
25
+ * Set the `HttpOnly` value on all session cookies.
26
+ */
10
27
  this.httpOnly = true;
28
+ /**
29
+ * Set the `SameSite` value on all session cookies, defaults to `lax`.
30
+ */
11
31
  this.sameSite = 'lax';
32
+ /**
33
+ * Set the secure flag on all session cookies, so that browsers send them only over HTTPS connections.
34
+ */
12
35
  this.secure = false;
13
36
  this._app = new WeakRef(app);
14
37
  }
38
+ /**
39
+ * Decrypt cookie.
40
+ */
15
41
  static async decrypt(secrets, encrypted) {
16
42
  const match = encrypted.match(/^([^-]+)--([^-]+)--([^-]+)$/);
17
43
  if (match === null)
@@ -33,6 +59,9 @@ export class Session {
33
59
  }
34
60
  return null;
35
61
  }
62
+ /**
63
+ * Encrypt cookie.
64
+ */
36
65
  static async encrypt(secret, value) {
37
66
  const key = await scrypt(secret, 'salt', 32);
38
67
  const iv = await randomBytes(12);
@@ -40,6 +69,9 @@ export class Session {
40
69
  const encrypted = cipher.update(value, 'utf8', 'base64') + cipher.final('base64');
41
70
  return encrypted + '--' + iv.toString('base64') + '--' + cipher.getAuthTag().toString('base64');
42
71
  }
72
+ /**
73
+ * Load session data from encrypted cookie.
74
+ */
43
75
  async load(ctx) {
44
76
  const cookie = ctx.req.getCookie(this.cookieName);
45
77
  if (cookie === null)
@@ -61,6 +93,9 @@ export class Session {
61
93
  }
62
94
  return data;
63
95
  }
96
+ /**
97
+ * Store session data in encrypted cookie.
98
+ */
64
99
  async store(ctx, data) {
65
100
  if (typeof data.expires !== 'number') {
66
101
  const expiration = data.expiration ?? this.expiration;
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
package/lib/static.d.ts CHANGED
@@ -1,14 +1,36 @@
1
1
  import type { MojoContext } from './types.js';
2
2
  import Path from '@mojojs/path';
3
+ /**
4
+ * Static file server class.
5
+ */
3
6
  export declare class Static {
7
+ /**
8
+ * Prefix to use for all static files.
9
+ */
4
10
  prefix: string;
11
+ /**
12
+ * Directories to serve static files from, first one has the highest precedence.
13
+ */
5
14
  publicPaths: string[];
15
+ /**
16
+ * Serve static files.
17
+ */
6
18
  dispatch(ctx: MojoContext): Promise<boolean>;
19
+ /**
20
+ * Get static file path with prefix.
21
+ */
7
22
  filePath(path: string): string;
23
+ /**
24
+ * Check freshness of request by comparing the `If-None-Match` and `If-Modified-Since` request headers to the `ETag`
25
+ * and `Last-Modified` response headers.
26
+ */
8
27
  isFresh(ctx: MojoContext, options?: {
9
28
  etag?: string;
10
29
  lastModified?: Date;
11
30
  }): boolean;
31
+ /**
32
+ * Serve a specific file.
33
+ */
12
34
  serveFile(ctx: MojoContext, file: Path): Promise<void>;
13
35
  _rangeNotSatisfiable(ctx: MojoContext): Promise<void>;
14
36
  }
package/lib/static.js CHANGED
@@ -1,11 +1,23 @@
1
1
  import crypto from 'crypto';
2
2
  import path from 'path';
3
3
  import Path from '@mojojs/path';
4
+ /**
5
+ * Static file server class.
6
+ */
4
7
  export class Static {
5
8
  constructor() {
9
+ /**
10
+ * Prefix to use for all static files.
11
+ */
6
12
  this.prefix = '/public';
13
+ /**
14
+ * Directories to serve static files from, first one has the highest precedence.
15
+ */
7
16
  this.publicPaths = [Path.currentFile().sibling('..', 'vendor', 'public').toString()];
8
17
  }
18
+ /**
19
+ * Serve static files.
20
+ */
9
21
  async dispatch(ctx) {
10
22
  const req = ctx.req;
11
23
  const unsafePath = req.path;
@@ -26,11 +38,18 @@ export class Static {
26
38
  }
27
39
  return false;
28
40
  }
41
+ /**
42
+ * Get static file path with prefix.
43
+ */
29
44
  filePath(path) {
30
45
  if (path.startsWith('/') === false)
31
46
  path = '/' + path;
32
47
  return this.prefix + path;
33
48
  }
49
+ /**
50
+ * Check freshness of request by comparing the `If-None-Match` and `If-Modified-Since` request headers to the `ETag`
51
+ * and `Last-Modified` response headers.
52
+ */
34
53
  isFresh(ctx, options = {}) {
35
54
  const etag = options.etag;
36
55
  const lastModified = options.lastModified;
@@ -60,6 +79,9 @@ export class Static {
60
79
  }
61
80
  return false;
62
81
  }
82
+ /**
83
+ * Serve a specific file.
84
+ */
63
85
  async serveFile(ctx, file) {
64
86
  const app = ctx.app;
65
87
  if ((await app.hooks.runHook('static:before', ctx, file)) === true)
package/lib/static.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"static.js","sourceRoot":"","sources":["../src/static.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"static.js","sourceRoot":"","sources":["../src/static.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,21 @@
1
1
  /// <reference types="node" />
2
2
  import type { URL } from 'url';
3
3
  import tough from 'tough-cookie';
4
+ /**
5
+ * Cookie jar class.
6
+ */
4
7
  export declare class CookieJar {
8
+ /**
9
+ * Cookie storage.
10
+ */
5
11
  storage: tough.CookieJar;
12
+ /**
13
+ * Load cookies from storage.
14
+ */
6
15
  loadCookies(url: URL): Promise<string | null>;
16
+ /**
17
+ * Store cookies.
18
+ */
7
19
  storeCookies(url: URL, header?: string[]): Promise<void>;
8
20
  _cookieURL(currentURL: URL): string;
9
21
  }
@@ -1,15 +1,27 @@
1
1
  import { format } from 'url';
2
2
  import tough from 'tough-cookie';
3
+ /**
4
+ * Cookie jar class.
5
+ */
3
6
  export class CookieJar {
4
7
  constructor() {
8
+ /**
9
+ * Cookie storage.
10
+ */
5
11
  this.storage = new tough.CookieJar();
6
12
  }
13
+ /**
14
+ * Load cookies from storage.
15
+ */
7
16
  async loadCookies(url) {
8
17
  const cookies = await this.storage.getCookies(this._cookieURL(url));
9
18
  if (cookies.length > 0)
10
19
  return cookies.map(cookie => cookie.cookieString()).join('; ');
11
20
  return null;
12
21
  }
22
+ /**
23
+ * Store cookies.
24
+ */
13
25
  async storeCookies(url, header) {
14
26
  if (header === undefined)
15
27
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"cookie-jar.js","sourceRoot":"","sources":["../../src/user-agent/cookie-jar.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,KAAK,CAAC;AAC3B,OAAO,KAAK,MAAM,cAAc,CAAC;AAEjC,MAAM,OAAO,SAAS;IAAtB;QACE,YAAO,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;IAqBlC,CAAC;IAnBC,KAAK,CAAC,WAAW,CAAC,GAAQ;QACxB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QACpE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,GAAQ,EAAE,MAAiB;QAC5C,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO;QAEjC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACvC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE;YACzE,IAAI,MAAM,KAAK,SAAS;gBAAE,SAAS;YACnC,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;SACjD;IACH,CAAC;IAED,UAAU,CAAC,UAAe;QACxB,OAAO,MAAM,CAAC,UAAU,EAAE,EAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAC,CAAC,CAAC;IAC3E,CAAC;CACF"}
1
+ {"version":3,"file":"cookie-jar.js","sourceRoot":"","sources":["../../src/user-agent/cookie-jar.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,KAAK,CAAC;AAC3B,OAAO,KAAK,MAAM,cAAc,CAAC;AAEjC;;GAEG;AACH,MAAM,OAAO,SAAS;IAAtB;QACE;;WAEG;QACH,YAAO,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;IA2BlC,CAAC;IAzBC;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,GAAQ;QACxB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QACpE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvF,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,GAAQ,EAAE,MAAiB;QAC5C,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO;QAEjC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACvC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE;YACzE,IAAI,MAAM,KAAK,SAAS;gBAAE,SAAS;YACnC,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;SACjD;IACH,CAAC;IAED,UAAU,CAAC,UAAe;QACxB,OAAO,MAAM,CAAC,UAAU,EAAE,EAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAC,CAAC,CAAC;IAC3E,CAAC;CACF"}
@@ -2,10 +2,25 @@ import type { App } from '../app.js';
2
2
  import type { UserAgentOptions } from '../types.js';
3
3
  import { Server } from '../server.js';
4
4
  import { UserAgent } from '../user-agent.js';
5
+ /**
6
+ * Mock user agent class.
7
+ */
5
8
  export declare class MockUserAgent extends UserAgent {
9
+ /**
10
+ * Server to use for mock requests.
11
+ */
6
12
  server: Server | undefined;
7
13
  constructor(options?: UserAgentOptions);
14
+ /**
15
+ * Create a new mock user agent.
16
+ */
8
17
  static newMockUserAgent(app: App, options?: UserAgentOptions): Promise<MockUserAgent>;
18
+ /**
19
+ * Start mock server.
20
+ */
9
21
  start(app: App): Promise<this>;
22
+ /**
23
+ * Stop mock server.
24
+ */
10
25
  stop(): Promise<void>;
11
26
  }
@@ -1,14 +1,26 @@
1
1
  import { Server } from '../server.js';
2
2
  import { UserAgent } from '../user-agent.js';
3
+ /**
4
+ * Mock user agent class.
5
+ */
3
6
  export class MockUserAgent extends UserAgent {
4
7
  constructor(options) {
5
8
  super(options);
9
+ /**
10
+ * Server to use for mock requests.
11
+ */
6
12
  this.server = undefined;
7
13
  this.server = undefined;
8
14
  }
15
+ /**
16
+ * Create a new mock user agent.
17
+ */
9
18
  static async newMockUserAgent(app, options) {
10
19
  return await new MockUserAgent(options).start(app);
11
20
  }
21
+ /**
22
+ * Start mock server.
23
+ */
12
24
  async start(app) {
13
25
  const server = (this.server = new Server(app, { listen: ['http://*'], quiet: true }));
14
26
  await server.start();
@@ -16,6 +28,9 @@ export class MockUserAgent extends UserAgent {
16
28
  this.baseURL = server.urls[0];
17
29
  return this;
18
30
  }
31
+ /**
32
+ * Stop mock server.
33
+ */
19
34
  async stop() {
20
35
  this.destroy();
21
36
  if (this.server === undefined)
@@ -1 +1 @@
1
- {"version":3,"file":"mock.js","sourceRoot":"","sources":["../../src/user-agent/mock.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AACpC,OAAO,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAE3C,MAAM,OAAO,aAAc,SAAQ,SAAS;IAG1C,YAAY,OAA0B;QACpC,KAAK,CAAC,OAAO,CAAC,CAAC;QAHjB,WAAM,GAAuB,SAAS,CAAC;QAKrC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAQ,EAAE,OAA0B;QAChE,OAAO,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAQ;QAClB,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,EAAC,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC;QACpF,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO;QACtC,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;CACF"}
1
+ {"version":3,"file":"mock.js","sourceRoot":"","sources":["../../src/user-agent/mock.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AACpC,OAAO,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAE3C;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,SAAS;IAM1C,YAAY,OAA0B;QACpC,KAAK,CAAC,OAAO,CAAC,CAAC;QANjB;;WAEG;QACH,WAAM,GAAuB,SAAS,CAAC;QAKrC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAQ,EAAE,OAA0B;QAChE,OAAO,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,GAAQ;QAClB,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,EAAC,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC;QACpF,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO;QACtC,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;CACF"}
@@ -1,11 +1,38 @@
1
1
  import { Body } from '../body.js';
2
+ /**
3
+ * User agent response class.
4
+ */
2
5
  export declare class UserAgentResponse extends Body {
6
+ /**
7
+ * Check if response has a `4xx` response status code.
8
+ */
3
9
  get isClientError(): boolean;
10
+ /**
11
+ * Check if response has a `4xx` or `5xx` response status code.
12
+ */
4
13
  get isError(): boolean;
14
+ /**
15
+ * Check if response has a `3xx` response status code.
16
+ */
5
17
  get isRedirect(): boolean;
18
+ /**
19
+ * Check if response has a `5xx` response status code.
20
+ */
6
21
  get isServerError(): boolean;
22
+ /**
23
+ * Check if response has a `2xx` response status code.
24
+ */
7
25
  get isSuccess(): boolean;
26
+ /**
27
+ * Response status code.
28
+ */
8
29
  get status(): number;
30
+ /**
31
+ * Get response message.
32
+ */
9
33
  get statusMessage(): string | undefined;
34
+ /**
35
+ * Get `Content-Type` header value.
36
+ */
10
37
  get type(): string | undefined;
11
38
  }
@@ -1,30 +1,57 @@
1
1
  import { Body } from '../body.js';
2
+ /**
3
+ * User agent response class.
4
+ */
2
5
  export class UserAgentResponse extends Body {
6
+ /**
7
+ * Check if response has a `4xx` response status code.
8
+ */
3
9
  get isClientError() {
4
10
  const statusCode = this.status;
5
11
  return statusCode >= 400 && statusCode <= 499;
6
12
  }
13
+ /**
14
+ * Check if response has a `4xx` or `5xx` response status code.
15
+ */
7
16
  get isError() {
8
17
  return this.isClientError || this.isServerError;
9
18
  }
19
+ /**
20
+ * Check if response has a `3xx` response status code.
21
+ */
10
22
  get isRedirect() {
11
23
  const statusCode = this.status;
12
24
  return statusCode >= 300 && statusCode <= 399;
13
25
  }
26
+ /**
27
+ * Check if response has a `5xx` response status code.
28
+ */
14
29
  get isServerError() {
15
30
  const statusCode = this.status;
16
31
  return statusCode >= 500 && statusCode <= 599;
17
32
  }
33
+ /**
34
+ * Check if response has a `2xx` response status code.
35
+ */
18
36
  get isSuccess() {
19
37
  const statusCode = this.status;
20
38
  return statusCode >= 200 && statusCode <= 299;
21
39
  }
40
+ /**
41
+ * Response status code.
42
+ */
22
43
  get status() {
23
44
  return this.raw.statusCode;
24
45
  }
46
+ /**
47
+ * Get response message.
48
+ */
25
49
  get statusMessage() {
26
50
  return this.raw.statusMessage;
27
51
  }
52
+ /**
53
+ * Get `Content-Type` header value.
54
+ */
28
55
  get type() {
29
56
  return this.headers['content-type'];
30
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/user-agent/response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,YAAY,CAAC;AAEhC,MAAM,OAAO,iBAAkB,SAAQ,IAAI;IACzC,IAAI,aAAa;QACf,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;QAC/B,OAAO,UAAU,IAAI,GAAG,IAAI,UAAU,IAAI,GAAG,CAAC;IAChD,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC;IAClD,CAAC;IAED,IAAI,UAAU;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;QAC/B,OAAO,UAAU,IAAI,GAAG,IAAI,UAAU,IAAI,GAAG,CAAC;IAChD,CAAC;IAED,IAAI,aAAa;QACf,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;QAC/B,OAAO,UAAU,IAAI,GAAG,IAAI,UAAU,IAAI,GAAG,CAAC;IAChD,CAAC;IAED,IAAI,SAAS;QACX,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;QAC/B,OAAO,UAAU,IAAI,GAAG,IAAI,UAAU,IAAI,GAAG,CAAC;IAChD,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,UAAoB,CAAC;IACvC,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC;IAChC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACtC,CAAC;CACF"}
1
+ {"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/user-agent/response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,YAAY,CAAC;AAEhC;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,IAAI;IACzC;;OAEG;IACH,IAAI,aAAa;QACf,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;QAC/B,OAAO,UAAU,IAAI,GAAG,IAAI,UAAU,IAAI,GAAG,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,IAAI,UAAU;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;QAC/B,OAAO,UAAU,IAAI,GAAG,IAAI,UAAU,IAAI,GAAG,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,IAAI,aAAa;QACf,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;QAC/B,OAAO,UAAU,IAAI,GAAG,IAAI,UAAU,IAAI,GAAG,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,IAAI,SAAS;QACX,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;QAC/B,OAAO,UAAU,IAAI,GAAG,IAAI,UAAU,IAAI,GAAG,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,UAAoB,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACtC,CAAC;CACF"}
@@ -10,7 +10,13 @@ import { MockUserAgent } from './mock.js';
10
10
  import DOM from '@mojojs/dom';
11
11
  import StackUtils from 'stack-utils';
12
12
  declare type SkipFunction = (...args: any[]) => any;
13
+ /**
14
+ * Test user agent class.
15
+ */
13
16
  export declare class TestUserAgent extends MockUserAgent {
17
+ /**
18
+ * Current HTTP response content.
19
+ */
14
20
  body: Buffer;
15
21
  _assert: typeof assert | Tap.Tap | undefined;
16
22
  _dom: DOM | undefined;
@@ -20,41 +26,148 @@ export declare class TestUserAgent extends MockUserAgent {
20
26
  _stack: StackUtils;
21
27
  _ws: WebSocket | undefined;
22
28
  constructor(options?: TestUserAgentOptions);
29
+ /**
30
+ * Delegate assertion to test framework currently in use.
31
+ */
23
32
  assert(name: string, args: any[], msg: string, skip: SkipFunction): void;
33
+ /**
34
+ * Check response content for exact match.
35
+ */
24
36
  bodyIs(body: string): this;
37
+ /**
38
+ * Opposite of `bodyIs`.
39
+ */
25
40
  bodyIsnt(body: string): this;
41
+ /**
42
+ * Check response content for similar match.
43
+ */
26
44
  bodyLike(regex: RegExp): this;
45
+ /**
46
+ * Opposite of `bodyLike`.
47
+ */
27
48
  bodyUnlike(regex: RegExp): this;
49
+ /**
50
+ * Close WebSocket connection gracefully.
51
+ */
28
52
  closeOk(code: number, reason: string): Promise<void>;
53
+ /**
54
+ * Wait for WebSocket connection to be closed gracefully and check status.
55
+ */
29
56
  closedOk(code: number): Promise<void>;
57
+ /**
58
+ * Perform a `DELETE` request and check for transport errors.
59
+ */
30
60
  deleteOk(url: string | URL, options?: UserAgentRequestOptions): Promise<this>;
61
+ /**
62
+ * Checks for existence of the CSS selectors first matching HTML/XML element.
63
+ */
31
64
  elementExists(selector: string): this;
65
+ /**
66
+ * Opposite of `elementExists`.
67
+ */
32
68
  elementExistsNot(selector: string): this;
69
+ /**
70
+ * Perform a `GET` request and check for transport errors.
71
+ */
33
72
  getOk(url: string | URL, options?: UserAgentRequestOptions): Promise<this>;
73
+ /**
74
+ * Perform a `HEAD` request and check for transport errors.
75
+ */
34
76
  headOk(url: string | URL, options?: UserAgentRequestOptions): Promise<this>;
77
+ /**
78
+ * Check if response header exists.
79
+ */
35
80
  headerExists(name: string): this;
81
+ /**
82
+ * Opposite of `headerExists`.
83
+ */
36
84
  headerExistsNot(name: string): this;
85
+ /**
86
+ * Check response header for exact match.
87
+ */
37
88
  headerIs(name: string, value: string): this;
89
+ /**
90
+ * Opposite of `headerIs`.
91
+ */
38
92
  headerIsnt(name: string, value: string): this;
93
+ /**
94
+ * Check response header for similar match.
95
+ */
39
96
  headerLike(name: string, regex: RegExp): this;
40
- jsonIs(value: JSONValue, pointer?: string): this;
97
+ /**
98
+ * Check if JSON response contains a value that can be identified using the given JSON Pointer.
99
+ */
41
100
  jsonHas(pointer: string): this;
101
+ /**
102
+ * Check the value extracted from JSON response using the given JSON Pointerr, which defaults to the root value if it
103
+ * is omitted.
104
+ */
105
+ jsonIs(value: JSONValue, pointer?: string): this;
106
+ /**
107
+ * Wait for next WebSocket message to arrive.
108
+ */
42
109
  messageOk(): Promise<JSONValue>;
110
+ /**
111
+ * Create a new test user agent.
112
+ */
43
113
  static newTestUserAgent(app: App, options?: TestUserAgentOptions): Promise<TestUserAgent>;
114
+ /**
115
+ * Perform a `OPTIONS` request and check for transport errors.
116
+ */
44
117
  optionsOk(url: string | URL, options?: UserAgentRequestOptions): Promise<this>;
118
+ /**
119
+ * Perform a `PATCH` request and check for transport errors.
120
+ */
45
121
  patchOk(url: string | URL, options?: UserAgentRequestOptions): Promise<this>;
122
+ /**
123
+ * Perform a `POST` request and check for transport errors.
124
+ */
46
125
  postOk(url: string | URL, options?: UserAgentRequestOptions): Promise<this>;
126
+ /**
127
+ * Perform a `PUT` request and check for transport errors.
128
+ */
47
129
  putOk(url: string | URL, options?: UserAgentRequestOptions): Promise<this>;
130
+ /**
131
+ * Current HTTP response.
132
+ */
48
133
  get res(): UserAgentResponse;
134
+ /**
135
+ * Send message or frame via WebSocket.
136
+ */
49
137
  sendOk(message: JSONValue | Buffer): Promise<void>;
138
+ /**
139
+ * Check response status for exact match.
140
+ */
50
141
  statusIs(status: number): this;
142
+ /**
143
+ * Checks text content of the CSS selectors first matching HTML/XML element for similar match.
144
+ */
51
145
  textLike(selector: string, regex: RegExp): this;
146
+ /**
147
+ * Check response `Content-Type` header for exact match.
148
+ */
52
149
  typeIs(value: string): this;
150
+ /**
151
+ * Check response `Content-Type` header for similar match.
152
+ */
53
153
  typeLike(regex: RegExp): this;
154
+ /**
155
+ * Open a WebSocket connection with transparent handshake.
156
+ */
54
157
  websocketOk(url: string | URL, options?: UserAgentWebSocketOptions): Promise<void>;
158
+ /**
159
+ * Active WebSocket connection.
160
+ */
55
161
  get ws(): WebSocket;
56
- yamlIs(value: JSONValue, pointer?: string): this;
162
+ /**
163
+ * Check if YAML response contains a value that can be identified using the given JSON Pointer.
164
+ */
57
165
  yamlHas(pointer: string): this;
166
+ /**
167
+ * Check the value extracted from YAML response using the given JSON Pointerr, which defaults to the root value if it
168
+ * is omitted.
169
+ */
170
+ yamlIs(value: JSONValue, pointer?: string): this;
58
171
  get _html(): DOM;
59
172
  _prepareTap(tap: Tap.Tap): void;
60
173
  _requestOk(skip: SkipFunction, method: string, url: string | URL, options?: UserAgentRequestOptions): Promise<this>;