@intellectif/lk-core 0.18.0 → 0.20.0
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 +62 -0
- package/README.md +3 -1
- package/dist/{activity-HH8dxN1v.d.cts → activity-f0bgZSTP.d.cts} +163 -141
- package/dist/{activity-HH8dxN1v.d.ts → activity-f0bgZSTP.d.ts} +163 -141
- package/dist/ai-check.cjs +283 -0
- package/dist/ai-check.cjs.map +1 -0
- package/dist/ai-check.d.cts +106 -0
- package/dist/ai-check.d.ts +106 -0
- package/dist/ai-check.js +283 -0
- package/dist/ai-check.js.map +1 -0
- package/dist/chunk-BIJCO2HM.js +443 -0
- package/dist/chunk-BIJCO2HM.js.map +1 -0
- package/dist/chunk-FVZJ4X3Y.cjs +443 -0
- package/dist/chunk-FVZJ4X3Y.cjs.map +1 -0
- package/dist/{index-DejnxQpK.d.cts → index-7S3-TLjT.d.cts} +1 -1
- package/dist/{index-BrBBUb1i.d.ts → index-BA9f2ydg.d.ts} +1 -1
- package/dist/index.cjs +165 -428
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +149 -5
- package/dist/index.d.ts +149 -5
- package/dist/index.js +167 -430
- package/dist/index.js.map +1 -1
- package/dist/schemas.d.cts +2 -2
- package/dist/schemas.d.ts +2 -2
- package/dist/scoring.d.cts +2 -2
- package/dist/scoring.d.ts +2 -2
- package/dist/xapi.d.cts +1 -1
- package/dist/xapi.d.ts +1 -1
- package/package.json +11 -1
package/dist/index.cjs
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
7
|
+
var _chunkEOFWSGLUcjs = require('./chunk-EOFWSGLU.cjs');
|
|
7
8
|
|
|
8
9
|
|
|
9
10
|
|
|
@@ -17,20 +18,19 @@
|
|
|
17
18
|
|
|
18
19
|
|
|
19
20
|
|
|
20
|
-
var _chunkCOBK2RUXcjs = require('./chunk-COBK2RUX.cjs');
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
var _chunkEOFWSGLUcjs = require('./chunk-EOFWSGLU.cjs');
|
|
28
27
|
|
|
29
28
|
|
|
30
29
|
|
|
31
30
|
|
|
32
31
|
|
|
33
32
|
|
|
33
|
+
var _chunk2CV6NU32cjs = require('./chunk-2CV6NU32.cjs');
|
|
34
34
|
|
|
35
35
|
|
|
36
36
|
|
|
@@ -45,12 +45,12 @@ var _chunkEOFWSGLUcjs = require('./chunk-EOFWSGLU.cjs');
|
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
|
|
48
|
+
var _chunkFVZJ4X3Ycjs = require('./chunk-FVZJ4X3Y.cjs');
|
|
48
49
|
|
|
49
50
|
|
|
50
51
|
|
|
51
52
|
|
|
52
53
|
|
|
53
|
-
var _chunk2CV6NU32cjs = require('./chunk-2CV6NU32.cjs');
|
|
54
54
|
|
|
55
55
|
|
|
56
56
|
|
|
@@ -64,6 +64,13 @@ var _chunk2CV6NU32cjs = require('./chunk-2CV6NU32.cjs');
|
|
|
64
64
|
|
|
65
65
|
|
|
66
66
|
|
|
67
|
+
var _chunkCOBK2RUXcjs = require('./chunk-COBK2RUX.cjs');
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
|
|
67
74
|
|
|
68
75
|
|
|
69
76
|
|
|
@@ -137,410 +144,13 @@ var _chunk2CV6NU32cjs = require('./chunk-2CV6NU32.cjs');
|
|
|
137
144
|
|
|
138
145
|
|
|
139
146
|
|
|
140
|
-
var _chunkD4TOPSHVcjs = require('./chunk-D4TOPSHV.cjs');
|
|
141
147
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
];
|
|
149
|
-
var AI_HINT_TYPES = [
|
|
150
|
-
"multiple-choice",
|
|
151
|
-
"fill-in-the-blanks",
|
|
152
|
-
"gap-select"
|
|
153
|
-
];
|
|
154
|
-
var AI_TEXT_MAX_LENGTH = 2e3;
|
|
155
|
-
function aiSupports(activityType, feature) {
|
|
156
|
-
const types = feature === "hint" ? AI_HINT_TYPES : AI_EXPLANATION_TYPES;
|
|
157
|
-
return types.includes(activityType);
|
|
158
|
-
}
|
|
159
|
-
function aiAllowedByContent(data, feature) {
|
|
160
|
-
const permissions = data.ai;
|
|
161
|
-
if (typeof permissions !== "object" || permissions === null) {
|
|
162
|
-
return true;
|
|
163
|
-
}
|
|
164
|
-
const key = feature === "hint" ? "hints" : "explanations";
|
|
165
|
-
return permissions[key] !== false;
|
|
166
|
-
}
|
|
167
|
-
function aiGradeOf(result) {
|
|
168
|
-
const ratio = result.maxScore > 0 ? result.score / result.maxScore : 0;
|
|
169
|
-
let category = "partly-correct";
|
|
170
|
-
if (ratio >= 1 - 1e-9) {
|
|
171
|
-
category = "correct";
|
|
172
|
-
} else if (ratio <= 1e-9) {
|
|
173
|
-
category = "incorrect";
|
|
174
|
-
}
|
|
175
|
-
return { score: result.score, maxScore: result.maxScore, passed: result.passed, category };
|
|
176
|
-
}
|
|
177
|
-
function placeholderOrder(passage) {
|
|
178
|
-
return [...passage.matchAll(_chunkD4TOPSHVcjs.PLACEHOLDER_RE)].map((match) => match[1]);
|
|
179
|
-
}
|
|
180
|
-
function numberedPassage(passage) {
|
|
181
|
-
let position = 0;
|
|
182
|
-
return passage.replace(_chunkD4TOPSHVcjs.PLACEHOLDER_RE, () => {
|
|
183
|
-
position += 1;
|
|
184
|
-
return `[${position}]`;
|
|
185
|
-
});
|
|
186
|
-
}
|
|
187
|
-
function isAnswerOption(detail, chosen) {
|
|
188
|
-
switch (detail.outcome) {
|
|
189
|
-
case "correct":
|
|
190
|
-
case "incorrect-omission":
|
|
191
|
-
return true;
|
|
192
|
-
case "incorrect":
|
|
193
|
-
case "correct-omission":
|
|
194
|
-
return false;
|
|
195
|
-
default:
|
|
196
|
-
return chosen ? detail.correct : !detail.correct;
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
var firstString = (value) => Array.isArray(value) ? value[0] : value;
|
|
200
|
-
var listOf = (value) => value === void 0 ? null : Array.isArray(value) ? [...value] : [value];
|
|
201
|
-
function emptyResponse(type) {
|
|
202
|
-
switch (type) {
|
|
203
|
-
case "multiple-choice":
|
|
204
|
-
return { type: "multiple-choice", selectedOptionIds: [] };
|
|
205
|
-
case "fill-in-the-blanks":
|
|
206
|
-
return { type: "fill-in-the-blanks", answers: {} };
|
|
207
|
-
case "gap-select":
|
|
208
|
-
return { type: "gap-select", selections: {} };
|
|
209
|
-
case "dictation":
|
|
210
|
-
return { type: "dictation", text: "" };
|
|
211
|
-
default:
|
|
212
|
-
return null;
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
var base = (data) => ({
|
|
216
|
-
activityId: data.id,
|
|
217
|
-
title: data.title,
|
|
218
|
-
...typeof data.locale === "string" ? { locale: data.locale } : {}
|
|
219
|
-
});
|
|
220
|
-
function buildAiFacts(data, response, details) {
|
|
221
|
-
const byId = new Map((_nullishCoalesce(details, () => ( []))).map((detail) => [detail.itemId, detail]));
|
|
222
|
-
const full = data.redacted !== true;
|
|
223
|
-
switch (data.type) {
|
|
224
|
-
case "multiple-choice": {
|
|
225
|
-
const item = data;
|
|
226
|
-
const chosen = new Set(
|
|
227
|
-
_optionalChain([response, 'optionalAccess', _ => _.type]) === "multiple-choice" ? response.selectedOptionIds : []
|
|
228
|
-
);
|
|
229
|
-
return {
|
|
230
|
-
...base(data),
|
|
231
|
-
activityType: "multiple-choice",
|
|
232
|
-
question: item.question,
|
|
233
|
-
mode: item.mode,
|
|
234
|
-
options: item.options.map((option) => {
|
|
235
|
-
const detail = byId.get(option.id);
|
|
236
|
-
const wasChosen = chosen.has(option.id);
|
|
237
|
-
let correct = null;
|
|
238
|
-
if (full && typeof option.isCorrect === "boolean") {
|
|
239
|
-
correct = option.isCorrect;
|
|
240
|
-
} else if (detail !== void 0) {
|
|
241
|
-
correct = isAnswerOption(detail, wasChosen);
|
|
242
|
-
}
|
|
243
|
-
return {
|
|
244
|
-
id: option.id,
|
|
245
|
-
text: option.text,
|
|
246
|
-
chosen: wasChosen,
|
|
247
|
-
correct,
|
|
248
|
-
...typeof option.feedback === "string" ? { feedback: option.feedback } : {}
|
|
249
|
-
};
|
|
250
|
-
})
|
|
251
|
-
};
|
|
252
|
-
}
|
|
253
|
-
case "fill-in-the-blanks": {
|
|
254
|
-
const item = data;
|
|
255
|
-
const answers = _optionalChain([response, 'optionalAccess', _2 => _2.type]) === "fill-in-the-blanks" ? response.answers : {};
|
|
256
|
-
const blanks = new Map(item.blanks.map((blank) => [blank.id, blank]));
|
|
257
|
-
return {
|
|
258
|
-
...base(data),
|
|
259
|
-
activityType: "fill-in-the-blanks",
|
|
260
|
-
passage: numberedPassage(item.passage),
|
|
261
|
-
blanks: placeholderOrder(item.passage).map((id, index) => {
|
|
262
|
-
const blank = blanks.get(id);
|
|
263
|
-
const detail = byId.get(id);
|
|
264
|
-
const accepted = full && Array.isArray(_optionalChain([blank, 'optionalAccess', _3 => _3.acceptedAnswers])) ? [...blank.acceptedAnswers] : listOf(_optionalChain([detail, 'optionalAccess', _4 => _4.correctResponse]));
|
|
265
|
-
return {
|
|
266
|
-
id,
|
|
267
|
-
position: index + 1,
|
|
268
|
-
typed: typeof answers[id] === "string" ? answers[id] : "",
|
|
269
|
-
accepted,
|
|
270
|
-
correct: detail === void 0 ? null : detail.correct,
|
|
271
|
-
...typeof _optionalChain([blank, 'optionalAccess', _5 => _5.hint]) === "string" ? { hint: blank.hint } : {},
|
|
272
|
-
...typeof _optionalChain([blank, 'optionalAccess', _6 => _6.feedback]) === "string" ? { feedback: blank.feedback } : {}
|
|
273
|
-
};
|
|
274
|
-
})
|
|
275
|
-
};
|
|
276
|
-
}
|
|
277
|
-
case "gap-select": {
|
|
278
|
-
const item = data;
|
|
279
|
-
const selections = _optionalChain([response, 'optionalAccess', _7 => _7.type]) === "gap-select" ? response.selections : {};
|
|
280
|
-
const gaps = new Map(item.gaps.map((gap) => [gap.id, gap]));
|
|
281
|
-
const banks = new Map((_nullishCoalesce(item.banks, () => ( []))).map((bank) => [bank.id, bank]));
|
|
282
|
-
return {
|
|
283
|
-
...base(data),
|
|
284
|
-
activityType: "gap-select",
|
|
285
|
-
passage: numberedPassage(item.passage),
|
|
286
|
-
gaps: placeholderOrder(item.passage).map((id, index) => {
|
|
287
|
-
const gap = gaps.get(id);
|
|
288
|
-
const choices = _nullishCoalesce(_optionalChain([gap, 'optionalAccess', _8 => _8.choices]), () => ( (_optionalChain([gap, 'optionalAccess', _9 => _9.bankId]) === void 0 ? [] : _nullishCoalesce(_optionalChain([banks, 'access', _10 => _10.get, 'call', _11 => _11(gap.bankId), 'optionalAccess', _12 => _12.choices]), () => ( [])))));
|
|
289
|
-
const textOf = (choiceId) => choiceId === void 0 ? null : _nullishCoalesce(_optionalChain([choices, 'access', _13 => _13.find, 'call', _14 => _14((choice) => choice.id === choiceId), 'optionalAccess', _15 => _15.text]), () => ( null));
|
|
290
|
-
const detail = byId.get(id);
|
|
291
|
-
const answerId = full && typeof _optionalChain([gap, 'optionalAccess', _16 => _16.correctChoiceId]) === "string" ? gap.correctChoiceId : firstString(_optionalChain([detail, 'optionalAccess', _17 => _17.correctResponse]));
|
|
292
|
-
return {
|
|
293
|
-
id,
|
|
294
|
-
position: index + 1,
|
|
295
|
-
choices: choices.map((choice) => choice.text),
|
|
296
|
-
chosen: textOf(selections[id]),
|
|
297
|
-
answer: textOf(answerId),
|
|
298
|
-
correct: detail === void 0 ? null : detail.correct,
|
|
299
|
-
...typeof _optionalChain([gap, 'optionalAccess', _18 => _18.feedback]) === "string" ? { feedback: gap.feedback } : {}
|
|
300
|
-
};
|
|
301
|
-
})
|
|
302
|
-
};
|
|
303
|
-
}
|
|
304
|
-
case "dictation": {
|
|
305
|
-
const item = data;
|
|
306
|
-
const typed = _optionalChain([response, 'optionalAccess', _19 => _19.type]) === "dictation" ? response.text : "";
|
|
307
|
-
const hasKey = full && typeof item.transcript === "string";
|
|
308
|
-
let words = null;
|
|
309
|
-
if (hasKey) {
|
|
310
|
-
words = _chunkD4TOPSHVcjs.alignDictation.call(void 0, item, typed).words.map((word) => ({
|
|
311
|
-
expected: word.reference,
|
|
312
|
-
typed: word.attempt,
|
|
313
|
-
status: word.status
|
|
314
|
-
}));
|
|
315
|
-
} else if (details !== null && details.length > 0) {
|
|
316
|
-
words = details.map((detail) => {
|
|
317
|
-
const expected = _nullishCoalesce(firstString(detail.correctResponse), () => ( ""));
|
|
318
|
-
const attempt = _nullishCoalesce(firstString(detail.learnerResponse), () => ( ""));
|
|
319
|
-
let status = "incorrect";
|
|
320
|
-
if (detail.correct) {
|
|
321
|
-
status = "correct";
|
|
322
|
-
} else if (attempt === "") {
|
|
323
|
-
status = "missing";
|
|
324
|
-
} else if (expected === "") {
|
|
325
|
-
status = "extra";
|
|
326
|
-
}
|
|
327
|
-
return { expected, typed: attempt, status };
|
|
328
|
-
});
|
|
329
|
-
}
|
|
330
|
-
return {
|
|
331
|
-
...base(data),
|
|
332
|
-
activityType: "dictation",
|
|
333
|
-
transcript: hasKey ? item.transcript : null,
|
|
334
|
-
typed,
|
|
335
|
-
words
|
|
336
|
-
};
|
|
337
|
-
}
|
|
338
|
-
default:
|
|
339
|
-
return null;
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
function gradeLocally(data, response) {
|
|
343
|
-
if (data.redacted === true) {
|
|
344
|
-
return null;
|
|
345
|
-
}
|
|
346
|
-
try {
|
|
347
|
-
const result = _chunkCOBK2RUXcjs.score.call(void 0, data.type, data, response);
|
|
348
|
-
return { details: result.details, grade: aiGradeOf(result) };
|
|
349
|
-
} catch (e) {
|
|
350
|
-
return null;
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
function aiExplanationRequest(input) {
|
|
354
|
-
const { data, response, outcome, learnerLocale } = input;
|
|
355
|
-
if (!aiSupports(data.type, "explanation") || !aiAllowedByContent(data, "explanation")) {
|
|
356
|
-
return null;
|
|
357
|
-
}
|
|
358
|
-
let details = null;
|
|
359
|
-
let grade = null;
|
|
360
|
-
if (_optionalChain([outcome, 'optionalAccess', _20 => _20.status]) === "scored") {
|
|
361
|
-
const { score: recorded, maxScore, passed } = outcome;
|
|
362
|
-
if (!_chunkCOBK2RUXcjs.isGradeInRange.call(void 0, recorded, maxScore)) {
|
|
363
|
-
return null;
|
|
364
|
-
}
|
|
365
|
-
details = outcome.details;
|
|
366
|
-
grade = aiGradeOf({ score: recorded, maxScore, passed });
|
|
367
|
-
} else if (response !== null) {
|
|
368
|
-
const local = gradeLocally(data, response);
|
|
369
|
-
if (local !== null) {
|
|
370
|
-
details = local.details;
|
|
371
|
-
grade = local.grade;
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
if (grade === null) {
|
|
375
|
-
return null;
|
|
376
|
-
}
|
|
377
|
-
const facts = buildAiFacts(data, response, details);
|
|
378
|
-
if (facts === null) {
|
|
379
|
-
return null;
|
|
380
|
-
}
|
|
381
|
-
return {
|
|
382
|
-
feature: "explanation",
|
|
383
|
-
facts,
|
|
384
|
-
grade,
|
|
385
|
-
...learnerLocale !== void 0 ? { learnerLocale } : {}
|
|
386
|
-
};
|
|
387
|
-
}
|
|
388
|
-
function aiHintRequest(input) {
|
|
389
|
-
const { data, previousHints, learnerLocale } = input;
|
|
390
|
-
if (!aiSupports(data.type, "hint") || !aiAllowedByContent(data, "hint") || data.redacted === true) {
|
|
391
|
-
return null;
|
|
392
|
-
}
|
|
393
|
-
const response = _nullishCoalesce(input.response, () => ( emptyResponse(data.type)));
|
|
394
|
-
const local = response === null ? null : gradeLocally(data, response);
|
|
395
|
-
const facts = buildAiFacts(data, response, _nullishCoalesce(_optionalChain([local, 'optionalAccess', _21 => _21.details]), () => ( null)));
|
|
396
|
-
if (facts === null) {
|
|
397
|
-
return null;
|
|
398
|
-
}
|
|
399
|
-
return {
|
|
400
|
-
feature: "hint",
|
|
401
|
-
facts,
|
|
402
|
-
hintNumber: previousHints.length + 1,
|
|
403
|
-
previousHints: [...previousHints],
|
|
404
|
-
...learnerLocale !== void 0 ? { learnerLocale } : {}
|
|
405
|
-
};
|
|
406
|
-
}
|
|
407
|
-
var VERDICTS = ["correct", "partly-correct", "incorrect"];
|
|
408
|
-
function provenanceOf(raw) {
|
|
409
|
-
if (typeof raw !== "object" || raw === null) {
|
|
410
|
-
return void 0;
|
|
411
|
-
}
|
|
412
|
-
const kept = {};
|
|
413
|
-
for (const key of ["model", "promptHash", "generatedAt"]) {
|
|
414
|
-
const value = raw[key];
|
|
415
|
-
if (typeof value === "string" && value.length > 0 && value.length <= 200) {
|
|
416
|
-
kept[key] = value;
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
return Object.keys(kept).length > 0 ? kept : void 0;
|
|
420
|
-
}
|
|
421
|
-
function cleanText(text) {
|
|
422
|
-
return text.replace(/\r\n?/g, "\n").replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F-\u009F\u2028\u2029]/g, "").replace(/\n{3,}/g, "\n\n").trim();
|
|
423
|
-
}
|
|
424
|
-
function readAiTextResult(raw) {
|
|
425
|
-
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
|
|
426
|
-
return { ok: false, refusal: "malformed" };
|
|
427
|
-
}
|
|
428
|
-
const record = raw;
|
|
429
|
-
if (typeof record.text !== "string") {
|
|
430
|
-
return { ok: false, refusal: "malformed" };
|
|
431
|
-
}
|
|
432
|
-
if (record.verdict !== void 0 && !VERDICTS.includes(record.verdict)) {
|
|
433
|
-
return { ok: false, refusal: "malformed" };
|
|
434
|
-
}
|
|
435
|
-
const text = cleanText(record.text);
|
|
436
|
-
if (text === "") {
|
|
437
|
-
return { ok: false, refusal: "empty" };
|
|
438
|
-
}
|
|
439
|
-
if ([...text].length > AI_TEXT_MAX_LENGTH) {
|
|
440
|
-
return { ok: false, refusal: "too-long" };
|
|
441
|
-
}
|
|
442
|
-
const provenance = provenanceOf(record.provenance);
|
|
443
|
-
return {
|
|
444
|
-
ok: true,
|
|
445
|
-
result: {
|
|
446
|
-
text,
|
|
447
|
-
...record.verdict !== void 0 ? { verdict: record.verdict } : {},
|
|
448
|
-
...provenance !== void 0 ? { provenance } : {}
|
|
449
|
-
}
|
|
450
|
-
};
|
|
451
|
-
}
|
|
452
|
-
function checkAiExplanation(raw, request) {
|
|
453
|
-
const read = readAiTextResult(raw);
|
|
454
|
-
if (!read.ok) {
|
|
455
|
-
return read;
|
|
456
|
-
}
|
|
457
|
-
if (read.result.verdict !== void 0 && read.result.verdict !== request.grade.category) {
|
|
458
|
-
return { ok: false, refusal: "contradicts-grade" };
|
|
459
|
-
}
|
|
460
|
-
return read;
|
|
461
|
-
}
|
|
462
|
-
function checkAiHint(raw, request) {
|
|
463
|
-
const read = readAiTextResult(raw);
|
|
464
|
-
if (!read.ok) {
|
|
465
|
-
return read;
|
|
466
|
-
}
|
|
467
|
-
if (hintRevealsAnswer(request.facts, read.result.text)) {
|
|
468
|
-
return { ok: false, refusal: "reveals-answer" };
|
|
469
|
-
}
|
|
470
|
-
return read;
|
|
471
|
-
}
|
|
472
|
-
function fold(text) {
|
|
473
|
-
const folded = text.normalize("NFKD").replace(/\p{M}/gu, "").toLowerCase().replace(/[^\p{L}\p{N}]+/gu, " ").trim();
|
|
474
|
-
return folded === "" ? [] : folded.split(" ");
|
|
475
|
-
}
|
|
476
|
-
function containsWords(haystack, needle) {
|
|
477
|
-
if (needle.length === 0 || needle.length > haystack.length) {
|
|
478
|
-
return false;
|
|
479
|
-
}
|
|
480
|
-
for (let start = 0; start + needle.length <= haystack.length; start += 1) {
|
|
481
|
-
let match = true;
|
|
482
|
-
for (let offset = 0; offset < needle.length; offset += 1) {
|
|
483
|
-
if (haystack[start + offset] !== needle[offset]) {
|
|
484
|
-
match = false;
|
|
485
|
-
break;
|
|
486
|
-
}
|
|
487
|
-
}
|
|
488
|
-
if (match) {
|
|
489
|
-
return true;
|
|
490
|
-
}
|
|
491
|
-
}
|
|
492
|
-
return false;
|
|
493
|
-
}
|
|
494
|
-
var isShort = (words) => words.length === 1 && [...words[0]].length < 4;
|
|
495
|
-
function neighbours(passage, position) {
|
|
496
|
-
const marker = `[${position}]`;
|
|
497
|
-
const at = passage.indexOf(marker);
|
|
498
|
-
if (at === -1) {
|
|
499
|
-
return {};
|
|
500
|
-
}
|
|
501
|
-
const strip = (text) => text.replace(/\[\d+\]/g, " ");
|
|
502
|
-
const left = fold(strip(passage.slice(0, at)));
|
|
503
|
-
const right = fold(strip(passage.slice(at + marker.length)));
|
|
504
|
-
const before = left[left.length - 1];
|
|
505
|
-
const after = right[0];
|
|
506
|
-
return {
|
|
507
|
-
...before !== void 0 ? { before } : {},
|
|
508
|
-
...after !== void 0 ? { after } : {}
|
|
509
|
-
};
|
|
510
|
-
}
|
|
511
|
-
function hintRevealsAnswer(facts, hint) {
|
|
512
|
-
const words = fold(hint);
|
|
513
|
-
const reveals = (answer, passage, position) => {
|
|
514
|
-
const needle = fold(answer);
|
|
515
|
-
if (needle.length === 0) {
|
|
516
|
-
return false;
|
|
517
|
-
}
|
|
518
|
-
if (!isShort(needle) || passage === void 0 || position === void 0) {
|
|
519
|
-
return containsWords(words, needle);
|
|
520
|
-
}
|
|
521
|
-
const { before, after } = neighbours(passage, position);
|
|
522
|
-
if (before === void 0 && after === void 0) {
|
|
523
|
-
return containsWords(words, needle);
|
|
524
|
-
}
|
|
525
|
-
return before !== void 0 && containsWords(words, [before, ...needle]) || after !== void 0 && containsWords(words, [...needle, after]);
|
|
526
|
-
};
|
|
527
|
-
switch (facts.activityType) {
|
|
528
|
-
case "multiple-choice":
|
|
529
|
-
return facts.options.some((option) => option.correct === true && reveals(option.text));
|
|
530
|
-
case "fill-in-the-blanks":
|
|
531
|
-
return facts.blanks.some(
|
|
532
|
-
(blank) => (_nullishCoalesce(blank.accepted, () => ( []))).some((answer) => reveals(answer, facts.passage, blank.position))
|
|
533
|
-
);
|
|
534
|
-
case "gap-select":
|
|
535
|
-
return facts.gaps.some(
|
|
536
|
-
(gap) => gap.answer !== null && reveals(gap.answer, facts.passage, gap.position)
|
|
537
|
-
);
|
|
538
|
-
case "dictation":
|
|
539
|
-
return false;
|
|
540
|
-
default:
|
|
541
|
-
return false;
|
|
542
|
-
}
|
|
543
|
-
}
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
var _chunkD4TOPSHVcjs = require('./chunk-D4TOPSHV.cjs');
|
|
544
154
|
|
|
545
155
|
// src/content-hash.ts
|
|
546
156
|
function canonicalJson(value, seen = /* @__PURE__ */ new Set()) {
|
|
@@ -598,6 +208,106 @@ function contentHash(value) {
|
|
|
598
208
|
return fingerprint(canonicalJson(value));
|
|
599
209
|
}
|
|
600
210
|
|
|
211
|
+
// src/delivery.ts
|
|
212
|
+
var OPEN_DELIVERY_POLICY = Object.freeze({
|
|
213
|
+
feedback: true,
|
|
214
|
+
solutions: true,
|
|
215
|
+
hints: true,
|
|
216
|
+
ai: Object.freeze({ hints: true, explanations: true })
|
|
217
|
+
});
|
|
218
|
+
var SETTINGS = ["feedback", "solutions", "hints"];
|
|
219
|
+
var AI_SETTINGS = ["hints", "explanations"];
|
|
220
|
+
function allows(value) {
|
|
221
|
+
return value === void 0 || value === null || value === true;
|
|
222
|
+
}
|
|
223
|
+
function resolveDeliveryPolicy(policy) {
|
|
224
|
+
if (policy === void 0 || policy === null) {
|
|
225
|
+
return OPEN_DELIVERY_POLICY;
|
|
226
|
+
}
|
|
227
|
+
if (typeof policy !== "object" || Array.isArray(policy)) {
|
|
228
|
+
return {
|
|
229
|
+
feedback: false,
|
|
230
|
+
solutions: false,
|
|
231
|
+
hints: false,
|
|
232
|
+
ai: { hints: false, explanations: false }
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
const given = policy;
|
|
236
|
+
const ai = given.ai;
|
|
237
|
+
const aiGiven = ai === void 0 || ai === null || ai === true ? {} : typeof ai === "object" && !Array.isArray(ai) ? ai : { hints: false, explanations: false };
|
|
238
|
+
return {
|
|
239
|
+
feedback: allows(given.feedback),
|
|
240
|
+
solutions: allows(given.solutions),
|
|
241
|
+
hints: allows(given.hints),
|
|
242
|
+
ai: { hints: allows(aiGiven.hints), explanations: allows(aiGiven.explanations) }
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
function combineDeliveryPolicies(...policies) {
|
|
246
|
+
const resolved = policies.map(resolveDeliveryPolicy);
|
|
247
|
+
const every = (read) => resolved.every(read);
|
|
248
|
+
return {
|
|
249
|
+
feedback: every((one) => one.feedback),
|
|
250
|
+
solutions: every((one) => one.solutions),
|
|
251
|
+
hints: every((one) => one.hints),
|
|
252
|
+
ai: {
|
|
253
|
+
hints: every((one) => one.ai.hints),
|
|
254
|
+
explanations: every((one) => one.ai.explanations)
|
|
255
|
+
}
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
function validateDeliveryPolicy(policy) {
|
|
259
|
+
const issues = [];
|
|
260
|
+
if (policy === void 0 || policy === null) {
|
|
261
|
+
return { success: true, data: {} };
|
|
262
|
+
}
|
|
263
|
+
if (typeof policy !== "object" || Array.isArray(policy)) {
|
|
264
|
+
return {
|
|
265
|
+
success: false,
|
|
266
|
+
issues: [{ path: "", message: "A delivery policy is an object of settings." }]
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
const given = policy;
|
|
270
|
+
for (const key of Object.keys(given)) {
|
|
271
|
+
if (key === "ai") {
|
|
272
|
+
continue;
|
|
273
|
+
}
|
|
274
|
+
if (!SETTINGS.includes(key)) {
|
|
275
|
+
issues.push({
|
|
276
|
+
path: key,
|
|
277
|
+
message: `"${key}" is not a delivery setting. The settings are feedback, solutions, hints and ai.`
|
|
278
|
+
});
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
const value = given[key];
|
|
282
|
+
if (value !== true && value !== false && value !== null && value !== void 0) {
|
|
283
|
+
issues.push({ path: key, message: `"${key}" must be true, false or null.` });
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
const ai = given.ai;
|
|
287
|
+
if (ai !== void 0 && ai !== null && ai !== true && ai !== false) {
|
|
288
|
+
if (typeof ai !== "object" || Array.isArray(ai)) {
|
|
289
|
+
issues.push({
|
|
290
|
+
path: "ai",
|
|
291
|
+
message: '"ai" must be true, false, or an object of hints and explanations.'
|
|
292
|
+
});
|
|
293
|
+
} else {
|
|
294
|
+
for (const [key, value] of Object.entries(ai)) {
|
|
295
|
+
if (!AI_SETTINGS.includes(key)) {
|
|
296
|
+
issues.push({
|
|
297
|
+
path: `ai.${key}`,
|
|
298
|
+
message: `"ai.${key}" is not an AI setting. The settings are hints and explanations.`
|
|
299
|
+
});
|
|
300
|
+
continue;
|
|
301
|
+
}
|
|
302
|
+
if (value !== true && value !== false && value !== null && value !== void 0) {
|
|
303
|
+
issues.push({ path: `ai.${key}`, message: `"ai.${key}" must be true, false or null.` });
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
return issues.length > 0 ? { success: false, issues } : { success: true, data: given };
|
|
309
|
+
}
|
|
310
|
+
|
|
601
311
|
// src/shuffle.ts
|
|
602
312
|
function hashSeed(input) {
|
|
603
313
|
let h = 2166136261 >>> 0;
|
|
@@ -689,7 +399,7 @@ function flattenSequence(entries, options = {}) {
|
|
|
689
399
|
const presented = timeline !== void 0 ? inQuizOrder(items, timeline) : entry.shuffle === "within-group" ? seededShuffle(items, `${seed}:group:${entry.id}`) : items;
|
|
690
400
|
const size = presented.length;
|
|
691
401
|
presented.forEach(({ item, itemIndex }, position) => {
|
|
692
|
-
const cue = _optionalChain([timeline, 'optionalAccess',
|
|
402
|
+
const cue = _optionalChain([timeline, 'optionalAccess', _ => _.cues, 'access', _2 => _2.find, 'call', _3 => _3((candidate) => candidate.itemIds.includes(item.id))]);
|
|
693
403
|
slots.push({
|
|
694
404
|
// Slot ids stay AUTHORED — the item's index or its key — whatever the
|
|
695
405
|
// presented order: moving a quiz must never re-map a stored answer.
|
|
@@ -743,16 +453,16 @@ function stimulusMediaKey(slotId) {
|
|
|
743
453
|
}
|
|
744
454
|
function resolvePlaybackPolicy(media) {
|
|
745
455
|
const p = media.playback;
|
|
746
|
-
const budgeted = typeof _optionalChain([p, 'optionalAccess',
|
|
747
|
-
const seek = _nullishCoalesce(_optionalChain([p, 'optionalAccess',
|
|
748
|
-
const rate = _nullishCoalesce(_optionalChain([p, 'optionalAccess',
|
|
749
|
-
const controls = _nullishCoalesce(_optionalChain([p, 'optionalAccess',
|
|
456
|
+
const budgeted = typeof _optionalChain([p, 'optionalAccess', _4 => _4.maxPlays]) === "number";
|
|
457
|
+
const seek = _nullishCoalesce(_optionalChain([p, 'optionalAccess', _5 => _5.seek]), () => ( (budgeted ? "none" : "allow")));
|
|
458
|
+
const rate = _nullishCoalesce(_optionalChain([p, 'optionalAccess', _6 => _6.rate]), () => ( "allow"));
|
|
459
|
+
const controls = _nullishCoalesce(_optionalChain([p, 'optionalAccess', _7 => _7.controls]), () => ( (budgeted || seek === "none" || rate === "fixed" ? "minimal" : "native")));
|
|
750
460
|
return {
|
|
751
461
|
controls,
|
|
752
|
-
maxPlays: budgeted ? _optionalChain([p, 'optionalAccess',
|
|
462
|
+
maxPlays: budgeted ? _optionalChain([p, 'optionalAccess', _8 => _8.maxPlays]) : null,
|
|
753
463
|
seek,
|
|
754
464
|
rate,
|
|
755
|
-
nativeControlHints: _nullishCoalesce(_optionalChain([p, 'optionalAccess',
|
|
465
|
+
nativeControlHints: _nullishCoalesce(_optionalChain([p, 'optionalAccess', _9 => _9.nativeControlHints]), () => ( []))
|
|
756
466
|
};
|
|
757
467
|
}
|
|
758
468
|
function planMediaBudgets(plan) {
|
|
@@ -767,7 +477,7 @@ function planMediaBudgets(plan) {
|
|
|
767
477
|
function assertEntry(key, entry) {
|
|
768
478
|
if (entry === null || typeof entry !== "object" || !Number.isInteger(entry.plays) || entry.plays < 0) {
|
|
769
479
|
throw new Error(
|
|
770
|
-
`serializeMediaPlayLedger: play count for ${JSON.stringify(key)} is ${JSON.stringify(_optionalChain([entry, 'optionalAccess',
|
|
480
|
+
`serializeMediaPlayLedger: play count for ${JSON.stringify(key)} is ${JSON.stringify(_optionalChain([entry, 'optionalAccess', _10 => _10.plays]))}. A count must be a non-negative integer; Number(a NULL column) is the usual cause.`
|
|
771
481
|
);
|
|
772
482
|
}
|
|
773
483
|
if (entry.at !== void 0 && (!Number.isFinite(entry.at) || entry.at < 0)) {
|
|
@@ -840,7 +550,7 @@ function mediaBudgetsOf(slot) {
|
|
|
840
550
|
budgets.push({ key: slotMediaKey(slot.slotId), maxPlays });
|
|
841
551
|
}
|
|
842
552
|
}
|
|
843
|
-
const stimulusMedia = _optionalChain([slot, 'access',
|
|
553
|
+
const stimulusMedia = _optionalChain([slot, 'access', _11 => _11.group, 'optionalAccess', _12 => _12.stimulus, 'access', _13 => _13.media]);
|
|
844
554
|
if (stimulusMedia !== void 0) {
|
|
845
555
|
const maxPlays = resolvePlaybackPolicy(stimulusMedia).maxPlays;
|
|
846
556
|
if (maxPlays !== null) {
|
|
@@ -901,12 +611,13 @@ function planSlot(slot, points) {
|
|
|
901
611
|
}
|
|
902
612
|
function planAttempt(entries, options = {}) {
|
|
903
613
|
const { seed, shuffleEntries, points } = options;
|
|
614
|
+
const delivery = frozenDelivery(options.delivery);
|
|
904
615
|
const slots = flattenSequence(entries, {
|
|
905
616
|
...shuffleEntries !== void 0 ? { shuffleEntries } : {},
|
|
906
617
|
...seed !== void 0 ? { seed } : {}
|
|
907
618
|
});
|
|
908
619
|
assertNoSplitBudgets(slots);
|
|
909
|
-
const planned = slots.map((slot) => planSlot(slot, _nullishCoalesce(_optionalChain([points, 'optionalCall',
|
|
620
|
+
const planned = slots.map((slot) => planSlot(slot, _nullishCoalesce(_optionalChain([points, 'optionalCall', _14 => _14(slot)]), () => ( 1))));
|
|
910
621
|
const totalPoints = planned.reduce((sum, slot) => sum + slot.points, 0);
|
|
911
622
|
return {
|
|
912
623
|
planVersion: "1.0",
|
|
@@ -915,7 +626,11 @@ function planAttempt(entries, options = {}) {
|
|
|
915
626
|
// The plan's own fingerprint covers the slots verbatim — identity, order,
|
|
916
627
|
// points and content hashes — so one stored value answers "is this still
|
|
917
628
|
// the paper that was sat?" and the per-slot hashes then say what moved.
|
|
918
|
-
|
|
629
|
+
// A policy joins it when there is one: the same paper sat with hints and
|
|
630
|
+
// without is two different attempts. Without one, the fingerprint is the
|
|
631
|
+
// one every plan before policies had.
|
|
632
|
+
planHash: contentHash(delivery === void 0 ? planned : { slots: planned, delivery }),
|
|
633
|
+
...delivery !== void 0 ? { delivery } : {},
|
|
919
634
|
slots: planned,
|
|
920
635
|
totalPoints
|
|
921
636
|
};
|
|
@@ -930,6 +645,7 @@ function verifyAttemptPlan(plan, current) {
|
|
|
930
645
|
const changedCueSlotIds = [];
|
|
931
646
|
const changedPointsSlotIds = [];
|
|
932
647
|
const reorderedSlotIds = [];
|
|
648
|
+
const deliveryChanged = contentHash(_nullishCoalesce(plan.delivery, () => ( null))) !== contentHash(_nullishCoalesce(current.delivery, () => ( null)));
|
|
933
649
|
for (const slot of plan.slots) {
|
|
934
650
|
const now = after.get(slot.slotId);
|
|
935
651
|
if (now === void 0) {
|
|
@@ -938,10 +654,10 @@ function verifyAttemptPlan(plan, current) {
|
|
|
938
654
|
if (now.contentHash !== slot.contentHash) {
|
|
939
655
|
changedSlotIds.push(slot.slotId);
|
|
940
656
|
}
|
|
941
|
-
if (_optionalChain([now, 'access',
|
|
657
|
+
if (_optionalChain([now, 'access', _15 => _15.group, 'optionalAccess', _16 => _16.stimulusHash]) !== _optionalChain([slot, 'access', _17 => _17.group, 'optionalAccess', _18 => _18.stimulusHash])) {
|
|
942
658
|
changedStimulusSlotIds.push(slot.slotId);
|
|
943
659
|
}
|
|
944
|
-
if (contentHash(_nullishCoalesce(_optionalChain([now, 'access',
|
|
660
|
+
if (contentHash(_nullishCoalesce(_optionalChain([now, 'access', _19 => _19.group, 'optionalAccess', _20 => _20.cue]), () => ( null))) !== contentHash(_nullishCoalesce(_optionalChain([slot, 'access', _21 => _21.group, 'optionalAccess', _22 => _22.cue]), () => ( null)))) {
|
|
945
661
|
changedCueSlotIds.push(slot.slotId);
|
|
946
662
|
}
|
|
947
663
|
if (now.points !== slot.points) {
|
|
@@ -952,16 +668,33 @@ function verifyAttemptPlan(plan, current) {
|
|
|
952
668
|
}
|
|
953
669
|
}
|
|
954
670
|
return {
|
|
955
|
-
matches: missingSlotIds.length === 0 && addedSlotIds.length === 0 && changedSlotIds.length === 0 && changedStimulusSlotIds.length === 0 && changedCueSlotIds.length === 0 && changedPointsSlotIds.length === 0 && reorderedSlotIds.length === 0,
|
|
671
|
+
matches: missingSlotIds.length === 0 && addedSlotIds.length === 0 && changedSlotIds.length === 0 && changedStimulusSlotIds.length === 0 && changedCueSlotIds.length === 0 && changedPointsSlotIds.length === 0 && reorderedSlotIds.length === 0 && !deliveryChanged,
|
|
956
672
|
missingSlotIds,
|
|
957
673
|
addedSlotIds,
|
|
958
674
|
changedSlotIds,
|
|
959
675
|
changedStimulusSlotIds,
|
|
960
676
|
changedCueSlotIds,
|
|
961
677
|
changedPointsSlotIds,
|
|
962
|
-
reorderedSlotIds
|
|
678
|
+
reorderedSlotIds,
|
|
679
|
+
// Present only when it is true, as `rejectedSlotIds` is on a composed
|
|
680
|
+
// score: a drift report between two plans without a policy — every one
|
|
681
|
+
// written before policies existed — keeps exactly the shape it had.
|
|
682
|
+
...deliveryChanged ? { deliveryChanged: true } : {}
|
|
963
683
|
};
|
|
964
684
|
}
|
|
685
|
+
function frozenDelivery(policy) {
|
|
686
|
+
if (policy === void 0 || policy === null) {
|
|
687
|
+
return void 0;
|
|
688
|
+
}
|
|
689
|
+
const checked = validateDeliveryPolicy(policy);
|
|
690
|
+
if (!checked.success) {
|
|
691
|
+
const first = checked.issues[0];
|
|
692
|
+
throw new Error(
|
|
693
|
+
`planAttempt: the delivery policy is not one to record \u2014 ${_nullishCoalesce(_optionalChain([first, 'optionalAccess', _23 => _23.message]), () => ( "invalid"))}` + (checked.issues.length > 1 ? ` (and ${checked.issues.length - 1} more)` : "")
|
|
694
|
+
);
|
|
695
|
+
}
|
|
696
|
+
return resolveDeliveryPolicy(checked.data);
|
|
697
|
+
}
|
|
965
698
|
function missingOutcome(slot, policy) {
|
|
966
699
|
if (typeof policy === "function") {
|
|
967
700
|
return policy(slot);
|
|
@@ -1549,7 +1282,7 @@ function validateDraftInScope(type, draft) {
|
|
|
1549
1282
|
if (descriptor === void 0) {
|
|
1550
1283
|
throw new (0, _chunkD4TOPSHVcjs.UnknownActivityTypeError)(String(type));
|
|
1551
1284
|
}
|
|
1552
|
-
const reported = _chunkD4TOPSHVcjs.isRecord.call(void 0, draft) && _optionalChain([descriptor, 'access',
|
|
1285
|
+
const reported = _chunkD4TOPSHVcjs.isRecord.call(void 0, draft) && _optionalChain([descriptor, 'access', _24 => _24.authoring, 'optionalAccess', _25 => _25.checkDraft]) !== void 0 ? descriptor.authoring.checkDraft(draft).map(normalise) : [];
|
|
1553
1286
|
const issues = [...reported];
|
|
1554
1287
|
const parsed = descriptor.schema.safeParse(draft, { reportInput: true });
|
|
1555
1288
|
if (!parsed.success) {
|
|
@@ -1593,7 +1326,7 @@ function createDraft(type, context) {
|
|
|
1593
1326
|
if (descriptor === void 0) {
|
|
1594
1327
|
throw new (0, _chunkD4TOPSHVcjs.UnknownActivityTypeError)(String(type));
|
|
1595
1328
|
}
|
|
1596
|
-
const create = _optionalChain([descriptor, 'access',
|
|
1329
|
+
const create = _optionalChain([descriptor, 'access', _26 => _26.authoring, 'optionalAccess', _27 => _27.createDraft]);
|
|
1597
1330
|
if (create === void 0) {
|
|
1598
1331
|
throw new Error(
|
|
1599
1332
|
`Activity type "${String(type)}" declares no authoring.createDraft, so there is no empty draft to create. Build the draft yourself; validateDraft works for every registered type.`
|
|
@@ -1625,11 +1358,11 @@ function normalise(found) {
|
|
|
1625
1358
|
}
|
|
1626
1359
|
|
|
1627
1360
|
// src/redact.ts
|
|
1628
|
-
function mergePolicy(
|
|
1361
|
+
function mergePolicy(base, overrides) {
|
|
1629
1362
|
if (overrides === void 0) {
|
|
1630
|
-
return
|
|
1363
|
+
return base;
|
|
1631
1364
|
}
|
|
1632
|
-
const merged = { ...
|
|
1365
|
+
const merged = { ...base };
|
|
1633
1366
|
for (const [key, override] of Object.entries(overrides)) {
|
|
1634
1367
|
const current = merged[key];
|
|
1635
1368
|
merged[key] = typeof override === "object" && typeof current === "object" ? { ...current, ...override } : override;
|
|
@@ -1868,7 +1601,7 @@ function readMediaProgress(value, duration) {
|
|
|
1868
1601
|
return null;
|
|
1869
1602
|
}
|
|
1870
1603
|
({ progressVersion: version, at, furthest } = value);
|
|
1871
|
-
} catch (
|
|
1604
|
+
} catch (e) {
|
|
1872
1605
|
return null;
|
|
1873
1606
|
}
|
|
1874
1607
|
if (version !== "1.0" || typeof at !== "number" || !Number.isFinite(at)) {
|
|
@@ -2052,5 +1785,9 @@ function composeTimelineScore(entryKey, items, policy) {
|
|
|
2052
1785
|
|
|
2053
1786
|
|
|
2054
1787
|
|
|
2055
|
-
exports.AI_EXPLANATION_TYPES = AI_EXPLANATION_TYPES; exports.AI_HINT_TYPES = AI_HINT_TYPES; exports.AI_TEXT_MAX_LENGTH = AI_TEXT_MAX_LENGTH; exports.ActivitySchemaError = _chunkD4TOPSHVcjs.ActivitySchemaError; exports.AiPermissionsSchema = _chunkD4TOPSHVcjs.AiPermissionsSchema; exports.BlankConfigSchema = _chunkD4TOPSHVcjs.BlankConfigSchema; exports.DEFAULT_PASS_THRESHOLD = _chunkCOBK2RUXcjs.DEFAULT_PASS_THRESHOLD; exports.DICTATION_MAX_ACCEPTED_TRANSCRIPTS = _chunkD4TOPSHVcjs.DICTATION_MAX_ACCEPTED_TRANSCRIPTS; exports.DICTATION_MAX_EQUIVALENCES = _chunkD4TOPSHVcjs.DICTATION_MAX_EQUIVALENCES; exports.DICTATION_MAX_EQUIVALENCE_LENGTH = _chunkD4TOPSHVcjs.DICTATION_MAX_EQUIVALENCE_LENGTH; exports.DICTATION_MAX_TEXT_LENGTH = _chunkD4TOPSHVcjs.DICTATION_MAX_TEXT_LENGTH; exports.DICTATION_MAX_TRANSCRIPT_LENGTH = _chunkD4TOPSHVcjs.DICTATION_MAX_TRANSCRIPT_LENGTH; exports.DeferredScoringError = _chunkD4TOPSHVcjs.DeferredScoringError; exports.DictationDataSchema = _chunkD4TOPSHVcjs.DictationDataSchema; exports.DictationEquivalenceSchema = _chunkD4TOPSHVcjs.DictationEquivalenceSchema; exports.DictationSlowMediaSchema = _chunkD4TOPSHVcjs.DictationSlowMediaSchema; exports.DictationToleranceSchema = _chunkD4TOPSHVcjs.DictationToleranceSchema; exports.FeedbackSchema = _chunkD4TOPSHVcjs.FeedbackSchema; exports.FillInTheBlanksDataSchema = _chunkD4TOPSHVcjs.FillInTheBlanksDataSchema; exports.GapSelectBankSchema = _chunkD4TOPSHVcjs.GapSelectBankSchema; exports.GapSelectChoiceSchema = _chunkD4TOPSHVcjs.GapSelectChoiceSchema; exports.GapSelectDataSchema = _chunkD4TOPSHVcjs.GapSelectDataSchema; exports.GapSelectGapSchema = _chunkD4TOPSHVcjs.GapSelectGapSchema; exports.INTERACTIVE_VIDEO_ITEM_TYPES = _chunk2CV6NU32cjs.INTERACTIVE_VIDEO_ITEM_TYPES; exports.ItemGroupSchema = _chunk2CV6NU32cjs.ItemGroupSchema; exports.MediaPlaybackSchema = _chunkD4TOPSHVcjs.MediaPlaybackSchema; exports.MediaSchema = _chunkD4TOPSHVcjs.MediaSchema; exports.MediaTimelineSchema = _chunk2CV6NU32cjs.MediaTimelineSchema; exports.MediaTrackSchema = _chunkD4TOPSHVcjs.MediaTrackSchema; exports.MediaUrlSchema = _chunkD4TOPSHVcjs.MediaUrlSchema; exports.MultipleChoiceDataSchema = _chunkD4TOPSHVcjs.MultipleChoiceDataSchema; exports.MultipleChoiceOptionMediaSchema = _chunkD4TOPSHVcjs.MultipleChoiceOptionMediaSchema; exports.MultipleChoiceOptionSchema = _chunkD4TOPSHVcjs.MultipleChoiceOptionSchema; exports.NativeControlHintSchema = _chunkD4TOPSHVcjs.NativeControlHintSchema; exports.READ_ALOUD_MAX_DIMENSION_WEIGHT = _chunkD4TOPSHVcjs.READ_ALOUD_MAX_DIMENSION_WEIGHT; exports.READ_ALOUD_MAX_REFERENCE_LENGTH = _chunkD4TOPSHVcjs.READ_ALOUD_MAX_REFERENCE_LENGTH; exports.READ_ALOUD_MAX_SECONDS = _chunkD4TOPSHVcjs.READ_ALOUD_MAX_SECONDS; exports.READ_ALOUD_MAX_TAKES = _chunkD4TOPSHVcjs.READ_ALOUD_MAX_TAKES; exports.ReadAloudDataSchema = _chunkD4TOPSHVcjs.ReadAloudDataSchema; exports.ReadAloudSlowMediaSchema = _chunkD4TOPSHVcjs.ReadAloudSlowMediaSchema; exports.RedactedBlankConfigSchema = _chunkD4TOPSHVcjs.RedactedBlankConfigSchema; exports.RedactedDictationDataSchema = _chunkD4TOPSHVcjs.RedactedDictationDataSchema; exports.RedactedDictationSlowMediaSchema = _chunkD4TOPSHVcjs.RedactedDictationSlowMediaSchema; exports.RedactedFillInTheBlanksDataSchema = _chunkD4TOPSHVcjs.RedactedFillInTheBlanksDataSchema; exports.RedactedGapSelectBankSchema = _chunkD4TOPSHVcjs.RedactedGapSelectBankSchema; exports.RedactedGapSelectChoiceSchema = _chunkD4TOPSHVcjs.RedactedGapSelectChoiceSchema; exports.RedactedGapSelectDataSchema = _chunkD4TOPSHVcjs.RedactedGapSelectDataSchema; exports.RedactedGapSelectGapSchema = _chunkD4TOPSHVcjs.RedactedGapSelectGapSchema; exports.RedactedItemGroupSchema = _chunk2CV6NU32cjs.RedactedItemGroupSchema; exports.RedactedMediaSchema = _chunkD4TOPSHVcjs.RedactedMediaSchema; exports.RedactedMultipleChoiceDataSchema = _chunkD4TOPSHVcjs.RedactedMultipleChoiceDataSchema; exports.RedactedMultipleChoiceOptionMediaSchema = _chunkD4TOPSHVcjs.RedactedMultipleChoiceOptionMediaSchema; exports.RedactedMultipleChoiceOptionSchema = _chunkD4TOPSHVcjs.RedactedMultipleChoiceOptionSchema; exports.RedactedReadAloudDataSchema = _chunkD4TOPSHVcjs.RedactedReadAloudDataSchema; exports.RedactedScoringError = _chunkD4TOPSHVcjs.RedactedScoringError; exports.RedactedStimulusSchema = _chunk2CV6NU32cjs.RedactedStimulusSchema; exports.RedactedWrittenResponseDataSchema = _chunkD4TOPSHVcjs.RedactedWrittenResponseDataSchema; exports.SPEECH_ASSESSMENT_MAX_WORDS = _chunkD4TOPSHVcjs.SPEECH_ASSESSMENT_MAX_WORDS; exports.StimulusSchema = _chunk2CV6NU32cjs.StimulusSchema; exports.TIMELINE_MAX_CHAPTERS = _chunk2CV6NU32cjs.TIMELINE_MAX_CHAPTERS; exports.TIMELINE_MAX_ITEMS = _chunk2CV6NU32cjs.TIMELINE_MAX_ITEMS; exports.TIMELINE_MAX_QUIZZES = _chunk2CV6NU32cjs.TIMELINE_MAX_QUIZZES; exports.TIMELINE_MAX_TITLE_LENGTH = _chunk2CV6NU32cjs.TIMELINE_MAX_TITLE_LENGTH; exports.TextMatchPolicySchema = _chunkD4TOPSHVcjs.TextMatchPolicySchema; exports.TimelineChapterSchema = _chunk2CV6NU32cjs.TimelineChapterSchema; exports.TimelineCueSchema = _chunk2CV6NU32cjs.TimelineCueSchema; exports.UnknownActivityTypeError = _chunkD4TOPSHVcjs.UnknownActivityTypeError; exports.WrittenResponseDataSchema = _chunkD4TOPSHVcjs.WrittenResponseDataSchema; exports.WrittenResponseRubricCriterionSchema = _chunkD4TOPSHVcjs.WrittenResponseRubricCriterionSchema; exports.WrittenResponseRubricSchema = _chunkD4TOPSHVcjs.WrittenResponseRubricSchema; exports.XAPIVerb = _chunkEOFWSGLUcjs.XAPIVerb; exports.XAPI_VERB_DISPLAY = _chunkEOFWSGLUcjs.XAPI_VERB_DISPLAY; exports.aiAllowedByContent = aiAllowedByContent; exports.aiExplanationRequest = aiExplanationRequest; exports.aiGradeOf = aiGradeOf; exports.aiHintRequest = aiHintRequest; exports.aiSupports = aiSupports; exports.alignDictation = _chunkD4TOPSHVcjs.alignDictation; exports.alignReadAloud = _chunkCOBK2RUXcjs.alignReadAloud; exports.assertRedacted = assertRedacted; exports.assertRedactedItemGroup = assertRedactedItemGroup; exports.buildAiFacts = buildAiFacts; exports.canonicalJson = canonicalJson; exports.checkAiExplanation = checkAiExplanation; exports.checkAiHint = checkAiHint; exports.classifyBand = _chunkCOBK2RUXcjs.classifyBand; exports.composeAssessmentScore = _chunkCOBK2RUXcjs.composeAssessmentScore; exports.composeTimelineScore = composeTimelineScore; exports.computePassThreshold = _chunkCOBK2RUXcjs.computePassThreshold; exports.contentHash = contentHash; exports.countWords = _chunkD4TOPSHVcjs.countWords; exports.createDraft = createDraft; exports.createInteractiveVideoDraft = createInteractiveVideoDraft; exports.createItemGroupDraft = createItemGroupDraft; exports.defineActivityType = _chunkD4TOPSHVcjs.defineActivityType; exports.dictationJsonSchema = _chunk2CV6NU32cjs.dictationJsonSchema; exports.dictationReferenceWords = _chunkD4TOPSHVcjs.dictationReferenceWords; exports.dictationType = _chunkD4TOPSHVcjs.dictationType; exports.diffDictationChars = _chunkCOBK2RUXcjs.diffDictationChars; exports.diffResponses = diffResponses; exports.entryKeyOf = entryKeyOf; exports.evaluate = _chunkCOBK2RUXcjs.evaluate; exports.fillInTheBlanksJsonSchema = _chunk2CV6NU32cjs.fillInTheBlanksJsonSchema; exports.fillInTheBlanksType = _chunkD4TOPSHVcjs.fillInTheBlanksType; exports.fingerprint = fingerprint; exports.flattenSequence = flattenSequence; exports.gapSelectJsonSchema = _chunk2CV6NU32cjs.gapSelectJsonSchema; exports.gapSelectType = _chunkD4TOPSHVcjs.gapSelectType; exports.getActivityTypeDescriptor = _chunkD4TOPSHVcjs.getActivityTypeDescriptor; exports.gradeFromRubric = _chunkCOBK2RUXcjs.gradeFromRubric; exports.gradeReadAloud = _chunkCOBK2RUXcjs.gradeReadAloud; exports.gte = _chunkCOBK2RUXcjs.gte; exports.hasGrade = _chunkCOBK2RUXcjs.hasGrade; exports.hashSeed = hashSeed; exports.hintRevealsAnswer = hintRevealsAnswer; exports.inspectWav = _chunkCOBK2RUXcjs.inspectWav; exports.isInteractiveVideoItemType = _chunk2CV6NU32cjs.isInteractiveVideoItemType; exports.isItemGroup = isItemGroup; exports.itemGroupJsonSchema = _chunk2CV6NU32cjs.itemGroupJsonSchema; exports.jsonSchemaFor = _chunk2CV6NU32cjs.jsonSchemaFor; exports.levenshteinDistance = _chunkD4TOPSHVcjs.levenshteinDistance; exports.matchText = _chunkD4TOPSHVcjs.matchText; exports.multipleChoiceJsonSchema = _chunk2CV6NU32cjs.multipleChoiceJsonSchema; exports.multipleChoiceType = _chunkD4TOPSHVcjs.multipleChoiceType; exports.outcomeFromGrade = _chunkCOBK2RUXcjs.outcomeFromGrade; exports.outcomeFromUnscorable = _chunkCOBK2RUXcjs.outcomeFromUnscorable; exports.planAttempt = planAttempt; exports.planMediaBudgets = planMediaBudgets; exports.readAiTextResult = readAiTextResult; exports.readAloudJsonSchema = _chunk2CV6NU32cjs.readAloudJsonSchema; exports.readAloudType = _chunkD4TOPSHVcjs.readAloudType; exports.readMediaProgress = readMediaProgress; exports.redact = redact; exports.redactItemGroup = redactItemGroup; exports.registerActivityType = _chunkD4TOPSHVcjs.registerActivityType; exports.registeredActivityTypes = _chunkD4TOPSHVcjs.registeredActivityTypes; exports.resolvePlaybackPolicy = resolvePlaybackPolicy; exports.restoreAttemptState = restoreAttemptState; exports.restoreMediaPlayLedger = restoreMediaPlayLedger; exports.roundGrade = _chunkCOBK2RUXcjs.roundGrade; exports.score = _chunkCOBK2RUXcjs.score; exports.scoredItemsFromPlan = scoredItemsFromPlan; exports.seededShuffle = seededShuffle; exports.serializeAttemptState = serializeAttemptState; exports.serializeMediaPlayLedger = serializeMediaPlayLedger; exports.slotMediaKey = slotMediaKey; exports.stimulusJsonSchema = _chunk2CV6NU32cjs.stimulusJsonSchema; exports.stimulusMediaKey = stimulusMediaKey; exports.validateActivity = _chunk2CV6NU32cjs.validateActivity; exports.validateDraft = validateDraft; exports.validateItemGroup = _chunk2CV6NU32cjs.validateItemGroup; exports.validateItemGroupDraft = validateItemGroupDraft; exports.validateSpeechAssessment = _chunkCOBK2RUXcjs.validateSpeechAssessment; exports.validateXAPIStatement = _chunkEOFWSGLUcjs.validateXAPIStatement; exports.verifyAttemptPlan = verifyAttemptPlan; exports.writtenResponseJsonSchema = _chunk2CV6NU32cjs.writtenResponseJsonSchema; exports.writtenResponseType = _chunkD4TOPSHVcjs.writtenResponseType; exports.xAPIBuilder = _chunkEOFWSGLUcjs.xAPIBuilder; exports.xapiDefinitionFor = _chunkEOFWSGLUcjs.xapiDefinitionFor;
|
|
1788
|
+
|
|
1789
|
+
|
|
1790
|
+
|
|
1791
|
+
|
|
1792
|
+
exports.AI_EXPLANATION_TYPES = _chunkFVZJ4X3Ycjs.AI_EXPLANATION_TYPES; exports.AI_HINT_TYPES = _chunkFVZJ4X3Ycjs.AI_HINT_TYPES; exports.AI_TEXT_MAX_LENGTH = _chunkFVZJ4X3Ycjs.AI_TEXT_MAX_LENGTH; exports.ActivitySchemaError = _chunkD4TOPSHVcjs.ActivitySchemaError; exports.AiPermissionsSchema = _chunkD4TOPSHVcjs.AiPermissionsSchema; exports.BlankConfigSchema = _chunkD4TOPSHVcjs.BlankConfigSchema; exports.DEFAULT_PASS_THRESHOLD = _chunkCOBK2RUXcjs.DEFAULT_PASS_THRESHOLD; exports.DICTATION_MAX_ACCEPTED_TRANSCRIPTS = _chunkD4TOPSHVcjs.DICTATION_MAX_ACCEPTED_TRANSCRIPTS; exports.DICTATION_MAX_EQUIVALENCES = _chunkD4TOPSHVcjs.DICTATION_MAX_EQUIVALENCES; exports.DICTATION_MAX_EQUIVALENCE_LENGTH = _chunkD4TOPSHVcjs.DICTATION_MAX_EQUIVALENCE_LENGTH; exports.DICTATION_MAX_TEXT_LENGTH = _chunkD4TOPSHVcjs.DICTATION_MAX_TEXT_LENGTH; exports.DICTATION_MAX_TRANSCRIPT_LENGTH = _chunkD4TOPSHVcjs.DICTATION_MAX_TRANSCRIPT_LENGTH; exports.DeferredScoringError = _chunkD4TOPSHVcjs.DeferredScoringError; exports.DictationDataSchema = _chunkD4TOPSHVcjs.DictationDataSchema; exports.DictationEquivalenceSchema = _chunkD4TOPSHVcjs.DictationEquivalenceSchema; exports.DictationSlowMediaSchema = _chunkD4TOPSHVcjs.DictationSlowMediaSchema; exports.DictationToleranceSchema = _chunkD4TOPSHVcjs.DictationToleranceSchema; exports.FeedbackSchema = _chunkD4TOPSHVcjs.FeedbackSchema; exports.FillInTheBlanksDataSchema = _chunkD4TOPSHVcjs.FillInTheBlanksDataSchema; exports.GapSelectBankSchema = _chunkD4TOPSHVcjs.GapSelectBankSchema; exports.GapSelectChoiceSchema = _chunkD4TOPSHVcjs.GapSelectChoiceSchema; exports.GapSelectDataSchema = _chunkD4TOPSHVcjs.GapSelectDataSchema; exports.GapSelectGapSchema = _chunkD4TOPSHVcjs.GapSelectGapSchema; exports.INTERACTIVE_VIDEO_ITEM_TYPES = _chunk2CV6NU32cjs.INTERACTIVE_VIDEO_ITEM_TYPES; exports.ItemGroupSchema = _chunk2CV6NU32cjs.ItemGroupSchema; exports.MediaPlaybackSchema = _chunkD4TOPSHVcjs.MediaPlaybackSchema; exports.MediaSchema = _chunkD4TOPSHVcjs.MediaSchema; exports.MediaTimelineSchema = _chunk2CV6NU32cjs.MediaTimelineSchema; exports.MediaTrackSchema = _chunkD4TOPSHVcjs.MediaTrackSchema; exports.MediaUrlSchema = _chunkD4TOPSHVcjs.MediaUrlSchema; exports.MultipleChoiceDataSchema = _chunkD4TOPSHVcjs.MultipleChoiceDataSchema; exports.MultipleChoiceOptionMediaSchema = _chunkD4TOPSHVcjs.MultipleChoiceOptionMediaSchema; exports.MultipleChoiceOptionSchema = _chunkD4TOPSHVcjs.MultipleChoiceOptionSchema; exports.NativeControlHintSchema = _chunkD4TOPSHVcjs.NativeControlHintSchema; exports.OPEN_DELIVERY_POLICY = OPEN_DELIVERY_POLICY; exports.READ_ALOUD_MAX_DIMENSION_WEIGHT = _chunkD4TOPSHVcjs.READ_ALOUD_MAX_DIMENSION_WEIGHT; exports.READ_ALOUD_MAX_REFERENCE_LENGTH = _chunkD4TOPSHVcjs.READ_ALOUD_MAX_REFERENCE_LENGTH; exports.READ_ALOUD_MAX_SECONDS = _chunkD4TOPSHVcjs.READ_ALOUD_MAX_SECONDS; exports.READ_ALOUD_MAX_TAKES = _chunkD4TOPSHVcjs.READ_ALOUD_MAX_TAKES; exports.ReadAloudDataSchema = _chunkD4TOPSHVcjs.ReadAloudDataSchema; exports.ReadAloudSlowMediaSchema = _chunkD4TOPSHVcjs.ReadAloudSlowMediaSchema; exports.RedactedBlankConfigSchema = _chunkD4TOPSHVcjs.RedactedBlankConfigSchema; exports.RedactedDictationDataSchema = _chunkD4TOPSHVcjs.RedactedDictationDataSchema; exports.RedactedDictationSlowMediaSchema = _chunkD4TOPSHVcjs.RedactedDictationSlowMediaSchema; exports.RedactedFillInTheBlanksDataSchema = _chunkD4TOPSHVcjs.RedactedFillInTheBlanksDataSchema; exports.RedactedGapSelectBankSchema = _chunkD4TOPSHVcjs.RedactedGapSelectBankSchema; exports.RedactedGapSelectChoiceSchema = _chunkD4TOPSHVcjs.RedactedGapSelectChoiceSchema; exports.RedactedGapSelectDataSchema = _chunkD4TOPSHVcjs.RedactedGapSelectDataSchema; exports.RedactedGapSelectGapSchema = _chunkD4TOPSHVcjs.RedactedGapSelectGapSchema; exports.RedactedItemGroupSchema = _chunk2CV6NU32cjs.RedactedItemGroupSchema; exports.RedactedMediaSchema = _chunkD4TOPSHVcjs.RedactedMediaSchema; exports.RedactedMultipleChoiceDataSchema = _chunkD4TOPSHVcjs.RedactedMultipleChoiceDataSchema; exports.RedactedMultipleChoiceOptionMediaSchema = _chunkD4TOPSHVcjs.RedactedMultipleChoiceOptionMediaSchema; exports.RedactedMultipleChoiceOptionSchema = _chunkD4TOPSHVcjs.RedactedMultipleChoiceOptionSchema; exports.RedactedReadAloudDataSchema = _chunkD4TOPSHVcjs.RedactedReadAloudDataSchema; exports.RedactedScoringError = _chunkD4TOPSHVcjs.RedactedScoringError; exports.RedactedStimulusSchema = _chunk2CV6NU32cjs.RedactedStimulusSchema; exports.RedactedWrittenResponseDataSchema = _chunkD4TOPSHVcjs.RedactedWrittenResponseDataSchema; exports.SPEECH_ASSESSMENT_MAX_WORDS = _chunkD4TOPSHVcjs.SPEECH_ASSESSMENT_MAX_WORDS; exports.StimulusSchema = _chunk2CV6NU32cjs.StimulusSchema; exports.TIMELINE_MAX_CHAPTERS = _chunk2CV6NU32cjs.TIMELINE_MAX_CHAPTERS; exports.TIMELINE_MAX_ITEMS = _chunk2CV6NU32cjs.TIMELINE_MAX_ITEMS; exports.TIMELINE_MAX_QUIZZES = _chunk2CV6NU32cjs.TIMELINE_MAX_QUIZZES; exports.TIMELINE_MAX_TITLE_LENGTH = _chunk2CV6NU32cjs.TIMELINE_MAX_TITLE_LENGTH; exports.TextMatchPolicySchema = _chunkD4TOPSHVcjs.TextMatchPolicySchema; exports.TimelineChapterSchema = _chunk2CV6NU32cjs.TimelineChapterSchema; exports.TimelineCueSchema = _chunk2CV6NU32cjs.TimelineCueSchema; exports.UnknownActivityTypeError = _chunkD4TOPSHVcjs.UnknownActivityTypeError; exports.WrittenResponseDataSchema = _chunkD4TOPSHVcjs.WrittenResponseDataSchema; exports.WrittenResponseRubricCriterionSchema = _chunkD4TOPSHVcjs.WrittenResponseRubricCriterionSchema; exports.WrittenResponseRubricSchema = _chunkD4TOPSHVcjs.WrittenResponseRubricSchema; exports.XAPIVerb = _chunkEOFWSGLUcjs.XAPIVerb; exports.XAPI_VERB_DISPLAY = _chunkEOFWSGLUcjs.XAPI_VERB_DISPLAY; exports.aiAllowedByContent = _chunkFVZJ4X3Ycjs.aiAllowedByContent; exports.aiExplanationRequest = _chunkFVZJ4X3Ycjs.aiExplanationRequest; exports.aiGradeOf = _chunkFVZJ4X3Ycjs.aiGradeOf; exports.aiHintRequest = _chunkFVZJ4X3Ycjs.aiHintRequest; exports.aiSupports = _chunkFVZJ4X3Ycjs.aiSupports; exports.alignDictation = _chunkD4TOPSHVcjs.alignDictation; exports.alignReadAloud = _chunkCOBK2RUXcjs.alignReadAloud; exports.assertRedacted = assertRedacted; exports.assertRedactedItemGroup = assertRedactedItemGroup; exports.buildAiFacts = _chunkFVZJ4X3Ycjs.buildAiFacts; exports.canonicalJson = canonicalJson; exports.checkAiExplanation = _chunkFVZJ4X3Ycjs.checkAiExplanation; exports.checkAiHint = _chunkFVZJ4X3Ycjs.checkAiHint; exports.classifyBand = _chunkCOBK2RUXcjs.classifyBand; exports.combineDeliveryPolicies = combineDeliveryPolicies; exports.composeAssessmentScore = _chunkCOBK2RUXcjs.composeAssessmentScore; exports.composeTimelineScore = composeTimelineScore; exports.computePassThreshold = _chunkCOBK2RUXcjs.computePassThreshold; exports.contentHash = contentHash; exports.countWords = _chunkD4TOPSHVcjs.countWords; exports.createDraft = createDraft; exports.createInteractiveVideoDraft = createInteractiveVideoDraft; exports.createItemGroupDraft = createItemGroupDraft; exports.defineActivityType = _chunkD4TOPSHVcjs.defineActivityType; exports.dictationJsonSchema = _chunk2CV6NU32cjs.dictationJsonSchema; exports.dictationReferenceWords = _chunkD4TOPSHVcjs.dictationReferenceWords; exports.dictationType = _chunkD4TOPSHVcjs.dictationType; exports.diffDictationChars = _chunkCOBK2RUXcjs.diffDictationChars; exports.diffResponses = diffResponses; exports.entryKeyOf = entryKeyOf; exports.evaluate = _chunkCOBK2RUXcjs.evaluate; exports.fillInTheBlanksJsonSchema = _chunk2CV6NU32cjs.fillInTheBlanksJsonSchema; exports.fillInTheBlanksType = _chunkD4TOPSHVcjs.fillInTheBlanksType; exports.fingerprint = fingerprint; exports.flattenSequence = flattenSequence; exports.gapSelectJsonSchema = _chunk2CV6NU32cjs.gapSelectJsonSchema; exports.gapSelectType = _chunkD4TOPSHVcjs.gapSelectType; exports.getActivityTypeDescriptor = _chunkD4TOPSHVcjs.getActivityTypeDescriptor; exports.gradeFromRubric = _chunkCOBK2RUXcjs.gradeFromRubric; exports.gradeReadAloud = _chunkCOBK2RUXcjs.gradeReadAloud; exports.gte = _chunkCOBK2RUXcjs.gte; exports.hasGrade = _chunkCOBK2RUXcjs.hasGrade; exports.hashSeed = hashSeed; exports.hintRevealsAnswer = _chunkFVZJ4X3Ycjs.hintRevealsAnswer; exports.inspectWav = _chunkCOBK2RUXcjs.inspectWav; exports.isInteractiveVideoItemType = _chunk2CV6NU32cjs.isInteractiveVideoItemType; exports.isItemGroup = isItemGroup; exports.itemGroupJsonSchema = _chunk2CV6NU32cjs.itemGroupJsonSchema; exports.jsonSchemaFor = _chunk2CV6NU32cjs.jsonSchemaFor; exports.levenshteinDistance = _chunkD4TOPSHVcjs.levenshteinDistance; exports.matchText = _chunkD4TOPSHVcjs.matchText; exports.multipleChoiceJsonSchema = _chunk2CV6NU32cjs.multipleChoiceJsonSchema; exports.multipleChoiceType = _chunkD4TOPSHVcjs.multipleChoiceType; exports.outcomeFromGrade = _chunkCOBK2RUXcjs.outcomeFromGrade; exports.outcomeFromUnscorable = _chunkCOBK2RUXcjs.outcomeFromUnscorable; exports.planAttempt = planAttempt; exports.planMediaBudgets = planMediaBudgets; exports.readAiTextResult = _chunkFVZJ4X3Ycjs.readAiTextResult; exports.readAloudJsonSchema = _chunk2CV6NU32cjs.readAloudJsonSchema; exports.readAloudType = _chunkD4TOPSHVcjs.readAloudType; exports.readMediaProgress = readMediaProgress; exports.redact = redact; exports.redactItemGroup = redactItemGroup; exports.registerActivityType = _chunkD4TOPSHVcjs.registerActivityType; exports.registeredActivityTypes = _chunkD4TOPSHVcjs.registeredActivityTypes; exports.resolveDeliveryPolicy = resolveDeliveryPolicy; exports.resolvePlaybackPolicy = resolvePlaybackPolicy; exports.restoreAttemptState = restoreAttemptState; exports.restoreMediaPlayLedger = restoreMediaPlayLedger; exports.roundGrade = _chunkCOBK2RUXcjs.roundGrade; exports.score = _chunkCOBK2RUXcjs.score; exports.scoredItemsFromPlan = scoredItemsFromPlan; exports.seededShuffle = seededShuffle; exports.serializeAttemptState = serializeAttemptState; exports.serializeMediaPlayLedger = serializeMediaPlayLedger; exports.slotMediaKey = slotMediaKey; exports.stimulusJsonSchema = _chunk2CV6NU32cjs.stimulusJsonSchema; exports.stimulusMediaKey = stimulusMediaKey; exports.validateActivity = _chunk2CV6NU32cjs.validateActivity; exports.validateDeliveryPolicy = validateDeliveryPolicy; exports.validateDraft = validateDraft; exports.validateItemGroup = _chunk2CV6NU32cjs.validateItemGroup; exports.validateItemGroupDraft = validateItemGroupDraft; exports.validateSpeechAssessment = _chunkCOBK2RUXcjs.validateSpeechAssessment; exports.validateXAPIStatement = _chunkEOFWSGLUcjs.validateXAPIStatement; exports.verifyAttemptPlan = verifyAttemptPlan; exports.writtenResponseJsonSchema = _chunk2CV6NU32cjs.writtenResponseJsonSchema; exports.writtenResponseType = _chunkD4TOPSHVcjs.writtenResponseType; exports.xAPIBuilder = _chunkEOFWSGLUcjs.xAPIBuilder; exports.xapiDefinitionFor = _chunkEOFWSGLUcjs.xapiDefinitionFor;
|
|
2056
1793
|
//# sourceMappingURL=index.cjs.map
|