Files
UT-Registration-Plus/webpack/utils/zipProductionBuild.ts
2023-02-22 22:51:38 -06:00

36 lines
1.2 KiB
TypeScript

import fs, { mkdirSync } from 'fs';
import archiver from 'archiver';
import chalk from 'chalk';
import path from 'path';
/**
* Creates a zip file from the given source directory
* @param fileName the name of the zip file to create
* @param outDir the directory to zip up
* @param globOptions the glob options to use when finding files to zip
* @returns
*/
export async function zipProductionBuild(fileName: string) {
const outDirectory = path.resolve('build');
const artifactsDir = path.join(outDirectory, 'artifacts');
mkdirSync(artifactsDir, { recursive: true });
const output = fs.createWriteStream(`${artifactsDir}/${fileName}.zip`);
const archive = archiver('zip', {
zlib: { level: 9 },
});
archive.pipe(output);
const promise = new Promise((resolve, reject) => {
output.on('close', resolve);
archive.on('warning', warn => console.log(chalk.red(warn)));
archive.on('error', err => reject(err));
});
archive.glob('**/*', { cwd: outDirectory, ignore: ['*.zip', 'artifacts'] });
// eslint-disable-next-line no-void
void archive.finalize(); // The promise returned is what's `await-ed`, not the call to `finalize()`
return promise;
}