/** * Re-Konvertierung: Direkt aus Original-HTML-Backup. * Entfernt WordPress-Nav/Footer, extrahiert nur den Content-Block, * konvertiert HTML-Tabellen sauber zu Markdown-Tabellen. */ import fs from "fs"; import path from "path"; import { NodeHtmlMarkdown } from "node-html-markdown"; const BACKUP_POSTS = path.resolve("backup/content/posts"); const BACKUP_PAGES = path.resolve("backup/content/pages"); const OUT_GUIDES = path.resolve("app/src/content/guides"); const OUT_PAGES = path.resolve("app/src/content/pages"); const SKIP_SLUGS = [ "guide-1-pla-perfekt-einstellen-2026-03-25", "guide-2-stringing-reduzieren-2026-03-25", "guide-1-warping-vermeiden-2026-03-26", "guide-2-petg-ohne-frust-2026-03-26", ]; const categorize = (slug) => { const s = slug.toLowerCase(); if (s.includes("guide-orcaslicer") || s.includes("guide-cura") || s.includes("guide-bambu") || s.includes("guide-prusaslicer") || s.includes("slicer")) return "Slicer"; if (s.includes("pla") || s.includes("petg") || s.includes("tpu") || s.includes("asa") || s.includes("abs") || s.includes("nylon") || s.includes("carbon") || s.includes("resin") || s.includes("filament") || s.includes("bed-adhesion")) return "Materialien"; if (s.includes("stringing") || s.includes("warping") || s.includes("unterextrusion") || s.includes("layer-separation") || s.includes("elefantenfuss") || s.includes("verstopfte")) return "Fehlerbehebung"; if (s.includes("retraction") || s.includes("flow-rate") || s.includes("pressure-advance") || s.includes("input-shaping") || s.includes("temperaturturm") || s.includes("speed-tower") || s.includes("erste-schicht") || s.includes("druckbett-leveln")) return "Kalibrierung"; if (s.includes("adaptive") || s.includes("modifier") || s.includes("ironing") || s.includes("fuzzy") || s.includes("multi-material") || s.includes("klipper")) return "Fortgeschritten"; if (s.includes("erstes-modell") || s.includes("support") || s.includes("infill") || s.includes("duesenwechsel") || s.includes("druckzeit") || s.includes("masshaltigkeit") || s.includes("bruecken") || s.includes("nachbearbeiten") || s.includes("gridfinity") || s.includes("naht")) return "Grundlagen"; return "Allgemein"; }; const difficulty = (slug, category) => { if (slug.includes("erstes-modell") || slug.includes("erste-schicht") || slug.includes("druckbett-leveln")) return "einsteiger"; if (category === "Fortgeschritten" || slug.includes("klipper") || slug.includes("pressure-advance") || slug.includes("input-shaping") || slug.includes("carbon") || slug.includes("nylon-pa")) return "experte"; return "fortgeschritten"; }; // Erstelle NHM mit besserer Konfiguration const nhm = new NodeHtmlMarkdown({ keepDataImages: false, useLinkReferenceDefinitions: false, ignore: ["style", "script", "nav", "footer", "button"], // Beibehalte Tabellen-Struktur }); const extractContent = (rawHtml) => { // 1. Alles vor dem eigentlichen Content entfernen // Content beginnt nach dem letzten Nav/Mobile-Menu-Block beim ersten