@ilijanl/temporalio-utils
Version:
A set of utils around temporalio typescript sdk
187 lines (183 loc) • 6.57 kB
JavaScript
;
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/workflow/index.ts
var workflow_exports = {};
__export(workflow_exports, {
createCallableActivities: () => createCallableActivities,
createWorkflow: () => createWorkflow,
createWorkflowsHandler: () => createWorkflowsHandler,
executeActivity: () => executeActivity,
executeChildWorkflow: () => executeChildWorkflow,
executeWorkflowAsActivity: () => executeWorkflowAsActivity,
startAsyncChildWorkflow: () => startAsyncChildWorkflow,
testingQueueName: () => testingQueueName,
workflowsToActivities: () => workflowsToActivities
});
module.exports = __toCommonJS(workflow_exports);
var wf = __toESM(require("@temporalio/workflow"), 1);
var import_lodash = __toESM(require("lodash.merge"), 1);
// src/common/utils.ts
var mapInputToArgs = (input) => input !== void 0 ? [input] : [];
var getWorkflowOptions = (definition, payload) => ({
args: mapInputToArgs(payload.input),
taskQueue: definition.taskQueue,
workflowId: payload.workflowId
});
// src/workflow/index.ts
var testingQueueName = "__testingQueue__";
var createWorkflow = (definition, execution) => {
return {
async executeFn(...args) {
return execution(...args).catch((error) => {
wf.log.error("Workflow failure caught", { error });
return Promise.reject(error);
});
},
definition
};
};
function calculateChildWorkflowOptions(definiton, payload, options) {
const childWorkflowOptions = getWorkflowOptions(definiton, payload);
return {
...childWorkflowOptions,
...options
};
}
var executeChildWorkflow = (definition, payload, options) => {
return wf.executeChild(
definition.workflowType,
calculateChildWorkflowOptions(definition, payload, options)
);
};
var startAsyncChildWorkflow = (definition, payload, options) => {
return wf.startChild(definition.workflowType, {
parentClosePolicy: wf.ParentClosePolicy.ABANDON,
cancellationType: wf.ChildWorkflowCancellationType.TRY_CANCEL,
...calculateChildWorkflowOptions(definition, payload, options)
});
};
function isTestQueue(queue) {
return queue === testingQueueName;
}
var createTestActivityOptions = (calledFromQueue) => {
const isTest = isTestQueue(calledFromQueue);
if (!isTest) {
return {};
}
return {
scheduleToStartTimeout: "1 seconds",
startToCloseTimeout: "3 seconds",
taskQueue: calledFromQueue,
retry: {
initialInterval: "1 second",
maximumAttempts: 2,
maximumInterval: "1 second",
backoffCoefficient: 1
}
};
};
async function executeActivity(activityDefinition, input, options) {
const contextInfo = wf.workflowInfo();
const finalOptions = (0, import_lodash.default)(
{},
activityDefinition.config,
createTestActivityOptions(contextInfo.taskQueue),
{
scheduleToCloseTimeout: options?.timeout
}
);
return wf.scheduleActivity(activityDefinition.activityType, mapInputToArgs(input), finalOptions);
}
var executeWorkflowAsActivity = (workflowDefinition, payload, activityOptions) => wf.scheduleActivity(workflowDefinition.workflowType, mapInputToArgs(payload), {
activityId: payload.workflowId,
// keep the default low so the tests fail fast
startToCloseTimeout: "3 seconds",
retry: {
maximumAttempts: 3
},
...activityOptions
});
var workflowsToActivities = (workflowDefinitions, activityOptions) => workflowDefinitions.reduce(
(agg, workflowDefinition) => {
async function workflowFn(input) {
const workflowInfo2 = wf.workflowInfo();
return executeWorkflowAsActivity(
workflowDefinition,
{
workflowId: workflowInfo2.workflowId,
input
},
activityOptions
);
}
agg[workflowDefinition.workflowType] = workflowFn;
return agg;
},
{}
);
var createWorkflowsHandler = (workflows) => {
const handlers = workflows.reduce(
(agg, workflow) => {
const workflowType = workflow.definition.workflowType;
if (agg[workflowType]) {
throw new Error(`Workflow "${workflowType}" is already defined`);
}
agg[workflowType] = workflow.executeFn;
return agg;
},
{}
);
return async function workflowHandler(...args) {
const workflowType = wf.workflowInfo().workflowType;
const workflowFn = handlers[workflowType];
if (!workflowFn) {
const details = workflowFn === void 0 ? "no such workflow handler is defined" : `expected a function, but got: '${typeof workflowFn}'`;
throw new TypeError(`Failed to initialize workflow of type '${workflowType}': ${details}`);
}
return workflowFn.apply(this, args);
};
};
var createCallableActivities = (activities) => Object.entries(activities).reduce((agg, [property, activityDefinition]) => {
agg[property] = function execute(input, options) {
return executeActivity(activityDefinition, input, options);
};
return agg;
}, {});
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
createCallableActivities,
createWorkflow,
createWorkflowsHandler,
executeActivity,
executeChildWorkflow,
executeWorkflowAsActivity,
startAsyncChildWorkflow,
testingQueueName,
workflowsToActivities
});