@vue-skuilder/db 0.1.33-vite8-4 → 0.1.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2409,7 +2409,26 @@ var init_srs = __esm({
2409
2409
  const courseId = this.course.getCourseID();
2410
2410
  const reviews = await this.user.getPendingReviews(courseId);
2411
2411
  const now = import_moment3.default.utc();
2412
- const dueReviews = reviews.filter((r) => now.isAfter(import_moment3.default.utc(r.reviewTime)));
2412
+ let dueReviews = reviews.filter((r) => now.isAfter(import_moment3.default.utc(r.reviewTime)));
2413
+ if (dueReviews.length > 0) {
2414
+ const dueCardIds = [...new Set(dueReviews.map((r) => r.cardId))];
2415
+ const tagsByCard = await this.course.getAppliedTagsBatch(dueCardIds);
2416
+ const skippedReviewIds = [];
2417
+ dueReviews = dueReviews.filter((r) => {
2418
+ const tags = tagsByCard.get(r.cardId) ?? [];
2419
+ if (tags.includes("srs:skip")) {
2420
+ skippedReviewIds.push(r._id);
2421
+ return false;
2422
+ }
2423
+ return true;
2424
+ });
2425
+ if (skippedReviewIds.length > 0) {
2426
+ logger.info(`[SRS] Removing ${skippedReviewIds.length} scheduled reviews for srs:skip cards`);
2427
+ for (const id of skippedReviewIds) {
2428
+ void this.user.removeScheduledCardReview(id);
2429
+ }
2430
+ }
2431
+ }
2413
2432
  const backlogPressure = this.computeBacklogPressure(dueReviews.length);
2414
2433
  if (dueReviews.length > 0) {
2415
2434
  const pressureNote = backlogPressure > 0 ? ` [backlog pressure: +${backlogPressure.toFixed(2)}]` : ` [healthy backlog]`;
@@ -5493,7 +5512,7 @@ ${above.rows.map((r) => ` ${r.id}-${r.key}
5493
5512
  }
5494
5513
  }
5495
5514
  async getCourseDoc(id, options) {
5496
- return await this.db.get(id, options);
5515
+ return await this.db.get(id, options ?? {});
5497
5516
  }
5498
5517
  async getCourseDocs(ids, options = {}) {
5499
5518
  return await this.db.allDocs({
@@ -5577,7 +5596,9 @@ ${above.rows.map((r) => ` ${r.id}-${r.key}
5577
5596
  );
5578
5597
  return pipeline;
5579
5598
  } catch (e) {
5580
- logger.error(`[courseDB] Error creating navigator: ${e}`);
5599
+ const msg = e instanceof Error ? `${e.message}
5600
+ ${e.stack}` : JSON.stringify(e);
5601
+ logger.error(`[courseDB] Error creating navigator: ${msg}`);
5581
5602
  throw e;
5582
5603
  }
5583
5604
  }
@@ -6851,17 +6872,18 @@ Currently logged-in as ${this._username}.`
6851
6872
  * @param course_id optional specification of individual course
6852
6873
  */
6853
6874
  async getSeenCards(course_id) {
6854
- let prefix = DocTypePrefixes["CARDRECORD" /* CARDRECORD */];
6875
+ const basePrefix = DocTypePrefixes["CARDRECORD" /* CARDRECORD */];
6876
+ let filterPrefix = basePrefix;
6855
6877
  if (course_id) {
6856
- prefix += course_id;
6878
+ filterPrefix += `-${course_id}-`;
6857
6879
  }
6858
- const docs = await filterAllDocsByPrefix(this.localDB, prefix, {
6880
+ const docs = await filterAllDocsByPrefix(this.localDB, filterPrefix, {
6859
6881
  include_docs: false
6860
6882
  });
6861
6883
  const ret = [];
6862
6884
  docs.rows.forEach((row) => {
6863
- if (row.id.startsWith(DocTypePrefixes["CARDRECORD" /* CARDRECORD */])) {
6864
- ret.push(row.id.substr(DocTypePrefixes["CARDRECORD" /* CARDRECORD */].length));
6885
+ if (row.id.startsWith(filterPrefix)) {
6886
+ ret.push(row.id.substr(filterPrefix.length));
6865
6887
  }
6866
6888
  });
6867
6889
  return ret;