openvidu/testapp/scripts/build-client.js
2025-05-08 12:52:34 +02:00

71 lines
2.6 KiB
JavaScript

import { exec } from 'child_process';
import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';
import { dirname } from 'path';
// Get directory name in ES modules
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
// Source directory for client TypeScript files
const sourceDir = path.join(__dirname, '..', 'public', 'js');
// Destination directory for compiled JavaScript
const destDir = path.join(__dirname, '..', 'dist', 'testapp', 'public', 'js');
// Create destination directory if it doesn't exist
if (!fs.existsSync(destDir)) {
fs.mkdirSync(destDir, { recursive: true });
}
// Get all TypeScript files in the source directory
const tsFiles = fs.readdirSync(sourceDir).filter(file => file.endsWith('.ts'));
// Compile each TypeScript file individually
console.log('Compiling client-side TypeScript files...');
// Create a much simpler compilation approach
tsFiles.forEach(file => {
const sourcePath = path.join(sourceDir, file);
const outputFile = file.replace('.ts', '.js');
const destPath = path.join(destDir, outputFile);
// Read the TypeScript file
const tsContent = fs.readFileSync(sourcePath, 'utf-8');
console.log(`Processing ${file}...`);
// Use esbuild to quickly transpile TypeScript to JavaScript
// For a simple application, we'll do some basic transforms ourselves
let jsContent = tsContent;
// Remove TypeScript type annotations and interfaces
jsContent = jsContent.replace(/^interface\s+\w+\s*\{[\s\S]*?\}/gm, '');
jsContent = jsContent.replace(/^type\s+\w+\s*=[\s\S]*?;/gm, '');
jsContent = jsContent.replace(/:\s*\w+(\[\])?(\s*\|\s*null)?(\s*\|\s*undefined)?/g, '');
jsContent = jsContent.replace(/<\w+(\[\])?>/g, '');
jsContent = jsContent.replace(/as\s+\w+(\[\])?/g, '');
// Save the JavaScript file
fs.writeFileSync(destPath, jsContent);
console.log(`Created ${outputFile}`);
});
// Copy utility files that client code might need
const commonUtilPath = path.join(__dirname, '..', 'utils', 'common.js');
const destCommonPath = path.join(destDir, 'common.js');
// Basic conversion of the common.ts file to JS
if (fs.existsSync(path.join(__dirname, '..', 'utils', 'common.ts'))) {
const tsContent = fs.readFileSync(path.join(__dirname, '..', 'utils', 'common.ts'), 'utf-8');
let jsContent = tsContent;
// Remove TypeScript type annotations
jsContent = jsContent.replace(/:\s*\w+(\[\])?(\s*\|\s*null)?(\s*\|\s*undefined)?/g, '');
jsContent = jsContent.replace(/<\w+(\[\])?>/g, '');
fs.writeFileSync(destCommonPath, jsContent);
console.log('Created common.js utility file');
}
console.log('Client-side files processed successfully');