InversifyContainerFacade.ts 3.4 KB

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