NodeControlFlowTransformersModule.ts 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import { ContainerModule, interfaces } from 'inversify';
  2. import { ServiceIdentifiers } from '../../ServiceIdentifiers';
  3. import { IControlFlowReplacer } from '../../../interfaces/node-transformers/IControlFlowReplacer';
  4. import { NodeControlFlowReplacers } from '../../../enums/container/NodeControlFlowReplacers';
  5. import { BinaryExpressionControlFlowReplacer } from '../../../node-transformers/node-control-flow-transformers/control-flow-replacers/BinaryExpressionControlFlowReplacer';
  6. import { CallExpressionControlFlowReplacer } from '../../../node-transformers/node-control-flow-transformers/control-flow-replacers/CallExpressionControlFlowReplacer';
  7. import { LogicalExpressionControlFlowReplacer } from '../../../node-transformers/node-control-flow-transformers/control-flow-replacers/LogicalExpressionControlFlowReplacer';
  8. export const nodeControlFlowTransformersModule: interfaces.ContainerModule = new ContainerModule((bind: interfaces.Bind) => {
  9. bind<IControlFlowReplacer>(ServiceIdentifiers.IControlFlowReplacer)
  10. .to(BinaryExpressionControlFlowReplacer)
  11. .whenTargetNamed(NodeControlFlowReplacers.BinaryExpressionControlFlowReplacer);
  12. bind<IControlFlowReplacer>(ServiceIdentifiers.IControlFlowReplacer)
  13. .to(CallExpressionControlFlowReplacer)
  14. .whenTargetNamed(NodeControlFlowReplacers.CallExpressionControlFlowReplacer);
  15. bind<IControlFlowReplacer>(ServiceIdentifiers.IControlFlowReplacer)
  16. .to(LogicalExpressionControlFlowReplacer)
  17. .whenTargetNamed(NodeControlFlowReplacers.LogicalExpressionControlFlowReplacer);
  18. bind<IControlFlowReplacer>(ServiceIdentifiers.Factory__IControlFlowReplacer)
  19. .toFactory<IControlFlowReplacer>((context: interfaces.Context) => {
  20. const cache: Map <NodeControlFlowReplacers, IControlFlowReplacer> = new Map();
  21. return (replacerName: NodeControlFlowReplacers) => {
  22. if (cache.has(replacerName)) {
  23. return <IControlFlowReplacer>cache.get(replacerName);
  24. }
  25. const controlFlowReplacer: IControlFlowReplacer = context.container.getNamed<IControlFlowReplacer>(
  26. ServiceIdentifiers.IControlFlowReplacer,
  27. replacerName
  28. );
  29. cache.set(replacerName, controlFlowReplacer);
  30. return controlFlowReplacer;
  31. };
  32. });
  33. });