UNPKG

3.18 kBJavaScriptView Raw
1'use strict';
2
3var _fs = require('fs');
4
5var _fs2 = _interopRequireDefault(_fs);
6
7var _path = require('path');
8
9var _path2 = _interopRequireDefault(_path);
10
11var _async = require('async');
12
13var _async2 = _interopRequireDefault(_async);
14
15var _loaderUtils = require('loader-utils');
16
17var _loaderUtils2 = _interopRequireDefault(_loaderUtils);
18
19var _processResources = require('./utils/processResources');
20
21var _processResources2 = _interopRequireDefault(_processResources);
22
23var _parseResources = require('./utils/parseResources');
24
25var _parseResources2 = _interopRequireDefault(_parseResources);
26
27var _rewriteImports = require('./utils/rewriteImports');
28
29var _rewriteImports2 = _interopRequireDefault(_rewriteImports);
30
31var _logger = require('./utils/logger');
32
33var _logger2 = _interopRequireDefault(_logger);
34
35function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
36
37/* eslint func-names: 0 */
38
39module.exports = function (source) {
40 var webpack = this;
41
42 if (webpack.cacheable) webpack.cacheable();
43
44 var callback = webpack.async();
45
46 global.__DEBUG__ = process.env.DEBUG === 'sass-resources-loader' || process.env.DEBUG === '*';
47
48 _logger2.default.debug('Hey, we\'re in DEBUG mode! Yabba dabba doo!');
49
50 // TODO: Remove `webpack.options.sassResources` support after first stable webpack@2 release
51 var isModernWebpack = webpack.version >= 2;
52 var resourcesFromConfig = isModernWebpack ? (_loaderUtils2.default.getOptions(this) || {}).resources : webpack.options.sassResources;
53
54 if (!resourcesFromConfig) {
55 var error = new Error('\n Can\'t find sass resources in your config.\n Make sure ' + (isModernWebpack ? 'loader.options.resources' : 'webpackConfig.sassResources') + ' exists.\n ');
56
57 return callback(error);
58 }
59
60 var resourcesLocations = (0, _parseResources2.default)(resourcesFromConfig);
61 var moduleContext = webpack.context;
62 var webpackConfigContext = webpack.rootContext || webpack.options && webpack.options.context || process.cwd();
63
64 if (!webpack.rootContext && !webpack.options && !webpack.options.context) {
65 _logger2.default.debug('`options.context` is missing. Using current working directory as a root instead:', process.cwd());
66 }
67
68 _logger2.default.debug('Module context:', moduleContext);
69 _logger2.default.debug('Webpack config context:', webpackConfigContext);
70 _logger2.default.debug('Resources:', resourcesLocations);
71
72 if (!resourcesLocations.length) {
73 var _error = new Error('\n Something wrong with provided resources.\n Make sure \'options.resources\' is String or Array of Strings.\n ');
74
75 return callback(_error);
76 }
77
78 var files = resourcesLocations.map(function (resource) {
79 var file = _path2.default.resolve(webpackConfigContext, resource);
80 webpack.addDependency(file);
81 return file;
82 });
83
84 _async2.default.map(files, function (file, cb) {
85 _fs2.default.readFile(file, 'utf8', function (error, contents) {
86 (0, _rewriteImports2.default)(error, file, contents, moduleContext, cb);
87 });
88 }, function (error, resources) {
89 (0, _processResources2.default)(error, resources, source, moduleContext, callback);
90 });
91};
\No newline at end of file