Added theme archvier and changes to blocks

This commit is contained in:
Jeremy Rangel
2025-01-01 18:09:33 -08:00
parent 21b00e1937
commit d928a0e8fd
21 changed files with 342 additions and 158 deletions

89
zip-theme.js Normal file
View File

@ -0,0 +1,89 @@
const fs = require('fs');
const path = require('path');
const archiver = require('archiver');
// Path to the theme's style.css
const styleCssPath = path.join(__dirname, 'style.css');
// Directories to exclude
const excludedDirs = [
'node_modules',
'src',
'.gitignore',
'package.json',
'package-lock.json',
'theme.zip',
'.git'
];
// Helper function to check if a file or directory should be excluded
const shouldExclude = (filePath) => {
return excludedDirs.some(exclude => filePath.includes(exclude));
};
// Read the style.css file and extract the theme name
fs.readFile(styleCssPath, 'utf8', (err, data) => {
if (err) {
console.error('Error reading style.css:', err);
return;
}
// Regex to match the theme name in the header
const themeNameMatch = data.match(/\/\*[\s\S]*?Theme Name:\s*(.*?)\s*\*\//);
// Fallback to 'theme' if no theme name is found
const themeName = themeNameMatch && themeNameMatch[1] ? themeNameMatch[1].trim() : 'theme';
// Sanitize the theme name (remove spaces and convert to lowercase)
const sanitizedThemeName = themeName.replace(/\s+/g, '').toLowerCase();
// Define the output zip file path using the sanitized theme name
const output = fs.createWriteStream(path.join(__dirname, `${sanitizedThemeName}.zip`));
// Create an archiver instance
const archive = archiver('zip', {
zlib: { level: 9 } // Compression level
});
// Pipe the archive to the output file
archive.pipe(output);
// Recursively append all files in the theme directory except excluded ones
const addFilesRecursively = (directory) => {
const files = fs.readdirSync(directory);
files.forEach((file) => {
const filePath = path.join(directory, file);
// Exclude the file or directory if it matches the exclusion criteria
if (shouldExclude(filePath)) {
console.log(`Excluding: ${filePath}`);
return; // Skip this file/directory
}
const stat = fs.statSync(filePath);
if (stat.isDirectory()) {
// If it's a directory, recurse into it
addFilesRecursively(filePath);
} else {
// If it's a file, add it to the archive
archive.file(filePath, { name: path.relative(__dirname, filePath) });
}
});
};
// Start adding files from the theme directory
addFilesRecursively(__dirname);
// Finalize the archive
archive.finalize();
output.on('close', () => {
console.log(`Theme has been zipped into ${sanitizedThemeName}.zip`);
});
output.on('error', (err) => {
console.error('Error creating zip file:', err);
});
});