UNPKG

1.51 kBPlain TextView Raw
1// Dependencies:
2import { resetInterceptors, setInterceptors, setInterceptorsForToken } from './ineeda-interceptors';
3import { createProxy } from './ineeda-proxy';
4import { Constructable, IneedaFactory, IneedaInterceptor, IneedaInterceptorOrToken, IneedaKey, IneedaProxy } from './ineeda-types';
5
6export 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
19export function instance <T> (values?: Partial<T>): T & IneedaProxy<T> {
20 return createProxy<T, IneedaKey<T>>(values);
21}
22
23export 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
29export 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
37export function reset (): void {
38 resetInterceptors();
39}
40resetInterceptors();