Skip to content

Commit

Permalink
Autogenerate typescript icons list (#236)
Browse files Browse the repository at this point in the history
* Create export-to-ts.js
* Update package.json
Co-authored-by: Daniel Imms <[email protected]>
  • Loading branch information
hbons authored Mar 11, 2024
1 parent ab48e1b commit 5e37036
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 4 deletions.
9 changes: 5 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,12 @@
"clean": "node ./scripts/reset.js",
"svgo": "svgo -f ./src/icons/ --config svgo.config.js",
"sprite": "node ./scripts/svg-sprite.js --outDir dist --outFile codicon.svg",
"replace-in-vscode": "cp -R ./dist/codicon.ttf ../vscode/src/vs/base/browser/ui/codicons/codicon/codicon.ttf",
"export-to-csv": "node ./scripts/export-to-csv.js -f ./dist/codicon.ttf > ./dist/codicon.csv",
"replace-in-vscode": "cp -R ./dist/codicon.ttf ../vscode/src/vs/base/browser/ui/codicons/codicon/codicon.ttf && cp ./dist/codiconsLibrary.ts ../vscode/src/vs/base/common/codiconsLibrary.ts",
"export-to-ts": "node ./scripts/export-to-ts.js -f ./src/template/mapping.json > ./dist/codiconsLibrary.ts",
"export-to-csv": "node ./scripts/export-to-csv.js -f ./dist/codicon.ttf > ./dist/codicon.csv",
"fonts": "fantasticon",
"dev": "npm run clean && npm run svgo && npm run fonts && npm run export-to-csv && npm run sprite && npm run replace-in-vscode",
"build": "npm run clean && npm run svgo && npm run fonts && npm run export-to-csv && npm run sprite",
"dev": "npm run build && npm run replace-in-vscode",
"build": "npm run clean && npm run svgo && npm run fonts && npm run export-to-ts && npm run export-to-csv && npm run sprite",
"release": "release-it"
},
"repository": {
Expand Down
49 changes: 49 additions & 0 deletions scripts/export-to-ts.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
const fs = require('fs');
var opts = require("minimist")(process.argv.slice(2));

if (!opts.f || typeof opts.f !== "string") {
console.log("use -f to specify your mapping.json path");
return;
}


fs.readFile(opts.f, 'utf8', (err, data) => {
if (err) {
console.error('Error reading file:', err);
return;
}

try {
const mapping = JSON.parse(data);

console.log("/*---------------------------------------------------------------------------------------------");
console.log(" * Copyright (c) Microsoft Corporation. All rights reserved.");
console.log(" * Licensed under the MIT License. See License.txt in the project root for license information.");
console.log(" *--------------------------------------------------------------------------------------------*/");
console.log("import { register } from 'vs/base/common/codiconsUtil';");
console.log("");
console.log("");
console.log("// This file is automatically generated by (microsoft/vscode-codicons)/scripts/export-to-ts.js");
console.log("// Please don't edit it, as your changes will be overwritten.");
console.log("// Instead, add mappings to codiconsDerived in codicons.ts.");
console.log("export const codiconsLibrary = {");

Object.entries(mapping).forEach(([name, value]) => {
console.log(`\t${toCamelCase(name)}: register('${name}', ${decimalToHex(value)}),`);
});

console.log("} as const;");

} catch (error) {
console.error('Error parsing JSON:', error);
}
});


function toCamelCase(name) {
return name.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase(); });
}

function decimalToHex(decimal) {
return '0x' + decimal.toString(16);
}

0 comments on commit 5e37036

Please sign in to comment.