// import { readFile } from 'fs/promises'; import archiver from 'archiver'; import {createWriteStream} from 'fs'; import {readdir} from 'fs/promises'; import assert from 'assert'; // const act = any>(fn: T) => { // return async (...args: Parameters) => { // let r; // try { // r = await fn(...args); // } catch { // // noop // } // return r; // } // }; const main = async () => { // await act(cp)('dist', 'book', {recursive: true}); // await act(rm)('dist', {recursive: true, force: true}); // await act(mkdir)('dist'); // await act(cp)('book', 'dist/book', {recursive: true}); const { default: astroConfig } = await import('../astro.config.mjs'); const { outDir = 'dist/', output = 'static', build, compressHTML = false } = astroConfig; assert(output === 'static'); assert(build?.format === 'file'); assert(!compressHTML) const distFiles = await readdir(outDir); // TODO get all assets and declare to manifest console.log(distFiles); return new Promise((resolve, reject) => { const output = createWriteStream('book.epub'); const archive = archiver('zip', { zlib: { level: 9, }, }); output.on('close', () => { resolve(archive.pointer()); }); archive.on('error', (err) => { reject(err); }); archive.pipe(output); archive.append('application/epub+zip', { name: 'mimetype' }); archive.append(` `, { name: 'META-INF/container.xml' }); archive.append(` 978-3-86680-192-9 3b622266-b838-4003-bcb8-b126ee6ae1a2 The title fr The publisher The author A contributor A description A subject of the publication Another subject of the publication © copyright notice 2020-01-01T01:01:01Z `, { name: 'content.opf' }); archive.directory(outDir, 'OEBPS'); }); }; main().then((bytes) => { console.log(`${bytes} written.`); });