UNPKG

unified-video-framework

Version:

Cross-platform video player framework supporting iOS, Android, Web, Smart TVs (Samsung/LG), Roku, and more

148 lines (126 loc) 5.44 kB
#!/usr/bin/env node const fs = require('fs'); const path = require('path'); /** * This script fixes the import statements in the compiled JavaScript files * to use relative paths instead of package names for internal dependencies. */ function fixImports(filePath) { let content = fs.readFileSync(filePath, 'utf8'); // Replace @unified-video/core imports with relative paths if (filePath.includes(path.join('packages', 'web', 'dist'))) { // Fix CommonJS require statements content = content.replace( /require\(["']@unified-video\/core["']\)/g, 'require("../../core/dist")' ); // Fix ES module import statements content = content.replace( /from\s+["']@unified-video\/core["']/g, 'from "../../core/dist/index.js"' ); content = content.replace( /import\s+["']@unified-video\/core["']/g, 'import "../../core/dist/index.js"' ); // Fix relative imports within the same package to include .js extension // Handle both files (append .js) and directories (append /index.js) const fixRelativeImport = (match, p1) => { const importPath = path.resolve(path.dirname(filePath), p1); // If it already ends with .js, check if it's actually a directory that was incorrectly named if (p1.endsWith('.js')) { const dirPath = importPath.substring(0, importPath.length - 3); if (fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory()) { console.log(` Fixing incorrect .js to /index.js: ${p1} -> ${p1.substring(0, p1.length - 3)}/index.js`); return match.replace(p1, `${p1.substring(0, p1.length - 3)}/index.js`); } return match; } try { if (fs.existsSync(importPath) && fs.statSync(importPath).isDirectory()) { console.log(` Directory found: ${p1} -> ${p1}/index.js`); return match.replace(p1, `${p1}/index.js`); } } catch (e) { // If we can't check, assume it's a file } console.log(` File assumed: ${p1} -> ${p1}.js`); return match.replace(p1, `${p1}.js`); }; content = content.replace(/from\s+["'](\.\.?\/[^"']+)["']/g, fixRelativeImport); // Also fix import statements that don't use 'from' content = content.replace(/import\s+["'](\.\.?\/[^"']+)["']/g, (match, p1) => { if (p1.endsWith('.js')) return match; const importPath = path.resolve(path.dirname(filePath), p1); try { if (fs.existsSync(importPath) && fs.statSync(importPath).isDirectory()) { console.log(` Import Dir found: ${p1} -> ${p1}/index.js`); return match.replace(p1, `${p1}/index.js`); } } catch (e) { } console.log(` Import File assumed: ${p1} -> ${p1}.js`); return match.replace(p1, `${p1}.js`); }); } else if (filePath.includes(path.join('packages', 'react-native', 'dist'))) { // Fix CommonJS require statements content = content.replace( /require\(["']@unified-video\/core["']\)/g, 'require("../../core/dist")' ); // Fix ES module import statements content = content.replace( /from\s+["']@unified-video\/core["']/g, 'from "../../core/dist/index.js"' ); content = content.replace( /import\s+["']@unified-video\/core["']/g, 'import "../../core/dist/index.js"' ); // Fix relative imports within the same package to include .js extension const fixRelativeImport = (match, p1) => { if (p1.endsWith('.js')) return `from "${p1}"`; const importPath = path.resolve(path.dirname(filePath), p1); try { if (fs.existsSync(importPath) && fs.statSync(importPath).isDirectory()) { return `from "${p1}/index.js"`; } } catch (e) { } return `from "${p1}.js"`; }; content = content.replace(/from\s+["'](\.\.?\/[^"']+)["']/g, fixRelativeImport); content = content.replace(/import\s+["'](\.\.?\/[^"']+)["']/g, (match, p1) => { if (p1.endsWith('.js')) return match; const importPath = path.resolve(path.dirname(filePath), p1); try { if (fs.existsSync(importPath) && fs.statSync(importPath).isDirectory()) { return `import "${p1}/index.js"`; } } catch (e) { } return `import "${p1}.js"`; }); } fs.writeFileSync(filePath, content, 'utf8'); } function processDirectory(dir) { const files = fs.readdirSync(dir); files.forEach(file => { const filePath = path.join(dir, file); const stat = fs.statSync(filePath); if (stat.isDirectory()) { processDirectory(filePath); } else if (file.endsWith('.js')) { console.log(`Fixing imports in: ${filePath}`); fixImports(filePath); } }); } // Fix imports in web and react-native packages const packagesDir = path.join(__dirname, '..', 'packages'); console.log('Fixing import statements in compiled files...'); if (fs.existsSync(path.join(packagesDir, 'web', 'dist'))) { processDirectory(path.join(packagesDir, 'web', 'dist')); } if (fs.existsSync(path.join(packagesDir, 'react-native', 'dist'))) { processDirectory(path.join(packagesDir, 'react-native', 'dist')); } console.log('Import fixes complete!');