bookworms
Version:
A cli tool for centralising and generating bookmarks
55 lines (49 loc) • 1.55 kB
JavaScript
import readJsYaml from "read-js-yaml";
import { readFileSync } from "fs";
import { trimTrailingSlash } from "./save-bookmarks.js";
import { generateImportBookmarkMarkup } from "./generate-bookmarks.js";
const checkBookmarks = async (path, directory) => {
const { type, body } = await readJsYaml(path);
console.log(`Fetching ${type} bookmarks from ${path}`);
const generatedBookmarks = generateImportBookmarkMarkup(body);
return generatedBookmarks.every((bookmark) =>
checkSingleBookmark(bookmark, directory)
);
};
const sanitizeDynamicData = (bookmarkBody) => {
// Sanitize dates
const dateRegexes = [
/(ADD_DATE=")\d+(")/g,
/(LAST_MODIFIED=")\d+(")/g,
/(last updated on ).*( using \[Bookworms\])/g,
];
return dateRegexes.reduce(
(body, regex) => body.replaceAll(regex, "$10$2"),
bookmarkBody
);
};
const checkBookmarkBody = (existingBookmarkBody, generatedBookmarkBody) => {
return (
sanitizeDynamicData(existingBookmarkBody) ===
sanitizeDynamicData(generatedBookmarkBody)
);
};
const checkSingleBookmark = (generatedBookmark, directory) => {
const filename = `${trimTrailingSlash(directory)}/${
generatedBookmark.filename
}`;
let existingBookmark = null;
try {
existingBookmark = readFileSync(filename, "utf8");
} catch (e) {
console.error(`Failed to read file ${filename}`);
return false;
}
return checkBookmarkBody(existingBookmark, generatedBookmark.body);
};
export {
checkBookmarks,
checkSingleBookmark,
sanitizeDynamicData,
checkBookmarkBody,
};