UNPKG

camstreamerlib

Version:

Helper library for CamStreamer ACAP applications.

105 lines (104 loc) 3.6 kB
import AdmZip from 'adm-zip'; import Path from 'path'; import fs from 'fs'; import { execSync } from 'child_process'; const productionModulesFolder = 'production_modules'; function isDirectory(path) { const stat = fs.statSync(path); return stat.isDirectory(); } function getPackageInfo(folder) { try { const manifest = fs.readFileSync(Path.join(folder, 'manifest.json')); const manifestParsed = JSON.parse(manifest.toString()); return { packageName: manifestParsed.package_name, packageVersion: manifestParsed.package_version.replace(/\./g, '_'), }; } catch (err) { console.error('Get package version:', err); } } function createZipArchive(zip, folder, options) { const zipFileRegex = new RegExp(`${Path.basename(folder)}(_[0-9]){3}\\.zip`); const files = fs.readdirSync(folder); for (const file of files) { const path = Path.join(folder, file); const isDir = isDirectory(path); if (file[0] === '.' || zipFileRegex.test(file) || file === 'node_modules' || (file === 'src' && options.typeScriptPackage) || options.excludedFileNames.includes(file)) { continue; } else if (file === 'dist' && options.typeScriptPackage) { zip.addLocalFolder(path); } else if (file === productionModulesFolder && options.includeNodeModules) { zip.addLocalFolder(Path.join(productionModulesFolder, 'node_modules'), 'node_modules'); } else if (isDir) { zip.addLocalFolder(path, file); } else { zip.addLocalFile(path); } } } function installDependencies() { if (!fs.existsSync(productionModulesFolder)) { fs.mkdirSync(productionModulesFolder, {}); } fs.cpSync('package.json', Path.join(productionModulesFolder, 'package.json')); fs.cpSync('package-lock.json', Path.join(productionModulesFolder, 'package-lock.json')); execSync(`npm ci --omit=dev`, { cwd: Path.join(process.cwd(), productionModulesFolder), }); } function main(args) { const options = { includeNodeModules: false, typeScriptPackage: false, outputFolder: '.', excludedFileNames: [], }; for (const arg of args) { if (arg === '-i' || arg === '-includeNodeModules') { options.includeNodeModules = true; } if (arg.startsWith('-w=') || arg.startsWith('-where=')) { options.outputFolder = arg.substring(arg.indexOf('=') + 1); } if (arg.startsWith('-e=') || arg.startsWith('-exclude=')) { options.excludedFileNames = arg.substring(arg.indexOf('=') + 1).split(','); } } if (options.includeNodeModules) { installDependencies(); } if (fs.existsSync('dist')) { options.typeScriptPackage = true; } const folder = Path.resolve('.'); const packageInfo = getPackageInfo(folder); if (packageInfo === undefined) { console.error('Package info not found'); process.exit(1); } const zipFile = `${options.outputFolder}/${packageInfo.packageName}_${packageInfo.packageVersion}.zip`; if (fs.existsSync(zipFile)) { try { fs.unlinkSync(zipFile); } catch (error) { console.error('An error occured: ', error); process.exit(1); } } const zip = new AdmZip(); createZipArchive(zip, folder, options); zip.writeZip(zipFile); } main(process.argv.slice(2));