InversifyContainerFacade.ts 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import { Container, interfaces } from 'inversify';
  2. import { ServiceIdentifiers } from './ServiceIdentifiers';
  3. import { customNodesModule } from './modules/custom-nodes/CustomNodesModule';
  4. import { nodeControlFlowTransformersModule } from './modules/node-transformers/NodeControlFlowTransformersModule';
  5. import { nodeObfuscatorsModule } from './modules/node-transformers/NodeObfuscatorsModule';
  6. import { nodeTransformersModule } from './modules/node-transformers/NodeTransformersModule';
  7. import { stackTraceAnalyzerModule } from './modules/stack-trace-analyzer/StackTraceAnalyzerModule';
  8. import { TInputOptions } from '../types/options/TInputOptions';
  9. import { IInversifyContainerFacade } from '../interfaces/container/IInversifyContainerFacade';
  10. import { IJavaScriptObfuscator } from '../interfaces/IJavaScriptObfsucator';
  11. import { IObfuscationEventEmitter } from '../interfaces/event-emitters/IObfuscationEventEmitter';
  12. import { IObfuscationResult } from '../interfaces/IObfuscationResult';
  13. import { IObfuscator } from '../interfaces/IObfuscator';
  14. import { IOptions } from '../interfaces/options/IOptions';
  15. import { ISourceMapCorrector } from '../interfaces/ISourceMapCorrector';
  16. import { JavaScriptObfuscatorInternal } from '../JavaScriptObfuscatorInternal';
  17. import { ObfuscationEventEmitter } from '../event-emitters/ObfuscationEventEmitter';
  18. import { ObfuscationResult } from '../ObfuscationResult';
  19. import { Obfuscator } from '../Obfuscator';
  20. import { Options } from "../options/Options";
  21. import { SourceMapCorrector } from '../SourceMapCorrector';
  22. import { IStorage } from '../interfaces/storages/IStorage';
  23. import { ICustomNodeGroup } from '../interfaces/custom-nodes/ICustomNodeGroup';
  24. import { CustomNodeGroupStorage } from '../storages/custom-node-group/CustomNodeGroupStorage';
  25. export class InversifyContainerFacade implements IInversifyContainerFacade {
  26. /**
  27. * @type {interfaces.Container}
  28. */
  29. private readonly container: interfaces.Container;
  30. /**
  31. * @param options
  32. */
  33. constructor (options: TInputOptions) {
  34. this.container = new Container();
  35. this.container
  36. .bind<IOptions>(ServiceIdentifiers.IOptions)
  37. .toDynamicValue(() => {
  38. return new Options(options);
  39. })
  40. .inSingletonScope();
  41. this.container
  42. .bind<IJavaScriptObfuscator>(ServiceIdentifiers.IJavaScriptObfuscator)
  43. .to(JavaScriptObfuscatorInternal)
  44. .inSingletonScope();
  45. this.container
  46. .bind<IObfuscator>(ServiceIdentifiers.IObfuscator)
  47. .to(Obfuscator)
  48. .inSingletonScope();
  49. this.container
  50. .bind<IObfuscationResult>(ServiceIdentifiers.IObfuscationResult)
  51. .to(ObfuscationResult)
  52. .inSingletonScope();
  53. this.container
  54. .bind<IObfuscationResult>(ServiceIdentifiers['Factory<IObfuscationResult>'])
  55. .toFactory<IObfuscationResult>((context: interfaces.Context) => {
  56. return (obfuscatedCode: string, sourceMap: string) => {
  57. const obfuscationResult: IObfuscationResult = context.container
  58. .get<IObfuscationResult>(ServiceIdentifiers.IObfuscationResult);
  59. obfuscationResult.initialize(obfuscatedCode, sourceMap);
  60. return obfuscationResult;
  61. };
  62. });
  63. this.container
  64. .bind<ISourceMapCorrector>(ServiceIdentifiers.ISourceMapCorrector)
  65. .to(SourceMapCorrector)
  66. .inSingletonScope();
  67. this.container
  68. .bind<IStorage<ICustomNodeGroup>>(ServiceIdentifiers['IStorage<ICustomNodeGroup>'])
  69. .to(CustomNodeGroupStorage)
  70. .inSingletonScope();
  71. this.container
  72. .bind<IObfuscationEventEmitter>(ServiceIdentifiers.IObfuscationEventEmitter)
  73. .to(ObfuscationEventEmitter)
  74. .inSingletonScope();
  75. // modules
  76. this.container.load(stackTraceAnalyzerModule);
  77. this.container.load(customNodesModule);
  78. this.container.load(nodeTransformersModule);
  79. this.container.load(nodeControlFlowTransformersModule);
  80. this.container.load(nodeObfuscatorsModule);
  81. }
  82. /**
  83. * @param serviceIdentifier
  84. * @returns {T}
  85. */
  86. public get <T> (serviceIdentifier: interfaces.ServiceIdentifier<T>): T {
  87. return this.container.get<T>(serviceIdentifier);
  88. }
  89. /**
  90. * @param serviceIdentifier
  91. * @param named
  92. * @returns {T}
  93. */
  94. public getNamed <T> (serviceIdentifier: interfaces.ServiceIdentifier<T>, named: string | number | symbol): T {
  95. return this.container.getNamed<T>(serviceIdentifier, named);
  96. }
  97. }