interfaces.ts
75 lines
| 1.9 KiB
| video/mp2t
|
TypeScriptLexer
|
|
r113 | import { isPrimitive } from "../safe"; | ||
|
|
r49 | import { ActivationContext } from "./ActivationContext"; | ||
| import { Constructor, Factory } from "../interfaces"; | ||||
|
|
r113 | export interface Descriptor<T = any> { | ||
|
|
r114 | activate<S>(context: ActivationContext<S>): T; | ||
|
|
r49 | } | ||
|
|
r113 | export function isDescriptor(x: any): x is Descriptor { | ||
|
|
r49 | return (!isPrimitive(x)) && | ||
| (x.activate instanceof Function); | ||||
| } | ||||
|
|
r113 | export type ServiceMap<S = any> = { | ||
| [k in keyof S]: Descriptor<S[k]>; | ||||
|
|
r49 | } | ||
| export enum ActivationType { | ||||
|
|
r65 | Singleton = 1, | ||
|
|
r49 | Container, | ||
| Hierarchy, | ||||
| Context, | ||||
| Call | ||||
| } | ||||
|
|
r113 | export interface RegistrationWithServices<S> { | ||
| services?: ServiceMap<S>; | ||||
|
|
r49 | } | ||
|
|
r113 | export interface ServiceRegistration<T, P, S> extends RegistrationWithServices<S> { | ||
|
|
r49 | |||
| activation?: "singleton" | "container" | "hierarchy" | "context" | "call"; | ||||
|
|
r113 | params?: P; | ||
|
|
r49 | |||
| inject?: object | object[]; | ||||
|
|
r113 | cleanup?: ((instance: T) => void) | string; | ||
|
|
r49 | } | ||
|
|
r113 | export interface TypeRegistration<T, P, S> extends ServiceRegistration<T, P, S> { | ||
| $type: string | Constructor<T>; | ||||
|
|
r49 | } | ||
|
|
r113 | export interface FactoryRegistration<T, P, S> extends ServiceRegistration<T, P, S> { | ||
| $factory: string | Factory<T>; | ||||
|
|
r49 | } | ||
|
|
r113 | export interface ValueRegistration<T> { | ||
| $value: T; | ||||
|
|
r49 | parse?: boolean; | ||
| } | ||||
|
|
r113 | export interface DependencyRegistration<S, K extends keyof S> extends RegistrationWithServices<S> { | ||
| $dependency: K; | ||||
|
|
r49 | lazy?: boolean; | ||
| optional?: boolean; | ||||
|
|
r113 | default?: S[K]; | ||
|
|
r49 | } | ||
|
|
r113 | export function isTypeRegistration(x: any): x is TypeRegistration<any, any, any> { | ||
|
|
r65 | return (!isPrimitive(x)) && ("$type" in x); | ||
|
|
r49 | } | ||
|
|
r113 | export function isFactoryRegistration(x: any): x is FactoryRegistration<any, any, any> { | ||
|
|
r65 | return (!isPrimitive(x)) && ("$factory" in x); | ||
|
|
r49 | } | ||
|
|
r113 | export function isValueRegistration(x: any): x is ValueRegistration<any> { | ||
|
|
r49 | return (!isPrimitive(x)) && ("$value" in x); | ||
| } | ||||
|
|
r114 | export function isDependencyRegistration<S>(x: any): x is DependencyRegistration<S, keyof S> { | ||
|
|
r49 | return (!isPrimitive(x)) && ("$dependency" in x); | ||
| } | ||||
