Advertisement
Guest User

bootstrap.loader.js

a guest
Apr 12th, 2018
278
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 'use strict';
  2.  
  3. var _semver = require('semver');
  4.  
  5. var _semver2 = _interopRequireDefault(_semver);
  6.  
  7. var _path = require('path');
  8.  
  9. var _path2 = _interopRequireDefault(_path);
  10.  
  11. var _loaderUtils = require('loader-utils');
  12.  
  13. var _loaderUtils2 = _interopRequireDefault(_loaderUtils);
  14.  
  15. var _resolveModule = require('./utils/resolveModule');
  16.  
  17. var _resolveModule2 = _interopRequireDefault(_resolveModule);
  18.  
  19. var _checkBootstrapVersion = require('./utils/checkBootstrapVersion');
  20.  
  21. var _checkBootstrapVersion2 = _interopRequireDefault(_checkBootstrapVersion);
  22.  
  23. var _processStyleLoaders = require('./utils/processStyleLoaders');
  24.  
  25. var _processStyleLoaders2 = _interopRequireDefault(_processStyleLoaders);
  26.  
  27. var _joinLoaders = require('./utils/joinLoaders');
  28.  
  29. var _joinLoaders2 = _interopRequireDefault(_joinLoaders);
  30.  
  31. var _buildExtractStylesLoader = require('./utils/buildExtractStylesLoader');
  32.  
  33. var _buildExtractStylesLoader2 = _interopRequireDefault(_buildExtractStylesLoader);
  34.  
  35. var _createRequire = require('./utils/createRequire');
  36.  
  37. var _createRequire2 = _interopRequireDefault(_createRequire);
  38.  
  39. var _logger = require('./utils/logger');
  40.  
  41. var _logger2 = _interopRequireDefault(_logger);
  42.  
  43. var _fileExists = require('./utils/fileExists');
  44.  
  45. var _fileExists2 = _interopRequireDefault(_fileExists);
  46.  
  47. var _getEnvProp = require('./utils/getEnvProp');
  48.  
  49. var _getEnvProp2 = _interopRequireDefault(_getEnvProp);
  50.  
  51. var _bootstrap = require('./bootstrap.config');
  52.  
  53. var _bootstrap2 = _interopRequireDefault(_bootstrap);
  54.  
  55. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  56.  
  57. // For Node <= v0.12.x Babel polyfill is required
  58. if (_semver2.default.lt(process.version, '4.0.0') && !global._babelPolyfill) {
  59.   try {
  60.     // eslint-disable-next-line global-require
  61.     require('babel-polyfill');
  62.   } catch (e) {
  63.     try {
  64.       // eslint-disable-next-line global-require
  65.       require('babel-core/polyfill');
  66.     } catch (ee) {
  67.       try {
  68.         // eslint-disable-next-line global-require
  69.         require('babel/polyfill');
  70.       } catch (eee) {
  71.         throw new Error('\n          For Node <= v0.12.x Babel polyfill is required.\n          Make sure it\'s installed in your \'node_modules/\' directory.\n          ' + eee + '\n        ');
  72.       }
  73.     }
  74.   }
  75. }
  76.  
  77. // Read more about the next line
  78. // at https://github.com/shakacode/bootstrap-loader/pull/139
  79. /* eslint-disable import/imports-first */
  80. /* eslint-disable func-names, import/first */
  81.  
  82. module.exports = function () {};
  83.  
  84. /**
  85.  * Bootstrap loader entry point
  86.  *
  87.  * @param {string} source - Path to dummy file with empty object.
  88.  *                          Needed b/c we have to apply loader to some file.
  89.  * @returns {string}
  90.  */
  91. module.exports.pitch = function (source) {
  92.   if (this.cacheable) this.cacheable();
  93.  
  94.   var _ref = _loaderUtils2.default.getOptions(this) || {},
  95.       extractStyles = _ref.extractStyles,
  96.       configFilePath = _ref.configFilePath
  97.  
  98.   if (configFilePath) {
  99.     var fullPathToUserConfig = _path2.default.resolve(__dirname, configFilePath);
  100.     if (!(0, _fileExists2.default)(fullPathToUserConfig)) {
  101.       throw new Error('\n        Cannot find config file ' + fullPathToUserConfig + '. You might want to pass the full path.\n      ');
  102.     }
  103.   }
  104.  
  105.   var config = (0, _bootstrap2.default)({ extractStyles: extractStyles, customConfigFilePath: configFilePath });
  106. console.log(config);
  107.   function isDebugEnabled() {
  108.     if (config.loglevel === 'debug') {
  109.       return true;
  110.     }
  111.     if (!process.env.DEBUG) {
  112.       return false;
  113.     }
  114.  
  115.     switch (process.env.DEBUG.toString().toLowerCase()) {
  116.       case 'true':
  117.       case 'yes':
  118.       case '1':
  119.         return true;
  120.       default:
  121.         return false;
  122.     }
  123.   }
  124.  
  125.   global.__DEBUG__ = isDebugEnabled();
  126.  
  127.   var whichWayDebugEnabledMsg = process.env.DEBUG ? 'DEBUG defined in your ENV.' : "your config log level set to 'debug'.";
  128.  
  129.   _logger2.default.debug('bootstrap-loader is in DEBUG mode because you have ' + whichWayDebugEnabledMsg);
  130.  
  131.   _logger2.default.debug('Using config file ' + config.configFilePath);
  132.  
  133.   _logger2.default.debug('Query from webpack config:', this.query || '*none*');
  134.  
  135.   var bootstrapVersion = config.bootstrapVersion;
  136.  
  137.   // Resolve `bootstrap` package
  138.   var bootstrapNPMModule = bootstrapVersion === 3 ? 'bootstrap-sass' : 'bootstrap';
  139.  
  140.   _logger2.default.debug('Using Bootstrap module:', bootstrapNPMModule);
  141.   _logger2.default.debug('bootstrapPath Config ' + config.bootstrapPath);
  142.   //console.log(config.bootstrapPath);
  143.   //config.bootstrapPath = bootstrapPath || (0, _resolveModule2.default)(bootstrapNPMModule);
  144.   _logger2.default.debug('bootstrapPath DEfault ' + _resolveModule2.default(bootstrapNPMModule));
  145.  
  146.   //process.exit();
  147.   _logger2.default.debug('Bootstrap module location (abs): ' + config.bootstrapPath);
  148.   if (!config.bootstrapPath) {
  149.     var msg = 'Could not resolve module \'' + bootstrapNPMModule + '\' which must be installed when bootstrap version is configured to v' + bootstrapVersion + '.\nYou must install \'bootstrap\' for bootstrap v4 or \'bootstrap-sass\' for bootstrap v3.\nYou can also specify the location manually by specifying \'bootstrapPath\' in bootstrap-loader\'s query string.\nSee https://github.com/shakacode/bootstrap-loader/blob/master/README.md#usage.';
  150.     throw new Error(msg);
  151.   }
  152.  
  153.   config.bootstrapRelPath = _path2.default.relative(this.context, config.bootstrapPath);
  154.   _logger2.default.debug('Bootstrap module location (rel): ' + config.bootstrapRelPath);
  155.  
  156.   _logger2.default.debug('Context:', this.context);
  157.   _logger2.default.debug('Using Bootstrap version:', bootstrapVersion);
  158.  
  159.   if (!config.bootstrapPath) {
  160.     throw new Error('\n      Could not find path to \'' + bootstrapNPMModule + '\' module.\n      Make sure it\'s installed in your \'node_modules/\' directory.\n    ');
  161.   }
  162.   var bootstrapNPMVersion = (0, _checkBootstrapVersion2.default)(bootstrapVersion, config.bootstrapPath);
  163.  
  164.   if (!bootstrapNPMVersion.allGood) {
  165.     throw new Error('\n      Looks like you have wrong version of Bootstrap.\n      Loader wants: ' + bootstrapVersion + '.x.x\n      Installed version: ' + bootstrapNPMVersion.version + '\n    ');
  166.   }
  167.  
  168.   _logger2.default.debug('Bootstrap NPM package version:', bootstrapNPMVersion.version);
  169.  
  170.   _logger2.default.debug('Normalized params:', '\n', config);
  171.  
  172.   var result = {};
  173.  
  174.   var dummySourceRel = _loaderUtils2.default.urlToRequest(_path2.default.relative(this.context, source));
  175.  
  176.   var bootstrapConfig = JSON.stringify(config);
  177.   // Handle styles
  178.   if (config.styles) {
  179.     if (!(0, _getEnvProp2.default)('styleLoaders', config)) {
  180.       throw new Error('\nCould not find \'styleLoaders\' in your config.\nYou can use default ones:\n  styleLoaders: [\'style\', \'css\', \'sass\']\n      ');
  181.     }
  182.  
  183.     var styleLoadersWithSourceMapsAndResolveUrlLoader = (0, _processStyleLoaders2.default)({
  184.       loaders: config.styleLoaders,
  185.       disableSassSourceMap: config.disableSassSourceMap,
  186.       disableResolveUrlLoader: config.disableResolveUrlLoader
  187.     });
  188.  
  189.     var styleLoaders = config.extractStyles ? (0, _buildExtractStylesLoader2.default)(styleLoadersWithSourceMapsAndResolveUrlLoader) : (0, _joinLoaders2.default)(styleLoadersWithSourceMapsAndResolveUrlLoader);
  190.     var bootstrapStylesLoader = _loaderUtils2.default.urlToRequest(_path2.default.relative(this.context, require.resolve(_loaderUtils2.default.urlToRequest('bootstrap.styles.loader.js')))) + '?' + bootstrapConfig + '!';
  191.     var styles = styleLoaders + bootstrapStylesLoader + dummySourceRel;
  192.  
  193.     result.css = (0, _createRequire2.default)(styles);
  194.   }
  195.  
  196.   // Handle scripts
  197.   if (config.scripts) {
  198.     var bootstrapScriptsLoader = _loaderUtils2.default.urlToRequest(_path2.default.relative(this.context, require.resolve(_loaderUtils2.default.urlToRequest('bootstrap.scripts.loader.js')))) + '?' + bootstrapConfig + '!';
  199.     var scripts = bootstrapScriptsLoader + dummySourceRel;
  200.     result.js = (0, _createRequire2.default)(scripts);
  201.   }
  202.  
  203.   var resultOutput = Object.keys(result).map(function (key) {
  204.     return 'module.exports.' + key + ' = ' + result[key] + '\n';
  205.   }).join('');
  206.  
  207.   _logger2.default.debug('Requiring:', '\n', resultOutput);
  208.  
  209.   return resultOutput;
  210. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement