mirror of
https://github.com/desktop/desktop
synced 2024-09-12 21:01:16 +00:00
66 lines
2 KiB
JavaScript
66 lines
2 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
/* generate-octicons
|
|
*
|
|
* Utility script for generating a strongly typed representation of all
|
|
* octicons currently in the master branch of primer/octicons. Automatically
|
|
* downloads the latest version of the `sprite.octicons.svg` file.
|
|
*/
|
|
|
|
'use strict'
|
|
|
|
const fs = require('fs');
|
|
const process = require('process');
|
|
const xml2js = require('xml2js');
|
|
const got = require('got');
|
|
const path = require('path');
|
|
const toCamelCase = require('to-camel-case');
|
|
|
|
console.log('Downloading latest version of octicon sprite svg');
|
|
|
|
got('https://github.com/primer/octicons/raw/master/build/sprite.octicons.svg')
|
|
.then((res) => {
|
|
xml2js.parseString(res.body, function (err, result) {
|
|
const viewBoxRe = /0 0 (\d+) (\d+)/
|
|
const out = fs.createWriteStream(path.resolve(__dirname, '../app/src/ui/octicons/octicons.generated.ts'));
|
|
|
|
out.write("/*\n");
|
|
out.write(" * This file is automatically generated by the generate-octicons tool.\n");
|
|
out.write(" * Manually changing this file will only lead to sadness.\n")
|
|
out.write(" */\n\n")
|
|
|
|
out.write("export class OcticonSymbol {\n")
|
|
|
|
out.write("\n public constructor(public w: number, public h: number, public d: string) { }\n\n")
|
|
let count = 0;
|
|
result.svg.symbol.forEach(function(symbol) {
|
|
count++;
|
|
|
|
const id = symbol.$.id;
|
|
const viewBox = symbol.$.viewBox;
|
|
const pathData = symbol.path[0].$.d;
|
|
|
|
const viewBoxMatch = viewBoxRe.exec(viewBox);
|
|
|
|
if(!viewBoxMatch) {
|
|
console.error(`Unexpected viewBox format for ${id}`);
|
|
process.exit(1);
|
|
}
|
|
|
|
const [, w, h] = viewBoxMatch;
|
|
const jsFriendlyName = toCamelCase(id);
|
|
|
|
out.write(` public static get ${jsFriendlyName}() { return new OcticonSymbol(${w}, ${h}, '${pathData}') }\n`);
|
|
});
|
|
|
|
out.write("}\n");
|
|
out.end();
|
|
|
|
console.log(`Wrote ${count} octicons`);
|
|
});
|
|
})
|
|
.catch((err) => {
|
|
console.log(`Failed downloading octicon sprite svg: ${err.message}`);
|
|
process.exit(1);
|
|
})
|