UNPKG

ffprobe-static-prune

Version:

A utility to prune unnecessary ffprobe-static binaries for your current platform and architecture to reduce package size.

62 lines (48 loc) 1.77 kB
// ffprobe-static-prune/index.js const fs = require('fs'); const path = require('path'); const archMap = { x64: 'x64', ia32: 'ia32', arm: 'armv7l', arm64: 'arm64', }; function pruneFFprobe({ baseDir, platform, arch }) { const resolvedArch = archMap[arch]; if (!resolvedArch) { throw new Error(`Unsupported arch: ${arch}`); } const ffprobeBase = path.join(baseDir, 'node_modules', 'ffprobe-static', 'bin'); const keepPath = path.join(ffprobeBase, platform, resolvedArch); if (!fs.existsSync(keepPath)) { console.warn(`⚠ [ffprobe-static-prune] Keep path not found: ${keepPath}`); return; } for (const platformDir of fs.readdirSync(ffprobeBase)) { const platformPath = path.join(ffprobeBase, platformDir); if (!fs.statSync(platformPath).isDirectory()) continue; for (const archDir of fs.readdirSync(platformPath)) { const targetPath = path.join(platformPath, archDir); if (targetPath !== keepPath) { console.log(`❌ [ffprobe-static-prune] Removing: ${targetPath}`); fs.rmSync(targetPath, { recursive: true, force: true }); } } // If platform dir is now empty, remove it if (platformPath !== path.dirname(keepPath)) { try { fs.rmdirSync(platformPath); } catch (_) {} } } console.log(`✅ [ffprobe-static-prune] Finished: kept ${keepPath}`); } module.exports = pruneFFprobe; if (require.main === module) { const args = require('minimist')(process.argv.slice(2)); const baseDir = args.baseDir || process.cwd(); const platform = args.platform || process.platform; const arch = args.arch || process.arch; pruneFFprobe({ baseDir, platform, arch }); } // node index.js --platform=darwin --arch=arm64 --baseDir=/your/project/path