import { Container, interfaces } from 'inversify'; import { ServiceIdentifiers } from './ServiceIdentifiers'; import { nodeControlFlowTransformersModule } from './modules/node-transformers/NodeControlFlowTransformersModule'; import { nodeObfuscatorsModule } from './modules/node-transformers/NodeObfuscatorsModule'; import { nodeTransformersModule } from './modules/node-transformers/NodeTransformersModule'; import { stackTraceAnalyzerModule } from './modules/stack-trace-analyzer/StackTraceAnalyzerModule'; import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode'; import { IInputOptions } from '../interfaces/IInputOptions'; import { IInversifyContainerFacade } from '../interfaces/container/IInversifyContainerFacade'; import { IJavaScriptObfuscator } from '../interfaces/IJavaScriptObfsucator'; import { IObfuscationEventEmitter } from '../interfaces/IObfuscationEventEmitter'; import { IObfuscator } from '../interfaces/IObfuscator'; import { IOptions } from '../interfaces/IOptions'; import { IStorage } from '../interfaces/IStorage'; import { CustomNodesStorage } from '../storages/custom-nodes/CustomNodesStorage'; import { JavaScriptObfuscatorInternal } from '../JavaScriptObfuscatorInternal'; import { ObfuscationEventEmitter } from '../event-emitters/ObfuscationEventEmitter'; import { Obfuscator } from '../Obfuscator'; import { Options } from "../options/Options"; export class InversifyContainerFacade implements IInversifyContainerFacade { /** * @type {interfaces.Container} */ private readonly container: interfaces.Container; /** * @param options */ constructor (options: IInputOptions) { this.container = new Container(); this.container .bind(ServiceIdentifiers.IJavaScriptObfuscator) .to(JavaScriptObfuscatorInternal) .inSingletonScope(); this.container .bind(ServiceIdentifiers.IOptions) .toDynamicValue(() => { return new Options(options); }) .inSingletonScope(); this.container .bind(ServiceIdentifiers.IObfuscator) .to(Obfuscator) .inSingletonScope(); this.container .bind(ServiceIdentifiers.IObfuscationEventEmitter) .to(ObfuscationEventEmitter) .inSingletonScope(); this.container .bind>(ServiceIdentifiers['IStorage']) .to(CustomNodesStorage) .inSingletonScope(); // modules this.container.load(stackTraceAnalyzerModule); this.container.load(nodeTransformersModule); this.container.load(nodeControlFlowTransformersModule); this.container.load(nodeObfuscatorsModule); } /** * @param serviceIdentifier * @returns {T} */ public get (serviceIdentifier: interfaces.ServiceIdentifier): T { return this.container.get(serviceIdentifier); } /** * @param serviceIdentifier * @param key * @param value * @returns {T} */ public getTagged (serviceIdentifier: interfaces.ServiceIdentifier, key: string, value: any): T { return this.container.getTagged(serviceIdentifier, key, value); } }