Automerge backed Markdown editor for the Atmosphere
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839import { readFile, writeFile, mkdir, copyFile } from 'node:fs/promises'import { createHash } from 'node:crypto'import path from 'node:path'
// Static output can be published separately from the application.const root = path.resolve(import.meta.dirname, '..')const output = path.resolve(root, process.argv[2] || 'public/plugin-catalog')const entries = JSON.parse(await readFile(path.join(root, 'plugin-catalog/plugins.json'), 'utf8'))const plugins = []for (const entry of entries) { const source = path.join(root, 'public/test-plugins', entry.fixture) const manifest = JSON.parse(await readFile(path.join(source, 'manifest.json'), 'utf8')) const evidence = await readFile(path.join(root, entry.evidence), 'utf8') if (!evidence.trim()) throw new Error(`Missing evidence for ${manifest.id}`) const bundlePath = `bundles/${manifest.id}/${manifest.version}/` const destination = path.join(output, bundlePath) await mkdir(destination, { recursive: true }) const files = {} for (const file of ['main.js', 'styles.css']) { let bytes try { bytes = await readFile(path.join(source, file)) } catch (error) { if (file === 'styles.css' && error.code === 'ENOENT') continue throw error } files[file] = createHash('sha256').update(bytes).digest('hex') await writeFile(path.join(destination, file), bytes) } await copyFile(path.join(source, 'manifest.json'), path.join(destination, 'manifest.json')) for (const file of ['LICENSE', 'LICENSE.md', 'LICENSE.txt', 'DOWNLOAD.md']) { try { await copyFile(path.join(source, file), path.join(destination, file)) } catch (error) { if (error.code !== 'ENOENT') throw error } } plugins.push({ manifest, status: entry.status || 'available', waitForMetadata: entry.waitForMetadata, repository: entry.repository, notes: entry.notes, testedAt: entry.testedAt || 'historical', evidence: entry.evidence, bundlePath, files })}await writeFile(path.join(output, 'catalog.json'), JSON.stringify({ schemaVersion: 1, plugins }, null, 2) + '\n')console.log(`Built ${plugins.length} plugin entries in ${output}`)