← back to Nineoh Guide
db/patch-recaps.mjs
36 lines
// One-off: punch up the vaguest S2-S5 recaps (key-based, grounded in TVmaze facts,
// spoiler-safe). Rewrites entries in db/recaps/s{N}.json in place. Run once, then
// apply-recaps 2..5. (S1 already reviewed — do NOT re-apply S1.)
import { readFileSync, writeFileSync } from "node:fs";
import { fileURLToPath } from "node:url";
import { dirname, join } from "node:path";
const dir = join(dirname(fileURLToPath(import.meta.url)), "recaps");
const PATCH = {
s2: {
"7": "At the beach club's Halloween bash, Adrianna hides a fresh breakup behind a Marilyn Monroe costume as masked secrets shift more than one romance.",
"19": "As everyone crams for the SATs, Silver and Teddy collide over his plan to skip college and chase a pro-tennis career.",
"22": "The finale turns on confession — moved by Liam owning up to his parents, Annie finally finds the courage to come clean about her own secret.",
},
s3: {
"17": "Dixon and Navid make their studio partnership official, and a chance run-in with a hip-hop legend could put Shirazi Studios on the map.",
"20": "Annie coaxes reclusive former starlet Marla back into the spotlight for a premiere, while an unexpected visitor upends Ryan's world.",
},
s4: {
"9": "The leaked-wedding-video fallout keeps widening, dragging a political campaign and Liam's new modeling career into the blast radius.",
"11": "Dixon fights temptation on his music comeback while Annie confronts Jeremy over what he's holding against her.",
},
s5: {
"13": "A charity football game rekindles old feelings for Naomi and Max, while Navid goads Liam deeper into underground fighting.",
"20": "Jordan pulls a powerful family favor to bail out Mark — but the price is ending things with Naomi.",
},
};
for (const [season, updates] of Object.entries(PATCH)) {
const file = join(dir, `${season}.json`);
const data = JSON.parse(readFileSync(file, "utf8"));
for (const [ep, text] of Object.entries(updates)) data[ep] = text;
writeFileSync(file, JSON.stringify(data, null, 2) + "\n");
console.log(`${season}: patched ${Object.keys(updates).length} recaps`);
}