{"version":3,"sources":["../../src/decorator/transaction/Transaction.ts"],"names":[],"mappings":"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","file":"Transaction.js","sourcesContent":["import {getConnection, getMetadataArgsStorage, MongoRepository, Repository, TreeRepository, EntityManager} from \"../../\";\nimport {TransactionOptions} from \"../options/TransactionOptions\";\nimport {IsolationLevel} from \"../../driver/types/IsolationLevel\";\n\n/**\n * Wraps some method into the transaction.\n *\n * Method result will return a promise if this decorator applied.\n * All database operations in the wrapped method should be executed using entity managed passed\n * as a first parameter into the wrapped method.\n *\n * If you want to control at what position in your method parameters entity manager should be injected,\n * then use @TransactionEntityManager() decorator.\n *\n * If you want to use repositories instead of bare entity manager,\n * then use @TransactionRepository() decorator.\n */\nexport function Transaction(connectionName?: string): MethodDecorator;\nexport function Transaction(options?: TransactionOptions): MethodDecorator;\nexport function Transaction(connectionOrOptions?: string | TransactionOptions): MethodDecorator {\n return function (target: Object, methodName: string, descriptor: PropertyDescriptor) {\n\n // save original method - we gonna need it\n const originalMethod = descriptor.value;\n\n // override method descriptor with proxy method\n descriptor.value = function(...args: any[]) {\n let connectionName = \"default\";\n let isolationLevel: IsolationLevel | undefined = undefined;\n if (connectionOrOptions) {\n if (typeof connectionOrOptions === \"string\") {\n connectionName = connectionOrOptions;\n } else {\n if (connectionOrOptions.connectionName) {\n connectionName = connectionOrOptions.connectionName;\n }\n if (connectionOrOptions.isolation) {\n isolationLevel = connectionOrOptions.isolation;\n }\n }\n }\n\n const transactionCallback = (entityManager: EntityManager) => {\n let argsWithInjectedTransactionManagerAndRepositories: any[];\n\n // filter all @TransactionEntityManager() and @TransactionRepository() decorator usages for this method\n const transactionEntityManagerMetadatas = getMetadataArgsStorage()\n .filterTransactionEntityManagers(target.constructor, methodName)\n .reverse();\n const transactionRepositoryMetadatas = getMetadataArgsStorage()\n .filterTransactionRepository(target.constructor, methodName)\n .reverse();\n\n // if there are @TransactionEntityManager() decorator usages the inject them\n if (transactionEntityManagerMetadatas.length > 0) {\n argsWithInjectedTransactionManagerAndRepositories = [...args];\n // replace method params with injection of transactionEntityManager\n transactionEntityManagerMetadatas.forEach(metadata => {\n argsWithInjectedTransactionManagerAndRepositories.splice(metadata.index, 0, entityManager);\n });\n\n } else if (transactionRepositoryMetadatas.length === 0) { // otherwise if there's no transaction repositories in use, inject it as a first parameter\n argsWithInjectedTransactionManagerAndRepositories = [entityManager, ...args];\n\n } else {\n argsWithInjectedTransactionManagerAndRepositories = [...args];\n }\n\n // for every usage of @TransactionRepository decorator\n transactionRepositoryMetadatas.forEach(metadata => {\n let repositoryInstance: any;\n\n // detect type of the repository and get instance from transaction entity manager\n switch (metadata.repositoryType) {\n case Repository:\n repositoryInstance = entityManager.getRepository(metadata.entityType!);\n break;\n case MongoRepository:\n repositoryInstance = entityManager.getMongoRepository(metadata.entityType!);\n break;\n case TreeRepository:\n repositoryInstance = entityManager.getTreeRepository(metadata.entityType!);\n break;\n // if not the TypeORM's ones, there must be custom repository classes\n default:\n repositoryInstance = entityManager.getCustomRepository(metadata.repositoryType);\n }\n\n // replace method param with injection of repository instance\n argsWithInjectedTransactionManagerAndRepositories.splice(metadata.index, 0, repositoryInstance);\n });\n\n return originalMethod.apply(this, argsWithInjectedTransactionManagerAndRepositories);\n };\n if (isolationLevel) {\n return getConnection(connectionName).manager.transaction(isolationLevel, transactionCallback);\n } else {\n return getConnection(connectionName).manager.transaction(transactionCallback);\n }\n };\n };\n}\n"],"sourceRoot":"../.."}
|