UNPKG

ng-factory

Version:

An **upgradable** development workflow library built on top of Gulp and focused on AngularJS components and applications.

65 lines (51 loc) 2.14 kB
'use strict'; // $ npm i gulpjs/gulp.git#4.0 --save-dev // @url https://github.com/jonschlinkert/time-require // require('time-require'); // try { require('debug-utils'); } catch(e) {} var util = require('util'); var _ = require('lodash'); var chalk = require('chalk'); var log = require('./helpers/log'); function ngFactory(taker, options) { if(!taker || (!options && taker && taker.constructor.name === 'Object')) { options = taker; var Undertaker = require('undertaker'); taker = new Undertaker(); } // Load all resolved undertaker tasks var TasksManager = require('./tasks').bind(taker); var tasks = TasksManager.resolve('undertaker-*'); if(!tasks.length) { log(chalk.red('Error: ng-factory did not find any undertaker tasks to register.\n') + ' -> ' + chalk.yellow('You might want to `npm i undertaker-app-tasks` to fix this error for an application.')); process.exit(1); } log(util.format('Found %s undertaker-registry to load with %s', chalk.magenta(tasks.length), chalk.magenta('ng-factory'))); var defaults = TasksManager.loadDefaults(tasks); TasksManager.registerTasks(tasks); // Initialize and fetch config var ConfigRegistry = require('./config'); var configRegistry = new ConfigRegistry(_.merge(defaults, options)); // Reset each task in the registry with // `ConfigRegistry.prototype.set` which will bind them to the config object. taker.registry(configRegistry); taker._config = configRegistry.config; // Finally load any found indexes containing meta-aliases // @TODO investigate why loading index registries before config breaks the fn binding TasksManager.registerIndexes(tasks, taker._config); return taker; } ngFactory.use = function(taker, options) { // Monkeypatch legacy array handling // eg. gulp.task('serve', ['ng:serve']); var taskFn = taker.task; taker.task = function(name, meta) { if(Array.isArray(meta)) { return taskFn.call(taker, name, taker.series(meta)); } return taskFn.apply(taker, arguments); }; return ngFactory.bind(null, taker)(options)._config; }; module.exports = ngFactory;