polymerx-cli
Version:
Unlock the power of Polymer 3, Web Components and modern web tools.
100 lines (79 loc) • 2.38 kB
JavaScript
;
exports.__esModule = true;
exports.default = void 0;
var _fs = _interopRequireDefault(require("fs"));
var _path = _interopRequireDefault(require("path"));
var _webpack = _interopRequireDefault(require("webpack"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class WebpackConfigHelpers {
constructor(cwd) {
this._cwd = cwd;
}
get webpack() {
return _webpack.default;
}
getLoaders(config) {
return this.getRules(config).map(({
rule,
index
}) => ({
rule,
ruleIndex: index,
loaders: rule.loaders || rule.use || rule.loader
}));
}
getRules(config) {
return [...(config.module.loaders || []), ...(config.module.rules || [])].map((rule, index) => ({
index,
rule
}));
}
getPlugins(config) {
return (config.plugins || []).map((plugin, index) => ({
index,
plugin
}));
}
getRulesByMatchingFile(config, file) {
const filePath = _path.default.resolve(this._cwd, file);
return this.getRules(config).filter(w => w.rule.test && w.rule.test.exec(filePath));
}
getLoadersByName(config, name) {
return this.getLoaders(config).map(({
rule,
ruleIndex,
loaders
}) => Array.isArray(loaders) ? loaders.map((loader, loaderIndex) => ({
rule,
ruleIndex,
loader,
loaderIndex
})) : [{
rule,
ruleIndex,
loader: loaders,
loaderIndex: -1
}]).reduce((arr, loaders) => arr.concat(loaders), []).filter(({
loader
}) => loader === name || loader && loader.loader === name);
}
getPluginsByName(config, name) {
return this.getPlugins(config).filter(w => w.plugin && w.plugin.constructor && w.plugin.constructor.name === name);
}
getPluginsByType(config, type) {
return this.getPlugins(config).filter(w => w.plugin instanceof type);
}
setHtmlTemplate(config, template) {
let isPath;
try {
_fs.default.statSync(template);
isPath = true;
} catch (error) {}
const templatePath = isPath ? `!!ejs-loader!${_path.default.resolve(this._cwd, template)}` : template;
const {
plugin: htmlWebpackPlugin
} = this.getPluginsByName(config, 'HtmlWebpackPlugin')[0];
htmlWebpackPlugin.options.template = templatePath;
}
}
exports.default = WebpackConfigHelpers;