@intellectif/lk-core 0.7.1 → 0.8.1
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/CHANGELOG.md +78 -0
- package/README.md +2 -0
- package/dist/{activity-DARHcrz_.d.cts → activity-CPtJUBek.d.cts} +65 -2
- package/dist/{activity-DARHcrz_.d.ts → activity-CPtJUBek.d.ts} +65 -2
- package/dist/{chunk-XL75ZZVM.js → chunk-2M76F32Y.js} +10 -6
- package/dist/chunk-2M76F32Y.js.map +1 -0
- package/dist/{chunk-AFIQQADJ.cjs → chunk-7ACNBDSF.cjs} +4 -4
- package/dist/{chunk-AFIQQADJ.cjs.map → chunk-7ACNBDSF.cjs.map} +1 -1
- package/dist/{chunk-5RE3ZRSA.cjs → chunk-FKH4YT5X.cjs} +134 -18
- package/dist/chunk-FKH4YT5X.cjs.map +1 -0
- package/dist/{chunk-7NIH5IL3.cjs → chunk-FVLKIL6W.cjs} +19 -15
- package/dist/chunk-FVLKIL6W.cjs.map +1 -0
- package/dist/{chunk-YCXIHFLG.js → chunk-HCOWSGEZ.js} +127 -11
- package/dist/chunk-HCOWSGEZ.js.map +1 -0
- package/dist/{chunk-NOBJYDOB.js → chunk-LNA33IK7.js} +2 -2
- package/dist/{chunk-2SQ75JTE.js → chunk-NHGXOOZ2.js} +2 -2
- package/dist/{chunk-MVZKEWZN.cjs → chunk-YJZY5TPY.cjs} +8 -8
- package/dist/{chunk-MVZKEWZN.cjs.map → chunk-YJZY5TPY.cjs.map} +1 -1
- package/dist/{index-BfLwCMXN.d.cts → index-BvrA8nIV.d.ts} +353 -9
- package/dist/{index-yrUw7NzZ.d.ts → index-gIN564mV.d.cts} +353 -9
- package/dist/index.cjs +177 -27
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +173 -5
- package/dist/index.d.ts +173 -5
- package/dist/index.js +157 -7
- package/dist/index.js.map +1 -1
- package/dist/schemas.cjs +9 -3
- package/dist/schemas.cjs.map +1 -1
- package/dist/schemas.d.cts +2 -2
- package/dist/schemas.d.ts +2 -2
- package/dist/schemas.js +8 -2
- package/dist/scoring.cjs +3 -3
- package/dist/scoring.d.cts +2 -2
- package/dist/scoring.d.ts +2 -2
- package/dist/scoring.js +2 -2
- package/dist/xapi.cjs +3 -3
- package/dist/xapi.d.cts +1 -1
- package/dist/xapi.d.ts +1 -1
- package/dist/xapi.js +2 -2
- package/package.json +2 -1
- package/dist/chunk-5RE3ZRSA.cjs.map +0 -1
- package/dist/chunk-7NIH5IL3.cjs.map +0 -1
- package/dist/chunk-XL75ZZVM.js.map +0 -1
- package/dist/chunk-YCXIHFLG.js.map +0 -1
- /package/dist/{chunk-NOBJYDOB.js.map → chunk-LNA33IK7.js.map} +0 -0
- /package/dist/{chunk-2SQ75JTE.js.map → chunk-NHGXOOZ2.js.map} +0 -0
package/dist/index.cjs
CHANGED
|
@@ -10,14 +10,14 @@
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
var
|
|
13
|
+
var _chunkYJZY5TPYcjs = require('./chunk-YJZY5TPY.cjs');
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
var
|
|
20
|
+
var _chunk7ACNBDSFcjs = require('./chunk-7ACNBDSF.cjs');
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
|
|
@@ -31,7 +31,7 @@ var _chunkAFIQQADJcjs = require('./chunk-AFIQQADJ.cjs');
|
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
|
|
34
|
-
var
|
|
34
|
+
var _chunkFVLKIL6Wcjs = require('./chunk-FVLKIL6W.cjs');
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
|
|
@@ -63,7 +63,11 @@ var _chunk7NIH5IL3cjs = require('./chunk-7NIH5IL3.cjs');
|
|
|
63
63
|
|
|
64
64
|
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
var _chunkFKH4YT5Xcjs = require('./chunk-FKH4YT5X.cjs');
|
|
67
71
|
|
|
68
72
|
// src/content-hash.ts
|
|
69
73
|
function canonicalJson(value, seen = /* @__PURE__ */ new Set()) {
|
|
@@ -228,6 +232,99 @@ function flattenSequence(entries, options = {}) {
|
|
|
228
232
|
return slots;
|
|
229
233
|
}
|
|
230
234
|
|
|
235
|
+
// src/media-budget.ts
|
|
236
|
+
function entryKeyOf(slotId) {
|
|
237
|
+
const dot = slotId.indexOf(".");
|
|
238
|
+
return dot === -1 ? slotId : slotId.slice(0, dot);
|
|
239
|
+
}
|
|
240
|
+
function slotMediaKey(slotId) {
|
|
241
|
+
return `slot:${slotId}`;
|
|
242
|
+
}
|
|
243
|
+
function stimulusMediaKey(slotId) {
|
|
244
|
+
return `stimulus:${entryKeyOf(slotId)}`;
|
|
245
|
+
}
|
|
246
|
+
function resolvePlaybackPolicy(media) {
|
|
247
|
+
const p = media.playback;
|
|
248
|
+
const budgeted = typeof _optionalChain([p, 'optionalAccess', _ => _.maxPlays]) === "number";
|
|
249
|
+
const seek = _nullishCoalesce(_optionalChain([p, 'optionalAccess', _2 => _2.seek]), () => ( (budgeted ? "none" : "allow")));
|
|
250
|
+
const rate = _nullishCoalesce(_optionalChain([p, 'optionalAccess', _3 => _3.rate]), () => ( "allow"));
|
|
251
|
+
const controls = _nullishCoalesce(_optionalChain([p, 'optionalAccess', _4 => _4.controls]), () => ( (budgeted || seek === "none" || rate === "fixed" ? "minimal" : "native")));
|
|
252
|
+
return {
|
|
253
|
+
controls,
|
|
254
|
+
maxPlays: budgeted ? _optionalChain([p, 'optionalAccess', _5 => _5.maxPlays]) : null,
|
|
255
|
+
seek,
|
|
256
|
+
rate,
|
|
257
|
+
nativeControlHints: _nullishCoalesce(_optionalChain([p, 'optionalAccess', _6 => _6.nativeControlHints]), () => ( []))
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
function planMediaBudgets(plan) {
|
|
261
|
+
const out = {};
|
|
262
|
+
for (const slot of plan.slots) {
|
|
263
|
+
for (const budget of _nullishCoalesce(slot.mediaBudgets, () => ( []))) {
|
|
264
|
+
out[budget.key] = budget.maxPlays;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return out;
|
|
268
|
+
}
|
|
269
|
+
function assertEntry(key, entry) {
|
|
270
|
+
if (entry === null || typeof entry !== "object" || !Number.isInteger(entry.plays) || entry.plays < 0) {
|
|
271
|
+
throw new Error(
|
|
272
|
+
`serializeMediaPlayLedger: play count for ${JSON.stringify(key)} is ${JSON.stringify(_optionalChain([entry, 'optionalAccess', _7 => _7.plays]))}. A count must be a non-negative integer; Number(a NULL column) is the usual cause.`
|
|
273
|
+
);
|
|
274
|
+
}
|
|
275
|
+
if (entry.at !== void 0 && (!Number.isFinite(entry.at) || entry.at < 0)) {
|
|
276
|
+
throw new Error(
|
|
277
|
+
`serializeMediaPlayLedger: position for ${JSON.stringify(key)} is ${JSON.stringify(entry.at)}. A position must be a finite number of seconds >= 0.`
|
|
278
|
+
);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
function serializeMediaPlayLedger(plan, entries, options = {}) {
|
|
282
|
+
if (entries === null || typeof entries !== "object") {
|
|
283
|
+
throw new Error("serializeMediaPlayLedger: entries must be an object keyed by media key.");
|
|
284
|
+
}
|
|
285
|
+
const budgets = planMediaBudgets(plan);
|
|
286
|
+
const out = {};
|
|
287
|
+
for (const key of Object.keys(entries)) {
|
|
288
|
+
if (!Object.hasOwn(budgets, key)) {
|
|
289
|
+
throw new Error(
|
|
290
|
+
`serializeMediaPlayLedger: media play recorded against a recording the plan does not budget: ${JSON.stringify(key)}. Keys come from slotMediaKey() / stimulusMediaKey(); a key that belongs to no budgeted media means the client and the plan disagree about which paper this is.`
|
|
291
|
+
);
|
|
292
|
+
}
|
|
293
|
+
const entry = entries[key];
|
|
294
|
+
assertEntry(key, entry);
|
|
295
|
+
out[key] = { plays: entry.plays, ...entry.at !== void 0 ? { at: entry.at } : {} };
|
|
296
|
+
}
|
|
297
|
+
return {
|
|
298
|
+
ledgerVersion: "1.0",
|
|
299
|
+
planHash: plan.planHash,
|
|
300
|
+
entries: out,
|
|
301
|
+
...options.savedAt !== void 0 ? { savedAt: options.savedAt } : {}
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
function restoreMediaPlayLedger(plan, stored) {
|
|
305
|
+
if (stored === null || typeof stored !== "object") {
|
|
306
|
+
throw new Error("restoreMediaPlayLedger: the stored ledger is not an object.");
|
|
307
|
+
}
|
|
308
|
+
if (stored.ledgerVersion !== "1.0") {
|
|
309
|
+
throw new Error(
|
|
310
|
+
`restoreMediaPlayLedger: unsupported ledgerVersion ${JSON.stringify(stored.ledgerVersion)}. This build understands "1.0"; a newer ledger must be migrated before it is restored.`
|
|
311
|
+
);
|
|
312
|
+
}
|
|
313
|
+
if (stored.entries === null || typeof stored.entries !== "object") {
|
|
314
|
+
throw new Error(
|
|
315
|
+
"restoreMediaPlayLedger: the ledger carries no entries object (a NULL column, or a partially written row)."
|
|
316
|
+
);
|
|
317
|
+
}
|
|
318
|
+
if (stored.planHash !== plan.planHash) {
|
|
319
|
+
throw new Error(
|
|
320
|
+
`restoreMediaPlayLedger: this ledger belongs to a different paper (ledger ${stored.planHash}, plan ${plan.planHash}). Restoring it would hold the learner to a play budget from an exam they never sat.`
|
|
321
|
+
);
|
|
322
|
+
}
|
|
323
|
+
return serializeMediaPlayLedger(plan, stored.entries, {
|
|
324
|
+
...stored.savedAt !== void 0 ? { savedAt: stored.savedAt } : {}
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
|
|
231
328
|
// src/attempt-plan.ts
|
|
232
329
|
function contentOf(activity) {
|
|
233
330
|
if (!Object.hasOwn(activity, "slotKey")) {
|
|
@@ -236,12 +333,50 @@ function contentOf(activity) {
|
|
|
236
333
|
const { slotKey: _slotKey, ...content } = activity;
|
|
237
334
|
return content;
|
|
238
335
|
}
|
|
336
|
+
function mediaBudgetsOf(slot) {
|
|
337
|
+
const budgets = [];
|
|
338
|
+
const own = slot.activity.media;
|
|
339
|
+
if (own !== void 0) {
|
|
340
|
+
const maxPlays = resolvePlaybackPolicy(own).maxPlays;
|
|
341
|
+
if (maxPlays !== null) {
|
|
342
|
+
budgets.push({ key: slotMediaKey(slot.slotId), maxPlays });
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
const stimulusMedia = _optionalChain([slot, 'access', _8 => _8.group, 'optionalAccess', _9 => _9.stimulus, 'access', _10 => _10.media]);
|
|
346
|
+
if (stimulusMedia !== void 0) {
|
|
347
|
+
const maxPlays = resolvePlaybackPolicy(stimulusMedia).maxPlays;
|
|
348
|
+
if (maxPlays !== null) {
|
|
349
|
+
budgets.push({ key: stimulusMediaKey(slot.slotId), maxPlays });
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
return budgets.length > 0 ? budgets : void 0;
|
|
353
|
+
}
|
|
354
|
+
function assertNoSplitBudgets(slots) {
|
|
355
|
+
const keysByUrl = /* @__PURE__ */ new Map();
|
|
356
|
+
for (const slot of slots) {
|
|
357
|
+
const own = slot.activity.media;
|
|
358
|
+
if (own === void 0 || resolvePlaybackPolicy(own).maxPlays === null) {
|
|
359
|
+
continue;
|
|
360
|
+
}
|
|
361
|
+
const keys = _nullishCoalesce(keysByUrl.get(own.url), () => ( []));
|
|
362
|
+
keys.push(slotMediaKey(slot.slotId));
|
|
363
|
+
keysByUrl.set(own.url, keys);
|
|
364
|
+
}
|
|
365
|
+
for (const [url, keys] of keysByUrl) {
|
|
366
|
+
if (keys.length > 1) {
|
|
367
|
+
throw new Error(
|
|
368
|
+
`planAttempt: media ${JSON.stringify(url)} is budgeted under ${keys.length} separate keys (${keys.join(", ")}), so one recording grants ${keys.length} \xD7 maxPlays. Put the questions that share a recording in an item group \u2014 a group's stimulus is one recording with one budget.`
|
|
369
|
+
);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
239
373
|
function planSlot(slot, points) {
|
|
240
374
|
if (!Number.isFinite(points) || points < 0) {
|
|
241
375
|
throw new Error(
|
|
242
376
|
`planAttempt: slot "${slot.slotId}" resolved to ${String(points)} points. Points must be a finite, non-negative number, or the paper has no defensible total.`
|
|
243
377
|
);
|
|
244
378
|
}
|
|
379
|
+
const mediaBudgets = mediaBudgetsOf(slot);
|
|
245
380
|
return {
|
|
246
381
|
slotId: slot.slotId,
|
|
247
382
|
index: slot.index,
|
|
@@ -255,7 +390,8 @@ function planSlot(slot, points) {
|
|
|
255
390
|
...slot.group.title !== void 0 ? { title: slot.group.title } : {},
|
|
256
391
|
stimulusHash: contentHash(slot.group.stimulus)
|
|
257
392
|
}
|
|
258
|
-
} : {}
|
|
393
|
+
} : {},
|
|
394
|
+
...mediaBudgets !== void 0 ? { mediaBudgets } : {}
|
|
259
395
|
};
|
|
260
396
|
}
|
|
261
397
|
function planAttempt(entries, options = {}) {
|
|
@@ -264,7 +400,8 @@ function planAttempt(entries, options = {}) {
|
|
|
264
400
|
...shuffleEntries !== void 0 ? { shuffleEntries } : {},
|
|
265
401
|
...seed !== void 0 ? { seed } : {}
|
|
266
402
|
});
|
|
267
|
-
|
|
403
|
+
assertNoSplitBudgets(slots);
|
|
404
|
+
const planned = slots.map((slot) => planSlot(slot, _nullishCoalesce(_optionalChain([points, 'optionalCall', _11 => _11(slot)]), () => ( 1))));
|
|
268
405
|
const totalPoints = planned.reduce((sum, slot) => sum + slot.points, 0);
|
|
269
406
|
return {
|
|
270
407
|
planVersion: "1.0",
|
|
@@ -295,7 +432,7 @@ function verifyAttemptPlan(plan, current) {
|
|
|
295
432
|
if (now.contentHash !== slot.contentHash) {
|
|
296
433
|
changedSlotIds.push(slot.slotId);
|
|
297
434
|
}
|
|
298
|
-
if (_optionalChain([now, 'access',
|
|
435
|
+
if (_optionalChain([now, 'access', _12 => _12.group, 'optionalAccess', _13 => _13.stimulusHash]) !== _optionalChain([slot, 'access', _14 => _14.group, 'optionalAccess', _15 => _15.stimulusHash])) {
|
|
299
436
|
changedStimulusSlotIds.push(slot.slotId);
|
|
300
437
|
}
|
|
301
438
|
if (now.points !== slot.points) {
|
|
@@ -455,6 +592,9 @@ function keepField(sensitivity, reveal) {
|
|
|
455
592
|
}
|
|
456
593
|
return sensitivity === "answer-key" && reveal === "after-submit";
|
|
457
594
|
}
|
|
595
|
+
function isEmptyObject(value) {
|
|
596
|
+
return typeof value === "object" && value !== null && !Array.isArray(value) && Object.keys(value).length === 0;
|
|
597
|
+
}
|
|
458
598
|
function redactValue(value, policy, reveal) {
|
|
459
599
|
if (Array.isArray(value)) {
|
|
460
600
|
return value.map((element) => redactValue(element, policy, reveal));
|
|
@@ -479,7 +619,7 @@ function redactValue(value, policy, reveal) {
|
|
|
479
619
|
continue;
|
|
480
620
|
}
|
|
481
621
|
const nested = redactValue(fieldValue, classification, reveal);
|
|
482
|
-
if (nested !== void 0) {
|
|
622
|
+
if (nested !== void 0 && !isEmptyObject(nested)) {
|
|
483
623
|
output[key] = nested;
|
|
484
624
|
}
|
|
485
625
|
}
|
|
@@ -487,9 +627,9 @@ function redactValue(value, policy, reveal) {
|
|
|
487
627
|
}
|
|
488
628
|
function redact(data, options = {}) {
|
|
489
629
|
const reveal = _nullishCoalesce(options.reveal, () => ( "none"));
|
|
490
|
-
const descriptor =
|
|
630
|
+
const descriptor = _chunkFKH4YT5Xcjs.getActivityTypeDescriptor.call(void 0, data.type);
|
|
491
631
|
if (descriptor === void 0) {
|
|
492
|
-
throw new (0,
|
|
632
|
+
throw new (0, _chunkFKH4YT5Xcjs.UnknownActivityTypeError)(String(data.type));
|
|
493
633
|
}
|
|
494
634
|
if (descriptor.fieldPolicy === void 0) {
|
|
495
635
|
throw new Error(
|
|
@@ -502,7 +642,7 @@ function redact(data, options = {}) {
|
|
|
502
642
|
if (reveal === "none" && descriptor.redactedSchema !== void 0) {
|
|
503
643
|
const parsed = descriptor.redactedSchema.safeParse(result);
|
|
504
644
|
if (!parsed.success) {
|
|
505
|
-
throw new (0,
|
|
645
|
+
throw new (0, _chunkFKH4YT5Xcjs.ActivitySchemaError)(
|
|
506
646
|
descriptor.type,
|
|
507
647
|
parsed.error.issues.map((issue) => ({
|
|
508
648
|
path: issue.path.map(String),
|
|
@@ -516,13 +656,13 @@ function redact(data, options = {}) {
|
|
|
516
656
|
}
|
|
517
657
|
function assertRedacted(data) {
|
|
518
658
|
if (typeof data !== "object" || data === null) {
|
|
519
|
-
throw new (0,
|
|
659
|
+
throw new (0, _chunkFKH4YT5Xcjs.ActivitySchemaError)("unknown", [
|
|
520
660
|
{ path: [], message: "Redacted activity data must be an object.", code: "invalid_type" }
|
|
521
661
|
]);
|
|
522
662
|
}
|
|
523
663
|
const candidate = data;
|
|
524
664
|
if (candidate.redacted !== true) {
|
|
525
|
-
throw new (0,
|
|
665
|
+
throw new (0, _chunkFKH4YT5Xcjs.ActivitySchemaError)(String(_nullishCoalesce(candidate.type, () => ( "unknown"))), [
|
|
526
666
|
{
|
|
527
667
|
path: ["redacted"],
|
|
528
668
|
message: "Missing redacted marker \u2014 this payload is not a redact() projection.",
|
|
@@ -531,12 +671,12 @@ function assertRedacted(data) {
|
|
|
531
671
|
]);
|
|
532
672
|
}
|
|
533
673
|
const type = typeof candidate.type === "string" ? candidate.type : "";
|
|
534
|
-
const descriptor =
|
|
674
|
+
const descriptor = _chunkFKH4YT5Xcjs.getActivityTypeDescriptor.call(void 0, type);
|
|
535
675
|
if (descriptor === void 0) {
|
|
536
|
-
throw new (0,
|
|
676
|
+
throw new (0, _chunkFKH4YT5Xcjs.UnknownActivityTypeError)(type);
|
|
537
677
|
}
|
|
538
678
|
if (descriptor.redactedSchema === void 0) {
|
|
539
|
-
throw new (0,
|
|
679
|
+
throw new (0, _chunkFKH4YT5Xcjs.ActivitySchemaError)(descriptor.type, [
|
|
540
680
|
{
|
|
541
681
|
path: [],
|
|
542
682
|
message: `Activity type "${descriptor.type}" registers no redactedSchema; assertRedacted cannot prove this payload is learner-safe.`,
|
|
@@ -546,7 +686,7 @@ function assertRedacted(data) {
|
|
|
546
686
|
}
|
|
547
687
|
const parsed = descriptor.redactedSchema.safeParse(candidate);
|
|
548
688
|
if (!parsed.success) {
|
|
549
|
-
throw new (0,
|
|
689
|
+
throw new (0, _chunkFKH4YT5Xcjs.ActivitySchemaError)(
|
|
550
690
|
descriptor.type,
|
|
551
691
|
parsed.error.issues.map((issue) => ({
|
|
552
692
|
path: issue.path.map(String),
|
|
@@ -562,7 +702,7 @@ var STIMULUS_FIELD_POLICY = {
|
|
|
562
702
|
title: "public",
|
|
563
703
|
body: "public",
|
|
564
704
|
bodyHtml: "public",
|
|
565
|
-
media:
|
|
705
|
+
media: _chunkFKH4YT5Xcjs.MEDIA_FIELD_POLICY,
|
|
566
706
|
locale: "public",
|
|
567
707
|
attribution: "public",
|
|
568
708
|
transcript: "author-only"
|
|
@@ -588,9 +728,9 @@ function redactItemGroup(group, options = {}) {
|
|
|
588
728
|
redacted: true
|
|
589
729
|
};
|
|
590
730
|
if (reveal === "none") {
|
|
591
|
-
const parsed =
|
|
731
|
+
const parsed = _chunkFVLKIL6Wcjs.RedactedItemGroupSchema.safeParse(result);
|
|
592
732
|
if (!parsed.success) {
|
|
593
|
-
throw new (0,
|
|
733
|
+
throw new (0, _chunkFKH4YT5Xcjs.ActivitySchemaError)(
|
|
594
734
|
"item-group",
|
|
595
735
|
parsed.error.issues.map((issue) => ({
|
|
596
736
|
path: issue.path.map(String),
|
|
@@ -604,13 +744,13 @@ function redactItemGroup(group, options = {}) {
|
|
|
604
744
|
}
|
|
605
745
|
function assertRedactedItemGroup(data) {
|
|
606
746
|
if (typeof data !== "object" || data === null) {
|
|
607
|
-
throw new (0,
|
|
747
|
+
throw new (0, _chunkFKH4YT5Xcjs.ActivitySchemaError)("item-group", [
|
|
608
748
|
{ path: [], message: "Redacted item group must be an object.", code: "invalid_type" }
|
|
609
749
|
]);
|
|
610
750
|
}
|
|
611
751
|
const candidate = data;
|
|
612
752
|
if (candidate.redacted !== true) {
|
|
613
|
-
throw new (0,
|
|
753
|
+
throw new (0, _chunkFKH4YT5Xcjs.ActivitySchemaError)("item-group", [
|
|
614
754
|
{
|
|
615
755
|
path: ["redacted"],
|
|
616
756
|
message: "Missing redacted marker \u2014 this payload is not a redactItemGroup() projection.",
|
|
@@ -618,9 +758,9 @@ function assertRedactedItemGroup(data) {
|
|
|
618
758
|
}
|
|
619
759
|
]);
|
|
620
760
|
}
|
|
621
|
-
const parsed =
|
|
761
|
+
const parsed = _chunkFVLKIL6Wcjs.RedactedItemGroupSchema.safeParse(candidate);
|
|
622
762
|
if (!parsed.success) {
|
|
623
|
-
throw new (0,
|
|
763
|
+
throw new (0, _chunkFKH4YT5Xcjs.ActivitySchemaError)(
|
|
624
764
|
"item-group",
|
|
625
765
|
parsed.error.issues.map((issue) => ({
|
|
626
766
|
path: issue.path.map(String),
|
|
@@ -633,8 +773,8 @@ function assertRedactedItemGroup(data) {
|
|
|
633
773
|
try {
|
|
634
774
|
assertRedacted(item);
|
|
635
775
|
} catch (error) {
|
|
636
|
-
if (error instanceof
|
|
637
|
-
throw new (0,
|
|
776
|
+
if (error instanceof _chunkFKH4YT5Xcjs.ActivitySchemaError) {
|
|
777
|
+
throw new (0, _chunkFKH4YT5Xcjs.ActivitySchemaError)(
|
|
638
778
|
"item-group",
|
|
639
779
|
error.errors.map((issue) => ({
|
|
640
780
|
...issue,
|
|
@@ -722,5 +862,15 @@ function assertRedactedItemGroup(data) {
|
|
|
722
862
|
|
|
723
863
|
|
|
724
864
|
|
|
725
|
-
|
|
865
|
+
|
|
866
|
+
|
|
867
|
+
|
|
868
|
+
|
|
869
|
+
|
|
870
|
+
|
|
871
|
+
|
|
872
|
+
|
|
873
|
+
|
|
874
|
+
|
|
875
|
+
exports.ActivitySchemaError = _chunkFKH4YT5Xcjs.ActivitySchemaError; exports.BlankConfigSchema = _chunkFKH4YT5Xcjs.BlankConfigSchema; exports.DEFAULT_PASS_THRESHOLD = _chunkYJZY5TPYcjs.DEFAULT_PASS_THRESHOLD; exports.DeferredScoringError = _chunkFKH4YT5Xcjs.DeferredScoringError; exports.FeedbackSchema = _chunkFKH4YT5Xcjs.FeedbackSchema; exports.FillInTheBlanksDataSchema = _chunkFKH4YT5Xcjs.FillInTheBlanksDataSchema; exports.ItemGroupSchema = _chunkFVLKIL6Wcjs.ItemGroupSchema; exports.MediaPlaybackSchema = _chunkFKH4YT5Xcjs.MediaPlaybackSchema; exports.MediaSchema = _chunkFKH4YT5Xcjs.MediaSchema; exports.MediaUrlSchema = _chunkFKH4YT5Xcjs.MediaUrlSchema; exports.MultipleChoiceDataSchema = _chunkFKH4YT5Xcjs.MultipleChoiceDataSchema; exports.MultipleChoiceOptionSchema = _chunkFKH4YT5Xcjs.MultipleChoiceOptionSchema; exports.NativeControlHintSchema = _chunkFKH4YT5Xcjs.NativeControlHintSchema; exports.RedactedBlankConfigSchema = _chunkFKH4YT5Xcjs.RedactedBlankConfigSchema; exports.RedactedFillInTheBlanksDataSchema = _chunkFKH4YT5Xcjs.RedactedFillInTheBlanksDataSchema; exports.RedactedItemGroupSchema = _chunkFVLKIL6Wcjs.RedactedItemGroupSchema; exports.RedactedMediaSchema = _chunkFKH4YT5Xcjs.RedactedMediaSchema; exports.RedactedMultipleChoiceDataSchema = _chunkFKH4YT5Xcjs.RedactedMultipleChoiceDataSchema; exports.RedactedMultipleChoiceOptionSchema = _chunkFKH4YT5Xcjs.RedactedMultipleChoiceOptionSchema; exports.RedactedScoringError = _chunkFKH4YT5Xcjs.RedactedScoringError; exports.RedactedStimulusSchema = _chunkFVLKIL6Wcjs.RedactedStimulusSchema; exports.RedactedWrittenResponseDataSchema = _chunkFKH4YT5Xcjs.RedactedWrittenResponseDataSchema; exports.StimulusSchema = _chunkFVLKIL6Wcjs.StimulusSchema; exports.TextMatchPolicySchema = _chunkFKH4YT5Xcjs.TextMatchPolicySchema; exports.UnknownActivityTypeError = _chunkFKH4YT5Xcjs.UnknownActivityTypeError; exports.WrittenResponseDataSchema = _chunkFKH4YT5Xcjs.WrittenResponseDataSchema; exports.WrittenResponseRubricCriterionSchema = _chunkFKH4YT5Xcjs.WrittenResponseRubricCriterionSchema; exports.WrittenResponseRubricSchema = _chunkFKH4YT5Xcjs.WrittenResponseRubricSchema; exports.XAPIVerb = _chunk7ACNBDSFcjs.XAPIVerb; exports.XAPI_VERB_DISPLAY = _chunk7ACNBDSFcjs.XAPI_VERB_DISPLAY; exports.assertRedacted = assertRedacted; exports.assertRedactedItemGroup = assertRedactedItemGroup; exports.canonicalJson = canonicalJson; exports.classifyBand = _chunkYJZY5TPYcjs.classifyBand; exports.composeAssessmentScore = _chunkYJZY5TPYcjs.composeAssessmentScore; exports.computePassThreshold = _chunkYJZY5TPYcjs.computePassThreshold; exports.contentHash = contentHash; exports.countWords = _chunkFKH4YT5Xcjs.countWords; exports.defineActivityType = _chunkFKH4YT5Xcjs.defineActivityType; exports.diffResponses = diffResponses; exports.entryKeyOf = entryKeyOf; exports.evaluate = _chunkYJZY5TPYcjs.evaluate; exports.fillInTheBlanksJsonSchema = _chunkFVLKIL6Wcjs.fillInTheBlanksJsonSchema; exports.fillInTheBlanksType = _chunkFKH4YT5Xcjs.fillInTheBlanksType; exports.fingerprint = fingerprint; exports.flattenSequence = flattenSequence; exports.getActivityTypeDescriptor = _chunkFKH4YT5Xcjs.getActivityTypeDescriptor; exports.gradeFromRubric = _chunkYJZY5TPYcjs.gradeFromRubric; exports.gte = _chunkYJZY5TPYcjs.gte; exports.hasGrade = _chunkYJZY5TPYcjs.hasGrade; exports.hashSeed = hashSeed; exports.isItemGroup = isItemGroup; exports.itemGroupJsonSchema = _chunkFVLKIL6Wcjs.itemGroupJsonSchema; exports.jsonSchemaFor = _chunkFVLKIL6Wcjs.jsonSchemaFor; exports.levenshteinDistance = _chunkFKH4YT5Xcjs.levenshteinDistance; exports.matchText = _chunkFKH4YT5Xcjs.matchText; exports.multipleChoiceJsonSchema = _chunkFVLKIL6Wcjs.multipleChoiceJsonSchema; exports.multipleChoiceType = _chunkFKH4YT5Xcjs.multipleChoiceType; exports.outcomeFromGrade = _chunkYJZY5TPYcjs.outcomeFromGrade; exports.planAttempt = planAttempt; exports.planMediaBudgets = planMediaBudgets; exports.redact = redact; exports.redactItemGroup = redactItemGroup; exports.registerActivityType = _chunkFKH4YT5Xcjs.registerActivityType; exports.registeredActivityTypes = _chunkFKH4YT5Xcjs.registeredActivityTypes; exports.resolvePlaybackPolicy = resolvePlaybackPolicy; exports.restoreAttemptState = restoreAttemptState; exports.restoreMediaPlayLedger = restoreMediaPlayLedger; exports.roundGrade = _chunkYJZY5TPYcjs.roundGrade; exports.score = _chunkYJZY5TPYcjs.score; exports.scoredItemsFromPlan = scoredItemsFromPlan; exports.seededShuffle = seededShuffle; exports.serializeAttemptState = serializeAttemptState; exports.serializeMediaPlayLedger = serializeMediaPlayLedger; exports.slotMediaKey = slotMediaKey; exports.stimulusJsonSchema = _chunkFVLKIL6Wcjs.stimulusJsonSchema; exports.stimulusMediaKey = stimulusMediaKey; exports.validateActivity = _chunkFVLKIL6Wcjs.validateActivity; exports.validateItemGroup = _chunkFVLKIL6Wcjs.validateItemGroup; exports.validateXAPIStatement = _chunk7ACNBDSFcjs.validateXAPIStatement; exports.verifyAttemptPlan = verifyAttemptPlan; exports.writtenResponseJsonSchema = _chunkFVLKIL6Wcjs.writtenResponseJsonSchema; exports.writtenResponseType = _chunkFKH4YT5Xcjs.writtenResponseType; exports.xAPIBuilder = _chunk7ACNBDSFcjs.xAPIBuilder; exports.xapiDefinitionFor = _chunk7ACNBDSFcjs.xapiDefinitionFor;
|
|
726
876
|
//# sourceMappingURL=index.cjs.map
|