@codefast/di-testing 0.0.0 → 0.1.0
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/CHANGELOG.md +17 -0
- package/dist/discovery/dependency-scanner.d.ts +6 -0
- package/dist/discovery/dependency-scanner.d.ts.map +1 -1
- package/dist/discovery/dependency-scanner.js +4 -0
- package/dist/discovery/dependency-scanner.js.map +1 -1
- package/dist/discovery/mock-binder.d.ts +16 -0
- package/dist/discovery/mock-binder.d.ts.map +1 -1
- package/dist/discovery/mock-binder.js +6 -0
- package/dist/discovery/mock-binder.js.map +1 -1
- package/dist/errors/errors.d.ts +17 -1
- package/dist/errors/errors.d.ts.map +1 -1
- package/dist/errors/errors.js +12 -0
- package/dist/errors/errors.js.map +1 -1
- package/dist/mocking/auto-mock.d.ts +8 -0
- package/dist/mocking/auto-mock.d.ts.map +1 -1
- package/dist/mocking/auto-mock.js +4 -0
- package/dist/mocking/auto-mock.js.map +1 -1
- package/dist/mocking/mock-factory.d.ts +6 -0
- package/dist/mocking/mock-factory.d.ts.map +1 -1
- package/dist/mocking/mock-factory.js +2 -0
- package/dist/mocking/mock-factory.js.map +1 -1
- package/dist/mocking/spy.d.ts +8 -0
- package/dist/mocking/spy.d.ts.map +1 -1
- package/dist/mocking/spy.js +2 -0
- package/dist/mocking/spy.js.map +1 -1
- package/dist/test-bed/bed-builder.d.ts +8 -0
- package/dist/test-bed/bed-builder.d.ts.map +1 -1
- package/dist/test-bed/bed-builder.js +2 -0
- package/dist/test-bed/bed-builder.js.map +1 -1
- package/dist/test-bed/sociable-builder.d.ts +4 -0
- package/dist/test-bed/sociable-builder.d.ts.map +1 -1
- package/dist/test-bed/sociable-builder.js +2 -0
- package/dist/test-bed/sociable-builder.js.map +1 -1
- package/dist/test-bed/solitary-builder.d.ts +4 -0
- package/dist/test-bed/solitary-builder.d.ts.map +1 -1
- package/dist/test-bed/solitary-builder.js +2 -0
- package/dist/test-bed/solitary-builder.js.map +1 -1
- package/dist/test-bed/test-bed.d.ts +4 -0
- package/dist/test-bed/test-bed.d.ts.map +1 -1
- package/dist/test-bed/test-bed.js +2 -0
- package/dist/test-bed/test-bed.js.map +1 -1
- package/dist/test-bed/unit-test-bed.d.ts +10 -0
- package/dist/test-bed/unit-test-bed.d.ts.map +1 -1
- package/dist/test-bed/unit-test-bed.js +4 -0
- package/dist/test-bed/unit-test-bed.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/discovery/dependency-scanner.ts +6 -0
- package/src/discovery/mock-binder.ts +16 -0
- package/src/errors/errors.ts +17 -1
- package/src/mocking/auto-mock.ts +8 -0
- package/src/mocking/mock-factory.ts +6 -0
- package/src/mocking/spy.ts +8 -0
- package/src/test-bed/bed-builder.ts +8 -0
- package/src/test-bed/sociable-builder.ts +4 -0
- package/src/test-bed/solitary-builder.ts +4 -0
- package/src/test-bed/test-bed.ts +4 -0
- package/src/test-bed/unit-test-bed.ts +10 -0
- package/src/types.ts +2 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# @codefast/di-testing
|
|
2
|
+
|
|
3
|
+
## 0.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#771](https://github.com/codefastlabs/codefast/pull/771) [`33c19b7`](https://github.com/codefastlabs/codefast/commit/33c19b73bf97dfe4388124f139552a3d63fcd87b) Thanks [@thevuong](https://github.com/thevuong)! - Add `@codefast/di-testing`: solitary and sociable auto-mocking test beds for `@codefast/di`. `TestBed.solitary(Class)`
|
|
8
|
+
reads a class's declared dependencies through di's `MetadataReader`, builds a mock for each, and constructs the real
|
|
9
|
+
unit through a container so `@postConstruct`, accessor injection, and `@preDestroy` run as in production. The default
|
|
10
|
+
mock is a zero-dependency spy; pass `mockFactory: () => vi.fn()` to build the mocks from Vitest, Jest, or Sinon — the
|
|
11
|
+
factory's return type flows through the bed, so each backend's own mock API type-checks on `mocks.get(...)` and inside
|
|
12
|
+
`.stub` callbacks with no adapter packages. Overrides cover fixed sealed values (`.using`), partial stubs (`.stub`),
|
|
13
|
+
absent optionals (`.absent`), `injectAll` element lists (`.usingAll`), and slot-targeted mocks
|
|
14
|
+
(`.mock(token, { name })`); beds expose `resetMocks()` and `await using` disposal.
|
|
15
|
+
`TestBed.sociable(Class).expose(Collaborator)` keeps chosen class-keyed collaborators real (recursively, lifecycle
|
|
16
|
+
included) while token-keyed dependencies stay mocked as the declared boundary; `bed.exposed(Class)` retrieves the real
|
|
17
|
+
instances.
|
|
@@ -6,11 +6,15 @@ import type { Constructor, DependencySlot, MetadataReader } from "@codefast/di";
|
|
|
6
6
|
* @remarks Mirrors di's own fallback: a class with no constructor metadata is fine as long as its
|
|
7
7
|
* constructor takes no parameters, which keeps zero-arg and accessor-only classes testable without
|
|
8
8
|
* `@injectable`. A parameterful constructor with no metadata is a {@link NotInjectableError}.
|
|
9
|
+
*
|
|
10
|
+
* @since 0.1.0
|
|
9
11
|
*/
|
|
10
12
|
export declare function scanDependencies(target: Constructor, reader: MetadataReader): ReadonlyArray<DependencySlot>;
|
|
11
13
|
/**
|
|
12
14
|
* What a sociable scan finds: the slots to mock, the exposed classes the unit actually reaches, and
|
|
13
15
|
* the constrained slots those classes are injected through.
|
|
16
|
+
*
|
|
17
|
+
* @since 0.1.0
|
|
14
18
|
*/
|
|
15
19
|
export interface SociableScan {
|
|
16
20
|
readonly mockSlots: ReadonlyArray<DependencySlot>;
|
|
@@ -24,6 +28,8 @@ export interface SociableScan {
|
|
|
24
28
|
*
|
|
25
29
|
* @remarks Class identity is what exposure follows — a `Token`-keyed dependency is always mocked,
|
|
26
30
|
* treating tokens as the declared boundary between the logic under test and the outside world.
|
|
31
|
+
*
|
|
32
|
+
* @since 0.1.0
|
|
27
33
|
*/
|
|
28
34
|
export declare function scanSociableDependencies(target: Constructor, exposed: ReadonlySet<Constructor>, reader: MetadataReader): SociableScan;
|
|
29
35
|
//# sourceMappingURL=dependency-scanner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependency-scanner.d.ts","sourceRoot":"","sources":["../../src/discovery/dependency-scanner.ts"],"names":[],"mappings":"AAAA,wFAAwF;AAExF,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAIhF
|
|
1
|
+
{"version":3,"file":"dependency-scanner.d.ts","sourceRoot":"","sources":["../../src/discovery/dependency-scanner.ts"],"names":[],"mappings":"AAAA,wFAAwF;AAExF,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAIhF;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,GAAG,aAAa,CAAC,cAAc,CAAC,CAS3G;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAClD,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAC/C,gGAAgG;IAChG,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;CACnD;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,WAAW,CAAC,WAAW,CAAC,EACjC,MAAM,EAAE,cAAc,GACrB,YAAY,CA2Bd"}
|
|
@@ -6,6 +6,8 @@ import { NotInjectableError } from "#/errors/errors";
|
|
|
6
6
|
* @remarks Mirrors di's own fallback: a class with no constructor metadata is fine as long as its
|
|
7
7
|
* constructor takes no parameters, which keeps zero-arg and accessor-only classes testable without
|
|
8
8
|
* `@injectable`. A parameterful constructor with no metadata is a {@link NotInjectableError}.
|
|
9
|
+
*
|
|
10
|
+
* @since 0.1.0
|
|
9
11
|
*/
|
|
10
12
|
export function scanDependencies(target, reader) {
|
|
11
13
|
const constructorMetadata = reader.getConstructorMetadata(target);
|
|
@@ -21,6 +23,8 @@ export function scanDependencies(target, reader) {
|
|
|
21
23
|
*
|
|
22
24
|
* @remarks Class identity is what exposure follows — a `Token`-keyed dependency is always mocked,
|
|
23
25
|
* treating tokens as the declared boundary between the logic under test and the outside world.
|
|
26
|
+
*
|
|
27
|
+
* @since 0.1.0
|
|
24
28
|
*/
|
|
25
29
|
export function scanSociableDependencies(target, exposed, reader) {
|
|
26
30
|
const mockSlots = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependency-scanner.js","sourceRoot":"","sources":["../../src/discovery/dependency-scanner.ts"],"names":[],"mappings":"AAAA,wFAAwF;AAIxF,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD
|
|
1
|
+
{"version":3,"file":"dependency-scanner.js","sourceRoot":"","sources":["../../src/discovery/dependency-scanner.ts"],"names":[],"mappings":"AAAA,wFAAwF;AAIxF,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAmB,EAAE,MAAsB;IAC1E,MAAM,mBAAmB,GAAG,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAClE,IAAI,mBAAmB,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,mBAAmB,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAE7D,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,MAAM,IAAI,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AACvG,CAAC;AAeD;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAAmB,EACnB,OAAiC,EACjC,MAAsB;IAEtB,MAAM,SAAS,GAA0B,EAAE,CAAC;IAC5C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAe,CAAC;IAC3C,MAAM,SAAS,GAA0B,EAAE,CAAC;IAC5C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAuB,CAAC,MAAM,CAAC,CAAC;IAE3C,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;YACrD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACzB,IAAI,OAAO,KAAK,KAAK,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC5D,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvB,CAAC;gBACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBACnB,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBACvB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACpB,CAAC;gBACD,SAAS;YACX,CAAC;YACD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;AAC/C,CAAC"}
|
|
@@ -6,6 +6,8 @@ import type { MockFactory } from "#/mocking/mock-factory";
|
|
|
6
6
|
*
|
|
7
7
|
* @remarks A stub's `setup` runs once per compile, so two beds built from one builder never share
|
|
8
8
|
* seeded spies.
|
|
9
|
+
*
|
|
10
|
+
* @since 0.1.0
|
|
9
11
|
*/
|
|
10
12
|
export type MockOverride = {
|
|
11
13
|
readonly kind: "stub";
|
|
@@ -21,6 +23,8 @@ export type MockOverride = {
|
|
|
21
23
|
};
|
|
22
24
|
/**
|
|
23
25
|
* Normalized slot criteria an override or a `mocks.get` lookup addresses one binding slot with.
|
|
26
|
+
*
|
|
27
|
+
* @since 0.1.0
|
|
24
28
|
*/
|
|
25
29
|
export interface SlotCriteria {
|
|
26
30
|
readonly name: string | undefined;
|
|
@@ -29,6 +33,8 @@ export interface SlotCriteria {
|
|
|
29
33
|
/**
|
|
30
34
|
* One override registration: how a dependency is supplied, and which slot it targets (none = every
|
|
31
35
|
* slot of the token that has no more specific override).
|
|
36
|
+
*
|
|
37
|
+
* @since 0.1.0
|
|
32
38
|
*/
|
|
33
39
|
export interface SlottedOverride {
|
|
34
40
|
readonly criteria: SlotCriteria | undefined;
|
|
@@ -36,10 +42,14 @@ export interface SlottedOverride {
|
|
|
36
42
|
}
|
|
37
43
|
/**
|
|
38
44
|
* What one bound entry was supplied with — only `auto` and `stub` entries carry a mock surface.
|
|
45
|
+
*
|
|
46
|
+
* @since 0.1.0
|
|
39
47
|
*/
|
|
40
48
|
export type BoundMockKind = "auto" | "stub" | "value" | "absent" | "all" | "exposed";
|
|
41
49
|
/**
|
|
42
50
|
* One bound value `mocks` can look up: its slot criteria, the value, and how it was supplied.
|
|
51
|
+
*
|
|
52
|
+
* @since 0.1.0
|
|
43
53
|
*/
|
|
44
54
|
export interface BoundMock {
|
|
45
55
|
readonly criteria: SlotCriteria | undefined;
|
|
@@ -51,10 +61,14 @@ export interface BoundMock {
|
|
|
51
61
|
*
|
|
52
62
|
* @remarks Tags are copied and deduplicated by identity — di interns each `(key, value)` pair, so a
|
|
53
63
|
* repeated pair is the same object.
|
|
64
|
+
*
|
|
65
|
+
* @since 0.1.0
|
|
54
66
|
*/
|
|
55
67
|
export declare function normalizeCriteria(options: InjectOptions | undefined): SlotCriteria | undefined;
|
|
56
68
|
/**
|
|
57
69
|
* Returns whether two criteria address the same slot — equal name and the same tag set.
|
|
70
|
+
*
|
|
71
|
+
* @since 0.1.0
|
|
58
72
|
*/
|
|
59
73
|
export declare function criteriaEquals(left: SlotCriteria, right: SlotCriteria): boolean;
|
|
60
74
|
/**
|
|
@@ -66,6 +80,8 @@ export declare function criteriaEquals(left: SlotCriteria, right: SlotCriteria):
|
|
|
66
80
|
* An override that matches nothing is an {@link UndeclaredDependencyError}; `.absent()` on a
|
|
67
81
|
* required slot or `.usingAll()` with no unconstrained `injectAll()` slot is an
|
|
68
82
|
* {@link OverrideMismatchError}.
|
|
83
|
+
*
|
|
84
|
+
* @since 0.1.0
|
|
69
85
|
*/
|
|
70
86
|
export declare function bindMocks(container: Container, dependencies: ReadonlyArray<DependencySlot>, overrides: ReadonlyMap<DependencyKey, ReadonlyArray<SlottedOverride>>, mockFactory: MockFactory, exposed?: ReadonlySet<Constructor>): ReadonlyMap<DependencyKey, ReadonlyArray<BoundMock>>;
|
|
71
87
|
//# sourceMappingURL=mock-binder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-binder.d.ts","sourceRoot":"","sources":["../../src/discovery/mock-binder.ts"],"names":[],"mappings":"AAAA,sGAAsG;AAEtG,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAMrH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D
|
|
1
|
+
{"version":3,"file":"mock-binder.d.ts","sourceRoot":"","sources":["../../src/discovery/mock-binder.ts"],"names":[],"mappings":"AAAA,sGAAsG;AAEtG,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAMrH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,GACpB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,OAAO,CAAA;CAAE,GACzE;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC;AAEtE;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;CAC1C;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;CACjC;AAED;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;AAErF;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;CAC9B;AAKD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,CAU9F;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAE/E;AAgDD;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CACvB,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,aAAa,CAAC,cAAc,CAAC,EAC3C,SAAS,EAAE,WAAW,CAAC,aAAa,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC,EACrE,WAAW,EAAE,WAAW,EACxB,OAAO,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,GACjC,WAAW,CAAC,aAAa,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,CA4ItD"}
|
|
@@ -9,6 +9,8 @@ const ALL_ELEMENT_SLOT_PREFIX = "di-testing:all:";
|
|
|
9
9
|
*
|
|
10
10
|
* @remarks Tags are copied and deduplicated by identity — di interns each `(key, value)` pair, so a
|
|
11
11
|
* repeated pair is the same object.
|
|
12
|
+
*
|
|
13
|
+
* @since 0.1.0
|
|
12
14
|
*/
|
|
13
15
|
export function normalizeCriteria(options) {
|
|
14
16
|
if (options === undefined) {
|
|
@@ -23,6 +25,8 @@ export function normalizeCriteria(options) {
|
|
|
23
25
|
}
|
|
24
26
|
/**
|
|
25
27
|
* Returns whether two criteria address the same slot — equal name and the same tag set.
|
|
28
|
+
*
|
|
29
|
+
* @since 0.1.0
|
|
26
30
|
*/
|
|
27
31
|
export function criteriaEquals(left, right) {
|
|
28
32
|
return left.name === right.name && tagSetEquals(left.tags, right.tags);
|
|
@@ -77,6 +81,8 @@ function acceptsAll(slot) {
|
|
|
77
81
|
* An override that matches nothing is an {@link UndeclaredDependencyError}; `.absent()` on a
|
|
78
82
|
* required slot or `.usingAll()` with no unconstrained `injectAll()` slot is an
|
|
79
83
|
* {@link OverrideMismatchError}.
|
|
84
|
+
*
|
|
85
|
+
* @since 0.1.0
|
|
80
86
|
*/
|
|
81
87
|
export function bindMocks(container, dependencies, overrides, mockFactory, exposed) {
|
|
82
88
|
if (exposed !== undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-binder.js","sourceRoot":"","sources":["../../src/discovery/mock-binder.ts"],"names":[],"mappings":"AAAA,sGAAsG;AAGtG,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAEnF,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"mock-binder.js","sourceRoot":"","sources":["../../src/discovery/mock-binder.ts"],"names":[],"mappings":"AAAA,sGAAsG;AAGtG,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAEnF,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAwDrD,uGAAuG;AACvG,MAAM,uBAAuB,GAAG,iBAAiB,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAkC;IAClE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IACzG,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAClC,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAkB,EAAE,KAAmB;IACpE,OAAO,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AACzE,CAAC;AAED,iGAAiG;AACjG,SAAS,YAAY,CAAC,IAA+B,EAAE,KAAgC;IACrF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,iFAAiF;AACjF,SAAS,cAAc,CAAC,IAAoB;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;IAC7B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;AACnC,CAAC;AAED,wEAAwE;AACxE,SAAS,WAAW,CAAC,QAAsB,EAAE,IAAoB;IAC/D,OAAO,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AACrF,CAAC;AAED,2DAA2D;AAC3D,SAAS,gBAAgB,CAAC,QAAsB;IAC9C,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,aAAa,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;AAC5C,CAAC;AAED,sGAAsG;AACtG,SAAS,UAAU,CAAC,IAAoB;IACtC,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;AACjF,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,SAAS,CACvB,SAAoB,EACpB,YAA2C,EAC3C,SAAqE,EACrE,WAAwB,EACxB,OAAkC;IAElC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;YACnC,IAAI,OAAO,GAAG,KAAK,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClD,MAAM,IAAI,qBAAqB,CAC7B,SAAS,CAAC,GAAG,CAAC,EACd,2EAA2E,CAC5E,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,GAAG,EAAmC,CAAC;IACzD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC5C,0FAA0F;IAC1F,MAAM,YAAY,GAAG,IAAI,GAAG,EAA0B,CAAC;IACvD,MAAM,cAAc,GAAG,IAAI,GAAG,EAA4B,CAAC;IAE3D,MAAM,MAAM,GAAG,CAAC,KAAoB,EAAE,KAAgB,EAAQ,EAAE;QAC9D,IAAI,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC5B,CAAC;QACD,mFAAmF;QACnF,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAC3C,SAAS,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS;YAC9D,CAAC,CAAC,SAAS,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;YACvC,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CACvD,CAAC;QACF,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,IAAoB,EAAE,KAAc,EAAQ,EAAE;QAClE,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAClE,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC5B,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7C,8FAA8F;QAC9F,MAAM,QAAQ,GACZ,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,KAAK,SAAS,IAAI,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACnG,IAAI,CAAC,IAAI,CACP,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,KAAK,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAC3G,CAAC;QAEJ,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAEvB,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACxC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;oBAClC,MAAM,IAAI,qBAAqB,CAC7B,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EACrB,+FAA+F,CAChG,CAAC;gBACJ,CAAC;gBACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAClC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;gBAC1C,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACtF,SAAS;YACX,CAAC;YAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBACrC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtB,MAAM,IAAI,qBAAqB,CAC7B,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EACrB,gGAAgG,CACjG,CAAC;gBACJ,CAAC;gBACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACxC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;oBACrC,yFAAyF;oBACzF,0FAA0F;oBAC1F,iFAAiF;oBACjF,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;wBAC9C,SAAS;6BACN,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;6BAChB,eAAe,CAAC,KAAK,CAAC;6BACtB,SAAS,CAAC,GAAG,uBAAuB,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBAC7D,CAAC;oBACD,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBAClF,CAAC;gBACD,SAAS;YACX,CAAC;QACH,CAAC;QAED,4FAA4F;QAC5F,MAAM,IAAI,GAAG,QAAQ,EAAE,QAAyE,CAAC;QACjG,MAAM,IAAI,GAAkB,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACpE,IAAI,KAAc,CAAC;QACnB,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC9D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAClC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;YAC7D,CAAC;YACD,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;gBAC3D,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;YACzF,CAAC;YACD,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrC,iFAAiF;YACjF,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAED,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC;QACtC,KAAK,MAAM,QAAQ,IAAI,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,MAAM,IAAI,yBAAyB,CACjC,SAAS,CAAC,KAAK,CAAC,EAChB,QAAQ,CAAC,QAAQ,KAAK,SAAS;oBAC7B,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,KAAK;wBAChC,CAAC,CAAC,mCAAmC;wBACrC,CAAC,CAAC,SAAS;oBACb,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACxC,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,2GAA2G;AAC3G,SAAS,SAAS,CAChB,QAAuE,EACvE,WAAwB;IAExB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,cAAc,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC9B,OAAO,QAAQ,CAAC,KAAK,CAAC;IACxB,CAAC;IACD,qFAAqF;IACrF,OAAO,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAyB,CAAC,CAAC;AAC1F,CAAC"}
|
package/dist/errors/errors.d.ts
CHANGED
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
*
|
|
5
5
|
* @remarks Mirrors `@codefast/di`'s own `DiError` shape rather than extending it, so a caller can
|
|
6
6
|
* catch testing-setup failures separately from resolution failures.
|
|
7
|
+
*
|
|
8
|
+
* @since 0.1.0
|
|
7
9
|
*/
|
|
8
10
|
export declare abstract class TestingError extends Error {
|
|
9
11
|
abstract readonly code: string;
|
|
@@ -11,6 +13,8 @@ export declare abstract class TestingError extends Error {
|
|
|
11
13
|
}
|
|
12
14
|
/**
|
|
13
15
|
* A scanned class takes constructor parameters but carries no `@injectable` metadata.
|
|
16
|
+
*
|
|
17
|
+
* @since 0.1.0
|
|
14
18
|
*/
|
|
15
19
|
export declare class NotInjectableError extends TestingError {
|
|
16
20
|
readonly code = "NOT_INJECTABLE";
|
|
@@ -22,19 +26,27 @@ export declare class NotInjectableError extends TestingError {
|
|
|
22
26
|
*
|
|
23
27
|
* @remarks Almost always a typo or a stale token reference; failing loudly beats silently binding an
|
|
24
28
|
* unused constant or returning `undefined`.
|
|
29
|
+
*
|
|
30
|
+
* @since 0.1.0
|
|
25
31
|
*/
|
|
26
32
|
export declare class UndeclaredDependencyError extends TestingError {
|
|
27
33
|
readonly code = "UNDECLARED_DEPENDENCY";
|
|
28
34
|
readonly tokenName: string;
|
|
29
35
|
constructor(tokenName: string, detail?: string);
|
|
30
36
|
}
|
|
31
|
-
/**
|
|
37
|
+
/**
|
|
38
|
+
* What a sealed entry was supplied with, naming the one cause a lookup error should report.
|
|
39
|
+
*
|
|
40
|
+
* @since 0.1.0
|
|
41
|
+
*/
|
|
32
42
|
export type SealedCause = "value" | "absent" | "all" | "exposed";
|
|
33
43
|
/**
|
|
34
44
|
* A `mocks.get(...)` lookup asked for a dependency that is not a retrievable mock.
|
|
35
45
|
*
|
|
36
46
|
* @remarks `.using()`, `.absent()`, and `.usingAll()` seal the value, and an exposed class is real —
|
|
37
47
|
* none of them carries a mock surface, so handing them back typed as `Mocked` would lie.
|
|
48
|
+
*
|
|
49
|
+
* @since 0.1.0
|
|
38
50
|
*/
|
|
39
51
|
export declare class SealedDependencyError extends TestingError {
|
|
40
52
|
readonly code = "SEALED_DEPENDENCY";
|
|
@@ -44,6 +56,8 @@ export declare class SealedDependencyError extends TestingError {
|
|
|
44
56
|
/**
|
|
45
57
|
* An override whose shape does not fit the slot it targets — `.absent()` on a required dependency,
|
|
46
58
|
* or `.usingAll()` where no unconstrained `injectAll()` slot exists.
|
|
59
|
+
*
|
|
60
|
+
* @since 0.1.0
|
|
47
61
|
*/
|
|
48
62
|
export declare class OverrideMismatchError extends TestingError {
|
|
49
63
|
readonly code = "OVERRIDE_MISMATCH";
|
|
@@ -53,6 +67,8 @@ export declare class OverrideMismatchError extends TestingError {
|
|
|
53
67
|
/**
|
|
54
68
|
* A sociable bed's exposure could not be honoured — the class is unreachable, already the unit, or
|
|
55
69
|
* was asked for without having been exposed.
|
|
70
|
+
*
|
|
71
|
+
* @since 0.1.0
|
|
56
72
|
*/
|
|
57
73
|
export declare class ExposureError extends TestingError {
|
|
58
74
|
readonly code = "EXPOSURE";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors/errors.ts"],"names":[],"mappings":"AAAA,iGAAiG;AAEjG
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors/errors.ts"],"names":[],"mappings":"AAAA,iGAAiG;AAEjG;;;;;;;GAOG;AACH,8BAAsB,YAAa,SAAQ,KAAK;IAC9C,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAE/B,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAED;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,QAAQ,CAAC,IAAI,oBAAoB;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,YAAY,UAAU,EAAE,MAAM,EAK7B;CACF;AAED;;;;;;;GAOG;AACH,qBAAa,yBAA0B,SAAQ,YAAY;IACzD,QAAQ,CAAC,IAAI,2BAA2B;IACxC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,YAAY,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAK7C;CACF;AAED;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;AASjE;;;;;;;GAOG;AACH,qBAAa,qBAAsB,SAAQ,YAAY;IACrD,QAAQ,CAAC,IAAI,uBAAuB;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,YAAY,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAGhD;CACF;AAED;;;;;GAKG;AACH,qBAAa,qBAAsB,SAAQ,YAAY;IACrD,QAAQ,CAAC,IAAI,uBAAuB;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,YAAY,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAG5C;CACF;AAED;;;;;GAKG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC7C,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,YAAY,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAG7C;CACF"}
|
package/dist/errors/errors.js
CHANGED
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
*
|
|
5
5
|
* @remarks Mirrors `@codefast/di`'s own `DiError` shape rather than extending it, so a caller can
|
|
6
6
|
* catch testing-setup failures separately from resolution failures.
|
|
7
|
+
*
|
|
8
|
+
* @since 0.1.0
|
|
7
9
|
*/
|
|
8
10
|
export class TestingError extends Error {
|
|
9
11
|
constructor(message) {
|
|
@@ -13,6 +15,8 @@ export class TestingError extends Error {
|
|
|
13
15
|
}
|
|
14
16
|
/**
|
|
15
17
|
* A scanned class takes constructor parameters but carries no `@injectable` metadata.
|
|
18
|
+
*
|
|
19
|
+
* @since 0.1.0
|
|
16
20
|
*/
|
|
17
21
|
export class NotInjectableError extends TestingError {
|
|
18
22
|
code = "NOT_INJECTABLE";
|
|
@@ -27,6 +31,8 @@ export class NotInjectableError extends TestingError {
|
|
|
27
31
|
*
|
|
28
32
|
* @remarks Almost always a typo or a stale token reference; failing loudly beats silently binding an
|
|
29
33
|
* unused constant or returning `undefined`.
|
|
34
|
+
*
|
|
35
|
+
* @since 0.1.0
|
|
30
36
|
*/
|
|
31
37
|
export class UndeclaredDependencyError extends TestingError {
|
|
32
38
|
code = "UNDECLARED_DEPENDENCY";
|
|
@@ -47,6 +53,8 @@ const SEALED_MESSAGES = {
|
|
|
47
53
|
*
|
|
48
54
|
* @remarks `.using()`, `.absent()`, and `.usingAll()` seal the value, and an exposed class is real —
|
|
49
55
|
* none of them carries a mock surface, so handing them back typed as `Mocked` would lie.
|
|
56
|
+
*
|
|
57
|
+
* @since 0.1.0
|
|
50
58
|
*/
|
|
51
59
|
export class SealedDependencyError extends TestingError {
|
|
52
60
|
code = "SEALED_DEPENDENCY";
|
|
@@ -59,6 +67,8 @@ export class SealedDependencyError extends TestingError {
|
|
|
59
67
|
/**
|
|
60
68
|
* An override whose shape does not fit the slot it targets — `.absent()` on a required dependency,
|
|
61
69
|
* or `.usingAll()` where no unconstrained `injectAll()` slot exists.
|
|
70
|
+
*
|
|
71
|
+
* @since 0.1.0
|
|
62
72
|
*/
|
|
63
73
|
export class OverrideMismatchError extends TestingError {
|
|
64
74
|
code = "OVERRIDE_MISMATCH";
|
|
@@ -71,6 +81,8 @@ export class OverrideMismatchError extends TestingError {
|
|
|
71
81
|
/**
|
|
72
82
|
* A sociable bed's exposure could not be honoured — the class is unreachable, already the unit, or
|
|
73
83
|
* was asked for without having been exposed.
|
|
84
|
+
*
|
|
85
|
+
* @since 0.1.0
|
|
74
86
|
*/
|
|
75
87
|
export class ExposureError extends TestingError {
|
|
76
88
|
code = "EXPOSURE";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors/errors.ts"],"names":[],"mappings":"AAAA,iGAAiG;AAEjG
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors/errors.ts"],"names":[],"mappings":"AAAA,iGAAiG;AAEjG;;;;;;;GAOG;AACH,MAAM,OAAgB,YAAa,SAAQ,KAAK;IAG9C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACpC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,kBAAmB,SAAQ,YAAY;IACzC,IAAI,GAAG,gBAAgB,CAAC;IACxB,UAAU,CAAS;IAE5B,YAAY,UAAkB;QAC5B,KAAK,CACH,oCAAoC,UAAU,gNAAgN,CAC/P,CAAC;QACF,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,yBAA0B,SAAQ,YAAY;IAChD,IAAI,GAAG,uBAAuB,CAAC;IAC/B,SAAS,CAAS;IAE3B,YAAY,SAAiB,EAAE,MAAe;QAC5C,KAAK,CACH,IAAI,SAAS,IAAI,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,GAAG,oJAAoJ,CAChN,CAAC;QACF,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AASD,MAAM,eAAe,GAA0C;IAC7D,KAAK,EAAE,iGAAiG;IACxG,MAAM,EAAE,yEAAyE;IACjF,GAAG,EAAE,qFAAqF;IAC1F,OAAO,EAAE,oFAAoF;CAC9F,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,OAAO,qBAAsB,SAAQ,YAAY;IAC5C,IAAI,GAAG,mBAAmB,CAAC;IAC3B,SAAS,CAAS;IAE3B,YAAY,SAAiB,EAAE,KAAkB;QAC/C,KAAK,CAAC,IAAI,SAAS,gCAAgC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7E,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,qBAAsB,SAAQ,YAAY;IAC5C,IAAI,GAAG,mBAAmB,CAAC;IAC3B,SAAS,CAAS;IAE3B,YAAY,SAAiB,EAAE,MAAc;QAC3C,KAAK,CAAC,IAAI,SAAS,MAAM,MAAM,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,aAAc,SAAQ,YAAY;IACpC,IAAI,GAAG,UAAU,CAAC;IAClB,UAAU,CAAS;IAE5B,YAAY,UAAkB,EAAE,MAAc;QAC5C,KAAK,CAAC,IAAI,UAAU,MAAM,MAAM,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -11,6 +11,8 @@ import type { Spy } from "#/mocking/spy";
|
|
|
11
11
|
*
|
|
12
12
|
* @typeParam Dependency - The dependency type being mocked.
|
|
13
13
|
* @typeParam Backend - The spy type the active mock factory produces.
|
|
14
|
+
*
|
|
15
|
+
* @since 0.1.0
|
|
14
16
|
*/
|
|
15
17
|
export type Mocked<Dependency, Backend extends MockFunction = Spy> = Dependency extends (...args: infer Args) => infer Return ? [Backend] extends [Spy] ? [Spy] extends [Backend] ? Spy<Args, Return> : Backend & ((...args: Args) => Return) : Backend & ((...args: Args) => Return) : Dependency extends object ? {
|
|
16
18
|
[Key in keyof Dependency]: Mocked<Dependency[Key], Backend>;
|
|
@@ -22,6 +24,8 @@ export type Mocked<Dependency, Backend extends MockFunction = Spy> = Dependency
|
|
|
22
24
|
* optional so only the members a test cares about need spelling out.
|
|
23
25
|
*
|
|
24
26
|
* @typeParam Dependency - The dependency type being partially stubbed.
|
|
27
|
+
*
|
|
28
|
+
* @since 0.1.0
|
|
25
29
|
*/
|
|
26
30
|
export type DeepPartial<Dependency> = Dependency extends (...args: Array<never>) => unknown ? Dependency : Dependency extends object ? {
|
|
27
31
|
[Key in keyof Dependency]?: DeepPartial<Dependency[Key]>;
|
|
@@ -29,6 +33,8 @@ export type DeepPartial<Dependency> = Dependency extends (...args: Array<never>)
|
|
|
29
33
|
/**
|
|
30
34
|
* The key an auto-mock answers with its reset routine, clearing the root spy, every materialized
|
|
31
35
|
* member, and the spies of its seed.
|
|
36
|
+
*
|
|
37
|
+
* @since 0.1.0
|
|
32
38
|
*/
|
|
33
39
|
export declare const MOCK_RESET: unique symbol;
|
|
34
40
|
/**
|
|
@@ -42,6 +48,8 @@ export declare const MOCK_RESET: unique symbol;
|
|
|
42
48
|
*
|
|
43
49
|
* @typeParam Dependency - The dependency type being mocked.
|
|
44
50
|
* @typeParam Backend - The spy type the factory produces, threaded into the returned `Mocked` view.
|
|
51
|
+
*
|
|
52
|
+
* @since 0.1.0
|
|
45
53
|
*/
|
|
46
54
|
export declare function createAutoMock<Dependency, Backend extends MockFunction = Spy>(mockFactory: MockFactory<Backend>, seed?: DeepPartial<Dependency>): Mocked<Dependency, Backend>;
|
|
47
55
|
//# sourceMappingURL=auto-mock.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-mock.d.ts","sourceRoot":"","sources":["../../src/mocking/auto-mock.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAEvF,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEzC
|
|
1
|
+
{"version":3,"file":"auto-mock.d.ts","sourceRoot":"","sources":["../../src/mocking/auto-mock.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAEvF,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEzC;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,MAAM,CAAC,UAAU,EAAE,OAAO,SAAS,YAAY,GAAG,GAAG,IAAI,UAAU,SAAS,CACtF,GAAG,IAAI,EAAE,MAAM,IAAI,KAChB,MAAM,MAAM,GACb,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GACrB,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,GACrB,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,GACjB,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,GACvC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,GACvC,UAAU,SAAS,MAAM,GACvB;KAAG,GAAG,IAAI,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;CAAE,GAC/D,UAAU,CAAC;AAEjB;;;;;;;;;GASG;AACH,MAAM,MAAM,WAAW,CAAC,UAAU,IAAI,UAAU,SAAS,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,OAAO,GACvF,UAAU,GACV,UAAU,SAAS,MAAM,GACvB;KAAG,GAAG,IAAI,MAAM,UAAU,CAAC,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;CAAE,GAC5D,UAAU,CAAC;AAEjB;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,OAAO,MAAwC,CAAC;AAoDzE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,OAAO,SAAS,YAAY,GAAG,GAAG,EAC3E,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,EACjC,IAAI,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC,GAC7B,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAyH7B"}
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* The key an auto-mock answers with its reset routine, clearing the root spy, every materialized
|
|
4
4
|
* member, and the spies of its seed.
|
|
5
|
+
*
|
|
6
|
+
* @since 0.1.0
|
|
5
7
|
*/
|
|
6
8
|
export const MOCK_RESET = Symbol("di-testing:mock-reset");
|
|
7
9
|
// `then` would make every mock thenable and stall `await`; `toJSON` and `asymmetricMatch` are probed
|
|
@@ -59,6 +61,8 @@ function seedProvides(seed, key) {
|
|
|
59
61
|
*
|
|
60
62
|
* @typeParam Dependency - The dependency type being mocked.
|
|
61
63
|
* @typeParam Backend - The spy type the factory produces, threaded into the returned `Mocked` view.
|
|
64
|
+
*
|
|
65
|
+
* @since 0.1.0
|
|
62
66
|
*/
|
|
63
67
|
export function createAutoMock(mockFactory, seed) {
|
|
64
68
|
// A primitive stub has no members to mock — the seed is the dependency's whole value.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-mock.js","sourceRoot":"","sources":["../../src/mocking/auto-mock.ts"],"names":[],"mappings":"AAAA,uFAAuF;
|
|
1
|
+
{"version":3,"file":"auto-mock.js","sourceRoot":"","sources":["../../src/mocking/auto-mock.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,8 @@ import type { Spy } from "#/mocking/spy";
|
|
|
5
5
|
*
|
|
6
6
|
* @remarks Deliberately structural so any backend qualifies: the built-in {@link Spy}, a Vitest
|
|
7
7
|
* `vi.fn()`, a `jest.fn()`, or a Sinon stub all satisfy it.
|
|
8
|
+
*
|
|
9
|
+
* @since 0.1.0
|
|
8
10
|
*/
|
|
9
11
|
export type MockFunction = (...args: ReadonlyArray<unknown>) => unknown;
|
|
10
12
|
/**
|
|
@@ -16,10 +18,14 @@ export type MockFunction = (...args: ReadonlyArray<unknown>) => unknown;
|
|
|
16
18
|
* with no adapter package and no module augmentation.
|
|
17
19
|
*
|
|
18
20
|
* @typeParam Backend - The spy type one factory call produces; defaults to the loose callable.
|
|
21
|
+
*
|
|
22
|
+
* @since 0.1.0
|
|
19
23
|
*/
|
|
20
24
|
export type MockFactory<Backend extends MockFunction = MockFunction> = () => Backend;
|
|
21
25
|
/**
|
|
22
26
|
* The default `MockFactory` — one built-in {@link Spy} per call, with no test-framework dependency.
|
|
27
|
+
*
|
|
28
|
+
* @since 0.1.0
|
|
23
29
|
*/
|
|
24
30
|
export declare const defaultMockFactory: MockFactory<Spy>;
|
|
25
31
|
//# sourceMappingURL=mock-factory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-factory.d.ts","sourceRoot":"","sources":["../../src/mocking/mock-factory.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAEvF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAGzC
|
|
1
|
+
{"version":3,"file":"mock-factory.d.ts","sourceRoot":"","sources":["../../src/mocking/mock-factory.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAEvF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAGzC;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC;AAExE;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,WAAW,CAAC,OAAO,SAAS,YAAY,GAAG,YAAY,IAAI,MAAM,OAAO,CAAC;AAErF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,GAAG,CAAqB,CAAC"}
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
import { createSpy } from "#/mocking/spy";
|
|
3
3
|
/**
|
|
4
4
|
* The default `MockFactory` — one built-in {@link Spy} per call, with no test-framework dependency.
|
|
5
|
+
*
|
|
6
|
+
* @since 0.1.0
|
|
5
7
|
*/
|
|
6
8
|
export const defaultMockFactory = () => createSpy();
|
|
7
9
|
//# sourceMappingURL=mock-factory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-factory.js","sourceRoot":"","sources":["../../src/mocking/mock-factory.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAGvF,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"mock-factory.js","sourceRoot":"","sources":["../../src/mocking/mock-factory.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAGvF,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AA0B1C;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAqB,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC"}
|
package/dist/mocking/spy.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/** The built-in zero-dependency spy the default mock factory hands out. */
|
|
2
2
|
/**
|
|
3
3
|
* One recorded invocation's outcome — a returned value or a thrown error.
|
|
4
|
+
*
|
|
5
|
+
* @since 0.1.0
|
|
4
6
|
*/
|
|
5
7
|
export interface SpyResult {
|
|
6
8
|
readonly type: "return" | "throw";
|
|
@@ -10,6 +12,8 @@ export interface SpyResult {
|
|
|
10
12
|
* The call log a spy exposes for assertions.
|
|
11
13
|
*
|
|
12
14
|
* @typeParam Args - The spy's argument tuple.
|
|
15
|
+
*
|
|
16
|
+
* @since 0.1.0
|
|
13
17
|
*/
|
|
14
18
|
export interface SpyState<Args extends ReadonlyArray<unknown>> {
|
|
15
19
|
readonly calls: ReadonlyArray<Args>;
|
|
@@ -20,6 +24,8 @@ export interface SpyState<Args extends ReadonlyArray<unknown>> {
|
|
|
20
24
|
*
|
|
21
25
|
* @remarks `Return` defaults to `any` so a spy drops into any typed method slot, exactly as Vitest's
|
|
22
26
|
* own mock type does — the package's one deliberate `any`.
|
|
27
|
+
*
|
|
28
|
+
* @since 0.1.0
|
|
23
29
|
*/
|
|
24
30
|
export interface Spy<Args extends ReadonlyArray<unknown> = ReadonlyArray<unknown>, Return = any> {
|
|
25
31
|
(...args: Args): Return;
|
|
@@ -34,6 +40,8 @@ export interface Spy<Args extends ReadonlyArray<unknown> = ReadonlyArray<unknown
|
|
|
34
40
|
}
|
|
35
41
|
/**
|
|
36
42
|
* Creates a fresh zero-dependency spy that records its calls and returns `undefined` until configured.
|
|
43
|
+
*
|
|
44
|
+
* @since 0.1.0
|
|
37
45
|
*/
|
|
38
46
|
export declare function createSpy(): Spy;
|
|
39
47
|
//# sourceMappingURL=spy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spy.d.ts","sourceRoot":"","sources":["../../src/mocking/spy.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAE3E
|
|
1
|
+
{"version":3,"file":"spy.d.ts","sourceRoot":"","sources":["../../src/mocking/spy.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAE3E;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,QAAQ,CAAC,IAAI,SAAS,aAAa,CAAC,OAAO,CAAC;IAC3D,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;CAC5C;AAGD;;;;;;;GAOG;AACH,MAAM,WAAW,GAAG,CAAC,IAAI,SAAS,aAAa,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,GAAG;IAC7F,CAAC,GAAG,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC;IACxB,6CAA6C;IAC7C,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9B,4DAA4D;IAC5D,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,yEAAyE;IACzE,kBAAkB,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,GAAG,IAAI,CAAC;IACxD,mFAAmF;IACnF,SAAS,IAAI,IAAI,CAAC;CACnB;AAGD;;;;GAIG;AACH,wBAAgB,SAAS,IAAI,GAAG,CAwC/B"}
|
package/dist/mocking/spy.js
CHANGED
package/dist/mocking/spy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spy.js","sourceRoot":"","sources":["../../src/mocking/spy.ts"],"names":[],"mappings":"AAAA,2EAA2E;
|
|
1
|
+
{"version":3,"file":"spy.js","sourceRoot":"","sources":["../../src/mocking/spy.ts"],"names":[],"mappings":"AAAA,2EAA2E;AA4C3E,8CAA8C;AAE9C;;;;GAIG;AACH,MAAM,UAAU,SAAS;IACvB,MAAM,KAAK,GAAkC,EAAE,CAAC;IAChD,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,IAAI,cAA0E,CAAC;IAC/E,IAAI,WAAoB,CAAC;IAEzB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CACvB,CAAC,GAAG,IAA4B,EAAW,EAAE;QAC3C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YACxC,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9C,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,EACD;QACE,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;QACxB,eAAe,CAAC,KAAc;YAC5B,WAAW,GAAG,KAAK,CAAC;YACpB,cAAc,GAAG,SAAS,CAAC;YAC3B,OAAO,GAAG,CAAC;QACb,CAAC;QACD,kBAAkB,CAAC,EAAgD;YACjE,cAAc,GAAG,EAAE,CAAC;YACpB,OAAO,GAAG,CAAC;QACb,CAAC;QACD,oEAAoE;QACpE,SAAS;YACP,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YACjB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YACnB,cAAc,GAAG,SAAS,CAAC;YAC3B,WAAW,GAAG,SAAS,CAAC;QAC1B,CAAC;KACF,CACK,CAAC;IAET,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -10,6 +10,8 @@ import type { InjectionIdentifier } from "#/types";
|
|
|
10
10
|
*
|
|
11
11
|
* @typeParam Backend - The spy type the mock factory produces; it flows into every `Mocked` member,
|
|
12
12
|
* `mocks.get`, and the `.stub` callback, so `() => vi.fn()` yields Vitest's own mock typing.
|
|
13
|
+
*
|
|
14
|
+
* @since 0.1.0
|
|
13
15
|
*/
|
|
14
16
|
export interface TestBedOptions<Backend extends MockFunction = Spy> {
|
|
15
17
|
/** Spy factory each auto-mock property is materialized with; defaults to the built-in spy. */
|
|
@@ -23,6 +25,8 @@ export interface TestBedOptions<Backend extends MockFunction = Spy> {
|
|
|
23
25
|
* @typeParam Dependency - The dependency's value type.
|
|
24
26
|
* @typeParam Owner - The builder the chain returns to.
|
|
25
27
|
* @typeParam Backend - The spy type the bed's mock factory produces.
|
|
28
|
+
*
|
|
29
|
+
* @since 0.1.0
|
|
26
30
|
*/
|
|
27
31
|
export interface MockOverrideBuilder<Dependency, Owner, Backend extends MockFunction = Spy> {
|
|
28
32
|
/**
|
|
@@ -45,6 +49,8 @@ export interface MockOverrideBuilder<Dependency, Owner, Backend extends MockFunc
|
|
|
45
49
|
}
|
|
46
50
|
/**
|
|
47
51
|
* What a builder's prepare step hands the compile template: the container and the bound mock entries.
|
|
52
|
+
*
|
|
53
|
+
* @since 0.1.0
|
|
48
54
|
*/
|
|
49
55
|
export interface PreparedBed {
|
|
50
56
|
readonly container: Container;
|
|
@@ -59,6 +65,8 @@ export interface PreparedBed {
|
|
|
59
65
|
*
|
|
60
66
|
* @typeParam Class - The class under test.
|
|
61
67
|
* @typeParam Backend - The spy type the bed's mock factory produces.
|
|
68
|
+
*
|
|
69
|
+
* @since 0.1.0
|
|
62
70
|
*/
|
|
63
71
|
export declare abstract class BedBuilder<Class, Backend extends MockFunction = Spy> {
|
|
64
72
|
#private;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bed-builder.d.ts","sourceRoot":"","sources":["../../src/test-bed/bed-builder.ts"],"names":[],"mappings":"AAAA,iEAAiE;AAEjE,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAIzG,OAAO,KAAK,EAAE,SAAS,EAAgB,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAExF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAExE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD
|
|
1
|
+
{"version":3,"file":"bed-builder.d.ts","sourceRoot":"","sources":["../../src/test-bed/bed-builder.ts"],"names":[],"mappings":"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"}
|