vulpes
Version:
Job management framework
89 lines (81 loc) • 2.61 kB
JavaScript
;
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
// {
// [ITEM_TYPE]: ITEM_TYPE_JOB,
// id,
// type: DEFAULT_JOB_TYPE,
// status: JOB_STATUS_PENDING,
// priority: JOB_PRIORITY_NORMAL,
// created: getTimestamp(),
// parents: [],
// predicate: {
// attemptsMax: null,
// locked: false,
// timeBetweenRetries: ms("30s")
// },
// data: {},
// result: {
// data: {},
// type: null
// },
// times: {
// archived: null,
// firstStarted: null,
// started: null,
// stopped: null,
// completed: null
// },
// timeLimit: null,
// attempts: 0,
// archived: false
// };
function cloneJob(job) {
var output = rebaseObject(job);
if (output.predicate) {
output.predicate = rebaseObject(output.predicate);
}
if (output.times) {
output.times = rebaseObject(output.times);
}
if (output.data) {
output.data = rebaseObjectDeep(output.data);
}
if (output.result) {
output.result = rebaseObject(output.result);
if (output.result.data) {
output.result.data = rebaseObjectDeep(output.result.data);
}
}
if (output.parents) {
output.parents = [].concat(_toConsumableArray(output.parents));
}
return output;
}
function rebaseArrayDeep(arr) {
return arr.map(function (item) {
if (Array.isArray(item)) {
return rebaseArrayDeep(item);
} else if (item && (typeof item === "undefined" ? "undefined" : _typeof(item)) === "object") {
return rebaseObjectDeep(item);
}
return item;
});
}
function rebaseObject(obj) {
return Object.assign({}, obj);
}
function rebaseObjectDeep(obj) {
var output = rebaseObject(obj);
Object.keys(output).forEach(function (key) {
if (Array.isArray(output[key])) {
output[key] = rebaseArrayDeep(output[key]);
} else if (output[key] && _typeof(output[key]) === "object") {
output[key] = rebaseObjectDeep(output[key]);
}
});
return output;
}
module.exports = {
cloneJob: cloneJob
};