@vue-skuilder/db 0.1.32-e → 0.1.32-f
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.
- package/dist/core/index.d.cts +20 -3
- package/dist/core/index.d.ts +20 -3
- package/dist/core/index.js +461 -30
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.mjs +461 -30
- package/dist/core/index.mjs.map +1 -1
- package/dist/impl/couch/index.js +461 -30
- package/dist/impl/couch/index.js.map +1 -1
- package/dist/impl/couch/index.mjs +461 -30
- package/dist/impl/couch/index.mjs.map +1 -1
- package/dist/impl/static/index.js +457 -28
- package/dist/impl/static/index.js.map +1 -1
- package/dist/impl/static/index.mjs +457 -28
- package/dist/impl/static/index.mjs.map +1 -1
- package/dist/index.d.cts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +467 -32
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +467 -32
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
- package/src/core/navigators/Pipeline.ts +104 -13
- package/src/core/navigators/PipelineDebugger.ts +296 -3
- package/src/core/navigators/generators/CompositeGenerator.ts +4 -1
- package/src/core/navigators/generators/prescribed.ts +246 -22
- package/src/impl/couch/courseDB.ts +3 -2
- package/src/study/SessionController.ts +1 -0
- package/src/study/services/CardHydrationService.ts +6 -1
- package/tests/core/navigators/CompositeGenerator.test.ts +14 -50
- package/tests/core/navigators/Pipeline.test.ts +13 -12
|
@@ -2,6 +2,7 @@ import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
|
2
2
|
import { Pipeline } from '../../../src/core/navigators/Pipeline';
|
|
3
3
|
import { WeightedCard, ContentNavigator } from '../../../src/core/navigators/index';
|
|
4
4
|
import { CardFilter, FilterContext } from '../../../src/core/navigators/filters/types';
|
|
5
|
+
import type { GeneratorResult } from '../../../src/core/navigators/generators/types';
|
|
5
6
|
|
|
6
7
|
import { CourseDBInterface } from '../../../src/core/interfaces/courseDB';
|
|
7
8
|
import { UserDBInterface } from '../../../src/core/interfaces/userDB';
|
|
@@ -22,8 +23,8 @@ class MockGenerator extends ContentNavigator {
|
|
|
22
23
|
this.cards = cards;
|
|
23
24
|
}
|
|
24
25
|
|
|
25
|
-
async getWeightedCards(limit: number): Promise<
|
|
26
|
-
return this.cards.slice(0, limit);
|
|
26
|
+
async getWeightedCards(limit: number): Promise<GeneratorResult> {
|
|
27
|
+
return { cards: this.cards.slice(0, limit) };
|
|
27
28
|
}
|
|
28
29
|
}
|
|
29
30
|
|
|
@@ -143,7 +144,7 @@ describe('Pipeline', () => {
|
|
|
143
144
|
const generator = new MockGenerator(cards);
|
|
144
145
|
const pipeline = new Pipeline(generator, [], mockUser, mockCourse);
|
|
145
146
|
|
|
146
|
-
const result = await pipeline.getWeightedCards(10);
|
|
147
|
+
const { cards: result } = await pipeline.getWeightedCards(10);
|
|
147
148
|
|
|
148
149
|
expect(result).toHaveLength(2);
|
|
149
150
|
expect(result[0].cardId).toBe('card-1');
|
|
@@ -155,7 +156,7 @@ describe('Pipeline', () => {
|
|
|
155
156
|
const generator = new MockGenerator(cards);
|
|
156
157
|
const pipeline = new Pipeline(generator, [], mockUser, mockCourse);
|
|
157
158
|
|
|
158
|
-
const result = await pipeline.getWeightedCards(10);
|
|
159
|
+
const { cards: result } = await pipeline.getWeightedCards(10);
|
|
159
160
|
|
|
160
161
|
expect(result[0].cardId).toBe('high');
|
|
161
162
|
expect(result[1].cardId).toBe('mid');
|
|
@@ -172,7 +173,7 @@ describe('Pipeline', () => {
|
|
|
172
173
|
const generator = new MockGenerator(cards);
|
|
173
174
|
const pipeline = new Pipeline(generator, [], mockUser, mockCourse);
|
|
174
175
|
|
|
175
|
-
const result = await pipeline.getWeightedCards(2);
|
|
176
|
+
const { cards: result } = await pipeline.getWeightedCards(2);
|
|
176
177
|
|
|
177
178
|
expect(result).toHaveLength(2);
|
|
178
179
|
expect(result[0].cardId).toBe('card-1');
|
|
@@ -183,7 +184,7 @@ describe('Pipeline', () => {
|
|
|
183
184
|
const generator = new MockGenerator([]);
|
|
184
185
|
const pipeline = new Pipeline(generator, [], mockUser, mockCourse);
|
|
185
186
|
|
|
186
|
-
const result = await pipeline.getWeightedCards(10);
|
|
187
|
+
const { cards: result } = await pipeline.getWeightedCards(10);
|
|
187
188
|
|
|
188
189
|
expect(result).toHaveLength(0);
|
|
189
190
|
});
|
|
@@ -196,7 +197,7 @@ describe('Pipeline', () => {
|
|
|
196
197
|
const filter = createMultiplierFilter('Half', 0.5);
|
|
197
198
|
const pipeline = new Pipeline(generator, [filter], mockUser, mockCourse);
|
|
198
199
|
|
|
199
|
-
const result = await pipeline.getWeightedCards(10);
|
|
200
|
+
const { cards: result } = await pipeline.getWeightedCards(10);
|
|
200
201
|
|
|
201
202
|
expect(result[0].score).toBe(0.5); // 1.0 * 0.5
|
|
202
203
|
expect(result[1].score).toBe(0.4); // 0.8 * 0.5
|
|
@@ -209,7 +210,7 @@ describe('Pipeline', () => {
|
|
|
209
210
|
const filter2 = createMultiplierFilter('Double', 2.0);
|
|
210
211
|
const pipeline = new Pipeline(generator, [filter1, filter2], mockUser, mockCourse);
|
|
211
212
|
|
|
212
|
-
const result = await pipeline.getWeightedCards(10);
|
|
213
|
+
const { cards: result } = await pipeline.getWeightedCards(10);
|
|
213
214
|
|
|
214
215
|
// 1.0 * 0.5 * 2.0 = 1.0
|
|
215
216
|
expect(result[0].score).toBe(1.0);
|
|
@@ -221,7 +222,7 @@ describe('Pipeline', () => {
|
|
|
221
222
|
const filter = createBlockingFilter('Blocker', ['block']);
|
|
222
223
|
const pipeline = new Pipeline(generator, [filter], mockUser, mockCourse);
|
|
223
224
|
|
|
224
|
-
const result = await pipeline.getWeightedCards(10);
|
|
225
|
+
const { cards: result } = await pipeline.getWeightedCards(10);
|
|
225
226
|
|
|
226
227
|
expect(result).toHaveLength(1);
|
|
227
228
|
expect(result[0].cardId).toBe('keep');
|
|
@@ -234,7 +235,7 @@ describe('Pipeline', () => {
|
|
|
234
235
|
const filter2 = createMultiplierFilter('Filter B', 0.8);
|
|
235
236
|
const pipeline = new Pipeline(generator, [filter1, filter2], mockUser, mockCourse);
|
|
236
237
|
|
|
237
|
-
const result = await pipeline.getWeightedCards(10);
|
|
238
|
+
const { cards: result } = await pipeline.getWeightedCards(10);
|
|
238
239
|
|
|
239
240
|
expect(result[0].provenance).toHaveLength(3); // generator + 2 filters
|
|
240
241
|
expect(result[0].provenance[0].strategyName).toBe('Test Generator');
|
|
@@ -253,12 +254,12 @@ describe('Pipeline', () => {
|
|
|
253
254
|
// Order: A then B
|
|
254
255
|
const generator1 = new MockGenerator([...cards]);
|
|
255
256
|
const pipeline1 = new Pipeline(generator1, [filterA, filterB], mockUser, mockCourse);
|
|
256
|
-
const result1 = await pipeline1.getWeightedCards(10);
|
|
257
|
+
const { cards: result1 } = await pipeline1.getWeightedCards(10);
|
|
257
258
|
|
|
258
259
|
// Order: B then A
|
|
259
260
|
const generator2 = new MockGenerator([...cards]);
|
|
260
261
|
const pipeline2 = new Pipeline(generator2, [filterB, filterA], mockUser, mockCourse);
|
|
261
|
-
const result2 = await pipeline2.getWeightedCards(10);
|
|
262
|
+
const { cards: result2 } = await pipeline2.getWeightedCards(10);
|
|
262
263
|
|
|
263
264
|
// Both should yield 1.0 * 0.5 * 0.8 = 0.4
|
|
264
265
|
expect(result1[0].score).toBeCloseTo(0.4);
|