This repository has been archived on 2020-05-08. You can view files and clone it, but cannot push or open issues or pull requests.
_s/bin/bundle.js

92 lines
2.0 KiB
JavaScript

#!/usr/bin/env node
const path = require( 'path' );
const fs = require( 'fs' );
const archiver = require('archiver');
// Contains the excluded files and folders.
const excludes = [
'.DS_Store',
'.stylelintrc.json',
'.eslintrc',
'.git',
'.gitattributes',
'.github',
'.gitignore',
'README.md',
'bin',
'composer.json',
'composer.lock',
'node_modules',
'package-lock.json',
'package.json',
'vendor',
'.travis.yml',
'phpcs.xml.dist',
'sass',
];
// The path of the zip file.
const zipPath = path.join(
__dirname,
'/../../',
path.basename(path.dirname(__dirname))
) + '.zip';
// Create a file to stream archive data to.
let output = fs.createWriteStream( zipPath );
let archive = archiver('zip', {
zlib: { level: 9 }
});
/**
* Recursively traverse the directory tree and append the files to the archive.
* @param {string} directoryPath - The path of the directory being looped through.
*/
function traverseDirectoryTree( directoryPath ) {
const files = fs.readdirSync( directoryPath );
for ( const i in files ) {
const currentPath = directoryPath + '/' + files[i];
const stats = fs.statSync( currentPath );
let relativePath = path.relative(process.cwd(), currentPath);
if ( stats.isFile() && ! excludes.includes( files[i] ) ) {
archive.file(currentPath, {
name: `${relativePath}`
});
} else if ( stats.isDirectory() && ! excludes.includes( files[i] ) ) {
traverseDirectoryTree( currentPath );
}
}
}
// Listen for all archive data to be written.
output.on('close', function () {
console.log(`Created ${path.basename(path.dirname(__dirname))}.zip of ${archive.pointer()} bytes`);
});
// Catch warnings during archiving.
archive.on('warning', function(err) {
if (err.code === 'ENOENT') {
// log warning
console.log(err);
} else {
// throw error
throw err;
}
});
// Catch errors during archiving.
archive.on('error', function(err){
throw err;
});
// Pipe archive data to the file.
archive.pipe(output);
// Append the files to the archive.
traverseDirectoryTree( '.' );
// Finalize the archive.
archive.finalize();