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,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A single factory run's evaluation state. It resolves attributes/transients/
|
|
3
|
+
* associations lazily and memoizes each name exactly once per run (sharing an
|
|
4
|
+
* in-flight promise between concurrent dependents). Cycle detection uses a
|
|
5
|
+
* per-chain path so genuine recursion is reported while concurrent sibling reads
|
|
6
|
+
* of the same name are allowed.
|
|
7
|
+
*/
|
|
8
|
+
export default class EvaluationContext {
|
|
9
|
+
/**
|
|
10
|
+
* Builds an evaluation context.
|
|
11
|
+
* @param {object} args - Options.
|
|
12
|
+
* @param {import("./factory-registry.js").default} args.registry - Owning registry.
|
|
13
|
+
* @param {import("./factory-runner.js").CompiledPlan} args.plan - Compiled run plan.
|
|
14
|
+
* @param {"attributesFor" | "build" | "create"} args.strategy - Active strategy.
|
|
15
|
+
*/
|
|
16
|
+
constructor({ registry, plan, strategy }: {
|
|
17
|
+
registry: import("./factory-registry.js").default;
|
|
18
|
+
plan: import("./factory-runner.js").CompiledPlan;
|
|
19
|
+
strategy: "attributesFor" | "build" | "create";
|
|
20
|
+
});
|
|
21
|
+
/** @type {import("./factory-registry.js").default} - Owning registry. */
|
|
22
|
+
registry: import("./factory-registry.js").default;
|
|
23
|
+
/** @type {import("./factory-runner.js").CompiledPlan} - Compiled run plan. */
|
|
24
|
+
plan: import("./factory-runner.js").CompiledPlan;
|
|
25
|
+
/** @type {"attributesFor" | "build" | "create"} - Active strategy. */
|
|
26
|
+
strategy: "attributesFor" | "build" | "create";
|
|
27
|
+
/** @type {Map<string, ?>} - Per-run memoized values / in-flight promises. */
|
|
28
|
+
_memo: Map<string, unknown>;
|
|
29
|
+
/**
|
|
30
|
+
* Builds the named evaluator context handed to lazy values and callbacks for a
|
|
31
|
+
* given dependency path.
|
|
32
|
+
* @param {string[]} path - Current resolution path (for cycle detection).
|
|
33
|
+
* @returns {{get: (name: string) => Promise<?>, generate: (name: string) => Promise<?>, association: (factory: string, ...args: Array<?>) => Promise<?>}} - The evaluator context.
|
|
34
|
+
*/
|
|
35
|
+
contextFor(path: string[]): {
|
|
36
|
+
get: (name: string) => Promise<unknown>;
|
|
37
|
+
generate: (name: string) => Promise<unknown>;
|
|
38
|
+
association: (factory: string, ...args: Array<unknown>) => Promise<unknown>;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Resolves an attribute/transient/association by name, memoizing the result.
|
|
42
|
+
* @param {string} name - Name to resolve.
|
|
43
|
+
* @param {string[]} path - Current resolution path.
|
|
44
|
+
* @returns {Promise<?>} - The resolved value.
|
|
45
|
+
*/
|
|
46
|
+
_get(name: string, path: string[]): Promise<unknown>;
|
|
47
|
+
/**
|
|
48
|
+
* Evaluates a resolved slot, honouring lazy functions and overrides.
|
|
49
|
+
* @param {import("./factory-runner.js").Slot} slot - Slot to evaluate.
|
|
50
|
+
* @param {string[]} childPath - Path including this slot's name.
|
|
51
|
+
* @returns {Promise<?>} - The evaluated value.
|
|
52
|
+
*/
|
|
53
|
+
_evaluateSlot(slot: import("./factory-runner.js").Slot, childPath: string[]): Promise<unknown>;
|
|
54
|
+
/**
|
|
55
|
+
* Resolves a declared/overridden association slot. An explicit object/null
|
|
56
|
+
* override suppresses nested factory execution and is returned verbatim.
|
|
57
|
+
* @param {import("./factory-runner.js").Slot} slot - Association slot.
|
|
58
|
+
* @returns {Promise<?>} - The associated record (or override value).
|
|
59
|
+
*/
|
|
60
|
+
_resolveAssociationSlot(slot: import("./factory-runner.js").Slot): Promise<unknown>;
|
|
61
|
+
/**
|
|
62
|
+
* Runs an explicitly-invoked association from a lazy value's `association(...)`.
|
|
63
|
+
* @param {string} factoryName - Factory to run.
|
|
64
|
+
* @param {Array<?>} args - Traits and/or an overrides object.
|
|
65
|
+
* @param {string[]} _path - Current resolution path (unused; associations open a fresh run).
|
|
66
|
+
* @returns {Promise<?>} - The associated record, or null under attributesFor.
|
|
67
|
+
*/
|
|
68
|
+
_explicitAssociation(factoryName: string, args: Array<unknown>, _path: string[]): Promise<unknown>;
|
|
69
|
+
/**
|
|
70
|
+
* Resolves every plain attribute slot (used by attributesFor). Transients and
|
|
71
|
+
* associations are omitted, though transients may still be evaluated on demand
|
|
72
|
+
* as dependencies.
|
|
73
|
+
* @returns {Promise<Record<string, ?>>} - The resolved attributes.
|
|
74
|
+
*/
|
|
75
|
+
resolveAttributes(): Promise<Record<string, unknown>>;
|
|
76
|
+
/**
|
|
77
|
+
* Resolves every transient before callbacks that expose them as plain properties.
|
|
78
|
+
* @returns {Promise<Record<string, ?>>} - Evaluated transient values.
|
|
79
|
+
*/
|
|
80
|
+
resolveTransients(): Promise<Record<string, unknown>>;
|
|
81
|
+
/**
|
|
82
|
+
* Resolves everything needed to construct a record: public attributes,
|
|
83
|
+
* transients, and associated records.
|
|
84
|
+
* @returns {Promise<{publicAttributes: Record<string, ?>, transients: Record<string, ?>, associations: Array<{name: string, record: ?}>}>} - Resolved construction inputs.
|
|
85
|
+
*/
|
|
86
|
+
resolveForConstruction(): Promise<{
|
|
87
|
+
publicAttributes: Record<string, unknown>;
|
|
88
|
+
transients: Record<string, unknown>;
|
|
89
|
+
associations: Array<{
|
|
90
|
+
name: string;
|
|
91
|
+
record: unknown;
|
|
92
|
+
}>;
|
|
93
|
+
}>;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=evaluation-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluation-context.d.ts","sourceRoot":"","sources":["../../../../src/testing/factory/evaluation-context.js"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH;IACE;;;;;;OAMG;IACH,0CAJG;QAAsD,QAAQ,EAAtD,OAAO,uBAAuB,EAAE,OAAO;QACU,IAAI,EAArD,OAAO,qBAAqB,EAAE,YAAY;QACC,QAAQ,EAAnD,eAAe,GAAG,OAAO,GAAG,QAAQ;KAC9C,EAaA;IAXC,yEAAyE;IACzE,UADW,OAAO,uBAAuB,EAAE,OAAO,CAC1B;IAExB,8EAA8E;IAC9E,MADW,OAAO,qBAAqB,EAAE,YAAY,CACrC;IAEhB,sEAAsE;IACtE,UADW,eAAe,GAAG,OAAO,GAAG,QAAQ,CACvB;IAExB,6EAA6E;IAC7E,OADW,GAAG,CAAC,MAAM,EAAE,OAAC,CAAC,CACH;IAGxB;;;;;OAKG;IACH,iBAHW,MAAM,EAAE,GACN;QAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAC,CAAC,CAAC;QAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAC,CAAC,CAAC;QAAC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,OAAC,CAAC,KAAK,OAAO,CAAC,OAAC,CAAC,CAAA;KAAC,CAQxJ;IAED;;;;;OAKG;IACH,WAJW,MAAM,QACN,MAAM,EAAE,GACN,OAAO,CAAC,OAAC,CAAC,CAqBtB;IAED;;;;;OAKG;IACH,oBAJW,OAAO,qBAAqB,EAAE,IAAI,aAClC,MAAM,EAAE,GACN,OAAO,CAAC,OAAC,CAAC,CAYtB;IAED;;;;;OAKG;IACH,8BAHW,OAAO,qBAAqB,EAAE,IAAI,GAChC,OAAO,CAAC,OAAC,CAAC,CAgBtB;IAED;;;;;;OAMG;IACH,kCALW,MAAM,QACN,KAAK,CAAC,OAAC,CAAC,SACR,MAAM,EAAE,GACN,OAAO,CAAC,OAAC,CAAC,CAkBtB;IAED;;;;;OAKG;IACH,qBAFa,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,CAAC,CAatC;IAED;;;OAGG;IACH,qBAFa,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,CAAC,CAWtC;IAED;;;;OAIG;IACH,0BAFa,OAAO,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,CAAC;QAAC,YAAY,EAAE,KAAK,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,OAAC,CAAA;SAAC,CAAC,CAAA;KAAC,CAAC,CAqBzI;CACF"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
import { FactoryCycleError, UndefinedAttributeError } from "./errors.js";
|
|
3
|
+
/**
|
|
4
|
+
* A single factory run's evaluation state. It resolves attributes/transients/
|
|
5
|
+
* associations lazily and memoizes each name exactly once per run (sharing an
|
|
6
|
+
* in-flight promise between concurrent dependents). Cycle detection uses a
|
|
7
|
+
* per-chain path so genuine recursion is reported while concurrent sibling reads
|
|
8
|
+
* of the same name are allowed.
|
|
9
|
+
*/
|
|
10
|
+
export default class EvaluationContext {
|
|
11
|
+
/**
|
|
12
|
+
* Builds an evaluation context.
|
|
13
|
+
* @param {object} args - Options.
|
|
14
|
+
* @param {import("./factory-registry.js").default} args.registry - Owning registry.
|
|
15
|
+
* @param {import("./factory-runner.js").CompiledPlan} args.plan - Compiled run plan.
|
|
16
|
+
* @param {"attributesFor" | "build" | "create"} args.strategy - Active strategy.
|
|
17
|
+
*/
|
|
18
|
+
constructor({ registry, plan, strategy }) {
|
|
19
|
+
/** @type {import("./factory-registry.js").default} - Owning registry. */
|
|
20
|
+
this.registry = registry;
|
|
21
|
+
/** @type {import("./factory-runner.js").CompiledPlan} - Compiled run plan. */
|
|
22
|
+
this.plan = plan;
|
|
23
|
+
/** @type {"attributesFor" | "build" | "create"} - Active strategy. */
|
|
24
|
+
this.strategy = strategy;
|
|
25
|
+
/** @type {Map<string, ?>} - Per-run memoized values / in-flight promises. */
|
|
26
|
+
this._memo = new Map();
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Builds the named evaluator context handed to lazy values and callbacks for a
|
|
30
|
+
* given dependency path.
|
|
31
|
+
* @param {string[]} path - Current resolution path (for cycle detection).
|
|
32
|
+
* @returns {{get: (name: string) => Promise<?>, generate: (name: string) => Promise<?>, association: (factory: string, ...args: Array<?>) => Promise<?>}} - The evaluator context.
|
|
33
|
+
*/
|
|
34
|
+
contextFor(path) {
|
|
35
|
+
return {
|
|
36
|
+
get: (name) => this._get(name, path),
|
|
37
|
+
generate: (name) => this.registry._generateScoped(name, this.plan.chainNames),
|
|
38
|
+
association: (factory, ...args) => this._explicitAssociation(factory, args, path)
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Resolves an attribute/transient/association by name, memoizing the result.
|
|
43
|
+
* @param {string} name - Name to resolve.
|
|
44
|
+
* @param {string[]} path - Current resolution path.
|
|
45
|
+
* @returns {Promise<?>} - The resolved value.
|
|
46
|
+
*/
|
|
47
|
+
_get(name, path) {
|
|
48
|
+
if (path.includes(name)) {
|
|
49
|
+
throw new FactoryCycleError(`Attribute dependency cycle detected: ${[...path, name].join(" -> ")}`);
|
|
50
|
+
}
|
|
51
|
+
if (this._memo.has(name))
|
|
52
|
+
return this._memo.get(name);
|
|
53
|
+
const slot = this.plan.resolved.get(name);
|
|
54
|
+
if (!slot) {
|
|
55
|
+
throw new UndefinedAttributeError(`Unknown attribute "${name}" referenced while evaluating factory "${this.plan.factoryName}"`);
|
|
56
|
+
}
|
|
57
|
+
const promise = this._evaluateSlot(slot, [...path, name]);
|
|
58
|
+
this._memo.set(name, promise);
|
|
59
|
+
promise.then((value) => this._memo.set(name, value), () => { });
|
|
60
|
+
return promise;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Evaluates a resolved slot, honouring lazy functions and overrides.
|
|
64
|
+
* @param {import("./factory-runner.js").Slot} slot - Slot to evaluate.
|
|
65
|
+
* @param {string[]} childPath - Path including this slot's name.
|
|
66
|
+
* @returns {Promise<?>} - The evaluated value.
|
|
67
|
+
*/
|
|
68
|
+
async _evaluateSlot(slot, childPath) {
|
|
69
|
+
if (slot.slotKind === "association") {
|
|
70
|
+
return await this._resolveAssociationSlot(slot);
|
|
71
|
+
}
|
|
72
|
+
if (typeof slot.value === "function" && !slot.isOverride) {
|
|
73
|
+
return await slot.value(this.contextFor(childPath));
|
|
74
|
+
}
|
|
75
|
+
return slot.value;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Resolves a declared/overridden association slot. An explicit object/null
|
|
79
|
+
* override suppresses nested factory execution and is returned verbatim.
|
|
80
|
+
* @param {import("./factory-runner.js").Slot} slot - Association slot.
|
|
81
|
+
* @returns {Promise<?>} - The associated record (or override value).
|
|
82
|
+
*/
|
|
83
|
+
async _resolveAssociationSlot(slot) {
|
|
84
|
+
if (slot.isOverride)
|
|
85
|
+
return slot.value;
|
|
86
|
+
if (this.strategy === "attributesFor")
|
|
87
|
+
return null;
|
|
88
|
+
const declaration = /** @type {import("./association-declaration.js").default} */ (slot.value);
|
|
89
|
+
const associationStrategy = declaration.strategy || (this.strategy === "create" ? "build" : this.strategy);
|
|
90
|
+
return await this.registry._runFactory({
|
|
91
|
+
factoryName: declaration.factory,
|
|
92
|
+
traits: declaration.traits,
|
|
93
|
+
overrides: declaration.overrides,
|
|
94
|
+
strategy: /** @type {"build" | "create"} */ (associationStrategy)
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Runs an explicitly-invoked association from a lazy value's `association(...)`.
|
|
99
|
+
* @param {string} factoryName - Factory to run.
|
|
100
|
+
* @param {Array<?>} args - Traits and/or an overrides object.
|
|
101
|
+
* @param {string[]} _path - Current resolution path (unused; associations open a fresh run).
|
|
102
|
+
* @returns {Promise<?>} - The associated record, or null under attributesFor.
|
|
103
|
+
*/
|
|
104
|
+
_explicitAssociation(factoryName, args, _path) {
|
|
105
|
+
if (this.strategy === "attributesFor")
|
|
106
|
+
return Promise.resolve(null);
|
|
107
|
+
/** @type {string[]} */
|
|
108
|
+
const traits = [];
|
|
109
|
+
/** @type {Record<string, ?>} */
|
|
110
|
+
let overrides = {};
|
|
111
|
+
for (const arg of args) {
|
|
112
|
+
if (typeof arg === "string")
|
|
113
|
+
traits.push(arg);
|
|
114
|
+
else if (arg && typeof arg === "object")
|
|
115
|
+
overrides = arg;
|
|
116
|
+
}
|
|
117
|
+
const associationStrategy = this.strategy === "create" ? "build" : this.strategy;
|
|
118
|
+
return this.registry._runFactory({ factoryName, traits, overrides, strategy: associationStrategy });
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Resolves every plain attribute slot (used by attributesFor). Transients and
|
|
122
|
+
* associations are omitted, though transients may still be evaluated on demand
|
|
123
|
+
* as dependencies.
|
|
124
|
+
* @returns {Promise<Record<string, ?>>} - The resolved attributes.
|
|
125
|
+
*/
|
|
126
|
+
async resolveAttributes() {
|
|
127
|
+
/** @type {Record<string, ?>} */
|
|
128
|
+
const attributes = {};
|
|
129
|
+
for (const [name, slot] of this.plan.resolved) {
|
|
130
|
+
if (slot.slotKind === "attribute") {
|
|
131
|
+
attributes[name] = await this._get(name, []);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return attributes;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Resolves every transient before callbacks that expose them as plain properties.
|
|
138
|
+
* @returns {Promise<Record<string, ?>>} - Evaluated transient values.
|
|
139
|
+
*/
|
|
140
|
+
async resolveTransients() {
|
|
141
|
+
/** @type {Record<string, ?>} */
|
|
142
|
+
const transients = {};
|
|
143
|
+
for (const [name, slot] of this.plan.resolved) {
|
|
144
|
+
if (slot.slotKind === "transient")
|
|
145
|
+
transients[name] = await this._get(name, []);
|
|
146
|
+
}
|
|
147
|
+
return transients;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Resolves everything needed to construct a record: public attributes,
|
|
151
|
+
* transients, and associated records.
|
|
152
|
+
* @returns {Promise<{publicAttributes: Record<string, ?>, transients: Record<string, ?>, associations: Array<{name: string, record: ?}>}>} - Resolved construction inputs.
|
|
153
|
+
*/
|
|
154
|
+
async resolveForConstruction() {
|
|
155
|
+
/** @type {Record<string, ?>} */
|
|
156
|
+
const publicAttributes = {};
|
|
157
|
+
/** @type {Record<string, ?>} */
|
|
158
|
+
const transients = {};
|
|
159
|
+
/** @type {Array<{name: string, record: ?}>} */
|
|
160
|
+
const associations = [];
|
|
161
|
+
for (const [name, slot] of this.plan.resolved) {
|
|
162
|
+
if (slot.slotKind === "attribute") {
|
|
163
|
+
publicAttributes[name] = await this._get(name, []);
|
|
164
|
+
}
|
|
165
|
+
else if (slot.slotKind === "transient") {
|
|
166
|
+
transients[name] = await this._get(name, []);
|
|
167
|
+
}
|
|
168
|
+
else if (slot.slotKind === "association") {
|
|
169
|
+
associations.push({ name, record: await this._get(name, []) });
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return { publicAttributes, transients, associations };
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGlvbi1jb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rlc3RpbmcvZmFjdG9yeS9ldmFsdWF0aW9uLWNvbnRleHQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUV0RTs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLGlCQUFpQjtJQUNwQzs7Ozs7O09BTUc7SUFDSCxZQUFZLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUM7UUFDcEMseUVBQXlFO1FBQ3pFLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO1FBRXhCLDhFQUE4RTtRQUM5RSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtRQUVoQixzRUFBc0U7UUFDdEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7UUFFeEIsNkVBQTZFO1FBQzdFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUN4QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxVQUFVLENBQUMsSUFBSTtRQUNiLE9BQU87WUFDTCxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztZQUNwQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUM3RSxXQUFXLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztTQUNsRixDQUFBO0lBQ0gs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QztpQkFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssYUFBYSxFQUFFLENBQUM7Z0JBQzNDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFBO1lBQzlELENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxFQUFDLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUMsQ0FBQTtJQUNyRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtGYWN0b3J5Q3ljbGVFcnJvciwgVW5kZWZpbmVkQXR0cmlidXRlRXJyb3J9IGZyb20gXCIuL2Vycm9ycy5qc1wiXG5cbi8qKlxuICogQSBzaW5nbGUgZmFjdG9yeSBydW4ncyBldmFsdWF0aW9uIHN0YXRlLiBJdCByZXNvbHZlcyBhdHRyaWJ1dGVzL3RyYW5zaWVudHMvXG4gKiBhc3NvY2lhdGlvbnMgbGF6aWx5IGFuZCBtZW1vaXplcyBlYWNoIG5hbWUgZXhhY3RseSBvbmNlIHBlciBydW4gKHNoYXJpbmcgYW5cbiAqIGluLWZsaWdodCBwcm9taXNlIGJldHdlZW4gY29uY3VycmVudCBkZXBlbmRlbnRzKS4gQ3ljbGUgZGV0ZWN0aW9uIHVzZXMgYVxuICogcGVyLWNoYWluIHBhdGggc28gZ2VudWluZSByZWN1cnNpb24gaXMgcmVwb3J0ZWQgd2hpbGUgY29uY3VycmVudCBzaWJsaW5nIHJlYWRzXG4gKiBvZiB0aGUgc2FtZSBuYW1lIGFyZSBhbGxvd2VkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFdmFsdWF0aW9uQ29udGV4dCB7XG4gIC8qKlxuICAgKiBCdWlsZHMgYW4gZXZhbHVhdGlvbiBjb250ZXh0LlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9mYWN0b3J5LXJlZ2lzdHJ5LmpzXCIpLmRlZmF1bHR9IGFyZ3MucmVnaXN0cnkgLSBPd25pbmcgcmVnaXN0cnkuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9mYWN0b3J5LXJ1bm5lci5qc1wiKS5Db21waWxlZFBsYW59IGFyZ3MucGxhbiAtIENvbXBpbGVkIHJ1biBwbGFuLlxuICAgKiBAcGFyYW0ge1wiYXR0cmlidXRlc0ZvclwiIHwgXCJidWlsZFwiIHwgXCJjcmVhdGVcIn0gYXJncy5zdHJhdGVneSAtIEFjdGl2ZSBzdHJhdGVneS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtyZWdpc3RyeSwgcGxhbiwgc3RyYXRlZ3l9KSB7XG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL2ZhY3RvcnktcmVnaXN0cnkuanNcIikuZGVmYXVsdH0gLSBPd25pbmcgcmVnaXN0cnkuICovXG4gICAgdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5XG5cbiAgICAvKiogQHR5cGUge2ltcG9ydChcIi4vZmFjdG9yeS1ydW5uZXIuanNcIikuQ29tcGlsZWRQbGFufSAtIENvbXBpbGVkIHJ1biBwbGFuLiAqL1xuICAgIHRoaXMucGxhbiA9IHBsYW5cblxuICAgIC8qKiBAdHlwZSB7XCJhdHRyaWJ1dGVzRm9yXCIgfCBcImJ1aWxkXCIgfCBcImNyZWF0ZVwifSAtIEFjdGl2ZSBzdHJhdGVneS4gKi9cbiAgICB0aGlzLnN0cmF0ZWd5ID0gc3RyYXRlZ3lcblxuICAgIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgPz59IC0gUGVyLXJ1biBtZW1vaXplZCB2YWx1ZXMgLyBpbi1mbGlnaHQgcHJvbWlzZXMuICovXG4gICAgdGhpcy5fbWVtbyA9IG5ldyBNYXAoKVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgbmFtZWQgZXZhbHVhdG9yIGNvbnRleHQgaGFuZGVkIHRvIGxhenkgdmFsdWVzIGFuZCBjYWxsYmFja3MgZm9yIGFcbiAgICogZ2l2ZW4gZGVwZW5kZW5jeSBwYXRoLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRoIC0gQ3VycmVudCByZXNvbHV0aW9uIHBhdGggKGZvciBjeWNsZSBkZXRlY3Rpb24pLlxuICAgKiBAcmV0dXJucyB7e2dldDogKG5hbWU6IHN0cmluZykgPT4gUHJvbWlzZTw/PiwgZ2VuZXJhdGU6IChuYW1lOiBzdHJpbmcpID0+IFByb21pc2U8Pz4sIGFzc29jaWF0aW9uOiAoZmFjdG9yeTogc3RyaW5nLCAuLi5hcmdzOiBBcnJheTw/PikgPT4gUHJvbWlzZTw/Pn19IC0gVGhlIGV2YWx1YXRvciBjb250ZXh0LlxuICAgKi9cbiAgY29udGV4dEZvcihwYXRoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdldDogKG5hbWUpID0+IHRoaXMuX2dldChuYW1lLCBwYXRoKSxcbiAgICAgIGdlbmVyYXRlOiAobmFtZSkgPT4gdGhpcy5yZWdpc3RyeS5fZ2VuZXJhdGVTY29wZWQobmFtZSwgdGhpcy5wbGFuLmNoYWluTmFtZXMpLFxuICAgICAgYXNzb2NpYXRpb246IChmYWN0b3J5LCAuLi5hcmdzKSA9PiB0aGlzLl9leHBsaWNpdEFzc29jaWF0aW9uKGZhY3RvcnksIGFyZ3MsIHBhdGgpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGFuIGF0dHJpYnV0ZS90cmFuc2llbnQvYXNzb2NpYXRpb24gYnkgbmFtZSwgbWVtb2l6aW5nIHRoZSByZXN1bHQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSB0byByZXNvbHZlLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRoIC0gQ3VycmVudCByZXNvbHV0aW9uIHBhdGguXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPD8+fSAtIFRoZSByZXNvbHZlZCB2YWx1ZS5cbiAgICovXG4gIF9nZXQobmFtZSwgcGF0aCkge1xuICAgIGlmIChwYXRoLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRmFjdG9yeUN5Y2xlRXJyb3IoYEF0dHJpYnV0ZSBkZXBlbmRlbmN5IGN5Y2xlIGRldGVjdGVkOiAke1suLi5wYXRoLCBuYW1lXS5qb2luKFwiIC0+IFwiKX1gKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9tZW1vLmhhcyhuYW1lKSkgcmV0dXJuIHRoaXMuX21lbW8uZ2V0KG5hbWUpXG5cbiAgICBjb25zdCBzbG90ID0gdGhpcy5wbGFuLnJlc29sdmVkLmdldChuYW1lKVxuXG4gICAgaWYgKCFzbG90KSB7XG4gICAgICB0aHJvdyBuZXcgVW5kZWZpbmVkQXR0cmlidXRlRXJyb3IoYFVua25vd24gYXR0cmlidXRlIFwiJHtuYW1lfVwiIHJlZmVyZW5jZWQgd2hpbGUgZXZhbHVhdGluZyBmYWN0b3J5IFwiJHt0aGlzLnBsYW4uZmFjdG9yeU5hbWV9XCJgKVxuICAgIH1cblxuICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLl9ldmFsdWF0ZVNsb3Qoc2xvdCwgWy4uLnBhdGgsIG5hbWVdKVxuXG4gICAgdGhpcy5fbWVtby5zZXQobmFtZSwgcHJvbWlzZSlcbiAgICBwcm9taXNlLnRoZW4oKHZhbHVlKSA9PiB0aGlzLl9tZW1vLnNldChuYW1lLCB2YWx1ZSksICgpID0+IHt9KVxuXG4gICAgcmV0dXJuIHByb21pc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgYSByZXNvbHZlZCBzbG90LCBob25vdXJpbmcgbGF6eSBmdW5jdGlvbnMgYW5kIG92ZXJyaWRlcy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2ZhY3RvcnktcnVubmVyLmpzXCIpLlNsb3R9IHNsb3QgLSBTbG90IHRvIGV2YWx1YXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZFBhdGggLSBQYXRoIGluY2x1ZGluZyB0aGlzIHNsb3QncyBuYW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTw/Pn0gLSBUaGUgZXZhbHVhdGVkIHZhbHVlLlxuICAgKi9cbiAgYXN5bmMgX2V2YWx1YXRlU2xvdChzbG90LCBjaGlsZFBhdGgpIHtcbiAgICBpZiAoc2xvdC5zbG90S2luZCA9PT0gXCJhc3NvY2lhdGlvblwiKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcmVzb2x2ZUFzc29jaWF0aW9uU2xvdChzbG90KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygc2xvdC52YWx1ZSA9PT0gXCJmdW5jdGlvblwiICYmICFzbG90LmlzT3ZlcnJpZGUpIHtcbiAgICAgIHJldHVybiBhd2FpdCBzbG90LnZhbHVlKHRoaXMuY29udGV4dEZvcihjaGlsZFBhdGgpKVxuICAgIH1cblxuICAgIHJldHVybiBzbG90LnZhbHVlXG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgYSBkZWNsYXJlZC9vdmVycmlkZGVuIGFzc29jaWF0aW9uIHNsb3QuIEFuIGV4cGxpY2l0IG9iamVjdC9udWxsXG4gICAqIG92ZXJyaWRlIHN1cHByZXNzZXMgbmVzdGVkIGZhY3RvcnkgZXhlY3V0aW9uIGFuZCBpcyByZXR1cm5lZCB2ZXJiYXRpbS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2ZhY3RvcnktcnVubmVyLmpzXCIpLlNsb3R9IHNsb3QgLSBBc3NvY2lhdGlvbiBzbG90LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTw/Pn0gLSBUaGUgYXNzb2NpYXRlZCByZWNvcmQgKG9yIG92ZXJyaWRlIHZhbHVlKS5cbiAgICovXG4gIGFzeW5jIF9yZXNvbHZlQXNzb2NpYXRpb25TbG90KHNsb3QpIHtcbiAgICBpZiAoc2xvdC5pc092ZXJyaWRlKSByZXR1cm4gc2xvdC52YWx1ZVxuXG4gICAgaWYgKHRoaXMuc3RyYXRlZ3kgPT09IFwiYXR0cmlidXRlc0ZvclwiKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4vYXNzb2NpYXRpb24tZGVjbGFyYXRpb24uanNcIikuZGVmYXVsdH0gKi8gKHNsb3QudmFsdWUpXG4gICAgY29uc3QgYXNzb2NpYXRpb25TdHJhdGVneSA9IGRlY2xhcmF0aW9uLnN0cmF0ZWd5IHx8ICh0aGlzLnN0cmF0ZWd5ID09PSBcImNyZWF0ZVwiID8gXCJidWlsZFwiIDogdGhpcy5zdHJhdGVneSlcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLnJlZ2lzdHJ5Ll9ydW5GYWN0b3J5KHtcbiAgICAgIGZhY3RvcnlOYW1lOiBkZWNsYXJhdGlvbi5mYWN0b3J5LFxuICAgICAgdHJhaXRzOiBkZWNsYXJhdGlvbi50cmFpdHMsXG4gICAgICBvdmVycmlkZXM6IGRlY2xhcmF0aW9uLm92ZXJyaWRlcyxcbiAgICAgIHN0cmF0ZWd5OiAvKiogQHR5cGUge1wiYnVpbGRcIiB8IFwiY3JlYXRlXCJ9ICovIChhc3NvY2lhdGlvblN0cmF0ZWd5KVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUnVucyBhbiBleHBsaWNpdGx5LWludm9rZWQgYXNzb2NpYXRpb24gZnJvbSBhIGxhenkgdmFsdWUncyBgYXNzb2NpYXRpb24oLi4uKWAuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWN0b3J5TmFtZSAtIEZhY3RvcnkgdG8gcnVuLlxuICAgKiBAcGFyYW0ge0FycmF5PD8+fSBhcmdzIC0gVHJhaXRzIGFuZC9vciBhbiBvdmVycmlkZXMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBfcGF0aCAtIEN1cnJlbnQgcmVzb2x1dGlvbiBwYXRoICh1bnVzZWQ7IGFzc29jaWF0aW9ucyBvcGVuIGEgZnJlc2ggcnVuKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Pz59IC0gVGhlIGFzc29jaWF0ZWQgcmVjb3JkLCBvciBudWxsIHVuZGVyIGF0dHJpYnV0ZXNGb3IuXG4gICAqL1xuICBfZXhwbGljaXRBc3NvY2lhdGlvbihmYWN0b3J5TmFtZSwgYXJncywgX3BhdGgpIHtcbiAgICBpZiAodGhpcy5zdHJhdGVneSA9PT0gXCJhdHRyaWJ1dGVzRm9yXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbClcblxuICAgIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gICAgY29uc3QgdHJhaXRzID0gW11cbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsID8+fSAqL1xuICAgIGxldCBvdmVycmlkZXMgPSB7fVxuXG4gICAgZm9yIChjb25zdCBhcmcgb2YgYXJncykge1xuICAgICAgaWYgKHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCIpIHRyYWl0cy5wdXNoKGFyZylcbiAgICAgIGVsc2UgaWYgKGFyZyAmJiB0eXBlb2YgYXJnID09PSBcIm9iamVjdFwiKSBvdmVycmlkZXMgPSBhcmdcbiAgICB9XG5cbiAgICBjb25zdCBhc3NvY2lhdGlvblN0cmF0ZWd5ID0gdGhpcy5zdHJhdGVneSA9PT0gXCJjcmVhdGVcIiA/IFwiYnVpbGRcIiA6IHRoaXMuc3RyYXRlZ3lcblxuICAgIHJldHVybiB0aGlzLnJlZ2lzdHJ5Ll9ydW5GYWN0b3J5KHtmYWN0b3J5TmFtZSwgdHJhaXRzLCBvdmVycmlkZXMsIHN0cmF0ZWd5OiBhc3NvY2lhdGlvblN0cmF0ZWd5fSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBldmVyeSBwbGFpbiBhdHRyaWJ1dGUgc2xvdCAodXNlZCBieSBhdHRyaWJ1dGVzRm9yKS4gVHJhbnNpZW50cyBhbmRcbiAgICogYXNzb2NpYXRpb25zIGFyZSBvbWl0dGVkLCB0aG91Z2ggdHJhbnNpZW50cyBtYXkgc3RpbGwgYmUgZXZhbHVhdGVkIG9uIGRlbWFuZFxuICAgKiBhcyBkZXBlbmRlbmNpZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsID8+Pn0gLSBUaGUgcmVzb2x2ZWQgYXR0cmlidXRlcy5cbiAgICovXG4gIGFzeW5jIHJlc29sdmVBdHRyaWJ1dGVzKCkge1xuICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgPz59ICovXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBzbG90XSBvZiB0aGlzLnBsYW4ucmVzb2x2ZWQpIHtcbiAgICAgIGlmIChzbG90LnNsb3RLaW5kID09PSBcImF0dHJpYnV0ZVwiKSB7XG4gICAgICAgIGF0dHJpYnV0ZXNbbmFtZV0gPSBhd2FpdCB0aGlzLl9nZXQobmFtZSwgW10pXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZXNcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBldmVyeSB0cmFuc2llbnQgYmVmb3JlIGNhbGxiYWNrcyB0aGF0IGV4cG9zZSB0aGVtIGFzIHBsYWluIHByb3BlcnRpZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsID8+Pn0gLSBFdmFsdWF0ZWQgdHJhbnNpZW50IHZhbHVlcy5cbiAgICovXG4gIGFzeW5jIHJlc29sdmVUcmFuc2llbnRzKCkge1xuICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgPz59ICovXG4gICAgY29uc3QgdHJhbnNpZW50cyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBzbG90XSBvZiB0aGlzLnBsYW4ucmVzb2x2ZWQpIHtcbiAgICAgIGlmIChzbG90LnNsb3RLaW5kID09PSBcInRyYW5zaWVudFwiKSB0cmFuc2llbnRzW25hbWVdID0gYXdhaXQgdGhpcy5fZ2V0KG5hbWUsIFtdKVxuICAgIH1cblxuICAgIHJldHVybiB0cmFuc2llbnRzXG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgZXZlcnl0aGluZyBuZWVkZWQgdG8gY29uc3RydWN0IGEgcmVjb3JkOiBwdWJsaWMgYXR0cmlidXRlcyxcbiAgICogdHJhbnNpZW50cywgYW5kIGFzc29jaWF0ZWQgcmVjb3Jkcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8e3B1YmxpY0F0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsID8+LCB0cmFuc2llbnRzOiBSZWNvcmQ8c3RyaW5nLCA/PiwgYXNzb2NpYXRpb25zOiBBcnJheTx7bmFtZTogc3RyaW5nLCByZWNvcmQ6ID99Pn0+fSAtIFJlc29sdmVkIGNvbnN0cnVjdGlvbiBpbnB1dHMuXG4gICAqL1xuICBhc3luYyByZXNvbHZlRm9yQ29uc3RydWN0aW9uKCkge1xuICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgPz59ICovXG4gICAgY29uc3QgcHVibGljQXR0cmlidXRlcyA9IHt9XG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gKi9cbiAgICBjb25zdCB0cmFuc2llbnRzID0ge31cbiAgICAvKiogQHR5cGUge0FycmF5PHtuYW1lOiBzdHJpbmcsIHJlY29yZDogP30+fSAqL1xuICAgIGNvbnN0IGFzc29jaWF0aW9ucyA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBzbG90XSBvZiB0aGlzLnBsYW4ucmVzb2x2ZWQpIHtcbiAgICAgIGlmIChzbG90LnNsb3RLaW5kID09PSBcImF0dHJpYnV0ZVwiKSB7XG4gICAgICAgIHB1YmxpY0F0dHJpYnV0ZXNbbmFtZV0gPSBhd2FpdCB0aGlzLl9nZXQobmFtZSwgW10pXG4gICAgICB9IGVsc2UgaWYgKHNsb3Quc2xvdEtpbmQgPT09IFwidHJhbnNpZW50XCIpIHtcbiAgICAgICAgdHJhbnNpZW50c1tuYW1lXSA9IGF3YWl0IHRoaXMuX2dldChuYW1lLCBbXSlcbiAgICAgIH0gZWxzZSBpZiAoc2xvdC5zbG90S2luZCA9PT0gXCJhc3NvY2lhdGlvblwiKSB7XG4gICAgICAgIGFzc29jaWF0aW9ucy5wdXNoKHtuYW1lLCByZWNvcmQ6IGF3YWl0IHRoaXMuX2dldChuYW1lLCBbXSl9KVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7cHVibGljQXR0cmlidXRlcywgdHJhbnNpZW50cywgYXNzb2NpYXRpb25zfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
declare const FactoryEventEmitter_base: typeof import("eventemitter3").EventEmitter;
|
|
2
|
+
/**
|
|
3
|
+
* A small factory event emitter used for debug/performance hooks. It emits
|
|
4
|
+
* `start`, `success` and `failure` events carrying the factory name, strategy,
|
|
5
|
+
* requested traits, a per-invocation correlation id and (on completion) a
|
|
6
|
+
* duration. It deliberately never emits resolved attribute values, which may
|
|
7
|
+
* contain secrets.
|
|
8
|
+
*/
|
|
9
|
+
export default class FactoryEventEmitter extends FactoryEventEmitter_base {
|
|
10
|
+
/** Builds the emitter. */
|
|
11
|
+
constructor();
|
|
12
|
+
/** @type {number} - Monotonic invocation counter for correlation ids. */
|
|
13
|
+
_invocationCounter: number;
|
|
14
|
+
/**
|
|
15
|
+
* Allocates the next per-invocation correlation id.
|
|
16
|
+
* @returns {string} - A unique-per-registry correlation id.
|
|
17
|
+
*/
|
|
18
|
+
nextInvocationId(): string;
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../../src/testing/factory/events.js"],"names":[],"mappings":";AAIA;;;;;;GAMG;AACH;IACE,0BAA0B;IAC1B,cAKC;IAFC,yEAAyE;IACzE,oBADW,MAAM,CACU;IAG7B;;;OAGG;IACH,oBAFa,MAAM,CAMlB;CACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
import EventEmitter from "../../utils/event-emitter.js";
|
|
3
|
+
/**
|
|
4
|
+
* A small factory event emitter used for debug/performance hooks. It emits
|
|
5
|
+
* `start`, `success` and `failure` events carrying the factory name, strategy,
|
|
6
|
+
* requested traits, a per-invocation correlation id and (on completion) a
|
|
7
|
+
* duration. It deliberately never emits resolved attribute values, which may
|
|
8
|
+
* contain secrets.
|
|
9
|
+
*/
|
|
10
|
+
export default class FactoryEventEmitter extends EventEmitter {
|
|
11
|
+
/** Builds the emitter. */
|
|
12
|
+
constructor() {
|
|
13
|
+
super();
|
|
14
|
+
/** @type {number} - Monotonic invocation counter for correlation ids. */
|
|
15
|
+
this._invocationCounter = 0;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Allocates the next per-invocation correlation id.
|
|
19
|
+
* @returns {string} - A unique-per-registry correlation id.
|
|
20
|
+
*/
|
|
21
|
+
nextInvocationId() {
|
|
22
|
+
this._invocationCounter += 1;
|
|
23
|
+
return `factory-invocation-${this._invocationCounter}`;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rlc3RpbmcvZmFjdG9yeS9ldmVudHMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sWUFBWSxNQUFNLDhCQUE4QixDQUFBO0FBRXZEOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sbUJBQW9CLFNBQVEsWUFBWTtJQUMzRCwwQkFBMEI7SUFDMUI7UUFDRSxLQUFLLEVBQUUsQ0FBQTtRQUVQLHlFQUF5RTtRQUN6RSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFBO0lBQzdCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxDQUFBO1FBRTVCLE9BQU8sc0JBQXNCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFBO0lBQ3hELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCIuLi8uLi91dGlscy9ldmVudC1lbWl0dGVyLmpzXCJcblxuLyoqXG4gKiBBIHNtYWxsIGZhY3RvcnkgZXZlbnQgZW1pdHRlciB1c2VkIGZvciBkZWJ1Zy9wZXJmb3JtYW5jZSBob29rcy4gSXQgZW1pdHNcbiAqIGBzdGFydGAsIGBzdWNjZXNzYCBhbmQgYGZhaWx1cmVgIGV2ZW50cyBjYXJyeWluZyB0aGUgZmFjdG9yeSBuYW1lLCBzdHJhdGVneSxcbiAqIHJlcXVlc3RlZCB0cmFpdHMsIGEgcGVyLWludm9jYXRpb24gY29ycmVsYXRpb24gaWQgYW5kIChvbiBjb21wbGV0aW9uKSBhXG4gKiBkdXJhdGlvbi4gSXQgZGVsaWJlcmF0ZWx5IG5ldmVyIGVtaXRzIHJlc29sdmVkIGF0dHJpYnV0ZSB2YWx1ZXMsIHdoaWNoIG1heVxuICogY29udGFpbiBzZWNyZXRzLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGYWN0b3J5RXZlbnRFbWl0dGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgLyoqIEJ1aWxkcyB0aGUgZW1pdHRlci4gKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgLyoqIEB0eXBlIHtudW1iZXJ9IC0gTW9ub3RvbmljIGludm9jYXRpb24gY291bnRlciBmb3IgY29ycmVsYXRpb24gaWRzLiAqL1xuICAgIHRoaXMuX2ludm9jYXRpb25Db3VudGVyID0gMFxuICB9XG5cbiAgLyoqXG4gICAqIEFsbG9jYXRlcyB0aGUgbmV4dCBwZXItaW52b2NhdGlvbiBjb3JyZWxhdGlvbiBpZC5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBBIHVuaXF1ZS1wZXItcmVnaXN0cnkgY29ycmVsYXRpb24gaWQuXG4gICAqL1xuICBuZXh0SW52b2NhdGlvbklkKCkge1xuICAgIHRoaXMuX2ludm9jYXRpb25Db3VudGVyICs9IDFcblxuICAgIHJldHVybiBgZmFjdG9yeS1pbnZvY2F0aW9uLSR7dGhpcy5faW52b2NhdGlvbkNvdW50ZXJ9YFxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An immutable compiled factory. Definitions never mutate after compilation;
|
|
3
|
+
* `modify` produces a replacement rather than editing an existing one. Parent and
|
|
4
|
+
* trait references are resolved lazily at evaluation time, so a child may be
|
|
5
|
+
* declared before its parent.
|
|
6
|
+
*/
|
|
7
|
+
export default class FactoryDefinition {
|
|
8
|
+
/**
|
|
9
|
+
* Builds a factory definition.
|
|
10
|
+
* @param {object} args - Options.
|
|
11
|
+
* @param {string} args.name - Factory name.
|
|
12
|
+
* @param {(new (attributes?: Record<string, ?>) => ?) | null} args.modelClass - Model class, or null to inherit from a parent.
|
|
13
|
+
* @param {string | null} args.parentName - Parent factory name, or null.
|
|
14
|
+
* @param {string[]} args.aliases - Alias names that reference this same definition.
|
|
15
|
+
* @param {import("./declarations.js").Declaration[]} args.declarations - Ordered own declarations.
|
|
16
|
+
* @param {Map<string, import("./trait-definition.js").default>} args.localTraits - Factory-local traits keyed by name.
|
|
17
|
+
*/
|
|
18
|
+
constructor({ name, modelClass, parentName, aliases, declarations, localTraits }: {
|
|
19
|
+
name: string;
|
|
20
|
+
modelClass: (new (attributes?: Record<string, unknown>) => unknown) | null;
|
|
21
|
+
parentName: string | null;
|
|
22
|
+
aliases: string[];
|
|
23
|
+
declarations: import("./declarations.js").Declaration[];
|
|
24
|
+
localTraits: Map<string, import("./trait-definition.js").default>;
|
|
25
|
+
});
|
|
26
|
+
/** @type {string} - Factory name. */
|
|
27
|
+
name: string;
|
|
28
|
+
/** @type {(new (attributes?: Record<string, ?>) => ?) | null} - Model class or null. */
|
|
29
|
+
modelClass: (new (attributes?: Record<string, unknown>) => unknown) | null;
|
|
30
|
+
/** @type {string | null} - Parent factory name or null. */
|
|
31
|
+
parentName: string | null;
|
|
32
|
+
/** @type {Array<string>} - Alias names. */
|
|
33
|
+
aliases: Array<string>;
|
|
34
|
+
/** @type {Array<import("./declarations.js").Declaration>} - Ordered own declarations. */
|
|
35
|
+
declarations: Array<import("./declarations.js").Declaration>;
|
|
36
|
+
/** @type {Map<string, import("./trait-definition.js").default>} - Factory-local traits. */
|
|
37
|
+
localTraits: Map<string, import("./trait-definition.js").default>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=factory-definition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory-definition.d.ts","sourceRoot":"","sources":["../../../../src/testing/factory/factory-definition.js"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH;IACE;;;;;;;;;OASG;IACH,kFAPG;QAAqB,IAAI,EAAjB,MAAM;QACmD,UAAU,EAAnE,CAAC,KAAK,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,KAAK,OAAC,CAAC,GAAG,IAAI;QAC9B,UAAU,EAA9B,MAAM,GAAG,IAAI;QACE,OAAO,EAAtB,MAAM,EAAE;QACwC,YAAY,EAA5D,OAAO,mBAAmB,EAAE,WAAW,EAAE;QACkB,WAAW,EAAtE,GAAG,CAAC,MAAM,EAAE,OAAO,uBAAuB,EAAE,OAAO,CAAC;KAC9D,EAqBA;IAnBC,qCAAqC;IACrC,MADW,MAAM,CACD;IAEhB,wFAAwF;IACxF,YADW,CAAC,KAAK,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,KAAK,OAAC,CAAC,GAAG,IAAI,CACjC;IAE5B,2DAA2D;IAC3D,YADW,MAAM,GAAG,IAAI,CACI;IAE5B,2CAA2C;IAC3C,SADW,KAAK,CAAC,MAAM,CAAC,CACiD;IAEzE,yFAAyF;IACzF,cADW,KAAK,CAAC,OAAO,mBAAmB,EAAE,WAAW,CAAC,CAC2D;IAEpH,2FAA2F;IAC3F,aADW,GAAG,CAAC,MAAM,EAAE,OAAO,uBAAuB,EAAE,OAAO,CAAC,CACjC;CAIjC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
/**
|
|
3
|
+
* An immutable compiled factory. Definitions never mutate after compilation;
|
|
4
|
+
* `modify` produces a replacement rather than editing an existing one. Parent and
|
|
5
|
+
* trait references are resolved lazily at evaluation time, so a child may be
|
|
6
|
+
* declared before its parent.
|
|
7
|
+
*/
|
|
8
|
+
export default class FactoryDefinition {
|
|
9
|
+
/**
|
|
10
|
+
* Builds a factory definition.
|
|
11
|
+
* @param {object} args - Options.
|
|
12
|
+
* @param {string} args.name - Factory name.
|
|
13
|
+
* @param {(new (attributes?: Record<string, ?>) => ?) | null} args.modelClass - Model class, or null to inherit from a parent.
|
|
14
|
+
* @param {string | null} args.parentName - Parent factory name, or null.
|
|
15
|
+
* @param {string[]} args.aliases - Alias names that reference this same definition.
|
|
16
|
+
* @param {import("./declarations.js").Declaration[]} args.declarations - Ordered own declarations.
|
|
17
|
+
* @param {Map<string, import("./trait-definition.js").default>} args.localTraits - Factory-local traits keyed by name.
|
|
18
|
+
*/
|
|
19
|
+
constructor({ name, modelClass, parentName, aliases, declarations, localTraits }) {
|
|
20
|
+
/** @type {string} - Factory name. */
|
|
21
|
+
this.name = name;
|
|
22
|
+
/** @type {(new (attributes?: Record<string, ?>) => ?) | null} - Model class or null. */
|
|
23
|
+
this.modelClass = modelClass;
|
|
24
|
+
/** @type {string | null} - Parent factory name or null. */
|
|
25
|
+
this.parentName = parentName;
|
|
26
|
+
/** @type {Array<string>} - Alias names. */
|
|
27
|
+
this.aliases = /** @type {Array<string>} */ (Object.freeze([...aliases]));
|
|
28
|
+
/** @type {Array<import("./declarations.js").Declaration>} - Ordered own declarations. */
|
|
29
|
+
this.declarations = /** @type {Array<import("./declarations.js").Declaration>} */ (Object.freeze([...declarations]));
|
|
30
|
+
/** @type {Map<string, import("./trait-definition.js").default>} - Factory-local traits. */
|
|
31
|
+
this.localTraits = localTraits;
|
|
32
|
+
Object.freeze(this);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS1kZWZpbml0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rlc3RpbmcvZmFjdG9yeS9mYWN0b3J5LWRlZmluaXRpb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyxpQkFBaUI7SUFDcEM7Ozs7Ozs7OztPQVNHO0lBQ0gsWUFBWSxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFDO1FBQzVFLHFDQUFxQztRQUNyQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtRQUVoQix3RkFBd0Y7UUFDeEYsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUE7UUFFNUIsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO1FBRTVCLDJDQUEyQztRQUMzQyxJQUFJLENBQUMsT0FBTyxHQUFHLDRCQUE0QixDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRXpFLHlGQUF5RjtRQUN6RixJQUFJLENBQUMsWUFBWSxHQUFHLDZEQUE2RCxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRXBILDJGQUEyRjtRQUMzRixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQTtRQUU5QixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3JCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG4vKipcbiAqIEFuIGltbXV0YWJsZSBjb21waWxlZCBmYWN0b3J5LiBEZWZpbml0aW9ucyBuZXZlciBtdXRhdGUgYWZ0ZXIgY29tcGlsYXRpb247XG4gKiBgbW9kaWZ5YCBwcm9kdWNlcyBhIHJlcGxhY2VtZW50IHJhdGhlciB0aGFuIGVkaXRpbmcgYW4gZXhpc3Rpbmcgb25lLiBQYXJlbnQgYW5kXG4gKiB0cmFpdCByZWZlcmVuY2VzIGFyZSByZXNvbHZlZCBsYXppbHkgYXQgZXZhbHVhdGlvbiB0aW1lLCBzbyBhIGNoaWxkIG1heSBiZVxuICogZGVjbGFyZWQgYmVmb3JlIGl0cyBwYXJlbnQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZhY3RvcnlEZWZpbml0aW9uIHtcbiAgLyoqXG4gICAqIEJ1aWxkcyBhIGZhY3RvcnkgZGVmaW5pdGlvbi5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5uYW1lIC0gRmFjdG9yeSBuYW1lLlxuICAgKiBAcGFyYW0geyhuZXcgKGF0dHJpYnV0ZXM/OiBSZWNvcmQ8c3RyaW5nLCA/PikgPT4gPykgfCBudWxsfSBhcmdzLm1vZGVsQ2xhc3MgLSBNb2RlbCBjbGFzcywgb3IgbnVsbCB0byBpbmhlcml0IGZyb20gYSBwYXJlbnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbH0gYXJncy5wYXJlbnROYW1lIC0gUGFyZW50IGZhY3RvcnkgbmFtZSwgb3IgbnVsbC5cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYXJncy5hbGlhc2VzIC0gQWxpYXMgbmFtZXMgdGhhdCByZWZlcmVuY2UgdGhpcyBzYW1lIGRlZmluaXRpb24uXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9kZWNsYXJhdGlvbnMuanNcIikuRGVjbGFyYXRpb25bXX0gYXJncy5kZWNsYXJhdGlvbnMgLSBPcmRlcmVkIG93biBkZWNsYXJhdGlvbnMuXG4gICAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi90cmFpdC1kZWZpbml0aW9uLmpzXCIpLmRlZmF1bHQ+fSBhcmdzLmxvY2FsVHJhaXRzIC0gRmFjdG9yeS1sb2NhbCB0cmFpdHMga2V5ZWQgYnkgbmFtZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtuYW1lLCBtb2RlbENsYXNzLCBwYXJlbnROYW1lLCBhbGlhc2VzLCBkZWNsYXJhdGlvbnMsIGxvY2FsVHJhaXRzfSkge1xuICAgIC8qKiBAdHlwZSB7c3RyaW5nfSAtIEZhY3RvcnkgbmFtZS4gKi9cbiAgICB0aGlzLm5hbWUgPSBuYW1lXG5cbiAgICAvKiogQHR5cGUgeyhuZXcgKGF0dHJpYnV0ZXM/OiBSZWNvcmQ8c3RyaW5nLCA/PikgPT4gPykgfCBudWxsfSAtIE1vZGVsIGNsYXNzIG9yIG51bGwuICovXG4gICAgdGhpcy5tb2RlbENsYXNzID0gbW9kZWxDbGFzc1xuXG4gICAgLyoqIEB0eXBlIHtzdHJpbmcgfCBudWxsfSAtIFBhcmVudCBmYWN0b3J5IG5hbWUgb3IgbnVsbC4gKi9cbiAgICB0aGlzLnBhcmVudE5hbWUgPSBwYXJlbnROYW1lXG5cbiAgICAvKiogQHR5cGUge0FycmF5PHN0cmluZz59IC0gQWxpYXMgbmFtZXMuICovXG4gICAgdGhpcy5hbGlhc2VzID0gLyoqIEB0eXBlIHtBcnJheTxzdHJpbmc+fSAqLyAoT2JqZWN0LmZyZWV6ZShbLi4uYWxpYXNlc10pKVxuXG4gICAgLyoqIEB0eXBlIHtBcnJheTxpbXBvcnQoXCIuL2RlY2xhcmF0aW9ucy5qc1wiKS5EZWNsYXJhdGlvbj59IC0gT3JkZXJlZCBvd24gZGVjbGFyYXRpb25zLiAqL1xuICAgIHRoaXMuZGVjbGFyYXRpb25zID0gLyoqIEB0eXBlIHtBcnJheTxpbXBvcnQoXCIuL2RlY2xhcmF0aW9ucy5qc1wiKS5EZWNsYXJhdGlvbj59ICovIChPYmplY3QuZnJlZXplKFsuLi5kZWNsYXJhdGlvbnNdKSlcblxuICAgIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi90cmFpdC1kZWZpbml0aW9uLmpzXCIpLmRlZmF1bHQ+fSAtIEZhY3RvcnktbG9jYWwgdHJhaXRzLiAqL1xuICAgIHRoaXMubG9jYWxUcmFpdHMgPSBsb2NhbFRyYWl0c1xuXG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzKVxuICB9XG59XG4iXX0=
|