UNPKG

aurelia-dependency-injection

Version:

A lightweight, extensible dependency injection container for JavaScript.

127 lines (93 loc) 2.74 kB
import { resolve } from "./container"; import { Optional } from "./resolvers"; import { All, Factory, factory, Lazy, newInstance, Parent } from "./resolvers"; declare const assertType: <R, U = [R]>(result: [R] extends U ? R : never) => void function testResolve() { function testAbstractClass() { abstract class A { a = 1; } const a = resolve(A); if (a.a === 2) { } } function testResolveSingle() { class A { a = 1 } class B { b = '2' } const aInstance = resolve(A); const bInstance = resolve(B); // @ts-expect-error number and string no overlap if (aInstance.a === bInstance.b) { } } function testResolveMultiple() { class A { a = 1 } class B { b = '2' } const [aInstance, bInstance] = resolve(A, B); aInstance.a; bInstance.b; // @ts-expect-error if (aInstance.a === '2') { } // @ts-expect-error if (bInstance.b === 2) { } } function testResolveFactory() { class A { a = 1 }; const aFactory = resolve(Factory.of(A)); // @ts-expect-error assertType<new () => A>(aFactory); const aInstance = aFactory(); assertType<A>(aInstance); assertType<A>({ a: 5 }); // @ts-expect-error assertType<A>({}); // @ts-expect-error if (aInstance.a === '1') { } const bInstance = aFactory(1, 2, 3); assertType<A>(bInstance); // @ts-expect-error if (bInstance.a === '1') { } } function testResolveLazy() { class A { a = 1 }; const aFactory = resolve(Lazy.of(A)); assertType<() => A>(aFactory); const aInstance = aFactory(); assertType<A>(aInstance); assertType<A>({ a: 5 }); // @ts-expect-error assertType<A>({}); // @ts-expect-error if (aInstance.a === '1') { } // @ts-expect-error const bInstance = aFactory(1, 2, 3); assertType<A>(bInstance); // @ts-expect-error if (bInstance.a === '1') { } } function testResolveAll() { class A { a = 1 } const instances = resolve(All.of(A)); assertType<A[]>(instances); } function testResolveParent() { class A { a = 1 } const instance = resolve(Parent.of(A)); assertType<A | null>(instance); } function testResolveOptional() { class A { a = 1 } const instance = resolve(Optional.of(A)); assertType<A | null>(instance); } function testResolveMix() { class A { a = 1 } class B { b = '2' } const [aInstance, bInstance, instances] = resolve(A, B, All.of(A)); assertType<A>(aInstance); assertType<B>(bInstance); assertType<A[]>(instances); } }