Skip to content

Commit 526d388

Browse files
committed
add *_All files to list all icons
1 parent e9e88b8 commit 526d388

18 files changed

+38025
-18984
lines changed

format-rescript.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/* eslint-disable no-console */
2+
const { basename } = require("path");
3+
const { lstatSync } = require("fs");
4+
const formatRescriptFile = require("./formatRescriptFile");
5+
const fileNames = process.argv.slice(2);
6+
7+
if (!fileNames.length) {
8+
throw new Error(`Usage: ${basename(__filename)} <fileName> [<fileName>...]`);
9+
}
10+
11+
let hasError = false;
12+
13+
fileNames.forEach((fileName) => {
14+
if (!fileName.endsWith(".res")) {
15+
throw new Error(`Not a rescript file: ${fileName}`);
16+
}
17+
18+
if (lstatSync(fileName).isSymbolicLink()) {
19+
console.log(`Ignoring symlink ${fileName}`);
20+
return;
21+
}
22+
23+
try {
24+
formatRescriptFile(fileName);
25+
console.log("Formatted", fileName);
26+
} catch {
27+
hasError = true;
28+
}
29+
});
30+
31+
if (hasError) {
32+
process.exit(1);
33+
}

formatRescriptFile.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
const { readFileSync, writeFileSync } = require("fs");
2+
const { execSync } = require("child_process");
3+
4+
module.exports = (fileName) => {
5+
const contents = readFileSync(fileName).toString();
6+
const formattedCode = execSync(`node_modules/.bin/bsc -format ${fileName}`);
7+
if (formattedCode !== contents) {
8+
writeFileSync(fileName, formattedCode);
9+
return true;
10+
}
11+
return false;
12+
};

genbindings.js

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
/* eslint-disable no-console */
2+
const formatRescriptFile = require("./formatRescriptFile");
3+
24
const iconObjectTypeName = "IconObject.t";
35
[
46
["regular", "pro"],
@@ -11,17 +13,29 @@ const iconObjectTypeName = "IconObject.t";
1113
].forEach(([style, tier]) => {
1214
const libName = `@fortawesome/${tier}-${style}-svg-icons`;
1315
const lib = require(libName);
14-
const iconNames = Object.keys(lib).filter((s) => s.match(/fa[A-Z][A-Za-z]+/));
16+
const iconNames = Object.keys(lib)
17+
.filter((s) => s.match(/fa[A-Z][A-Za-z]+/))
18+
.sort();
1519
const bindings = iconNames.map(
1620
(n) =>
1721
`@module("${libName}")\nexternal ${n}: ${iconObjectTypeName} = "${n}";`
1822
);
1923
const capitalizedStyle = style[0].toUpperCase() + style.slice(1);
20-
const moduleName = `${
24+
const bindingModuleName = `${
2125
tier === "free" && style !== "brands" ? "Free" : ""
2226
}${capitalizedStyle}`;
23-
const moduleContents = bindings.join("\n\n");
24-
const bindingPath = `src/${moduleName}.res`;
25-
require("fs").writeFileSync(bindingPath, moduleContents);
27+
const bindingModuleContents = bindings.join("\n\n");
28+
const bindingPath = `src/${bindingModuleName}.res`;
29+
require("fs").writeFileSync(bindingPath, bindingModuleContents);
30+
formatRescriptFile(bindingPath);
2631
console.log(`Generated ${bindingPath}`);
32+
33+
const allArrayModuleContents = `let all: array<${iconObjectTypeName}> = [${iconNames
34+
.map((n) => `${bindingModuleName}.${n}`)
35+
.join(", ")}]`;
36+
const allArrayPath = `src/${bindingModuleName}_All.res`;
37+
require("fs").writeFileSync(allArrayPath, allArrayModuleContents);
38+
formatRescriptFile(allArrayPath);
39+
40+
console.log(`Generated ${allArrayPath}`);
2741
});

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@
5454
],
5555
"*.{re,rei}": [
5656
"bsrefmt --in-place"
57+
],
58+
"*.res": [
59+
"node ./format-rescript.js"
5760
]
5861
}
5962
}

0 commit comments

Comments
 (0)