@falcondev-oss/workflow 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +6 -0
- package/dist/index.mjs +32 -19
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -14,10 +14,15 @@ declare class WorkflowInputError extends UnrecoverableError {
|
|
|
14
14
|
}
|
|
15
15
|
//#endregion
|
|
16
16
|
//#region src/settings.d.ts
|
|
17
|
+
type WorkflowLogger = {
|
|
18
|
+
info?: (...data: any[]) => void;
|
|
19
|
+
success?: (...data: any[]) => void;
|
|
20
|
+
};
|
|
17
21
|
declare const Settings: {
|
|
18
22
|
defaultPrefix: string;
|
|
19
23
|
defaultConnection: IORedis | undefined;
|
|
20
24
|
defaultCronTimezone: string | undefined;
|
|
25
|
+
logger: WorkflowLogger | undefined;
|
|
21
26
|
};
|
|
22
27
|
//#endregion
|
|
23
28
|
//#region src/serializer.d.ts
|
|
@@ -88,6 +93,7 @@ interface WorkflowOptions<RunInput, Input, Output> {
|
|
|
88
93
|
connection?: ConnectionOptions;
|
|
89
94
|
}
|
|
90
95
|
declare class Workflow<RunInput, Input, Output> {
|
|
96
|
+
id: string;
|
|
91
97
|
private opts;
|
|
92
98
|
private queue?;
|
|
93
99
|
private queueEvents?;
|
package/dist/index.mjs
CHANGED
|
@@ -20,7 +20,8 @@ var WorkflowInputError = class extends UnrecoverableError {
|
|
|
20
20
|
const Settings = {
|
|
21
21
|
defaultPrefix: "falcondev-oss-workflow",
|
|
22
22
|
defaultConnection: void 0,
|
|
23
|
-
defaultCronTimezone: void 0
|
|
23
|
+
defaultCronTimezone: void 0,
|
|
24
|
+
logger: void 0
|
|
24
25
|
};
|
|
25
26
|
const defaultRedisConnection = createSingletonPromise(async () => {
|
|
26
27
|
if (Settings.defaultConnection) return Settings.defaultConnection;
|
|
@@ -61,22 +62,26 @@ function getTracer() {
|
|
|
61
62
|
return trace.getTracer("falcondev-oss-workflow");
|
|
62
63
|
}
|
|
63
64
|
async function runWithTracing(spanName, options, fn, context$1) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
65
|
+
return context$1 ? getTracer().startActiveSpan(spanName, options, context$1, runWithSpan(fn)) : getTracer().startActiveSpan(spanName, options, runWithSpan(fn));
|
|
66
|
+
}
|
|
67
|
+
function runWithSpan(fn) {
|
|
68
|
+
return async (span) => {
|
|
69
|
+
try {
|
|
70
|
+
const result = await fn(span);
|
|
71
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
72
|
+
return result;
|
|
73
|
+
} catch (err_) {
|
|
74
|
+
const err = err_;
|
|
75
|
+
span.recordException(err);
|
|
76
|
+
span.setStatus({
|
|
77
|
+
code: SpanStatusCode.ERROR,
|
|
78
|
+
message: err.message
|
|
79
|
+
});
|
|
80
|
+
throw err_;
|
|
81
|
+
} finally {
|
|
82
|
+
span.end();
|
|
83
|
+
}
|
|
84
|
+
};
|
|
80
85
|
}
|
|
81
86
|
|
|
82
87
|
//#endregion
|
|
@@ -188,15 +193,18 @@ var WorkflowStep = class WorkflowStep {
|
|
|
188
193
|
//#endregion
|
|
189
194
|
//#region src/workflow.ts
|
|
190
195
|
var Workflow = class {
|
|
196
|
+
id;
|
|
191
197
|
opts;
|
|
192
198
|
queue;
|
|
193
199
|
queueEvents;
|
|
194
200
|
constructor(opts) {
|
|
201
|
+
this.id = opts.id;
|
|
195
202
|
this.opts = opts;
|
|
196
203
|
}
|
|
197
204
|
async work(opts) {
|
|
198
205
|
const queue = await this.getOrCreateQueue();
|
|
199
206
|
await new Worker(this.opts.id, async (job) => {
|
|
207
|
+
Settings.logger?.info?.(`Processing workflow job ${job.id} of workflow ${this.opts.id}`);
|
|
200
208
|
const jobId = job.id;
|
|
201
209
|
if (!jobId) throw new Error("Job ID is missing");
|
|
202
210
|
const deserializedData = deserialize$1(job.data);
|
|
@@ -209,7 +217,8 @@ var Workflow = class {
|
|
|
209
217
|
},
|
|
210
218
|
kind: SpanKind.CONSUMER
|
|
211
219
|
}, async (span) => {
|
|
212
|
-
|
|
220
|
+
const start = performance.now();
|
|
221
|
+
const result = await this.opts.run({
|
|
213
222
|
input: parsedData?.value,
|
|
214
223
|
step: new WorkflowStep({
|
|
215
224
|
queue,
|
|
@@ -217,13 +226,17 @@ var Workflow = class {
|
|
|
217
226
|
workflowId: this.opts.id
|
|
218
227
|
}),
|
|
219
228
|
span
|
|
220
|
-
})
|
|
229
|
+
});
|
|
230
|
+
const end = performance.now();
|
|
231
|
+
Settings.logger?.success?.(`Completed workflow job ${job.id} of workflow ${this.opts.id} in ${(end - start).toFixed(2)} ms`);
|
|
232
|
+
return serialize$1(result);
|
|
221
233
|
}, propagation.extract(ROOT_CONTEXT, deserializedData.tracingHeaders));
|
|
222
234
|
}, {
|
|
223
235
|
connection: this.opts.connection ?? await defaultRedisConnection(),
|
|
224
236
|
prefix: Settings.defaultPrefix,
|
|
225
237
|
...opts
|
|
226
238
|
}).waitUntilReady();
|
|
239
|
+
Settings.logger?.info?.(`Worker started for workflow ${this.opts.id}`);
|
|
227
240
|
return this;
|
|
228
241
|
}
|
|
229
242
|
async run(input, opts) {
|
package/package.json
CHANGED