velocious 1.0.644 → 1.0.646
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 +11 -9
- package/build/authorization/ability.js +36 -13
- package/build/background-jobs/adapter.js +9 -0
- package/build/background-jobs/main.js +35 -10
- package/build/background-jobs/store.js +217 -38
- package/build/background-jobs/types.js +15 -0
- package/build/configuration-types.js +1 -1
- package/build/configuration.js +45 -9
- package/build/database/drivers/base-column.js +8 -0
- package/build/database/drivers/mssql/sql/update.js +1 -3
- package/build/database/drivers/mysql/sql/update.js +1 -3
- package/build/database/drivers/pgsql/column.js +22 -0
- package/build/database/drivers/pgsql/sql/update.js +1 -3
- package/build/database/drivers/sqlite/sql/alter-table.js +11 -1
- package/build/database/drivers/sqlite/sql/update.js +1 -3
- package/build/database/query/index.js +2 -2
- package/build/database/query/model-class-query.js +26 -10
- package/build/database/query/preloader/has-many.js +4 -1
- package/build/database/query/query-data.js +2 -1
- package/build/database/query/update-base.js +14 -0
- package/build/database/query/with-count.js +3 -1
- package/build/database/record/acts-as-list.js +37 -13
- package/build/database/record/attachments/store.js +336 -26
- package/build/database/record/auditing.js +6 -3
- package/build/database/record/index.js +197 -42
- package/build/database/record/instance-relationships/belongs-to.js +2 -1
- package/build/database/record/validators/uniqueness.js +8 -5
- package/build/environment-handlers/node/cli/commands/generate/frontend-models.js +24 -8
- package/build/frontend-model-controller.js +136 -53
- package/build/frontend-model-resource/base-resource.js +87 -37
- package/build/frontend-model-resource/velocious-attachment-resource.js +98 -31
- package/build/frontend-models/base.js +307 -59
- package/build/frontend-models/preloader.js +6 -3
- package/build/frontend-models/query.js +15 -6
- package/build/frontend-models/resource-definition.js +21 -2
- package/build/frontend-models/use-destroyed-event.js +1 -1
- package/build/frontend-models/use-model-class-event.js +2 -2
- package/build/frontend-models/use-updated-event.js +1 -1
- package/build/frontend-models/websocket-channel.js +256 -93
- package/build/frontend-models/websocket-publishers.js +218 -18
- package/build/http-server/client/websocket-session.js +13 -1
- package/build/http-server/websocket-channel.js +15 -2
- package/build/src/authorization/ability.d.ts +9 -3
- package/build/src/authorization/ability.d.ts.map +1 -1
- package/build/src/authorization/ability.js +33 -14
- package/build/src/background-jobs/adapter.d.ts +6 -0
- package/build/src/background-jobs/adapter.d.ts.map +1 -1
- package/build/src/background-jobs/adapter.js +9 -1
- package/build/src/background-jobs/main.d.ts +6 -0
- package/build/src/background-jobs/main.d.ts.map +1 -1
- package/build/src/background-jobs/main.js +34 -11
- package/build/src/background-jobs/store.d.ts +66 -12
- package/build/src/background-jobs/store.d.ts.map +1 -1
- package/build/src/background-jobs/store.js +191 -35
- package/build/src/background-jobs/types.d.ts +55 -0
- package/build/src/background-jobs/types.d.ts.map +1 -1
- package/build/src/background-jobs/types.js +16 -1
- package/build/src/configuration-types.d.ts +3 -3
- package/build/src/configuration-types.d.ts.map +1 -1
- package/build/src/configuration-types.js +2 -2
- package/build/src/configuration.d.ts +18 -8
- package/build/src/configuration.d.ts.map +1 -1
- package/build/src/configuration.js +38 -7
- package/build/src/database/drivers/base-column.d.ts +5 -0
- package/build/src/database/drivers/base-column.d.ts.map +1 -1
- package/build/src/database/drivers/base-column.js +8 -1
- package/build/src/database/drivers/mssql/sql/update.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/sql/update.js +2 -4
- package/build/src/database/drivers/mysql/sql/update.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/sql/update.js +2 -4
- package/build/src/database/drivers/pgsql/column.d.ts +5 -0
- package/build/src/database/drivers/pgsql/column.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/column.js +19 -1
- package/build/src/database/drivers/pgsql/sql/update.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/sql/update.js +2 -4
- package/build/src/database/drivers/sqlite/sql/alter-table.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/sql/alter-table.js +6 -2
- package/build/src/database/drivers/sqlite/sql/update.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/sql/update.js +2 -4
- package/build/src/database/query/index.d.ts +4 -4
- package/build/src/database/query/index.d.ts.map +1 -1
- package/build/src/database/query/index.js +3 -3
- package/build/src/database/query/model-class-query.d.ts +8 -2
- package/build/src/database/query/model-class-query.d.ts.map +1 -1
- package/build/src/database/query/model-class-query.js +25 -11
- package/build/src/database/query/preloader/has-many.d.ts.map +1 -1
- package/build/src/database/query/preloader/has-many.js +4 -2
- package/build/src/database/query/query-data.d.ts.map +1 -1
- package/build/src/database/query/query-data.js +3 -2
- package/build/src/database/query/update-base.d.ts +7 -0
- package/build/src/database/query/update-base.d.ts.map +1 -1
- package/build/src/database/query/update-base.js +13 -1
- package/build/src/database/query/with-count.d.ts.map +1 -1
- package/build/src/database/query/with-count.js +3 -2
- package/build/src/database/record/acts-as-list.d.ts.map +1 -1
- package/build/src/database/record/acts-as-list.js +35 -14
- package/build/src/database/record/attachments/store.d.ts +67 -0
- package/build/src/database/record/attachments/store.d.ts.map +1 -1
- package/build/src/database/record/attachments/store.js +301 -25
- package/build/src/database/record/auditing.d.ts.map +1 -1
- package/build/src/database/record/auditing.js +7 -4
- package/build/src/database/record/index.d.ts +78 -26
- package/build/src/database/record/index.d.ts.map +1 -1
- package/build/src/database/record/index.js +171 -42
- package/build/src/database/record/instance-relationships/belongs-to.d.ts.map +1 -1
- package/build/src/database/record/instance-relationships/belongs-to.js +3 -2
- package/build/src/database/record/validators/uniqueness.d.ts.map +1 -1
- package/build/src/database/record/validators/uniqueness.js +8 -6
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +4 -4
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.js +24 -12
- package/build/src/frontend-model-controller.d.ts +29 -8
- package/build/src/frontend-model-controller.d.ts.map +1 -1
- package/build/src/frontend-model-controller.js +122 -51
- package/build/src/frontend-model-resource/base-resource.d.ts +51 -24
- package/build/src/frontend-model-resource/base-resource.d.ts.map +1 -1
- package/build/src/frontend-model-resource/base-resource.js +83 -37
- package/build/src/frontend-model-resource/velocious-attachment-resource.d.ts +45 -26
- package/build/src/frontend-model-resource/velocious-attachment-resource.d.ts.map +1 -1
- package/build/src/frontend-model-resource/velocious-attachment-resource.js +89 -31
- package/build/src/frontend-models/base.d.ts +53 -20
- package/build/src/frontend-models/base.d.ts.map +1 -1
- package/build/src/frontend-models/base.js +275 -59
- package/build/src/frontend-models/preloader.d.ts.map +1 -1
- package/build/src/frontend-models/preloader.js +6 -4
- package/build/src/frontend-models/query.d.ts +2 -2
- package/build/src/frontend-models/query.d.ts.map +1 -1
- package/build/src/frontend-models/query.js +14 -7
- package/build/src/frontend-models/resource-definition.d.ts.map +1 -1
- package/build/src/frontend-models/resource-definition.js +20 -3
- package/build/src/frontend-models/use-destroyed-event.d.ts +1 -1
- package/build/src/frontend-models/use-destroyed-event.d.ts.map +1 -1
- package/build/src/frontend-models/use-destroyed-event.js +2 -2
- package/build/src/frontend-models/use-model-class-event.d.ts +2 -2
- package/build/src/frontend-models/use-model-class-event.d.ts.map +1 -1
- package/build/src/frontend-models/use-model-class-event.js +3 -3
- package/build/src/frontend-models/use-updated-event.d.ts +1 -1
- package/build/src/frontend-models/use-updated-event.d.ts.map +1 -1
- package/build/src/frontend-models/use-updated-event.js +2 -2
- package/build/src/frontend-models/websocket-channel.d.ts +60 -41
- package/build/src/frontend-models/websocket-channel.d.ts.map +1 -1
- package/build/src/frontend-models/websocket-channel.js +225 -85
- package/build/src/frontend-models/websocket-publishers.d.ts +9 -0
- package/build/src/frontend-models/websocket-publishers.d.ts.map +1 -1
- package/build/src/frontend-models/websocket-publishers.js +190 -19
- package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
- package/build/src/http-server/client/websocket-session.js +11 -2
- package/build/src/http-server/websocket-channel.d.ts +20 -8
- package/build/src/http-server/websocket-channel.d.ts.map +1 -1
- package/build/src/http-server/websocket-channel.js +15 -3
- package/build/src/sync/sync-api-client.d.ts.map +1 -1
- package/build/src/sync/sync-api-client.js +4 -3
- package/build/src/sync/sync-client.d.ts.map +1 -1
- package/build/src/sync/sync-client.js +3 -2
- package/build/src/sync/sync-envelope-replay-service.d.ts.map +1 -1
- package/build/src/sync/sync-envelope-replay-service.js +6 -5
- package/build/src/sync/sync-publisher.d.ts.map +1 -1
- package/build/src/sync/sync-publisher.js +4 -3
- package/build/src/testing/browser-frontend-model-event-hook-scenarios.d.ts +2 -2
- package/build/src/testing/browser-frontend-model-event-hook-scenarios.d.ts.map +1 -1
- package/build/src/testing/browser-frontend-model-event-hook-scenarios.js +3 -3
- package/build/src/testing/test-profiler.d.ts +4 -4
- package/build/src/testing/test-profiler.d.ts.map +1 -1
- package/build/src/testing/test-profiler.js +3 -3
- package/build/src/testing/test-runner.d.ts +271 -117
- package/build/src/testing/test-runner.d.ts.map +1 -1
- package/build/src/testing/test-runner.js +496 -427
- package/build/src/testing/test.d.ts +11 -72
- package/build/src/testing/test.d.ts.map +1 -1
- package/build/src/testing/test.js +131 -284
- package/build/src/testing/velocious-attempt-executor.d.ts +14 -29
- package/build/src/testing/velocious-attempt-executor.d.ts.map +1 -1
- package/build/src/testing/velocious-attempt-executor.js +52 -46
- package/build/src/testing/velocious-runner-reporter.d.ts +29 -34
- package/build/src/testing/velocious-runner-reporter.d.ts.map +1 -1
- package/build/src/testing/velocious-runner-reporter.js +145 -57
- package/build/src/testing/velocious-suite-hook-executor.d.ts +5 -23
- package/build/src/testing/velocious-suite-hook-executor.d.ts.map +1 -1
- package/build/src/testing/velocious-suite-hook-executor.js +22 -47
- package/build/src/testing/velocious-test-arguments.d.ts +11 -6
- package/build/src/testing/velocious-test-arguments.d.ts.map +1 -1
- package/build/src/testing/velocious-test-arguments.js +18 -10
- package/build/src/utils/model-primary-key.d.ts +73 -0
- package/build/src/utils/model-primary-key.d.ts.map +1 -0
- package/build/src/utils/model-primary-key.js +144 -0
- package/build/sync/sync-api-client.js +3 -2
- package/build/sync/sync-client.js +2 -1
- package/build/sync/sync-envelope-replay-service.js +5 -4
- package/build/sync/sync-publisher.js +3 -2
- package/build/testing/browser-frontend-model-event-hook-scenarios.js +2 -2
- package/build/testing/test-profiler.js +2 -2
- package/build/testing/test-runner.js +493 -449
- package/build/testing/test.js +164 -306
- package/build/testing/velocious-attempt-executor.js +55 -45
- package/build/testing/velocious-runner-reporter.js +156 -58
- package/build/testing/velocious-suite-hook-executor.js +22 -50
- package/build/testing/velocious-test-arguments.js +19 -10
- package/build/utils/model-primary-key.js +171 -0
- package/package.json +6 -5
- package/src/authorization/ability.js +36 -13
- package/src/background-jobs/adapter.js +9 -0
- package/src/background-jobs/main.js +35 -10
- package/src/background-jobs/store.js +217 -38
- package/src/background-jobs/types.js +15 -0
- package/src/configuration-types.js +1 -1
- package/src/configuration.js +45 -9
- package/src/database/drivers/base-column.js +8 -0
- package/src/database/drivers/mssql/sql/update.js +1 -3
- package/src/database/drivers/mysql/sql/update.js +1 -3
- package/src/database/drivers/pgsql/column.js +22 -0
- package/src/database/drivers/pgsql/sql/update.js +1 -3
- package/src/database/drivers/sqlite/sql/alter-table.js +11 -1
- package/src/database/drivers/sqlite/sql/update.js +1 -3
- package/src/database/query/index.js +2 -2
- package/src/database/query/model-class-query.js +26 -10
- package/src/database/query/preloader/has-many.js +4 -1
- package/src/database/query/query-data.js +2 -1
- package/src/database/query/update-base.js +14 -0
- package/src/database/query/with-count.js +3 -1
- package/src/database/record/acts-as-list.js +37 -13
- package/src/database/record/attachments/store.js +336 -26
- package/src/database/record/auditing.js +6 -3
- package/src/database/record/index.js +197 -42
- package/src/database/record/instance-relationships/belongs-to.js +2 -1
- package/src/database/record/validators/uniqueness.js +8 -5
- package/src/environment-handlers/node/cli/commands/generate/frontend-models.js +24 -8
- package/src/frontend-model-controller.js +136 -53
- package/src/frontend-model-resource/base-resource.js +87 -37
- package/src/frontend-model-resource/velocious-attachment-resource.js +98 -31
- package/src/frontend-models/base.js +307 -59
- package/src/frontend-models/preloader.js +6 -3
- package/src/frontend-models/query.js +15 -6
- package/src/frontend-models/resource-definition.js +21 -2
- package/src/frontend-models/use-destroyed-event.js +1 -1
- package/src/frontend-models/use-model-class-event.js +2 -2
- package/src/frontend-models/use-updated-event.js +1 -1
- package/src/frontend-models/websocket-channel.js +256 -93
- package/src/frontend-models/websocket-publishers.js +218 -18
- package/src/http-server/client/websocket-session.js +13 -1
- package/src/http-server/websocket-channel.js +15 -2
- package/src/sync/sync-api-client.js +3 -2
- package/src/sync/sync-client.js +2 -1
- package/src/sync/sync-envelope-replay-service.js +5 -4
- package/src/sync/sync-publisher.js +3 -2
- package/src/testing/browser-frontend-model-event-hook-scenarios.js +2 -2
- package/src/testing/test-profiler.js +2 -2
- package/src/testing/test-runner.js +493 -449
- package/src/testing/test.js +164 -306
- package/src/testing/velocious-attempt-executor.js +55 -45
- package/src/testing/velocious-runner-reporter.js +156 -58
- package/src/testing/velocious-suite-hook-executor.js +22 -50
- package/src/testing/velocious-test-arguments.js +19 -10
- package/src/utils/model-primary-key.js +171 -0
- package/build/src/testing/testing-package-adapter.d.ts +0 -9
- package/build/src/testing/testing-package-adapter.d.ts.map +0 -1
- package/build/src/testing/testing-package-adapter.js +0 -69
- package/build/testing/testing-package-adapter.js +0 -76
- package/build/tsconfig.tsbuildinfo +0 -1
- package/src/testing/testing-package-adapter.js +0 -76
|
@@ -4,6 +4,7 @@ import restArgsError from "../utils/rest-args-error.js"
|
|
|
4
4
|
|
|
5
5
|
/** @typedef {import("./test-runner.js").TestArgs} TestArgs */
|
|
6
6
|
/** @typedef {import("./test-runner.js").TestData} TestData */
|
|
7
|
+
/** @typedef {import("@velocious/testing/runner").TestDeclaration} PackageTestDeclaration */
|
|
7
8
|
|
|
8
9
|
export default class VelociousTestArguments {
|
|
9
10
|
/**
|
|
@@ -17,25 +18,33 @@ export default class VelociousTestArguments {
|
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
/**
|
|
20
|
-
*
|
|
21
|
-
* @param {
|
|
22
|
-
* @
|
|
21
|
+
* Resolves stable Velocious arguments after package-owned table arguments.
|
|
22
|
+
* @param {object} input - Package resolver input.
|
|
23
|
+
* @param {PackageTestDeclaration} input.test - Selected declaration.
|
|
24
|
+
* @returns {Promise<ReturnType<typeof JSON.parse>[]>} - Callback arguments.
|
|
23
25
|
*/
|
|
24
|
-
async
|
|
25
|
-
const
|
|
26
|
+
async resolve({test}) {
|
|
27
|
+
const compatibility = await this.testRunner.testCompatibility(test)
|
|
26
28
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
return testArgs
|
|
29
|
+
return [...test.rowArguments, compatibility.testArgs]
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
33
|
* Copies declaration metadata before selection can inspect it.
|
|
34
|
-
* @param {
|
|
34
|
+
* @param {PackageTestDeclaration} testData - Test registration.
|
|
35
35
|
* @returns {TestArgs} - Independent test arguments.
|
|
36
36
|
*/
|
|
37
37
|
copy(testData) {
|
|
38
|
-
|
|
38
|
+
const testArgs = /** @type {TestArgs} */ (Object.assign({}, testData.options))
|
|
39
|
+
|
|
40
|
+
if (testArgs.retry === undefined && typeof testData.options.retries === "number") {
|
|
41
|
+
testArgs.retry = testData.options.retries
|
|
42
|
+
}
|
|
43
|
+
if (testArgs.timeoutSeconds === undefined && typeof testData.options.timeoutMs === "number") {
|
|
44
|
+
testArgs.timeoutSeconds = testData.options.timeoutMs / 1000
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return testArgs
|
|
39
48
|
}
|
|
40
49
|
|
|
41
50
|
/**
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
import isPlainObject from "./plain-object.js"
|
|
4
|
+
|
|
5
|
+
/** @typedef {string | number} ModelPrimaryKeyScalar */
|
|
6
|
+
/** @typedef {string | string[]} ModelPrimaryKeyDefinition */
|
|
7
|
+
/** @typedef {Record<string, ModelPrimaryKeyScalar>} CompositeModelPrimaryKeyValue */
|
|
8
|
+
/** @typedef {ModelPrimaryKeyScalar | CompositeModelPrimaryKeyValue} ModelPrimaryKeyValue */
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Validates an untrusted composite identity and returns its definition-ordered values.
|
|
12
|
+
* @param {string[]} primaryKey - Composite primary-key definition.
|
|
13
|
+
* @param {ReturnType<typeof JSON.parse>} value - Candidate identity.
|
|
14
|
+
* @returns {CompositeModelPrimaryKeyValue} - Validated identity.
|
|
15
|
+
*/
|
|
16
|
+
export function validatedCompositePrimaryKeyValue(primaryKey, value) {
|
|
17
|
+
if (!isPlainObject(value)) {
|
|
18
|
+
throw new TypeError("Expected composite primary key identity to be a plain object.")
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const valueKeys = Object.keys(value)
|
|
22
|
+
|
|
23
|
+
if (valueKeys.length !== primaryKey.length || primaryKey.some((key) => !Object.prototype.hasOwnProperty.call(value, key))) {
|
|
24
|
+
throw new TypeError(`Expected composite primary key identity fields: ${primaryKey.join(", ")}.`)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** @type {CompositeModelPrimaryKeyValue} */
|
|
28
|
+
const validatedValue = {}
|
|
29
|
+
|
|
30
|
+
for (const key of primaryKey) {
|
|
31
|
+
const keyValue = value[key]
|
|
32
|
+
|
|
33
|
+
if (typeof keyValue !== "string" && typeof keyValue !== "number") {
|
|
34
|
+
throw new TypeError(`Expected composite primary key identity field '${key}' to be a string or number.`)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
validatedValue[key] = keyValue
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return validatedValue
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Returns a scalar primary-key definition or fails at a feature boundary that cannot represent composite identities.
|
|
45
|
+
* @param {ModelPrimaryKeyDefinition} primaryKey - Primary-key definition.
|
|
46
|
+
* @param {string} operation - Operation requiring a scalar identity.
|
|
47
|
+
* @returns {string} - Scalar primary-key column or attribute name.
|
|
48
|
+
*/
|
|
49
|
+
export function scalarModelPrimaryKey(primaryKey, operation) {
|
|
50
|
+
if (Array.isArray(primaryKey)) {
|
|
51
|
+
throw new Error(`${operation} does not support composite primary keys.`)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return primaryKey
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Returns a scalar identity or fails at a feature boundary that cannot represent composite identities.
|
|
59
|
+
* @param {ModelPrimaryKeyValue} value - Model identity.
|
|
60
|
+
* @param {string} operation - Operation requiring a scalar identity.
|
|
61
|
+
* @returns {ModelPrimaryKeyScalar} - Scalar identity.
|
|
62
|
+
*/
|
|
63
|
+
export function scalarModelPrimaryKeyValue(value, operation) {
|
|
64
|
+
if (typeof value !== "string" && typeof value !== "number") {
|
|
65
|
+
throw new Error(`${operation} does not support composite primary keys.`)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return value
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Builds query conditions from a scalar or composite model identity.
|
|
73
|
+
* @param {ModelPrimaryKeyDefinition} primaryKey - Primary-key definition.
|
|
74
|
+
* @param {ReturnType<typeof JSON.parse>} value - Candidate identity.
|
|
75
|
+
* @returns {Record<string, ModelPrimaryKeyScalar>} - Primary-key query conditions.
|
|
76
|
+
*/
|
|
77
|
+
export function modelPrimaryKeyConditions(primaryKey, value) {
|
|
78
|
+
if (Array.isArray(primaryKey)) return validatedCompositePrimaryKeyValue(primaryKey, value)
|
|
79
|
+
|
|
80
|
+
return {[primaryKey]: /** @type {ModelPrimaryKeyScalar} */ (value)}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Builds a qualified SQL predicate matching any supplied composite identity.
|
|
85
|
+
* @param {object} args - Arguments.
|
|
86
|
+
* @param {typeof import("../database/record/index.js").default} args.modelClass - Model class owning the identity attributes.
|
|
87
|
+
* @param {string[]} args.primaryKey - Composite primary-key definition.
|
|
88
|
+
* @param {import("../database/query/model-class-query.js").default<typeof import("../database/record/index.js").default>} args.query - Query receiving the predicate.
|
|
89
|
+
* @param {ModelPrimaryKeyValue[]} args.values - Candidate identities.
|
|
90
|
+
* @returns {string} - Qualified SQL predicate.
|
|
91
|
+
*/
|
|
92
|
+
export function compositeModelPrimaryKeyCohortSql({modelClass, primaryKey, query, values}) {
|
|
93
|
+
if (values.length === 0) return "(1 = 0)"
|
|
94
|
+
|
|
95
|
+
const tableSql = query.driver.quoteTable(query.getTableReferenceForJoin())
|
|
96
|
+
|
|
97
|
+
return `(${values.map((value) => {
|
|
98
|
+
const conditions = modelPrimaryKeyConditions(primaryKey, value)
|
|
99
|
+
const identitySql = primaryKey.map((attributeName) => {
|
|
100
|
+
const columnName = modelClass.getColumnNameForAttributeName(attributeName)
|
|
101
|
+
|
|
102
|
+
return `${tableSql}.${query.driver.quoteColumn(columnName)} = ${query.driver.quote(conditions[attributeName])}`
|
|
103
|
+
}).join(" AND ")
|
|
104
|
+
|
|
105
|
+
return `(${identitySql})`
|
|
106
|
+
}).join(" OR ")})`
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Reads a scalar or composite identity through the owning model's value reader.
|
|
111
|
+
* @param {ModelPrimaryKeyDefinition} primaryKey - Primary-key definition.
|
|
112
|
+
* @param {(key: string) => ReturnType<typeof JSON.parse>} read - Primary-key value reader.
|
|
113
|
+
* @returns {ModelPrimaryKeyValue} - Model identity.
|
|
114
|
+
*/
|
|
115
|
+
export function readModelPrimaryKeyValue(primaryKey, read) {
|
|
116
|
+
if (!Array.isArray(primaryKey)) return /** @type {ModelPrimaryKeyScalar} */ (read(primaryKey))
|
|
117
|
+
|
|
118
|
+
/** @type {CompositeModelPrimaryKeyValue} */
|
|
119
|
+
const value = {}
|
|
120
|
+
|
|
121
|
+
for (const key of primaryKey) value[key] = /** @type {ModelPrimaryKeyScalar} */ (read(key))
|
|
122
|
+
|
|
123
|
+
return validatedCompositePrimaryKeyValue(primaryKey, value)
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Returns an unambiguous map key while preserving legacy scalar map keys.
|
|
128
|
+
* @param {ModelPrimaryKeyDefinition} primaryKey - Primary-key definition.
|
|
129
|
+
* @param {ReturnType<typeof JSON.parse>} value - Candidate identity.
|
|
130
|
+
* @returns {string} - Canonical identity key.
|
|
131
|
+
*/
|
|
132
|
+
export function modelPrimaryKeyCacheKey(primaryKey, value) {
|
|
133
|
+
if (!Array.isArray(primaryKey)) return String(value)
|
|
134
|
+
|
|
135
|
+
const validatedValue = validatedCompositePrimaryKeyValue(primaryKey, value)
|
|
136
|
+
|
|
137
|
+
return JSON.stringify(primaryKey.map((key) => validatedValue[key]))
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Restores a model identity from its canonical string representation.
|
|
142
|
+
* @param {ModelPrimaryKeyDefinition} primaryKey - Primary-key definition.
|
|
143
|
+
* @param {string} cacheKey - Canonical identity key.
|
|
144
|
+
* @returns {ModelPrimaryKeyValue} - Restored identity.
|
|
145
|
+
*/
|
|
146
|
+
export function modelPrimaryKeyValueFromCacheKey(primaryKey, cacheKey) {
|
|
147
|
+
if (!Array.isArray(primaryKey)) return cacheKey
|
|
148
|
+
|
|
149
|
+
let parsed
|
|
150
|
+
|
|
151
|
+
try {
|
|
152
|
+
parsed = JSON.parse(cacheKey)
|
|
153
|
+
} catch (error) {
|
|
154
|
+
if (!(error instanceof SyntaxError)) throw error
|
|
155
|
+
|
|
156
|
+
throw new TypeError("Expected composite primary key cache value to be valid JSON.", {cause: error})
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if (!Array.isArray(parsed) || parsed.length !== primaryKey.length) {
|
|
160
|
+
throw new TypeError(`Expected composite primary key cache value with ${primaryKey.length} fields.`)
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/** @type {CompositeModelPrimaryKeyValue} */
|
|
164
|
+
const value = {}
|
|
165
|
+
|
|
166
|
+
for (let index = 0; index < primaryKey.length; index += 1) {
|
|
167
|
+
value[primaryKey[index]] = parsed[index]
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
return validatedCompositePrimaryKeyValue(primaryKey, value)
|
|
171
|
+
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { defaultTestContext } from "@velocious/testing";
|
|
2
|
-
export type TestingPackageSuite = (typeof defaultTestContext.registry.suites)[number];
|
|
3
|
-
/**
|
|
4
|
-
* Makes newly imported public-package suites visible to the Velocious runner.
|
|
5
|
-
* @param {import("./test-runner.js").TestsArgument} tests - Velocious root test tree.
|
|
6
|
-
* @returns {void}
|
|
7
|
-
*/
|
|
8
|
-
export declare function synchronizeTestingPackageTests(tests: import("./test-runner.js").TestsArgument): void;
|
|
9
|
-
//# sourceMappingURL=testing-package-adapter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"testing-package-adapter.d.ts","sourceRoot":"","sources":["../../../src/testing/testing-package-adapter.js"],"names":[],"mappings":"AAEA,OAAO,EAAC,kBAAkB,EAAC,MAAM,oBAAoB,CAAA;AAEjD,YAA+D,mBAAmB,GAAxE,CAAC,OAAO,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAqB;AA0DtF;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,KAAK,EAHzC,OAAO,kBAAkB,EAAE,aAGc,GAFvC,IAAI,CAUhB"}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
// @ts-check
|
|
2
|
-
import { defaultTestContext } from "@velocious/testing";
|
|
3
|
-
/** @typedef {(typeof defaultTestContext.registry.suites)[number]} TestingPackageSuite */
|
|
4
|
-
/** @type {WeakSet<TestingPackageSuite>} */
|
|
5
|
-
const synchronizedSuites = new WeakSet();
|
|
6
|
-
/**
|
|
7
|
-
* Converts public-package declaration options to the legacy runner contract.
|
|
8
|
-
* @param {TestingPackageSuite["options"]} options - Public declaration options.
|
|
9
|
-
* @returns {import("./test-runner.js").TestArgs} - Velocious runner arguments.
|
|
10
|
-
*/
|
|
11
|
-
function runnerArguments(options) {
|
|
12
|
-
const args = { ...options };
|
|
13
|
-
if (args.retry === undefined && typeof args.retries === "number")
|
|
14
|
-
args.retry = args.retries;
|
|
15
|
-
if (args.timeoutSeconds === undefined && typeof args.timeoutMs === "number") {
|
|
16
|
-
args.timeoutSeconds = args.timeoutMs / 1000;
|
|
17
|
-
}
|
|
18
|
-
return args;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Converts one public package suite to the Velocious runner's tree shape.
|
|
22
|
-
* @param {TestingPackageSuite} suite - Public suite declaration.
|
|
23
|
-
* @param {import("./test-runner.js").TestArgs} inheritedArgs - Arguments inherited from the parent scope.
|
|
24
|
-
* @returns {import("./test-runner.js").TestsArgument} - Velocious test tree.
|
|
25
|
-
*/
|
|
26
|
-
function runnerSuite(suite, inheritedArgs) {
|
|
27
|
-
/** @type {Record<string, import("./test-runner.js").TestData>} */
|
|
28
|
-
const suiteTests = {};
|
|
29
|
-
/** @type {Record<string, import("./test-runner.js").TestsArgument>} */
|
|
30
|
-
const nestedSuites = {};
|
|
31
|
-
const suiteArgs = { ...inheritedArgs, ...runnerArguments(suite.options) };
|
|
32
|
-
for (const test of suite.tests) {
|
|
33
|
-
suiteTests[test.name] = {
|
|
34
|
-
args: { ...suiteArgs, ...runnerArguments(test.options) },
|
|
35
|
-
filePath: test.location.filePath,
|
|
36
|
-
function: test.callback,
|
|
37
|
-
line: test.location.line
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
for (const nestedSuite of suite.suites)
|
|
41
|
-
nestedSuites[nestedSuite.name] = runnerSuite(nestedSuite, suiteArgs);
|
|
42
|
-
return {
|
|
43
|
-
afterAlls: suite.hooks.afterAll.map((hook) => ({ callback: hook.callback })),
|
|
44
|
-
afterEaches: suite.hooks.afterEach.map((hook) => ({ callback: hook.callback })),
|
|
45
|
-
args: suiteArgs,
|
|
46
|
-
beforeAlls: suite.hooks.beforeAll.map((hook) => ({ callback: hook.callback })),
|
|
47
|
-
beforeEaches: suite.hooks.beforeEach.map((hook) => ({ callback: hook.callback })),
|
|
48
|
-
filePath: suite.location.filePath,
|
|
49
|
-
line: suite.location.line,
|
|
50
|
-
subs: nestedSuites,
|
|
51
|
-
tests: suiteTests
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Makes newly imported public-package suites visible to the Velocious runner.
|
|
56
|
-
* @param {import("./test-runner.js").TestsArgument} tests - Velocious root test tree.
|
|
57
|
-
* @returns {void}
|
|
58
|
-
*/
|
|
59
|
-
export function synchronizeTestingPackageTests(tests) {
|
|
60
|
-
for (const suite of defaultTestContext.registry.suites) {
|
|
61
|
-
if (synchronizedSuites.has(suite))
|
|
62
|
-
continue;
|
|
63
|
-
if (tests.subs[suite.name])
|
|
64
|
-
throw new Error(`Duplicate test description: ${suite.name}`);
|
|
65
|
-
tests.subs[suite.name] = runnerSuite(suite, tests.args);
|
|
66
|
-
synchronizedSuites.add(suite);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGluZy1wYWNrYWdlLWFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdGluZy90ZXN0aW5nLXBhY2thZ2UtYWRhcHRlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sb0JBQW9CLENBQUE7QUFFckQseUZBQXlGO0FBRXpGLDJDQUEyQztBQUMzQyxNQUFNLGtCQUFrQixHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7QUFFeEM7Ozs7R0FJRztBQUNILFNBQVMsZUFBZSxDQUFDLE9BQU87SUFDOUIsTUFBTSxJQUFJLEdBQUcsRUFBQyxHQUFHLE9BQU8sRUFBQyxDQUFBO0lBRXpCLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFFBQVE7UUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUE7SUFDM0YsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLFNBQVMsSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTtJQUM3QyxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLFdBQVcsQ0FBQyxLQUFLLEVBQUUsYUFBYTtJQUN2QyxrRUFBa0U7SUFDbEUsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFBO0lBQ3JCLHVFQUF1RTtJQUN2RSxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUE7SUFDdkIsTUFBTSxTQUFTLEdBQUcsRUFBQyxHQUFHLGFBQWEsRUFBRSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUMsQ0FBQTtJQUV2RSxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHO1lBQ3RCLElBQUksRUFBRSxFQUFDLEdBQUcsU0FBUyxFQUFFLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBQztZQUN0RCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRO1lBQ2hDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJO1NBQ3pCLENBQUE7SUFDSCxDQUFDO0lBRUQsS0FBSyxNQUFNLFdBQVcsSUFBSSxLQUFLLENBQUMsTUFBTTtRQUFFLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUU1RyxPQUFPO1FBQ0wsU0FBUyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQztRQUMxRSxXQUFXLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDO1FBQzdFLElBQUksRUFBRSxTQUFTO1FBQ2YsVUFBVSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQztRQUM1RSxZQUFZLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDO1FBQy9FLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVE7UUFDakMsSUFBSSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSTtRQUN6QixJQUFJLEVBQUUsWUFBWTtRQUNsQixLQUFLLEVBQUUsVUFBVTtLQUNsQixDQUFBO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsOEJBQThCLENBQUMsS0FBSztJQUNsRCxLQUFLLE1BQU0sS0FBSyxJQUFJLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2RCxJQUFJLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFBRSxTQUFRO1FBQzNDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUE7UUFFeEYsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDdkQsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQy9CLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7ZGVmYXVsdFRlc3RDb250ZXh0fSBmcm9tIFwiQHZlbG9jaW91cy90ZXN0aW5nXCJcblxuLyoqIEB0eXBlZGVmIHsodHlwZW9mIGRlZmF1bHRUZXN0Q29udGV4dC5yZWdpc3RyeS5zdWl0ZXMpW251bWJlcl19IFRlc3RpbmdQYWNrYWdlU3VpdGUgKi9cblxuLyoqIEB0eXBlIHtXZWFrU2V0PFRlc3RpbmdQYWNrYWdlU3VpdGU+fSAqL1xuY29uc3Qgc3luY2hyb25pemVkU3VpdGVzID0gbmV3IFdlYWtTZXQoKVxuXG4vKipcbiAqIENvbnZlcnRzIHB1YmxpYy1wYWNrYWdlIGRlY2xhcmF0aW9uIG9wdGlvbnMgdG8gdGhlIGxlZ2FjeSBydW5uZXIgY29udHJhY3QuXG4gKiBAcGFyYW0ge1Rlc3RpbmdQYWNrYWdlU3VpdGVbXCJvcHRpb25zXCJdfSBvcHRpb25zIC0gUHVibGljIGRlY2xhcmF0aW9uIG9wdGlvbnMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi90ZXN0LXJ1bm5lci5qc1wiKS5UZXN0QXJnc30gLSBWZWxvY2lvdXMgcnVubmVyIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gcnVubmVyQXJndW1lbnRzKG9wdGlvbnMpIHtcbiAgY29uc3QgYXJncyA9IHsuLi5vcHRpb25zfVxuXG4gIGlmIChhcmdzLnJldHJ5ID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIGFyZ3MucmV0cmllcyA9PT0gXCJudW1iZXJcIikgYXJncy5yZXRyeSA9IGFyZ3MucmV0cmllc1xuICBpZiAoYXJncy50aW1lb3V0U2Vjb25kcyA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBhcmdzLnRpbWVvdXRNcyA9PT0gXCJudW1iZXJcIikge1xuICAgIGFyZ3MudGltZW91dFNlY29uZHMgPSBhcmdzLnRpbWVvdXRNcyAvIDEwMDBcbiAgfVxuXG4gIHJldHVybiBhcmdzXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIHB1YmxpYyBwYWNrYWdlIHN1aXRlIHRvIHRoZSBWZWxvY2lvdXMgcnVubmVyJ3MgdHJlZSBzaGFwZS5cbiAqIEBwYXJhbSB7VGVzdGluZ1BhY2thZ2VTdWl0ZX0gc3VpdGUgLSBQdWJsaWMgc3VpdGUgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdGVzdC1ydW5uZXIuanNcIikuVGVzdEFyZ3N9IGluaGVyaXRlZEFyZ3MgLSBBcmd1bWVudHMgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBzY29wZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3Rlc3QtcnVubmVyLmpzXCIpLlRlc3RzQXJndW1lbnR9IC0gVmVsb2Npb3VzIHRlc3QgdHJlZS5cbiAqL1xuZnVuY3Rpb24gcnVubmVyU3VpdGUoc3VpdGUsIGluaGVyaXRlZEFyZ3MpIHtcbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuL3Rlc3QtcnVubmVyLmpzXCIpLlRlc3REYXRhPn0gKi9cbiAgY29uc3Qgc3VpdGVUZXN0cyA9IHt9XG4gIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi90ZXN0LXJ1bm5lci5qc1wiKS5UZXN0c0FyZ3VtZW50Pn0gKi9cbiAgY29uc3QgbmVzdGVkU3VpdGVzID0ge31cbiAgY29uc3Qgc3VpdGVBcmdzID0gey4uLmluaGVyaXRlZEFyZ3MsIC4uLnJ1bm5lckFyZ3VtZW50cyhzdWl0ZS5vcHRpb25zKX1cblxuICBmb3IgKGNvbnN0IHRlc3Qgb2Ygc3VpdGUudGVzdHMpIHtcbiAgICBzdWl0ZVRlc3RzW3Rlc3QubmFtZV0gPSB7XG4gICAgICBhcmdzOiB7Li4uc3VpdGVBcmdzLCAuLi5ydW5uZXJBcmd1bWVudHModGVzdC5vcHRpb25zKX0sXG4gICAgICBmaWxlUGF0aDogdGVzdC5sb2NhdGlvbi5maWxlUGF0aCxcbiAgICAgIGZ1bmN0aW9uOiB0ZXN0LmNhbGxiYWNrLFxuICAgICAgbGluZTogdGVzdC5sb2NhdGlvbi5saW5lXG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBuZXN0ZWRTdWl0ZSBvZiBzdWl0ZS5zdWl0ZXMpIG5lc3RlZFN1aXRlc1tuZXN0ZWRTdWl0ZS5uYW1lXSA9IHJ1bm5lclN1aXRlKG5lc3RlZFN1aXRlLCBzdWl0ZUFyZ3MpXG5cbiAgcmV0dXJuIHtcbiAgICBhZnRlckFsbHM6IHN1aXRlLmhvb2tzLmFmdGVyQWxsLm1hcCgoaG9vaykgPT4gKHtjYWxsYmFjazogaG9vay5jYWxsYmFja30pKSxcbiAgICBhZnRlckVhY2hlczogc3VpdGUuaG9va3MuYWZ0ZXJFYWNoLm1hcCgoaG9vaykgPT4gKHtjYWxsYmFjazogaG9vay5jYWxsYmFja30pKSxcbiAgICBhcmdzOiBzdWl0ZUFyZ3MsXG4gICAgYmVmb3JlQWxsczogc3VpdGUuaG9va3MuYmVmb3JlQWxsLm1hcCgoaG9vaykgPT4gKHtjYWxsYmFjazogaG9vay5jYWxsYmFja30pKSxcbiAgICBiZWZvcmVFYWNoZXM6IHN1aXRlLmhvb2tzLmJlZm9yZUVhY2gubWFwKChob29rKSA9PiAoe2NhbGxiYWNrOiBob29rLmNhbGxiYWNrfSkpLFxuICAgIGZpbGVQYXRoOiBzdWl0ZS5sb2NhdGlvbi5maWxlUGF0aCxcbiAgICBsaW5lOiBzdWl0ZS5sb2NhdGlvbi5saW5lLFxuICAgIHN1YnM6IG5lc3RlZFN1aXRlcyxcbiAgICB0ZXN0czogc3VpdGVUZXN0c1xuICB9XG59XG5cbi8qKlxuICogTWFrZXMgbmV3bHkgaW1wb3J0ZWQgcHVibGljLXBhY2thZ2Ugc3VpdGVzIHZpc2libGUgdG8gdGhlIFZlbG9jaW91cyBydW5uZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdGVzdC1ydW5uZXIuanNcIikuVGVzdHNBcmd1bWVudH0gdGVzdHMgLSBWZWxvY2lvdXMgcm9vdCB0ZXN0IHRyZWUuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNocm9uaXplVGVzdGluZ1BhY2thZ2VUZXN0cyh0ZXN0cykge1xuICBmb3IgKGNvbnN0IHN1aXRlIG9mIGRlZmF1bHRUZXN0Q29udGV4dC5yZWdpc3RyeS5zdWl0ZXMpIHtcbiAgICBpZiAoc3luY2hyb25pemVkU3VpdGVzLmhhcyhzdWl0ZSkpIGNvbnRpbnVlXG4gICAgaWYgKHRlc3RzLnN1YnNbc3VpdGUubmFtZV0pIHRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIHRlc3QgZGVzY3JpcHRpb246ICR7c3VpdGUubmFtZX1gKVxuXG4gICAgdGVzdHMuc3Vic1tzdWl0ZS5uYW1lXSA9IHJ1bm5lclN1aXRlKHN1aXRlLCB0ZXN0cy5hcmdzKVxuICAgIHN5bmNocm9uaXplZFN1aXRlcy5hZGQoc3VpdGUpXG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
// @ts-check
|
|
2
|
-
|
|
3
|
-
import {defaultTestContext} from "@velocious/testing"
|
|
4
|
-
|
|
5
|
-
/** @typedef {(typeof defaultTestContext.registry.suites)[number]} TestingPackageSuite */
|
|
6
|
-
|
|
7
|
-
/** @type {WeakSet<TestingPackageSuite>} */
|
|
8
|
-
const synchronizedSuites = new WeakSet()
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Converts public-package declaration options to the legacy runner contract.
|
|
12
|
-
* @param {TestingPackageSuite["options"]} options - Public declaration options.
|
|
13
|
-
* @returns {import("./test-runner.js").TestArgs} - Velocious runner arguments.
|
|
14
|
-
*/
|
|
15
|
-
function runnerArguments(options) {
|
|
16
|
-
const args = {...options}
|
|
17
|
-
|
|
18
|
-
if (args.retry === undefined && typeof args.retries === "number") args.retry = args.retries
|
|
19
|
-
if (args.timeoutSeconds === undefined && typeof args.timeoutMs === "number") {
|
|
20
|
-
args.timeoutSeconds = args.timeoutMs / 1000
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
return args
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Converts one public package suite to the Velocious runner's tree shape.
|
|
28
|
-
* @param {TestingPackageSuite} suite - Public suite declaration.
|
|
29
|
-
* @param {import("./test-runner.js").TestArgs} inheritedArgs - Arguments inherited from the parent scope.
|
|
30
|
-
* @returns {import("./test-runner.js").TestsArgument} - Velocious test tree.
|
|
31
|
-
*/
|
|
32
|
-
function runnerSuite(suite, inheritedArgs) {
|
|
33
|
-
/** @type {Record<string, import("./test-runner.js").TestData>} */
|
|
34
|
-
const suiteTests = {}
|
|
35
|
-
/** @type {Record<string, import("./test-runner.js").TestsArgument>} */
|
|
36
|
-
const nestedSuites = {}
|
|
37
|
-
const suiteArgs = {...inheritedArgs, ...runnerArguments(suite.options)}
|
|
38
|
-
|
|
39
|
-
for (const test of suite.tests) {
|
|
40
|
-
suiteTests[test.name] = {
|
|
41
|
-
args: {...suiteArgs, ...runnerArguments(test.options)},
|
|
42
|
-
filePath: test.location.filePath,
|
|
43
|
-
function: test.callback,
|
|
44
|
-
line: test.location.line
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
for (const nestedSuite of suite.suites) nestedSuites[nestedSuite.name] = runnerSuite(nestedSuite, suiteArgs)
|
|
49
|
-
|
|
50
|
-
return {
|
|
51
|
-
afterAlls: suite.hooks.afterAll.map((hook) => ({callback: hook.callback})),
|
|
52
|
-
afterEaches: suite.hooks.afterEach.map((hook) => ({callback: hook.callback})),
|
|
53
|
-
args: suiteArgs,
|
|
54
|
-
beforeAlls: suite.hooks.beforeAll.map((hook) => ({callback: hook.callback})),
|
|
55
|
-
beforeEaches: suite.hooks.beforeEach.map((hook) => ({callback: hook.callback})),
|
|
56
|
-
filePath: suite.location.filePath,
|
|
57
|
-
line: suite.location.line,
|
|
58
|
-
subs: nestedSuites,
|
|
59
|
-
tests: suiteTests
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Makes newly imported public-package suites visible to the Velocious runner.
|
|
65
|
-
* @param {import("./test-runner.js").TestsArgument} tests - Velocious root test tree.
|
|
66
|
-
* @returns {void}
|
|
67
|
-
*/
|
|
68
|
-
export function synchronizeTestingPackageTests(tests) {
|
|
69
|
-
for (const suite of defaultTestContext.registry.suites) {
|
|
70
|
-
if (synchronizedSuites.has(suite)) continue
|
|
71
|
-
if (tests.subs[suite.name]) throw new Error(`Duplicate test description: ${suite.name}`)
|
|
72
|
-
|
|
73
|
-
tests.subs[suite.name] = runnerSuite(suite, tests.args)
|
|
74
|
-
synchronizedSuites.add(suite)
|
|
75
|
-
}
|
|
76
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":"7.0.2","root":["../index.js","../bin/velocious.js","../src/application.js","../src/configuration-resolver.js","../src/configuration-types.js","../src/configuration.js","../src/controller.js","../src/current-configuration.js","../src/current.js","../src/error-logger.js","../src/frontend-model-controller.js","../src/initializer.js","../src/log-redactor.js","../src/logger.js","../src/mailer.js","../src/record-payload-values.js","../src/remote-request-context.js","../src/time-zone.js","../src/velocious-error.js","../src/authorization/ability.js","../src/authorization/base-resource.js","../src/background-jobs/adapter-client.js","../src/background-jobs/adapter.js","../src/background-jobs/client.js","../src/background-jobs/cron-expression.js","../src/background-jobs/forked-runner-child.js","../src/background-jobs/generation-handshake-timeout-error.js","../src/background-jobs/generation-identity.js","../src/background-jobs/job-record.js","../src/background-jobs/job-registry.js","../src/background-jobs/job-runner.js","../src/background-jobs/job-semantics.js","../src/background-jobs/job.js","../src/background-jobs/json-socket.js","../src/background-jobs/lifecycle-client.js","../src/background-jobs/lifecycle-control-server.js","../src/background-jobs/local-adapter.js","../src/background-jobs/local-dispatcher.js","../src/background-jobs/local-job-registry.js","../src/background-jobs/local-store.js","../src/background-jobs/main.js","../src/background-jobs/normalize-error.js","../src/background-jobs/perform-job.js","../src/background-jobs/platform-job.js","../src/background-jobs/pooled-runner-broker-identity.js","../src/background-jobs/pooled-runner-child.js","../src/background-jobs/reschedule-signal.js","../src/background-jobs/runner-graceful-shutdown.js","../src/background-jobs/runner-process-title.js","../src/background-jobs/runtime.js","../src/background-jobs/scheduler.js","../src/background-jobs/socket-request.js","../src/background-jobs/sql-adapter.js","../src/background-jobs/status-reporter.js","../src/background-jobs/store.js","../src/background-jobs/types.js","../src/background-jobs/worker.js","../src/background-jobs/web/authorization.js","../src/background-jobs/web/controller.js","../src/background-jobs/web/counts-channel.js","../src/background-jobs/web/index.js","../src/background-jobs/web/path-matcher.js","../src/background-jobs/web/registry.js","../src/beacon/client.js","../src/beacon/in-process-broker.js","../src/beacon/in-process-client.js","../src/beacon/server.js","../src/beacon/types.js","../src/cli/base-command.js","../src/cli/browser-cli.js","../src/cli/command-arguments.js","../src/cli/index.js","../src/cli/migration-execution-phase-argument.js","../src/cli/tenant-database-command-helper.js","../src/cli/use-browser-cli.js","../src/cli/commands/background-jobs-main.js","../src/cli/commands/background-jobs-runner.js","../src/cli/commands/background-jobs-worker.js","../src/cli/commands/beacon.js","../src/cli/commands/console.js","../src/cli/commands/init.js","../src/cli/commands/routes.js","../src/cli/commands/run-script.js","../src/cli/commands/runner.js","../src/cli/commands/server.js","../src/cli/commands/test.js","../src/cli/commands/background-jobs/activate.js","../src/cli/commands/background-jobs/retire.js","../src/cli/commands/db/base-command.js","../src/cli/commands/db/create.js","../src/cli/commands/db/drop.js","../src/cli/commands/db/migrate.js","../src/cli/commands/db/reset.js","../src/cli/commands/db/rollback.js","../src/cli/commands/db/seed.js","../src/cli/commands/db/schema/dump.js","../src/cli/commands/db/schema/load.js","../src/cli/commands/db/tenants/check.js","../src/cli/commands/db/tenants/create.js","../src/cli/commands/db/tenants/drop.js","../src/cli/commands/db/tenants/migrate.js","../src/cli/commands/db/tenants/migrations/pending.js","../src/cli/commands/destroy/migration.js","../src/cli/commands/generate/base-models.js","../src/cli/commands/generate/frontend-models.js","../src/cli/commands/generate/migration.js","../src/cli/commands/generate/model.js","../src/cli/commands/lint/relationships.js","../src/cli/commands/test/timing-manifest/merge.js","../src/database/advisory-lock-runner.js","../src/database/annotations-async-hooks.js","../src/database/annotations.js","../src/database/column-types.js","../src/database/datetime-storage.js","../src/database/generation-context.js","../src/database/handler.js","../src/database/initializer-from-require-context.js","../src/database/live-query.js","../src/database/migration-execution-phase.js","../src/database/migrations-ledger.js","../src/database/migrator.js","../src/database/operation-connection.js","../src/database/operation-lease.js","../src/database/operation.js","../src/database/query-aborted-error.js","../src/database/record-changes.js","../src/database/structure-sql-loader.js","../src/database/use-database.js","../src/database/use-live-query.js","../src/database/drivers/base-column.js","../src/database/drivers/base-columns-index.js","../src/database/drivers/base-foreign-key.js","../src/database/drivers/base-table.js","../src/database/drivers/base.js","../src/database/drivers/index-metadata.js","../src/database/drivers/mssql/column.js","../src/database/drivers/mssql/columns-index.js","../src/database/drivers/mssql/connect-connection.js","../src/database/drivers/mssql/foreign-key.js","../src/database/drivers/mssql/index.js","../src/database/drivers/mssql/options.js","../src/database/drivers/mssql/query-parser.js","../src/database/drivers/mssql/structure-sql.js","../src/database/drivers/mssql/table.js","../src/database/drivers/mssql/sql/alter-table.js","../src/database/drivers/mssql/sql/create-database.js","../src/database/drivers/mssql/sql/create-index.js","../src/database/drivers/mssql/sql/create-table.js","../src/database/drivers/mssql/sql/delete.js","../src/database/drivers/mssql/sql/drop-database.js","../src/database/drivers/mssql/sql/drop-table.js","../src/database/drivers/mssql/sql/insert.js","../src/database/drivers/mssql/sql/remove-index.js","../src/database/drivers/mssql/sql/update.js","../src/database/drivers/mssql/sql/upsert.js","../src/database/drivers/mysql/column.js","../src/database/drivers/mysql/columns-index.js","../src/database/drivers/mysql/deadlock-diagnostic-parser.js","../src/database/drivers/mysql/foreign-key.js","../src/database/drivers/mysql/index.js","../src/database/drivers/mysql/options.js","../src/database/drivers/mysql/query-parser.js","../src/database/drivers/mysql/query-stream.js","../src/database/drivers/mysql/query.js","../src/database/drivers/mysql/structure-sql.js","../src/database/drivers/mysql/table.js","../src/database/drivers/mysql/sql/alter-table.js","../src/database/drivers/mysql/sql/create-database.js","../src/database/drivers/mysql/sql/create-index.js","../src/database/drivers/mysql/sql/create-table.js","../src/database/drivers/mysql/sql/delete.js","../src/database/drivers/mysql/sql/drop-database.js","../src/database/drivers/mysql/sql/drop-table.js","../src/database/drivers/mysql/sql/insert.js","../src/database/drivers/mysql/sql/remove-index.js","../src/database/drivers/mysql/sql/update.js","../src/database/drivers/mysql/sql/upsert.js","../src/database/drivers/pgsql/column.js","../src/database/drivers/pgsql/columns-index.js","../src/database/drivers/pgsql/foreign-key.js","../src/database/drivers/pgsql/index.js","../src/database/drivers/pgsql/options.js","../src/database/drivers/pgsql/query-parser.js","../src/database/drivers/pgsql/structure-sql.js","../src/database/drivers/pgsql/table.js","../src/database/drivers/pgsql/sql/alter-table.js","../src/database/drivers/pgsql/sql/create-database.js","../src/database/drivers/pgsql/sql/create-index.js","../src/database/drivers/pgsql/sql/create-table.js","../src/database/drivers/pgsql/sql/delete.js","../src/database/drivers/pgsql/sql/drop-database.js","../src/database/drivers/pgsql/sql/drop-table.js","../src/database/drivers/pgsql/sql/insert.js","../src/database/drivers/pgsql/sql/remove-index.js","../src/database/drivers/pgsql/sql/update.js","../src/database/drivers/pgsql/sql/upsert.js","../src/database/drivers/sqlite/base.js","../src/database/drivers/sqlite/column.js","../src/database/drivers/sqlite/columns-index.js","../src/database/drivers/sqlite/connection-sql-js.js","../src/database/drivers/sqlite/foreign-key.js","../src/database/drivers/sqlite/index.js","../src/database/drivers/sqlite/index.native.js","../src/database/drivers/sqlite/index.web.js","../src/database/drivers/sqlite/options.js","../src/database/drivers/sqlite/query-parser.js","../src/database/drivers/sqlite/query.js","../src/database/drivers/sqlite/query.native.js","../src/database/drivers/sqlite/query.web.js","../src/database/drivers/sqlite/structure-sql.js","../src/database/drivers/sqlite/table-rebuilder.js","../src/database/drivers/sqlite/table.js","../src/database/drivers/sqlite/web-persistence.js","../src/database/drivers/sqlite/sql/alter-table.js","../src/database/drivers/sqlite/sql/create-index.js","../src/database/drivers/sqlite/sql/create-table.js","../src/database/drivers/sqlite/sql/delete.js","../src/database/drivers/sqlite/sql/drop-table.js","../src/database/drivers/sqlite/sql/insert.js","../src/database/drivers/sqlite/sql/remove-index.js","../src/database/drivers/sqlite/sql/update.js","../src/database/drivers/sqlite/sql/upsert.js","../src/database/drivers/structure-sql/utils.js","../src/database/migration/change-table.js","../src/database/migration/index.js","../src/database/migrator/files-finder.js","../src/database/migrator/types.js","../src/database/pool/async-tracked-multi-connection.js","../src/database/pool/base-methods-forward.js","../src/database/pool/base.js","../src/database/pool/checkout-timeout-error.js","../src/database/pool/single-multi-use.js","../src/database/query/alter-table-base.js","../src/database/query/base.js","../src/database/query/create-database-base.js","../src/database/query/create-index-base.js","../src/database/query/create-table-base.js","../src/database/query/delete-base.js","../src/database/query/drop-database-base.js","../src/database/query/drop-table-base.js","../src/database/query/from-base.js","../src/database/query/from-plain.js","../src/database/query/from-table.js","../src/database/query/index.js","../src/database/query/insert-base.js","../src/database/query/join-base.js","../src/database/query/join-object.js","../src/database/query/join-plain.js","../src/database/query/join-tracker.js","../src/database/query/model-class-query.js","../src/database/query/order-base.js","../src/database/query/order-column.js","../src/database/query/order-plain.js","../src/database/query/preloader.js","../src/database/query/query-data.js","../src/database/query/remove-index-base.js","../src/database/query/select-base.js","../src/database/query/select-plain.js","../src/database/query/select-table-and-column.js","../src/database/query/update-base.js","../src/database/query/upsert-base.js","../src/database/query/where-base.js","../src/database/query/where-combinator.js","../src/database/query/where-hash.js","../src/database/query/where-model-class-hash.js","../src/database/query/where-not.js","../src/database/query/where-plain.js","../src/database/query/with-count.js","../src/database/query/preloader/belongs-to.js","../src/database/query/preloader/ensure-model-class-initialized.js","../src/database/query/preloader/has-many.js","../src/database/query/preloader/has-one.js","../src/database/query/preloader/query-for-model.js","../src/database/query/preloader/selection.js","../src/database/query-parser/base-query-parser.js","../src/database/query-parser/from-parser.js","../src/database/query-parser/group-parser.js","../src/database/query-parser/joins-parser.js","../src/database/query-parser/limit-parser.js","../src/database/query-parser/options.js","../src/database/query-parser/order-parser.js","../src/database/query-parser/select-parser.js","../src/database/query-parser/where-parser.js","../src/database/record/acts-as-list.js","../src/database/record/auditing.js","../src/database/record/counter-cache-magnitude.js","../src/database/record/index.js","../src/database/record/record-not-found-error.js","../src/database/record/state-machine.js","../src/database/record/user-module.js","../src/database/record/validation-messages.js","../src/database/record/attachments/attachment-record.js","../src/database/record/attachments/download.js","../src/database/record/attachments/handle.js","../src/database/record/attachments/normalize-input.js","../src/database/record/attachments/store.js","../src/database/record/attachments/storage-drivers/filesystem.js","../src/database/record/attachments/storage-drivers/native.js","../src/database/record/attachments/storage-drivers/s3.js","../src/database/record/instance-relationships/base.js","../src/database/record/instance-relationships/belongs-to.js","../src/database/record/instance-relationships/has-many.js","../src/database/record/instance-relationships/has-one.js","../src/database/record/relationships/base.js","../src/database/record/relationships/belongs-to.js","../src/database/record/relationships/has-many.js","../src/database/record/relationships/has-one.js","../src/database/record/validators/base.js","../src/database/record/validators/format.js","../src/database/record/validators/length.js","../src/database/record/validators/presence.js","../src/database/record/validators/uniqueness.js","../src/database/table-data/index.js","../src/database/table-data/table-column.js","../src/database/table-data/table-foreign-key.js","../src/database/table-data/table-index.js","../src/database/table-data/table-reference.js","../src/database/tenants/data-copier.js","../src/database/tenants/migration-pending-inspector.js","../src/database/tenants/schema-cloner.js","../src/database/tenants/tenant-table-plan.js","../src/environment-handlers/base.js","../src/environment-handlers/browser.js","../src/environment-handlers/node.js","../src/environment-handlers/node/attachment-path-source.js","../src/environment-handlers/node/source-peer-package.js","../src/environment-handlers/node/cli/commands/background-jobs-activate.js","../src/environment-handlers/node/cli/commands/background-jobs-main.js","../src/environment-handlers/node/cli/commands/background-jobs-retire.js","../src/environment-handlers/node/cli/commands/background-jobs-runner.js","../src/environment-handlers/node/cli/commands/background-jobs-worker.js","../src/environment-handlers/node/cli/commands/beacon.js","../src/environment-handlers/node/cli/commands/cli-command-context.js","../src/environment-handlers/node/cli/commands/console.js","../src/environment-handlers/node/cli/commands/init.js","../src/environment-handlers/node/cli/commands/routes.js","../src/environment-handlers/node/cli/commands/run-script.js","../src/environment-handlers/node/cli/commands/runner.js","../src/environment-handlers/node/cli/commands/server.js","../src/environment-handlers/node/cli/commands/test.js","../src/environment-handlers/node/cli/commands/db/seed.js","../src/environment-handlers/node/cli/commands/db/schema/dump.js","../src/environment-handlers/node/cli/commands/db/schema/load.js","../src/environment-handlers/node/cli/commands/destroy/migration.js","../src/environment-handlers/node/cli/commands/generate/base-models.js","../src/environment-handlers/node/cli/commands/generate/frontend-models.js","../src/environment-handlers/node/cli/commands/generate/generated-file-banner.js","../src/environment-handlers/node/cli/commands/generate/migration.js","../src/environment-handlers/node/cli/commands/generate/model.js","../src/environment-handlers/node/cli/commands/lint/relationships.js","../src/environment-handlers/node/cli/commands/test/timing-manifest/merge.js","../src/error-reporting/request-details.js","../src/frontend-model-resource/base-resource.js","../src/frontend-model-resource/velocious-attachment-resource.js","../src/frontend-models/base.js","../src/frontend-models/built-in-resources.js","../src/frontend-models/clear-pending-debounced-callback.js","../src/frontend-models/event-hook-models.js","../src/frontend-models/model-registry.js","../src/frontend-models/outgoing-event-buffer.js","../src/frontend-models/preloader.js","../src/frontend-models/query.js","../src/frontend-models/remote-request-context.js","../src/frontend-models/resource-config-validation.js","../src/frontend-models/resource-definition.js","../src/frontend-models/transport-deadline.js","../src/frontend-models/transport-serialization.js","../src/frontend-models/use-created-event.js","../src/frontend-models/use-destroyed-event.js","../src/frontend-models/use-model-class-event.js","../src/frontend-models/use-updated-event.js","../src/frontend-models/websocket-channel.js","../src/frontend-models/websocket-publishers.js","../src/http-client/header.js","../src/http-client/index.js","../src/http-client/request.js","../src/http-client/response.js","../src/http-client/websocket-client.js","../src/http-client/websocket-url-from-http-base.js","../src/http-server/client-delivery-queue.js","../src/http-server/cookie.js","../src/http-server/development-reloader.js","../src/http-server/index.js","../src/http-server/remote-address.js","../src/http-server/server-client.js","../src/http-server/server-lock.js","../src/http-server/websocket-channel-subscribers.js","../src/http-server/websocket-channel.js","../src/http-server/websocket-connection.js","../src/http-server/websocket-event-log-store.js","../src/http-server/websocket-events-host.js","../src/http-server/websocket-events.js","../src/http-server/client/index.js","../src/http-server/client/params-to-object.js","../src/http-server/client/request-parser.js","../src/http-server/client/request-runner.js","../src/http-server/client/request-timing.js","../src/http-server/client/request.js","../src/http-server/client/response-compression.js","../src/http-server/client/response.js","../src/http-server/client/websocket-request.js","../src/http-server/client/websocket-session.js","../src/http-server/client/request-buffer/form-data-part.js","../src/http-server/client/request-buffer/header.js","../src/http-server/client/request-buffer/index.js","../src/http-server/client/uploaded-file/memory-uploaded-file.js","../src/http-server/client/uploaded-file/temporary-uploaded-file.js","../src/http-server/client/uploaded-file/uploaded-file.js","../src/http-server/worker-handler/channel-subscriber-dispatch.js","../src/http-server/worker-handler/in-process.js","../src/http-server/worker-handler/index.js","../src/http-server/worker-handler/worker-script.js","../src/http-server/worker-handler/worker-thread.js","../src/jobs/mail-delivery.js","../src/jobs/prune-terminal-background-jobs.js","../src/logger/base-logger.js","../src/logger/console-logger.js","../src/logger/file-logger.js","../src/logger/outputs/array-output.js","../src/logger/outputs/console-output.js","../src/logger/outputs/file-output.js","../src/logger/outputs/stdout-output.js","../src/mailer/base.js","../src/mailer/delivery-operation-store.js","../src/mailer/delivery-operation.js","../src/mailer/delivery.js","../src/mailer/index.js","../src/mailer/backends/resend-smtp.js","../src/mailer/backends/smtp.js","../src/packages/velocious-package.js","../src/plugins/sqljs-wasm-route-controller.js","../src/plugins/sqljs-wasm-route.js","../src/routes/app-routes.js","../src/routes/base-route.js","../src/routes/basic-route.js","../src/routes/get-route.js","../src/routes/index.js","../src/routes/namespace-route.js","../src/routes/plugin-routes.js","../src/routes/post-route.js","../src/routes/resolver.js","../src/routes/resource-route.js","../src/routes/root-route.js","../src/routes/built-in/api-manifest/controller.js","../src/routes/built-in/debug/controller.js","../src/routes/built-in/errors/controller.js","../src/routes/hooks/frontend-model-command-route-hook.js","../src/sync/conflict-strategy.js","../src/sync/device-identity.js","../src/sync/local-mutation-log.js","../src/sync/offline-grant.js","../src/sync/peer-mutation-bundle.js","../src/sync/query-scope.js","../src/sync/server-change-feed.js","../src/sync/server-sequence-allocator.js","../src/sync/signed-sync-envelope-replay-service.js","../src/sync/stable-json.js","../src/sync/sync-api-client-types.js","../src/sync/sync-api-client.js","../src/sync/sync-api-controller.js","../src/sync/sync-change-fanout.js","../src/sync/sync-channel-name.js","../src/sync/sync-client-registry.js","../src/sync/sync-client-types.js","../src/sync/sync-client.js","../src/sync/sync-envelope-replay-service.js","../src/sync/sync-model-change-feed-service.js","../src/sync/sync-publish-suppression.js","../src/sync/sync-publisher-types.js","../src/sync/sync-publisher.js","../src/sync/sync-realtime-bridge.js","../src/sync/sync-replay-persisted-data.js","../src/sync/sync-replay-upsert-applier.js","../src/sync/sync-resource-base.js","../src/sync/sync-scope-attributes.js","../src/sync/sync-scope-store.js","../src/sync/sync-upstream-importer.js","../src/sync/sync-websocket-channel.js","../src/sync/assets/cache.js","../src/sync/assets/types.js","../src/tenants/default-tenant-database-provisioning.js","../src/tenants/frontend-tenant-sqlite-lifecycle.js","../src/tenants/tenant-aggregator.js","../src/tenants/tenant-handle.js","../src/tenants/tenant-iterator.js","../src/tenants/tenant-model-scope.js","../src/tenants/tenant.js","../src/testing/base-expect.js","../src/testing/browser-frontend-model-event-hook-scenarios.js","../src/testing/browser-test-app.js","../src/testing/browser-use-database-hook-scenarios.js","../src/testing/expect-to-change.js","../src/testing/expect-utils.js","../src/testing/expect.js","../src/testing/request-client.js","../src/testing/shared-transaction-broker-client.js","../src/testing/shared-transaction-broker.js","../src/testing/shared-transaction-codec.js","../src/testing/shared-transaction-connection-coordinator.js","../src/testing/shared-transaction-proxy-driver.js","../src/testing/sqljs-test-database.js","../src/testing/test-files-finder.js","../src/testing/test-filter-parser.js","../src/testing/test-profile-activity.js","../src/testing/test-profile-context.js","../src/testing/test-profile-output.js","../src/testing/test-profiler.js","../src/testing/test-runner.js","../src/testing/test-suite-splitter.js","../src/testing/test-transaction-session.js","../src/testing/test.js","../src/testing/testing-package-adapter.js","../src/testing/timing-manifest.js","../src/testing/velocious-attempt-executor.js","../src/testing/velocious-runner-reporter.js","../src/testing/velocious-suite-hook-executor.js","../src/testing/velocious-test-arguments.js","../src/testing/factory/association-declaration.js","../src/testing/factory/declarations.js","../src/testing/factory/definition-builder.js","../src/testing/factory/errors.js","../src/testing/factory/evaluation-context.js","../src/testing/factory/events.js","../src/testing/factory/factory-definition.js","../src/testing/factory/factory-registry.js","../src/testing/factory/factory-runner.js","../src/testing/factory/index.js","../src/testing/factory/linter.js","../src/testing/factory/model-contract.js","../src/testing/factory/sequence.js","../src/testing/factory/trait-definition.js","../src/testing/factory/node/definition-reload-policy.js","../src/testing/factory/node/load-definitions.js","../src/testing/factory/strategies/attributes-for.js","../src/testing/factory/strategies/base.js","../src/testing/factory/strategies/build.js","../src/testing/factory/strategies/create.js","../src/types/external-modules.d.ts","../src/utils/backtrace-cleaner-node.js","../src/utils/backtrace-cleaner.js","../src/utils/bearer-token.js","../src/utils/deburr-column-name.js","../src/utils/event-emitter.js","../src/utils/file-exists.js","../src/utils/format-value.js","../src/utils/is-date.js","../src/utils/model-scope.js","../src/utils/mount-prefix.js","../src/utils/nest-callbacks.js","../src/utils/plain-object.js","../src/utils/ransack.js","../src/utils/rest-args-error.js","../src/utils/sha256-bytes-hex.js","../src/utils/sha256-hex.js","../src/utils/shutdown-lifecycle.js","../src/utils/singularize-model-name.js","../src/utils/split-sql-statements.js","../src/utils/stable-json.js","../src/utils/to-import-specifier.js","../src/utils/utf8-byte-length.js","../src/utils/with-tracked-stack-async-hooks.js","../src/utils/with-tracked-stack.js"],"packageJsons":["../node_modules/@azure/abort-controller/dist/commonjs/package.json","../node_modules/@azure/abort-controller/package.json","../node_modules/@azure/core-auth/dist/commonjs/package.json","../node_modules/@azure/core-auth/package.json","../node_modules/@azure/core-util/dist/commonjs/package.json","../node_modules/@azure/core-util/package.json","../node_modules/@js-temporal/polyfill/package.json","../node_modules/@types/ejs/package.json","../node_modules/@types/escape-string-regexp/package.json","../node_modules/@types/mssql/package.json","../node_modules/@types/mysql/package.json","../node_modules/@types/node/package.json","../node_modules/@types/pg/package.json","../node_modules/@types/proxy-addr/package.json","../node_modules/@types/react-dom/package.json","../node_modules/@types/react/package.json","../node_modules/@types/strftime/package.json","../node_modules/@types/ws/package.json","../node_modules/@velocious/testing/package.json","../node_modules/awaitery/package.json","../node_modules/bcryptjs/package.json","../node_modules/better-localstorage/package.json","../node_modules/buffer/package.json","../node_modules/csstype/package.json","../node_modules/debounce/package.json","../node_modules/diggerize/package.json","../node_modules/ejs/package.json","../node_modules/env-sense/package.json","../node_modules/epic-locks/package.json","../node_modules/escape-string-regexp/package.json","../node_modules/eventemitter3/package.json","../node_modules/events/package.json","../node_modules/expo-localization/package.json","../node_modules/gettext-universal/package.json","../node_modules/incorporator/package.json","../node_modules/inflection/package.json","../node_modules/is-plain-object/package.json","../node_modules/mssql/package.json","../node_modules/mysql/package.json","../node_modules/node-gyp/package.json","../node_modules/pg-protocol/package.json","../node_modules/pg-types/package.json","../node_modules/pg/package.json","../node_modules/picocolors/package.json","../node_modules/process/package.json","../node_modules/prop-types/package.json","../node_modules/proxy-addr/package.json","../node_modules/punycode/package.json","../node_modules/pure-uuid/package.json","../node_modules/react-dom/package.json","../node_modules/react/package.json","../node_modules/require-context/package.json","../node_modules/scoundrel-remote-eval/package.json","../node_modules/selenium-webdriver/package.json","../node_modules/set-state-compare/package.json","../node_modules/smtp-connection/package.json","../node_modules/snapreq/package.json","../node_modules/sql-escape-string/package.json","../node_modules/sql.js/package.json","../node_modules/sqlite/package.json","../node_modules/sqlite3/package.json","../node_modules/strftime/package.json","../node_modules/string_decoder/package.json","../node_modules/system-testing/package.json","../node_modules/tarn/package.json","../node_modules/tedious/package.json","../node_modules/typanic/package.json","../node_modules/undici-types/package.json","../node_modules/ws/package.json","../package.json"],"missingPackageJsons":["../node_modules/@types/assert/package.json","../node_modules/@types/assert/strict/package.json","../node_modules/@types/async_hooks/package.json","../node_modules/@types/child_process/package.json","../node_modules/@types/cluster/package.json","../node_modules/@types/console/package.json","../node_modules/@types/constants/package.json","../node_modules/@types/crypto/package.json","../node_modules/@types/dgram/package.json","../node_modules/@types/diagnostics_channel/package.json","../node_modules/@types/dns/package.json","../node_modules/@types/dns/promises/package.json","../node_modules/@types/domain/package.json","../node_modules/@types/events/package.json","../node_modules/@types/expo-sqlite/package.json","../node_modules/@types/fs/package.json","../node_modules/@types/fs/promises/package.json","../node_modules/@types/http/package.json","../node_modules/@types/http2/package.json","../node_modules/@types/https/package.json","../node_modules/@types/incorporator/package.json","../node_modules/@types/inspector/package.json","../node_modules/@types/inspector/promises/package.json","../node_modules/@types/is-plain-object/package.json","../node_modules/@types/module/package.json","../node_modules/@types/net/package.json","../node_modules/@types/node/assert/package.json","../node_modules/@types/node/dns/package.json","../node_modules/@types/node/fs/package.json","../node_modules/@types/node/inspector/package.json","../node_modules/@types/node/path/package.json","../node_modules/@types/node/readline/package.json","../node_modules/@types/node/stream/package.json","../node_modules/@types/node/test/package.json","../node_modules/@types/node/timers/package.json","../node_modules/@types/node/util/package.json","../node_modules/@types/node/web-globals/package.json","../node_modules/@types/node/zlib/package.json","../node_modules/@types/os/package.json","../node_modules/@types/path/package.json","../node_modules/@types/path/posix/package.json","../node_modules/@types/path/win32/package.json","../node_modules/@types/perf_hooks/package.json","../node_modules/@types/pg/lib/package.json","../node_modules/@types/process/package.json","../node_modules/@types/punycode/package.json","../node_modules/@types/querystring/package.json","../node_modules/@types/react-dom/client/package.json","../node_modules/@types/readline/package.json","../node_modules/@types/readline/promises/package.json","../node_modules/@types/repl/package.json","../node_modules/@types/require-context/package.json","../node_modules/@types/smtp-connection/package.json","../node_modules/@types/sql-escape-string/package.json","../node_modules/@types/sql.js/package.json","../node_modules/@types/stream/consumers/package.json","../node_modules/@types/stream/iter/package.json","../node_modules/@types/stream/package.json","../node_modules/@types/stream/promises/package.json","../node_modules/@types/stream/web/package.json","../node_modules/@types/string_decoder/package.json","../node_modules/@types/timers/package.json","../node_modules/@types/timers/promises/package.json","../node_modules/@types/tls/package.json","../node_modules/@types/trace_events/package.json","../node_modules/@types/tty/package.json","../node_modules/@types/url/package.json","../node_modules/@types/util/package.json","../node_modules/@types/util/types/package.json","../node_modules/@types/v8/package.json","../node_modules/@types/vm/package.json","../node_modules/@types/wasi/package.json","../node_modules/@types/worker_threads/package.json","../node_modules/@types/zlib/package.json","../node_modules/@velocious/testing/build/package.json","../node_modules/appium/package.json","../node_modules/assert/package.json","../node_modules/assert/strict/package.json","../node_modules/async_hooks/package.json","../node_modules/awaitery/build/package.json","../node_modules/awaitery/build/timeout.js/package.json","../node_modules/awaitery/build/wait.js/package.json","../node_modules/child_process/package.json","../node_modules/cluster/package.json","../node_modules/console/package.json","../node_modules/constants/package.json","../node_modules/crypto/package.json","../node_modules/dgram/package.json","../node_modules/diagnostics_channel/package.json","../node_modules/diggerize/build/package.json","../node_modules/dns/package.json","../node_modules/dns/promises/package.json","../node_modules/domain/package.json","../node_modules/env-sense/build/package.json","../node_modules/env-sense/build/use-env-sense.js/package.json","../node_modules/epic-locks/build/mutex.js/package.json","../node_modules/epic-locks/build/package.json","../node_modules/expo-sqlite/package.json","../node_modules/fs/package.json","../node_modules/fs/promises/package.json","../node_modules/gettext-universal/build/package.json","../node_modules/gettext-universal/build/src/config.js/package.json","../node_modules/gettext-universal/build/src/package.json","../node_modules/gettext-universal/build/src/translate.js/package.json","../node_modules/http/package.json","../node_modules/http2/package.json","../node_modules/https/package.json","../node_modules/inflection/lib/package.json","../node_modules/inspector/package.json","../node_modules/inspector/promises/package.json","../node_modules/module/package.json","../node_modules/net/package.json","../node_modules/os/package.json","../node_modules/path/package.json","../node_modules/path/posix/package.json","../node_modules/path/win32/package.json","../node_modules/perf_hooks/package.json","../node_modules/pg-protocol/dist/messages.js/package.json","../node_modules/pg-protocol/dist/package.json","../node_modules/querystring/package.json","../node_modules/react-dom/client/package.json","../node_modules/readline/package.json","../node_modules/readline/promises/package.json","../node_modules/repl/package.json","../node_modules/scoundrel-remote-eval/build/client/connections/package.json","../node_modules/scoundrel-remote-eval/build/client/connections/web-socket/index.js/package.json","../node_modules/scoundrel-remote-eval/build/client/connections/web-socket/package.json","../node_modules/scoundrel-remote-eval/build/client/index.js/package.json","../node_modules/scoundrel-remote-eval/build/client/package.json","../node_modules/scoundrel-remote-eval/build/package.json","../node_modules/set-state-compare/build/diff-utils.js/package.json","../node_modules/set-state-compare/build/package.json","../node_modules/snapreq/build/package.json","../node_modules/snapreq/build/websocket/package.json","../node_modules/snapreq/websocket/package.json","../node_modules/sqlite/build/package.json","../node_modules/sqlite3/lib/package.json","../node_modules/stream/consumers/package.json","../node_modules/stream/iter/package.json","../node_modules/stream/package.json","../node_modules/stream/promises/package.json","../node_modules/stream/web/package.json","../node_modules/system-testing/build/package.json","../node_modules/system-testing/build/system-test-browser-helper.js/package.json","../node_modules/system-testing/node_modules/eventemitter3/package.json","../node_modules/system-testing/node_modules/scoundrel-remote-eval/build/client/connections/web-socket/index.js/package.json","../node_modules/system-testing/node_modules/scoundrel-remote-eval/build/client/index.js/package.json","../node_modules/system-testing/node_modules/scoundrel-remote-eval/package.json","../node_modules/tarn/dist/Pool/package.json","../node_modules/tarn/dist/package.json","../node_modules/tedious/lib/always-encrypted/package.json","../node_modules/tedious/lib/data-types/package.json","../node_modules/tedious/lib/package.json","../node_modules/tedious/lib/token/package.json","../node_modules/tedious/node_modules/@azure/core-auth/package.json","../node_modules/tedious/node_modules/events/package.json","../node_modules/tedious/node_modules/net/package.json","../node_modules/tedious/node_modules/stream/package.json","../node_modules/tedious/node_modules/tls/package.json","../node_modules/timers/package.json","../node_modules/timers/promises/package.json","../node_modules/tls/package.json","../node_modules/trace_events/package.json","../node_modules/tty/package.json","../node_modules/typanic/build/package.json","../node_modules/url/package.json","../node_modules/util/package.json","../node_modules/util/types/package.json","../node_modules/v8/package.json","../node_modules/vm/package.json","../node_modules/wasi/package.json","../node_modules/worker_threads/package.json","../node_modules/zlib/package.json"]}
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
// @ts-check
|
|
2
|
-
|
|
3
|
-
import {defaultTestContext} from "@velocious/testing"
|
|
4
|
-
|
|
5
|
-
/** @typedef {(typeof defaultTestContext.registry.suites)[number]} TestingPackageSuite */
|
|
6
|
-
|
|
7
|
-
/** @type {WeakSet<TestingPackageSuite>} */
|
|
8
|
-
const synchronizedSuites = new WeakSet()
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Converts public-package declaration options to the legacy runner contract.
|
|
12
|
-
* @param {TestingPackageSuite["options"]} options - Public declaration options.
|
|
13
|
-
* @returns {import("./test-runner.js").TestArgs} - Velocious runner arguments.
|
|
14
|
-
*/
|
|
15
|
-
function runnerArguments(options) {
|
|
16
|
-
const args = {...options}
|
|
17
|
-
|
|
18
|
-
if (args.retry === undefined && typeof args.retries === "number") args.retry = args.retries
|
|
19
|
-
if (args.timeoutSeconds === undefined && typeof args.timeoutMs === "number") {
|
|
20
|
-
args.timeoutSeconds = args.timeoutMs / 1000
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
return args
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Converts one public package suite to the Velocious runner's tree shape.
|
|
28
|
-
* @param {TestingPackageSuite} suite - Public suite declaration.
|
|
29
|
-
* @param {import("./test-runner.js").TestArgs} inheritedArgs - Arguments inherited from the parent scope.
|
|
30
|
-
* @returns {import("./test-runner.js").TestsArgument} - Velocious test tree.
|
|
31
|
-
*/
|
|
32
|
-
function runnerSuite(suite, inheritedArgs) {
|
|
33
|
-
/** @type {Record<string, import("./test-runner.js").TestData>} */
|
|
34
|
-
const suiteTests = {}
|
|
35
|
-
/** @type {Record<string, import("./test-runner.js").TestsArgument>} */
|
|
36
|
-
const nestedSuites = {}
|
|
37
|
-
const suiteArgs = {...inheritedArgs, ...runnerArguments(suite.options)}
|
|
38
|
-
|
|
39
|
-
for (const test of suite.tests) {
|
|
40
|
-
suiteTests[test.name] = {
|
|
41
|
-
args: {...suiteArgs, ...runnerArguments(test.options)},
|
|
42
|
-
filePath: test.location.filePath,
|
|
43
|
-
function: test.callback,
|
|
44
|
-
line: test.location.line
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
for (const nestedSuite of suite.suites) nestedSuites[nestedSuite.name] = runnerSuite(nestedSuite, suiteArgs)
|
|
49
|
-
|
|
50
|
-
return {
|
|
51
|
-
afterAlls: suite.hooks.afterAll.map((hook) => ({callback: hook.callback})),
|
|
52
|
-
afterEaches: suite.hooks.afterEach.map((hook) => ({callback: hook.callback})),
|
|
53
|
-
args: suiteArgs,
|
|
54
|
-
beforeAlls: suite.hooks.beforeAll.map((hook) => ({callback: hook.callback})),
|
|
55
|
-
beforeEaches: suite.hooks.beforeEach.map((hook) => ({callback: hook.callback})),
|
|
56
|
-
filePath: suite.location.filePath,
|
|
57
|
-
line: suite.location.line,
|
|
58
|
-
subs: nestedSuites,
|
|
59
|
-
tests: suiteTests
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Makes newly imported public-package suites visible to the Velocious runner.
|
|
65
|
-
* @param {import("./test-runner.js").TestsArgument} tests - Velocious root test tree.
|
|
66
|
-
* @returns {void}
|
|
67
|
-
*/
|
|
68
|
-
export function synchronizeTestingPackageTests(tests) {
|
|
69
|
-
for (const suite of defaultTestContext.registry.suites) {
|
|
70
|
-
if (synchronizedSuites.has(suite)) continue
|
|
71
|
-
if (tests.subs[suite.name]) throw new Error(`Duplicate test description: ${suite.name}`)
|
|
72
|
-
|
|
73
|
-
tests.subs[suite.name] = runnerSuite(suite, tests.args)
|
|
74
|
-
synchronizedSuites.add(suite)
|
|
75
|
-
}
|
|
76
|
-
}
|