// Packs the plugin into the installable ZIP (plugin-architecture.md §Package // format): dist/section-styles-basic-.zip with manifest.json and // styles.css at the archive root — ready for the admin upload or the // `plugins/` dropzone watcher. import { mkdirSync, readFileSync, writeFileSync } from 'node:fs'; import { dirname, join } from 'node:path'; import { fileURLToPath } from 'node:url'; import { zipSync } from 'fflate'; const root = dirname(fileURLToPath(import.meta.url)); const manifest = JSON.parse(readFileSync(join(root, 'manifest.json'), 'utf8')); const archive = zipSync({ 'manifest.json': readFileSync(join(root, 'manifest.json')), 'styles.css': readFileSync(join(root, 'styles.css')), }); mkdirSync(join(root, 'dist'), { recursive: true }); const target = join(root, 'dist', `${manifest.id}-${manifest.version}.zip`); writeFileSync(target, archive); console.log(`wrote ${target} (${archive.length} bytes)`);