@vue-skuilder/db 0.1.18 → 0.1.21

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.
Files changed (87) hide show
  1. package/CLAUDE.md +2 -2
  2. package/dist/{classroomDB-BgfrVb8d.d.ts → contentSource-BP9hznNV.d.ts} +220 -197
  3. package/dist/{classroomDB-CTOenngH.d.cts → contentSource-DsJadoBU.d.cts} +220 -197
  4. package/dist/core/index.d.cts +80 -6
  5. package/dist/core/index.d.ts +80 -6
  6. package/dist/core/index.js +735 -1560
  7. package/dist/core/index.js.map +1 -1
  8. package/dist/core/index.mjs +708 -1539
  9. package/dist/core/index.mjs.map +1 -1
  10. package/dist/{dataLayerProvider-D6PoCwS6.d.cts → dataLayerProvider-CHYrQ5pB.d.cts} +1 -1
  11. package/dist/{dataLayerProvider-CZxC9GtB.d.ts → dataLayerProvider-MDTxXq2l.d.ts} +1 -1
  12. package/dist/impl/couch/index.d.cts +8 -23
  13. package/dist/impl/couch/index.d.ts +8 -23
  14. package/dist/impl/couch/index.js +723 -1578
  15. package/dist/impl/couch/index.js.map +1 -1
  16. package/dist/impl/couch/index.mjs +692 -1552
  17. package/dist/impl/couch/index.mjs.map +1 -1
  18. package/dist/impl/static/index.d.cts +25 -8
  19. package/dist/impl/static/index.d.ts +25 -8
  20. package/dist/impl/static/index.js +700 -1400
  21. package/dist/impl/static/index.js.map +1 -1
  22. package/dist/impl/static/index.mjs +688 -1393
  23. package/dist/impl/static/index.mjs.map +1 -1
  24. package/dist/{index-D-Fa4Smt.d.cts → index-B_j6u5E4.d.cts} +1 -1
  25. package/dist/{index-CD8BZz2k.d.ts → index-Dj0SEgk3.d.ts} +1 -1
  26. package/dist/index.d.cts +71 -63
  27. package/dist/index.d.ts +71 -63
  28. package/dist/index.js +1162 -1996
  29. package/dist/index.js.map +1 -1
  30. package/dist/index.mjs +1124 -1955
  31. package/dist/index.mjs.map +1 -1
  32. package/dist/pouch/index.js +3 -0
  33. package/dist/pouch/index.js.map +1 -1
  34. package/dist/pouch/index.mjs +3 -0
  35. package/dist/pouch/index.mjs.map +1 -1
  36. package/dist/{types-CzPDLAK6.d.cts → types-Bn0itutr.d.cts} +1 -1
  37. package/dist/{types-CewsN87z.d.ts → types-DQaXnuoc.d.ts} +1 -1
  38. package/dist/{types-legacy-6ettoclI.d.cts → types-legacy-DDY4N-Uq.d.cts} +3 -1
  39. package/dist/{types-legacy-6ettoclI.d.ts → types-legacy-DDY4N-Uq.d.ts} +3 -1
  40. package/dist/util/packer/index.d.cts +3 -3
  41. package/dist/util/packer/index.d.ts +3 -3
  42. package/docs/navigators-architecture.md +115 -17
  43. package/package.json +4 -4
  44. package/src/core/index.ts +1 -0
  45. package/src/core/interfaces/classroomDB.ts +5 -13
  46. package/src/core/interfaces/contentSource.ts +6 -66
  47. package/src/core/interfaces/courseDB.ts +15 -7
  48. package/src/core/interfaces/userDB.ts +32 -0
  49. package/src/core/navigators/Pipeline.ts +136 -52
  50. package/src/core/navigators/PipelineAssembler.ts +1 -1
  51. package/src/core/navigators/defaults.ts +84 -0
  52. package/src/core/navigators/{hierarchyDefinition.ts → filters/hierarchyDefinition.ts} +15 -29
  53. package/src/core/navigators/filters/index.ts +3 -0
  54. package/src/core/navigators/filters/inferredPreferenceStub.ts +107 -0
  55. package/src/core/navigators/{interferenceMitigator.ts → filters/interferenceMitigator.ts} +11 -37
  56. package/src/core/navigators/{relativePriority.ts → filters/relativePriority.ts} +12 -38
  57. package/src/core/navigators/filters/userGoalStub.ts +136 -0
  58. package/src/core/navigators/filters/userTagPreference.ts +217 -0
  59. package/src/core/navigators/{CompositeGenerator.ts → generators/CompositeGenerator.ts} +15 -64
  60. package/src/core/navigators/{elo.ts → generators/elo.ts} +13 -63
  61. package/src/core/navigators/{srs.ts → generators/srs.ts} +11 -40
  62. package/src/core/navigators/generators/types.ts +1 -1
  63. package/src/core/navigators/index.ts +95 -91
  64. package/src/core/types/strategyState.ts +84 -0
  65. package/src/core/types/types-legacy.ts +2 -0
  66. package/src/impl/common/BaseUserDB.ts +74 -7
  67. package/src/impl/couch/adminDB.ts +1 -2
  68. package/src/impl/couch/classroomDB.ts +100 -103
  69. package/src/impl/couch/courseDB.ts +35 -91
  70. package/src/impl/couch/pouchdb-setup.ts +7 -0
  71. package/src/impl/static/StaticDataUnpacker.ts +50 -1
  72. package/src/impl/static/courseDB.ts +87 -37
  73. package/src/study/SessionController.ts +122 -202
  74. package/src/study/SourceMixer.ts +65 -0
  75. package/src/study/TagFilteredContentSource.ts +49 -92
  76. package/src/study/index.ts +1 -0
  77. package/src/study/services/CardHydrationService.ts +165 -81
  78. package/src/util/dataDirectory.ts +1 -1
  79. package/src/util/index.ts +0 -1
  80. package/tests/core/navigators/CompositeGenerator.test.ts +44 -168
  81. package/tests/core/navigators/Pipeline.test.ts +6 -72
  82. package/tests/core/navigators/PipelineAssembler.test.ts +8 -58
  83. package/tests/core/navigators/navigators.test.ts +118 -151
  84. package/docs/todo-pipeline-optimization.md +0 -117
  85. package/docs/todo-strategy-state-storage.md +0 -278
  86. package/src/core/navigators/hardcodedOrder.ts +0 -163
  87. package/src/util/tuiLogger.ts +0 -139
