Files
YouTube.js/dev-scripts/generate-proto.mjs
Luan 94bc596048 refactor: Migrate to ts-proto (#752)
* refactor: Add extracted protos

* refactor: Remove old stuff and update affected code

* chore(package): Update `build:proto` script

* chore(ClientInfo): Rename `androidSdkVersion` to `android_sdk_version`

* chore: remove refs to old proto file

* refactor(sabr_request): Rename `Gw` to `media_type`

* chore(sabr_request): Fix typo in field num

* feat(parser): Parse `video_playback_ustreamer_config` and `server_abr_streaming_url`

* refactor: update protos

* chore(package): streamline clean and build scripts

* chore: update package.json

* chore: update npmignore

* chore(protos): Remove unneeded definitions

See https://github.com/LuanRT/googlevideo for video playback proto definitions.

* chore(package): add `rimraf` dependency
2024-09-16 06:54:29 -03:00

54 lines
1.4 KiB
JavaScript

import { exec } from 'child_process';
import { existsSync, mkdirSync, readdirSync, statSync } from 'fs';
import { join } from 'path';
import path from 'path';
import url from 'url';
import os from 'os';
const __dirname = path.dirname(url.fileURLToPath(import.meta.url));
const protoDir = './protos';
const outDir = './protos/generated';
if (!existsSync(outDir)) {
mkdirSync(outDir, { recursive: true });
}
const protocGenTs = path.join(
__dirname,
'../node_modules',
'.bin',
os.platform() === 'win32' ? 'protoc-gen-ts_proto.cmd' : 'protoc-gen-ts_proto'
);
function listProtoFiles(dir) {
let protoFiles = [];
const items = readdirSync(dir);
for (const item of items) {
const fullPath = join(dir, item);
if (statSync(fullPath).isDirectory()) {
protoFiles = protoFiles.concat(listProtoFiles(fullPath));
} else if (item.endsWith('.proto')) {
protoFiles.push(fullPath);
}
}
return protoFiles;
}
const protoFiles = listProtoFiles(protoDir);
if (!protoFiles.length) {
console.log('No .proto files found.');
process.exit(0);
}
protoFiles.forEach((file) => {
const command = `protoc --proto_path=${protoDir} --plugin=protoc-gen-ts=${protocGenTs} --ts_opt=env=browser --ts_opt=importSuffix=.js --ts_out=${outDir} ${file}`;
exec(command, (error, _stdout, stderr) => {
if (error) {
console.error(`Error compiling ${file}:`, stderr);
}
});
});