UNPKG

svgo

Version:

Nodejs-based tool for optimizing SVG vector graphics files

62 lines (57 loc) 1.73 kB
'use strict'; const { visit } = require('../xast.js'); /** * Plugins engine. * * @module plugins * * @param {Object} ast input ast * @param {Object} info extra information * @param {Array} plugins plugins object from config * @return {Object} output ast */ const invokePlugins = (ast, info, plugins, overrides, globalOverrides) => { for (const plugin of plugins) { const override = overrides?.[plugin.name]; if (override === false) { continue; } const params = { ...plugin.params, ...globalOverrides, ...override }; const visitor = plugin.fn(ast, params, info); if (visitor != null) { visit(ast, visitor); } } }; exports.invokePlugins = invokePlugins; const createPreset = ({ name, plugins }) => { return { name, fn: (ast, params, info) => { const { floatPrecision, overrides } = params; const globalOverrides = {}; if (floatPrecision != null) { globalOverrides.floatPrecision = floatPrecision; } if (overrides) { const pluginNames = plugins.map(({ name }) => name); for (const pluginName of Object.keys(overrides)) { if (!pluginNames.includes(pluginName)) { console.warn( `You are trying to configure ${pluginName} which is not part of ${name}.\n` + `Try to put it before or after, for example\n\n` + `plugins: [\n` + ` {\n` + ` name: '${name}',\n` + ` },\n` + ` '${pluginName}'\n` + `]\n`, ); } } } invokePlugins(ast, info, plugins, overrides, globalOverrides); }, }; }; exports.createPreset = createPreset;