UNPKG

14.7 kBSource Map (JSON)View Raw
1{"version":3,"sources":["di/di.ts"],"names":[],"mappings":"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","file":"di/di.js","sourcesContent":["let Enumerable: any = require('linq');\nimport {MetaUtils} from '../core/metadata/utils';\nimport {Decorators} from '../core/constants';\nimport {DecoratorType} from '../core/enums/decorator-type';\nimport {MetaData} from '../core/metadata/metadata';\nimport {ClassType, NodeModuleType} from '../core/utils/types';\nimport {IInjectParams} from './decorators/interfaces/inject-params';\n\nimport * as Utils from '../core/utils';\n\nlet _extSources: Array<(any) => Object> = [];\nlet _depInstMap = new Map();\nlet _serviceMap = new Map<ClassType<any>, Object>();\n\nexport function extSources(extSources?: Array<(any) => Object>) {\n if (extSources !== undefined) {\n _extSources = extSources;\n }\n return _extSources;\n}\n\nexport function serviceMap(serviceMap?: Map<ClassType<any>, Object>) {\n if (serviceMap !== undefined) {\n _serviceMap = serviceMap;\n }\n return _serviceMap;\n}\n//var services: Array<{ fn: Function, params: {} }> = [];\n//var serviceInstances: Array<{fn: Function, inst: any}> = [];\n\nfunction generateToken(fn: Function) {\n return fn.toString();\n}\n\nclass DependencyNode {\n parents: Map<ClassType<any>, boolean>;\n current: any;\n children: Map<ClassType<any>, boolean>;\n constructor(data) {\n this.parents = new Map<ClassType<any>, boolean>();\n this.children = new Map<ClassType<any>, boolean>();;\n this.current = data;\n }\n}\n\nlet dependencyRoot: Map<ClassType<any>, DependencyNode> = new Map();\n\nlet dependencyOrder: Map<ClassType<any>, number>;\n\nclass DI {\n private stack: Array<{ parent: any; children: Array<any> }> = [];\n\n public resolveDependencies<T>(cls: ClassType<T>): T {\n if (_serviceMap.has(cls)) {\n return this.resolveServiceDependency<T>(cls, _serviceMap.get(cls));\n }\n return this.getFromExtSources<T>(cls);\n }\n\n private getFromExtSources<T>(cls: ClassType<any>): T {\n let inst;\n _extSources.forEach(func => {\n if (!inst) {\n inst = func.apply(this, [cls]);\n }\n });\n return inst;\n }\n\n private getDependencyOrderString(cls?: ClassType<any>) {\n let arr = [];\n dependencyOrder.forEach((value: number, key: ClassType<any>) => {\n arr.push(key.name);\n });\n cls && arr.push(cls.name);\n return arr.join('=>');\n }\n\n private resolveServiceDependency<T>(cls: ClassType<T>, service): T {\n let inst;\n if (!service.singleton) {\n inst = this.instantiateClass<T>(cls);\n }\n inst = this.getInstance(cls);\n if (inst) {\n return inst;\n } else {\n inst = this.instantiateClass<T>(cls);\n }\n return inst;\n }\n\n private getInstance<T>(cls: ClassType<T>): T {\n return _depInstMap.get(cls);\n }\n\n private getDependencies(cls: ClassType<any>): Array<MetaData> {\n return Enumerable.from(MetaUtils.getMetaData(cls.prototype, Decorators.INJECT));\n }\n\n private publicDeps(deps: Array<MetaData>): Array<MetaData> {\n return Enumerable.from(deps)\n .where((x: MetaData) => x.decoratorType === DecoratorType.PROPERTY)\n .toArray();\n }\n\n private constructorDeps(deps: Array<MetaData>): Array<MetaData> {\n return Enumerable.from(deps)\n .where((x: MetaData) => x.decoratorType === DecoratorType.PARAM)\n .toArray();\n }\n\n private resolveConstructorDeps(deps): Array<any> {\n let resolvedDeps = [];\n Enumerable.from(deps)\n .orderBy((x: MetaData) => x.paramIndex)\n .forEach((x: MetaData) => {\n let type = (<IInjectParams>x.params).type;\n\n if ((<any>type).default) {\n type = (<any>type).default;\n }\n if (!type) {\n console.log(x);\n throw 'no type found';\n }\n resolvedDeps.push(this.resolveDependencies(type));\n });\n return resolvedDeps;\n }\n\n private getType(params: any): ClassType<any> {\n let type = (<IInjectParams>params).type;\n if ((<any>type).__esModule) {\n type = (<any>type).default;\n }\n return type;\n }\n\n private resolvePropDeps(inst: any, propDeps: Array<any>) {\n Enumerable.from(propDeps)\n .forEach((x: MetaData) => {\n inst[x.propertyKey] = this.resolveDependencies((<IInjectParams>x.params).type);\n });\n }\n //private instantiateClass<T extends Function>(fn: T): T {}\n\n private getCycle<T>(parent: ClassType<T>, child: ClassType<T>) {\n let arr = Enumerable.from(this.stack)\n .select(x => x.parent.name)\n .toArray();\n arr.push(parent.name, child.name);\n return arr.join(\" => \");\n }\n\n // todo: cyclic dependency\n private instantiateClass<T>(cls: ClassType<T>): T {\n console.log('get dependencies: ' + cls.name);\n\n let allDependencies = this.getDependencies(cls);\n let deps = this.constructorDeps(allDependencies);\n let str = Enumerable.from(deps)\n .select((x: MetaData) => this.getType(x.params) ? this.getType(x.params).name : ' @ ')\n .toArray()\n .join(\",\");\n console.log(\" \" + str);\n\n if (!dependencyRoot.get(cls)) {\n dependencyRoot.set(cls, new DependencyNode(cls));\n }\n\n Enumerable.from(deps)\n .forEach((x: MetaData) => {\n\n let type = this.getType(x.params);\n if (!dependencyRoot.get(type)) {\n dependencyRoot.set(type, new DependencyNode(type));\n }\n dependencyRoot.get(cls).children.set(type, true);\n\n if (dependencyRoot.get(type).children.get(cls)) {\n let cycleDepStr = this.getCycle(cls, type);\n throw Error('Cycle found: ' + cycleDepStr);\n }\n\n dependencyRoot.get(type).parents.set(cls, true);\n });\n\n this.stack.push({ parent: cls, children: deps });\n let injectedProps = this.publicDeps(allDependencies);\n\n let resolvedDeps = this.resolveConstructorDeps(deps);\n let inst = Utils.activator<T>(cls, resolvedDeps);\n this.resolvePropDeps(inst, injectedProps);\n\n _depInstMap.set(cls, inst);\n\n this.stack.pop();\n return inst;\n }\n}\n\nexport interface IContainer {\n addService<T>(cls: ClassType<T>, params: any);\n resolve<T>(cls: ClassType<T>): T;\n resolve<T>(module: NodeModuleType<T>): T;\n addSource(source: (any) => Object);\n}\n\nexport class Container {\n /**\n * Registers all the services, i.e. classes having @service decorator, in the DI container.\n * DI container will inject only those services that are registered with this method.\n * @param {class} cls Typescript class having @service decorator\n * @param {Object} params Decorator params\n */\n public static addService<T>(cls: ClassType<T>, params: any) {\n _serviceMap.set(cls, params);\n }\n\n /**\n * \n * @param cls\n */\n public static resolve<T>(key: ClassType<T>|NodeModuleType<T>): T {\n let srvKey: ClassType<T> = <any>key;\n if ((<NodeModuleType<any>>key).__esModule) {\n srvKey = (<NodeModuleType<any>>key).default;\n }\n dependencyOrder = dependencyOrder || new Map<ClassType<any>, number>();\n let di = new DI();\n return di.resolveDependencies<T>(srvKey);\n }\n\n public static addSource(source: (any) => Object) {\n _extSources.push(source);\n //source.forEach((x, y) => {\n // if (_depInstMap.has(y)) {\n // throw 'key already present in the map';\n // }\n // _depInstMap.set(y, x);\n //});\n }\n}"],"sourceRoot":"/source/"}
\No newline at end of file