Manual Reference Source

app/modules/pipeline/completer/completer.js

// @flow
const _ = require('lodash');
const Utils = require('../../utils/utils');
const Logger = require('../../../logger');

/**
 * Given an object and an array of completers as well as extra information that may
 * be interesting, complete the object iff the object does not exists (null or undefined)
 *
 * @param object - Object to complete
 * @param completers - Array of completers
 * @param info - Extra information
 */
async function complete(object: Object, completers: Array<any>,
        info: Object = {}): Promise<Object> {
    let final_object = object;
    for (const completer of completers) {
        const promises = _.map(completer, (func: Function, path: string) =>
            func(final_object, path, info));
        const results = await Promise.all(promises);
        final_object = Utils.merge_with_superposition(...results, final_object);
    }
    return final_object;
}

module.exports = complete;