@voiceflow/universal-mock 1.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/README.md +26 -0
- package/build/cjs/main.d.ts +2 -0
- package/build/cjs/main.d.ts.map +1 -0
- package/build/cjs/main.js +18 -0
- package/build/cjs/main.js.map +1 -0
- package/build/cjs/mock.d.ts +40 -0
- package/build/cjs/mock.d.ts.map +1 -0
- package/build/cjs/mock.js +135 -0
- package/build/cjs/mock.js.map +1 -0
- package/build/cjs/package.json +1 -0
- package/build/esm/main.d.ts +2 -0
- package/build/esm/main.d.ts.map +1 -0
- package/build/esm/main.js +2 -0
- package/build/esm/main.js.map +1 -0
- package/build/esm/mock.d.ts +40 -0
- package/build/esm/mock.d.ts.map +1 -0
- package/build/esm/mock.js +129 -0
- package/build/esm/mock.js.map +1 -0
- package/build/esm/package.json +1 -0
- package/package.json +60 -0
- package/vitest/main.d.ts +13 -0
- package/vitest/main.mjs +7 -0
package/README.md
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Universal Mock
|
|
2
|
+
|
|
3
|
+
Universal mocking utility, based on `@golevelup/ts-jest`.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
yarn add --exact @voiceflow/universal-mock
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
import { expect } from 'vitest';
|
|
15
|
+
import { createMock } from '@voiceflow/universal-mock/vitest';
|
|
16
|
+
|
|
17
|
+
class UserService {
|
|
18
|
+
doThing() {}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const mockUserService = createMock<UserService>();
|
|
22
|
+
|
|
23
|
+
mockUserService.doThing();
|
|
24
|
+
|
|
25
|
+
expect(mockUserService.doThing).toBeCalledTimes(1);
|
|
26
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./mock"), exports);
|
|
18
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* this implementation was copied from the package `@golevelup/ts-jest`
|
|
3
|
+
* so that we can make it framework-agnostic (jest vs vitest)
|
|
4
|
+
*
|
|
5
|
+
* you can find the original implementation here:
|
|
6
|
+
* https://github.com/golevelup/nestjs/blob/master/packages/testing/ts-jest/src/mocks.ts
|
|
7
|
+
*/
|
|
8
|
+
declare const IS_MOCK_FREE: unique symbol;
|
|
9
|
+
export interface MockInstance<T, Y extends any[], C = any> {
|
|
10
|
+
}
|
|
11
|
+
interface FrameworkStatic<M> {
|
|
12
|
+
fn: <T, Y extends any[], C = any>(implementation?: (this: C, ...args: Y) => T) => M;
|
|
13
|
+
isMockFunction?: (fn: any) => boolean;
|
|
14
|
+
}
|
|
15
|
+
type ArgsType<T> = T extends (...args: infer R) => any ? R : never;
|
|
16
|
+
export type DeepPartial<T> = {
|
|
17
|
+
[P in keyof T]?: T[P] extends Array<infer U> ? Array<PartialFuncReturn<U>> : T[P] extends ReadonlyArray<infer U> ? ReadonlyArray<PartialFuncReturn<U>> : unknown extends T[P] ? T[P] : PartialFuncReturn<T[P]>;
|
|
18
|
+
};
|
|
19
|
+
export type PartialFuncReturn<T> = {
|
|
20
|
+
[K in keyof T]?: T[K] extends (...args: infer A) => infer U ? (...args: A) => PartialFuncReturn<U> | PartialFuncReturn<Awaited<U>> : DeepPartial<T[K]>;
|
|
21
|
+
};
|
|
22
|
+
export type DeepMocked<T> = {
|
|
23
|
+
[K in keyof T]: Required<T>[K] extends (...args: any[]) => infer U ? MockInstance<ReturnType<Required<T>[K]>, ArgsType<T[K]>> & ((...args: ArgsType<T[K]>) => DeepMocked<U>) : T[K] extends object ? DeepMocked<T[K]> : T[K];
|
|
24
|
+
} & T;
|
|
25
|
+
/**
|
|
26
|
+
* tags objects that should not be extended with automatically mocked properties and methods
|
|
27
|
+
*/
|
|
28
|
+
export declare const mockFree: <T extends object & {
|
|
29
|
+
[IS_MOCK_FREE]?: boolean;
|
|
30
|
+
}>(value: T) => T;
|
|
31
|
+
/**
|
|
32
|
+
* creates a mock proxy that can be treated as either a function or an object
|
|
33
|
+
*/
|
|
34
|
+
export declare const createUniversalMockProxy: <M, T extends object>(framework: FrameworkStatic<M>, name: string) => DeepMocked<T>;
|
|
35
|
+
export interface MockOptions {
|
|
36
|
+
name?: string;
|
|
37
|
+
}
|
|
38
|
+
export declare const createMockFactory: <M>(framework: FrameworkStatic<M>) => <T extends object>(partial?: PartialFuncReturn<T>, options?: MockOptions) => DeepMocked<T>;
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=mock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../src/mock.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,QAAA,MAAM,YAAY,eAAyB,CAAC;AAG5C,MAAM,WAAW,YAAY,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG;CAAI;AAE7D,UAAU,eAAe,CAAC,CAAC;IACzB,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACpF,cAAc,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,OAAO,CAAC;CACvC;AACD,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;AAEnE,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;KAC1B,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,GACxC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAC3B,CAAC,CAAC,CAAC,CAAC,SAAS,aAAa,CAAC,MAAM,CAAC,CAAC,GACjC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,GACnC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,GAClB,CAAC,CAAC,CAAC,CAAC,GACJ,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI;KAChC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC,GACvD,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,iBAAiB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GACpE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;KACzB,CAAC,IAAI,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,CAAC,GAC9D,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,GACvG,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GACjB,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAChB,CAAC,CAAC,CAAC,CAAC;CACX,GAAG,CAAC,CAAC;AAaN;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,MAAM,GAAG;IAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,OAAO,CAAC,KAAG,CAOpF,CAAC;AA4BF;;GAEG;AACH,eAAO,MAAM,wBAAwB,GAAI,CAAC,EAAE,CAAC,SAAS,MAAM,EAC1D,WAAW,eAAe,CAAC,CAAC,CAAC,EAC7B,MAAM,MAAM,KACX,UAAU,CAAC,CAAC,CAgCd,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,iBAAiB,GAC3B,CAAC,EAAE,WAAW,eAAe,CAAC,CAAC,CAAC,MAChC,CAAC,SAAS,MAAM,EAAE,UAAS,iBAAiB,CAAC,CAAC,CAAM,EAAE,UAAS,WAAgB,KAAG,UAAU,CAAC,CAAC,CAgD9F,CAAC"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* this implementation was copied from the package `@golevelup/ts-jest`
|
|
4
|
+
* so that we can make it framework-agnostic (jest vs vitest)
|
|
5
|
+
*
|
|
6
|
+
* you can find the original implementation here:
|
|
7
|
+
* https://github.com/golevelup/nestjs/blob/master/packages/testing/ts-jest/src/mocks.ts
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.createMockFactory = exports.createUniversalMockProxy = exports.mockFree = void 0;
|
|
11
|
+
const IS_PROXY_MOCK = Symbol('is-proxy-mock');
|
|
12
|
+
const IS_MOCK_FREE = Symbol('is-mock-free');
|
|
13
|
+
const isReserved = (prop) => {
|
|
14
|
+
return (prop === 'inspect' ||
|
|
15
|
+
prop === 'then' ||
|
|
16
|
+
(typeof prop === 'symbol' && prop.toString() === 'Symbol(util.inspect.custom)'));
|
|
17
|
+
};
|
|
18
|
+
const isProxyMock = (obj) => obj[IS_PROXY_MOCK] === true;
|
|
19
|
+
const isMockFree = (obj) => obj instanceof Map || obj instanceof Set || obj[IS_MOCK_FREE] === true;
|
|
20
|
+
/**
|
|
21
|
+
* tags objects that should not be extended with automatically mocked properties and methods
|
|
22
|
+
*/
|
|
23
|
+
const mockFree = (value) => {
|
|
24
|
+
if (value) {
|
|
25
|
+
// eslint-disable-next-line no-param-reassign
|
|
26
|
+
value[IS_MOCK_FREE] = true;
|
|
27
|
+
}
|
|
28
|
+
return value;
|
|
29
|
+
};
|
|
30
|
+
exports.mockFree = mockFree;
|
|
31
|
+
/**
|
|
32
|
+
* creates a mocked function that returns a mock proxy when called
|
|
33
|
+
*/
|
|
34
|
+
const createRecursiveMockProxy = (framework, name) => {
|
|
35
|
+
const cache = new Map();
|
|
36
|
+
const proxy = new Proxy({}, {
|
|
37
|
+
get: (_obj, prop) => {
|
|
38
|
+
if (prop === IS_PROXY_MOCK)
|
|
39
|
+
return true;
|
|
40
|
+
if (isReserved(prop))
|
|
41
|
+
return undefined;
|
|
42
|
+
if (cache.has(prop))
|
|
43
|
+
return cache.get(prop);
|
|
44
|
+
const mockedProp = (0, exports.createUniversalMockProxy)(framework, `${name}.${prop.toString()}`);
|
|
45
|
+
cache.set(prop, mockedProp);
|
|
46
|
+
return mockedProp;
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
return framework.fn(() => proxy);
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* creates a mock proxy that can be treated as either a function or an object
|
|
53
|
+
*/
|
|
54
|
+
const createUniversalMockProxy = (framework, name) => {
|
|
55
|
+
const cache = new Map();
|
|
56
|
+
const proxy = new Proxy(createRecursiveMockProxy(framework, name), {
|
|
57
|
+
set: (target, prop, newValue, receiver) => {
|
|
58
|
+
const didSet = Reflect.set(target, prop, newValue, receiver);
|
|
59
|
+
if (didSet) {
|
|
60
|
+
cache.delete(prop);
|
|
61
|
+
}
|
|
62
|
+
return didSet;
|
|
63
|
+
},
|
|
64
|
+
get: (obj, prop) => {
|
|
65
|
+
if (prop === IS_PROXY_MOCK)
|
|
66
|
+
return true;
|
|
67
|
+
if (isReserved(prop))
|
|
68
|
+
return undefined;
|
|
69
|
+
if (cache.has(prop))
|
|
70
|
+
return cache.get(prop);
|
|
71
|
+
let mockedProp;
|
|
72
|
+
if (prop in obj) {
|
|
73
|
+
mockedProp = obj[prop];
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
mockedProp = (0, exports.createUniversalMockProxy)(framework, `${name}.${prop.toString()}`);
|
|
77
|
+
}
|
|
78
|
+
cache.set(prop, mockedProp);
|
|
79
|
+
return mockedProp;
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
return proxy;
|
|
83
|
+
};
|
|
84
|
+
exports.createUniversalMockProxy = createUniversalMockProxy;
|
|
85
|
+
const createMockFactory = (framework) => (partial = {}, options = {}) => {
|
|
86
|
+
const cache = new Map();
|
|
87
|
+
const { name = 'mock' } = options;
|
|
88
|
+
const proxy = new Proxy(partial, {
|
|
89
|
+
set: (target, prop, newValue, receiver) => {
|
|
90
|
+
const didSet = Reflect.set(target, prop, newValue, receiver);
|
|
91
|
+
if (didSet) {
|
|
92
|
+
cache.delete(prop);
|
|
93
|
+
}
|
|
94
|
+
return didSet;
|
|
95
|
+
},
|
|
96
|
+
get: (obj, prop) => {
|
|
97
|
+
if (prop === IS_PROXY_MOCK)
|
|
98
|
+
return true;
|
|
99
|
+
if (isReserved(prop))
|
|
100
|
+
return undefined;
|
|
101
|
+
if (cache.has(prop))
|
|
102
|
+
return cache.get(prop);
|
|
103
|
+
let mockedProp;
|
|
104
|
+
if (prop in obj) {
|
|
105
|
+
const checkProp = obj[prop];
|
|
106
|
+
if (isProxyMock(checkProp) || isMockFree(checkProp) || framework.isMockFunction?.(checkProp)) {
|
|
107
|
+
mockedProp = checkProp;
|
|
108
|
+
}
|
|
109
|
+
else if (typeof checkProp === 'function') {
|
|
110
|
+
// wrap functions using test framework
|
|
111
|
+
mockedProp = framework.fn(checkProp);
|
|
112
|
+
}
|
|
113
|
+
else if (!!checkProp && typeof checkProp === 'object' && !Array.isArray(checkProp)) {
|
|
114
|
+
// extend objects by automatically mocking other properties and methods
|
|
115
|
+
mockedProp = (0, exports.createMockFactory)(framework)(checkProp, { name: `${name}.${prop.toString()}` });
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
mockedProp = checkProp;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
else if (prop === 'constructor') {
|
|
122
|
+
mockedProp = () => undefined;
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
// treats undefined properties as both mock functions and objects with automatically mocked properties
|
|
126
|
+
mockedProp = (0, exports.createUniversalMockProxy)(framework, `${name}.${prop.toString()}`);
|
|
127
|
+
}
|
|
128
|
+
cache.set(prop, mockedProp);
|
|
129
|
+
return mockedProp;
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
return proxy;
|
|
133
|
+
};
|
|
134
|
+
exports.createMockFactory = createMockFactory;
|
|
135
|
+
//# sourceMappingURL=mock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock.js","sourceRoot":"","sources":["../../src/mock.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,MAAM,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAC9C,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAmC5C,MAAM,UAAU,GAAG,CAAC,IAAqB,EAAE,EAAE;IAC3C,OAAO,CACL,IAAI,KAAK,SAAS;QAClB,IAAI,KAAK,MAAM;QACf,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,6BAA6B,CAAC,CAChF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;AAC9D,MAAM,UAAU,GAAG,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,YAAY,GAAG,IAAI,GAAG,YAAY,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;AAExG;;GAEG;AACI,MAAM,QAAQ,GAAG,CAAkD,KAAQ,EAAK,EAAE;IACvF,IAAI,KAAK,EAAE,CAAC;QACV,6CAA6C;QAC7C,KAAK,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAPW,QAAA,QAAQ,YAOnB;AAEF;;GAEG;AACH,MAAM,wBAAwB,GAAG,CAC/B,SAA+B,EAC/B,IAAY,EACY,EAAE;IAC1B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAiC,CAAC;IAEvD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,EAAO,EAAE;QAC/B,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;YAClB,IAAI,IAAI,KAAK,aAAa;gBAAE,OAAO,IAAI,CAAC;YACxC,IAAI,UAAU,CAAC,IAAI,CAAC;gBAAE,OAAO,SAAS,CAAC;YACvC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAE5C,MAAM,UAAU,GAAG,IAAA,gCAAwB,EAAC,SAAS,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAErF,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAE5B,OAAO,UAAU,CAAC;QACpB,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF;;GAEG;AACI,MAAM,wBAAwB,GAAG,CACtC,SAA6B,EAC7B,IAAY,EACG,EAAE;IACjB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAiC,CAAC;IAEvD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,wBAAwB,CAAC,SAAS,EAAE,IAAI,CAAM,EAAE;QACtE,GAAG,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;YACxC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAE7D,IAAI,MAAM,EAAE,CAAC;gBACX,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,GAAG,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACjB,IAAI,IAAI,KAAK,aAAa;gBAAE,OAAO,IAAI,CAAC;YACxC,IAAI,UAAU,CAAC,IAAI,CAAC;gBAAE,OAAO,SAAS,CAAC;YACvC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAE5C,IAAI,UAAe,CAAC;YAEpB,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;gBAChB,UAAU,GAAG,GAAG,CAAC,IAAkC,CAAC,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACN,UAAU,GAAG,IAAA,gCAAwB,EAAC,SAAS,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACjF,CAAC;YAED,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAC5B,OAAO,UAAU,CAAC;QACpB,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,KAAsB,CAAC;AAChC,CAAC,CAAC;AAnCW,QAAA,wBAAwB,4BAmCnC;AAMK,MAAM,iBAAiB,GAC5B,CAAI,SAA6B,EAAE,EAAE,CACrC,CAAmB,UAAgC,EAAE,EAAE,UAAuB,EAAE,EAAiB,EAAE;IACjG,MAAM,KAAK,GAAG,IAAI,GAAG,EAAiC,CAAC;IACvD,MAAM,EAAE,IAAI,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC;IAElC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;QAC/B,GAAG,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;YACxC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAE7D,IAAI,MAAM,EAAE,CAAC;gBACX,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,GAAG,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACjB,IAAI,IAAI,KAAK,aAAa;gBAAE,OAAO,IAAI,CAAC;YACxC,IAAI,UAAU,CAAC,IAAI,CAAC;gBAAE,OAAO,SAAS,CAAC;YACvC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAE5C,IAAI,UAAe,CAAC;YAEpB,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;gBAChB,MAAM,SAAS,GAAG,GAAG,CAAC,IAAkC,CAAC,CAAC;gBAE1D,IAAI,WAAW,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC7F,UAAU,GAAG,SAAS,CAAC;gBACzB,CAAC;qBAAM,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;oBAC3C,sCAAsC;oBACtC,UAAU,GAAG,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;gBACvC,CAAC;qBAAM,IAAI,CAAC,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;oBACrF,uEAAuE;oBACvE,UAAU,GAAG,IAAA,yBAAiB,EAAC,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC/F,CAAC;qBAAM,CAAC;oBACN,UAAU,GAAG,SAAS,CAAC;gBACzB,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;gBAClC,UAAU,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,sGAAsG;gBACtG,UAAU,GAAG,IAAA,gCAAwB,EAAC,SAAS,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACjF,CAAC;YAED,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAC5B,OAAO,UAAU,CAAC;QACpB,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,KAAsB,CAAC;AAChC,CAAC,CAAC;AAlDS,QAAA,iBAAiB,qBAkD1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "type": "commonjs" }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* this implementation was copied from the package `@golevelup/ts-jest`
|
|
3
|
+
* so that we can make it framework-agnostic (jest vs vitest)
|
|
4
|
+
*
|
|
5
|
+
* you can find the original implementation here:
|
|
6
|
+
* https://github.com/golevelup/nestjs/blob/master/packages/testing/ts-jest/src/mocks.ts
|
|
7
|
+
*/
|
|
8
|
+
declare const IS_MOCK_FREE: unique symbol;
|
|
9
|
+
export interface MockInstance<T, Y extends any[], C = any> {
|
|
10
|
+
}
|
|
11
|
+
interface FrameworkStatic<M> {
|
|
12
|
+
fn: <T, Y extends any[], C = any>(implementation?: (this: C, ...args: Y) => T) => M;
|
|
13
|
+
isMockFunction?: (fn: any) => boolean;
|
|
14
|
+
}
|
|
15
|
+
type ArgsType<T> = T extends (...args: infer R) => any ? R : never;
|
|
16
|
+
export type DeepPartial<T> = {
|
|
17
|
+
[P in keyof T]?: T[P] extends Array<infer U> ? Array<PartialFuncReturn<U>> : T[P] extends ReadonlyArray<infer U> ? ReadonlyArray<PartialFuncReturn<U>> : unknown extends T[P] ? T[P] : PartialFuncReturn<T[P]>;
|
|
18
|
+
};
|
|
19
|
+
export type PartialFuncReturn<T> = {
|
|
20
|
+
[K in keyof T]?: T[K] extends (...args: infer A) => infer U ? (...args: A) => PartialFuncReturn<U> | PartialFuncReturn<Awaited<U>> : DeepPartial<T[K]>;
|
|
21
|
+
};
|
|
22
|
+
export type DeepMocked<T> = {
|
|
23
|
+
[K in keyof T]: Required<T>[K] extends (...args: any[]) => infer U ? MockInstance<ReturnType<Required<T>[K]>, ArgsType<T[K]>> & ((...args: ArgsType<T[K]>) => DeepMocked<U>) : T[K] extends object ? DeepMocked<T[K]> : T[K];
|
|
24
|
+
} & T;
|
|
25
|
+
/**
|
|
26
|
+
* tags objects that should not be extended with automatically mocked properties and methods
|
|
27
|
+
*/
|
|
28
|
+
export declare const mockFree: <T extends object & {
|
|
29
|
+
[IS_MOCK_FREE]?: boolean;
|
|
30
|
+
}>(value: T) => T;
|
|
31
|
+
/**
|
|
32
|
+
* creates a mock proxy that can be treated as either a function or an object
|
|
33
|
+
*/
|
|
34
|
+
export declare const createUniversalMockProxy: <M, T extends object>(framework: FrameworkStatic<M>, name: string) => DeepMocked<T>;
|
|
35
|
+
export interface MockOptions {
|
|
36
|
+
name?: string;
|
|
37
|
+
}
|
|
38
|
+
export declare const createMockFactory: <M>(framework: FrameworkStatic<M>) => <T extends object>(partial?: PartialFuncReturn<T>, options?: MockOptions) => DeepMocked<T>;
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=mock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../src/mock.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* this implementation was copied from the package `@golevelup/ts-jest`
|
|
3
|
+
* so that we can make it framework-agnostic (jest vs vitest)
|
|
4
|
+
*
|
|
5
|
+
* you can find the original implementation here:
|
|
6
|
+
* https://github.com/golevelup/nestjs/blob/master/packages/testing/ts-jest/src/mocks.ts
|
|
7
|
+
*/
|
|
8
|
+
const IS_PROXY_MOCK = Symbol('is-proxy-mock');
|
|
9
|
+
const IS_MOCK_FREE = Symbol('is-mock-free');
|
|
10
|
+
const isReserved = (prop) => {
|
|
11
|
+
return (prop === 'inspect' ||
|
|
12
|
+
prop === 'then' ||
|
|
13
|
+
(typeof prop === 'symbol' && prop.toString() === 'Symbol(util.inspect.custom)'));
|
|
14
|
+
};
|
|
15
|
+
const isProxyMock = (obj) => obj[IS_PROXY_MOCK] === true;
|
|
16
|
+
const isMockFree = (obj) => obj instanceof Map || obj instanceof Set || obj[IS_MOCK_FREE] === true;
|
|
17
|
+
/**
|
|
18
|
+
* tags objects that should not be extended with automatically mocked properties and methods
|
|
19
|
+
*/
|
|
20
|
+
export const mockFree = (value) => {
|
|
21
|
+
if (value) {
|
|
22
|
+
// eslint-disable-next-line no-param-reassign
|
|
23
|
+
value[IS_MOCK_FREE] = true;
|
|
24
|
+
}
|
|
25
|
+
return value;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* creates a mocked function that returns a mock proxy when called
|
|
29
|
+
*/
|
|
30
|
+
const createRecursiveMockProxy = (framework, name) => {
|
|
31
|
+
const cache = new Map();
|
|
32
|
+
const proxy = new Proxy({}, {
|
|
33
|
+
get: (_obj, prop) => {
|
|
34
|
+
if (prop === IS_PROXY_MOCK)
|
|
35
|
+
return true;
|
|
36
|
+
if (isReserved(prop))
|
|
37
|
+
return undefined;
|
|
38
|
+
if (cache.has(prop))
|
|
39
|
+
return cache.get(prop);
|
|
40
|
+
const mockedProp = createUniversalMockProxy(framework, `${name}.${prop.toString()}`);
|
|
41
|
+
cache.set(prop, mockedProp);
|
|
42
|
+
return mockedProp;
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
return framework.fn(() => proxy);
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* creates a mock proxy that can be treated as either a function or an object
|
|
49
|
+
*/
|
|
50
|
+
export const createUniversalMockProxy = (framework, name) => {
|
|
51
|
+
const cache = new Map();
|
|
52
|
+
const proxy = new Proxy(createRecursiveMockProxy(framework, name), {
|
|
53
|
+
set: (target, prop, newValue, receiver) => {
|
|
54
|
+
const didSet = Reflect.set(target, prop, newValue, receiver);
|
|
55
|
+
if (didSet) {
|
|
56
|
+
cache.delete(prop);
|
|
57
|
+
}
|
|
58
|
+
return didSet;
|
|
59
|
+
},
|
|
60
|
+
get: (obj, prop) => {
|
|
61
|
+
if (prop === IS_PROXY_MOCK)
|
|
62
|
+
return true;
|
|
63
|
+
if (isReserved(prop))
|
|
64
|
+
return undefined;
|
|
65
|
+
if (cache.has(prop))
|
|
66
|
+
return cache.get(prop);
|
|
67
|
+
let mockedProp;
|
|
68
|
+
if (prop in obj) {
|
|
69
|
+
mockedProp = obj[prop];
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
mockedProp = createUniversalMockProxy(framework, `${name}.${prop.toString()}`);
|
|
73
|
+
}
|
|
74
|
+
cache.set(prop, mockedProp);
|
|
75
|
+
return mockedProp;
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
return proxy;
|
|
79
|
+
};
|
|
80
|
+
export const createMockFactory = (framework) => (partial = {}, options = {}) => {
|
|
81
|
+
const cache = new Map();
|
|
82
|
+
const { name = 'mock' } = options;
|
|
83
|
+
const proxy = new Proxy(partial, {
|
|
84
|
+
set: (target, prop, newValue, receiver) => {
|
|
85
|
+
const didSet = Reflect.set(target, prop, newValue, receiver);
|
|
86
|
+
if (didSet) {
|
|
87
|
+
cache.delete(prop);
|
|
88
|
+
}
|
|
89
|
+
return didSet;
|
|
90
|
+
},
|
|
91
|
+
get: (obj, prop) => {
|
|
92
|
+
if (prop === IS_PROXY_MOCK)
|
|
93
|
+
return true;
|
|
94
|
+
if (isReserved(prop))
|
|
95
|
+
return undefined;
|
|
96
|
+
if (cache.has(prop))
|
|
97
|
+
return cache.get(prop);
|
|
98
|
+
let mockedProp;
|
|
99
|
+
if (prop in obj) {
|
|
100
|
+
const checkProp = obj[prop];
|
|
101
|
+
if (isProxyMock(checkProp) || isMockFree(checkProp) || framework.isMockFunction?.(checkProp)) {
|
|
102
|
+
mockedProp = checkProp;
|
|
103
|
+
}
|
|
104
|
+
else if (typeof checkProp === 'function') {
|
|
105
|
+
// wrap functions using test framework
|
|
106
|
+
mockedProp = framework.fn(checkProp);
|
|
107
|
+
}
|
|
108
|
+
else if (!!checkProp && typeof checkProp === 'object' && !Array.isArray(checkProp)) {
|
|
109
|
+
// extend objects by automatically mocking other properties and methods
|
|
110
|
+
mockedProp = createMockFactory(framework)(checkProp, { name: `${name}.${prop.toString()}` });
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
mockedProp = checkProp;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else if (prop === 'constructor') {
|
|
117
|
+
mockedProp = () => undefined;
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
// treats undefined properties as both mock functions and objects with automatically mocked properties
|
|
121
|
+
mockedProp = createUniversalMockProxy(framework, `${name}.${prop.toString()}`);
|
|
122
|
+
}
|
|
123
|
+
cache.set(prop, mockedProp);
|
|
124
|
+
return mockedProp;
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
return proxy;
|
|
128
|
+
};
|
|
129
|
+
//# sourceMappingURL=mock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock.js","sourceRoot":"","sources":["../../src/mock.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "type": "module" }
|
package/package.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@voiceflow/universal-mock",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"exports": {
|
|
5
|
+
".": {
|
|
6
|
+
"types": "./build/cjs/main.d.ts",
|
|
7
|
+
"import": "./build/esm/main.js",
|
|
8
|
+
"default": "./build/cjs/main.js"
|
|
9
|
+
},
|
|
10
|
+
"./vitest": {
|
|
11
|
+
"types": "./vitest/main.d.ts",
|
|
12
|
+
"import": "./vitest/main.mjs",
|
|
13
|
+
"default": "./vitest/main.mjs"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"main": "build/cjs/main.js",
|
|
17
|
+
"types": "build/cjs/main.d.ts",
|
|
18
|
+
"typesVersions": {
|
|
19
|
+
"*": {
|
|
20
|
+
"vitest": [
|
|
21
|
+
"./vitest/main.d.ts"
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"files": [
|
|
26
|
+
"build",
|
|
27
|
+
"vitest"
|
|
28
|
+
],
|
|
29
|
+
"scripts": {
|
|
30
|
+
"build": "yarn g:turbo run build:cmd --filter=@voiceflow/universal-mock...",
|
|
31
|
+
"build:cjs": "yarn g:build:pkg cjs",
|
|
32
|
+
"build:cmd": "yarn g:run-p build:cjs build:esm",
|
|
33
|
+
"build:esm": "yarn g:build:pkg esm",
|
|
34
|
+
"clean": "yarn g:rimraf build",
|
|
35
|
+
"lint": "yarn g:run-p -c lint:eslint lint:prettier",
|
|
36
|
+
"lint:eslint": "yarn g:eslint",
|
|
37
|
+
"lint:fix": "yarn g:run-p -c \"lint:eslint --fix\" \"lint:prettier --write\"",
|
|
38
|
+
"lint:prettier": "yarn g:prettier --check",
|
|
39
|
+
"tdd": "yarn g:vitest",
|
|
40
|
+
"test": "yarn g:run-p -c test:dependencies test:types test:unit",
|
|
41
|
+
"test:dependencies": "yarn g:depcruise",
|
|
42
|
+
"test:types": "yarn g:tsc --noEmit",
|
|
43
|
+
"test:unit": "yarn g:vitest run --coverage"
|
|
44
|
+
},
|
|
45
|
+
"peerDependencies": {
|
|
46
|
+
"vitest": "^4"
|
|
47
|
+
},
|
|
48
|
+
"peerDependenciesMeta": {
|
|
49
|
+
"vitest": {
|
|
50
|
+
"optional": true
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"engines": {
|
|
54
|
+
"node": "20"
|
|
55
|
+
},
|
|
56
|
+
"volta": {
|
|
57
|
+
"extends": "../../package.json"
|
|
58
|
+
},
|
|
59
|
+
"gitHead": "42e6fc3fc0dd3dd8dc71109a597d4ec5a18cdfe3"
|
|
60
|
+
}
|
package/vitest/main.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { createMockFactory } from '@voiceflow/universal-mock';
|
|
2
|
+
import type { MockInstance as ViMockInstance } from 'vitest';
|
|
3
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-imports
|
|
4
|
+
import { vi } from 'vitest';
|
|
5
|
+
|
|
6
|
+
export type { DeepMocked, DeepPartial, PartialFuncReturn } from '@voiceflow/universal-mock';
|
|
7
|
+
export { mockFree } from '@voiceflow/universal-mock';
|
|
8
|
+
|
|
9
|
+
export const createMock: ReturnType<typeof createMockFactory<typeof vi>>;
|
|
10
|
+
|
|
11
|
+
declare module '@voiceflow/universal-mock' {
|
|
12
|
+
export interface MockInstance<T, Y extends any[]> extends ViMockInstance<(...args: Y) => T> {}
|
|
13
|
+
}
|