@@ -1,8 +1,8 @@
1
- import { U as UserDBInterface, C as CourseDBInterface, b as CoursesDBInterface, c as ClassroomDBInterface, A as AdminDBInterface, a as UserDBReader, d as CourseInfo, S as StudySessionNewItem, D as DataLayerResult, e as ContentNavigationStrategyData, f as StudySessionReviewItem, g as ScheduledCard } from '../../classroomDB-CTOenngH.cjs';
2
- import { D as DataLayerProvider } from '../../dataLayerProvider-D6PoCwS6.cjs';
3
- import { S as StaticCourseManifest } from '../../types-CzPDLAK6.cjs';
1
+ import { U as UserDBInterface, C as CourseDBInterface, b as CoursesDBInterface, c as ClassroomDBInterface, A as AdminDBInterface, a as UserDBReader, d as CourseInfo, S as StudySessionItem, D as DataLayerResult, e as ContentNavigationStrategyData, f as ContentNavigator, W as WeightedCard } from '../../contentSource-DsJadoBU.cjs';
2
+ import { D as DataLayerProvider } from '../../dataLayerProvider-CHYrQ5pB.cjs';
3
+ import { S as StaticCourseManifest } from '../../types-Bn0itutr.cjs';
4
4
  import { CourseConfig, CourseElo, DataShape } from '@vue-skuilder/common';
5
- import { S as SkuilderCourseData, Q as QualifiedCardID, T as TagStub, a as Tag } from '../../types-legacy-6ettoclI.cjs';
5
+ import { S as SkuilderCourseData, Q as QualifiedCardID, T as TagStub, a as Tag } from '../../types-legacy-DDY4N-Uq.cjs';
6
6
  import { S as SyncStrategy, A as AccountCreationResult, a as AuthenticationResult } from '../../SyncStrategy-CyATpyLQ.cjs';
7
7
  import 'moment';
8
8
 
