UNPKG

mozilla-profile-builder

Version:

Create profiles for firefox/b2g desktop

81 lines (66 loc) 2.17 kB
// we obvious always need to create a profile =p var Profile = require('./lib/profile'), profileOption = require('./lib/options/profile'); /** * Profile generation is made up of calling out to many smaller * modules.. This primary module handles the glue and ordering * of how the smaller modules are invoked. */ /** * Object to module mappings. Individual modules may consume one or more options * but are only loaded when their primary option is invoked. */ var OPTIONS = { 'apps': './lib/options/apps', 'prefs': './lib/options/prefs', 'settings': './lib/options/settings', 'extracts': './lib/options/extracts' }; /** * Creates a profile for use with a gecko product. * * Master copy of options is kept in the README.md. * * @param {Object} options (see docs README.md or individual option files). * @param {Function} callback [Error err, Profile profile]. */ function create(options, callback) { options = options || {}; // always create a profile first. profileOption(options, function(err, path) { if (err) return callback(err); // create the object representing the profile. var instance = new Profile(path); // next step is to build the chain of actions var pending; var actions = []; for (var key in options) { var module = OPTIONS[key]; if (module) { actions.push(require(module)); } } pending = actions.length; // abort async if we don't have any other steps if (pending === 0) { return process.nextTick(callback.bind(null, null, instance)); } var lastErr = null; // executed when each action ends. function next(err) { // XXX: allow options to set properties on the profile object? // we don't fail on error but record the most recent one and pass it up. lastErr = err || lastErr; if (--pending === 0) { callback(lastErr, instance); } } var action; while (action = actions.shift()) { // every option function accepts a profile, the options and a callback action(path, options, next); } }); } module.exports.create = create; module.exports.Profile = Profile;