UNPKG

1.59 kBJavaScriptView Raw
1'use strict';
2
3var xtend = require('xtend');
4var runnel = require('runnel');
5var cleanLoaders = require('./lib/clean-loaders');
6var genRemote = require('./lib/gen-remote');
7var genIndex = require('./lib/gen-index');
8
9/**
10 * Generates all remote loaders and adds them to browserify instance if it is given.
11 * Calls back with paths to generated loaders.
12 *
13 * @name exports
14 * @function
15 * @param bify {Object} browserify instance (optional) but recommended
16 * @param remote {Object} hashtable containing information about remote scripts for which to generate and add loaders
17 * @param cb {Function} called back with paths to generated loaders
18 */
19module.exports = function addRemoteScripts(bify, remote, cb) {
20
21 if (typeof remote == 'function') {
22 cb = remote;
23 remote = bify;
24 bify = null;
25 }
26
27 cleanLoaders(function (err) {
28 if (err) return cb(err);
29 if (!remote) return cb(null, []);
30
31 var keys = Object.keys(remote);
32 if (!keys.length) return cb(null, []);
33
34 var gens = [];
35
36 var tasks = keys
37 .map(function (k) {
38 var rem = remote[k];
39 rem.key = k;
40
41 return function (cb) {
42 genRemote(rem, function (err, gen) {
43 if (err) return cb(err);
44 gens.push(gen);
45 cb();
46 });
47 };
48 })
49 .concat(genIndex.bind(null, gens))
50 .concat(
51 function (err) {
52 if (err) return cb(err);
53 if (bify) gens.forEach(function (gen) { bify.add(gen); });
54
55 cb(null, gens);
56 }
57 );
58
59 runnel(tasks);
60 });
61};