@@ -51,6 +51,16 @@ declare class StaticDataUnpacker {
51
51
  * Get a document by ID, loading from appropriate chunk if needed
52
52
  */
53
53
  getDocument<T = any>(id: string): Promise<T>;
54
+ /**
55
+ * Get all documents with IDs starting with a specific prefix.
56
+ *
57
+ * This method loads the relevant chunk(s) and returns all matching documents.
58
+ * Useful for querying documents by type (e.g., all NAVIGATION_STRATEGY documents).
59
+ *
60
+ * @param prefix - Document ID prefix to match (e.g., "NAVIGATION_STRATEGY")
61
+ * @returns Array of all documents with IDs starting with the prefix
62
+ */
63
+ getAllDocumentsByPrefix(prefix: string): Promise<any[]>;
54
64
  /**
55
65
  * Query cards by ELO score, returning card IDs sorted by ELO
56
66
  */
@@ -135,12 +145,12 @@ declare class StaticCourseDB implements CourseDBInterface {
135
145
  }[]>;
136
146
  getCardEloData(cardIds: string[]): Promise<CourseElo[]>;
137
147
  updateCardElo(cardId: string, _elo: CourseElo): Promise<PouchDB.Core.Response>;
138
- getNewCards(limit?: number): Promise<StudySessionNewItem[]>;
139
148
  getCardsCenteredAtELO(options: {
140
149
  limit: number;
141
150
  elo: 'user' | 'random' | number;
142
- }, filter?: (id: QualifiedCardID) => boolean): Promise<StudySessionNewItem[]>;
151
+ }, filter?: (id: QualifiedCardID) => boolean): Promise<StudySessionItem[]>;
143
152
  getAppliedTags(cardId: string): Promise<PouchDB.Query.Response<TagStub>>;
153
+ getAppliedTagsBatch(cardIds: string[]): Promise<Map<string, string[]>>;
144
154
  addTagToCard(_cardId: string, _tagId: string): Promise<PouchDB.Core.Response>;
145
155
  removeTagFromCard(_cardId: string, _tagId: string): Promise<PouchDB.Core.Response>;
146
156
  createTag(_tagName: string): Promise<PouchDB.Core.Response>;
@@ -152,11 +162,18 @@ declare class StaticCourseDB implements CourseDBInterface {
152
162
  }, _elo?: CourseElo): Promise<DataLayerResult>;
153
163
  removeCard(_cardId: string): Promise<PouchDB.Core.Response>;
154
164
  getInexperiencedCards(): Promise<any[]>;
155
- getNavigationStrategy(_id: string): Promise<ContentNavigationStrategyData>;
165
+ getNavigationStrategy(id: string): Promise<ContentNavigationStrategyData>;
156
166
  getAllNavigationStrategies(): Promise<ContentNavigationStrategyData[]>;
157
167
  addNavigationStrategy(_data: ContentNavigationStrategyData): Promise<void>;
158
168
  updateNavigationStrategy(_id: string, _data: ContentNavigationStrategyData): Promise<void>;
159
- getPendingReviews(): Promise<(StudySessionReviewItem & ScheduledCard)[]>;
169
+ /**
170
+ * Create a ContentNavigator for this course.
171
+ *
172
+ * Loads navigation strategy documents from static data and uses PipelineAssembler
173
+ * to build a Pipeline. Falls back to default pipeline if no strategies found.
174
+ */
175
+ createNavigator(user: UserDBInterface): Promise<ContentNavigator>;
176
+ getWeightedCards(limit: number): Promise<WeightedCard[]>;
160
177
  /**
161
178
  * Get attachment URL for a document and attachment name
162
179
  * Internal helper method for static attachment serving
@@ -1,8 +1,8 @@
1
- import { U as UserDBInterface, C as CourseDBInterface, b as CoursesDBInterface, c as ClassroomDBInterface, A as AdminDBInterface, a as UserDBReader, d as CourseInfo, S as StudySessionNewItem, D as DataLayerResult, e as ContentNavigationStrategyData, f as StudySessionReviewItem, g as ScheduledCard } from '../../classroomDB-BgfrVb8d.js';
2
- import { D as DataLayerProvider } from '../../dataLayerProvider-CZxC9GtB.js';
3
- import { S as StaticCourseManifest } from '../../types-CewsN87z.js';
1
+ import { U as UserDBInterface, C as CourseDBInterface, b as CoursesDBInterface, c as ClassroomDBInterface, A as AdminDBInterface, a as UserDBReader, d as CourseInfo, S as StudySessionItem, D as DataLayerResult, e as ContentNavigationStrategyData, f as ContentNavigator, W as WeightedCard } from '../../contentSource-BP9hznNV.js';
2
+ import { D as DataLayerProvider } from '../../dataLayerProvider-MDTxXq2l.js';
3
+ import { S as StaticCourseManifest } from '../../types-DQaXnuoc.js';
4
4
  import { CourseConfig, CourseElo, DataShape } from '@vue-skuilder/common';
5
- import { S as SkuilderCourseData, Q as QualifiedCardID, T as TagStub, a as Tag } from '../../types-legacy-6ettoclI.js';
5
+ import { S as SkuilderCourseData, Q as QualifiedCardID, T as TagStub, a as Tag } from '../../types-legacy-DDY4N-Uq.js';
6
6
  import { S as SyncStrategy, A as AccountCreationResult, a as AuthenticationResult } from '../../SyncStrategy-CyATpyLQ.js';
7
7
  import 'moment';
8
8
 
@@ -51,6 +51,16 @@ declare class StaticDataUnpacker {
51
51
  * Get a document by ID, loading from appropriate chunk if needed
52
52
  */
