UNPKG

@ankimcp/anki-mcp-server

Version:

Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards

55 lines • 2.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MissingCardIdsError = void 0; exports.isExistingCardEntry = isExistingCardEntry; exports.findMissingIds = findMissingIds; exports.fetchExistingCards = fetchExistingCards; exports.assertCardIdsExist = assertCardIdsExist; class MissingCardIdsError extends Error { missingIds; totalRequested; constructor(missingIds, totalRequested, noOpNotice) { super(MissingCardIdsError.buildMessage(missingIds, totalRequested, noOpNotice)); this.missingIds = missingIds; this.totalRequested = totalRequested; this.name = "MissingCardIdsError"; } static buildMessage(ids, total, noOpNotice) { const MAX_SHOWN = 10; const shown = ids.slice(0, MAX_SHOWN).join(", "); const suffix = ids.length > MAX_SHOWN ? ` (and ${ids.length - MAX_SHOWN} more)` : ""; return (`${ids.length} of ${total} card ID(s) do not exist in the Anki ` + `collection: [${shown}]${suffix}. ${noOpNotice}`); } } exports.MissingCardIdsError = MissingCardIdsError; function isExistingCardEntry(entry) { return typeof entry?.cardId === "number"; } function findMissingIds(cards, responses) { const missingIds = []; cards.forEach((id, index) => { if (!isExistingCardEntry(responses?.[index])) { missingIds.push(id); } }); return missingIds; } async function fetchExistingCards(cards, client, noOpNotice) { const cardsInfo = await client.invoke("cardsInfo", { cards }); const missingIds = findMissingIds(cards, cardsInfo); if (missingIds.length > 0) { throw new MissingCardIdsError(missingIds, cards.length, noOpNotice); } return cardsInfo; } async function assertCardIdsExist(cards, client, noOpNotice) { const modTimes = await client.invoke("cardsModTime", { cards, }); const missingIds = findMissingIds(cards, modTimes); if (missingIds.length > 0) { throw new MissingCardIdsError(missingIds, cards.length, noOpNotice); } } //# sourceMappingURL=card-validation.utils.js.map