import { readFileSync, writeFileSync, existsSync, mkdirSync, unlinkSync } from 'node:fs'; import { resolve, dirname, join } from 'node:path'; import { execSync } from 'node:child_process'; import { fileURLToPath } from 'node:url'; import { compress } from '@mongodb-js/zstd'; import { createHash } from 'node:crypto'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); const projectPath = resolve(__dirname, '..'); const outFile = join(projectPath, 'bundle.tar.zst'); const tempTarFile = join(projectPath, 'tmp', 'bundle.tar'); const tmpDir = join(projectPath, 'tmp'); if (!existsSync(tmpDir)) { mkdirSync(tmpDir, { recursive: true }); } (async () => { try { console.log('[pack] Creating tar archive...'); execSync(`cd ${projectPath} && tar -cvf ${tempTarFile} manifest.json ui dist/main.wasm`, { stdio: 'inherit', }); console.log('[pack] Reading tar file...'); const tarData = readFileSync(tempTarFile); console.log('[pack] Compressing with zstd...'); const compressed = await compress(tarData); console.log('[pack] Writing output file...'); writeFileSync(outFile, compressed); const hash = createHash('sha256').update(compressed).digest('hex'); writeFileSync(outFile + '.sha256', hash); unlinkSync(tempTarFile); console.log(`✓ Successfully packed extension`); console.log(` Output: ${outFile}`); console.log(` SHA256: ${hash}`); } catch (error) { console.error('✗ Failed to pack extension'); console.error(error?.message ?? String(error)); process.exit(1); } })();