import { z } from 'zod'; import { mkdir, writeFile } from 'node:fs/promises'; import { collectionSchema, recipeSchema } from '../src/lib/recipe'; import { exportRecipes } from '../src/lib/import'; import { examples } from '../tests/fixtures'; await mkdir('public/examples', { recursive: true }); await writeFile( 'public/examples/hamham.schema.json', JSON.stringify(z.toJSONSchema(collectionSchema, { target: 'draft-2020-12' }), null, 2), ); const r = recipeSchema.parse({ title: 'Serbische Pljeskavica', subtitle: 'Saftig gegrillt, mit Ajvar und frischen Zwiebeln', description: 'Ein Klassiker vom Balkan: würzige Faschierte-Laibchen, außen kräftig geröstet und innen saftig. Dazu passen Lepinja, Ajvar und ein knackiger Salat.', cuisine: 'Serbien', categories: ['Für Gäste'], tags: ['Grillen', 'Familienliebling'], difficulty: 'Einfach', prepMinutes: 20, cookMinutes: 12, restMinutes: 60, servings: 4, published: false, ingredients: [ { id: 'fleisch', name: 'Rinderfaschiertes', amount: 800, unit: 'g', section: 'Pljeskavica' }, { id: 'zwiebel', name: 'Zwiebel', amount: 1, unit: 'Stück', note: 'sehr fein gewürfelt', section: 'Pljeskavica', }, { id: 'paprika', name: 'Paprikapulver edelsüß', amount: 2, unit: 'TL', section: 'Pljeskavica' }, { id: 'salz', name: 'Salz', amount: 10, unit: 'g', section: 'Pljeskavica' }, { id: 'pfeffer', name: 'Schwarzer Pfeffer', amount: null, unit: '', note: 'nach Geschmack', section: 'Pljeskavica', }, { id: 'wasser', name: 'Mineralwasser', amount: 60, unit: 'ml', section: 'Pljeskavica' }, { id: 'ajvar', name: 'Ajvar', amount: 120, unit: 'g', section: 'Zum Servieren', optional: true, }, { id: 'brot', name: 'Lepinja', amount: 4, unit: 'Stück', section: 'Zum Servieren' }, ], steps: [ { id: 'mischen', title: 'Die Mischung vorbereiten', text: '{{fleisch}}, {{zwiebel}}, {{paprika}}, {{salz}} und {{wasser}} gründlich verkneten. Mit {{pfeffer}} abschmecken.', ingredients: ['fleisch', 'zwiebel', 'paprika', 'salz', 'wasser', 'pfeffer'], }, { id: 'ruhen', title: 'Geschmack entwickeln lassen', text: 'Die Masse zugedeckt mindestens eine Stunde im Kühlschrank ruhen lassen.', timers: [{ id: 'ruhezeit', label: 'Im Kühlschrank ruhen', seconds: 3600 }], }, { id: 'formen', title: 'Flache Laibchen formen', text: 'Mit angefeuchteten Händen je Portion ein etwa 1,5 cm dickes Laibchen formen. In die Mitte eine leichte Mulde drücken.', }, { id: 'grillen', title: 'Kräftig grillen', text: 'Grill oder Grillpfanne vorheizen. Laibchen von beiden Seiten je etwa fünf bis sechs Minuten braten. Faschiertes vollständig durchgaren: im Kern mindestens 70 °C für zwei Minuten erreichen.', timers: [ { id: 'erste-seite', label: 'Erste Seite', seconds: 360 }, { id: 'zweite-seite', label: 'Zweite Seite', seconds: 360 }, ], }, { id: 'servieren', title: 'Ab an den Tisch', text: 'In {{brot}} mit {{ajvar}} servieren. Nach Wunsch frische Zwiebelringe dazu reichen.', ingredients: ['brot', 'ajvar'], }, ], tips: 'Nicht während des Bratens flachdrücken – so bleibt die Pljeskavica saftig. Für Schärfe etwas Chiliflocken zur Masse geben.', storage: 'Reste rasch abkühlen, abgedeckt im Kühlschrank aufbewahren und innerhalb von zwei Tagen verbrauchen. Vor dem Essen gründlich erhitzen.', }); await writeFile('public/examples/pljeskavica.json', exportRecipes([r], 'json')); await writeFile('public/examples/pljeskavica.xml', exportRecipes([r], 'xml')); await writeFile('public/examples/kochbuch.json', exportRecipes(examples, 'json')); console.log('JSON Schema und vollständige JSON/XML-Beispiele erzeugt.');