chrono-forge
Version:
A comprehensive framework for building resilient Temporal workflows, advanced state management, and real-time streaming activities in TypeScript. Designed for a seamless developer experience with powerful abstractions, dynamic orchestration, and full cont
39 lines (38 loc) • 1.42 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Step = void 0;
require("reflect-metadata");
const metadata_1 = require("./metadata");
const Step = (options = {}) => {
return (target, propertyKey, descriptor) => {
const stepName = options.name ?? propertyKey;
const originalMethod = descriptor.value;
descriptor.value = async function (...args) {
try {
return await originalMethod.apply(this, args);
}
catch (error) {
const errorMessage = error instanceof Error ? error.message : String(error);
this.log?.error?.(`Step '${stepName}' failed: ${errorMessage}`);
throw error;
}
};
const steps = Reflect.getMetadata(metadata_1.STEP_METADATA_KEY, target) ?? [];
steps.push({
name: stepName,
method: propertyKey,
condition: options.condition,
when: options.when,
before: options.before,
after: options.after,
retries: options.retries ?? 0,
timeout: options.timeout,
required: options.required !== false,
onError: options.onError,
executed: false
});
Reflect.defineMetadata(metadata_1.STEP_METADATA_KEY, steps, target);
return descriptor;
};
};
exports.Step = Step;