@aurelia/kernel
Advanced tools
+679
| // tslint:disable:no-reserved-keywords | ||
| import { Constructable, IIndexable, Injectable, Primitive } from './interfaces'; | ||
| import { PLATFORM } from './platform'; | ||
| import { Reporter } from './reporter'; | ||
| export type ResolveCallback<T = any> = (handler?: IContainer, requestor?: IContainer, resolver?: IResolver) => T; | ||
| export type Key<T> = InterfaceSymbol<T> | Primitive | IIndexable | Function; | ||
| export type InterfaceSymbol<T> = (target: Injectable, property: string, index: number) => any; | ||
| export interface IDefaultableInterfaceSymbol<T> extends InterfaceSymbol<T> { | ||
| withDefault(configure: (builder: IResolverBuilder<T>) => IResolver): InterfaceSymbol<T>; | ||
| noDefault(): InterfaceSymbol<T>; | ||
| } | ||
| export interface IResolver<T = any> { | ||
| resolve(handler: IContainer, requestor: IContainer): T; | ||
| getFactory?(container: IContainer): IFactory<T> | null; | ||
| } | ||
| export interface IRegistration<T = any> { | ||
| register(container: IContainer, key?: Key<T>): IResolver<T>; | ||
| } | ||
| export interface IFactory<T = any> { | ||
| readonly type: Function; | ||
| registerTransformer(transformer: (instance: T) => T): boolean; | ||
| construct(container: IContainer, dynamicDependencies?: any[]): T; | ||
| } | ||
| export interface IServiceLocator { | ||
| has(key: any, searchAncestors: boolean): boolean; | ||
| get<T>(key: Key<T>): T; | ||
| get<T extends Constructable>(key: T): InstanceType<T>; | ||
| getAll<T>(key: Key<T>): ReadonlyArray<T>; | ||
| getAll<T extends Constructable>(key: T): ReadonlyArray<InstanceType<T>>; | ||
| } | ||
| export interface IRegistry { | ||
| register(container: IContainer): void; | ||
| } | ||
| export interface IContainer extends IServiceLocator { | ||
| register(...params: (IRegistry | Record<string, Partial<IRegistry>>)[]): void; | ||
| register(registry: IRegistry | Record<string, Partial<IRegistry>>): void; | ||
| registerResolver<T>(key: Key<T>, resolver: IResolver<T>): IResolver<T>; | ||
| registerResolver<T extends Constructable>(key: T, resolver: IResolver<InstanceType<T>>): IResolver<InstanceType<T>>; | ||
| registerTransformer<T>(key: Key<T>, transformer: (instance: T) => T): boolean; | ||
| registerTransformer<T extends Constructable>(key: T, transformer: (instance: InstanceType<T>) => T): boolean; | ||
| getResolver<T>(key: Key<T>, autoRegister?: boolean): IResolver<T> | null; | ||
| getResolver<T extends Constructable>(key: T, autoRegister?: boolean): IResolver<InstanceType<T>> | null; | ||
| getFactory<T extends Constructable>(type: T): IFactory<InstanceType<T>>; | ||
| createChild(): IContainer; | ||
| } | ||
| export interface IResolverBuilder<T> { | ||
| instance(value: T & IIndexable): IResolver; | ||
| singleton(value: Constructable<T>): IResolver; | ||
| transient(value: Constructable<T>): IResolver; | ||
| callback(value: ResolveCallback<T>): IResolver; | ||
| aliasTo(destinationKey: Key<T>): IResolver; | ||
| } | ||
| if (!('getOwnMetadata' in Reflect)) { | ||
| (Reflect as any).getOwnMetadata = function(key: string, target: any): any { | ||
| return target[key]; | ||
| }; | ||
| (Reflect as any).metadata = function(key: string, value: any): (target: any) => void { | ||
| return function(target: any): void { | ||
| target[key] = value; | ||
| }; | ||
| }; | ||
| } | ||
| export const DI = { | ||
| createContainer(): IContainer { | ||
| return new Container(); | ||
| }, | ||
| getDesignParamTypes(target: any): any[] { | ||
| return (Reflect as any).getOwnMetadata('design:paramtypes', target) || PLATFORM.emptyArray; | ||
| }, | ||
| getDependencies(type: Function & { inject?: any }): any[] { | ||
| let dependencies: any[]; | ||
| if (type.inject === undefined) { | ||
| dependencies = DI.getDesignParamTypes(type); | ||
| } else { | ||
| dependencies = []; | ||
| let ctor = type; | ||
| while (typeof ctor === 'function') { | ||
| if (ctor.hasOwnProperty('inject')) { | ||
| dependencies.push(...ctor.inject); | ||
| } | ||
| ctor = Object.getPrototypeOf(ctor); | ||
| } | ||
| } | ||
| return dependencies; | ||
| }, | ||
| createInterface<T = any>(friendlyName?: string): IDefaultableInterfaceSymbol<T> { | ||
| const Key: any = function(target: Injectable, property: string, index: number): any { | ||
| const inject = target.inject || (target.inject = []); | ||
| (Key as any).friendlyName = friendlyName || 'Interface'; | ||
| inject[index] = Key; | ||
| return target; | ||
| }; | ||
| Key.noDefault = function(): InterfaceSymbol<T> { | ||
| return Key; | ||
| }; | ||
| Key.withDefault = function(configure: (builder: IResolverBuilder<T>) => IResolver): InterfaceSymbol<T> { | ||
| Key.withDefault = function(): void { | ||
| throw Reporter.error(17, Key); | ||
| }; | ||
| Key.register = function(container: IContainer, key?: Key<T>): IResolver<T> { | ||
| const trueKey = key || Key; | ||
| return configure({ | ||
| instance(value: T): IResolver { | ||
| return container.registerResolver(trueKey, new Resolver(trueKey, ResolverStrategy.instance, value)); | ||
| }, | ||
| singleton(value: Function): IResolver { | ||
| return container.registerResolver(trueKey, new Resolver(trueKey, ResolverStrategy.singleton, value)); | ||
| }, | ||
| transient(value: Function): IResolver { | ||
| return container.registerResolver(trueKey, new Resolver(trueKey, ResolverStrategy.transient, value)); | ||
| }, | ||
| callback(value: ResolveCallback): IResolver { | ||
| return container.registerResolver(trueKey, new Resolver(trueKey, ResolverStrategy.callback, value)); | ||
| }, | ||
| aliasTo(destinationKey: T): IResolver { | ||
| return container.registerResolver(trueKey, new Resolver(trueKey, ResolverStrategy.alias, destinationKey)); | ||
| }, | ||
| }); | ||
| }; | ||
| return Key; | ||
| }; | ||
| return Key; | ||
| }, | ||
| inject(...dependencies: any[]): (target: any, property?: string, descriptor?: PropertyDescriptor | number) => any { | ||
| return function(target: any, key?, descriptor?) { | ||
| if (typeof descriptor === 'number') { // It's a parameter decorator. | ||
| if (!target.hasOwnProperty('inject')) { | ||
| target.inject = DI.getDesignParamTypes(target).slice(); | ||
| } | ||
| if (dependencies.length === 1) { | ||
| target.inject[descriptor] = dependencies[0]; | ||
| } | ||
| } else if (key) { // It's a property decorator. Not supported by the container without plugins. | ||
| const actualTarget = target.constructor; | ||
| const inject = actualTarget.inject || (actualTarget.inject = {}); | ||
| inject[key] = dependencies[0]; | ||
| } else if (descriptor) { // It's a function decorator (not a Class constructor) | ||
| const fn = descriptor.value; | ||
| fn.inject = dependencies; | ||
| } else { // It's a class decorator. | ||
| if (!dependencies || dependencies.length === 0) { | ||
| target.inject = DI.getDesignParamTypes(target).slice(); | ||
| } else { | ||
| target.inject = dependencies; | ||
| } | ||
| } | ||
| }; | ||
| } | ||
| }; | ||
| export const IContainer = DI.createInterface<IContainer>().noDefault(); | ||
| export const IServiceLocator = IContainer as InterfaceSymbol<IServiceLocator>; | ||
| function createResolver( | ||
| getter: (key: any, handler: IContainer, requestor: IContainer) => any | ||
| ): (key: any) => ReturnType<typeof DI.inject> { | ||
| return function(key: any): ReturnType<typeof DI.inject> { | ||
| const Key = function Key(target: Injectable, property?: string, descriptor?: PropertyDescriptor | number): void { | ||
| return DI.inject(Key)(target, property, descriptor); | ||
| }; | ||
| (Key as any).resolve = function(handler: IContainer, requestor: IContainer): any { | ||
| return getter(key, handler, requestor); | ||
| }; | ||
| return Key; | ||
| }; | ||
| } | ||
| export const inject = DI.inject; | ||
| export const all = createResolver((key: any, handler: IContainer, requestor: IContainer) => requestor.getAll(key)); | ||
| export const lazy = createResolver((key: any, handler: IContainer, requestor: IContainer) => { | ||
| let instance: any = null; // cache locally so that lazy always returns the same instance once resolved | ||
| return () => { | ||
| if (instance === null) { | ||
| instance = requestor.get(key); | ||
| } | ||
| return instance; | ||
| }; | ||
| }); | ||
| export const optional = createResolver((key: any, handler: IContainer, requestor: IContainer) => { | ||
| if (requestor.has(key, true)) { | ||
| return requestor.get(key); | ||
| } else { | ||
| return null; | ||
| } | ||
| }); | ||
| /*@internal*/ | ||
| export const enum ResolverStrategy { | ||
| instance = 0, | ||
| singleton = 1, | ||
| transient = 2, | ||
| callback = 3, | ||
| array = 4, | ||
| alias = 5 | ||
| } | ||
| /*@internal*/ | ||
| export class Resolver implements IResolver, IRegistration { | ||
| constructor(public key: any, public strategy: ResolverStrategy, public state: any) {} | ||
| public register(container: IContainer, key?: any): IResolver { | ||
| return container.registerResolver(key || this.key, this); | ||
| } | ||
| public resolve(handler: IContainer, requestor: IContainer): any { | ||
| switch (this.strategy) { | ||
| case ResolverStrategy.instance: | ||
| return this.state; | ||
| case ResolverStrategy.singleton: | ||
| this.strategy = ResolverStrategy.instance; | ||
| return this.state = handler.getFactory(this.state).construct(handler); | ||
| case ResolverStrategy.transient: | ||
| // Always create transients from the requesting container | ||
| return handler.getFactory(this.state).construct(requestor); | ||
| case ResolverStrategy.callback: | ||
| return (this.state as ResolveCallback)(handler, requestor, this); | ||
| case ResolverStrategy.array: | ||
| return this.state[0].resolve(handler, requestor); | ||
| case ResolverStrategy.alias: | ||
| return handler.get(this.state); | ||
| default: | ||
| throw Reporter.error(6, this.strategy); | ||
| } | ||
| } | ||
| public getFactory(container: IContainer): IFactory | null { | ||
| switch (this.strategy) { | ||
| case ResolverStrategy.singleton: | ||
| case ResolverStrategy.transient: | ||
| return container.getFactory(this.state); | ||
| default: | ||
| return null; | ||
| } | ||
| } | ||
| } | ||
| /*@internal*/ | ||
| export interface IInvoker { | ||
| invoke(container: IContainer, fn: Function, dependencies: any[]): any; | ||
| invokeWithDynamicDependencies( | ||
| container: IContainer, | ||
| fn: Function, | ||
| staticDependencies: any[], | ||
| dynamicDependencies: any[] | ||
| ): any; | ||
| } | ||
| /*@internal*/ | ||
| export class Factory implements IFactory { | ||
| private transformers: ((instance: any) => any)[] | null = null; | ||
| constructor(public type: Function, private invoker: IInvoker, private dependencies: any[]) { } | ||
| public static create(type: Function): IFactory { | ||
| const dependencies = DI.getDependencies(type); | ||
| const invoker = classInvokers[dependencies.length] || fallbackInvoker; | ||
| return new Factory(type, invoker, dependencies); | ||
| } | ||
| public construct(container: IContainer, dynamicDependencies?: any[]): any { | ||
| const transformers = this.transformers; | ||
| let instance = dynamicDependencies !== undefined | ||
| ? this.invoker.invokeWithDynamicDependencies(container, this.type, this.dependencies, dynamicDependencies) | ||
| : this.invoker.invoke(container, this.type, this.dependencies); | ||
| if (transformers === null) { | ||
| return instance; | ||
| } | ||
| for (let i = 0, ii = transformers.length; i < ii; ++i) { | ||
| instance = transformers[i](instance); | ||
| } | ||
| return instance; | ||
| } | ||
| public registerTransformer(transformer: (instance: any) => any): boolean { | ||
| if (this.transformers === null) { | ||
| this.transformers = []; | ||
| } | ||
| this.transformers.push(transformer); | ||
| return true; | ||
| } | ||
| } | ||
| /*@internal*/ | ||
| export interface IContainerConfiguration { | ||
| factories?: Map<Function, IFactory>; | ||
| } | ||
| const containerResolver: IResolver = { | ||
| resolve(handler: IContainer, requestor: IContainer): IContainer { | ||
| return requestor; | ||
| } | ||
| }; | ||
| function isRegistry(obj: IRegistry | Record<string, IRegistry>): obj is IRegistry { | ||
| return typeof obj.register === 'function'; | ||
| } | ||
| /*@internal*/ | ||
| export class Container implements IContainer { | ||
| private parent: Container | null = null; | ||
| private resolvers: Map<any, IResolver> = new Map<any, IResolver>(); | ||
| private factories: Map<Function, IFactory>; | ||
| private configuration: IContainerConfiguration; | ||
| constructor(configuration: IContainerConfiguration = {}) { | ||
| this.configuration = configuration; | ||
| this.factories = configuration.factories || (configuration.factories = new Map()); | ||
| this.resolvers.set(IContainer, containerResolver); | ||
| } | ||
| public register(registry: (IRegistry | Record<string, Partial<IRegistry>>)): void; | ||
| public register(...params: (IRegistry | Record<string, Partial<IRegistry>>)[]): void { | ||
| for (let i = 0, ii = params.length; i < ii; ++i) { | ||
| const current = params[i] as IRegistry | Record<string, IRegistry>; | ||
| if (isRegistry(current)) { | ||
| current.register(this); | ||
| } else { | ||
| const keys = Object.keys(current); | ||
| for (let j = 0, jj = keys.length; j < jj; ++j) { | ||
| const value = current[keys[j]]; | ||
| // note: we could remove this if-branch and call this.register directly | ||
| // - the extra check is just a perf tweak to create fewer unnecessary arrays by the spread operator | ||
| if (isRegistry(value)) { | ||
| value.register(this); | ||
| } else { | ||
| this.register(value); | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| public registerResolver(key: any, resolver: IResolver): IResolver { | ||
| validateKey(key); | ||
| const resolvers = this.resolvers; | ||
| const result = resolvers.get(key); | ||
| if (result === undefined) { | ||
| resolvers.set(key, resolver); | ||
| } else if (result instanceof Resolver && (result as Resolver).strategy === ResolverStrategy.array) { | ||
| (result as Resolver).state.push(resolver); | ||
| } else { | ||
| resolvers.set(key, new Resolver(key, ResolverStrategy.array, [result, resolver])); | ||
| } | ||
| return resolver; | ||
| } | ||
| public registerTransformer(key: any, transformer: (instance: any) => any): boolean { | ||
| const resolver = this.getResolver(key); | ||
| if (resolver === null) { | ||
| return false; | ||
| } | ||
| if (resolver.getFactory) { | ||
| const handler = resolver.getFactory(this); | ||
| if (handler === null) { | ||
| return false; | ||
| } | ||
| return handler.registerTransformer(transformer); | ||
| } | ||
| return false; | ||
| } | ||
| public getResolver(key: any, autoRegister = true): IResolver | null { | ||
| validateKey(key); | ||
| if (key.resolve) { | ||
| return key; | ||
| } | ||
| let current: Container = this; | ||
| while (current !== null) { | ||
| const resolver = current.resolvers.get(key); | ||
| if (resolver === undefined) { | ||
| if (current.parent === null) { | ||
| return autoRegister ? this.jitRegister(key, current) : null; | ||
| } | ||
| current = current.parent; | ||
| } else { | ||
| return resolver; | ||
| } | ||
| } | ||
| return null; | ||
| } | ||
| public has(key: any, searchAncestors: boolean = false): boolean { | ||
| return this.resolvers.has(key) | ||
| ? true | ||
| : searchAncestors && this.parent !== null | ||
| ? this.parent.has(key, true) | ||
| : false; | ||
| } | ||
| public get(key: any): any { | ||
| validateKey(key); | ||
| if (key.resolve) { | ||
| return key.resolve(this, this); | ||
| } | ||
| let current: Container = this; | ||
| while (current !== null) { | ||
| const resolver = current.resolvers.get(key); | ||
| if (resolver === undefined) { | ||
| if (current.parent === null) { | ||
| return this.jitRegister(key, current).resolve(current, this); | ||
| } | ||
| current = current.parent; | ||
| } else { | ||
| return resolver.resolve(current, this); | ||
| } | ||
| } | ||
| } | ||
| public getAll(key: any): ReadonlyArray<any> { | ||
| validateKey(key); | ||
| let current: Container | null = this; | ||
| while (current !== null) { | ||
| const resolver = current.resolvers.get(key); | ||
| if (resolver === undefined) { | ||
| if (this.parent === null) { | ||
| return PLATFORM.emptyArray; | ||
| } | ||
| current = current.parent; | ||
| } else { | ||
| return buildAllResponse(resolver, current, this); | ||
| } | ||
| } | ||
| return PLATFORM.emptyArray; | ||
| } | ||
| public getFactory(type: Function): IFactory { | ||
| let factory = this.factories.get(type); | ||
| if (factory === undefined) { | ||
| factory = Factory.create(type); | ||
| this.factories.set(type, factory); | ||
| } | ||
| return factory; | ||
| } | ||
| public createChild(): IContainer { | ||
| const child = new Container(this.configuration); | ||
| child.parent = this; | ||
| return child; | ||
| } | ||
| private jitRegister(keyAsValue: any, handler: Container): IResolver { | ||
| if (keyAsValue.register) { | ||
| return keyAsValue.register(handler, keyAsValue) || null; | ||
| } | ||
| const resolver = new Resolver(keyAsValue, ResolverStrategy.singleton, keyAsValue); | ||
| handler.resolvers.set(keyAsValue, resolver); | ||
| return resolver; | ||
| } | ||
| } | ||
| export const Registration = { | ||
| instance(key: any, value: any): IRegistration { | ||
| return new Resolver(key, ResolverStrategy.instance, value); | ||
| }, | ||
| singleton(key: any, value: Function): IRegistration { | ||
| return new Resolver(key, ResolverStrategy.singleton, value); | ||
| }, | ||
| transient(key: any, value: Function): IRegistration { | ||
| return new Resolver(key, ResolverStrategy.transient, value); | ||
| }, | ||
| callback(key: any, callback: ResolveCallback): IRegistration { | ||
| return new Resolver(key, ResolverStrategy.callback, callback); | ||
| }, | ||
| alias(originalKey: any, aliasKey: any): IRegistration { | ||
| return new Resolver(aliasKey, ResolverStrategy.alias, originalKey); | ||
| }, | ||
| interpret(interpreterKey: any, ...rest: any[]): IRegistry { | ||
| return { | ||
| register(container: IContainer): void { | ||
| const resolver = container.getResolver<IRegistry>(interpreterKey); | ||
| if (resolver !== null) { | ||
| let registry: IRegistry | null = null; | ||
| if (resolver.getFactory) { | ||
| const factory = resolver.getFactory(container); | ||
| if (factory !== null) { | ||
| registry = factory.construct(container, rest); | ||
| } | ||
| } else { | ||
| registry = resolver.resolve(container, container); | ||
| } | ||
| if (registry !== null) { | ||
| registry.register(container); | ||
| } | ||
| } | ||
| } | ||
| }; | ||
| } | ||
| }; | ||
| /*@internal*/ | ||
| export function validateKey(key: any): void { | ||
| // note: design:paramTypes which will default to Object if the param types cannot be statically analyzed by tsc | ||
| // this check is intended to properly report on that problem - under no circumstance should Object be a valid key anyway | ||
| if (key === null || key === undefined || key === Object) { | ||
| throw Reporter.error(5); | ||
| } | ||
| } | ||
| function buildAllResponse(resolver: IResolver, handler: IContainer, requestor: IContainer): any[] { | ||
| if (resolver instanceof Resolver && resolver.strategy === ResolverStrategy.array) { | ||
| const state = resolver.state; | ||
| let i = state.length; | ||
| const results = new Array(i); | ||
| while (i--) { | ||
| results[i] = state[i].get(handler, requestor); | ||
| } | ||
| return results; | ||
| } | ||
| return [resolver.resolve(handler, requestor)]; | ||
| } | ||
| /*@internal*/ | ||
| export const classInvokers: IInvoker[] = [ | ||
| { | ||
| invoke<T extends Constructable<K>, K>(container: IContainer, Type: T): K { | ||
| return new Type(); | ||
| }, | ||
| invokeWithDynamicDependencies | ||
| }, | ||
| { | ||
| invoke<T extends Constructable<K>, K>(container: IContainer, Type: T, deps: any[]): K { | ||
| return new Type(container.get(deps[0])); | ||
| }, | ||
| invokeWithDynamicDependencies | ||
| }, | ||
| { | ||
| invoke<T extends Constructable<K>, K>(container: IContainer, Type: T, deps: any[]): K { | ||
| return new Type(container.get(deps[0]), container.get(deps[1])); | ||
| }, | ||
| invokeWithDynamicDependencies | ||
| }, | ||
| { | ||
| invoke<T extends Constructable<K>, K>(container: IContainer, Type: T, deps: any[]): K { | ||
| return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2])); | ||
| }, | ||
| invokeWithDynamicDependencies | ||
| }, | ||
| { | ||
| invoke<T extends Constructable<K>, K>(container: IContainer, Type: T, deps: any[]): K { | ||
| return new Type( | ||
| container.get(deps[0]), | ||
| container.get(deps[1]), | ||
| container.get(deps[2]), | ||
| container.get(deps[3]) | ||
| ); | ||
| }, | ||
| invokeWithDynamicDependencies | ||
| }, | ||
| { | ||
| invoke<T extends Constructable<K>, K>(container: IContainer, Type: T, deps: any[]): K { | ||
| return new Type( | ||
| container.get(deps[0]), | ||
| container.get(deps[1]), | ||
| container.get(deps[2]), | ||
| container.get(deps[3]), | ||
| container.get(deps[4]) | ||
| ); | ||
| }, | ||
| invokeWithDynamicDependencies | ||
| } | ||
| ]; | ||
| /*@internal*/ | ||
| export const fallbackInvoker: IInvoker = { | ||
| invoke: invokeWithDynamicDependencies as any, | ||
| invokeWithDynamicDependencies | ||
| }; | ||
| /*@internal*/ | ||
| export function invokeWithDynamicDependencies<T extends Constructable<K>, K>( | ||
| container: IContainer, | ||
| Type: T, | ||
| staticDependencies: any[], | ||
| dynamicDependencies: any[] | ||
| ): K { | ||
| let i = staticDependencies.length; | ||
| let args = new Array(i); | ||
| let lookup; | ||
| while (i--) { | ||
| lookup = staticDependencies[i]; | ||
| if (lookup === null || lookup === undefined) { | ||
| throw Reporter.error(7, `Index ${i}.`); | ||
| } else { | ||
| args[i] = container.get(lookup); | ||
| } | ||
| } | ||
| if (dynamicDependencies !== undefined) { | ||
| args = args.concat(dynamicDependencies); | ||
| } | ||
| return Reflect.construct(Type, args); | ||
| } |
| export * from './di'; | ||
| export * from './interfaces'; | ||
| export * from './platform'; | ||
| export * from './reporter'; |
| export interface ICallable { | ||
| call(...args: any[]): any; | ||
| } | ||
| export interface IDisposable { | ||
| dispose(): void; | ||
| } | ||
| export type Constructable<T = {}> = { | ||
| // tslint:disable-next-line:no-any | ||
| new(...args: any[]): T; | ||
| }; | ||
| export type Decoratable<TOptional, TRequired> = Function & { | ||
| readonly prototype: Partial<TOptional> & Required<TRequired>; | ||
| // tslint:disable-next-line:no-any | ||
| new(...args: any[]): Partial<TOptional> & Required<TRequired>; | ||
| }; | ||
| export type Decorated<TOptional, TRequired> = Function & { | ||
| readonly prototype: Required<TOptional> & Required<TRequired>; | ||
| // tslint:disable-next-line:no-any | ||
| new(...args: any[]): any; | ||
| }; | ||
| export type Injectable<T = {}> = Constructable<T> & { inject?: any[] }; | ||
| export type IIndexable<T extends object = object> = T & { [key: string]: any }; | ||
| export type ImmutableObject<T> = | ||
| T extends [infer A] ? Immutable<[A]> : | ||
| T extends [infer A, infer B] ? Immutable<[A, B]> : | ||
| T extends [infer A, infer B, infer C] ? Immutable<[A, B, C]> : | ||
| T extends [infer A, infer B, infer C, infer D] ? Immutable<[A, B, C, D]> : | ||
| T extends [infer A, infer B, infer C, infer D, infer E] ? Immutable<[A, B, C, D, E]> : | ||
| T extends [infer A, infer B, infer C, infer D, infer E, infer F] ? Immutable<[A, B, C, D, E, F]> : | ||
| T extends [infer A, infer B, infer C, infer D, infer E, infer F, infer G] ? Immutable<[A, B, C, D, E, F, G]> : | ||
| T extends (infer A)[] ? ImmutableArray<A> : | ||
| T extends Function ? T : // can change to never to forbid functions | ||
| T extends Map<infer U, infer V> ? ReadonlyMap<Immutable<U>, Immutable<V>> : | ||
| T extends Set<infer U> ? ReadonlySet<Immutable<U>> : | ||
| T extends Record<string, infer V> ? Record<string, Immutable<V>> : | ||
| T extends object ? Immutable<T> : | ||
| T; | ||
| export interface ImmutableArray<T> extends ReadonlyArray<ImmutableObject<T>> {} | ||
| export type Immutable<T> = { readonly [P in keyof T]: ImmutableObject<T[P]> }; | ||
| export type Writable<T> = { | ||
| -readonly [K in keyof T]: T[K] | ||
| }; | ||
| export type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>; | ||
| export type Primitive = undefined | null | number | boolean | symbol | string; | ||
| export type Unwrap<T> = | ||
| T extends (infer U)[] ? U : | ||
| T extends (...args: any[]) => infer U ? U : | ||
| T extends Promise<infer U> ? U : | ||
| T; |
| const camelCaseLookup = {}; | ||
| const kebabCaseLookup = {}; | ||
| export const PLATFORM = { | ||
| // tslint:disable-next-line:no-any | ||
| global: (function(): any { | ||
| // Workers don’t have `window`, only `self` | ||
| // tslint:disable-next-line:no-typeof-undefined | ||
| if (typeof self !== 'undefined') { | ||
| return self; | ||
| } | ||
| // tslint:disable-next-line:no-typeof-undefined | ||
| if (typeof global !== 'undefined') { | ||
| return global; | ||
| } | ||
| // Not all environments allow eval and Function | ||
| // Use only as a last resort: | ||
| // tslint:disable-next-line:no-function-constructor-with-string-args | ||
| return new Function('return this')(); | ||
| })(), | ||
| emptyArray: Object.freeze([]), | ||
| emptyObject: Object.freeze({}), | ||
| /* tslint:disable-next-line:no-empty */ | ||
| noop(): void { }, | ||
| now(): number { | ||
| return performance.now(); | ||
| }, | ||
| camelCase(input: string): string { | ||
| // benchmark: http://jsben.ch/qIz4Z | ||
| let value = camelCaseLookup[input]; | ||
| if (value !== undefined) return value; | ||
| value = ''; | ||
| let first = true; | ||
| let sep = false; | ||
| let char: string; | ||
| for (let i = 0, ii = input.length; i < ii; ++i) { | ||
| char = input.charAt(i); | ||
| if (char === '-' || char === '.' || char === '_') { | ||
| sep = true; // skip separators | ||
| } else { | ||
| value = value + (first ? char.toLowerCase() : (sep ? char.toUpperCase() : char)); | ||
| sep = false; | ||
| } | ||
| first = false; | ||
| } | ||
| return camelCaseLookup[input] = value; | ||
| }, | ||
| kebabCase(input: string): string { | ||
| // benchmark: http://jsben.ch/v7K9T | ||
| let value = kebabCaseLookup[input]; | ||
| if (value !== undefined) return value; | ||
| value = ''; | ||
| let first = true; | ||
| let char: string, lower: string; | ||
| for (let i = 0, ii = input.length; i < ii; ++i) { | ||
| char = input.charAt(i); | ||
| lower = char.toLowerCase(); | ||
| value = value + (first ? lower : (char !== lower ? `-${lower}` : lower)); | ||
| first = false; | ||
| } | ||
| return kebabCaseLookup[input] = value; | ||
| }, | ||
| // tslint:disable-next-line:no-any | ||
| toArray<T = any>(input: ArrayLike<T>): T[] { | ||
| // benchmark: http://jsben.ch/xjsyF | ||
| const len = input.length; | ||
| const arr = Array(len); | ||
| for (let i = 0; i < len; ++i) { | ||
| arr[i] = input[i]; | ||
| } | ||
| return arr; | ||
| }, | ||
| requestAnimationFrame(callback: (time: number) => void): number { | ||
| return requestAnimationFrame(callback); | ||
| } | ||
| }; |
| export const Reporter = { | ||
| /* tslint:disable-next-line:no-empty */ | ||
| write(code: number, ...params: any[]): void { }, | ||
| error(code: number, ...params: any[]): Error { return new Error(`Code ${code}`); } | ||
| }; |
+90
-5
@@ -6,14 +6,99 @@ # Change Log | ||
| <a name="0.3.0"></a> | ||
| # 0.3.0 (2018-10-12) | ||
| ### Features: | ||
| * **kernel:** add decoratable interface to support strongly typed decorators ([f67a414](https://github.com/aurelia/aurelia/commit/f67a414)) | ||
| * **binding:** add @connectable decorator back in (strongly typed) ([f67a414](https://github.com/aurelia/aurelia/commit/f67a414)) | ||
| * **all:** implement InterpolationBinding ([f67a414](https://github.com/aurelia/aurelia/commit/f67a414)) | ||
| * **unparser:** implement interpolation unparsing ([f67a414](https://github.com/aurelia/aurelia/commit/f67a414)) | ||
| * **kernel:** add unwrap interface ([197235c](https://github.com/aurelia/aurelia/commit/197235c)) | ||
| * **ast:** add visitor interface and implement accept methods on AST ([197235c](https://github.com/aurelia/aurelia/commit/197235c)) | ||
| * **expression-parser:** allow member expressions on numeric literals ([197235c](https://github.com/aurelia/aurelia/commit/197235c)) | ||
| * **expression-parser:** map empty attribute value to empty string for bound properties ([7a92cd8](https://github.com/aurelia/aurelia/commit/7a92cd8)) | ||
| ### Bug Fixes: | ||
| * **kernel:** fix decorated interface ([f67a414](https://github.com/aurelia/aurelia/commit/f67a414)) | ||
| * **binding:** wrap updatetarget/updatesource so vCurrent BBs work again ([f67a414](https://github.com/aurelia/aurelia/commit/f67a414)) | ||
| * **expression-parser:** fix differentation for caching of expressions/interpolations ([f67a414](https://github.com/aurelia/aurelia/commit/f67a414)) | ||
| * **iterator-binding:** correctly compile and render ForOfStatement ([f67a414](https://github.com/aurelia/aurelia/commit/f67a414)) | ||
| * **debug:** correct / update unparser and debug mode ([197235c](https://github.com/aurelia/aurelia/commit/197235c)) | ||
| * **expression-parser:** fix parsing error with trailing elision ([197235c](https://github.com/aurelia/aurelia/commit/197235c)) | ||
| * **expression-parser:** allow AccessThis as the last element of an array ([197235c](https://github.com/aurelia/aurelia/commit/197235c)) | ||
| * **expression-parser:** allow AccessThis as the condition in a conditional ([197235c](https://github.com/aurelia/aurelia/commit/197235c)) | ||
| * **expression-parser:** allow AccessThis as left-hand side of binary expressions ([197235c](https://github.com/aurelia/aurelia/commit/197235c)) | ||
| * **expression-parser:** reset access after parsing non-identifiers ([197235c](https://github.com/aurelia/aurelia/commit/197235c)) | ||
| * **unparser:** explicitly reconstruct precedence ([197235c](https://github.com/aurelia/aurelia/commit/197235c)) | ||
| * **DI:** alias registration param order and tests (#202) ([1683135](https://github.com/aurelia/aurelia/commit/1683135)) | ||
| * **resources:** ensure null is returned for non-existing resources ([7a92cd8](https://github.com/aurelia/aurelia/commit/7a92cd8)) | ||
| * **template-compiler:** correct a few edge cases in target and bindingMode resolution ([7a92cd8](https://github.com/aurelia/aurelia/commit/7a92cd8)) | ||
| * **template-compiler:** correct handling of kebab-cased custom attributes ([7a92cd8](https://github.com/aurelia/aurelia/commit/7a92cd8)) | ||
| * **repeat.for:** add missing instruction properties ([7a92cd8](https://github.com/aurelia/aurelia/commit/7a92cd8)) | ||
| ### Performance Improvements: | ||
| * **expression-parser:** remove unreachable branch ([f67a414](https://github.com/aurelia/aurelia/commit/f67a414)) | ||
| * **expression-parser:** use explicit numeric comparisons for bitwise operators ([197235c](https://github.com/aurelia/aurelia/commit/197235c)) | ||
| * **template-compiler:** index the inspect/resolve buffers directly instead of destructuring ([7a92cd8](https://github.com/aurelia/aurelia/commit/7a92cd8)) | ||
| ### Refactorings: | ||
| * **binding:** cleanup/shuffle some interfaces accordingly ([f67a414](https://github.com/aurelia/aurelia/commit/f67a414)) | ||
| * **template-compiler:** cleanup/inline instruction classes ([f67a414](https://github.com/aurelia/aurelia/commit/f67a414)) | ||
| * **binding-command:** reuse specific binding command prototype methods on the default binding command ([7a92cd8](https://github.com/aurelia/aurelia/commit/7a92cd8)) | ||
| * **template-compiler:** destructure with reused object ([7a92cd8](https://github.com/aurelia/aurelia/commit/7a92cd8)) | ||
| <a name="0.2.0"></a> | ||
| # 0.2.0 (2018-09-18) | ||
| ### Features: | ||
| ### Bug Fixes | ||
| * **di:** recurse through static registrations to find register methods in more edge cases ([6bc2d4d](https://github.com/aurelia/aurelia/commit/6bc2d4d)) | ||
| * **kernel:** add fast camelCase and kebabCase functions with caching ([8debe4f](https://github.com/aurelia/aurelia/commit/8debe4f)) | ||
| * **observers:** auto-enable collection observers and make the toggles idempotent ([d6a10b5](https://github.com/aurelia/aurelia/commit/d6a10b5)) | ||
| * **runtime:** convert with attribute to use render location (#64) ([5830a36](https://github.com/aurelia/aurelia/commit/5830a36)) | ||
| * **runtime:** convert with attribute to use render location ([5830a36](https://github.com/aurelia/aurelia/commit/5830a36)) | ||
| * **runtime:** improvements to attribute and element bindable control and common interfaces ([5830a36](https://github.com/aurelia/aurelia/commit/5830a36)) | ||
| * **binding:** implement ChangeSet (#58) ([144b1c6](https://github.com/aurelia/aurelia/commit/144b1c6)) | ||
| * **binding:** implement ChangeSet ([144b1c6](https://github.com/aurelia/aurelia/commit/144b1c6)) | ||
| * **di:** convert invokers to an array ([#106](https://github.com/aurelia/aurelia/issues/106)) ([9236dec](https://github.com/aurelia/aurelia/commit/9236dec)) | ||
| ### Bug Fixes: | ||
| ### Features | ||
| * **di:** invoke correct method on array strategy resolver ([6bc2d4d](https://github.com/aurelia/aurelia/commit/6bc2d4d)) | ||
| * **di:** invalidate Object keys to help diagnose invalid design:paramTypes ([6bc2d4d](https://github.com/aurelia/aurelia/commit/6bc2d4d)) | ||
| * **di:** add a non-any type alternative to the InterfaceSymbol<T> so that container.get() returns correctly typed instances ([6bc2d4d](https://github.com/aurelia/aurelia/commit/6bc2d4d)) | ||
| * **examples:** correct versions ([1b7c764](https://github.com/aurelia/aurelia/commit/1b7c764)) | ||
| * **tsconfig:** correct extends path ([797674f](https://github.com/aurelia/aurelia/commit/797674f)) | ||
| * **di:** convert invokers to an array (#106) ([9236dec](https://github.com/aurelia/aurelia/commit/9236dec)) | ||
| * **jit-parcel:** remove else for now, fix instructions ([d6a10b5](https://github.com/aurelia/aurelia/commit/d6a10b5)) | ||
| * **template-compiler:** wrap the nodes in a fragment ([d6a10b5](https://github.com/aurelia/aurelia/commit/d6a10b5)) | ||
| * **jit-parcel:** remove path mappings from tsconfig ([d6a10b5](https://github.com/aurelia/aurelia/commit/d6a10b5)) | ||
| * **template-compiler:** use firstElementChild instead of wrapper ([d6a10b5](https://github.com/aurelia/aurelia/commit/d6a10b5)) | ||
| * **template-compiler:** various small tweaks and fixes, make example work ([d6a10b5](https://github.com/aurelia/aurelia/commit/d6a10b5)) | ||
| * **jit-parcel:** make the example work with something simple ([d6a10b5](https://github.com/aurelia/aurelia/commit/d6a10b5)) | ||
| * **aurelia:** set isStarted=true after tasks have finished ([d6a10b5](https://github.com/aurelia/aurelia/commit/d6a10b5)) | ||
| * **e2e:** move publish into e2e job ([d6a10b5](https://github.com/aurelia/aurelia/commit/d6a10b5)) | ||
| * **ci:** fix typo ([d6a10b5](https://github.com/aurelia/aurelia/commit/d6a10b5)) | ||
| * **ci:** set the correct path before each cmd ([d6a10b5](https://github.com/aurelia/aurelia/commit/d6a10b5)) | ||
| * **ci:** try a different approach for the workspaces ([d6a10b5](https://github.com/aurelia/aurelia/commit/d6a10b5)) | ||
| * **runtime:** correct observer current value update and callback ordering ([5830a36](https://github.com/aurelia/aurelia/commit/5830a36)) | ||
| * **runtime:** ensure all bindable callback slots are initialized ([5830a36](https://github.com/aurelia/aurelia/commit/5830a36)) | ||
| * **runtime-behavior:** remove use of Toggle in favor of simple boolean ([5830a36](https://github.com/aurelia/aurelia/commit/5830a36)) | ||
| * **observation:** fix subscriber typing ([144b1c6](https://github.com/aurelia/aurelia/commit/144b1c6)) | ||
| * **kernel:** scripts working ([9302580](https://github.com/aurelia/aurelia/commit/9302580)) | ||
| * **all:** lots of path fixes and a few typing fixes, make sure everything builds correctly ([9302580](https://github.com/aurelia/aurelia/commit/9302580)) | ||
| * **test:** make all the tests run via lerna ([9302580](https://github.com/aurelia/aurelia/commit/9302580)) | ||
| * **binding:** implement ChangeSet ([#58](https://github.com/aurelia/aurelia/issues/58)) ([144b1c6](https://github.com/aurelia/aurelia/commit/144b1c6)) | ||
| * **runtime:** convert with attribute to use render location ([#64](https://github.com/aurelia/aurelia/issues/64)) ([5830a36](https://github.com/aurelia/aurelia/commit/5830a36)) | ||
| ### Refactorings: | ||
| * **di:** append new resolvers on existing keys to a single array strategy resolver instead of nesting them ([6bc2d4d](https://github.com/aurelia/aurelia/commit/6bc2d4d)) | ||
| * **bindable:** use platform.kebabCase ([8debe4f](https://github.com/aurelia/aurelia/commit/8debe4f)) | ||
| * **binding:** use ChangeSet instead of TaskQueue ([144b1c6](https://github.com/aurelia/aurelia/commit/144b1c6)) | ||
| * **property-observer:** make reusable decorator for setter/observer ([144b1c6](https://github.com/aurelia/aurelia/commit/144b1c6)) |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"di.d.ts","sourceRoot":"","sources":["../src/di.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"di.d.ts","sourceRoot":"","sources":["../src/di.ts"],"names":[],"mappings":"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"} |
+12
-41
| const camelCaseLookup = {}; | ||
| const kebabCaseLookup = {}; | ||
| const PLATFORM = { | ||
| // tslint:disable-next-line:no-any | ||
| global: (function () { | ||
| // Workers don’t have `window`, only `self` | ||
| // tslint:disable-next-line:no-typeof-undefined | ||
| if (typeof self !== 'undefined') { | ||
| return self; | ||
| } | ||
| // tslint:disable-next-line:no-typeof-undefined | ||
| if (typeof global !== 'undefined') { | ||
@@ -14,2 +17,3 @@ return global; | ||
| // Use only as a last resort: | ||
| // tslint:disable-next-line:no-function-constructor-with-string-args | ||
| return new Function('return this')(); | ||
@@ -62,2 +66,3 @@ })(), | ||
| }, | ||
| // tslint:disable-next-line:no-any | ||
| toArray(input) { | ||
@@ -74,34 +79,2 @@ // benchmark: http://jsben.ch/xjsyF | ||
| return requestAnimationFrame(callback); | ||
| }, | ||
| createTaskFlushRequester(onFlush) { | ||
| return function requestFlush() { | ||
| // We dispatch a timeout with a specified delay of 0 for engines that | ||
| // can reliably accommodate that request. This will usually be snapped | ||
| // to a 4 millisecond delay, but once we're flushing, there's no delay | ||
| // between events. | ||
| const timeoutHandle = setTimeout(handleFlushTimer, 0); | ||
| // However, since this timer gets frequently dropped in Firefox | ||
| // workers, we enlist an interval handle that will try to fire | ||
| // an event 20 times per second until it succeeds. | ||
| const intervalHandle = setInterval(handleFlushTimer, 50); | ||
| function handleFlushTimer() { | ||
| // Whichever timer succeeds will cancel both timers and request the | ||
| // flush. | ||
| clearTimeout(timeoutHandle); | ||
| clearInterval(intervalHandle); | ||
| onFlush(); | ||
| } | ||
| }; | ||
| }, | ||
| createMicroTaskFlushRequestor(onFlush) { | ||
| const observer = new MutationObserver(onFlush); | ||
| const node = document.createTextNode(''); | ||
| const values = Object.create(null); | ||
| let val = 'a'; | ||
| values.a = 'b'; | ||
| values.b = 'a'; | ||
| observer.observe(node, { characterData: true }); | ||
| return function requestFlush() { | ||
| node.data = val = values[val]; | ||
| }; | ||
| } | ||
@@ -165,17 +138,18 @@ }; | ||
| Key.register = function (container, key) { | ||
| const trueKey = key || Key; | ||
| return configure({ | ||
| instance(value) { | ||
| return container.registerResolver(Key, new Resolver(key || Key, 0 /* instance */, value)); | ||
| return container.registerResolver(trueKey, new Resolver(trueKey, 0 /* instance */, value)); | ||
| }, | ||
| singleton(value) { | ||
| return container.registerResolver(Key, new Resolver(key || Key, 1 /* singleton */, value)); | ||
| return container.registerResolver(trueKey, new Resolver(trueKey, 1 /* singleton */, value)); | ||
| }, | ||
| transient(value) { | ||
| return container.registerResolver(Key, new Resolver(key || Key, 2 /* transient */, value)); | ||
| return container.registerResolver(trueKey, new Resolver(trueKey, 2 /* transient */, value)); | ||
| }, | ||
| callback(value) { | ||
| return container.registerResolver(Key, new Resolver(key || Key, 3 /* callback */, value)); | ||
| return container.registerResolver(trueKey, new Resolver(trueKey, 3 /* callback */, value)); | ||
| }, | ||
| aliasTo(destinationKey) { | ||
| return container.registerResolver(destinationKey, new Resolver(key || Key, 5 /* alias */, Key)); | ||
| return container.registerResolver(trueKey, new Resolver(trueKey, 5 /* alias */, destinationKey)); | ||
| }, | ||
@@ -397,3 +371,2 @@ }); | ||
| } | ||
| /* tslint:disable-next-line:no-this-assignment */ | ||
| let current = this; | ||
@@ -426,3 +399,2 @@ while (current !== null) { | ||
| } | ||
| /* tslint:disable-next-line:no-this-assignment */ | ||
| let current = this; | ||
@@ -444,3 +416,2 @@ while (current !== null) { | ||
| validateKey(key); | ||
| /* tslint:disable-next-line:no-this-assignment */ | ||
| let current = this; | ||
@@ -476,3 +447,3 @@ while (current !== null) { | ||
| if (keyAsValue.register) { | ||
| return keyAsValue.register(handler, keyAsValue); | ||
| return keyAsValue.register(handler, keyAsValue) || null; | ||
| } | ||
@@ -479,0 +450,0 @@ const resolver = new Resolver(keyAsValue, 1 /* singleton */, keyAsValue); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.es6.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} | ||
| {"version":3,"file":"index.es6.js","sources":["../src/platform.ts","../src/reporter.ts","../src/di.ts"],"sourcesContent":["const camelCaseLookup = {};\nconst kebabCaseLookup = {};\n\nexport const PLATFORM = {\n // tslint:disable-next-line:no-any\n global: (function(): any {\n // Workers don’t have `window`, only `self`\n // tslint:disable-next-line:no-typeof-undefined\n if (typeof self !== 'undefined') {\n return self;\n }\n\n // tslint:disable-next-line:no-typeof-undefined\n if (typeof global !== 'undefined') {\n return global;\n }\n\n // Not all environments allow eval and Function\n // Use only as a last resort:\n // tslint:disable-next-line:no-function-constructor-with-string-args\n return new Function('return this')();\n })(),\n emptyArray: Object.freeze([]),\n emptyObject: Object.freeze({}),\n /* tslint:disable-next-line:no-empty */\n noop(): void { },\n now(): number {\n return performance.now();\n },\n\n camelCase(input: string): string {\n // benchmark: http://jsben.ch/qIz4Z\n let value = camelCaseLookup[input];\n if (value !== undefined) return value;\n value = '';\n let first = true;\n let sep = false;\n let char: string;\n for (let i = 0, ii = input.length; i < ii; ++i) {\n char = input.charAt(i);\n if (char === '-' || char === '.' || char === '_') {\n sep = true; // skip separators\n } else {\n value = value + (first ? char.toLowerCase() : (sep ? char.toUpperCase() : char));\n sep = false;\n }\n first = false;\n }\n return camelCaseLookup[input] = value;\n },\n\n kebabCase(input: string): string {\n // benchmark: http://jsben.ch/v7K9T\n let value = kebabCaseLookup[input];\n if (value !== undefined) return value;\n value = '';\n let first = true;\n let char: string, lower: string;\n for (let i = 0, ii = input.length; i < ii; ++i) {\n char = input.charAt(i);\n lower = char.toLowerCase();\n value = value + (first ? lower : (char !== lower ? `-${lower}` : lower));\n first = false;\n }\n return kebabCaseLookup[input] = value;\n },\n\n // tslint:disable-next-line:no-any\n toArray<T = any>(input: ArrayLike<T>): T[] {\n // benchmark: http://jsben.ch/xjsyF\n const len = input.length;\n const arr = Array(len);\n for (let i = 0; i < len; ++i) {\n arr[i] = input[i];\n }\n return arr;\n },\n\n requestAnimationFrame(callback: (time: number) => void): number {\n return requestAnimationFrame(callback);\n }\n};\n","export const Reporter = {\n /* tslint:disable-next-line:no-empty */\n write(code: number, ...params: any[]): void { },\n error(code: number, ...params: any[]): Error { return new Error(`Code ${code}`); }\n};\n","// tslint:disable:no-reserved-keywords\nimport { Constructable, IIndexable, Injectable, Primitive } from './interfaces';\nimport { PLATFORM } from './platform';\nimport { Reporter } from './reporter';\n\nexport type ResolveCallback<T = any> = (handler?: IContainer, requestor?: IContainer, resolver?: IResolver) => T;\n\nexport type Key<T> = InterfaceSymbol<T> | Primitive | IIndexable | Function;\n\nexport type InterfaceSymbol<T> = (target: Injectable, property: string, index: number) => any;\n\nexport interface IDefaultableInterfaceSymbol<T> extends InterfaceSymbol<T> {\n withDefault(configure: (builder: IResolverBuilder<T>) => IResolver): InterfaceSymbol<T>;\n noDefault(): InterfaceSymbol<T>;\n}\n\nexport interface IResolver<T = any> {\n resolve(handler: IContainer, requestor: IContainer): T;\n getFactory?(container: IContainer): IFactory<T> | null;\n}\n\nexport interface IRegistration<T = any> {\n register(container: IContainer, key?: Key<T>): IResolver<T>;\n}\n\nexport interface IFactory<T = any> {\n readonly type: Function;\n registerTransformer(transformer: (instance: T) => T): boolean;\n construct(container: IContainer, dynamicDependencies?: any[]): T;\n}\n\nexport interface IServiceLocator {\n has(key: any, searchAncestors: boolean): boolean;\n\n get<T>(key: Key<T>): T;\n get<T extends Constructable>(key: T): InstanceType<T>;\n\n getAll<T>(key: Key<T>): ReadonlyArray<T>;\n getAll<T extends Constructable>(key: T): ReadonlyArray<InstanceType<T>>;\n}\n\nexport interface IRegistry {\n register(container: IContainer): void;\n}\n\nexport interface IContainer extends IServiceLocator {\n register(...params: (IRegistry | Record<string, Partial<IRegistry>>)[]): void;\n register(registry: IRegistry | Record<string, Partial<IRegistry>>): void;\n\n registerResolver<T>(key: Key<T>, resolver: IResolver<T>): IResolver<T>;\n registerResolver<T extends Constructable>(key: T, resolver: IResolver<InstanceType<T>>): IResolver<InstanceType<T>>;\n\n registerTransformer<T>(key: Key<T>, transformer: (instance: T) => T): boolean;\n registerTransformer<T extends Constructable>(key: T, transformer: (instance: InstanceType<T>) => T): boolean;\n\n getResolver<T>(key: Key<T>, autoRegister?: boolean): IResolver<T> | null;\n getResolver<T extends Constructable>(key: T, autoRegister?: boolean): IResolver<InstanceType<T>> | null;\n\n getFactory<T extends Constructable>(type: T): IFactory<InstanceType<T>>;\n\n createChild(): IContainer;\n}\n\nexport interface IResolverBuilder<T> {\n instance(value: T & IIndexable): IResolver;\n singleton(value: Constructable<T>): IResolver;\n transient(value: Constructable<T>): IResolver;\n callback(value: ResolveCallback<T>): IResolver;\n aliasTo(destinationKey: Key<T>): IResolver;\n}\n\nif (!('getOwnMetadata' in Reflect)) {\n (Reflect as any).getOwnMetadata = function(key: string, target: any): any {\n return target[key];\n };\n\n (Reflect as any).metadata = function(key: string, value: any): (target: any) => void {\n return function(target: any): void {\n target[key] = value;\n };\n };\n}\n\nexport const DI = {\n createContainer(): IContainer {\n return new Container();\n },\n\n getDesignParamTypes(target: any): any[] {\n return (Reflect as any).getOwnMetadata('design:paramtypes', target) || PLATFORM.emptyArray;\n },\n\n getDependencies(type: Function & { inject?: any }): any[] {\n let dependencies: any[];\n\n if (type.inject === undefined) {\n dependencies = DI.getDesignParamTypes(type);\n } else {\n dependencies = [];\n let ctor = type;\n\n while (typeof ctor === 'function') {\n if (ctor.hasOwnProperty('inject')) {\n dependencies.push(...ctor.inject);\n }\n\n ctor = Object.getPrototypeOf(ctor);\n }\n }\n\n return dependencies;\n },\n\n createInterface<T = any>(friendlyName?: string): IDefaultableInterfaceSymbol<T> {\n const Key: any = function(target: Injectable, property: string, index: number): any {\n const inject = target.inject || (target.inject = []);\n (Key as any).friendlyName = friendlyName || 'Interface';\n inject[index] = Key;\n return target;\n };\n\n Key.noDefault = function(): InterfaceSymbol<T> {\n return Key;\n };\n\n Key.withDefault = function(configure: (builder: IResolverBuilder<T>) => IResolver): InterfaceSymbol<T> {\n Key.withDefault = function(): void {\n throw Reporter.error(17, Key);\n };\n\n Key.register = function(container: IContainer, key?: Key<T>): IResolver<T> {\n const trueKey = key || Key;\n return configure({\n instance(value: T): IResolver {\n return container.registerResolver(trueKey, new Resolver(trueKey, ResolverStrategy.instance, value));\n },\n singleton(value: Function): IResolver {\n return container.registerResolver(trueKey, new Resolver(trueKey, ResolverStrategy.singleton, value));\n },\n transient(value: Function): IResolver {\n return container.registerResolver(trueKey, new Resolver(trueKey, ResolverStrategy.transient, value));\n },\n callback(value: ResolveCallback): IResolver {\n return container.registerResolver(trueKey, new Resolver(trueKey, ResolverStrategy.callback, value));\n },\n aliasTo(destinationKey: T): IResolver {\n return container.registerResolver(trueKey, new Resolver(trueKey, ResolverStrategy.alias, destinationKey));\n },\n });\n };\n\n return Key;\n };\n\n return Key;\n },\n\n inject(...dependencies: any[]): (target: any, property?: string, descriptor?: PropertyDescriptor | number) => any {\n return function(target: any, key?, descriptor?) {\n if (typeof descriptor === 'number') { // It's a parameter decorator.\n if (!target.hasOwnProperty('inject')) {\n target.inject = DI.getDesignParamTypes(target).slice();\n }\n\n if (dependencies.length === 1) {\n target.inject[descriptor] = dependencies[0];\n }\n } else if (key) { // It's a property decorator. Not supported by the container without plugins.\n const actualTarget = target.constructor;\n const inject = actualTarget.inject || (actualTarget.inject = {});\n inject[key] = dependencies[0];\n } else if (descriptor) { // It's a function decorator (not a Class constructor)\n const fn = descriptor.value;\n fn.inject = dependencies;\n } else { // It's a class decorator.\n if (!dependencies || dependencies.length === 0) {\n target.inject = DI.getDesignParamTypes(target).slice();\n } else {\n target.inject = dependencies;\n }\n }\n };\n }\n};\n\nexport const IContainer = DI.createInterface<IContainer>().noDefault();\nexport const IServiceLocator = IContainer as InterfaceSymbol<IServiceLocator>;\n\nfunction createResolver(\n getter: (key: any, handler: IContainer, requestor: IContainer) => any\n): (key: any) => ReturnType<typeof DI.inject> {\n return function(key: any): ReturnType<typeof DI.inject> {\n const Key = function Key(target: Injectable, property?: string, descriptor?: PropertyDescriptor | number): void {\n return DI.inject(Key)(target, property, descriptor);\n };\n\n (Key as any).resolve = function(handler: IContainer, requestor: IContainer): any {\n return getter(key, handler, requestor);\n };\n\n return Key;\n };\n}\n\nexport const inject = DI.inject;\n\nexport const all = createResolver((key: any, handler: IContainer, requestor: IContainer) => requestor.getAll(key));\n\nexport const lazy = createResolver((key: any, handler: IContainer, requestor: IContainer) => {\n let instance: any = null; // cache locally so that lazy always returns the same instance once resolved\n return () => {\n if (instance === null) {\n instance = requestor.get(key);\n }\n\n return instance;\n };\n});\n\nexport const optional = createResolver((key: any, handler: IContainer, requestor: IContainer) => {\n if (requestor.has(key, true)) {\n return requestor.get(key);\n } else {\n return null;\n }\n});\n\n/*@internal*/\nexport const enum ResolverStrategy {\n instance = 0,\n singleton = 1,\n transient = 2,\n callback = 3,\n array = 4,\n alias = 5\n}\n\n/*@internal*/\nexport class Resolver implements IResolver, IRegistration {\n constructor(public key: any, public strategy: ResolverStrategy, public state: any) {}\n\n public register(container: IContainer, key?: any): IResolver {\n return container.registerResolver(key || this.key, this);\n }\n\n public resolve(handler: IContainer, requestor: IContainer): any {\n switch (this.strategy) {\n case ResolverStrategy.instance:\n return this.state;\n case ResolverStrategy.singleton:\n this.strategy = ResolverStrategy.instance;\n return this.state = handler.getFactory(this.state).construct(handler);\n case ResolverStrategy.transient:\n // Always create transients from the requesting container\n return handler.getFactory(this.state).construct(requestor);\n case ResolverStrategy.callback:\n return (this.state as ResolveCallback)(handler, requestor, this);\n case ResolverStrategy.array:\n return this.state[0].resolve(handler, requestor);\n case ResolverStrategy.alias:\n return handler.get(this.state);\n default:\n throw Reporter.error(6, this.strategy);\n }\n }\n\n public getFactory(container: IContainer): IFactory | null {\n switch (this.strategy) {\n case ResolverStrategy.singleton:\n case ResolverStrategy.transient:\n return container.getFactory(this.state);\n default:\n return null;\n }\n }\n}\n\n/*@internal*/\nexport interface IInvoker {\n invoke(container: IContainer, fn: Function, dependencies: any[]): any;\n invokeWithDynamicDependencies(\n container: IContainer,\n fn: Function,\n staticDependencies: any[],\n dynamicDependencies: any[]\n ): any;\n}\n\n/*@internal*/\nexport class Factory implements IFactory {\n private transformers: ((instance: any) => any)[] | null = null;\n\n constructor(public type: Function, private invoker: IInvoker, private dependencies: any[]) { }\n\n public static create(type: Function): IFactory {\n const dependencies = DI.getDependencies(type);\n const invoker = classInvokers[dependencies.length] || fallbackInvoker;\n return new Factory(type, invoker, dependencies);\n }\n\n public construct(container: IContainer, dynamicDependencies?: any[]): any {\n const transformers = this.transformers;\n let instance = dynamicDependencies !== undefined\n ? this.invoker.invokeWithDynamicDependencies(container, this.type, this.dependencies, dynamicDependencies)\n : this.invoker.invoke(container, this.type, this.dependencies);\n\n if (transformers === null) {\n return instance;\n }\n\n for (let i = 0, ii = transformers.length; i < ii; ++i) {\n instance = transformers[i](instance);\n }\n\n return instance;\n }\n\n public registerTransformer(transformer: (instance: any) => any): boolean {\n if (this.transformers === null) {\n this.transformers = [];\n }\n\n this.transformers.push(transformer);\n return true;\n }\n}\n\n/*@internal*/\nexport interface IContainerConfiguration {\n factories?: Map<Function, IFactory>;\n}\n\nconst containerResolver: IResolver = {\n resolve(handler: IContainer, requestor: IContainer): IContainer {\n return requestor;\n }\n};\n\nfunction isRegistry(obj: IRegistry | Record<string, IRegistry>): obj is IRegistry {\n return typeof obj.register === 'function';\n}\n\n/*@internal*/\nexport class Container implements IContainer {\n private parent: Container | null = null;\n private resolvers: Map<any, IResolver> = new Map<any, IResolver>();\n private factories: Map<Function, IFactory>;\n private configuration: IContainerConfiguration;\n\n constructor(configuration: IContainerConfiguration = {}) {\n this.configuration = configuration;\n this.factories = configuration.factories || (configuration.factories = new Map());\n this.resolvers.set(IContainer, containerResolver);\n }\n\n public register(registry: (IRegistry | Record<string, Partial<IRegistry>>)): void;\n public register(...params: (IRegistry | Record<string, Partial<IRegistry>>)[]): void {\n for (let i = 0, ii = params.length; i < ii; ++i) {\n const current = params[i] as IRegistry | Record<string, IRegistry>;\n if (isRegistry(current)) {\n current.register(this);\n } else {\n const keys = Object.keys(current);\n for (let j = 0, jj = keys.length; j < jj; ++j) {\n const value = current[keys[j]];\n // note: we could remove this if-branch and call this.register directly\n // - the extra check is just a perf tweak to create fewer unnecessary arrays by the spread operator\n if (isRegistry(value)) {\n value.register(this);\n } else {\n this.register(value);\n }\n }\n }\n }\n }\n\n public registerResolver(key: any, resolver: IResolver): IResolver {\n validateKey(key);\n\n const resolvers = this.resolvers;\n const result = resolvers.get(key);\n\n if (result === undefined) {\n resolvers.set(key, resolver);\n } else if (result instanceof Resolver && (result as Resolver).strategy === ResolverStrategy.array) {\n (result as Resolver).state.push(resolver);\n } else {\n resolvers.set(key, new Resolver(key, ResolverStrategy.array, [result, resolver]));\n }\n\n return resolver;\n }\n\n public registerTransformer(key: any, transformer: (instance: any) => any): boolean {\n const resolver = this.getResolver(key);\n\n if (resolver === null) {\n return false;\n }\n\n if (resolver.getFactory) {\n const handler = resolver.getFactory(this);\n\n if (handler === null) {\n return false;\n }\n\n return handler.registerTransformer(transformer);\n }\n\n return false;\n }\n\n public getResolver(key: any, autoRegister = true): IResolver | null {\n validateKey(key);\n\n if (key.resolve) {\n return key;\n }\n\n let current: Container = this;\n\n while (current !== null) {\n const resolver = current.resolvers.get(key);\n\n if (resolver === undefined) {\n if (current.parent === null) {\n return autoRegister ? this.jitRegister(key, current) : null;\n }\n\n current = current.parent;\n } else {\n return resolver;\n }\n }\n\n return null;\n }\n\n public has(key: any, searchAncestors: boolean = false): boolean {\n return this.resolvers.has(key)\n ? true\n : searchAncestors && this.parent !== null\n ? this.parent.has(key, true)\n : false;\n }\n\n public get(key: any): any {\n validateKey(key);\n\n if (key.resolve) {\n return key.resolve(this, this);\n }\n\n let current: Container = this;\n\n while (current !== null) {\n const resolver = current.resolvers.get(key);\n\n if (resolver === undefined) {\n if (current.parent === null) {\n return this.jitRegister(key, current).resolve(current, this);\n }\n\n current = current.parent;\n } else {\n return resolver.resolve(current, this);\n }\n }\n }\n\n public getAll(key: any): ReadonlyArray<any> {\n validateKey(key);\n\n let current: Container | null = this;\n\n while (current !== null) {\n const resolver = current.resolvers.get(key);\n\n if (resolver === undefined) {\n if (this.parent === null) {\n return PLATFORM.emptyArray;\n }\n\n current = current.parent;\n } else {\n return buildAllResponse(resolver, current, this);\n }\n }\n\n return PLATFORM.emptyArray;\n }\n\n public getFactory(type: Function): IFactory {\n let factory = this.factories.get(type);\n\n if (factory === undefined) {\n factory = Factory.create(type);\n this.factories.set(type, factory);\n }\n\n return factory;\n }\n\n public createChild(): IContainer {\n const child = new Container(this.configuration);\n child.parent = this;\n return child;\n }\n\n private jitRegister(keyAsValue: any, handler: Container): IResolver {\n if (keyAsValue.register) {\n return keyAsValue.register(handler, keyAsValue) || null;\n }\n\n const resolver = new Resolver(keyAsValue, ResolverStrategy.singleton, keyAsValue);\n handler.resolvers.set(keyAsValue, resolver);\n return resolver;\n }\n}\n\nexport const Registration = {\n instance(key: any, value: any): IRegistration {\n return new Resolver(key, ResolverStrategy.instance, value);\n },\n\n singleton(key: any, value: Function): IRegistration {\n return new Resolver(key, ResolverStrategy.singleton, value);\n },\n\n transient(key: any, value: Function): IRegistration {\n return new Resolver(key, ResolverStrategy.transient, value);\n },\n\n callback(key: any, callback: ResolveCallback): IRegistration {\n return new Resolver(key, ResolverStrategy.callback, callback);\n },\n\n alias(originalKey: any, aliasKey: any): IRegistration {\n return new Resolver(aliasKey, ResolverStrategy.alias, originalKey);\n },\n\n interpret(interpreterKey: any, ...rest: any[]): IRegistry {\n return {\n register(container: IContainer): void {\n const resolver = container.getResolver<IRegistry>(interpreterKey);\n\n if (resolver !== null) {\n let registry: IRegistry | null = null;\n\n if (resolver.getFactory) {\n const factory = resolver.getFactory(container);\n\n if (factory !== null) {\n registry = factory.construct(container, rest);\n }\n } else {\n registry = resolver.resolve(container, container);\n }\n\n if (registry !== null) {\n registry.register(container);\n }\n }\n }\n };\n }\n};\n\n/*@internal*/\nexport function validateKey(key: any): void {\n // note: design:paramTypes which will default to Object if the param types cannot be statically analyzed by tsc\n // this check is intended to properly report on that problem - under no circumstance should Object be a valid key anyway\n if (key === null || key === undefined || key === Object) {\n throw Reporter.error(5);\n }\n}\n\nfunction buildAllResponse(resolver: IResolver, handler: IContainer, requestor: IContainer): any[] {\n if (resolver instanceof Resolver && resolver.strategy === ResolverStrategy.array) {\n const state = resolver.state;\n let i = state.length;\n const results = new Array(i);\n\n while (i--) {\n results[i] = state[i].get(handler, requestor);\n }\n\n return results;\n }\n\n return [resolver.resolve(handler, requestor)];\n}\n\n/*@internal*/\nexport const classInvokers: IInvoker[] = [\n {\n invoke<T extends Constructable<K>, K>(container: IContainer, Type: T): K {\n return new Type();\n },\n invokeWithDynamicDependencies\n },\n {\n invoke<T extends Constructable<K>, K>(container: IContainer, Type: T, deps: any[]): K {\n return new Type(container.get(deps[0]));\n },\n invokeWithDynamicDependencies\n },\n {\n invoke<T extends Constructable<K>, K>(container: IContainer, Type: T, deps: any[]): K {\n return new Type(container.get(deps[0]), container.get(deps[1]));\n },\n invokeWithDynamicDependencies\n },\n {\n invoke<T extends Constructable<K>, K>(container: IContainer, Type: T, deps: any[]): K {\n return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2]));\n },\n invokeWithDynamicDependencies\n },\n {\n invoke<T extends Constructable<K>, K>(container: IContainer, Type: T, deps: any[]): K {\n return new Type(\n container.get(deps[0]),\n container.get(deps[1]),\n container.get(deps[2]),\n container.get(deps[3])\n );\n },\n invokeWithDynamicDependencies\n },\n {\n invoke<T extends Constructable<K>, K>(container: IContainer, Type: T, deps: any[]): K {\n return new Type(\n container.get(deps[0]),\n container.get(deps[1]),\n container.get(deps[2]),\n container.get(deps[3]),\n container.get(deps[4])\n );\n },\n invokeWithDynamicDependencies\n }\n];\n\n/*@internal*/\nexport const fallbackInvoker: IInvoker = {\n invoke: invokeWithDynamicDependencies as any,\n invokeWithDynamicDependencies\n};\n\n/*@internal*/\nexport function invokeWithDynamicDependencies<T extends Constructable<K>, K>(\n container: IContainer,\n Type: T,\n staticDependencies: any[],\n dynamicDependencies: any[]\n): K {\n let i = staticDependencies.length;\n let args = new Array(i);\n let lookup;\n\n while (i--) {\n lookup = staticDependencies[i];\n\n if (lookup === null || lookup === undefined) {\n throw Reporter.error(7, `Index ${i}.`);\n } else {\n args[i] = container.get(lookup);\n }\n }\n\n if (dynamicDependencies !== undefined) {\n args = args.concat(dynamicDependencies);\n }\n\n return Reflect.construct(Type, args);\n}\n"],"names":[],"mappings":"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"} |
+12
-41
@@ -10,7 +10,10 @@ (function (global, factory) { | ||
| const PLATFORM = { | ||
| // tslint:disable-next-line:no-any | ||
| global: (function () { | ||
| // Workers don’t have `window`, only `self` | ||
| // tslint:disable-next-line:no-typeof-undefined | ||
| if (typeof self !== 'undefined') { | ||
| return self; | ||
| } | ||
| // tslint:disable-next-line:no-typeof-undefined | ||
| if (typeof global !== 'undefined') { | ||
@@ -21,2 +24,3 @@ return global; | ||
| // Use only as a last resort: | ||
| // tslint:disable-next-line:no-function-constructor-with-string-args | ||
| return new Function('return this')(); | ||
@@ -69,2 +73,3 @@ })(), | ||
| }, | ||
| // tslint:disable-next-line:no-any | ||
| toArray(input) { | ||
@@ -81,34 +86,2 @@ // benchmark: http://jsben.ch/xjsyF | ||
| return requestAnimationFrame(callback); | ||
| }, | ||
| createTaskFlushRequester(onFlush) { | ||
| return function requestFlush() { | ||
| // We dispatch a timeout with a specified delay of 0 for engines that | ||
| // can reliably accommodate that request. This will usually be snapped | ||
| // to a 4 millisecond delay, but once we're flushing, there's no delay | ||
| // between events. | ||
| const timeoutHandle = setTimeout(handleFlushTimer, 0); | ||
| // However, since this timer gets frequently dropped in Firefox | ||
| // workers, we enlist an interval handle that will try to fire | ||
| // an event 20 times per second until it succeeds. | ||
| const intervalHandle = setInterval(handleFlushTimer, 50); | ||
| function handleFlushTimer() { | ||
| // Whichever timer succeeds will cancel both timers and request the | ||
| // flush. | ||
| clearTimeout(timeoutHandle); | ||
| clearInterval(intervalHandle); | ||
| onFlush(); | ||
| } | ||
| }; | ||
| }, | ||
| createMicroTaskFlushRequestor(onFlush) { | ||
| const observer = new MutationObserver(onFlush); | ||
| const node = document.createTextNode(''); | ||
| const values = Object.create(null); | ||
| let val = 'a'; | ||
| values.a = 'b'; | ||
| values.b = 'a'; | ||
| observer.observe(node, { characterData: true }); | ||
| return function requestFlush() { | ||
| node.data = val = values[val]; | ||
| }; | ||
| } | ||
@@ -172,17 +145,18 @@ }; | ||
| Key.register = function (container, key) { | ||
| const trueKey = key || Key; | ||
| return configure({ | ||
| instance(value) { | ||
| return container.registerResolver(Key, new Resolver(key || Key, 0 /* instance */, value)); | ||
| return container.registerResolver(trueKey, new Resolver(trueKey, 0 /* instance */, value)); | ||
| }, | ||
| singleton(value) { | ||
| return container.registerResolver(Key, new Resolver(key || Key, 1 /* singleton */, value)); | ||
| return container.registerResolver(trueKey, new Resolver(trueKey, 1 /* singleton */, value)); | ||
| }, | ||
| transient(value) { | ||
| return container.registerResolver(Key, new Resolver(key || Key, 2 /* transient */, value)); | ||
| return container.registerResolver(trueKey, new Resolver(trueKey, 2 /* transient */, value)); | ||
| }, | ||
| callback(value) { | ||
| return container.registerResolver(Key, new Resolver(key || Key, 3 /* callback */, value)); | ||
| return container.registerResolver(trueKey, new Resolver(trueKey, 3 /* callback */, value)); | ||
| }, | ||
| aliasTo(destinationKey) { | ||
| return container.registerResolver(destinationKey, new Resolver(key || Key, 5 /* alias */, Key)); | ||
| return container.registerResolver(trueKey, new Resolver(trueKey, 5 /* alias */, destinationKey)); | ||
| }, | ||
@@ -404,3 +378,2 @@ }); | ||
| } | ||
| /* tslint:disable-next-line:no-this-assignment */ | ||
| let current = this; | ||
@@ -433,3 +406,2 @@ while (current !== null) { | ||
| } | ||
| /* tslint:disable-next-line:no-this-assignment */ | ||
| let current = this; | ||
@@ -451,3 +423,2 @@ while (current !== null) { | ||
| validateKey(key); | ||
| /* tslint:disable-next-line:no-this-assignment */ | ||
| let current = this; | ||
@@ -483,3 +454,3 @@ while (current !== null) { | ||
| if (keyAsValue.register) { | ||
| return keyAsValue.register(handler, keyAsValue); | ||
| return keyAsValue.register(handler, keyAsValue) || null; | ||
| } | ||
@@ -486,0 +457,0 @@ const resolver = new Resolver(keyAsValue, 1 /* singleton */, keyAsValue); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.umd.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} | ||
| {"version":3,"file":"index.umd.js","sources":["../src/platform.ts","../src/reporter.ts","../src/di.ts"],"sourcesContent":["const camelCaseLookup = {};\nconst kebabCaseLookup = {};\n\nexport const PLATFORM = {\n // tslint:disable-next-line:no-any\n global: (function(): any {\n // Workers don’t have `window`, only `self`\n // tslint:disable-next-line:no-typeof-undefined\n if (typeof self !== 'undefined') {\n return self;\n }\n\n // tslint:disable-next-line:no-typeof-undefined\n if (typeof global !== 'undefined') {\n return global;\n }\n\n // Not all environments allow eval and Function\n // Use only as a last resort:\n // tslint:disable-next-line:no-function-constructor-with-string-args\n return new Function('return this')();\n })(),\n emptyArray: Object.freeze([]),\n emptyObject: Object.freeze({}),\n /* tslint:disable-next-line:no-empty */\n noop(): void { },\n now(): number {\n return performance.now();\n },\n\n camelCase(input: string): string {\n // benchmark: http://jsben.ch/qIz4Z\n let value = camelCaseLookup[input];\n if (value !== undefined) return value;\n value = '';\n let first = true;\n let sep = false;\n let char: string;\n for (let i = 0, ii = input.length; i < ii; ++i) {\n char = input.charAt(i);\n if (char === '-' || char === '.' || char === '_') {\n sep = true; // skip separators\n } else {\n value = value + (first ? char.toLowerCase() : (sep ? char.toUpperCase() : char));\n sep = false;\n }\n first = false;\n }\n return camelCaseLookup[input] = value;\n },\n\n kebabCase(input: string): string {\n // benchmark: http://jsben.ch/v7K9T\n let value = kebabCaseLookup[input];\n if (value !== undefined) return value;\n value = '';\n let first = true;\n let char: string, lower: string;\n for (let i = 0, ii = input.length; i < ii; ++i) {\n char = input.charAt(i);\n lower = char.toLowerCase();\n value = value + (first ? lower : (char !== lower ? `-${lower}` : lower));\n first = false;\n }\n return kebabCaseLookup[input] = value;\n },\n\n // tslint:disable-next-line:no-any\n toArray<T = any>(input: ArrayLike<T>): T[] {\n // benchmark: http://jsben.ch/xjsyF\n const len = input.length;\n const arr = Array(len);\n for (let i = 0; i < len; ++i) {\n arr[i] = input[i];\n }\n return arr;\n },\n\n requestAnimationFrame(callback: (time: number) => void): number {\n return requestAnimationFrame(callback);\n }\n};\n","export const Reporter = {\n /* tslint:disable-next-line:no-empty */\n write(code: number, ...params: any[]): void { },\n error(code: number, ...params: any[]): Error { return new Error(`Code ${code}`); }\n};\n","// tslint:disable:no-reserved-keywords\nimport { Constructable, IIndexable, Injectable, Primitive } from './interfaces';\nimport { PLATFORM } from './platform';\nimport { Reporter } from './reporter';\n\nexport type ResolveCallback<T = any> = (handler?: IContainer, requestor?: IContainer, resolver?: IResolver) => T;\n\nexport type Key<T> = InterfaceSymbol<T> | Primitive | IIndexable | Function;\n\nexport type InterfaceSymbol<T> = (target: Injectable, property: string, index: number) => any;\n\nexport interface IDefaultableInterfaceSymbol<T> extends InterfaceSymbol<T> {\n withDefault(configure: (builder: IResolverBuilder<T>) => IResolver): InterfaceSymbol<T>;\n noDefault(): InterfaceSymbol<T>;\n}\n\nexport interface IResolver<T = any> {\n resolve(handler: IContainer, requestor: IContainer): T;\n getFactory?(container: IContainer): IFactory<T> | null;\n}\n\nexport interface IRegistration<T = any> {\n register(container: IContainer, key?: Key<T>): IResolver<T>;\n}\n\nexport interface IFactory<T = any> {\n readonly type: Function;\n registerTransformer(transformer: (instance: T) => T): boolean;\n construct(container: IContainer, dynamicDependencies?: any[]): T;\n}\n\nexport interface IServiceLocator {\n has(key: any, searchAncestors: boolean): boolean;\n\n get<T>(key: Key<T>): T;\n get<T extends Constructable>(key: T): InstanceType<T>;\n\n getAll<T>(key: Key<T>): ReadonlyArray<T>;\n getAll<T extends Constructable>(key: T): ReadonlyArray<InstanceType<T>>;\n}\n\nexport interface IRegistry {\n register(container: IContainer): void;\n}\n\nexport interface IContainer extends IServiceLocator {\n register(...params: (IRegistry | Record<string, Partial<IRegistry>>)[]): void;\n register(registry: IRegistry | Record<string, Partial<IRegistry>>): void;\n\n registerResolver<T>(key: Key<T>, resolver: IResolver<T>): IResolver<T>;\n registerResolver<T extends Constructable>(key: T, resolver: IResolver<InstanceType<T>>): IResolver<InstanceType<T>>;\n\n registerTransformer<T>(key: Key<T>, transformer: (instance: T) => T): boolean;\n registerTransformer<T extends Constructable>(key: T, transformer: (instance: InstanceType<T>) => T): boolean;\n\n getResolver<T>(key: Key<T>, autoRegister?: boolean): IResolver<T> | null;\n getResolver<T extends Constructable>(key: T, autoRegister?: boolean): IResolver<InstanceType<T>> | null;\n\n getFactory<T extends Constructable>(type: T): IFactory<InstanceType<T>>;\n\n createChild(): IContainer;\n}\n\nexport interface IResolverBuilder<T> {\n instance(value: T & IIndexable): IResolver;\n singleton(value: Constructable<T>): IResolver;\n transient(value: Constructable<T>): IResolver;\n callback(value: ResolveCallback<T>): IResolver;\n aliasTo(destinationKey: Key<T>): IResolver;\n}\n\nif (!('getOwnMetadata' in Reflect)) {\n (Reflect as any).getOwnMetadata = function(key: string, target: any): any {\n return target[key];\n };\n\n (Reflect as any).metadata = function(key: string, value: any): (target: any) => void {\n return function(target: any): void {\n target[key] = value;\n };\n };\n}\n\nexport const DI = {\n createContainer(): IContainer {\n return new Container();\n },\n\n getDesignParamTypes(target: any): any[] {\n return (Reflect as any).getOwnMetadata('design:paramtypes', target) || PLATFORM.emptyArray;\n },\n\n getDependencies(type: Function & { inject?: any }): any[] {\n let dependencies: any[];\n\n if (type.inject === undefined) {\n dependencies = DI.getDesignParamTypes(type);\n } else {\n dependencies = [];\n let ctor = type;\n\n while (typeof ctor === 'function') {\n if (ctor.hasOwnProperty('inject')) {\n dependencies.push(...ctor.inject);\n }\n\n ctor = Object.getPrototypeOf(ctor);\n }\n }\n\n return dependencies;\n },\n\n createInterface<T = any>(friendlyName?: string): IDefaultableInterfaceSymbol<T> {\n const Key: any = function(target: Injectable, property: string, index: number): any {\n const inject = target.inject || (target.inject = []);\n (Key as any).friendlyName = friendlyName || 'Interface';\n inject[index] = Key;\n return target;\n };\n\n Key.noDefault = function(): InterfaceSymbol<T> {\n return Key;\n };\n\n Key.withDefault = function(configure: (builder: IResolverBuilder<T>) => IResolver): InterfaceSymbol<T> {\n Key.withDefault = function(): void {\n throw Reporter.error(17, Key);\n };\n\n Key.register = function(container: IContainer, key?: Key<T>): IResolver<T> {\n const trueKey = key || Key;\n return configure({\n instance(value: T): IResolver {\n return container.registerResolver(trueKey, new Resolver(trueKey, ResolverStrategy.instance, value));\n },\n singleton(value: Function): IResolver {\n return container.registerResolver(trueKey, new Resolver(trueKey, ResolverStrategy.singleton, value));\n },\n transient(value: Function): IResolver {\n return container.registerResolver(trueKey, new Resolver(trueKey, ResolverStrategy.transient, value));\n },\n callback(value: ResolveCallback): IResolver {\n return container.registerResolver(trueKey, new Resolver(trueKey, ResolverStrategy.callback, value));\n },\n aliasTo(destinationKey: T): IResolver {\n return container.registerResolver(trueKey, new Resolver(trueKey, ResolverStrategy.alias, destinationKey));\n },\n });\n };\n\n return Key;\n };\n\n return Key;\n },\n\n inject(...dependencies: any[]): (target: any, property?: string, descriptor?: PropertyDescriptor | number) => any {\n return function(target: any, key?, descriptor?) {\n if (typeof descriptor === 'number') { // It's a parameter decorator.\n if (!target.hasOwnProperty('inject')) {\n target.inject = DI.getDesignParamTypes(target).slice();\n }\n\n if (dependencies.length === 1) {\n target.inject[descriptor] = dependencies[0];\n }\n } else if (key) { // It's a property decorator. Not supported by the container without plugins.\n const actualTarget = target.constructor;\n const inject = actualTarget.inject || (actualTarget.inject = {});\n inject[key] = dependencies[0];\n } else if (descriptor) { // It's a function decorator (not a Class constructor)\n const fn = descriptor.value;\n fn.inject = dependencies;\n } else { // It's a class decorator.\n if (!dependencies || dependencies.length === 0) {\n target.inject = DI.getDesignParamTypes(target).slice();\n } else {\n target.inject = dependencies;\n }\n }\n };\n }\n};\n\nexport const IContainer = DI.createInterface<IContainer>().noDefault();\nexport const IServiceLocator = IContainer as InterfaceSymbol<IServiceLocator>;\n\nfunction createResolver(\n getter: (key: any, handler: IContainer, requestor: IContainer) => any\n): (key: any) => ReturnType<typeof DI.inject> {\n return function(key: any): ReturnType<typeof DI.inject> {\n const Key = function Key(target: Injectable, property?: string, descriptor?: PropertyDescriptor | number): void {\n return DI.inject(Key)(target, property, descriptor);\n };\n\n (Key as any).resolve = function(handler: IContainer, requestor: IContainer): any {\n return getter(key, handler, requestor);\n };\n\n return Key;\n };\n}\n\nexport const inject = DI.inject;\n\nexport const all = createResolver((key: any, handler: IContainer, requestor: IContainer) => requestor.getAll(key));\n\nexport const lazy = createResolver((key: any, handler: IContainer, requestor: IContainer) => {\n let instance: any = null; // cache locally so that lazy always returns the same instance once resolved\n return () => {\n if (instance === null) {\n instance = requestor.get(key);\n }\n\n return instance;\n };\n});\n\nexport const optional = createResolver((key: any, handler: IContainer, requestor: IContainer) => {\n if (requestor.has(key, true)) {\n return requestor.get(key);\n } else {\n return null;\n }\n});\n\n/*@internal*/\nexport const enum ResolverStrategy {\n instance = 0,\n singleton = 1,\n transient = 2,\n callback = 3,\n array = 4,\n alias = 5\n}\n\n/*@internal*/\nexport class Resolver implements IResolver, IRegistration {\n constructor(public key: any, public strategy: ResolverStrategy, public state: any) {}\n\n public register(container: IContainer, key?: any): IResolver {\n return container.registerResolver(key || this.key, this);\n }\n\n public resolve(handler: IContainer, requestor: IContainer): any {\n switch (this.strategy) {\n case ResolverStrategy.instance:\n return this.state;\n case ResolverStrategy.singleton:\n this.strategy = ResolverStrategy.instance;\n return this.state = handler.getFactory(this.state).construct(handler);\n case ResolverStrategy.transient:\n // Always create transients from the requesting container\n return handler.getFactory(this.state).construct(requestor);\n case ResolverStrategy.callback:\n return (this.state as ResolveCallback)(handler, requestor, this);\n case ResolverStrategy.array:\n return this.state[0].resolve(handler, requestor);\n case ResolverStrategy.alias:\n return handler.get(this.state);\n default:\n throw Reporter.error(6, this.strategy);\n }\n }\n\n public getFactory(container: IContainer): IFactory | null {\n switch (this.strategy) {\n case ResolverStrategy.singleton:\n case ResolverStrategy.transient:\n return container.getFactory(this.state);\n default:\n return null;\n }\n }\n}\n\n/*@internal*/\nexport interface IInvoker {\n invoke(container: IContainer, fn: Function, dependencies: any[]): any;\n invokeWithDynamicDependencies(\n container: IContainer,\n fn: Function,\n staticDependencies: any[],\n dynamicDependencies: any[]\n ): any;\n}\n\n/*@internal*/\nexport class Factory implements IFactory {\n private transformers: ((instance: any) => any)[] | null = null;\n\n constructor(public type: Function, private invoker: IInvoker, private dependencies: any[]) { }\n\n public static create(type: Function): IFactory {\n const dependencies = DI.getDependencies(type);\n const invoker = classInvokers[dependencies.length] || fallbackInvoker;\n return new Factory(type, invoker, dependencies);\n }\n\n public construct(container: IContainer, dynamicDependencies?: any[]): any {\n const transformers = this.transformers;\n let instance = dynamicDependencies !== undefined\n ? this.invoker.invokeWithDynamicDependencies(container, this.type, this.dependencies, dynamicDependencies)\n : this.invoker.invoke(container, this.type, this.dependencies);\n\n if (transformers === null) {\n return instance;\n }\n\n for (let i = 0, ii = transformers.length; i < ii; ++i) {\n instance = transformers[i](instance);\n }\n\n return instance;\n }\n\n public registerTransformer(transformer: (instance: any) => any): boolean {\n if (this.transformers === null) {\n this.transformers = [];\n }\n\n this.transformers.push(transformer);\n return true;\n }\n}\n\n/*@internal*/\nexport interface IContainerConfiguration {\n factories?: Map<Function, IFactory>;\n}\n\nconst containerResolver: IResolver = {\n resolve(handler: IContainer, requestor: IContainer): IContainer {\n return requestor;\n }\n};\n\nfunction isRegistry(obj: IRegistry | Record<string, IRegistry>): obj is IRegistry {\n return typeof obj.register === 'function';\n}\n\n/*@internal*/\nexport class Container implements IContainer {\n private parent: Container | null = null;\n private resolvers: Map<any, IResolver> = new Map<any, IResolver>();\n private factories: Map<Function, IFactory>;\n private configuration: IContainerConfiguration;\n\n constructor(configuration: IContainerConfiguration = {}) {\n this.configuration = configuration;\n this.factories = configuration.factories || (configuration.factories = new Map());\n this.resolvers.set(IContainer, containerResolver);\n }\n\n public register(registry: (IRegistry | Record<string, Partial<IRegistry>>)): void;\n public register(...params: (IRegistry | Record<string, Partial<IRegistry>>)[]): void {\n for (let i = 0, ii = params.length; i < ii; ++i) {\n const current = params[i] as IRegistry | Record<string, IRegistry>;\n if (isRegistry(current)) {\n current.register(this);\n } else {\n const keys = Object.keys(current);\n for (let j = 0, jj = keys.length; j < jj; ++j) {\n const value = current[keys[j]];\n // note: we could remove this if-branch and call this.register directly\n // - the extra check is just a perf tweak to create fewer unnecessary arrays by the spread operator\n if (isRegistry(value)) {\n value.register(this);\n } else {\n this.register(value);\n }\n }\n }\n }\n }\n\n public registerResolver(key: any, resolver: IResolver): IResolver {\n validateKey(key);\n\n const resolvers = this.resolvers;\n const result = resolvers.get(key);\n\n if (result === undefined) {\n resolvers.set(key, resolver);\n } else if (result instanceof Resolver && (result as Resolver).strategy === ResolverStrategy.array) {\n (result as Resolver).state.push(resolver);\n } else {\n resolvers.set(key, new Resolver(key, ResolverStrategy.array, [result, resolver]));\n }\n\n return resolver;\n }\n\n public registerTransformer(key: any, transformer: (instance: any) => any): boolean {\n const resolver = this.getResolver(key);\n\n if (resolver === null) {\n return false;\n }\n\n if (resolver.getFactory) {\n const handler = resolver.getFactory(this);\n\n if (handler === null) {\n return false;\n }\n\n return handler.registerTransformer(transformer);\n }\n\n return false;\n }\n\n public getResolver(key: any, autoRegister = true): IResolver | null {\n validateKey(key);\n\n if (key.resolve) {\n return key;\n }\n\n let current: Container = this;\n\n while (current !== null) {\n const resolver = current.resolvers.get(key);\n\n if (resolver === undefined) {\n if (current.parent === null) {\n return autoRegister ? this.jitRegister(key, current) : null;\n }\n\n current = current.parent;\n } else {\n return resolver;\n }\n }\n\n return null;\n }\n\n public has(key: any, searchAncestors: boolean = false): boolean {\n return this.resolvers.has(key)\n ? true\n : searchAncestors && this.parent !== null\n ? this.parent.has(key, true)\n : false;\n }\n\n public get(key: any): any {\n validateKey(key);\n\n if (key.resolve) {\n return key.resolve(this, this);\n }\n\n let current: Container = this;\n\n while (current !== null) {\n const resolver = current.resolvers.get(key);\n\n if (resolver === undefined) {\n if (current.parent === null) {\n return this.jitRegister(key, current).resolve(current, this);\n }\n\n current = current.parent;\n } else {\n return resolver.resolve(current, this);\n }\n }\n }\n\n public getAll(key: any): ReadonlyArray<any> {\n validateKey(key);\n\n let current: Container | null = this;\n\n while (current !== null) {\n const resolver = current.resolvers.get(key);\n\n if (resolver === undefined) {\n if (this.parent === null) {\n return PLATFORM.emptyArray;\n }\n\n current = current.parent;\n } else {\n return buildAllResponse(resolver, current, this);\n }\n }\n\n return PLATFORM.emptyArray;\n }\n\n public getFactory(type: Function): IFactory {\n let factory = this.factories.get(type);\n\n if (factory === undefined) {\n factory = Factory.create(type);\n this.factories.set(type, factory);\n }\n\n return factory;\n }\n\n public createChild(): IContainer {\n const child = new Container(this.configuration);\n child.parent = this;\n return child;\n }\n\n private jitRegister(keyAsValue: any, handler: Container): IResolver {\n if (keyAsValue.register) {\n return keyAsValue.register(handler, keyAsValue) || null;\n }\n\n const resolver = new Resolver(keyAsValue, ResolverStrategy.singleton, keyAsValue);\n handler.resolvers.set(keyAsValue, resolver);\n return resolver;\n }\n}\n\nexport const Registration = {\n instance(key: any, value: any): IRegistration {\n return new Resolver(key, ResolverStrategy.instance, value);\n },\n\n singleton(key: any, value: Function): IRegistration {\n return new Resolver(key, ResolverStrategy.singleton, value);\n },\n\n transient(key: any, value: Function): IRegistration {\n return new Resolver(key, ResolverStrategy.transient, value);\n },\n\n callback(key: any, callback: ResolveCallback): IRegistration {\n return new Resolver(key, ResolverStrategy.callback, callback);\n },\n\n alias(originalKey: any, aliasKey: any): IRegistration {\n return new Resolver(aliasKey, ResolverStrategy.alias, originalKey);\n },\n\n interpret(interpreterKey: any, ...rest: any[]): IRegistry {\n return {\n register(container: IContainer): void {\n const resolver = container.getResolver<IRegistry>(interpreterKey);\n\n if (resolver !== null) {\n let registry: IRegistry | null = null;\n\n if (resolver.getFactory) {\n const factory = resolver.getFactory(container);\n\n if (factory !== null) {\n registry = factory.construct(container, rest);\n }\n } else {\n registry = resolver.resolve(container, container);\n }\n\n if (registry !== null) {\n registry.register(container);\n }\n }\n }\n };\n }\n};\n\n/*@internal*/\nexport function validateKey(key: any): void {\n // note: design:paramTypes which will default to Object if the param types cannot be statically analyzed by tsc\n // this check is intended to properly report on that problem - under no circumstance should Object be a valid key anyway\n if (key === null || key === undefined || key === Object) {\n throw Reporter.error(5);\n }\n}\n\nfunction buildAllResponse(resolver: IResolver, handler: IContainer, requestor: IContainer): any[] {\n if (resolver instanceof Resolver && resolver.strategy === ResolverStrategy.array) {\n const state = resolver.state;\n let i = state.length;\n const results = new Array(i);\n\n while (i--) {\n results[i] = state[i].get(handler, requestor);\n }\n\n return results;\n }\n\n return [resolver.resolve(handler, requestor)];\n}\n\n/*@internal*/\nexport const classInvokers: IInvoker[] = [\n {\n invoke<T extends Constructable<K>, K>(container: IContainer, Type: T): K {\n return new Type();\n },\n invokeWithDynamicDependencies\n },\n {\n invoke<T extends Constructable<K>, K>(container: IContainer, Type: T, deps: any[]): K {\n return new Type(container.get(deps[0]));\n },\n invokeWithDynamicDependencies\n },\n {\n invoke<T extends Constructable<K>, K>(container: IContainer, Type: T, deps: any[]): K {\n return new Type(container.get(deps[0]), container.get(deps[1]));\n },\n invokeWithDynamicDependencies\n },\n {\n invoke<T extends Constructable<K>, K>(container: IContainer, Type: T, deps: any[]): K {\n return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2]));\n },\n invokeWithDynamicDependencies\n },\n {\n invoke<T extends Constructable<K>, K>(container: IContainer, Type: T, deps: any[]): K {\n return new Type(\n container.get(deps[0]),\n container.get(deps[1]),\n container.get(deps[2]),\n container.get(deps[3])\n );\n },\n invokeWithDynamicDependencies\n },\n {\n invoke<T extends Constructable<K>, K>(container: IContainer, Type: T, deps: any[]): K {\n return new Type(\n container.get(deps[0]),\n container.get(deps[1]),\n container.get(deps[2]),\n container.get(deps[3]),\n container.get(deps[4])\n );\n },\n invokeWithDynamicDependencies\n }\n];\n\n/*@internal*/\nexport const fallbackInvoker: IInvoker = {\n invoke: invokeWithDynamicDependencies as any,\n invokeWithDynamicDependencies\n};\n\n/*@internal*/\nexport function invokeWithDynamicDependencies<T extends Constructable<K>, K>(\n container: IContainer,\n Type: T,\n staticDependencies: any[],\n dynamicDependencies: any[]\n): K {\n let i = staticDependencies.length;\n let args = new Array(i);\n let lookup;\n\n while (i--) {\n lookup = staticDependencies[i];\n\n if (lookup === null || lookup === undefined) {\n throw Reporter.error(7, `Index ${i}.`);\n } else {\n args[i] = container.get(lookup);\n }\n }\n\n if (dynamicDependencies !== undefined) {\n args = args.concat(dynamicDependencies);\n }\n\n return Reflect.construct(Type, args);\n}\n"],"names":[],"mappings":"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"} |
@@ -10,2 +10,10 @@ export interface ICallable { | ||
| }; | ||
| export declare type Decoratable<TOptional, TRequired> = Function & { | ||
| readonly prototype: Partial<TOptional> & Required<TRequired>; | ||
| new (...args: any[]): Partial<TOptional> & Required<TRequired>; | ||
| }; | ||
| export declare type Decorated<TOptional, TRequired> = Function & { | ||
| readonly prototype: Required<TOptional> & Required<TRequired>; | ||
| new (...args: any[]): any; | ||
| }; | ||
| export declare type Injectable<T = {}> = Constructable<T> & { | ||
@@ -28,2 +36,3 @@ inject?: any[]; | ||
| export declare type Primitive = undefined | null | number | boolean | symbol | string; | ||
| export declare type Unwrap<T> = T extends (infer U)[] ? U : T extends (...args: any[]) => infer U ? U : T extends Promise<infer U> ? U : T; | ||
| //# sourceMappingURL=interfaces.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"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"} |
@@ -11,5 +11,3 @@ export declare const PLATFORM: { | ||
| requestAnimationFrame(callback: (time: number) => void): number; | ||
| createTaskFlushRequester(onFlush: () => void): () => void; | ||
| createMicroTaskFlushRequestor(onFlush: () => void): () => void; | ||
| }; | ||
| //# sourceMappingURL=platform.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,QAAQ;;;;;;;;;;;;CA+GpB,CAAC"} | ||
| {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,QAAQ;;;;;;;;;;CA8EpB,CAAC"} |
+3
-2
| { | ||
| "name": "@aurelia/kernel", | ||
| "version": "0.2.0", | ||
| "version": "0.3.0-dev.20181013", | ||
| "main": "dist/index.umd.js", | ||
@@ -25,2 +25,3 @@ "module": "dist/index.es6.js", | ||
| "dist", | ||
| "src", | ||
| "README.md", | ||
@@ -84,3 +85,3 @@ "CHANGELOG.md", | ||
| }, | ||
| "gitHead": "712101a020943279230b68b075305246f84d1037" | ||
| "gitHead": "6ba681c5c0255796f55855f2e64b3adcc4c494c3" | ||
| } |
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
177868
172.42%23
27.78%1976
47.68%3
50%