Files
blitzkit/packages/scripts/src/protos.ts
T

41 lines
1.2 KiB
TypeScript
Raw Normal View History

2024-09-29 20:56:52 -05:00
import { exec as execSync } from 'child_process';
import { existsSync } from 'fs';
import { cp, mkdir, readdir, rm, writeFile } from 'fs/promises';
import { promisify } from 'util';
2024-09-28 21:07:00 -05:00
2024-09-29 20:56:52 -05:00
const ROOT = 'packages/core/src/protos';
const exec = promisify(execSync);
let executableFileExtension: string;
if (existsSync('node_modules/.bin/protoc-gen-ts.exe')) {
executableFileExtension = '.exe';
} else {
executableFileExtension = '';
}
2024-09-28 21:07:00 -05:00
const files = await readdir(`${ROOT}/raw`);
const args = [
2024-09-29 20:56:52 -05:00
`--plugin="protoc-gen-ts=./node_modules/.bin/protoc-gen-ts${executableFileExtension}"`,
'--ts_opt=esModuleInterop=true',
`--js_out="import_style=commonjs,binary:./${ROOT}/generated"`,
`--ts_out="./${ROOT}/generated"`,
2024-09-28 21:07:00 -05:00
...files.map((file) => `${ROOT}/raw/${file}`),
];
2024-09-29 20:56:52 -05:00
await rm(`${ROOT}/generated`, { recursive: true, force: true });
await mkdir(`${ROOT}/generated`, { recursive: true });
await exec(`protoc ${args.join(' ')}`);
await cp(`${ROOT}/generated/${ROOT}/raw`, `${ROOT}/generated`, {
recursive: true,
});
await rm(`${ROOT}/generated/packages`, { recursive: true, force: true });
2024-09-28 21:07:00 -05:00
2024-09-29 20:56:52 -05:00
await writeFile(
`${ROOT}/generated/index.ts`,
files
.map((file) => file.replace('.proto', ''))
.map((file) => `export * from './${file}_pb';`)
.join('\n'),
);