velocious 1.0.103 → 1.0.105

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 (88) hide show
  1. package/package.json +1 -1
  2. package/spec/database/record/create-spec.js +7 -0
  3. package/spec/dummy/dummy-directory.js +2 -0
  4. package/spec/dummy/index.js +5 -1
  5. package/spec/dummy/src/model-bases/project.js +18 -0
  6. package/src/application.js +1 -0
  7. package/src/configuration-types.js +6 -0
  8. package/src/controller.js +44 -24
  9. package/src/database/drivers/base-foreign-key.js +1 -1
  10. package/src/database/drivers/base.js +2 -2
  11. package/src/database/drivers/mssql/column.js +6 -0
  12. package/src/database/drivers/mssql/columns-index.js +2 -5
  13. package/src/database/drivers/mssql/foreign-key.js +2 -0
  14. package/src/database/drivers/mssql/options.js +25 -0
  15. package/src/database/drivers/mssql/query-parser.js +2 -0
  16. package/src/database/drivers/mysql/options.js +9 -0
  17. package/src/database/drivers/mysql/sql/alter-table.js +2 -0
  18. package/src/database/drivers/mysql/sql/create-database.js +2 -0
  19. package/src/database/drivers/mysql/sql/create-index.js +2 -0
  20. package/src/database/drivers/mysql/sql/create-table.js +2 -0
  21. package/src/database/drivers/mysql/sql/delete.js +2 -0
  22. package/src/database/drivers/mysql/sql/drop-table.js +2 -0
  23. package/src/database/drivers/mysql/sql/insert.js +2 -0
  24. package/src/database/drivers/mysql/sql/update.js +2 -0
  25. package/src/database/drivers/pgsql/column.js +6 -0
  26. package/src/database/drivers/pgsql/columns-index.js +2 -0
  27. package/src/database/drivers/pgsql/foreign-key.js +2 -0
  28. package/src/database/drivers/pgsql/options.js +9 -0
  29. package/src/database/drivers/pgsql/query-parser.js +2 -0
  30. package/src/database/drivers/pgsql/sql/alter-table.js +2 -0
  31. package/src/database/drivers/pgsql/sql/create-database.js +5 -4
  32. package/src/database/drivers/pgsql/sql/create-index.js +2 -0
  33. package/src/database/drivers/pgsql/sql/create-table.js +2 -0
  34. package/src/database/drivers/pgsql/sql/delete.js +2 -0
  35. package/src/database/drivers/pgsql/sql/drop-table.js +2 -0
  36. package/src/database/drivers/pgsql/sql/insert.js +2 -0
  37. package/src/database/drivers/pgsql/sql/update.js +2 -0
  38. package/src/database/drivers/pgsql/table.js +6 -0
  39. package/src/database/drivers/sqlite/columns-index.js +2 -6
  40. package/src/database/drivers/sqlite/connection-remote.js +7 -0
  41. package/src/database/drivers/sqlite/connection-sql-js.js +12 -2
  42. package/src/database/drivers/sqlite/foreign-key.js +7 -0
  43. package/src/database/drivers/sqlite/index.js +7 -1
  44. package/src/database/drivers/sqlite/index.web.js +12 -3
  45. package/src/database/drivers/sqlite/options.js +9 -0
  46. package/src/database/drivers/sqlite/query-parser.js +2 -0
  47. package/src/database/drivers/sqlite/query.js +19 -6
  48. package/src/database/drivers/sqlite/query.web.js +13 -1
  49. package/src/database/initializer-from-require-context.js +11 -1
  50. package/src/database/migrator/types.js +2 -0
  51. package/src/database/pool/base-methods-forward.js +7 -0
  52. package/src/database/query/delete-base.js +8 -0
  53. package/src/database/query/preloader/belongs-to.js +16 -1
  54. package/src/database/query/preloader/has-many.js +19 -1
  55. package/src/database/query/preloader/has-one.js +20 -2
  56. package/src/database/query/preloader.js +19 -4
  57. package/src/database/query/update-base.js +9 -0
  58. package/src/database/query-parser/limit-parser.js +7 -2
  59. package/src/database/query-parser/options.js +47 -6
  60. package/src/database/query-parser/order-parser.js +11 -6
  61. package/src/database/query-parser/select-parser.js +8 -5
  62. package/src/database/query-parser/where-parser.js +11 -5
  63. package/src/database/record/index.js +28 -24
  64. package/src/database/record/instance-relationships/base.js +10 -1
  65. package/src/database/record/record-not-found-error.js +2 -0
  66. package/src/database/record/user-module.js +13 -0
  67. package/src/database/record/validators/uniqueness.js +13 -2
  68. package/src/environment-handlers/node/cli/commands/generate/base-models.js +19 -0
  69. package/src/error-logger.js +17 -3
  70. package/src/http-client/index.js +34 -2
  71. package/src/http-client/request.js +1 -1
  72. package/src/http-server/client/params-to-object.js +28 -0
  73. package/src/initializer.js +2 -0
  74. package/src/routes/app-routes.js +3 -1
  75. package/src/routes/base-route.js +67 -58
  76. package/src/routes/basic-route.js +76 -0
  77. package/src/routes/get-route.js +21 -5
  78. package/src/routes/index.js +10 -0
  79. package/src/routes/namespace-route.js +21 -5
  80. package/src/routes/post-route.js +20 -5
  81. package/src/routes/resolver.js +15 -2
  82. package/src/routes/resource-route.js +21 -5
  83. package/src/routes/root-route.js +3 -3
  84. package/src/testing/request-client.js +19 -14
  85. package/src/testing/test-runner.js +16 -10
  86. package/src/testing/test.js +70 -22
  87. package/src/utils/with-tracked-stack-async-hooks.js +22 -4
  88. package/src/utils/with-tracked-stack.js +9 -0
