Init commit
This commit is contained in:
90
node_scripts/zip.js
Normal file
90
node_scripts/zip.js
Normal file
@@ -0,0 +1,90 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/*
|
||||
* Based upon the Archiver quickstart.
|
||||
* @see: https://www.archiverjs.com/docs/quickstart
|
||||
*/
|
||||
|
||||
// Require modules.
|
||||
const AdmZip = require('adm-zip');
|
||||
const archiver = require('archiver');
|
||||
const fs = require('fs');
|
||||
|
||||
const args = process.argv.slice(2);
|
||||
const slug = args[0];
|
||||
|
||||
if (slug) {
|
||||
// Set the path for the ZIP file.
|
||||
const zipFilePath = __dirname + '/../' + slug + '.zip';
|
||||
|
||||
// Create a file to stream archive data to.
|
||||
const output = fs.createWriteStream(zipFilePath);
|
||||
const archive = archiver('zip');
|
||||
|
||||
// Listen for all archive data to be written.
|
||||
output.on('close', function () {
|
||||
console.log(archive.pointer() + ' total bytes.');
|
||||
console.log('Theme ZIP file created.');
|
||||
|
||||
// Read the zip file.
|
||||
const zip = new AdmZip(zipFilePath);
|
||||
|
||||
// Load `./functions.php` from the zip file.
|
||||
const entry = zip.getEntry(slug + '/functions.php');
|
||||
|
||||
if (entry) {
|
||||
// Get the contents of `./functions.php`.
|
||||
const originalContent = zip.readAsText(entry);
|
||||
|
||||
// Replace the version string with a date-based version string.
|
||||
const updatedContent = originalContent.replace(
|
||||
/(define\( '[A-Z0-9_]*_VERSION', ')(.*)(' \);)/g,
|
||||
'$1' +
|
||||
parseInt(Math.floor(Date.now() / 1000), 10).toString(36) +
|
||||
'$3'
|
||||
);
|
||||
|
||||
// Update the contents of `./functions.php`.
|
||||
zip.updateFile(entry, Buffer.from(updatedContent));
|
||||
|
||||
// Write the changes back to the zip file.
|
||||
zip.writeZip(zipFilePath);
|
||||
|
||||
console.log(
|
||||
'Date-based versioning string successfully added to `./functions.php`.'
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
// This event is fired when the data source is drained no matter what was the data source.
|
||||
// It is not part of this library but rather from the NodeJS Stream API.
|
||||
// @see: https://nodejs.org/api/stream.html#stream_event_end
|
||||
output.on('end', function () {
|
||||
console.log('Data has been drained');
|
||||
});
|
||||
|
||||
// Catch warnings.
|
||||
archive.on('warning', function (err) {
|
||||
if (err.code === 'ENOENT') {
|
||||
// log warning
|
||||
} else {
|
||||
// throw error
|
||||
throw err;
|
||||
}
|
||||
});
|
||||
|
||||
// Catch errors.
|
||||
archive.on('error', function (err) {
|
||||
throw err;
|
||||
});
|
||||
|
||||
// Pipe archive data to the file.
|
||||
archive.pipe(output);
|
||||
|
||||
// Append the entire contents of the theme directory to a directory with
|
||||
// the theme slug.
|
||||
archive.directory(__dirname + '/../theme/', slug);
|
||||
|
||||
// Finalize the archive.
|
||||
archive.finalize();
|
||||
}
|
||||
Reference in New Issue
Block a user