UNPKG

@elsikora/nestjs-crud-automator

Version:

A library for automating the creation of CRUD operations in NestJS.

69 lines (65 loc) 4.3 kB
'use strict'; var contextStorage_class = require('./context-storage.class.js'); var serviceContext_factory_class = require('./service-context.factory.class.js'); require('../../../enum/decorator/api/action.enum.js'); require('../../../enum/decorator/api/authentication-type.enum.js'); require('../../../enum/decorator/api/controller/get-list/query/filter/missing-behavior.enum.js'); require('../../../enum/decorator/api/controller/get-list/query/unlisted-fields.enum.js'); require('../../../enum/decorator/api/controller/relation-reference-shape.enum.js'); require('../../../enum/decorator/api/controller/request/target.enum.js'); require('../../../enum/decorator/api/controller/request/transformer-type.enum.js'); require('../../../enum/decorator/api/controller/response-target.enum.js'); require('../../../enum/decorator/api/dto-type.enum.js'); require('../../../enum/decorator/api/function/context-storage-kind.enum.js'); require('../../../enum/decorator/api/function/subscriber-transaction-expectation.enum.js'); require('../../../enum/decorator/api/function/transaction/event-status.enum.js'); require('../../../enum/decorator/api/function/transaction/failure-stage.enum.js'); require('../../../enum/decorator/api/function/transaction/mode.enum.js'); require('../../../enum/decorator/api/function/transaction/outcome.enum.js'); require('../../../enum/decorator/api/function/transaction/owner-kind.enum.js'); var traceType_enum = require('../../../enum/decorator/api/function/transaction/trace-type.enum.js'); require('../../../enum/decorator/api/function/type.enum.js'); require('../../../enum/decorator/api/on-type.enum.js'); require('../../../enum/decorator/api/property/data-type.enum.js'); require('../../../enum/decorator/api/property/date/identifier.enum.js'); require('../../../enum/decorator/api/property/date/type.enum.js'); require('../../../enum/decorator/api/property/desribe-type.enum.js'); require('../../../enum/decorator/api/property/number-type.enum.js'); require('../../../enum/decorator/api/property/string-type.enum.js'); require('../../../enum/decorator/api/route/subscriber-authorization-expectation.enum.js'); require('../../../enum/decorator/api/route/type.enum.js'); var functionTransaction_utility = require('../../../utility/api/function-transaction.utility.js'); class ApiFunctionStepRuntime { /** * Executes an internal function step with Automator transaction semantics. * @template E - Entity type associated with the decorated step. * @param {object} options - Step execution options. * @param {Array<unknown>} options.functionArguments - Original method arguments. * @param {string} [options.methodName] - Decorated step method name used for transaction tracing. * @param {(...arguments_: Array<unknown>) => Promise<unknown>} options.originalMethod - Original step method. * @param {IApiFunctionStepProperties<E>} options.properties - Step configuration. * @param {{ repository?: Repository<E> }} options.target - Service instance that owns the step. * @param {EApiFunctionTransactionMode} options.transactionMode - Resolved transaction mode. * @returns {Promise<unknown>} Original step result. */ static async execute(options) { return await functionTransaction_utility.ApiFunctionExecuteWithTransaction({ callback: async (eventManager) => { const context = serviceContext_factory_class.ApiFunctionServiceContextFactory.createStep({ entity: options.properties.entity, eventManager, target: options.target, }); return await contextStorage_class.ApiFunctionContextStorage.runStep(context, async () => await options.originalMethod.apply(options.target, options.functionArguments)); }, entity: options.properties.entity, functionType: traceType_enum.EApiFunctionTransactionTraceType.STEP, label: "ApiFunctionStep", methodName: options.methodName ?? (options.originalMethod.name || "anonymous"), mode: options.transactionMode, repository: options.target.repository, }); } } exports.ApiFunctionStepRuntime = ApiFunctionStepRuntime; //# sourceMappingURL=step-runtime.class.js.map