96 lines
2.4 KiB
Markdown
96 lines
2.4 KiB
Markdown
# 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.
|
|
|
|
```js
|
|
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 () => {
|
|
// Import icons
|
|
const iconSet = await importDirectory('svg/test', {
|
|
prefix: 'test',
|
|
});
|
|
|
|
// Validate, clean up, fix palette and optimise
|
|
await iconSet.forEach(async (name, type) => {
|
|
if (type !== 'icon') {
|
|
return;
|
|
}
|
|
|
|
const svg = iconSet.toSVG(name);
|
|
if (!svg) {
|
|
// Invalid icon
|
|
iconSet.remove(name);
|
|
return;
|
|
}
|
|
|
|
// Clean up and optimise icons
|
|
try {
|
|
cleanupSVG(svg);
|
|
await parseColors(svg, {
|
|
defaultColor: 'currentColor',
|
|
callback: (attr, colorStr, color) => {
|
|
return !color || isEmptyColor(color)
|
|
? colorStr
|
|
: 'currentColor';
|
|
},
|
|
});
|
|
runSVGO(svg);
|
|
} catch (err) {
|
|
// Invalid icon
|
|
console.error(`Error parsing ${name}:`, err);
|
|
iconSet.remove(name);
|
|
return;
|
|
}
|
|
|
|
// Update icon
|
|
iconSet.fromSVG(name, svg);
|
|
});
|
|
|
|
// Export as IconifyJSON
|
|
const exported = JSON.stringify(iconSet.export(), null, '\t') + '\n';
|
|
|
|
// Save to file
|
|
await fs.writeFile(`output/${iconSet.prefix}.json`, exported, 'utf8');
|
|
})();
|
|
```
|
|
|
|
## Documentation
|
|
|
|
Full documentation is too big for simple README file. See [Iconify Tools documentation](https://docs.iconify.design/tools/tools2/) 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-PRESENT Vjacheslav Trushkin
|