const fs = require("fs"); const jsdom = require("jsdom"); const { JSDOM } = jsdom; const { window } = new JSDOM(""); global.window = window; var showdown = require("showdown"); const converterShowdown = new showdown.Converter(); const libxmljs = require("libxmljs"); fs.readFile("./news.xml", "utf8", (err, data) => { if (err) { console.error(err); return; } parseXML(data); }); fs.mkdir("./markdown-news/", { recursive: true }, (err) => { if (err) throw err; }); const nodeChildrenToString = (nodeChildren) => { let string = ""; for (let i = 0; i < nodeChildren.length; ++i) { if (nodeChildren[i].type() === "text") { string += nodeChildren[i]; } else { string += nodeChildren[i].toString(); } } return string; }; const getTerm = (dateStr) => { const date = new Date(dateStr); let term = ""; const year = date.getUTCFullYear(); if ( new Date(`${year}-01-01`).getTime() <= date.getTime() && date.getTime() <= new Date(`${year}-04-30`).getTime() ) { term = "Winter"; } else if ( new Date(`${year}-05-01`).getTime() <= date.getTime() && date.getTime() <= new Date(`${year}-08-31`).getTime() ) { term = "Spring"; } else if ( new Date(`${year}-09-01`).getTime() <= date.getTime() && date.getTime() <= new Date(`${year}-12-31`).getTime() ) { term = "Fall"; } return `-${term}-${year}-`; }; const parseXML = (XML) => { const xmlDoc = libxmljs.parseHtml(XML); let newsdefsChildren = xmlDoc.get("//newsdefs").childNodes(); let currentTerm = ""; for (let i = 0; i < newsdefsChildren.length; ++i) { if (newsdefsChildren[i].type() === "element") { const author = newsdefsChildren[i].attr("author").value(); const date = newsdefsChildren[i].attr("date").value(); currentTerm = getTerm(date); const contentNodes = newsdefsChildren[i].childNodes(); const content = converterShowdown.makeMarkdown( nodeChildrenToString(contentNodes) ); const mdx = `export const metadata = { author: ${author}, date: new Date("${date}"), } ${content}`; const mdxTitle = `${date}-${author}`; fs.mkdir(`./markdown-news/${currentTerm}`, { recursive: true }, (err) => { if (err) throw err; }); fs.writeFile( `./markdown-news/${currentTerm}/${mdxTitle}.news.mdx`, mdx, (err) => { if (err) throw err; } ); } } };