universal-webpack
Version:
Isomorphic Webpack
233 lines (179 loc) • 8.12 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.get_style_rules = get_style_rules;
exports.is_style_rule = is_style_rule;
exports.parse_loader = parse_loader;
exports.stringify_loader = stringify_loader;
exports.find_loader = find_loader;
exports.normalize_configuration_rule_loaders = normalize_configuration_rule_loaders;
exports.normalize_rule_loaders = normalize_rule_loaders;
var _util = _interopRequireDefault(require("util"));
var _querystring = _interopRequireDefault(require("querystring"));
var _helpers = require("./helpers.js");
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
// https://webpack.js.org/configuration/module/
// Finds module rules with `style-loader`.
// If a rule has `oneOf` then a branch of `oneOf` is returned.
//
// `configuration` rule loaders must already be normalized.
//
function get_style_rules(configuration) {
// Sanity check
if (!configuration.module.rules) {
throw new Error('No `module.rules` found in Webpack configuration. Migrate your configuration to Webpack 2: https://webpack.js.org/guides/migrating/');
}
var style_rules = [];
var _iterator = _createForOfIteratorHelper(configuration.module.rules),
_step;
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
var rule = _step.value;
// Recurse into `oneOf`.
// https://webpack.js.org/configuration/module/#rule-oneof
if (rule.oneOf) {
var _iterator2 = _createForOfIteratorHelper(rule.oneOf),
_step2;
try {
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
var subrule = _step2.value;
if (is_style_rule(subrule)) {
style_rules.push(subrule);
}
}
} catch (err) {
_iterator2.e(err);
} finally {
_iterator2.f();
}
continue;
}
if (is_style_rule(rule)) {
style_rules.push(rule);
}
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
return style_rules;
} // `rule` must already be normalized
function is_style_rule(rule) {
// Check if this module loader has a `style-loader`
var style_loader = find_loader(rule, 'style-loader'); // Is it `extract-text-webpack-plugin` loader
// (the regular expression is a filesystem path
// which is `.../extract-text-webpack-plugin/loader.js` for v2
// and `.../extract-text-webpack-plugin/dist/loader.js` for v3)
var extract_text_plugin_loader = rule.use && rule.use.filter(function (loader) {
return /extract-text-webpack-plugin/.test(loader.loader);
})[0];
return style_loader && !extract_text_plugin_loader;
} // Converts loader string into a Webpack 2 loader structure
function parse_loader(loader) {
var name;
var options;
if ((0, _helpers.is_object)(loader)) {
if (!loader.loader) {
throw new Error(".loader not set for a used loader");
}
var parsed = parse_loader(loader.loader);
name = parsed.loader;
options = parsed.options || loader.query || loader.options;
if (typeof options === 'string') {
options = _querystring["default"].parse(options);
}
} else {
name = loader;
if (name.indexOf('?') >= 0) {
name = name.substring(0, name.indexOf('?'));
options = _querystring["default"].parse(loader.substring(loader.indexOf('?') + 1));
}
}
var result = {
loader: name
};
if (options) {
result.options = options;
}
return result;
} // Converts loader info into a string
function stringify_loader(loader) {
return loader.loader + (loader.options ? '?' + _querystring["default"].stringify(loader.options) : '');
} // Checks if the passed loader is `loader_name`.
function find_loader(rule, loader_name) {
return rule.use && rule.use.filter(function (_) {
return _.loader === loader_name;
})[0];
} // Converts `loader` to `loaders`
function normalize_configuration_rule_loaders(configuration) {
var _iterator3 = _createForOfIteratorHelper(configuration.module.rules),
_step3;
try {
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
var rule = _step3.value;
normalize_rule_loaders(rule);
}
} catch (err) {
_iterator3.e(err);
} finally {
_iterator3.f();
}
} // Converts `loader` to `loaders`
function normalize_rule_loaders(rule) {
// Recurse into `oneOf`.
// https://webpack.js.org/configuration/module/#rule-oneof
if (rule.oneOf) {
var _iterator4 = _createForOfIteratorHelper(rule.oneOf),
_step4;
try {
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
var subrule = _step4.value;
if (!subrule.use && !subrule.type) {
throw new Error("A \"oneOf\" subrule must have a \"use\" or \"type\" property.", _util["default"].inspect(subrule));
}
normalize_rule_loaders(subrule);
}
} catch (err) {
_iterator4.e(err);
} finally {
_iterator4.f();
}
return;
} // Convert `loaders` to `use`
if (rule.loaders) {
rule.use = rule.loaders;
delete rule.loaders;
} // If a `loader` shorthand is used, convert it to `use`
if (rule.loader) {
var loaders = rule.loader.split('!');
if (rule.query || rule.options) {
var parsed_loader = parse_loader(loaders[0]);
if (loaders.length > 1 || parsed_loader.options) {
throw new Error("You have both a compound \".loader\" and a \".query\" (or an \".options\") property set up directly inside a module rule: ".concat(_util["default"].inspect(rule), ". Rewrite it either using \".loaders\" or \".use\"."));
}
loaders = [parsed_loader];
parsed_loader.options = rule.query || rule.options;
delete rule.query;
delete rule.options;
}
rule.use = loaders;
delete rule.loader;
}
if (rule.use) {
if (typeof rule.use === 'string') {
rule.use = [rule.use];
}
if (!Array.isArray(rule.use)) {
throw new Error("Invalid Webpack configuration: \"rule.use\" must be an array:\n\n".concat(JSON.stringify(rule, null, 2), "\n\nSee https://webpack.js.org/configuration/module/#rule-use"));
}
rule.use = rule.use.map(parse_loader);
} else if (!rule.type) {
throw new Error("Neither \"loaders\" nor \"loader\" nor \"use\" nor \"oneOf\" nor \"type\" are present inside a module rule: ".concat(_util["default"].inspect(rule)));
}
}
//# sourceMappingURL=loaders.js.map