Golems `…-2607-211258.html` hat drei Seiten; gespeichert wurde bisher Seite 1 — 911 von rund 2400 Wörtern. Serverseitig ist da nichts zu holen: Seite 2 liegt hinter derselben Zustimmungs-Wand wie Seite 1. Ein `fetch` aus dem Tab bekommt sie (gemessen: 200, kein Redirect). Also sammelt der Tab sie. - `page-collector.js` (`collectPageta`) findet Folgeseiten ohne quellenspezifische Selektoren: Zähler-Adressen (`-2.html`, `?page=2`, `/seite/2/`), sonst die `rel="next"`-Kette. Deckel 20 Seiten / 6 MB, 300 ms Pause je Abruf. Läuft im Bookmarklet (Quelltext in der `javascript:`-Adresse) und in der Erweiterung (`executeScript`) — eine Quelle, zeichengleiche Kopie, von `check.mjs` erzwungen. - Weiches Strippen vor dem Senden: `<style>/<noscript>/<template>` raus, Skript-Inhalte geleert, Tags/Attribute und JSON-LD bleiben. Sonst verlören `siteNameFromJsonLd` und die CMP-Signaturen ihre Grundlage. Extraktions-Ergebnis nachweislich unverändert (the-decoder, winfuture). - API nimmt `pages` (max 20) zusätzlich zu `html` und antwortet mit `pageCount`; `merge-pages.ts` fügt in Lese-Reihenfolge zusammen. `html` bleibt gültig — Bookmarklets werden nicht mitdeployt. - Fehlt eine erkannte Seite, springt die add-Seite nicht weiter, sondern sagt „x von y Seiten". Am Golem-Artikel verifiziert: 3 Seiten, 0 fehlend, 298 KB statt ~1,2 MB. Wer ein Bookmarklet installiert hat, muss es einmal neu ablegen. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
44 lines
1.1 KiB
JavaScript
44 lines
1.1 KiB
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* Packt die Erweiterung als Zip — das Format, das Chrome Web Store und
|
|
* addons.mozilla.org erwarten.
|
|
*
|
|
* Nutzt `zip` aus dem System statt einer npm-Abhängigkeit: die Erweiterung
|
|
* hat sonst gar keine, und das soll so bleiben — was in den Store geht,
|
|
* soll man Zeile für Zeile lesen können.
|
|
*/
|
|
|
|
import { execFileSync } from 'node:child_process';
|
|
import { readFileSync, mkdirSync, rmSync } from 'node:fs';
|
|
import { join, dirname } from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
const ROOT = join(dirname(fileURLToPath(import.meta.url)), '..');
|
|
const { version } = JSON.parse(readFileSync(join(ROOT, 'manifest.json'), 'utf8'));
|
|
const out = join(ROOT, 'dist', `pageta-extension-${version}.zip`);
|
|
|
|
mkdirSync(join(ROOT, 'dist'), { recursive: true });
|
|
rmSync(out, { force: true });
|
|
|
|
execFileSync(
|
|
'zip',
|
|
[
|
|
'-r',
|
|
'-q',
|
|
out,
|
|
'manifest.json',
|
|
'background.js',
|
|
'page-collector.js',
|
|
'options.html',
|
|
'options.js',
|
|
'icons',
|
|
'README.md',
|
|
'-x',
|
|
'.*',
|
|
'-x',
|
|
'__MACOSX/*',
|
|
],
|
|
{ cwd: ROOT, stdio: 'inherit' },
|
|
);
|
|
|
|
console.log(`Paket: ${out}`);
|