"use strict";
/**
* Steps loader.
*
* @module
*/
var U = require("glace-utils");
var CONF = require("./config");
var Step = require("./step");
var utils = require("./utils");
/**
* Loads steps from file.
*
* @function
* @arg {string} filePaths - List of file paths.
* @return {Step[]} List of steps.
*/
exports.loadSteps = filePaths => {
filePaths = U.defVal(filePaths, CONF.gen.stepsFiles);
if (!filePaths) {
throw new U.GlaceError("Source file(s) with steps are not passed");
}
var bucket = [];
for (var filePath of filePaths.reverse()) {
var data = utils.loadFile(filePath).reverse();
checkData(filePath, data);
mergeSteps(bucket, data);
}
return getSteps(bucket.reverse());
};
var mergeSteps = (ss1, ss2) => {
var s;
var names = ss1.map(s => s.name);
for (s of ss2) {
if (names.includes(s.name)) continue;
ss1.push(s);
}
};
/**
* Checks steps consistency.
*
* @ignore
*/
var checkData = (file, data) => {
var dups = utils.getDups(data.map(d => d.name));
if (dups.length) {
throw new Error(`${file} contains duplicated steps: ${dups.join(", ")}`);
}
};
/**
* Gets steps.
*
* @ignore
* @function
* @arg {object[]} data
* @return {Step[]}
*/
var getSteps = data => {
var ss = [];
for (var d of data) {
ss.push(new Step(d.name,
d.weight,
d.income,
d.outcome,
d.usage,
d.do,
d.expected,
d.complete,
d.incomplete,
d.before,
d.after));
};
return ss;
};