All files loader.js

87.1% Statements 27/31
50% Branches 3/6
83.33% Functions 5/6
92.86% Lines 26/28

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86                2x   2x 2x 2x                 2x 1x   1x       1x   1x 1x 1x 1x     1x     2x   1x 1x 3x 3x                 2x 3x 1x                         2x 2x 2x 4x                       2x    
"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);
 
    Iif (!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) {
        Iif (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));
    Iif (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;
};