mirror of
https://github.com/LuanRT/YouTube.js.git
synced 2026-06-13 01:22:11 +00:00
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
This commit is contained in:
54
dev-scripts/generate-proto.mjs
Normal file
54
dev-scripts/generate-proto.mjs
Normal file
@@ -0,0 +1,54 @@
|
||||
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);
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user