sourcehypertextpublicindexannexe.js

import Database from "better-sqlite3";

import grimm from "../../../app/grimm.js";

const db = new Database("./db/site.db");
db.pragma("journal_mode = DELETE");

const sqlQuery = `SELECT pagesets.pagesetID, pagesets.original, pagesets.pageCreated, editions.pageUpdated FROM pagesets INNER JOIN editions ON editions.editionID = pagesets.original WHERE NOT pagesetID like '%/%'`;

function comparePages(a, b) {
	function localeSort(x) {
		return grimm.dict?.[x]?.meta?.sort ?? x;
	}
	if (localeSort(a) < localeSort(b)) {
		return -1;
	}
	if (localeSort(a) > localeSort(b)) {
		return 1;
	}
	return 0;
}

let pages = null;
let lastGotPages = new Date();

const getPages = () => {
	if (pages !== null && new Date() - lastGotPages < 7 * 24 * 60 * 60 * 1000) {
		return pages;
	}

	lastGotPages = new Date();

	pages = db
		.prepare(sqlQuery)
		.all()
		.reduce((obj, row) => ({ ...obj, [row.pagesetID]: row }), {});

	for (const pg in pages) {
		let page = pages[pg];

		const pgCreated = page.pageCreated
			? page.pageCreated.slice(0, 4)
			: null;
		const pgUpdated = page.pageUpdated
			? page.pageUpdated.slice(0, 4)
			: null;

		pages[pg].dateRange = !pgCreated
			? ""
			: !pgUpdated || pgCreated == pgUpdated
			? pgCreated
			: pgCreated.slice(0, 2) == pgUpdated.slice(0, 2)
			? `${pgCreated}${pgUpdated.slice(2)}`
			: `${pgCreated}${pgUpdated}`;

		pages[pg].translations = db
			.prepare("SELECT lang FROM editions WHERE translates = ?")
			.all(pg)
			.map(x => x.lang)
			.sort(comparePages);
	}

	return pages;
};

export default getPages;