@elsikora/nestjs-crud-automator
Version:
A library for automating the creation of CRUD operations in NestJS.
69 lines (65 loc) • 4.3 kB
JavaScript
'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