workflow-4-node
Version:
Workflow 4 Node is a .NET Workflow Foundation like framework for Node.js. The goal is to reach feature equivalence and beyond.
67 lines (58 loc) • 1.91 kB
JavaScript
;
let Activity = require("./activity");
let util = require("util");
let _ = require("lodash");
let activityMarkup = require("./activityMarkup");
let is = require("../common/is");
let templateHelpers = require("./templateHelpers");
let constants = require("../common/constants");
function Template() {
Activity.call(this);
this.declare = null;
this.nonScopedProperties.add("_visitActivities");
this.nonScopedProperties.add("_getInternalActivities");
}
util.inherits(Template, Activity);
Template.prototype.initializeStructure = function(execContext) {
let self = this;
let require = execContext.rootActivity["@require"];
self.args = [];
templateHelpers.visitActivities(self.declare,
function(markup, parent, key) {
if (require) {
markup = templateHelpers.cloneDeep(markup);
markup["@require"] = require;
}
self.args.push(activityMarkup.parse(markup));
});
};
Template.prototype.run = function(callContext, args) {
if (_.isArray(args)) {
callContext.schedule(args, "_activitiesGot");
}
else {
callContext.complete();
}
};
Template.prototype._activitiesGot = function(callContext, reason, result) {
if (reason === Activity.states.complete) {
if (_.isArray(result) && result.length) {
let idx = 0;
let declare = _.cloneDeep(this.declare);
let setupTasks = [];
templateHelpers.visitActivities(declare, function(markup, parent, key) {
setupTasks.push(function() {
parent[key] = result[idx++];
});
});
for (let t of setupTasks) {
t();
}
callContext.complete(declare);
}
}
else {
callContext.end(reason, result);
}
};
module.exports = Template;