| [58cfe5f] | 1 | #!/usr/bin/env node
|
|---|
| 2 | //
|
|---|
| 3 | // Importeer een inhoudsarchief in een site (shaer-pmr).
|
|---|
| 4 | //
|
|---|
| 5 | // node scripts/import-archive.mjs <slug> <archief.zip|map> --dry-run
|
|---|
| 6 | // node scripts/import-archive.mjs <slug> <archief.zip|map>
|
|---|
| 7 | // node scripts/import-archive.mjs <slug> <archief.zip|map> --overwrite
|
|---|
| 8 | //
|
|---|
| 9 | // Het formaat staat in docs/EXPORT-FORMAT.md.
|
|---|
| 10 | //
|
|---|
| 11 | // Standaard wordt een bestaande post met hetzelfde id of dezelfde slug
|
|---|
| 12 | // OVERGESLAGEN. Dat maakt de import idempotent en zorgt dat je nooit per ongeluk
|
|---|
| 13 | // inhoud vernietigt die er al staat. --overwrite doet het wel, expliciet.
|
|---|
| 14 | //
|
|---|
| 15 | // Er gaat GEEN Update de fediverse in. Als andere servers een oudere kopie
|
|---|
| 16 | // hebben, blijft die daar staan; dat rechttrekken is een uitzending naar iedereen
|
|---|
| 17 | // en hoort een aparte, bewuste actie te zijn.
|
|---|
| 18 |
|
|---|
| [a4fea5e] | 19 | import { kiesInstance, eisOrigin, splitsArgs } from './instance-env.mjs';
|
|---|
| [58cfe5f] | 20 |
|
|---|
| 21 | const args = process.argv.slice(2);
|
|---|
| [a4fea5e] | 22 | const { vrij, vlaggen } = splitsArgs(args, ['--data-root', '--env']);
|
|---|
| [58cfe5f] | 23 | const [slug, bron] = vrij;
|
|---|
| 24 |
|
|---|
| 25 | if (!slug || !bron) {
|
|---|
| [6248497] | 26 | console.error('gebruik: node scripts/import-archive.mjs <slug> <archief.zip|map> [--data-root <map>] [--env <pad>] [--dry-run] [--overwrite]');
|
|---|
| [58cfe5f] | 27 | process.exit(1);
|
|---|
| 28 | }
|
|---|
| 29 |
|
|---|
| [6248497] | 30 | // EERST de instance kiezen, DAN pas de service laden -- database.js opent de
|
|---|
| 31 | // database bij import. Bij een IMPORT weegt dit zwaarder dan bij een export: in
|
|---|
| 32 | // de verkeerde database schrijven is niet terug te draaien.
|
|---|
| [a4fea5e] | 33 | const vlag = (naam) => vlaggen[naam] ?? null;
|
|---|
| [6248497] | 34 | let gekozen;
|
|---|
| 35 | try {
|
|---|
| 36 | gekozen = kiesInstance(slug, { dataRoot: vlag('--data-root'), envPad: vlag('--env') });
|
|---|
| 37 | } catch (e) { console.error(e.message); process.exit(1); }
|
|---|
| 38 | eisOrigin(gekozen.bron);
|
|---|
| 39 | console.log(`instellingen uit: ${gekozen.bron || 'de omgeving'}`);
|
|---|
| 40 | console.log(`database : ${process.env.DATABASE_PATH || '(standaard in de code-map)'}`);
|
|---|
| 41 |
|
|---|
| 42 | const { readArchive, importArchive } = await import('../src/services/ArchiveImportService.js');
|
|---|
| 43 |
|
|---|
| [58cfe5f] | 44 | let files;
|
|---|
| 45 | try { files = readArchive(bron); }
|
|---|
| 46 | catch (e) { console.error(`kan het archief niet lezen: ${e.message}`); process.exit(1); }
|
|---|
| 47 |
|
|---|
| 48 | let r;
|
|---|
| 49 | try { r = importArchive(files, { slug, dryRun: args.includes('--dry-run'), overwrite: args.includes('--overwrite') }); }
|
|---|
| 50 | catch (e) { console.error(`geweigerd: ${e.message}`); process.exit(1); }
|
|---|
| 51 |
|
|---|
| 52 | console.log(`formaatversie : ${r.formatVersion}`);
|
|---|
| 53 | console.log(`herkomst : ${r.origin || '(geen)'}`);
|
|---|
| 54 | console.log(`AP-ids : ${r.idsBehouden ? 'BEHOUDEN (zelfde origin)' : 'nieuw (andere origin)'}`);
|
|---|
| 55 | console.log(`posts : ${r.posts}${r.overschreven ? `, waarvan ${r.overschreven} overschreven` : ''}`);
|
|---|
| 56 | console.log(`overgeslagen : ${r.overgeslagen} (bestonden al)`);
|
|---|
| 57 | console.log(`antwoorden : ${r.replies} (alleen-lezen archief)`);
|
|---|
| 58 | console.log(`media : ${r.media} teruggezet, ${r.mediaMissing} ontbrekend`);
|
|---|
| 59 |
|
|---|
| 60 | if (r.gemist.length) {
|
|---|
| 61 | console.log('\nontbrekende media:');
|
|---|
| 62 | for (const m of r.gemist.slice(0, 20)) console.log(` ${m.post} ${m.url}`);
|
|---|
| 63 | if (r.gemist.length > 20) console.log(` ... en nog ${r.gemist.length - 20}`);
|
|---|
| 64 | }
|
|---|
| 65 | for (const w of r.waarschuwingen) console.log(`\nLET OP: ${w}`);
|
|---|
| 66 |
|
|---|
| 67 | if (args.includes('--dry-run')) console.log('\n--dry-run: niets geschreven.');
|
|---|