@@ -1,73 +1,82 @@
1
- import GetRoute from "./get-route.js"
2
- import NamespaceRoute from "./namespace-route.js"
3
- import PostRoute from "./post-route.js"
4
- import ResourceRoute from "./resource-route.js"
1
+ // @ts-check
5
2
 
6
- var VelociousBaseRoute
3
+ export default class VelociousBaseRoute {
4
+ /** @type {typeof import("./get-route.js").default} */
5
+ static GetRouteType
7
6
 
8
- export function initBaseRoute() {
9
- if (VelociousBaseRoute) return
7
+ /** @type {typeof import("./namespace-route.js").default} */
8
+ static NameSpaceRouteType
10
9
 
11
- VelociousBaseRoute = class VelociousBaseRoute {
12
- routes = []
10
+ /** @type {typeof import("./post-route.js").default} */
11
+ static PostRouteType
13
12
 
14
- /**
15
- * @param {string} name
16
- */
17
- get(name) {
18
- const route = new GetRoute({name})
13
+ /** @type {typeof import("./resource-route.js").default} */
14
+ static ResourceRouteType
19
15
 
20
- this.routes.push(route)
21
- }
16
+ /** @param {typeof import("./get-route.js").default} RouteClass */
17
+ static registerRouteGetType(RouteClass) {
18
+ this.GetRouteType = RouteClass
19
+ }
22
20
 
23
- /**
24
- * @abstract
25
- * @param {string} _path
26
- */
27
- matchWithPath(_path) { // eslint-disable-line no-unused-vars
28
- throw new Error(`No 'matchWithPath' implemented on ${this.constructor.name}`)
29
- }
21
+ /** @param {typeof import("./namespace-route.js").default} RouteClass */
22
+ static registerRouteNamespaceType(RouteClass) {
23
+ this.NameSpaceRouteType = RouteClass
24
+ }
30
25
 
31
- /**
32
- * @param {string} name
33
- * @param {function(NamespaceRoute) : void} callback
34
- * @returns {void}
35
- */
36
- namespace(name, callback) {
37
- const route = new NamespaceRoute({name})
26
+ /** @param {typeof import("./post-route.js").default} RouteClass */
27
+ static registerRoutePostType(RouteClass) {
28
+ this.PostRouteType = RouteClass
29
+ }
38
30
 
39
- this.routes.push(route)
31
+ /** @param {typeof import("./resource-route.js").default} RouteClass */
32
+ static registerRouteResourceType(RouteClass) {
33
+ this.ResourceRouteType = RouteClass
34
+ }
40
35
 
41
- if (callback) {
42
- callback(route)
43
- }
44
- }
36
+ constructor() {
37
+ // Nothing
38
+ }
45
39
 
46
- /**
47
- * @param {string} name
48
- * @returns {void}
49
- */
50
- post(name) {
51
- const route = new PostRoute({name})
40
+ /** @type {Array<VelociousBaseRoute>} */
41
+ routes = []
52
42
 
53
- this.routes.push(route)
54
- }
43
+ /**
44
+ * @abstract
45
+ * @param {string} name
46
+ */
47
+ get(name) { throw new Error("'get' not implemented") } // eslint-disable-line no-unused-vars
55
48
 
56
- /**
57
- * @param {string} name
58
- * @param {function(ResourceRoute) : void} callback
59
- * @returns {void}
60
- */
61
- resources(name, callback) {
62
- const route = new ResourceRoute({name})
49
+ /**
50
+ * @param {object} args
51
+ * @param {Record<string, any>} args.params
52
+ * @param {string} args.path
53
+ * @param {import("../http-server/client/request.js").default} args.request
54
+ * @returns {{restPath: string} | undefined}
55
+ */
56
+ matchWithPath({params, path, request}) { // eslint-disable-line no-unused-vars
57
+ throw new Error(`No 'matchWithPath' implemented on ${this.constructor.name}`)
58
+ }
63
59
 
64
- this.routes.push(route)
60
+ /**
61
+ * @abstract
62
+ * @param {string} name
63
+ * @param {function(import("./namespace-route.js").default) : void} callback
64
+ * @returns {void}
65
+ */
66
+ namespace(name, callback) { throw new Error("'namespace' not implemented") } // eslint-disable-line no-unused-vars
65
67
 
66
- if (callback) {
67
- callback(route)
68
- }
69
- }
70
- }
71
- }
68
+ /**
69
+ * @abstract
70
+ * @param {string} name
71
+ * @returns {void}
72
+ */
73
+ post(name) { throw new Error("'post' not implemented") } // eslint-disable-line no-unused-vars
72
74
 
73
- export {VelociousBaseRoute as default}
75
+ /**
76
+ * @abstract
77
+ * @param {string} name
78
+ * @param {function(import("./resource-route.js").default) : void} callback
79
+ * @returns {void}
80
+ */
81
+ resources(name, callback) { throw new Error("'resources' not implemented") } // eslint-disable-line no-unused-vars
82
+ }
@@ -0,0 +1,76 @@
1
+ // @ts-check
2
+
3
+ import BaseRoute from "./base-route.js"
4
+
5
+ export default class VelociousBasicRoute extends BaseRoute {
6
+ /** @param {string} name */
7
+ get(name) {
8
+ const GetRoute = VelociousBasicRoute.GetRouteType
9
+ const route = new GetRoute({name})
10
+
11
+ this.routes.push(route)
12
+ }
13
+
14
+ /**
15
+ * @param {object} args
16
+ * @param {Record<string, any>} args.params
17
+ * @param {string} args.path
18
+ * @param {import("../http-server/client/request.js").default} args.request
19
+ * @returns {{restPath: string} | undefined}
20
+ */
21
+ matchWithPath({params, path, request}) { // eslint-disable-line no-unused-vars
22
+ throw new Error(`No 'matchWithPath' implemented on ${this.constructor.name}`)
23
+ }
24
+
25
+ /**
26
+ * @param {string} name
27
+ * @param {function(import("./namespace-route.js").default) : void} callback
28
+ * @returns {void}
29
+ */
30
+ namespace(name, callback) {
31
+ const NamespaceRoute = VelociousBasicRoute.NameSpaceRouteType
32
+
33
+ if (!NamespaceRoute) throw new Error("No NamespaceRoute registered")
34
+
35
+ const route = new NamespaceRoute({name})
36
+
37
+ this.routes.push(route)
38
+
39
+ if (callback) {
40
+ callback(route)
41
+ }
42
+ }
43
+
44
+ /**
45
+ * @param {string} name
46
+ * @returns {void}
47
+ */
48
+ post(name) {
49
+ const PostRoute = VelociousBasicRoute.PostRouteType
50
+
51
+ if (!PostRoute) throw new Error("No PostRoute registered")
52
+
53
+ const route = new PostRoute({name})
54
+
55
+ this.routes.push(route)
56
+ }
57
+
58
+ /**
59
+ * @param {string} name
60
+ * @param {function(import("./resource-route.js").default) : void} callback
61
+ * @returns {void}
62
+ */
63
+ resources(name, callback) {
64
+ const ResourceRoute = VelociousBasicRoute.ResourceRouteType
65
+
66
+ if (!ResourceRoute) throw new Error("No ResourceRoute registered")
67
+
68
+ const route = new ResourceRoute({name})
69
+
70
+ this.routes.push(route)
71
+
72
+ if (callback) {
73
+ callback(route)
74
+ }
75
+ }
76
+ }
@@ -1,10 +1,15 @@
1
- import BaseRoute, {initBaseRoute} from "./base-route.js"
1
+ // @ts-check
2
+
2
3
  import escapeStringRegexp from "escape-string-regexp"
