Skip to content

Shtian/vscode-svgocd

Repository files navigation

logo

Build Status code style: prettier downloads Known Vulnerabilities

✨ Features

  • Run SVGO on current open SVG file, or within text selection, through the extension command SVGOCD: Optimize current SVG
  • Looks for and reads svgo.config.{js, mjs, cjs} file in the workspace
  • Configure SVGO plugins directly through the SVGOCDs plugin settings
  • Reports file size change upon optimization

Workflow

⚙️ Settings

Settings can either be configured from the extension settings or having a svgo.config.{js,cjs} file in the workspace directory. A svgo config file will override the extension settings. See the svgo npm package repository for more information about configuration.

⚠️ Note that since the extension runs as a CommonJS module in VS Code, only this format is supported by the plugin.

Config file

/** @type {import('svgo').Config} */
module.exports = {
  multipass:
  js2svg: {
    indent: 2,
    pretty: true,
  },
  plugins: [
    {
      name: 'sortAttrs',
      params: {
        xmlnsOrder: 'alphabetical',
      },
    },
  ],
};

Extension settings

Supports all default SVGO plugin settings through extension settings (svgocd.plugins.*). Boolean values to enable/disable or object values for plugin settings can be used. Full list of plugins from https://github.com/svg/svgo :

View all plugin settings
Plugin Description
cleanupAttrs cleanup attributes from newlines, trailing, and repeating spaces
inlineStyles move and merge styles from <style> elements to element style attributes
removeDoctype remove doctype declaration
removeXMLProcInst remove XML processing instructions
removeComments remove comments
removeMetadata remove <metadata>
removeTitle remove <title>
removeDesc remove <desc>
removeUselessDefs remove elements of <defs> without id
removeXMLNS removes xmlns attribute (for inline svg, disabled by default)
removeEditorsNSData remove editors namespaces, elements, and attributes
removeEmptyAttrs remove empty attributes
removeHiddenElems remove hidden elements
removeEmptyText remove empty Text elements
removeEmptyContainers remove empty Container elements
removeViewBox remove viewBox attribute when possible
cleanupEnableBackground remove or cleanup enable-background attribute when possible
minifyStyles minify <style> elements content with CSSO
convertStyleToAttrs convert styles into attributes
convertColors convert colors (from rgb() to #rrggbb, from #rrggbb to #rgb)
convertPathData convert Path data to relative or absolute (whichever is shorter), convert one segment to another, trim useless delimiters, smart rounding, and much more
convertTransform collapse multiple transforms into one, convert matrices to the short aliases, and much more
removeUnknownsAndDefaults remove unknown elements content and attributes, remove attrs with default values
removeNonInheritableGroupAttrs remove non-inheritable group's "presentation" attributes
removeUselessStrokeAndFill remove useless stroke and fill attrs
removeUnusedNS remove unused namespaces declaration
prefixIds prefix IDs and classes with the SVG filename or an arbitrary string
cleanupIds remove unused and minify used IDs
cleanupNumericValues round numeric values to the fixed precision, remove default px units
cleanupListOfValues round numeric values in attributes that take a list of numbers (like viewBox or enable-background)
moveElemsAttrsToGroup move elements' attributes to their enclosing group
moveGroupAttrsToElems move some group attributes to the contained elements
collapseGroups collapse useless groups
removeRasterImages remove raster images (disabled by default)
mergePaths merge multiple Paths into one
convertShapeToPath convert some basic shapes to <path>
convertEllipseToCircle convert non-eccentric <ellipse> to <circle>
sortAttrs sort element attributes for epic readability
sortDefsChildren sort children of <defs> in order to improve compression
removeDimensions remove width/height and add viewBox if it's missing (opposite to removeViewBox, disable it first) (disabled by default)
removeAttrs remove attributes by pattern (disabled by default)
removeAttributesBySelector removes attributes of elements that match a css selector (disabled by default)
removeElementsByAttr remove arbitrary elements by ID or className (disabled by default)
addClassesToSVGElement add classnames to an outer <svg> element (disabled by default)
addAttributesToSVGElement adds attributes to an outer <svg> element (disabled by default)
removeOffCanvasPaths removes elements that are drawn outside of the viewbox (disabled by default)
removeStyleElement remove <style> elements (disabled by default)
removeScriptElement remove <script> elements (disabled by default)
reusePaths Find duplicated elements and replace them with links (disabled by default)

Changelog

[3.1.1]

  • fix: clear config from require cache before importing

[3.1.0]

  • feature: update svgo to v3
  • fix: optimize() now throws all errors
  • fix: sortAttrs is now enabled by default
  • fix: rename cleanupIDs to cleanupIds
  • docs: update config section to reflect CJS requirement
  • fix: update configuration settings with new types and import strategy
  • docs: update example svg

[3.0.1]

  • docs: update changelog to match version

[3.0.0]

  • feature: update svgo to v2 and support new config file setup
  • chore: use esbuild for bundling
  • chore: update eslint and prettier packages
  • ci: migrate from devops pipelines to github actions
  • chore: migrate from npm to pnpm

[2.0.0]

Skipped

[1.1.4]

  • chore(package): update prettier to major version 2

[1.1.3]

  • chore(package): update SVGO (1.3.2) and other patch releases

[1.1.2]

  • fix: read config on command run (#25)
  • fix: calculate size based on svgo input/output (#25)

[1.1.1]

  • chore: update lock file with audit fix (#24)
  • fix: read conf on workspace change (#23)

[1.1.0]

  • feature: add percentage file size change after optimization (by @lazreg87)

[1.0.1]

  • docs: update readme
  • chore: replace tslint with eslint and add prettier

[1.0.0]

  • feature: support optimizing currently selected text
  • feature: support reading .svgo.yml
  • feature: support js2svg settings for pretty printing

[0.1.6]

  • fix: use HTTPS protocol for repo link in package.json

[0.1.5]

  • docs: update CHANGELOG.md

[0.1.4]

  • fix: add status message on SVGO runs

[0.1.3]

  • docs: fix README typos

[0.1.2]

  • docs: add tags and categories to package.json

[0.1.1]

  • ci: add publish scripts to package.json

[0.1.0]

  • feature: add configuration support
  • feature: add command for optimizing current SVG