import { InversifyContainerFacade } from '../../InversifyContainerFacade'; import { ContainerModule, interfaces } from 'inversify'; import { ServiceIdentifiers } from '../../ServiceIdentifiers'; import { INodeTransformer } from '../../../interfaces/node-transformers/INodeTransformer'; import { NodeTransformer } from '../../../enums/container/node-transformers/NodeTransformer'; import { FunctionControlFlowTransformer } from '../../../node-transformers/control-flow-transformers/FunctionControlFlowTransformer'; import { BlockStatementControlFlowTransformer } from '../../../node-transformers/control-flow-transformers/BlockStatementControlFlowTransformer'; import { DeadCodeInjectionTransformer } from '../../../node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer'; import { CatchClauseTransformer } from '../../../node-transformers/obfuscating-transformers/CatchClauseTransformer'; import { ClassDeclarationTransformer } from '../../../node-transformers/obfuscating-transformers/ClassDeclarationTransformer'; import { FunctionDeclarationTransformer } from '../../../node-transformers/obfuscating-transformers/FunctionDeclarationTransformer'; import { FunctionTransformer } from '../../../node-transformers/obfuscating-transformers/FunctionTransformer'; import { LabeledStatementTransformer } from '../../../node-transformers/obfuscating-transformers/LabeledStatementTransformer'; import { LiteralTransformer } from '../../../node-transformers/obfuscating-transformers/LiteralTransformer'; import { MemberExpressionTransformer } from '../../../node-transformers/converting-transformers/MemberExpressionTransformer'; import { MethodDefinitionTransformer } from '../../../node-transformers/converting-transformers/MethodDefinitionTransformer'; import { ObjectExpressionTransformer } from '../../../node-transformers/obfuscating-transformers/ObjectExpressionTransformer'; import { TemplateLiteralTransformer } from '../../../node-transformers/converting-transformers/TemplateLiteralTransformer'; import { VariableDeclarationTransformer } from '../../../node-transformers/obfuscating-transformers/VariableDeclarationTransformer'; export const nodeTransformersModule: interfaces.ContainerModule = new ContainerModule((bind: interfaces.Bind) => { // control flow transformers bind(ServiceIdentifiers.INodeTransformer) .to(BlockStatementControlFlowTransformer) .whenTargetNamed(NodeTransformer.BlockStatementControlFlowTransformer); bind(ServiceIdentifiers.INodeTransformer) .to(DeadCodeInjectionTransformer) .whenTargetNamed(NodeTransformer.DeadCodeInjectionTransformer); bind(ServiceIdentifiers.INodeTransformer) .to(FunctionControlFlowTransformer) .whenTargetNamed(NodeTransformer.FunctionControlFlowTransformer); // converting transformers bind(ServiceIdentifiers.INodeTransformer) .to(MemberExpressionTransformer) .whenTargetNamed(NodeTransformer.MemberExpressionTransformer); bind(ServiceIdentifiers.INodeTransformer) .to(MethodDefinitionTransformer) .whenTargetNamed(NodeTransformer.MethodDefinitionTransformer); bind(ServiceIdentifiers.INodeTransformer) .to(TemplateLiteralTransformer) .whenTargetNamed(NodeTransformer.TemplateLiteralTransformer); // obfuscation transformers bind(ServiceIdentifiers.INodeTransformer) .to(CatchClauseTransformer) .whenTargetNamed(NodeTransformer.CatchClauseTransformer); bind(ServiceIdentifiers.INodeTransformer) .to(ClassDeclarationTransformer) .whenTargetNamed(NodeTransformer.ClassDeclarationTransformer); bind(ServiceIdentifiers.INodeTransformer) .to(FunctionDeclarationTransformer) .whenTargetNamed(NodeTransformer.FunctionDeclarationTransformer); bind(ServiceIdentifiers.INodeTransformer) .to(FunctionTransformer) .whenTargetNamed(NodeTransformer.FunctionTransformer); bind(ServiceIdentifiers.INodeTransformer) .to(LabeledStatementTransformer) .whenTargetNamed(NodeTransformer.LabeledStatementTransformer); bind(ServiceIdentifiers.INodeTransformer) .to(LiteralTransformer) .whenTargetNamed(NodeTransformer.LiteralTransformer); bind(ServiceIdentifiers.INodeTransformer) .to(ObjectExpressionTransformer) .whenTargetNamed(NodeTransformer.ObjectExpressionTransformer); bind(ServiceIdentifiers.INodeTransformer) .to(VariableDeclarationTransformer) .whenTargetNamed(NodeTransformer.VariableDeclarationTransformer); // node transformers factory bind(ServiceIdentifiers.Factory__INodeTransformer) .toFactory(InversifyContainerFacade .getCacheFactory(ServiceIdentifiers.INodeTransformer)); });