53
53
  getDocument<T = any>(id: string): Promise<T>;
54
+ /**
55
+ * Get all documents with IDs starting with a specific prefix.
56
+ *
57
+ * This method loads the relevant chunk(s) and returns all matching documents.
58
+ * Useful for querying documents by type (e.g., all NAVIGATION_STRATEGY documents).
59
+ *
60
+ * @param prefix - Document ID prefix to match (e.g., "NAVIGATION_STRATEGY")
61
+ * @returns Array of all documents with IDs starting with the prefix
62
+ */
63
+ getAllDocumentsByPrefix(prefix: string): Promise<any[]>;
54
64
  /**
55
65
  * Query cards by ELO score, returning card IDs sorted by ELO
56
66
  */
@@ -135,12 +145,12 @@ declare class StaticCourseDB implements CourseDBInterface {
135
145
  }[]>;
136
146
  getCardEloData(cardIds: string[]): Promise<CourseElo[]>;
137
147
  updateCardElo(cardId: string, _elo: CourseElo): Promise<PouchDB.Core.Response>;
138
- getNewCards(limit?: number): Promise<StudySessionNewItem[]>;
139
148
  getCardsCenteredAtELO(options: {
140
149
  limit: number;
141
150
  elo: 'user' | 'random' | number;
142
- }, filter?: (id: QualifiedCardID) => boolean): Promise<StudySessionNewItem[]>;
151
+ }, filter?: (id: QualifiedCardID) => boolean): Promise<StudySessionItem[]>;
143
152
  getAppliedTags(cardId: string): Promise<PouchDB.Query.Response<TagStub>>;
153
+ getAppliedTagsBatch(cardIds: string[]): Promise<Map<string, string[]>>;
144
154
  addTagToCard(_cardId: string, _tagId: string): Promise<PouchDB.Core.Response>;
145
155
  removeTagFromCard(_cardId: string, _tagId: string): Promise<PouchDB.Core.Response>;
146
156
  createTag(_tagName: string): Promise<PouchDB.Core.Response>;
@@ -152,11 +162,18 @@ declare class StaticCourseDB implements CourseDBInterface {
152
162
  }, _elo?: CourseElo): Promise<DataLayerResult>;
153
163
  removeCard(_cardId: string): Promise<PouchDB.Core.Response>;
154
164
  getInexperiencedCards(): Promise<any[]>;
155
- getNavigationStrategy(_id: string): Promise<ContentNavigationStrategyData>;
165
+ getNavigationStrategy(id: string): Promise<ContentNavigationStrategyData>;
156
166
  getAllNavigationStrategies(): Promise<ContentNavigationStrategyData[]>;
157
167
  addNavigationStrategy(_data: ContentNavigationStrategyData): Promise<void>;
158
168
  updateNavigationStrategy(_id: string, _data: ContentNavigationStrategyData): Promise<void>;
159
- getPendingReviews(): Promise<(StudySessionReviewItem & ScheduledCard)[]>;
169
+ /**
170
+ * Create a ContentNavigator for this course.
171
+ *
172
+ * Loads navigation strategy documents from static data and uses PipelineAssembler
173
+ * to build a Pipeline. Falls back to default pipeline if no strategies found.
174
+ */
175
+ createNavigator(user: UserDBInterface): Promise<ContentNavigator>;
176
+ getWeightedCards(limit: number): Promise<WeightedCard[]>;
160
177
  /**
161
178
  * Get attachment URL for a document and attachment name
162
179
  * Internal helper method for static attachment serving