Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
import inlineDefs from './plugins/inlineDefs'
// Enable removeAttrs plugin
// Remove id attribute to prevent conflict with our id
removeAttrs.active = true
removeAttrs.params.attrs = 'svg:id'
// Disable removeViewBox plugin and enable removeDimensions
// Keep viewBox and remove width & height attribute
removeViewBox.active = false
removeDimensions.active = true
// Make all styles inline
// By definition, a defs sprite is not usable as a CSS sprite
inlineStyles.active = true
inlineStyles.params.onlyMatchedOnce = false
const svgOptimizer = new Svgo({
plugins: [
removeDimensions,
cleanupIDs,
removeAttrs,
removeViewBox,
inlineStyles,
{ inlineDefs }
]
})
export async function writeSVG (path, content) {
const result = await fs.writeFile(path, content, { flag: 'w' })
return result
}
// Set a global floatPrecision across all the plugins.
const floatPrecision = 6;
for (const plugin of Object.values(pluginsData)) {
if (plugin.params && 'floatPrecision' in plugin.params) {
plugin.params.floatPrecision = floatPrecision;
}
}
// Tweak plugin params.
cleanupIDs.params.minify = false;
convertPathData.params.makeArcs = undefined;
convertPathData.params.transformPrecision = floatPrecision;
convertShapeToPath.params.convertArcs = true;
convertTransform.params.transformPrecision = floatPrecision;
inlineStyles.params.onlyMatchedOnce = false;
removeUselessStrokeAndFill.params.removeNone = true;
const optimizedPluginsData = (function() {
return Object.values(pluginsData)
.map(item => [item])
.reduce((arr, item) => {
const last = arr[arr.length - 1];
if (last && item[0].type === last[0].type) {
last.push(item[0]);
} else {
arr.push(item);
}
return arr;
}, []);
})();
// Set a global floatPrecision across all the plugins.
const floatPrecision = 6;
for (const plugin of Object.values(pluginsData)) {
if (plugin.params && 'floatPrecision' in plugin.params) {
plugin.params.floatPrecision = floatPrecision;
}
}
// Tweak plugin params.
cleanupIDs.params.minify = false;
convertPathData.params.makeArcs = undefined;
convertPathData.params.transformPrecision = floatPrecision;
convertShapeToPath.params.convertArcs = true;
convertTransform.params.transformPrecision = floatPrecision;
inlineStyles.params.onlyMatchedOnce = false;
removeUselessStrokeAndFill.params.removeNone = true;
const optimizedPluginsData = (function () {
return Object.values(pluginsData)
.map(item => [item])
.reduce((arr, item) => {
const last = arr[arr.length - 1];
if (last && item[0].type === last[0].type) {
last.push(item[0]);
} else {
arr.push(item);
}
return arr;
}, []);
})();