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
JavaScript
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!');