entryLoader.js 2.04 KB
Newer Older
YazhouChen's avatar
YazhouChen committed
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
'use strict';

var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');

var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);

var _createClass2 = require('babel-runtime/helpers/createClass');

var _createClass3 = _interopRequireDefault(_createClass2);

var _loaderUtils = require('loader-utils');

var _loaderUtils2 = _interopRequireDefault(_loaderUtils);

var _normalizePath = require('normalize-path');

var _normalizePath2 = _interopRequireDefault(_normalizePath);

var _createEntry = require('../util/createEntry');

var _createEntry2 = _interopRequireDefault(_createEntry);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

var EntryConfig = function () {
  function EntryConfig() {
    (0, _classCallCheck3.default)(this, EntryConfig);

    this.files = [];
  }

  (0, _createClass3.default)(EntryConfig, [{
    key: 'addFile',
    value: function addFile(file) {
      var normalizedFile = (0, _normalizePath2.default)(file);
      this.files.push(normalizedFile);
    }
  }, {
    key: 'removeFile',
    value: function removeFile(file) {
      var normalizedFile = (0, _normalizePath2.default)(file);
      this.files = this.files.filter(function (f) {
        return f !== normalizedFile;
      });
    }
  }, {
    key: 'getFiles',
    value: function getFiles() {
      return this.files;
    }
  }]);
  return EntryConfig;
}();

var entryLoader = function entryLoader() {
  var _this = this;

  var loaderOptions = _loaderUtils2.default.getOptions(this);
  var config = loaderOptions.entryConfig;

  // Remove all dependencies of the loader result
  this.clearDependencies();

  var dependencies = config.getFiles().map(function (file) {
    return _loaderUtils2.default.stringifyRequest(_this, file);
  });

  // add all entries as dependencies
  dependencies.forEach(this.addDependency.bind(this));

  // build source code
  var sourceCode = (0, _createEntry2.default)(dependencies);

  this.callback(null, sourceCode, null);
};

module.exports = entryLoader;
module.exports.EntryConfig = EntryConfig;