velocious 1.0.552 → 1.0.555
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 +2 -0
- package/build/background-jobs/status-reporter.js +15 -2
- package/build/background-jobs/worker.js +5 -1
- package/build/frontend-models/base.js +105 -47
- package/build/frontend-models/transport-deadline.js +66 -0
- package/build/src/background-jobs/status-reporter.d.ts +3 -1
- package/build/src/background-jobs/status-reporter.d.ts.map +1 -1
- package/build/src/background-jobs/status-reporter.js +16 -3
- package/build/src/background-jobs/worker.d.ts.map +1 -1
- package/build/src/background-jobs/worker.js +6 -2
- package/build/src/frontend-models/base.d.ts +10 -1
- package/build/src/frontend-models/base.d.ts.map +1 -1
- package/build/src/frontend-models/base.js +71 -26
- package/build/src/frontend-models/transport-deadline.d.ts +26 -0
- package/build/src/frontend-models/transport-deadline.d.ts.map +1 -0
- package/build/src/frontend-models/transport-deadline.js +61 -0
- package/build/src/testing/factory/association-declaration.d.ts +37 -0
- package/build/src/testing/factory/association-declaration.d.ts.map +1 -0
- package/build/src/testing/factory/association-declaration.js +41 -0
- package/build/src/testing/factory/declarations.d.ts +190 -0
- package/build/src/testing/factory/declarations.d.ts.map +1 -0
- package/build/src/testing/factory/declarations.js +98 -0
- package/build/src/testing/factory/definition-builder.d.ts +132 -0
- package/build/src/testing/factory/definition-builder.d.ts.map +1 -0
- package/build/src/testing/factory/definition-builder.js +417 -0
- package/build/src/testing/factory/errors.d.ts +62 -0
- package/build/src/testing/factory/errors.d.ts.map +1 -0
- package/build/src/testing/factory/errors.js +67 -0
- package/build/src/testing/factory/evaluation-context.d.ts +95 -0
- package/build/src/testing/factory/evaluation-context.d.ts.map +1 -0
- package/build/src/testing/factory/evaluation-context.js +175 -0
- package/build/src/testing/factory/events.d.ts +21 -0
- package/build/src/testing/factory/events.d.ts.map +1 -0
- package/build/src/testing/factory/events.js +26 -0
- package/build/src/testing/factory/factory-definition.d.ts +39 -0
- package/build/src/testing/factory/factory-definition.d.ts.map +1 -0
- package/build/src/testing/factory/factory-definition.js +35 -0
- package/build/src/testing/factory/factory-registry.d.ts +263 -0
- package/build/src/testing/factory/factory-registry.d.ts.map +1 -0
- package/build/src/testing/factory/factory-registry.js +438 -0
- package/build/src/testing/factory/factory-runner.d.ts +179 -0
- package/build/src/testing/factory/factory-runner.d.ts.map +1 -0
- package/build/src/testing/factory/factory-runner.js +266 -0
- package/build/src/testing/factory/index.d.ts +18 -0
- package/build/src/testing/factory/index.d.ts.map +1 -0
- package/build/src/testing/factory/index.js +21 -0
- package/build/src/testing/factory/linter.d.ts +55 -0
- package/build/src/testing/factory/linter.d.ts.map +1 -0
- package/build/src/testing/factory/linter.js +106 -0
- package/build/src/testing/factory/model-contract.d.ts +11 -0
- package/build/src/testing/factory/model-contract.d.ts.map +1 -0
- package/build/src/testing/factory/model-contract.js +26 -0
- package/build/src/testing/factory/node/load-definitions.d.ts +24 -0
- package/build/src/testing/factory/node/load-definitions.d.ts.map +1 -0
- package/build/src/testing/factory/node/load-definitions.js +87 -0
- package/build/src/testing/factory/sequence.d.ts +73 -0
- package/build/src/testing/factory/sequence.d.ts.map +1 -0
- package/build/src/testing/factory/sequence.js +78 -0
- package/build/src/testing/factory/strategies/attributes-for.d.ts +21 -0
- package/build/src/testing/factory/strategies/attributes-for.d.ts.map +1 -0
- package/build/src/testing/factory/strategies/attributes-for.js +22 -0
- package/build/src/testing/factory/strategies/base.d.ts +101 -0
- package/build/src/testing/factory/strategies/base.d.ts.map +1 -0
- package/build/src/testing/factory/strategies/base.js +191 -0
- package/build/src/testing/factory/strategies/build.d.ts +20 -0
- package/build/src/testing/factory/strategies/build.d.ts.map +1 -0
- package/build/src/testing/factory/strategies/build.js +34 -0
- package/build/src/testing/factory/strategies/create.d.ts +32 -0
- package/build/src/testing/factory/strategies/create.d.ts.map +1 -0
- package/build/src/testing/factory/strategies/create.js +57 -0
- package/build/src/testing/factory/trait-definition.d.ts +22 -0
- package/build/src/testing/factory/trait-definition.d.ts.map +1 -0
- package/build/src/testing/factory/trait-definition.js +22 -0
- package/build/testing/factory/association-declaration.js +50 -0
- package/build/testing/factory/declarations.js +110 -0
- package/build/testing/factory/definition-builder.js +476 -0
- package/build/testing/factory/errors.js +79 -0
- package/build/testing/factory/evaluation-context.js +199 -0
- package/build/testing/factory/events.js +30 -0
- package/build/testing/factory/factory-definition.js +41 -0
- package/build/testing/factory/factory-registry.js +501 -0
- package/build/testing/factory/factory-runner.js +296 -0
- package/build/testing/factory/index.js +24 -0
- package/build/testing/factory/linter.js +119 -0
- package/build/testing/factory/model-contract.js +31 -0
- package/build/testing/factory/node/load-definitions.js +103 -0
- package/build/testing/factory/sequence.js +91 -0
- package/build/testing/factory/strategies/attributes-for.js +24 -0
- package/build/testing/factory/strategies/base.js +209 -0
- package/build/testing/factory/strategies/build.js +42 -0
- package/build/testing/factory/strategies/create.js +68 -0
- package/build/testing/factory/trait-definition.js +24 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/background-jobs/status-reporter.js +15 -2
- package/src/background-jobs/worker.js +5 -1
- package/src/frontend-models/base.js +105 -47
- package/src/frontend-models/transport-deadline.js +66 -0
- package/src/testing/factory/association-declaration.js +50 -0
- package/src/testing/factory/declarations.js +110 -0
- package/src/testing/factory/definition-builder.js +476 -0
- package/src/testing/factory/errors.js +79 -0
- package/src/testing/factory/evaluation-context.js +199 -0
- package/src/testing/factory/events.js +30 -0
- package/src/testing/factory/factory-definition.js +41 -0
- package/src/testing/factory/factory-registry.js +501 -0
- package/src/testing/factory/factory-runner.js +296 -0
- package/src/testing/factory/index.js +24 -0
- package/src/testing/factory/linter.js +119 -0
- package/src/testing/factory/model-contract.js +31 -0
- package/src/testing/factory/node/load-definitions.js +103 -0
- package/src/testing/factory/sequence.js +91 -0
- package/src/testing/factory/strategies/attributes-for.js +24 -0
- package/src/testing/factory/strategies/base.js +209 -0
- package/src/testing/factory/strategies/build.js +42 -0
- package/src/testing/factory/strategies/create.js +68 -0
- package/src/testing/factory/trait-definition.js +24 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runs an async transport operation under a bounded deadline built on awaitery's
|
|
3
|
+
* `timeout`, which owns the timer, the stable `TimeoutError`, and the timer
|
|
4
|
+
* cleanup. awaitery's deadline `AbortSignal` is handed to `operation` (composed
|
|
5
|
+
* with an optional caller/session signal) so the live request — and its
|
|
6
|
+
* response-body read — is actually aborted when the deadline expires, not merely
|
|
7
|
+
* left racing a wrapper promise.
|
|
8
|
+
*
|
|
9
|
+
* A deadline expiry rejects with awaitery's `TimeoutError`
|
|
10
|
+
* (`import {TimeoutError} from "awaitery/build/timeout.js"`), so callers can
|
|
11
|
+
* classify a timeout without parsing browser/network error text. A caller abort
|
|
12
|
+
* rejects with the caller's own reason, keeping the two distinguishable. Both the
|
|
13
|
+
* awaitery timer and the composed abort listeners are always cleaned up. With no
|
|
14
|
+
* positive `timeoutMs` the operation runs directly under the caller signal (or no
|
|
15
|
+
* signal) and no timer is armed.
|
|
16
|
+
* @template T
|
|
17
|
+
* @param {{timeoutMs?: number | null, signal?: AbortSignal | null, errorMessage?: string}} options - Deadline options.
|
|
18
|
+
* @param {(signal: AbortSignal) => Promise<T>} operation - Transport operation receiving the composed signal.
|
|
19
|
+
* @returns {Promise<T>} - The operation result.
|
|
20
|
+
*/
|
|
21
|
+
export default function runWithTransportDeadline<T>({ timeoutMs, signal, errorMessage }: {
|
|
22
|
+
timeoutMs?: number | null;
|
|
23
|
+
signal?: AbortSignal | null;
|
|
24
|
+
errorMessage?: string;
|
|
25
|
+
}, operation: (signal: AbortSignal) => Promise<T>): Promise<T>;
|
|
26
|
+
//# sourceMappingURL=transport-deadline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport-deadline.d.ts","sourceRoot":"","sources":["../../../src/frontend-models/transport-deadline.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,iDALa,CAAC,uCACH;IAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAC,aAC/E,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GACjC,OAAO,CAAC,CAAC,CAAC,CA2CtB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
import timeout from "awaitery/build/timeout.js";
|
|
3
|
+
/**
|
|
4
|
+
* Runs an async transport operation under a bounded deadline built on awaitery's
|
|
5
|
+
* `timeout`, which owns the timer, the stable `TimeoutError`, and the timer
|
|
6
|
+
* cleanup. awaitery's deadline `AbortSignal` is handed to `operation` (composed
|
|
7
|
+
* with an optional caller/session signal) so the live request — and its
|
|
8
|
+
* response-body read — is actually aborted when the deadline expires, not merely
|
|
9
|
+
* left racing a wrapper promise.
|
|
10
|
+
*
|
|
11
|
+
* A deadline expiry rejects with awaitery's `TimeoutError`
|
|
12
|
+
* (`import {TimeoutError} from "awaitery/build/timeout.js"`), so callers can
|
|
13
|
+
* classify a timeout without parsing browser/network error text. A caller abort
|
|
14
|
+
* rejects with the caller's own reason, keeping the two distinguishable. Both the
|
|
15
|
+
* awaitery timer and the composed abort listeners are always cleaned up. With no
|
|
16
|
+
* positive `timeoutMs` the operation runs directly under the caller signal (or no
|
|
17
|
+
* signal) and no timer is armed.
|
|
18
|
+
* @template T
|
|
19
|
+
* @param {{timeoutMs?: number | null, signal?: AbortSignal | null, errorMessage?: string}} options - Deadline options.
|
|
20
|
+
* @param {(signal: AbortSignal) => Promise<T>} operation - Transport operation receiving the composed signal.
|
|
21
|
+
* @returns {Promise<T>} - The operation result.
|
|
22
|
+
*/
|
|
23
|
+
export default async function runWithTransportDeadline({ timeoutMs, signal, errorMessage }, operation) {
|
|
24
|
+
if (!(typeof timeoutMs === "number" && timeoutMs > 0)) {
|
|
25
|
+
// No deadline: run under the caller signal if provided, else a never-aborting signal.
|
|
26
|
+
return await operation(signal || new AbortController().signal);
|
|
27
|
+
}
|
|
28
|
+
return await timeout({ errorMessage: errorMessage || "Transport request timed out", timeout: timeoutMs }, async ({ control }) => {
|
|
29
|
+
if (!signal) {
|
|
30
|
+
return await operation(control.signal);
|
|
31
|
+
}
|
|
32
|
+
// A caller that has already cancelled must not start a live request.
|
|
33
|
+
if (signal.aborted) {
|
|
34
|
+
throw signal.reason instanceof Error ? signal.reason : new Error("Transport request aborted");
|
|
35
|
+
}
|
|
36
|
+
// Compose the caller/session signal with awaitery's deadline signal: either
|
|
37
|
+
// one aborts the live operation, and the composed listeners are always removed.
|
|
38
|
+
const callerSignal = signal;
|
|
39
|
+
const composed = new AbortController();
|
|
40
|
+
/**
|
|
41
|
+
* Aborts the composed operation when the deadline signal fires.
|
|
42
|
+
* @returns {void} - No return value.
|
|
43
|
+
*/
|
|
44
|
+
const onDeadlineAbort = () => composed.abort(control.signal.reason);
|
|
45
|
+
/**
|
|
46
|
+
* Aborts the composed operation when the caller signal fires.
|
|
47
|
+
* @returns {void} - No return value.
|
|
48
|
+
*/
|
|
49
|
+
const onCallerAbort = () => composed.abort(callerSignal.reason);
|
|
50
|
+
control.signal.addEventListener("abort", onDeadlineAbort);
|
|
51
|
+
callerSignal.addEventListener("abort", onCallerAbort);
|
|
52
|
+
try {
|
|
53
|
+
return await operation(composed.signal);
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
control.signal.removeEventListener("abort", onDeadlineAbort);
|
|
57
|
+
callerSignal.removeEventListener("abort", onCallerAbort);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwb3J0LWRlYWRsaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Zyb250ZW5kLW1vZGVscy90cmFuc3BvcnQtZGVhZGxpbmUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sT0FBTyxNQUFNLDJCQUEyQixDQUFBO0FBRS9DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFVBQVUsd0JBQXdCLENBQUMsRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBQyxFQUFFLFNBQVM7SUFDakcsSUFBSSxDQUFDLENBQUMsT0FBTyxTQUFTLEtBQUssUUFBUSxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3RELHNGQUFzRjtRQUN0RixPQUFPLE1BQU0sU0FBUyxDQUFDLE1BQU0sSUFBSSxJQUFJLGVBQWUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2hFLENBQUM7SUFFRCxPQUFPLE1BQU0sT0FBTyxDQUFDLEVBQUMsWUFBWSxFQUFFLFlBQVksSUFBSSw2QkFBNkIsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUMsT0FBTyxFQUFDLEVBQUUsRUFBRTtRQUMxSCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixPQUFPLE1BQU0sU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN4QyxDQUFDO1FBRUQscUVBQXFFO1FBQ3JFLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25CLE1BQU0sTUFBTSxDQUFDLE1BQU0sWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUE7UUFDL0YsQ0FBQztRQUVELDRFQUE0RTtRQUM1RSxnRkFBZ0Y7UUFDaEYsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFBO1FBQzNCLE1BQU0sUUFBUSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUE7UUFDdEM7OztXQUdHO1FBQ0gsTUFBTSxlQUFlLEdBQUcsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ25FOzs7V0FHRztRQUNILE1BQU0sYUFBYSxHQUFHLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRS9ELE9BQU8sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFBO1FBQ3pELFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUE7UUFFckQsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDekMsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUE7WUFDNUQsWUFBWSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUMxRCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB0aW1lb3V0IGZyb20gXCJhd2FpdGVyeS9idWlsZC90aW1lb3V0LmpzXCJcblxuLyoqXG4gKiBSdW5zIGFuIGFzeW5jIHRyYW5zcG9ydCBvcGVyYXRpb24gdW5kZXIgYSBib3VuZGVkIGRlYWRsaW5lIGJ1aWx0IG9uIGF3YWl0ZXJ5J3NcbiAqIGB0aW1lb3V0YCwgd2hpY2ggb3ducyB0aGUgdGltZXIsIHRoZSBzdGFibGUgYFRpbWVvdXRFcnJvcmAsIGFuZCB0aGUgdGltZXJcbiAqIGNsZWFudXAuIGF3YWl0ZXJ5J3MgZGVhZGxpbmUgYEFib3J0U2lnbmFsYCBpcyBoYW5kZWQgdG8gYG9wZXJhdGlvbmAgKGNvbXBvc2VkXG4gKiB3aXRoIGFuIG9wdGlvbmFsIGNhbGxlci9zZXNzaW9uIHNpZ25hbCkgc28gdGhlIGxpdmUgcmVxdWVzdCDigJQgYW5kIGl0c1xuICogcmVzcG9uc2UtYm9keSByZWFkIOKAlCBpcyBhY3R1YWxseSBhYm9ydGVkIHdoZW4gdGhlIGRlYWRsaW5lIGV4cGlyZXMsIG5vdCBtZXJlbHlcbiAqIGxlZnQgcmFjaW5nIGEgd3JhcHBlciBwcm9taXNlLlxuICpcbiAqIEEgZGVhZGxpbmUgZXhwaXJ5IHJlamVjdHMgd2l0aCBhd2FpdGVyeSdzIGBUaW1lb3V0RXJyb3JgXG4gKiAoYGltcG9ydCB7VGltZW91dEVycm9yfSBmcm9tIFwiYXdhaXRlcnkvYnVpbGQvdGltZW91dC5qc1wiYCksIHNvIGNhbGxlcnMgY2FuXG4gKiBjbGFzc2lmeSBhIHRpbWVvdXQgd2l0aG91dCBwYXJzaW5nIGJyb3dzZXIvbmV0d29yayBlcnJvciB0ZXh0LiBBIGNhbGxlciBhYm9ydFxuICogcmVqZWN0cyB3aXRoIHRoZSBjYWxsZXIncyBvd24gcmVhc29uLCBrZWVwaW5nIHRoZSB0d28gZGlzdGluZ3Vpc2hhYmxlLiBCb3RoIHRoZVxuICogYXdhaXRlcnkgdGltZXIgYW5kIHRoZSBjb21wb3NlZCBhYm9ydCBsaXN0ZW5lcnMgYXJlIGFsd2F5cyBjbGVhbmVkIHVwLiBXaXRoIG5vXG4gKiBwb3NpdGl2ZSBgdGltZW91dE1zYCB0aGUgb3BlcmF0aW9uIHJ1bnMgZGlyZWN0bHkgdW5kZXIgdGhlIGNhbGxlciBzaWduYWwgKG9yIG5vXG4gKiBzaWduYWwpIGFuZCBubyB0aW1lciBpcyBhcm1lZC5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0ge3t0aW1lb3V0TXM/OiBudW1iZXIgfCBudWxsLCBzaWduYWw/OiBBYm9ydFNpZ25hbCB8IG51bGwsIGVycm9yTWVzc2FnZT86IHN0cmluZ319IG9wdGlvbnMgLSBEZWFkbGluZSBvcHRpb25zLlxuICogQHBhcmFtIHsoc2lnbmFsOiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzZTxUPn0gb3BlcmF0aW9uIC0gVHJhbnNwb3J0IG9wZXJhdGlvbiByZWNlaXZpbmcgdGhlIGNvbXBvc2VkIHNpZ25hbC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPFQ+fSAtIFRoZSBvcGVyYXRpb24gcmVzdWx0LlxuICovXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBydW5XaXRoVHJhbnNwb3J0RGVhZGxpbmUoe3RpbWVvdXRNcywgc2lnbmFsLCBlcnJvck1lc3NhZ2V9LCBvcGVyYXRpb24pIHtcbiAgaWYgKCEodHlwZW9mIHRpbWVvdXRNcyA9PT0gXCJudW1iZXJcIiAmJiB0aW1lb3V0TXMgPiAwKSkge1xuICAgIC8vIE5vIGRlYWRsaW5lOiBydW4gdW5kZXIgdGhlIGNhbGxlciBzaWduYWwgaWYgcHJvdmlkZWQsIGVsc2UgYSBuZXZlci1hYm9ydGluZyBzaWduYWwuXG4gICAgcmV0dXJuIGF3YWl0IG9wZXJhdGlvbihzaWduYWwgfHwgbmV3IEFib3J0Q29udHJvbGxlcigpLnNpZ25hbClcbiAgfVxuXG4gIHJldHVybiBhd2FpdCB0aW1lb3V0KHtlcnJvck1lc3NhZ2U6IGVycm9yTWVzc2FnZSB8fCBcIlRyYW5zcG9ydCByZXF1ZXN0IHRpbWVkIG91dFwiLCB0aW1lb3V0OiB0aW1lb3V0TXN9LCBhc3luYyAoe2NvbnRyb2x9KSA9PiB7XG4gICAgaWYgKCFzaWduYWwpIHtcbiAgICAgIHJldHVybiBhd2FpdCBvcGVyYXRpb24oY29udHJvbC5zaWduYWwpXG4gICAgfVxuXG4gICAgLy8gQSBjYWxsZXIgdGhhdCBoYXMgYWxyZWFkeSBjYW5jZWxsZWQgbXVzdCBub3Qgc3RhcnQgYSBsaXZlIHJlcXVlc3QuXG4gICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICB0aHJvdyBzaWduYWwucmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyBzaWduYWwucmVhc29uIDogbmV3IEVycm9yKFwiVHJhbnNwb3J0IHJlcXVlc3QgYWJvcnRlZFwiKVxuICAgIH1cblxuICAgIC8vIENvbXBvc2UgdGhlIGNhbGxlci9zZXNzaW9uIHNpZ25hbCB3aXRoIGF3YWl0ZXJ5J3MgZGVhZGxpbmUgc2lnbmFsOiBlaXRoZXJcbiAgICAvLyBvbmUgYWJvcnRzIHRoZSBsaXZlIG9wZXJhdGlvbiwgYW5kIHRoZSBjb21wb3NlZCBsaXN0ZW5lcnMgYXJlIGFsd2F5cyByZW1vdmVkLlxuICAgIGNvbnN0IGNhbGxlclNpZ25hbCA9IHNpZ25hbFxuICAgIGNvbnN0IGNvbXBvc2VkID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgLyoqXG4gICAgICogQWJvcnRzIHRoZSBjb21wb3NlZCBvcGVyYXRpb24gd2hlbiB0aGUgZGVhZGxpbmUgc2lnbmFsIGZpcmVzLlxuICAgICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICAgKi9cbiAgICBjb25zdCBvbkRlYWRsaW5lQWJvcnQgPSAoKSA9PiBjb21wb3NlZC5hYm9ydChjb250cm9sLnNpZ25hbC5yZWFzb24pXG4gICAgLyoqXG4gICAgICogQWJvcnRzIHRoZSBjb21wb3NlZCBvcGVyYXRpb24gd2hlbiB0aGUgY2FsbGVyIHNpZ25hbCBmaXJlcy5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAgICovXG4gICAgY29uc3Qgb25DYWxsZXJBYm9ydCA9ICgpID0+IGNvbXBvc2VkLmFib3J0KGNhbGxlclNpZ25hbC5yZWFzb24pXG5cbiAgICBjb250cm9sLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25EZWFkbGluZUFib3J0KVxuICAgIGNhbGxlclNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25DYWxsZXJBYm9ydClcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgb3BlcmF0aW9uKGNvbXBvc2VkLnNpZ25hbClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY29udHJvbC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uRGVhZGxpbmVBYm9ydClcbiAgICAgIGNhbGxlclNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25DYWxsZXJBYm9ydClcbiAgICB9XG4gIH0pXG59XG4iXX0=
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A declared association. It records the relationship name, the factory to run
|
|
3
|
+
* (defaulting to the relationship name), any traits/overrides passed to that
|
|
4
|
+
* factory, and an optional explicit strategy. When no strategy is given the
|
|
5
|
+
* association follows the parent strategy at evaluation time.
|
|
6
|
+
*/
|
|
7
|
+
export default class AssociationDeclaration {
|
|
8
|
+
/**
|
|
9
|
+
* Builds an association declaration.
|
|
10
|
+
* @param {object} args - Options.
|
|
11
|
+
* @param {string} args.name - Relationship name on the owning model.
|
|
12
|
+
* @param {string} [args.factory] - Factory name to run. Defaults to the relationship name.
|
|
13
|
+
* @param {string[]} [args.traits] - Traits passed to the association factory.
|
|
14
|
+
* @param {Record<string, ?>} [args.overrides] - Overrides passed to the association factory.
|
|
15
|
+
* @param {"build" | "create" | undefined} [args.strategy] - Explicit strategy override.
|
|
16
|
+
*/
|
|
17
|
+
constructor({ name, factory, traits, overrides, strategy }: {
|
|
18
|
+
name: string;
|
|
19
|
+
factory?: string | undefined;
|
|
20
|
+
traits?: string[] | undefined;
|
|
21
|
+
overrides?: Record<string, any> | undefined;
|
|
22
|
+
strategy?: "build" | "create" | undefined;
|
|
23
|
+
});
|
|
24
|
+
/** @type {"association"} - Discriminant. */
|
|
25
|
+
kind: "association";
|
|
26
|
+
/** @type {string} - Relationship name on the owning model. */
|
|
27
|
+
name: string;
|
|
28
|
+
/** @type {string} - Factory name to run for the association. */
|
|
29
|
+
factory: string;
|
|
30
|
+
/** @type {string[]} - Traits passed to the association factory. */
|
|
31
|
+
traits: string[];
|
|
32
|
+
/** @type {Record<string, ?>} - Overrides passed to the association factory. */
|
|
33
|
+
overrides: Record<string, unknown>;
|
|
34
|
+
/** @type {"build" | "create" | undefined} - Explicit strategy override. */
|
|
35
|
+
strategy: "build" | "create" | undefined;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=association-declaration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"association-declaration.d.ts","sourceRoot":"","sources":["../../../../src/testing/factory/association-declaration.js"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH;IACE;;;;;;;;OAQG;IACH,4DANG;QAAqB,IAAI,EAAjB,MAAM;QACQ,OAAO;QACL,MAAM;QACG,SAAS;QACI,QAAQ,GAA9C,OAAO,GAAG,QAAQ,GAAG,SAAS;KACxC,EA6BA;IAnBC,4CAA4C;IAC5C,MADW,aAAa,CACC;IAEzB,8DAA8D;IAC9D,MADW,MAAM,CACD;IAEhB,gEAAgE;IAChE,SADW,MAAM,CACa;IAE9B,mEAAmE;IACnE,QADW,MAAM,EAAE,CACC;IAEpB,+EAA+E;IAC/E,WADW,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,CACF;IAE1B,2EAA2E;IAC3E,UADW,OAAO,GAAG,QAAQ,GAAG,SAAS,CACjB;CAI3B"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
import { InvalidDefinitionError } from "./errors.js";
|
|
3
|
+
/**
|
|
4
|
+
* A declared association. It records the relationship name, the factory to run
|
|
5
|
+
* (defaulting to the relationship name), any traits/overrides passed to that
|
|
6
|
+
* factory, and an optional explicit strategy. When no strategy is given the
|
|
7
|
+
* association follows the parent strategy at evaluation time.
|
|
8
|
+
*/
|
|
9
|
+
export default class AssociationDeclaration {
|
|
10
|
+
/**
|
|
11
|
+
* Builds an association declaration.
|
|
12
|
+
* @param {object} args - Options.
|
|
13
|
+
* @param {string} args.name - Relationship name on the owning model.
|
|
14
|
+
* @param {string} [args.factory] - Factory name to run. Defaults to the relationship name.
|
|
15
|
+
* @param {string[]} [args.traits] - Traits passed to the association factory.
|
|
16
|
+
* @param {Record<string, ?>} [args.overrides] - Overrides passed to the association factory.
|
|
17
|
+
* @param {"build" | "create" | undefined} [args.strategy] - Explicit strategy override.
|
|
18
|
+
*/
|
|
19
|
+
constructor({ name, factory, traits = [], overrides = {}, strategy }) {
|
|
20
|
+
if (!name || typeof name !== "string") {
|
|
21
|
+
throw new InvalidDefinitionError(`Association name must be a non-empty string, got: ${String(name)}`);
|
|
22
|
+
}
|
|
23
|
+
if (strategy !== undefined && strategy !== "build" && strategy !== "create") {
|
|
24
|
+
throw new InvalidDefinitionError(`Association strategy must be "build" or "create", got: ${String(strategy)}`);
|
|
25
|
+
}
|
|
26
|
+
/** @type {"association"} - Discriminant. */
|
|
27
|
+
this.kind = "association";
|
|
28
|
+
/** @type {string} - Relationship name on the owning model. */
|
|
29
|
+
this.name = name;
|
|
30
|
+
/** @type {string} - Factory name to run for the association. */
|
|
31
|
+
this.factory = factory || name;
|
|
32
|
+
/** @type {string[]} - Traits passed to the association factory. */
|
|
33
|
+
this.traits = traits;
|
|
34
|
+
/** @type {Record<string, ?>} - Overrides passed to the association factory. */
|
|
35
|
+
this.overrides = overrides;
|
|
36
|
+
/** @type {"build" | "create" | undefined} - Explicit strategy override. */
|
|
37
|
+
this.strategy = strategy;
|
|
38
|
+
Object.freeze(this);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzb2NpYXRpb24tZGVjbGFyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdGVzdGluZy9mYWN0b3J5L2Fzc29jaWF0aW9uLWRlY2xhcmF0aW9uLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxhQUFhLENBQUE7QUFFbEQ7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLHNCQUFzQjtJQUN6Qzs7Ozs7Ozs7T0FRRztJQUNILFlBQVksRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sR0FBRyxFQUFFLEVBQUUsU0FBUyxHQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUM7UUFDaEUsSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN0QyxNQUFNLElBQUksc0JBQXNCLENBQUMscURBQXFELE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDdkcsQ0FBQztRQUVELElBQUksUUFBUSxLQUFLLFNBQVMsSUFBSSxRQUFRLEtBQUssT0FBTyxJQUFJLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM1RSxNQUFNLElBQUksc0JBQXNCLENBQUMsMERBQTBELE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDaEgsQ0FBQztRQUVELDRDQUE0QztRQUM1QyxJQUFJLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQTtRQUV6Qiw4REFBOEQ7UUFDOUQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7UUFFaEIsZ0VBQWdFO1FBQ2hFLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxJQUFJLElBQUksQ0FBQTtRQUU5QixtRUFBbUU7UUFDbkUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7UUFFcEIsK0VBQStFO1FBQy9FLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFBO1FBRTFCLDJFQUEyRTtRQUMzRSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtRQUV4QixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3JCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge0ludmFsaWREZWZpbml0aW9uRXJyb3J9IGZyb20gXCIuL2Vycm9ycy5qc1wiXG5cbi8qKlxuICogQSBkZWNsYXJlZCBhc3NvY2lhdGlvbi4gSXQgcmVjb3JkcyB0aGUgcmVsYXRpb25zaGlwIG5hbWUsIHRoZSBmYWN0b3J5IHRvIHJ1blxuICogKGRlZmF1bHRpbmcgdG8gdGhlIHJlbGF0aW9uc2hpcCBuYW1lKSwgYW55IHRyYWl0cy9vdmVycmlkZXMgcGFzc2VkIHRvIHRoYXRcbiAqIGZhY3RvcnksIGFuZCBhbiBvcHRpb25hbCBleHBsaWNpdCBzdHJhdGVneS4gV2hlbiBubyBzdHJhdGVneSBpcyBnaXZlbiB0aGVcbiAqIGFzc29jaWF0aW9uIGZvbGxvd3MgdGhlIHBhcmVudCBzdHJhdGVneSBhdCBldmFsdWF0aW9uIHRpbWUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFzc29jaWF0aW9uRGVjbGFyYXRpb24ge1xuICAvKipcbiAgICogQnVpbGRzIGFuIGFzc29jaWF0aW9uIGRlY2xhcmF0aW9uLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm5hbWUgLSBSZWxhdGlvbnNoaXAgbmFtZSBvbiB0aGUgb3duaW5nIG1vZGVsLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuZmFjdG9yeV0gLSBGYWN0b3J5IG5hbWUgdG8gcnVuLiBEZWZhdWx0cyB0byB0aGUgcmVsYXRpb25zaGlwIG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFthcmdzLnRyYWl0c10gLSBUcmFpdHMgcGFzc2VkIHRvIHRoZSBhc3NvY2lhdGlvbiBmYWN0b3J5LlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsID8+fSBbYXJncy5vdmVycmlkZXNdIC0gT3ZlcnJpZGVzIHBhc3NlZCB0byB0aGUgYXNzb2NpYXRpb24gZmFjdG9yeS5cbiAgICogQHBhcmFtIHtcImJ1aWxkXCIgfCBcImNyZWF0ZVwiIHwgdW5kZWZpbmVkfSBbYXJncy5zdHJhdGVneV0gLSBFeHBsaWNpdCBzdHJhdGVneSBvdmVycmlkZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtuYW1lLCBmYWN0b3J5LCB0cmFpdHMgPSBbXSwgb3ZlcnJpZGVzID0ge30sIHN0cmF0ZWd5fSkge1xuICAgIGlmICghbmFtZSB8fCB0eXBlb2YgbmFtZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWREZWZpbml0aW9uRXJyb3IoYEFzc29jaWF0aW9uIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcsIGdvdDogJHtTdHJpbmcobmFtZSl9YClcbiAgICB9XG5cbiAgICBpZiAoc3RyYXRlZ3kgIT09IHVuZGVmaW5lZCAmJiBzdHJhdGVneSAhPT0gXCJidWlsZFwiICYmIHN0cmF0ZWd5ICE9PSBcImNyZWF0ZVwiKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZERlZmluaXRpb25FcnJvcihgQXNzb2NpYXRpb24gc3RyYXRlZ3kgbXVzdCBiZSBcImJ1aWxkXCIgb3IgXCJjcmVhdGVcIiwgZ290OiAke1N0cmluZyhzdHJhdGVneSl9YClcbiAgICB9XG5cbiAgICAvKiogQHR5cGUge1wiYXNzb2NpYXRpb25cIn0gLSBEaXNjcmltaW5hbnQuICovXG4gICAgdGhpcy5raW5kID0gXCJhc3NvY2lhdGlvblwiXG5cbiAgICAvKiogQHR5cGUge3N0cmluZ30gLSBSZWxhdGlvbnNoaXAgbmFtZSBvbiB0aGUgb3duaW5nIG1vZGVsLiAqL1xuICAgIHRoaXMubmFtZSA9IG5hbWVcblxuICAgIC8qKiBAdHlwZSB7c3RyaW5nfSAtIEZhY3RvcnkgbmFtZSB0byBydW4gZm9yIHRoZSBhc3NvY2lhdGlvbi4gKi9cbiAgICB0aGlzLmZhY3RvcnkgPSBmYWN0b3J5IHx8IG5hbWVcblxuICAgIC8qKiBAdHlwZSB7c3RyaW5nW119IC0gVHJhaXRzIHBhc3NlZCB0byB0aGUgYXNzb2NpYXRpb24gZmFjdG9yeS4gKi9cbiAgICB0aGlzLnRyYWl0cyA9IHRyYWl0c1xuXG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gLSBPdmVycmlkZXMgcGFzc2VkIHRvIHRoZSBhc3NvY2lhdGlvbiBmYWN0b3J5LiAqL1xuICAgIHRoaXMub3ZlcnJpZGVzID0gb3ZlcnJpZGVzXG5cbiAgICAvKiogQHR5cGUge1wiYnVpbGRcIiB8IFwiY3JlYXRlXCIgfCB1bmRlZmluZWR9IC0gRXhwbGljaXQgc3RyYXRlZ3kgb3ZlcnJpZGUuICovXG4gICAgdGhpcy5zdHJhdGVneSA9IHN0cmF0ZWd5XG5cbiAgICBPYmplY3QuZnJlZXplKHRoaXMpXG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A literal or lazy attribute (or transient) declaration. A function value is the
|
|
3
|
+
* lazy form and receives the evaluator context; any other value is a literal.
|
|
4
|
+
* @typedef {object} AttributeDeclaration
|
|
5
|
+
* @property {"attribute"} kind - Discriminant.
|
|
6
|
+
* @property {string} name - Attribute name.
|
|
7
|
+
* @property {boolean} isTransient - Whether the value is transient (never assigned/returned).
|
|
8
|
+
* @property {?} value - Literal value or lazy `(context) => value` function.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* A lifecycle callback declaration. The same declaration object reached through
|
|
12
|
+
* multiple trait paths runs once per record (dedup is by object identity).
|
|
13
|
+
* @typedef {object} CallbackDeclaration
|
|
14
|
+
* @property {"callback"} kind - Discriminant.
|
|
15
|
+
* @property {string} event - One of the supported callback events.
|
|
16
|
+
* @property {(args: {record: ?, context: ?, strategy: string}) => (void | Promise<void>)} fn - Callback body.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* A base-trait inclusion declaration (a trait applied by default within a factory
|
|
20
|
+
* or composed inside another trait).
|
|
21
|
+
* @typedef {object} TraitIncludeDeclaration
|
|
22
|
+
* @property {"traitInclude"} kind - Discriminant.
|
|
23
|
+
* @property {string} name - Referenced trait name.
|
|
24
|
+
*/
|
|
25
|
+
/**
|
|
26
|
+
* A custom-constructor declaration.
|
|
27
|
+
* @typedef {object} InitializeWithDeclaration
|
|
28
|
+
* @property {"initializeWith"} kind - Discriminant.
|
|
29
|
+
* @property {(args: {attributes: Record<string, ?>, context: ?, get: (name: string) => ?}) => (? | Promise<?>)} fn - Constructor body.
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* A custom-persistence declaration.
|
|
33
|
+
* @typedef {object} ToCreateDeclaration
|
|
34
|
+
* @property {"toCreate"} kind - Discriminant.
|
|
35
|
+
* @property {(args: {record: ?, context: ?}) => (void | Promise<void>)} fn - Persistence body.
|
|
36
|
+
*/
|
|
37
|
+
/**
|
|
38
|
+
* A declaration that disables persistence entirely for the create strategy.
|
|
39
|
+
* @typedef {object} SkipCreateDeclaration
|
|
40
|
+
* @property {"skipCreate"} kind - Discriminant.
|
|
41
|
+
*/
|
|
42
|
+
/**
|
|
43
|
+
* Union of every declaration kind stored on a factory/trait definition. Includes
|
|
44
|
+
* association declarations imported from their own module.
|
|
45
|
+
* @typedef {AttributeDeclaration | CallbackDeclaration | TraitIncludeDeclaration | InitializeWithDeclaration | ToCreateDeclaration | SkipCreateDeclaration | import("./association-declaration.js").default} Declaration
|
|
46
|
+
*/
|
|
47
|
+
/**
|
|
48
|
+
* Creates a literal/lazy attribute declaration.
|
|
49
|
+
* @param {string} name - Attribute name.
|
|
50
|
+
* @param {?} value - Literal value or lazy function.
|
|
51
|
+
* @param {boolean} isTransient - Whether the declaration is transient.
|
|
52
|
+
* @returns {AttributeDeclaration} - The frozen declaration.
|
|
53
|
+
*/
|
|
54
|
+
export function attributeDeclaration(name: string, value: unknown, isTransient: boolean): AttributeDeclaration;
|
|
55
|
+
/**
|
|
56
|
+
* Creates a lifecycle callback declaration.
|
|
57
|
+
* @param {string} event - Callback event name.
|
|
58
|
+
* @param {CallbackDeclaration["fn"]} fn - Callback body.
|
|
59
|
+
* @returns {CallbackDeclaration} - The frozen declaration.
|
|
60
|
+
*/
|
|
61
|
+
export function callbackDeclaration(event: string, fn: CallbackDeclaration["fn"]): CallbackDeclaration;
|
|
62
|
+
/**
|
|
63
|
+
* Creates a base-trait inclusion declaration.
|
|
64
|
+
* @param {string} name - Referenced trait name.
|
|
65
|
+
* @returns {TraitIncludeDeclaration} - The frozen declaration.
|
|
66
|
+
*/
|
|
67
|
+
export function traitIncludeDeclaration(name: string): TraitIncludeDeclaration;
|
|
68
|
+
/**
|
|
69
|
+
* Creates a custom-constructor declaration.
|
|
70
|
+
* @param {InitializeWithDeclaration["fn"]} fn - Constructor body.
|
|
71
|
+
* @returns {InitializeWithDeclaration} - The frozen declaration.
|
|
72
|
+
*/
|
|
73
|
+
export function initializeWithDeclaration(fn: InitializeWithDeclaration["fn"]): InitializeWithDeclaration;
|
|
74
|
+
/**
|
|
75
|
+
* Creates a custom-persistence declaration.
|
|
76
|
+
* @param {ToCreateDeclaration["fn"]} fn - Persistence body.
|
|
77
|
+
* @returns {ToCreateDeclaration} - The frozen declaration.
|
|
78
|
+
*/
|
|
79
|
+
export function toCreateDeclaration(fn: ToCreateDeclaration["fn"]): ToCreateDeclaration;
|
|
80
|
+
/**
|
|
81
|
+
* Creates a skip-create declaration.
|
|
82
|
+
* @returns {SkipCreateDeclaration} - The frozen declaration.
|
|
83
|
+
*/
|
|
84
|
+
export function skipCreateDeclaration(): SkipCreateDeclaration;
|
|
85
|
+
/**
|
|
86
|
+
* A literal or lazy attribute (or transient) declaration. A function value is the
|
|
87
|
+
* lazy form and receives the evaluator context; any other value is a literal.
|
|
88
|
+
*/
|
|
89
|
+
export type AttributeDeclaration = {
|
|
90
|
+
/**
|
|
91
|
+
* - Discriminant.
|
|
92
|
+
*/
|
|
93
|
+
kind: "attribute";
|
|
94
|
+
/**
|
|
95
|
+
* - Attribute name.
|
|
96
|
+
*/
|
|
97
|
+
name: string;
|
|
98
|
+
/**
|
|
99
|
+
* - Whether the value is transient (never assigned/returned).
|
|
100
|
+
*/
|
|
101
|
+
isTransient: boolean;
|
|
102
|
+
/**
|
|
103
|
+
* - Literal value or lazy `(context) => value` function.
|
|
104
|
+
*/
|
|
105
|
+
value: unknown;
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* A lifecycle callback declaration. The same declaration object reached through
|
|
109
|
+
* multiple trait paths runs once per record (dedup is by object identity).
|
|
110
|
+
*/
|
|
111
|
+
export type CallbackDeclaration = {
|
|
112
|
+
/**
|
|
113
|
+
* - Discriminant.
|
|
114
|
+
*/
|
|
115
|
+
kind: "callback";
|
|
116
|
+
/**
|
|
117
|
+
* - One of the supported callback events.
|
|
118
|
+
*/
|
|
119
|
+
event: string;
|
|
120
|
+
/**
|
|
121
|
+
* - Callback body.
|
|
122
|
+
*/
|
|
123
|
+
fn: (args: {
|
|
124
|
+
record: unknown;
|
|
125
|
+
context: unknown;
|
|
126
|
+
strategy: string;
|
|
127
|
+
}) => (void | Promise<void>);
|
|
128
|
+
};
|
|
129
|
+
/**
|
|
130
|
+
* A base-trait inclusion declaration (a trait applied by default within a factory
|
|
131
|
+
* or composed inside another trait).
|
|
132
|
+
*/
|
|
133
|
+
export type TraitIncludeDeclaration = {
|
|
134
|
+
/**
|
|
135
|
+
* - Discriminant.
|
|
136
|
+
*/
|
|
137
|
+
kind: "traitInclude";
|
|
138
|
+
/**
|
|
139
|
+
* - Referenced trait name.
|
|
140
|
+
*/
|
|
141
|
+
name: string;
|
|
142
|
+
};
|
|
143
|
+
/**
|
|
144
|
+
* A custom-constructor declaration.
|
|
145
|
+
*/
|
|
146
|
+
export type InitializeWithDeclaration = {
|
|
147
|
+
/**
|
|
148
|
+
* - Discriminant.
|
|
149
|
+
*/
|
|
150
|
+
kind: "initializeWith";
|
|
151
|
+
/**
|
|
152
|
+
* - Constructor body.
|
|
153
|
+
*/
|
|
154
|
+
fn: (args: {
|
|
155
|
+
attributes: Record<string, unknown>;
|
|
156
|
+
context: unknown;
|
|
157
|
+
get: (name: string) => unknown;
|
|
158
|
+
}) => (unknown | Promise<unknown>);
|
|
159
|
+
};
|
|
160
|
+
/**
|
|
161
|
+
* A custom-persistence declaration.
|
|
162
|
+
*/
|
|
163
|
+
export type ToCreateDeclaration = {
|
|
164
|
+
/**
|
|
165
|
+
* - Discriminant.
|
|
166
|
+
*/
|
|
167
|
+
kind: "toCreate";
|
|
168
|
+
/**
|
|
169
|
+
* - Persistence body.
|
|
170
|
+
*/
|
|
171
|
+
fn: (args: {
|
|
172
|
+
record: unknown;
|
|
173
|
+
context: unknown;
|
|
174
|
+
}) => (void | Promise<void>);
|
|
175
|
+
};
|
|
176
|
+
/**
|
|
177
|
+
* A declaration that disables persistence entirely for the create strategy.
|
|
178
|
+
*/
|
|
179
|
+
export type SkipCreateDeclaration = {
|
|
180
|
+
/**
|
|
181
|
+
* - Discriminant.
|
|
182
|
+
*/
|
|
183
|
+
kind: "skipCreate";
|
|
184
|
+
};
|
|
185
|
+
/**
|
|
186
|
+
* Union of every declaration kind stored on a factory/trait definition. Includes
|
|
187
|
+
* association declarations imported from their own module.
|
|
188
|
+
*/
|
|
189
|
+
export type Declaration = AttributeDeclaration | CallbackDeclaration | TraitIncludeDeclaration | InitializeWithDeclaration | ToCreateDeclaration | SkipCreateDeclaration | import("./association-declaration.js").default;
|
|
190
|
+
//# sourceMappingURL=declarations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"declarations.d.ts","sourceRoot":"","sources":["../../../../src/testing/factory/declarations.js"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH;;;;;;;GAOG;AAEH;;;;;;GAMG;AAEH;;;;;GAKG;AAEH;;;;;GAKG;AAEH;;;;GAIG;AAEH;;;;GAIG;AAEH;;;;;;GAMG;AACH,2CALW,MAAM,SACN,OAAC,eACD,OAAO,GACL,oBAAoB,CAIhC;AAED;;;;;GAKG;AACH,2CAJW,MAAM,MACN,mBAAmB,CAAC,IAAI,CAAC,GACvB,mBAAmB,CAI/B;AAED;;;;GAIG;AACH,8CAHW,MAAM,GACJ,uBAAuB,CAInC;AAED;;;;GAIG;AACH,8CAHW,yBAAyB,CAAC,IAAI,CAAC,GAC7B,yBAAyB,CAIrC;AAED;;;;GAIG;AACH,wCAHW,mBAAmB,CAAC,IAAI,CAAC,GACvB,mBAAmB,CAI/B;AAED;;;GAGG;AACH,yCAFa,qBAAqB,CAIjC;;;;;;;;;UAvGa,WAAW;;;;UACX,MAAM;;;;iBACN,OAAO;;;;WACP,OAAC;;;;;;;;;;UAOD,UAAU;;;;WACV,MAAM;;;;QACN,CAAC,IAAI,EAAE;QAAC,MAAM,EAAE,OAAC,CAAC;QAAC,OAAO,EAAE,OAAC,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;;;;;;;;;;UAO3E,cAAc;;;;UACd,MAAM;;;;;;;;;UAMN,gBAAgB;;;;QAChB,CAAC,IAAI,EAAE;QAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,CAAC;QAAC,OAAO,EAAE,OAAC,CAAC;QAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAC,CAAA;KAAC,KAAK,CAAC,OAAC,GAAG,OAAO,CAAC,OAAC,CAAC,CAAC;;;;;;;;;UAMjG,UAAU;;;;QACV,CAAC,IAAI,EAAE;QAAC,MAAM,EAAE,OAAC,CAAC;QAAC,OAAO,EAAE,OAAC,CAAA;KAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;;;;;;;;;UAMzD,YAAY;;;;;;0BAMb,oBAAoB,GAAG,mBAAmB,GAAG,uBAAuB,GAAG,yBAAyB,GAAG,mBAAmB,GAAG,qBAAqB,GAAG,OAAO,8BAA8B,EAAE,OAAO"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
/**
|
|
3
|
+
* A literal or lazy attribute (or transient) declaration. A function value is the
|
|
4
|
+
* lazy form and receives the evaluator context; any other value is a literal.
|
|
5
|
+
* @typedef {object} AttributeDeclaration
|
|
6
|
+
* @property {"attribute"} kind - Discriminant.
|
|
7
|
+
* @property {string} name - Attribute name.
|
|
8
|
+
* @property {boolean} isTransient - Whether the value is transient (never assigned/returned).
|
|
9
|
+
* @property {?} value - Literal value or lazy `(context) => value` function.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* A lifecycle callback declaration. The same declaration object reached through
|
|
13
|
+
* multiple trait paths runs once per record (dedup is by object identity).
|
|
14
|
+
* @typedef {object} CallbackDeclaration
|
|
15
|
+
* @property {"callback"} kind - Discriminant.
|
|
16
|
+
* @property {string} event - One of the supported callback events.
|
|
17
|
+
* @property {(args: {record: ?, context: ?, strategy: string}) => (void | Promise<void>)} fn - Callback body.
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* A base-trait inclusion declaration (a trait applied by default within a factory
|
|
21
|
+
* or composed inside another trait).
|
|
22
|
+
* @typedef {object} TraitIncludeDeclaration
|
|
23
|
+
* @property {"traitInclude"} kind - Discriminant.
|
|
24
|
+
* @property {string} name - Referenced trait name.
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* A custom-constructor declaration.
|
|
28
|
+
* @typedef {object} InitializeWithDeclaration
|
|
29
|
+
* @property {"initializeWith"} kind - Discriminant.
|
|
30
|
+
* @property {(args: {attributes: Record<string, ?>, context: ?, get: (name: string) => ?}) => (? | Promise<?>)} fn - Constructor body.
|
|
31
|
+
*/
|
|
32
|
+
/**
|
|
33
|
+
* A custom-persistence declaration.
|
|
34
|
+
* @typedef {object} ToCreateDeclaration
|
|
35
|
+
* @property {"toCreate"} kind - Discriminant.
|
|
36
|
+
* @property {(args: {record: ?, context: ?}) => (void | Promise<void>)} fn - Persistence body.
|
|
37
|
+
*/
|
|
38
|
+
/**
|
|
39
|
+
* A declaration that disables persistence entirely for the create strategy.
|
|
40
|
+
* @typedef {object} SkipCreateDeclaration
|
|
41
|
+
* @property {"skipCreate"} kind - Discriminant.
|
|
42
|
+
*/
|
|
43
|
+
/**
|
|
44
|
+
* Union of every declaration kind stored on a factory/trait definition. Includes
|
|
45
|
+
* association declarations imported from their own module.
|
|
46
|
+
* @typedef {AttributeDeclaration | CallbackDeclaration | TraitIncludeDeclaration | InitializeWithDeclaration | ToCreateDeclaration | SkipCreateDeclaration | import("./association-declaration.js").default} Declaration
|
|
47
|
+
*/
|
|
48
|
+
/**
|
|
49
|
+
* Creates a literal/lazy attribute declaration.
|
|
50
|
+
* @param {string} name - Attribute name.
|
|
51
|
+
* @param {?} value - Literal value or lazy function.
|
|
52
|
+
* @param {boolean} isTransient - Whether the declaration is transient.
|
|
53
|
+
* @returns {AttributeDeclaration} - The frozen declaration.
|
|
54
|
+
*/
|
|
55
|
+
export function attributeDeclaration(name, value, isTransient) {
|
|
56
|
+
return Object.freeze({ kind: "attribute", name, isTransient, value });
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Creates a lifecycle callback declaration.
|
|
60
|
+
* @param {string} event - Callback event name.
|
|
61
|
+
* @param {CallbackDeclaration["fn"]} fn - Callback body.
|
|
62
|
+
* @returns {CallbackDeclaration} - The frozen declaration.
|
|
63
|
+
*/
|
|
64
|
+
export function callbackDeclaration(event, fn) {
|
|
65
|
+
return Object.freeze({ kind: "callback", event, fn });
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Creates a base-trait inclusion declaration.
|
|
69
|
+
* @param {string} name - Referenced trait name.
|
|
70
|
+
* @returns {TraitIncludeDeclaration} - The frozen declaration.
|
|
71
|
+
*/
|
|
72
|
+
export function traitIncludeDeclaration(name) {
|
|
73
|
+
return Object.freeze({ kind: "traitInclude", name });
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Creates a custom-constructor declaration.
|
|
77
|
+
* @param {InitializeWithDeclaration["fn"]} fn - Constructor body.
|
|
78
|
+
* @returns {InitializeWithDeclaration} - The frozen declaration.
|
|
79
|
+
*/
|
|
80
|
+
export function initializeWithDeclaration(fn) {
|
|
81
|
+
return Object.freeze({ kind: "initializeWith", fn });
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Creates a custom-persistence declaration.
|
|
85
|
+
* @param {ToCreateDeclaration["fn"]} fn - Persistence body.
|
|
86
|
+
* @returns {ToCreateDeclaration} - The frozen declaration.
|
|
87
|
+
*/
|
|
88
|
+
export function toCreateDeclaration(fn) {
|
|
89
|
+
return Object.freeze({ kind: "toCreate", fn });
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Creates a skip-create declaration.
|
|
93
|
+
* @returns {SkipCreateDeclaration} - The frozen declaration.
|
|
94
|
+
*/
|
|
95
|
+
export function skipCreateDeclaration() {
|
|
96
|
+
return Object.freeze({ kind: "skipCreate" });
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjbGFyYXRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rlc3RpbmcvZmFjdG9yeS9kZWNsYXJhdGlvbnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaOzs7Ozs7OztHQVFHO0FBRUg7Ozs7Ozs7R0FPRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7OztHQUlHO0FBRUg7Ozs7R0FJRztBQUVIOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVc7SUFDM0QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUE7QUFDckUsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEtBQUssRUFBRSxFQUFFO0lBQzNDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBQyxDQUFDLENBQUE7QUFDckQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsSUFBSTtJQUMxQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7QUFDcEQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUseUJBQXlCLENBQUMsRUFBRTtJQUMxQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFDLENBQUMsQ0FBQTtBQUNwRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxFQUFFO0lBQ3BDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFDLENBQUMsQ0FBQTtBQUM5QyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQjtJQUNuQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxJQUFJLEVBQUUsWUFBWSxFQUFDLENBQUMsQ0FBQTtBQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKlxuICogQSBsaXRlcmFsIG9yIGxhenkgYXR0cmlidXRlIChvciB0cmFuc2llbnQpIGRlY2xhcmF0aW9uLiBBIGZ1bmN0aW9uIHZhbHVlIGlzIHRoZVxuICogbGF6eSBmb3JtIGFuZCByZWNlaXZlcyB0aGUgZXZhbHVhdG9yIGNvbnRleHQ7IGFueSBvdGhlciB2YWx1ZSBpcyBhIGxpdGVyYWwuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBBdHRyaWJ1dGVEZWNsYXJhdGlvblxuICogQHByb3BlcnR5IHtcImF0dHJpYnV0ZVwifSBraW5kIC0gRGlzY3JpbWluYW50LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgLSBBdHRyaWJ1dGUgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNUcmFuc2llbnQgLSBXaGV0aGVyIHRoZSB2YWx1ZSBpcyB0cmFuc2llbnQgKG5ldmVyIGFzc2lnbmVkL3JldHVybmVkKS5cbiAqIEBwcm9wZXJ0eSB7P30gdmFsdWUgLSBMaXRlcmFsIHZhbHVlIG9yIGxhenkgYChjb250ZXh0KSA9PiB2YWx1ZWAgZnVuY3Rpb24uXG4gKi9cblxuLyoqXG4gKiBBIGxpZmVjeWNsZSBjYWxsYmFjayBkZWNsYXJhdGlvbi4gVGhlIHNhbWUgZGVjbGFyYXRpb24gb2JqZWN0IHJlYWNoZWQgdGhyb3VnaFxuICogbXVsdGlwbGUgdHJhaXQgcGF0aHMgcnVucyBvbmNlIHBlciByZWNvcmQgKGRlZHVwIGlzIGJ5IG9iamVjdCBpZGVudGl0eSkuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDYWxsYmFja0RlY2xhcmF0aW9uXG4gKiBAcHJvcGVydHkge1wiY2FsbGJhY2tcIn0ga2luZCAtIERpc2NyaW1pbmFudC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBldmVudCAtIE9uZSBvZiB0aGUgc3VwcG9ydGVkIGNhbGxiYWNrIGV2ZW50cy5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHtyZWNvcmQ6ID8sIGNvbnRleHQ6ID8sIHN0cmF0ZWd5OiBzdHJpbmd9KSA9PiAodm9pZCB8IFByb21pc2U8dm9pZD4pfSBmbiAtIENhbGxiYWNrIGJvZHkuXG4gKi9cblxuLyoqXG4gKiBBIGJhc2UtdHJhaXQgaW5jbHVzaW9uIGRlY2xhcmF0aW9uIChhIHRyYWl0IGFwcGxpZWQgYnkgZGVmYXVsdCB3aXRoaW4gYSBmYWN0b3J5XG4gKiBvciBjb21wb3NlZCBpbnNpZGUgYW5vdGhlciB0cmFpdCkuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBUcmFpdEluY2x1ZGVEZWNsYXJhdGlvblxuICogQHByb3BlcnR5IHtcInRyYWl0SW5jbHVkZVwifSBraW5kIC0gRGlzY3JpbWluYW50LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgLSBSZWZlcmVuY2VkIHRyYWl0IG5hbWUuXG4gKi9cblxuLyoqXG4gKiBBIGN1c3RvbS1jb25zdHJ1Y3RvciBkZWNsYXJhdGlvbi5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IEluaXRpYWxpemVXaXRoRGVjbGFyYXRpb25cbiAqIEBwcm9wZXJ0eSB7XCJpbml0aWFsaXplV2l0aFwifSBraW5kIC0gRGlzY3JpbWluYW50LlxuICogQHByb3BlcnR5IHsoYXJnczoge2F0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsID8+LCBjb250ZXh0OiA/LCBnZXQ6IChuYW1lOiBzdHJpbmcpID0+ID99KSA9PiAoPyB8IFByb21pc2U8Pz4pfSBmbiAtIENvbnN0cnVjdG9yIGJvZHkuXG4gKi9cblxuLyoqXG4gKiBBIGN1c3RvbS1wZXJzaXN0ZW5jZSBkZWNsYXJhdGlvbi5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFRvQ3JlYXRlRGVjbGFyYXRpb25cbiAqIEBwcm9wZXJ0eSB7XCJ0b0NyZWF0ZVwifSBraW5kIC0gRGlzY3JpbWluYW50LlxuICogQHByb3BlcnR5IHsoYXJnczoge3JlY29yZDogPywgY29udGV4dDogP30pID0+ICh2b2lkIHwgUHJvbWlzZTx2b2lkPil9IGZuIC0gUGVyc2lzdGVuY2UgYm9keS5cbiAqL1xuXG4vKipcbiAqIEEgZGVjbGFyYXRpb24gdGhhdCBkaXNhYmxlcyBwZXJzaXN0ZW5jZSBlbnRpcmVseSBmb3IgdGhlIGNyZWF0ZSBzdHJhdGVneS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNraXBDcmVhdGVEZWNsYXJhdGlvblxuICogQHByb3BlcnR5IHtcInNraXBDcmVhdGVcIn0ga2luZCAtIERpc2NyaW1pbmFudC5cbiAqL1xuXG4vKipcbiAqIFVuaW9uIG9mIGV2ZXJ5IGRlY2xhcmF0aW9uIGtpbmQgc3RvcmVkIG9uIGEgZmFjdG9yeS90cmFpdCBkZWZpbml0aW9uLiBJbmNsdWRlc1xuICogYXNzb2NpYXRpb24gZGVjbGFyYXRpb25zIGltcG9ydGVkIGZyb20gdGhlaXIgb3duIG1vZHVsZS5cbiAqIEB0eXBlZGVmIHtBdHRyaWJ1dGVEZWNsYXJhdGlvbiB8IENhbGxiYWNrRGVjbGFyYXRpb24gfCBUcmFpdEluY2x1ZGVEZWNsYXJhdGlvbiB8IEluaXRpYWxpemVXaXRoRGVjbGFyYXRpb24gfCBUb0NyZWF0ZURlY2xhcmF0aW9uIHwgU2tpcENyZWF0ZURlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi9hc3NvY2lhdGlvbi1kZWNsYXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBEZWNsYXJhdGlvblxuICovXG5cbi8qKlxuICogQ3JlYXRlcyBhIGxpdGVyYWwvbGF6eSBhdHRyaWJ1dGUgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIEF0dHJpYnV0ZSBuYW1lLlxuICogQHBhcmFtIHs/fSB2YWx1ZSAtIExpdGVyYWwgdmFsdWUgb3IgbGF6eSBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNUcmFuc2llbnQgLSBXaGV0aGVyIHRoZSBkZWNsYXJhdGlvbiBpcyB0cmFuc2llbnQuXG4gKiBAcmV0dXJucyB7QXR0cmlidXRlRGVjbGFyYXRpb259IC0gVGhlIGZyb3plbiBkZWNsYXJhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dHJpYnV0ZURlY2xhcmF0aW9uKG5hbWUsIHZhbHVlLCBpc1RyYW5zaWVudCkge1xuICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7a2luZDogXCJhdHRyaWJ1dGVcIiwgbmFtZSwgaXNUcmFuc2llbnQsIHZhbHVlfSlcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbGlmZWN5Y2xlIGNhbGxiYWNrIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50IC0gQ2FsbGJhY2sgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7Q2FsbGJhY2tEZWNsYXJhdGlvbltcImZuXCJdfSBmbiAtIENhbGxiYWNrIGJvZHkuXG4gKiBAcmV0dXJucyB7Q2FsbGJhY2tEZWNsYXJhdGlvbn0gLSBUaGUgZnJvemVuIGRlY2xhcmF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsbGJhY2tEZWNsYXJhdGlvbihldmVudCwgZm4pIHtcbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoe2tpbmQ6IFwiY2FsbGJhY2tcIiwgZXZlbnQsIGZufSlcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgYmFzZS10cmFpdCBpbmNsdXNpb24gZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFJlZmVyZW5jZWQgdHJhaXQgbmFtZS5cbiAqIEByZXR1cm5zIHtUcmFpdEluY2x1ZGVEZWNsYXJhdGlvbn0gLSBUaGUgZnJvemVuIGRlY2xhcmF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhaXRJbmNsdWRlRGVjbGFyYXRpb24obmFtZSkge1xuICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7a2luZDogXCJ0cmFpdEluY2x1ZGVcIiwgbmFtZX0pXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGN1c3RvbS1jb25zdHJ1Y3RvciBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7SW5pdGlhbGl6ZVdpdGhEZWNsYXJhdGlvbltcImZuXCJdfSBmbiAtIENvbnN0cnVjdG9yIGJvZHkuXG4gKiBAcmV0dXJucyB7SW5pdGlhbGl6ZVdpdGhEZWNsYXJhdGlvbn0gLSBUaGUgZnJvemVuIGRlY2xhcmF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZVdpdGhEZWNsYXJhdGlvbihmbikge1xuICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7a2luZDogXCJpbml0aWFsaXplV2l0aFwiLCBmbn0pXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGN1c3RvbS1wZXJzaXN0ZW5jZSBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7VG9DcmVhdGVEZWNsYXJhdGlvbltcImZuXCJdfSBmbiAtIFBlcnNpc3RlbmNlIGJvZHkuXG4gKiBAcmV0dXJucyB7VG9DcmVhdGVEZWNsYXJhdGlvbn0gLSBUaGUgZnJvemVuIGRlY2xhcmF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9DcmVhdGVEZWNsYXJhdGlvbihmbikge1xuICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7a2luZDogXCJ0b0NyZWF0ZVwiLCBmbn0pXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNraXAtY3JlYXRlIGRlY2xhcmF0aW9uLlxuICogQHJldHVybnMge1NraXBDcmVhdGVEZWNsYXJhdGlvbn0gLSBUaGUgZnJvemVuIGRlY2xhcmF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2tpcENyZWF0ZURlY2xhcmF0aW9uKCkge1xuICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7a2luZDogXCJza2lwQ3JlYXRlXCJ9KVxufVxuIl19
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A single `define`/`modify` session. It walks the builder callbacks, compiles
|
|
3
|
+
* immutable definitions and registers them into the target registry, throwing on
|
|
4
|
+
* duplicate or structurally invalid declarations at definition time.
|
|
5
|
+
*/
|
|
6
|
+
export default class DefinitionSession {
|
|
7
|
+
/**
|
|
8
|
+
* Builds a session.
|
|
9
|
+
* @param {import("./factory-registry.js").default} registry - Target registry.
|
|
10
|
+
*/
|
|
11
|
+
constructor(registry: import("./factory-registry.js").default);
|
|
12
|
+
/** @type {import("./factory-registry.js").default} - Target registry. */
|
|
13
|
+
registry: import("./factory-registry.js").default;
|
|
14
|
+
/**
|
|
15
|
+
* Runs a root `define` callback.
|
|
16
|
+
* @param {(builder: object) => void} callback - Root builder callback.
|
|
17
|
+
* @returns {void}
|
|
18
|
+
*/
|
|
19
|
+
run(callback: (builder: object) => void): void;
|
|
20
|
+
/**
|
|
21
|
+
* Runs a `modify` callback that reopens existing factories to append/override
|
|
22
|
+
* declarations, recompiling each into a fresh immutable definition rather than
|
|
23
|
+
* mutating the original.
|
|
24
|
+
* @param {(builder: object) => void} callback - Modify builder callback.
|
|
25
|
+
* @returns {void}
|
|
26
|
+
*/
|
|
27
|
+
runModify(callback: (builder: object) => void): void;
|
|
28
|
+
/**
|
|
29
|
+
* Builds the builder object exposed to `modify`.
|
|
30
|
+
* @returns {object} - Modify builder.
|
|
31
|
+
*/
|
|
32
|
+
_modifyBuilder(): object;
|
|
33
|
+
/**
|
|
34
|
+
* Recompiles an existing factory with appended declarations.
|
|
35
|
+
* @param {string} name - Existing factory name.
|
|
36
|
+
* @param {(builder: object) => void} cb - Factory builder callback.
|
|
37
|
+
* @returns {void}
|
|
38
|
+
*/
|
|
39
|
+
_modifyFactory(name: string, cb: (builder: object) => void): void;
|
|
40
|
+
/**
|
|
41
|
+
* Builds the root builder object exposed to `define`.
|
|
42
|
+
* @returns {object} - Root builder.
|
|
43
|
+
*/
|
|
44
|
+
_rootBuilder(): object;
|
|
45
|
+
/**
|
|
46
|
+
* Compiles and registers a factory (and its nested children/local traits/scoped
|
|
47
|
+
* sequences).
|
|
48
|
+
* @param {string} name - Factory name.
|
|
49
|
+
* @param {?} modelOrOptions - Model class or options object.
|
|
50
|
+
* @param {?} cb - Factory builder callback.
|
|
51
|
+
* @param {string | null} inheritedParent - Parent name for nested factories.
|
|
52
|
+
* @returns {void}
|
|
53
|
+
*/
|
|
54
|
+
_defineFactory(name: string, modelOrOptions: unknown, cb: unknown, inheritedParent: string | null): void;
|
|
55
|
+
/**
|
|
56
|
+
* Builds the factory builder object.
|
|
57
|
+
* @param {DeclarationCollector} collector - Declaration collector.
|
|
58
|
+
* @param {Array<{name: string, modelOrOptions: ?, cb: ?}>} nestedFactories - Nested factory sink.
|
|
59
|
+
* @param {Map<string, TraitDefinition>} localTraits - Local trait sink.
|
|
60
|
+
* @param {Sequence[]} scopedSequences - Scoped sequence sink.
|
|
61
|
+
* @returns {object} - Factory builder.
|
|
62
|
+
*/
|
|
63
|
+
_factoryBuilder(collector: DeclarationCollector, nestedFactories: Array<{
|
|
64
|
+
name: string;
|
|
65
|
+
modelOrOptions: unknown;
|
|
66
|
+
cb: unknown;
|
|
67
|
+
}>, localTraits: Map<string, TraitDefinition>, scopedSequences: Sequence[]): object;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Collects declarations for one factory/trait block. Shared by factory blocks,
|
|
71
|
+
* trait blocks and the root registry-defaults block.
|
|
72
|
+
*/
|
|
73
|
+
declare class DeclarationCollector {
|
|
74
|
+
/** @type {import("./declarations.js").Declaration[]} - Ordered declarations. */
|
|
75
|
+
declarations: import("./declarations.js").Declaration[];
|
|
76
|
+
/**
|
|
77
|
+
* Records a literal/lazy attribute.
|
|
78
|
+
* @param {string} name - Attribute name.
|
|
79
|
+
* @param {?} value - Literal value or lazy function.
|
|
80
|
+
* @returns {void}
|
|
81
|
+
*/
|
|
82
|
+
attribute(name: string, value: unknown): void;
|
|
83
|
+
/**
|
|
84
|
+
* Records a transient attribute.
|
|
85
|
+
* @param {string} name - Transient name.
|
|
86
|
+
* @param {?} value - Literal value or lazy function.
|
|
87
|
+
* @returns {void}
|
|
88
|
+
*/
|
|
89
|
+
transient(name: string, value: unknown): void;
|
|
90
|
+
/**
|
|
91
|
+
* Records an association.
|
|
92
|
+
* @param {string} name - Relationship name.
|
|
93
|
+
* @param {Array<?>} args - Traits and/or an options object.
|
|
94
|
+
* @returns {void}
|
|
95
|
+
*/
|
|
96
|
+
association(name: string, ...args: Array<unknown>): void;
|
|
97
|
+
/**
|
|
98
|
+
* Records a before-callback.
|
|
99
|
+
* @param {string} phase - Phase (all/build/create).
|
|
100
|
+
* @param {import("./declarations.js").CallbackDeclaration["fn"]} fn - Callback body.
|
|
101
|
+
* @returns {void}
|
|
102
|
+
*/
|
|
103
|
+
before(phase: string, fn: import("./declarations.js").CallbackDeclaration["fn"]): void;
|
|
104
|
+
/**
|
|
105
|
+
* Records an after-callback.
|
|
106
|
+
* @param {string} phase - Phase (all/build/create).
|
|
107
|
+
* @param {import("./declarations.js").CallbackDeclaration["fn"]} fn - Callback body.
|
|
108
|
+
* @returns {void}
|
|
109
|
+
*/
|
|
110
|
+
after(phase: string, fn: import("./declarations.js").CallbackDeclaration["fn"]): void;
|
|
111
|
+
/**
|
|
112
|
+
* Records a custom constructor.
|
|
113
|
+
* @param {import("./declarations.js").InitializeWithDeclaration["fn"]} fn - Constructor body.
|
|
114
|
+
* @returns {void}
|
|
115
|
+
*/
|
|
116
|
+
initializeWith(fn: import("./declarations.js").InitializeWithDeclaration["fn"]): void;
|
|
117
|
+
/**
|
|
118
|
+
* Records a custom persistence hook.
|
|
119
|
+
* @param {import("./declarations.js").ToCreateDeclaration["fn"]} fn - Persistence body.
|
|
120
|
+
* @returns {void}
|
|
121
|
+
*/
|
|
122
|
+
toCreate(fn: import("./declarations.js").ToCreateDeclaration["fn"]): void;
|
|
123
|
+
/**
|
|
124
|
+
* Records that persistence should be skipped for the create strategy.
|
|
125
|
+
* @returns {void}
|
|
126
|
+
*/
|
|
127
|
+
skipCreate(): void;
|
|
128
|
+
}
|
|
129
|
+
import TraitDefinition from "./trait-definition.js";
|
|
130
|
+
import Sequence from "./sequence.js";
|
|
131
|
+
export {};
|
|
132
|
+
//# sourceMappingURL=definition-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition-builder.d.ts","sourceRoot":"","sources":["../../../../src/testing/factory/definition-builder.js"],"names":[],"mappings":"AA0OA;;;;GAIG;AACH;IACE;;;OAGG;IACH,sBAFW,OAAO,uBAAuB,EAAE,OAAO,EAKjD;IAFC,yEAAyE;IACzE,UADW,OAAO,uBAAuB,EAAE,OAAO,CAC1B;IAG1B;;;;OAIG;IACH,cAHW,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GACvB,IAAI,CAQhB;IAED;;;;;;OAMG;IACH,oBAHW,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GACvB,IAAI,CAQhB;IAED;;;OAGG;IACH,kBAFa,MAAM,CAiBlB;IAED;;;;;OAKG;IACH,qBAJW,MAAM,MACN,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GACvB,IAAI,CAwChB;IAED;;;OAGG;IACH,gBAFa,MAAM,CAkBlB;IAED;;;;;;;;OAQG;IACH,qBANW,MAAM,kBACN,OAAC,MACD,OAAC,mBACD,MAAM,GAAG,IAAI,GACX,IAAI,CA+DhB;IAED;;;;;;;OAOG;IACH,2BANW,oBAAoB,mBACpB,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,OAAC,CAAC;QAAC,EAAE,EAAE,OAAC,CAAA;KAAC,CAAC,eAC/C,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,mBAC5B,QAAQ,EAAE,GACR,MAAM,CA8BlB;CACF;AA9WD;;;GAGG;AACH;IAGI,gFAAgF;IAChF,cADW,OAAO,mBAAmB,EAAE,WAAW,EAAE,CAC9B;IAGxB;;;;;OAKG;IACH,gBAJW,MAAM,SACN,OAAC,GACC,IAAI,CAKhB;IAED;;;;;OAKG;IACH,gBAJW,MAAM,SACN,OAAC,GACC,IAAI,CAKhB;IAED;;;;;OAKG;IACH,kBAJW,MAAM,WACN,KAAK,CAAC,OAAC,CAAC,GACN,IAAI,CAKhB;IAED;;;;;OAKG;IACH,cAJW,MAAM,MACN,OAAO,mBAAmB,EAAE,mBAAmB,CAAC,IAAI,CAAC,GACnD,IAAI,CAIhB;IAED;;;;;OAKG;IACH,aAJW,MAAM,MACN,OAAO,mBAAmB,EAAE,mBAAmB,CAAC,IAAI,CAAC,GACnD,IAAI,CAIhB;IAED;;;;OAIG;IACH,mBAHW,OAAO,mBAAmB,EAAE,yBAAyB,CAAC,IAAI,CAAC,GACzD,IAAI,CAIhB;IAED;;;;OAIG;IACH,aAHW,OAAO,mBAAmB,EAAE,mBAAmB,CAAC,IAAI,CAAC,GACnD,IAAI,CAIhB;IAED;;;OAGG;IACH,cAFa,IAAI,CAIhB;CACF;4BAvL2B,uBAAuB;qBAD9B,eAAe"}
|