Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • scripts/export-archive.mjs

    ra4fea5e r712b161  
    66//     node scripts/export-archive.mjs <slug> --out boiert.zip
    77//     node scripts/export-archive.mjs <slug> --dir ./archief
    8 //
    9 // Op een machine met meerdere instances leest hij de .env van die instance zelf
    10 // (standaard /var/lib/klonkt/<slug>/.env). Dat is niet netjesheid maar noodzaak:
    11 // zonder die .env opent hij de database die toevallig in de code-map ligt, en op
    12 // een server die ooit de enkelvoudige opzet draaide is dat een oude lege. Dan
    13 // komt er een archief uit dat MELDT dat het gelukt is en nul posts bevat.
    14 //
    15 //     --data-root <map>   waar de instances staan (standaard /var/lib/klonkt)
    16 //     --env <pad>         een .env rechtstreeks aanwijzen
    178//
    189// Het formaat staat in docs/EXPORT-FORMAT.md.
     
    2415import fs from 'fs';
    2516import path from 'path';
    26 import { kiesInstance, eisOrigin, splitsArgs } from './instance-env.mjs';
     17import { buildArchive, zipArchive, writeArchiveDir } from '../src/services/ArchiveExportService.js';
    2718
    2819const args = process.argv.slice(2);
    29 // Twee namen, en ze zijn niet hetzelfde. De eerste is de INSTANCE (de map onder
    30 // de data-root, de systemd-unit); de tweede, optioneel, is de slug van de SITE in
    31 // die database. Laat je hem weg en er staat er precies een, dan is de keuze niet
    32 // dubbelzinnig en hoef je hem niet te weten.
    33 const { vrij, vlaggen } = splitsArgs(args, ['--data-root', '--env', '--out', '--dir']);
    34 const instance = vrij[0];
    35 let slug = vrij[1] || null;
    36 const vlag = (naam) => vlaggen[naam] ?? null;
     20const slug = args.find((a) => !a.startsWith('-'));
     21const vlag = (naam) => { const i = args.indexOf(naam); return i >= 0 ? (args[i + 1] || true) : null; };
    3722
    38 if (!instance) {
    39   console.error('gebruik: node scripts/export-archive.mjs <instance> [site-slug] [--data-root <map>] [--env <pad>] [--dry-run | --out <zip> | --dir <map>]');
     23if (!slug) {
     24  console.error('gebruik: node scripts/export-archive.mjs <slug> [--dry-run | --out <zip> | --dir <map>]');
    4025  process.exit(1);
    4126}
    4227
    43 // EERST de instance kiezen, DAN pas de service laden: src/config/database.js
    44 // leest DATABASE_PATH bij import en opent de database meteen.
    45 let gekozen;
    46 try {
    47   gekozen = kiesInstance(instance, {
    48     dataRoot: typeof vlag('--data-root') === 'string' ? vlag('--data-root') : null,
    49     envPad: typeof vlag('--env') === 'string' ? vlag('--env') : null,
    50   });
    51 } catch (e) { console.error(e.message); process.exit(1); }
    52 eisOrigin(gekozen.bron);
    53 
    54 const { buildArchive, zipArchive, writeArchiveDir } = await import('../src/services/ArchiveExportService.js');
    55 const { default: db } = await import('../src/config/database.js');
    56 
    57 // Geen slug gegeven? Dan mag de database het zeggen, mits het antwoord eenduidig is.
    58 if (!slug) {
    59   let sites = [];
    60   try { sites = db.prepare('SELECT slug FROM sites ORDER BY rowid').all().map((r) => r.slug); } catch { /* geen tabel */ }
    61   if (sites.length === 1) {
    62     [slug] = sites;
    63     console.log(`site niet opgegeven, en er staat er precies een: ${slug}`);
    64   } else if (sites.length === 0) {
    65     console.error(`in ${process.env.DATABASE_PATH || 'deze database'} staat geen enkele site.`);
    66     process.exit(1);
    67   } else {
    68     console.error(`meerdere sites in deze database: ${sites.join(', ')}\nGeef er een op: node scripts/export-archive.mjs ${instance} <site-slug>`);
    69     process.exit(1);
    70   }
    71 }
    72 
    73 let uit;
    74 try { uit = buildArchive(slug); }
    75 catch (e) {
    76   console.error(`${e.message}`);
    77   if (gekozen.bron) console.error(`(gelezen uit ${gekozen.bron})`);
    78   else console.error('(geen instance-.env gevonden -- op een split install: --data-root /var/lib/klonkt)');
    79   process.exit(1);
    80 }
     28const uit = buildArchive(slug);
    8129const t = uit.counts;
    82 console.log(`site      : ${uit.manifest.site.slug} (${uit.manifest.origin})`);
    83 console.log(`instellingen uit: ${gekozen.bron || 'de omgeving'}`);
    84 console.log(`database  : ${process.env.DATABASE_PATH || '(standaard in de code-map)'}`);
     30console.log(`site      : ${uit.manifest.site.slug} (${uit.manifest.origin || 'geen PUBLIC_BASE_URL'})`);
    8531console.log(`posts     : ${t.posts}`);
    8632console.log(`antwoorden: ${t.replies}   (alleen-lezen archief)`);
Note: See TracChangeset for help on using the changeset viewer.