Files
SpotMicroESP32-Leika/app/scripts/compile_protos.js
T
2026-01-03 22:15:00 +01:00

50 lines
1.5 KiB
JavaScript

#!/usr/bin/env node
import { execSync } from 'child_process';
import path from 'path';
import os from 'os';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const isWindows = os.platform() === 'win32';
const projectRoot = path.resolve(__dirname, '..');
const platformSharedDir = path.resolve(projectRoot, '..', 'platform_shared');
const outputDir = path.resolve(projectRoot, 'src', 'lib', 'platform_shared');
const pluginPath = isWindows
? path.join(projectRoot, 'node_modules', '.bin', 'protoc-gen-ts_proto.cmd')
: path.join(projectRoot, 'node_modules', '.bin', 'protoc-gen-ts_proto');
const protoFiles = ['websocket_message.proto', 'rest_message.proto'];
const tsProtoOpts = [
'outputTypeAnnotations=true',
'useExactTypes=false',
'outputExtensions=true',
'outputTypeRegistry=true',
'outputSchema=true'
].join(',');
const cmd = [
'protoc',
`--plugin=protoc-gen-ts_proto=${pluginPath}`,
`--ts_proto_out=${outputDir}`,
`--ts_proto_opt=${tsProtoOpts}`,
`-I${platformSharedDir}`,
...protoFiles.map(f => path.join(platformSharedDir, f))
].join(' ');
console.log('Compiling protos...');
console.log(` Platform: ${os.platform()}`);
console.log(` Output: ${outputDir}`);
try {
execSync(cmd, { stdio: 'inherit', cwd: projectRoot });
console.log('Proto compilation complete!');
} catch (error) {
console.error('Proto compilation failed!');
process.exit(1);
}