all files / lib/resolver/ factory.js

100% Statements 12/12
100% Branches 2/2
100% Functions 3/3
100% Lines 12/12
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                20× 20×         19×   18× 17× 17×          
"use strict";
var util = require('../util');
var assert = util.assert;
var ResolutionError = require('../ResolutionError');
 
/**
 * Creates a new component instance by calling a factory function, passing in dependencies.
 *
 * @function
 * @exports Resolver:factory
 */
module.exports = function factory(ctx, res, next) {
  var factoryFn = res.instance() || ctx.component();
  assert.type(factoryFn,
    'function',
    "Factory resolver: Component must be a function: " + (typeof factoryFn),
    ResolutionError);
 
  ctx.resolve(this.args())
    .then(function(deps) {
      var instance = factoryFn.apply(null, deps.list);
      res.resolve(instance);
      next();
    })
    .catch(function(err) {
      res.fail(err);
      next();
    });
};