@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
JavaScript
;
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