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.
105 lines (91 loc) • 3.44 kB
JavaScript
;
var Activity = require("./activity");
var util = require("util");
var _ = require("lodash");
function Merge() {
Activity.call(this);
this.isTrue = true;
this.isFalse = false;
}
util.inherits(Merge, Activity);
Merge.prototype.run = function (callContext, args) {
callContext.schedule(args, "_argsGot");
};
Merge.prototype._argsGot = function (callContext, reason, result) {
if (reason !== Activity.states.complete) {
callContext.end(reason, result);
return;
}
var merged = undefined;
var mergedIsObj = false;
var mergedIsArray = false;
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = result[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var item = _step.value;
var isObj = _.isPlainObject(item);
var isArray = _.isArray(item);
if (isObj || isArray) {
if (!merged) {
merged = isObj ? _.cloneDeep(item) : item.slice(0);
mergedIsObj = isObj;
mergedIsArray = isArray;
} else if (isObj) {
if (!mergedIsObj) {
callContext.fail(new Error("Object cannot merged with an array."));
return;
}
_.extend(merged, item);
} else {
if (!mergedIsArray) {
callContext.fail(new Error("Array cannot merged with an object."));
return;
}
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = item[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var sub = _step2.value;
merged.push(sub);
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
}
} else {
callContext.fail(new Error("Only objects and arrays could be merged."));
return;
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
callContext.complete(merged);
};
module.exports = Merge;
//# sourceMappingURL=merge.js.map