Iconify Tools
This library is a collection of tools for importing, exporting and processing SVG images.
Its main purpose is to convert icon sets and fonts to Iconify JSON collections, but it can be used for other purposes.
Installation
First install it by running this command:
npm install @iconify/tools --save
Example
The following code example does the following:
- Imports set of SVG from directory.
- Cleans up all icons.
- Changes colors in all icons to
currentColor
. - Optimises icons.
- Exports icons as
IconifyJSON
icon set.
import { promises as fs } from 'fs';
import { importDirectory } from '@iconify/tools/lib/import/directory';
import { cleanupSVG } from '@iconify/tools/lib/svg/cleanup';
import { runSVGO } from '@iconify/tools/lib/optimise/svgo';
import { parseColors, isEmptyColor } from '@iconify/tools/lib/colors/parse';
(async () => {
const iconSet = await importDirectory('svg/test', {
prefix: 'test',
});
await iconSet.forEach(async (name, type) => {
if (type !== 'icon') {
return;
}
const svg = iconSet.toSVG(name);
if (!svg) {
iconSet.remove(name);
return;
}
try {
cleanupSVG(svg);
await parseColors(svg, {
defaultColor: 'currentColor',
callback: (attr, colorStr, color) => {
return !color || isEmptyColor(color)
? colorStr
: 'currentColor';
},
});
runSVGO(svg);
} catch (err) {
console.error(`Error parsing ${name}:`, err);
iconSet.remove(name);
return;
}
iconSet.fromSVG(name, svg);
});
const exported = JSON.stringify(iconSet.export(), null, '\t') + '\n';
await fs.writeFile(`output/${iconSet.prefix}.json`, exported, 'utf8');
})();
Documentation
Full documentation is too big for simple README file. See Iconify Tools documentation for detailed documentation with code samples.
Synchronous functions
Most functions in example above are asynchronous.
If you need to import or parse icons synchronously, such as in config file of package that does not support async configuration files, most functions have synchronous copies, such as importDirectorySync()
.
License
Library is released with MIT license.
© 2021 Vjacheslav Trushkin