Skip to content

Commit a0dc98b

Browse files
committed
generate TS enums
1 parent 6052278 commit a0dc98b

File tree

4 files changed

+27
-11
lines changed

4 files changed

+27
-11
lines changed

editor/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ Thumbs.db
4747

4848
/src/assets/**/*.json
4949
/src/assets/**/*.js
50+
/src/assets/**/*.ts
5051
/src/assets/**/icons/*.png
5152
!/src/assets/i18n/*.json
5253
/src/assets/**/*.db

editor/ci.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ games.forEach((game) => {
3535
validateSnippets(join('../', game), game);
3636
validateNative(nativeJson, game);
3737
run(`[ -d ${assets} ] || mkdir -p ${assets}`);
38-
generateEnums(enumsJson, join(assets, 'enums.js'));
38+
generateEnums(enumsJson, join(assets, 'enums'));
3939

4040
[`cp ${gameJson} ${assets}`, `cp ${enumsJson} ${assets}`].forEach((x) =>
4141
run(x)

editor/generate-enums.ts

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,33 @@ import { fillEnumValues } from './src/app/utils';
44

55
const { readFileSync, writeFileSync } = require('fs');
66

7+
// outfile without extension
78
export function run(inFile: string, outFile: string) {
89
if (!inFile) {
910
console.error('specify the input file');
1011
process.exit(1);
1112
}
12-
13+
1314
if (!outFile) {
1415
console.error('specify the path to the output file');
1516
process.exit(1);
1617
}
1718

1819
console.log(`Generating enums from ${inFile}`);
19-
20-
const enums = loadFile(inFile);
2120

22-
const content = Object.entries(enums).map(([name, fields]) => {
23-
return makeEnum(name, Object.entries(fields));
24-
});
21+
const enums = Object.entries(loadFile(inFile));
22+
23+
const contentJs = enums.map(([name, fields]) =>
24+
makeJsEnum(name, Object.entries(fields)),
25+
);
26+
const contentTs = enums.map(([name, fields]) =>
27+
makeTsEnum(name, Object.entries(fields)),
28+
);
2529

26-
writeFileSync(outFile, content.join('\n'), {
30+
writeFileSync(outFile + '.js', contentJs.join('\n'), {
31+
encoding: 'utf8',
32+
});
33+
writeFileSync(outFile + '.ts', contentTs.join('\n'), {
2734
encoding: 'utf8',
2835
});
2936

@@ -37,11 +44,19 @@ export function run(inFile: string, outFile: string) {
3744
return content;
3845
}
3946

40-
function makeEnum(name: string, fields: EnumRaw['fields']) {
47+
function makeJsEnum(name: string, fields: EnumRaw['fields']) {
4148
return `export const ${name} = ${JSON.stringify(
4249
fromPairs(fillEnumValues(fields)),
4350
null,
44-
2
51+
2,
4552
)};`;
4653
}
54+
55+
function makeTsEnum(name: string, fields: EnumRaw['fields']) {
56+
return `export enum ${name} ${JSON.stringify(
57+
fromPairs(fillEnumValues(fields)),
58+
null,
59+
2,
60+
).replace(/:/g, ' =')};`;
61+
}
4762
}

editor/local.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ games.forEach((game) => {
3939

4040
run(`[ -d ${assets} ] || mkdir ${assets}`);
4141

42-
generateEnums(enumsJson, join(assets, 'enums.js'));
42+
generateEnums(enumsJson, join(assets, 'enums'));
4343

4444
if (doesGameRequireOpcode(game)) {
4545
generateOpcodeExamples(gameJson, join(assets, 'opcodes.txt'));

0 commit comments

Comments
 (0)