unified-video-framework
Version:
Cross-platform video player framework supporting iOS, Android, Web, Smart TVs (Samsung/LG), Roku, and more
110 lines (94 loc) • 3.37 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
content = content.replace(
/from\s+["']\.\/([^"']+)(?<!\.js)["']/g,
'from "./$1.js"'
);
content = content.replace(
/from\s+["']\.\.?\/([^"']+)(?<!\.js)["']/g,
(match, p1) => {
if (p1.includes('/')) {
return `from "../${p1.replace(/([^\/]+)$/, '$1.js')}"`;
}
return `from "../${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
content = content.replace(
/from\s+["']\.\/([^"']+)(?<!\.js)["']/g,
'from "./$1.js"'
);
content = content.replace(
/from\s+["']\.\.?\/([^"']+)(?<!\.js)["']/g,
(match, p1) => {
if (p1.includes('/')) {
return `from "../${p1.replace(/([^\/]+)$/, '$1.js')}"`;
}
return `from "../${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!');