1 |
|
2 | import { resetInterceptors, setInterceptors, setInterceptorsForToken } from './ineeda-interceptors';
|
3 | import { createProxy } from './ineeda-proxy';
|
4 | import { Constructable, IneedaFactory, IneedaInterceptor, IneedaInterceptorOrToken, IneedaKey, IneedaProxy } from './ineeda-types';
|
5 |
|
6 | export function factory <T> (values?: Partial<T>): IneedaFactory<T> {
|
7 | let instances: Array<T & IneedaProxy<T>> = [];
|
8 | let factory: IneedaFactory<T> = function ineedaFactory (): T & IneedaProxy<T> {
|
9 | let seed = Object.assign({}, values);
|
10 | let mock = instance<T>(seed);
|
11 | instances.push(mock);
|
12 | return mock;
|
13 | };
|
14 | factory.instances = instances;
|
15 | factory.getLatest = () => factory.instances[factory.instances.length - 1];
|
16 | return factory;
|
17 | }
|
18 |
|
19 | export function instance <T> (values?: Partial<T>): T & IneedaProxy<T> {
|
20 | return createProxy<T, IneedaKey<T>>(values);
|
21 | }
|
22 |
|
23 | export function ninstanceof <T> (constructor: Constructable<T>, values?: Partial<T>): T & IneedaProxy<T> {
|
24 | let mock = instance<T>(values);
|
25 | Object.setPrototypeOf(mock, constructor.prototype);
|
26 | return mock;
|
27 | }
|
28 |
|
29 | export function intercept <T> (interceptorOrToken: IneedaInterceptorOrToken<T>, interceptor?: IneedaInterceptor<T>): void {
|
30 | if (interceptor) {
|
31 | setInterceptorsForToken<T>(interceptorOrToken, interceptor);
|
32 | } else {
|
33 | setInterceptors(<IneedaInterceptor<T>>interceptorOrToken);
|
34 | }
|
35 | }
|
36 |
|
37 | export function reset (): void {
|
38 | resetInterceptors();
|
39 | }
|
40 | resetInterceptors();
|