InversifyContainerFacade.ts 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import { Container, interfaces } from 'inversify';
  2. import { ServiceIdentifiers } from './ServiceIdentifiers';
  3. import { nodeControlFlowTransformersModule } from './modules/node-transformers/NodeControlFlowTransformersModule';
  4. import { nodeObfuscatorsModule } from './modules/node-transformers/NodeObfuscatorsModule';
  5. import { nodeTransformersModule } from './modules/node-transformers/NodeTransformersModule';
  6. import { stackTraceAnalyzerModule } from './modules/stack-trace-analyzer/StackTraceAnalyzerModule';
  7. import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode';
  8. import { IInputOptions } from '../interfaces/IInputOptions';
  9. import { IInversifyContainerFacade } from '../interfaces/container/IInversifyContainerFacade';
  10. import { IJavaScriptObfuscator } from '../interfaces/IJavaScriptObfsucator';
  11. import { IObfuscationEventEmitter } from '../interfaces/IObfuscationEventEmitter';
  12. import { IObfuscator } from '../interfaces/IObfuscator';
  13. import { IOptions } from '../interfaces/IOptions';
  14. import { IStorage } from '../interfaces/IStorage';
  15. import { CustomNodesStorage } from '../storages/custom-nodes/CustomNodesStorage';
  16. import { JavaScriptObfuscatorInternal } from '../JavaScriptObfuscatorInternal';
  17. import { ObfuscationEventEmitter } from '../event-emitters/ObfuscationEventEmitter';
  18. import { Obfuscator } from '../Obfuscator';
  19. import { Options } from "../options/Options";
  20. export class InversifyContainerFacade implements IInversifyContainerFacade {
  21. /**
  22. * @type {interfaces.Container}
  23. */
  24. private readonly container: interfaces.Container;
  25. /**
  26. * @param options
  27. */
  28. constructor (options: IInputOptions) {
  29. this.container = new Container();
  30. this.container
  31. .bind<IJavaScriptObfuscator>(ServiceIdentifiers.IJavaScriptObfuscator)
  32. .to(JavaScriptObfuscatorInternal)
  33. .inSingletonScope();
  34. this.container
  35. .bind<IOptions>(ServiceIdentifiers.IOptions)
  36. .toDynamicValue(() => {
  37. return new Options(options);
  38. })
  39. .inSingletonScope();
  40. this.container
  41. .bind<IObfuscator>(ServiceIdentifiers.IObfuscator)
  42. .to(Obfuscator)
  43. .inSingletonScope();
  44. this.container
  45. .bind<IObfuscationEventEmitter>(ServiceIdentifiers.IObfuscationEventEmitter)
  46. .to(ObfuscationEventEmitter)
  47. .inSingletonScope();
  48. this.container
  49. .bind<IStorage<ICustomNode>>(ServiceIdentifiers['IStorage<ICustomNode>'])
  50. .to(CustomNodesStorage)
  51. .inSingletonScope();
  52. // modules
  53. this.container.load(stackTraceAnalyzerModule);
  54. this.container.load(nodeTransformersModule);
  55. this.container.load(nodeControlFlowTransformersModule);
  56. this.container.load(nodeObfuscatorsModule);
  57. }
  58. /**
  59. * @param serviceIdentifier
  60. * @returns {T}
  61. */
  62. public get <T> (serviceIdentifier: interfaces.ServiceIdentifier<T>): T {
  63. return this.container.get<T>(serviceIdentifier);
  64. }
  65. /**
  66. * @param serviceIdentifier
  67. * @param key
  68. * @param value
  69. * @returns {T}
  70. */
  71. public getTagged <T> (serviceIdentifier: interfaces.ServiceIdentifier<T>, key: string, value: any): T {
  72. return this.container.getTagged<T>(serviceIdentifier, key, value);
  73. }
  74. }