UNPKG

image-minimizer-webpack-plugin

Version:

Webpack loader and plugin to optimize (compress) images using imagemin

90 lines (70 loc) 2.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _full = require("klona/full"); class InvalidConfigError extends Error {} function log(error, metaData, type) { if (metaData.result) { if (type === 'error') { metaData.result.errors.push(error); } else { metaData.result.warnings.push(error); } return; } throw error; } function normalizeConfig(minimizerOptions, metaData = {}) { if (!minimizerOptions || !minimizerOptions.plugins || minimizerOptions.plugins && minimizerOptions.plugins.length === 0) { log(new Error('No plugins found for `imagemin`. Please read documentation.'), metaData); return minimizerOptions; } const imageminConfig = (0, _full.klona)(minimizerOptions); if (!imageminConfig.pluginsMeta) { imageminConfig.pluginsMeta = []; } imageminConfig.plugins = imageminConfig.plugins.map(plugin => { const isPluginArray = Array.isArray(plugin); if (typeof plugin === 'string' || isPluginArray) { const pluginName = isPluginArray ? plugin[0] : plugin; // eslint-disable-next-line no-undefined const pluginOptions = isPluginArray ? plugin[1] : undefined; let requiredPlugin = null; let requiredPluginName = `imagemin-${pluginName}`; try { // eslint-disable-next-line import/no-dynamic-require, global-require requiredPlugin = require(requiredPluginName)(pluginOptions); } catch (ignoreError) { requiredPluginName = pluginName; try { // eslint-disable-next-line import/no-dynamic-require, global-require requiredPlugin = require(requiredPluginName)(pluginOptions); } catch (ignoreError1) { const pluginNameForError = pluginName.startsWith('imagemin') ? pluginName : `imagemin-${pluginName}`; log(new Error(`Unknown plugin: ${pluginNameForError}\n\nDid you forget to install the plugin?\nYou can install it with:\n\n$ npm install ${pluginNameForError} --save-dev\n$ yarn add ${pluginNameForError} --dev`), metaData); return false; } // Nothing } let version = 'unknown'; try { // eslint-disable-next-line import/no-dynamic-require, global-require ({ version } = require(`${requiredPluginName}/package.json`)); } catch (ignoreVersion) {// Nothing } imageminConfig.pluginsMeta.push([{ name: requiredPluginName, options: pluginOptions || {}, version }]); return requiredPlugin; } log(new InvalidConfigError(`Invalid plugin configuration "${JSON.stringify(plugin)}, plugin configuraion should be 'string' or '[string, object]'"`), metaData, 'error'); return false; }).filter(Boolean); return imageminConfig; } var _default = normalizeConfig; exports.default = _default;