3
- import restArgsError from "../utils/rest-args-error.js"
4
4
 
5
- initBaseRoute()
5
+ import BaseRoute from "./base-route.js"
6
+ import restArgsError from "../utils/rest-args-error.js"
6
7
 
7
- export default class VelociousRouteGetRoute extends BaseRoute {
8
+ class VelociousRouteGetRoute extends BaseRoute {
9
+ /**
10
+ * @param {object} args
11
+ * @param {string} args.name
12
+ */
8
13
  constructor({name, ...restArgs}) {
9
14
  super()
10
15
  restArgsError(restArgs)
@@ -12,7 +17,14 @@ export default class VelociousRouteGetRoute extends BaseRoute {
12
17
  this.regExp = new RegExp(`^(${escapeStringRegexp(name)})(.*)$`)
13
18
  }
14
19
 
15
- matchWithPath({params, path}) {
20
+ /**
21
+ * @param {object} args
22
+ * @param {Record<string, any>} args.params
23
+ * @param {string} args.path
24
+ * @param {import("../http-server/client/request.js").default} args.request
25
+ * @returns {{restPath: string} | undefined}
26
+ */
27
+ matchWithPath({params, path, request}) { // eslint-disable-line no-unused-vars
16
28
  const match = path.match(this.regExp)
17
29
 
18
30
  if (match) {
@@ -24,3 +36,7 @@ export default class VelociousRouteGetRoute extends BaseRoute {
24
36
  }
25
37
  }
26
38
  }
39
+
40
+ BaseRoute.registerRouteGetType(VelociousRouteGetRoute)
41
+
42
+ export default VelociousRouteGetRoute
@@ -1,8 +1,18 @@
1
+ // @ts-check
2
+
3
+ import GetRoute from "./get-route.js" // eslint-disable-line no-unused-vars
4
+ import NameSpaceRoute from "./namespace-route.js" // eslint-disable-line no-unused-vars
5
+ import PostRoute from "./post-route.js" // eslint-disable-line no-unused-vars
1
6
  import RootRoute from "./root-route.js"
7
+ import ResourceRoute from "./resource-route.js" // eslint-disable-line no-unused-vars
2
8
 
3
9
  export default class VelociousRoutes {
4
10
  rootRoute = new RootRoute()
5
11
 
12
+ /**
13
+ * @param {function(import("./root-route.js").default) : void} callback
14
+ * @returns {void}
15
+ */
6
16
  draw(callback) {
7
17
  callback(this.rootRoute)
8
18
  }
@@ -1,10 +1,15 @@
1
+ // @ts-check
2
+
1
3
  import restArgsError from "../utils/rest-args-error.js"
2
- import BaseRoute, {initBaseRoute} from "./base-route.js"
4
+ import BaseRoute from "./base-route.js"
5
+ import BasicRoute from "./base-route.js"
3
6
  import escapeStringRegexp from "escape-string-regexp"
4
7
 
5
- initBaseRoute()
6
-
7
- export default class VelociousRouteNamespaceRoute extends BaseRoute {
8
+ class VelociousRouteNamespaceRoute extends BasicRoute {
9
+ /**
10
+ * @param {object} args
11
+ * @param {string} args.name
12
+ */
8
13
  constructor({name, ...restArgs}) {
9
14
  super()
10
15
  restArgsError(restArgs)
@@ -12,7 +17,14 @@ export default class VelociousRouteNamespaceRoute extends BaseRoute {
12
17
  this.regExp = new RegExp(`^(${escapeStringRegexp(name)})(.*)$`)
13
18
  }
14
19
 
15
- matchWithPath({params, path}) {
20
+ /**
21
+ * @param {object} args
22
+ * @param {Record<string, any>} args.params
23
+ * @param {string} args.path
24
+ * @param {import("../http-server/client/request.js").default} args.request
25
+ * @returns {{restPath: string} | undefined}
26
+ */
27
+ matchWithPath({params, path, request}) { // eslint-disable-line no-unused-vars
16
28
  const match = path.match(this.regExp)
17
29
 
18
30
  if (match) {
@@ -24,3 +36,7 @@ export default class VelociousRouteNamespaceRoute extends BaseRoute {
24
36
  }
25
37
  }
26
38
  }
39
+
40
+ BaseRoute.registerRouteNamespaceType(VelociousRouteNamespaceRoute)
41
+
42
+ export default VelociousRouteNamespaceRoute
@@ -1,10 +1,14 @@
1
- import BaseRoute, {initBaseRoute} from "./base-route.js"
1
+ // @ts-check
2
+
3
+ import BaseRoute from "./base-route.js"
2
4
  import escapeStringRegexp from "escape-string-regexp"
3
5
  import restArgsError from "../utils/rest-args-error.js"
4
6
 
5
- initBaseRoute()
6
-
7
- export default class VelociousRoutePostRoute extends BaseRoute {
7
+ class VelociousRoutePostRoute extends BaseRoute {
8
+ /**
9
+ * @param {object} args
10
+ * @param {string} args.name
11
+ */
8
12
  constructor({name, ...restArgs}) {
9
13
  super()
10
14
  restArgsError(restArgs)
@@ -12,7 +16,14 @@ export default class VelociousRoutePostRoute extends BaseRoute {
12
16
  this.regExp = new RegExp(`^(${escapeStringRegexp(name)})(.*)$`)
13
17
  }
14
18
 
15
- matchWithPath({params, path}) {
19
+ /**
20
+ * @param {object} args
21
+ * @param {Record<string, any>} args.params
22
+ * @param {string} args.path
23
+ * @param {import("../http-server/client/request.js").default} args.request
24
+ * @returns {{restPath: string} | undefined}
25
+ */
26
+ matchWithPath({params, path, request}) { // eslint-disable-line no-unused-vars
16
27
  const match = path.match(this.regExp)
17
28
 
18
29
  if (match) {
@@ -24,3 +35,7 @@ export default class VelociousRoutePostRoute extends BaseRoute {
24
35
  }
25
36
  }
26
37
  }
38
+
39
+ BaseRoute.registerRoutePostType(VelociousRoutePostRoute)
40
+
41
+ export default VelociousRoutePostRoute
@@ -1,10 +1,18 @@
1
- import {digg, digs} from "diggerize"
1
+ // @ts-check
2
+
3
+ import {digg} from "diggerize"
2
4
  import {dirname} from "path"
3
5
  import {fileURLToPath} from "url"
4
6
  import fs from "fs/promises"
5
7
  import * as inflection from "inflection"
6
8
 
7
9
  export default class VelociousRoutesResolver {
10
+ /**
11
+ * @param {object} args
12
+ * @param {import("../configuration.js").default} args.configuration
13
+ * @param {import("../http-server/client/request.js").default} args.request
14
+ * @param {import("../http-server/client/response.js").default} args.response
15
+ */
8
16
  constructor({configuration, request, response}) {
9
17
  if (!configuration) throw new Error("No configuration given")
10
18
  if (!request) throw new Error("No request given")
@@ -65,6 +73,11 @@ export default class VelociousRoutesResolver {
65
73
  })
66
74
  }
67
75
 
76
+ /**
77
+ * @param {import("./base-route.js").default} route
78
+ * @param {string} path
79
+ * @returns {{restPath: string} | undefined}
80
+ */
68
81
  matchPathWithRoutes(route, path) {
69
82
  const pathWithoutSlash = path.replace(/^\//, "")
70
83
 
@@ -77,7 +90,7 @@ export default class VelociousRoutesResolver {
77
90
 
78
91
  if (!matchResult) continue
79
92
 
80
- const {restPath} = digs(matchResult, "restPath")
93
+ const {restPath} = matchResult
81
94
 
82
95
  if (restPath) {
83
96
  return this.matchPathWithRoutes(subRoute, restPath)
@@ -1,10 +1,15 @@
1
- import BaseRoute, {initBaseRoute} from "./base-route.js"
1
+ // @ts-check
2
+
3
+ import BaseRoute from "./base-route.js"
4
+ import BasicRoute from "./basic-route.js"
2
5
  import escapeStringRegexp from "escape-string-regexp"
3
6
  import restArgsError from "../utils/rest-args-error.js"
4
7
 
5
- initBaseRoute()
6
-
7
- export default class VelociousRouteResourceRoute extends BaseRoute {
8
+ class VelociousRouteResourceRoute extends BasicRoute {
9
+ /**
10
+ * @param {object} args
11
+ * @param {string} args.name
12
+ */
8
13
  constructor({name, ...restArgs}) {
9
14
  super()
10
15
  restArgsError(restArgs)
@@ -12,6 +17,13 @@ export default class VelociousRouteResourceRoute extends BaseRoute {
12
17
  this.regExp = new RegExp(`^(${escapeStringRegexp(name)})(.*)$`)
13
18
  }
14
19
 
20
+ /**
21
+ * @param {object} args
22
+ * @param {Record<string, any>} args.params
23
+ * @param {string} args.path
24
+ * @param {import("../http-server/client/request.js").default} args.request
25
+ * @returns {{restPath: string} | undefined}
26
+ */
15
27
  matchWithPath({params, path, request}) {
16
28
  const match = path.match(this.regExp)
17
29
 
@@ -22,7 +34,7 @@ export default class VelociousRouteResourceRoute extends BaseRoute {
22
34
  let subRoutesMatchesRestPath = false
23
35
 
24
36
  for (const route of this.routes) {
25
- if (route.matchWithPath({path: restPath})) {
37
+ if (route.matchWithPath({params, path: restPath, request})) {
26
38
  subRoutesMatchesRestPath = true
27
39
  }
28
40
  }
@@ -43,3 +55,7 @@ export default class VelociousRouteResourceRoute extends BaseRoute {
43
55
  }
44
56
  }
45
57
  }
58
+
59
+ BaseRoute.registerRouteResourceType(VelociousRouteResourceRoute)
60
+
61
+ export default VelociousRouteResourceRoute
@@ -1,6 +1,6 @@
1
- import BaseRoute, {initBaseRoute} from "./base-route.js"
1
+ // @ts-check
2
2
 
3
- initBaseRoute()
3
+ import BasicRoute from "./basic-route.js"
4
4
 
5
- export default class VelociousRootRoute extends BaseRoute {
5
+ export default class VelociousRootRoute extends BasicRoute {
6
6
  }
@@ -1,10 +1,15 @@
1
+ // @ts-check
2
+
1
3
  class Response {
4
+ /**
5
+ * @param {globalThis.Response} fetchResponse
6
+ */
2
7
  constructor(fetchResponse) {
3
8
  this.fetchResponse = fetchResponse
4
9
  }
5
10
 
6
11
  /**
7
- * @returns {void}
12
+ * @returns {Promise<void>}
8
13
  */
9
14
  async parse() {
10
15
  this._body = await this.fetchResponse.text()
@@ -12,19 +17,19 @@ class Response {
12
17
  if (this.statusCode() != 200) throw new Error(`Request failed with code ${this.statusCode()} and body: ${this.body()}`)
13
18
  }
14
19
 
15
- /**
16
- * @returns {string}
17
- */
18
- body() { return this._body }
20
+ /** @returns {string} */
21
+ body() {
22
+ if (!this._body) throw new Error("Response body not parsed yet. Call parse() first.")
19
23
 
20
- /**
21
- * @returns {string}
22
- */
23
- contentType() { return this.fetchResponse.headers.get("content-type") }
24
+ return this._body
25
+ }
24
26
 
25
- /**
26
- * @returns {string}
27
- */
27
+ /** @returns {string | null} */
28
+ contentType() {
29
+ return this.fetchResponse.headers.get("content-type")
30
+ }
31
+
32
+ /** @returns {number} */
28
33
  statusCode() { return this.fetchResponse.status }
29
34
  }
30
35
 
@@ -34,7 +39,7 @@ export default class RequestClient {
34
39
 
35
40
  /**
36
41
  * @param {string} path
37
- * @returns {Response}
42
+ * @returns {Promise<Response>}
38
43
  */
39
44
  async get(path) {
40
45
  const fetchResponse = await fetch(`http://${this.host}:${this.port}${path}`)
@@ -48,7 +53,7 @@ export default class RequestClient {
48
53
  /**
49
54
  * @param {string} path
50
55
  * @param {object} data
51
- * @returns {Response}
56
+ * @returns {Promise<Response>}
52
57
  */
53
58
  async post(path, data) {
54
59
  const fetchResponse = await fetch(
@@ -9,10 +9,11 @@ import {tests} from "./test.js"
9
9
 
10
10
  /**
11
11
  * @typedef {object} TestArgs
12
- * @property {Application} application
13
- * @property {RequestClient} client
14
- * @property {boolean} focus
15
- * @property {string} type
12
+ * @property {Application} [application]
13
+ * @property {RequestClient} [client]
14
+ * @property {boolean} [focus]
15
+ * @property {() => Promise<void>} [function]
16
+ * @property {string} [type]
16
17
  */
17
18
 
18
19
  /**
@@ -22,15 +23,20 @@ import {tests} from "./test.js"
22
23
  */
23
24
 
24
25
  /**
25
- * @typedef {object} AfterBeforeEachCallback
26
- * @property {function({configuration: import("../configuration.js").default, testArgs: TestArgs, testData: TestData}) : Promise<void>} callback
26
+ * @typedef {function({configuration: import("../configuration.js").default, testArgs: TestArgs, testData: TestData}) : Promise<void>} AfterBeforeEachCallbackType
27
+ */
28
+
29
+ /**
30
+ * @typedef {object} AfterBeforeEachCallbackObjectType
31
+ * @property {AfterBeforeEachCallbackType} callback
27
32
  */
28
33
 
29
34
  /**
30
35
  * @typedef {object} TestsArgument
36
+ * @property {Record<string, TestData>} args
31
37
  * @property {boolean} [anyTestsFocussed]
32
- * @property {AfterBeforeEachCallback[]} afterEaches
33
- * @property {AfterBeforeEachCallback[]} beforeEaches
38
+ * @property {AfterBeforeEachCallbackObjectType[]} afterEaches
39
+ * @property {AfterBeforeEachCallbackObjectType[]} beforeEaches
34
40
  * @property {Record<string, TestData>} tests - A unique identifier for the node.
35
41
  * @property {Record<string, TestsArgument>} subs - Optional child nodes. Each item is another `Node`, allowing recursion.
36
42
  */
@@ -212,8 +218,8 @@ export default class TestRunner {
212
218
 
213
219
  /**
214
220
  * @param {object} args
215
- * @param {Array<AfterBeforeEachCallback>} args.afterEaches
216
- * @param {Array<AfterBeforeEachCallback>} args.beforeEaches
221
+ * @param {Array<AfterBeforeEachCallbackObjectType>} args.afterEaches
222
+ * @param {Array<AfterBeforeEachCallbackObjectType>} args.beforeEaches
217
223
  * @param {TestsArgument} args.tests
218
224
  * @param {string[]} args.descriptions
219
225
  * @param {number} args.indentLevel