@elsikora/nestjs-crud-automator
Version:
A library for automating the creation of CRUD operations in NestJS.
67 lines (64 loc) • 4.16 kB
JavaScript
import { ApiFunctionContextStorage } from './context-storage.class.js';
import { ApiFunctionServiceContextFactory } from './service-context.factory.class.js';
import '../../../enum/decorator/api/action.enum.js';
import '../../../enum/decorator/api/authentication-type.enum.js';
import '../../../enum/decorator/api/controller/get-list/query/filter/missing-behavior.enum.js';
import '../../../enum/decorator/api/controller/get-list/query/unlisted-fields.enum.js';
import '../../../enum/decorator/api/controller/relation-reference-shape.enum.js';
import '../../../enum/decorator/api/controller/request/target.enum.js';
import '../../../enum/decorator/api/controller/request/transformer-type.enum.js';
import '../../../enum/decorator/api/controller/response-target.enum.js';
import '../../../enum/decorator/api/dto-type.enum.js';
import '../../../enum/decorator/api/function/context-storage-kind.enum.js';
import '../../../enum/decorator/api/function/subscriber-transaction-expectation.enum.js';
import '../../../enum/decorator/api/function/transaction/event-status.enum.js';
import '../../../enum/decorator/api/function/transaction/failure-stage.enum.js';
import '../../../enum/decorator/api/function/transaction/mode.enum.js';
import '../../../enum/decorator/api/function/transaction/outcome.enum.js';
import '../../../enum/decorator/api/function/transaction/owner-kind.enum.js';
import { EApiFunctionTransactionTraceType } from '../../../enum/decorator/api/function/transaction/trace-type.enum.js';
import '../../../enum/decorator/api/function/type.enum.js';
import '../../../enum/decorator/api/on-type.enum.js';
import '../../../enum/decorator/api/property/data-type.enum.js';
import '../../../enum/decorator/api/property/date/identifier.enum.js';
import '../../../enum/decorator/api/property/date/type.enum.js';
import '../../../enum/decorator/api/property/desribe-type.enum.js';
import '../../../enum/decorator/api/property/number-type.enum.js';
import '../../../enum/decorator/api/property/string-type.enum.js';
import '../../../enum/decorator/api/route/subscriber-authorization-expectation.enum.js';
import '../../../enum/decorator/api/route/type.enum.js';
import { ApiFunctionExecuteWithTransaction } from '../../../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 ApiFunctionExecuteWithTransaction({
callback: async (eventManager) => {
const context = ApiFunctionServiceContextFactory.createStep({
entity: options.properties.entity,
eventManager,
target: options.target,
});
return await ApiFunctionContextStorage.runStep(context, async () => await options.originalMethod.apply(options.target, options.functionArguments));
},
entity: options.properties.entity,
functionType: EApiFunctionTransactionTraceType.STEP,
label: "ApiFunctionStep",
methodName: options.methodName ?? (options.originalMethod.name || "anonymous"),
mode: options.transactionMode,
repository: options.target.repository,
});
}
}
export { ApiFunctionStepRuntime };
//# sourceMappingURL=step-runtime.class.js.map