@intellectif/lk-core 0.3.1 → 0.5.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.
Files changed (58) hide show
  1. package/dist/{activity-zdcAMtFB.d.cts → activity-wkzRemHx.d.cts} +113 -1
  2. package/dist/{activity-zdcAMtFB.d.ts → activity-wkzRemHx.d.ts} +113 -1
  3. package/dist/{chunk-QOAORTA4.cjs → chunk-4JR3UXX6.cjs} +51 -2
  4. package/dist/chunk-4JR3UXX6.cjs.map +1 -0
  5. package/dist/chunk-DUQVGLQ3.js +333 -0
  6. package/dist/chunk-DUQVGLQ3.js.map +1 -0
  7. package/dist/chunk-FCM5VJBS.cjs +187 -0
  8. package/dist/chunk-FCM5VJBS.cjs.map +1 -0
  9. package/dist/chunk-LSHDNA2T.js +187 -0
  10. package/dist/chunk-LSHDNA2T.js.map +1 -0
  11. package/dist/{chunk-5GJJHGY5.js → chunk-NUCEUU4P.js} +50 -1
  12. package/dist/chunk-NUCEUU4P.js.map +1 -0
  13. package/dist/{chunk-RUGIOQZY.cjs → chunk-R7PDJBRX.cjs} +29 -6
  14. package/dist/chunk-R7PDJBRX.cjs.map +1 -0
  15. package/dist/chunk-SM5HUGYU.cjs +333 -0
  16. package/dist/chunk-SM5HUGYU.cjs.map +1 -0
  17. package/dist/{chunk-HS7BYCGE.js → chunk-WV5WQ3SZ.js} +29 -6
  18. package/dist/chunk-WV5WQ3SZ.js.map +1 -0
  19. package/dist/index-BKyZrd94.d.cts +732 -0
  20. package/dist/index-CLmXzBhB.d.ts +732 -0
  21. package/dist/index.cjs +206 -15
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.d.cts +182 -6
  24. package/dist/index.d.ts +182 -6
  25. package/dist/index.js +203 -12
  26. package/dist/index.js.map +1 -1
  27. package/dist/schemas.cjs +17 -4
  28. package/dist/schemas.cjs.map +1 -1
  29. package/dist/schemas.d.cts +3 -460
  30. package/dist/schemas.d.ts +3 -460
  31. package/dist/schemas.js +16 -3
  32. package/dist/scoring.cjs +11 -4
  33. package/dist/scoring.cjs.map +1 -1
  34. package/dist/scoring.d.cts +199 -4
  35. package/dist/scoring.d.ts +199 -4
  36. package/dist/scoring.js +10 -3
  37. package/dist/xapi.cjs +5 -3
  38. package/dist/xapi.cjs.map +1 -1
  39. package/dist/xapi.d.cts +26 -2
  40. package/dist/xapi.d.ts +26 -2
  41. package/dist/xapi.js +6 -4
  42. package/package.json +38 -15
  43. package/dist/chunk-3YAVDV5F.js +0 -47
  44. package/dist/chunk-3YAVDV5F.js.map +0 -1
  45. package/dist/chunk-55O4M45K.js +0 -57
  46. package/dist/chunk-55O4M45K.js.map +0 -1
  47. package/dist/chunk-5GJJHGY5.js.map +0 -1
  48. package/dist/chunk-HS7BYCGE.js.map +0 -1
  49. package/dist/chunk-PIMX4B4D.cjs +0 -47
  50. package/dist/chunk-PIMX4B4D.cjs.map +0 -1
  51. package/dist/chunk-QOAORTA4.cjs.map +0 -1
  52. package/dist/chunk-QSVBYTNM.js +0 -94
  53. package/dist/chunk-QSVBYTNM.js.map +0 -1
  54. package/dist/chunk-RUGIOQZY.cjs.map +0 -1
  55. package/dist/chunk-THSZMZND.cjs +0 -94
  56. package/dist/chunk-THSZMZND.cjs.map +0 -1
  57. package/dist/chunk-YNTYWHZI.cjs +0 -57
  58. package/dist/chunk-YNTYWHZI.cjs.map +0 -1
package/dist/schemas.d.ts CHANGED
@@ -1,460 +1,3 @@
1
- import { e as ActivityType, o as ValidationResult, a as ActivityDataMap } from './activity-zdcAMtFB.js';
2
- import { z } from 'zod/v4';
3
-
4
- /**
5
- * Optional authored "overall feedback" shown after submission, selected by
6
- * whether the learner passed (h5p-style overall feedback). Both fields are
7
- * optional; non-empty when present.
8
- */
9
- declare const FeedbackSchema: z.ZodObject<{
10
- correct: z.ZodOptional<z.ZodString>;
11
- incorrect: z.ZodOptional<z.ZodString>;
12
- }, z.core.$loose>;
13
-
14
- /**
15
- * Zod schema for a `TextMatchPolicy` — the opt-in matching tolerances a blank
16
- * may declare. Every default reproduces the v1 trim + case-fold semantics.
17
- */
18
- declare const TextMatchPolicySchema: z.ZodObject<{
19
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
20
- trim: z.ZodOptional<z.ZodBoolean>;
21
- normalize: z.ZodOptional<z.ZodEnum<{
22
- none: "none";
23
- NFC: "NFC";
24
- NFKC: "NFKC";
25
- }>>;
26
- foldDiacritics: z.ZodOptional<z.ZodBoolean>;
27
- collapseInnerWhitespace: z.ZodOptional<z.ZodBoolean>;
28
- ignorePunctuation: z.ZodOptional<z.ZodBoolean>;
29
- levenshtein: z.ZodOptional<z.ZodNumber>;
30
- locale: z.ZodOptional<z.ZodString>;
31
- }, z.core.$loose>;
32
- /**
33
- * Zod schema for a single fill-in-the-blank slot configuration. Loose:
34
- * unknown keys are preserved through validation. Accepted answers must
35
- * contain non-whitespace characters — a whitespace-only accepted answer
36
- * normalizes to the empty string and would mark an empty response correct.
37
- */
38
- declare const BlankConfigSchema: z.ZodObject<{
39
- id: z.ZodString;
40
- acceptedAnswers: z.ZodArray<z.ZodString>;
41
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
42
- trimWhitespace: z.ZodOptional<z.ZodBoolean>;
43
- match: z.ZodOptional<z.ZodObject<{
44
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
45
- trim: z.ZodOptional<z.ZodBoolean>;
46
- normalize: z.ZodOptional<z.ZodEnum<{
47
- none: "none";
48
- NFC: "NFC";
49
- NFKC: "NFKC";
50
- }>>;
51
- foldDiacritics: z.ZodOptional<z.ZodBoolean>;
52
- collapseInnerWhitespace: z.ZodOptional<z.ZodBoolean>;
53
- ignorePunctuation: z.ZodOptional<z.ZodBoolean>;
54
- levenshtein: z.ZodOptional<z.ZodNumber>;
55
- locale: z.ZodOptional<z.ZodString>;
56
- }, z.core.$loose>>;
57
- hint: z.ZodOptional<z.ZodString>;
58
- feedback: z.ZodOptional<z.ZodString>;
59
- }, z.core.$loose>;
60
- /**
61
- * Zod schema validating the full Fill-in-the-Blanks activity data contract.
62
- * Loose at every level: unknown keys are preserved, never stripped (B7).
63
- *
64
- * The refinement enforces a true one-to-one correspondence between `{{id}}`
65
- * placeholders and `blanks[].id`: every blank id appears EXACTLY ONCE in the
66
- * passage and exactly once in `blanks[]`. (The previous set-based check let
67
- * duplicate placeholders and duplicate blank configs through, corrupting the
68
- * partial-score denominator and per-item details.)
69
- */
70
- declare const FillInTheBlanksDataSchema: z.ZodObject<{
71
- schemaVersion: z.ZodLiteral<"1.0">;
72
- type: z.ZodLiteral<"fill-in-the-blanks">;
73
- id: z.ZodString;
74
- title: z.ZodString;
75
- passage: z.ZodString;
76
- passageHtml: z.ZodOptional<z.ZodString>;
77
- blanks: z.ZodArray<z.ZodObject<{
78
- id: z.ZodString;
79
- acceptedAnswers: z.ZodArray<z.ZodString>;
80
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
81
- trimWhitespace: z.ZodOptional<z.ZodBoolean>;
82
- match: z.ZodOptional<z.ZodObject<{
83
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
84
- trim: z.ZodOptional<z.ZodBoolean>;
85
- normalize: z.ZodOptional<z.ZodEnum<{
86
- none: "none";
87
- NFC: "NFC";
88
- NFKC: "NFKC";
89
- }>>;
90
- foldDiacritics: z.ZodOptional<z.ZodBoolean>;
91
- collapseInnerWhitespace: z.ZodOptional<z.ZodBoolean>;
92
- ignorePunctuation: z.ZodOptional<z.ZodBoolean>;
93
- levenshtein: z.ZodOptional<z.ZodNumber>;
94
- locale: z.ZodOptional<z.ZodString>;
95
- }, z.core.$loose>>;
96
- hint: z.ZodOptional<z.ZodString>;
97
- feedback: z.ZodOptional<z.ZodString>;
98
- }, z.core.$loose>>;
99
- scoringStrategy: z.ZodEnum<{
100
- "all-or-nothing": "all-or-nothing";
101
- partial: "partial";
102
- }>;
103
- media: z.ZodOptional<z.ZodObject<{
104
- type: z.ZodEnum<{
105
- image: "image";
106
- audio: "audio";
107
- video: "video";
108
- embed: "embed";
109
- }>;
110
- url: z.ZodUnion<readonly [z.ZodURL, z.ZodString]>;
111
- alt: z.ZodOptional<z.ZodString>;
112
- captionsUrl: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodString]>>;
113
- }, z.core.$loose>>;
114
- feedback: z.ZodOptional<z.ZodObject<{
115
- correct: z.ZodOptional<z.ZodString>;
116
- incorrect: z.ZodOptional<z.ZodString>;
117
- }, z.core.$loose>>;
118
- passThreshold: z.ZodOptional<z.ZodNumber>;
119
- locale: z.ZodOptional<z.ZodString>;
120
- learningObjectives: z.ZodOptional<z.ZodArray<z.ZodString>>;
121
- difficultyLevel: z.ZodOptional<z.ZodLiteral<1 | 2 | 3 | 4 | 5>>;
122
- }, z.core.$loose>;
123
-
124
- /**
125
- * JSON Schema (Draft 7) representation of the Multiple Choice activity data
126
- * contract, generated natively by Zod 4. Draft 7 is mandated by Requirement
127
- * 2.2 for the widest AI-prompt / OpenAPI tooling compatibility. The semantic
128
- * `.refine()` guards are not representable in JSON Schema and are
129
- * intentionally omitted — the export captures the *structural* contract only.
130
- * Since v0.3 the source schemas are loose, so these no longer emit
131
- * `additionalProperties: false` — the JSON Schema and `validateActivity` now
132
- * agree on unknown-key handling.
133
- */
134
- declare const multipleChoiceJsonSchema: z.core.JSONSchema.JSONSchema;
135
- /**
136
- * JSON Schema (Draft 7) representation of the Fill-in-the-Blanks activity data
137
- * contract, generated natively by Zod 4. Structural contract only (semantic
138
- * `.refine()` guards are Zod-only and not representable in JSON Schema).
139
- */
140
- declare const fillInTheBlanksJsonSchema: z.core.JSONSchema.JSONSchema;
141
- /**
142
- * JSON Schema (Draft 7) representation of the Written Response activity data
143
- * contract. Structural contract only.
144
- */
145
- declare const writtenResponseJsonSchema: z.core.JSONSchema.JSONSchema;
146
- /**
147
- * Derives the JSON Schema (Draft 7) for any REGISTERED activity type — the
148
- * live, registry-backed replacement for the static per-type exports above,
149
- * and the building block for AI generation pipelines (R6.1): pass the result
150
- * as a structured-output schema so a model can only emit valid items.
151
- *
152
- * @throws UnknownActivityTypeError when `type` has no registered descriptor.
153
- */
154
- declare function jsonSchemaFor(type: string): Record<string, unknown>;
155
-
156
- /**
157
- * Optional media attached to an activity, rendered above the question or
158
- * passage — e.g. a recording to listen to, or an embedded video to watch
159
- * before answering. URL-only by design: hosting/delivery (S3/CDN, or the
160
- * provider's own embed for `embed`) is the consuming app's responsibility
161
- * (see requirements "Non-Goals and Shared Responsibility").
162
- *
163
- * - `image`: rendered as `<img>` — `alt` is REQUIRED (WCAG 1.1.1 / Req 14.5).
164
- * - `audio` / `video`: rendered with native controls; `alt` is an optional
165
- * accessible label; `captionsUrl` points at a WebVTT `<track>`. `url` must
166
- * be a direct media file (NOT a YouTube/Vimeo page — use `embed` for those).
167
- * - `embed`: rendered as a sandboxed `<iframe>` for provider players
168
- * (YouTube/Vimeo/etc.). `url` MUST be the provider's *embeddable* URL
169
- * (e.g. `https://www.youtube.com/embed/<id>`). `alt` is REQUIRED and used
170
- * as the iframe's accessible `title` (WCAG 4.1.2 / 2.4.1).
171
- */
172
- /**
173
- * Media URL policy (security-reviewed): absolute URLs must use `https:`,
174
- * `http:`, `data:`, or `blob:`; root-relative paths (`/media/x.mp3`) are
175
- * allowed for same-origin hosting. Everything else — notably `javascript:`,
176
- * `file:`, `ftp:` — is rejected: these URLs land in `src` attributes
177
- * (including an iframe for `embed`), so an unvetted scheme is a stored-XSS
178
- * vector in every consuming app.
179
- */
180
- declare const MediaUrlSchema: z.ZodUnion<readonly [z.ZodURL, z.ZodString]>;
181
- declare const MediaSchema: z.ZodObject<{
182
- type: z.ZodEnum<{
183
- image: "image";
184
- audio: "audio";
185
- video: "video";
186
- embed: "embed";
187
- }>;
188
- url: z.ZodUnion<readonly [z.ZodURL, z.ZodString]>;
189
- alt: z.ZodOptional<z.ZodString>;
190
- captionsUrl: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodString]>>;
191
- }, z.core.$loose>;
192
-
193
- /**
194
- * Zod schema for a single Multiple Choice option. Loose: unknown keys are
195
- * preserved through validation (forward-compat / consumer sidecars — B7).
196
- */
197
- declare const MultipleChoiceOptionSchema: z.ZodObject<{
198
- id: z.ZodString;
199
- text: z.ZodString;
200
- isCorrect: z.ZodBoolean;
201
- feedback: z.ZodOptional<z.ZodString>;
202
- }, z.core.$loose>;
203
- /**
204
- * Zod schema validating the full Multiple Choice activity data contract.
205
- * Loose at every level: unknown keys are preserved, never stripped, so a
206
- * v0.3 runtime reading a future payload (or a consumer sidecar field) does
207
- * not silently delete data.
208
- *
209
- * Semantic guards: (1) at least one option must be correct, otherwise the
210
- * activity can never be answered correctly; (2) `mode: 'single'` must have
211
- * exactly one correct option — multiple correct options under single-select
212
- * make `showCorrectAnswers` and the xAPI correct-response ambiguous and mask
213
- * authoring errors; (3) option ids must be unique — the scorer looks options
214
- * up by id, so a duplicate id makes one option unscoreable. All are
215
- * unrepresentable in JSON Schema and are dropped from `toJSONSchema` output
216
- * by design.
217
- */
218
- declare const MultipleChoiceDataSchema: z.ZodObject<{
219
- schemaVersion: z.ZodLiteral<"1.0">;
220
- type: z.ZodLiteral<"multiple-choice">;
221
- id: z.ZodString;
222
- title: z.ZodString;
223
- question: z.ZodString;
224
- questionHtml: z.ZodOptional<z.ZodString>;
225
- mode: z.ZodEnum<{
226
- single: "single";
227
- multi: "multi";
228
- }>;
229
- options: z.ZodArray<z.ZodObject<{
230
- id: z.ZodString;
231
- text: z.ZodString;
232
- isCorrect: z.ZodBoolean;
233
- feedback: z.ZodOptional<z.ZodString>;
234
- }, z.core.$loose>>;
235
- scoringStrategy: z.ZodEnum<{
236
- "all-or-nothing": "all-or-nothing";
237
- partial: "partial";
238
- }>;
239
- media: z.ZodOptional<z.ZodObject<{
240
- type: z.ZodEnum<{
241
- image: "image";
242
- audio: "audio";
243
- video: "video";
244
- embed: "embed";
245
- }>;
246
- url: z.ZodUnion<readonly [z.ZodURL, z.ZodString]>;
247
- alt: z.ZodOptional<z.ZodString>;
248
- captionsUrl: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodString]>>;
249
- }, z.core.$loose>>;
250
- feedback: z.ZodOptional<z.ZodObject<{
251
- correct: z.ZodOptional<z.ZodString>;
252
- incorrect: z.ZodOptional<z.ZodString>;
253
- }, z.core.$loose>>;
254
- passThreshold: z.ZodOptional<z.ZodNumber>;
255
- shuffle: z.ZodOptional<z.ZodBoolean>;
256
- locale: z.ZodOptional<z.ZodString>;
257
- learningObjectives: z.ZodOptional<z.ZodArray<z.ZodString>>;
258
- difficultyLevel: z.ZodOptional<z.ZodLiteral<1 | 2 | 3 | 4 | 5>>;
259
- }, z.core.$loose>;
260
-
261
- /** A redacted Multiple Choice option: id and display text only — no `isCorrect`, no feedback. */
262
- declare const RedactedMultipleChoiceOptionSchema: z.ZodObject<{
263
- id: z.ZodString;
264
- text: z.ZodString;
265
- }, z.core.$strict>;
266
- /**
267
- * Redacted Multiple Choice data: renderable (question, mode, options to pick
268
- * from) with the answer key, per-option feedback, overall feedback, and the
269
- * scoring strategy removed. `scoringStrategy` is answer-key by design: MC
270
- * `partial` carries a wrong-selection penalty `all-or-nothing` does not, so
271
- * knowing the strategy tells a learner whether guessing is free.
272
- */
273
- declare const RedactedMultipleChoiceDataSchema: z.ZodObject<{
274
- type: z.ZodLiteral<"multiple-choice">;
275
- question: z.ZodString;
276
- questionHtml: z.ZodOptional<z.ZodString>;
277
- mode: z.ZodEnum<{
278
- single: "single";
279
- multi: "multi";
280
- }>;
281
- options: z.ZodArray<z.ZodObject<{
282
- id: z.ZodString;
283
- text: z.ZodString;
284
- }, z.core.$strict>>;
285
- shuffle: z.ZodOptional<z.ZodBoolean>;
286
- /** Marker distinguishing a redacted projection from full activity data. */
287
- redacted: z.ZodLiteral<true>;
288
- schemaVersion: z.ZodLiteral<"1.0">;
289
- id: z.ZodString;
290
- title: z.ZodString;
291
- media: z.ZodOptional<z.ZodObject<{
292
- type: z.ZodEnum<{
293
- image: "image";
294
- audio: "audio";
295
- video: "video";
296
- embed: "embed";
297
- }>;
298
- url: z.ZodUnion<readonly [z.ZodURL, z.ZodString]>;
299
- alt: z.ZodOptional<z.ZodString>;
300
- captionsUrl: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodString]>>;
301
- }, z.core.$loose>>;
302
- passThreshold: z.ZodOptional<z.ZodNumber>;
303
- locale: z.ZodOptional<z.ZodString>;
304
- learningObjectives: z.ZodOptional<z.ZodArray<z.ZodString>>;
305
- difficultyLevel: z.ZodOptional<z.ZodLiteral<1 | 2 | 3 | 4 | 5>>;
306
- }, z.core.$strict>;
307
- /** A redacted blank: id and hint only — no accepted answers, no matching rules, no feedback. */
308
- declare const RedactedBlankConfigSchema: z.ZodObject<{
309
- id: z.ZodString;
310
- hint: z.ZodOptional<z.ZodString>;
311
- }, z.core.$strict>;
312
- /** Redacted Fill-in-the-Blanks data: passage and blank slots, key removed. */
313
- declare const RedactedFillInTheBlanksDataSchema: z.ZodObject<{
314
- type: z.ZodLiteral<"fill-in-the-blanks">;
315
- passage: z.ZodString;
316
- passageHtml: z.ZodOptional<z.ZodString>;
317
- blanks: z.ZodArray<z.ZodObject<{
318
- id: z.ZodString;
319
- hint: z.ZodOptional<z.ZodString>;
320
- }, z.core.$strict>>;
321
- /** Marker distinguishing a redacted projection from full activity data. */
322
- redacted: z.ZodLiteral<true>;
323
- schemaVersion: z.ZodLiteral<"1.0">;
324
- id: z.ZodString;
325
- title: z.ZodString;
326
- media: z.ZodOptional<z.ZodObject<{
327
- type: z.ZodEnum<{
328
- image: "image";
329
- audio: "audio";
330
- video: "video";
331
- embed: "embed";
332
- }>;
333
- url: z.ZodUnion<readonly [z.ZodURL, z.ZodString]>;
334
- alt: z.ZodOptional<z.ZodString>;
335
- captionsUrl: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodString]>>;
336
- }, z.core.$loose>>;
337
- passThreshold: z.ZodOptional<z.ZodNumber>;
338
- locale: z.ZodOptional<z.ZodString>;
339
- learningObjectives: z.ZodOptional<z.ZodArray<z.ZodString>>;
340
- difficultyLevel: z.ZodOptional<z.ZodLiteral<1 | 2 | 3 | 4 | 5>>;
341
- }, z.core.$strict>;
342
- /**
343
- * Redacted Written Response data: the prompt, word bounds and rubric are
344
- * learner-visible (a rubric tells the learner what they are graded on);
345
- * authored pass/fail feedback is removed until the grade exists.
346
- */
347
- declare const RedactedWrittenResponseDataSchema: z.ZodObject<{
348
- type: z.ZodLiteral<"written-response">;
349
- prompt: z.ZodString;
350
- promptHtml: z.ZodOptional<z.ZodString>;
351
- minWords: z.ZodNumber;
352
- maxWords: z.ZodNumber;
353
- rubric: z.ZodOptional<z.ZodObject<{
354
- label: z.ZodOptional<z.ZodString>;
355
- criteria: z.ZodArray<z.ZodObject<{
356
- name: z.ZodString;
357
- description: z.ZodOptional<z.ZodString>;
358
- weight: z.ZodNumber;
359
- }, z.core.$loose>>;
360
- }, z.core.$loose>>;
361
- languageTarget: z.ZodOptional<z.ZodString>;
362
- /** Marker distinguishing a redacted projection from full activity data. */
363
- redacted: z.ZodLiteral<true>;
364
- schemaVersion: z.ZodLiteral<"1.0">;
365
- id: z.ZodString;
366
- title: z.ZodString;
367
- media: z.ZodOptional<z.ZodObject<{
368
- type: z.ZodEnum<{
369
- image: "image";
370
- audio: "audio";
371
- video: "video";
372
- embed: "embed";
373
- }>;
374
- url: z.ZodUnion<readonly [z.ZodURL, z.ZodString]>;
375
- alt: z.ZodOptional<z.ZodString>;
376
- captionsUrl: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodString]>>;
377
- }, z.core.$loose>>;
378
- passThreshold: z.ZodOptional<z.ZodNumber>;
379
- locale: z.ZodOptional<z.ZodString>;
380
- learningObjectives: z.ZodOptional<z.ZodArray<z.ZodString>>;
381
- difficultyLevel: z.ZodOptional<z.ZodLiteral<1 | 2 | 3 | 4 | 5>>;
382
- }, z.core.$strict>;
383
-
384
- /** Zod schema for a single rubric criterion. Loose: unknown keys preserved. */
385
- declare const WrittenResponseRubricCriterionSchema: z.ZodObject<{
386
- name: z.ZodString;
387
- description: z.ZodOptional<z.ZodString>;
388
- weight: z.ZodNumber;
389
- }, z.core.$loose>;
390
- /** Zod schema for a written-response grading rubric. Loose: unknown keys preserved. */
391
- declare const WrittenResponseRubricSchema: z.ZodObject<{
392
- label: z.ZodOptional<z.ZodString>;
393
- criteria: z.ZodArray<z.ZodObject<{
394
- name: z.ZodString;
395
- description: z.ZodOptional<z.ZodString>;
396
- weight: z.ZodNumber;
397
- }, z.core.$loose>>;
398
- }, z.core.$loose>;
399
- /**
400
- * Zod schema validating the Written Response activity data contract (Req 22).
401
- *
402
- * Wire-format constraints (Req 22.9): field names are locked for
403
- * byte-compatibility with consumer-stored rows, and the schema is loose at
404
- * EVERY level (Req 22.5) — unknown top-level keys, `promptHtml`, `rubric`
405
- * sidecars and any future fields survive `validateActivity` verbatim.
406
- */
407
- declare const WrittenResponseDataSchema: z.ZodObject<{
408
- schemaVersion: z.ZodLiteral<"1.0">;
409
- type: z.ZodLiteral<"written-response">;
410
- id: z.ZodString;
411
- title: z.ZodString;
412
- prompt: z.ZodString;
413
- promptHtml: z.ZodOptional<z.ZodString>;
414
- minWords: z.ZodNumber;
415
- maxWords: z.ZodNumber;
416
- rubric: z.ZodOptional<z.ZodObject<{
417
- label: z.ZodOptional<z.ZodString>;
418
- criteria: z.ZodArray<z.ZodObject<{
419
- name: z.ZodString;
420
- description: z.ZodOptional<z.ZodString>;
421
- weight: z.ZodNumber;
422
- }, z.core.$loose>>;
423
- }, z.core.$loose>>;
424
- languageTarget: z.ZodOptional<z.ZodString>;
425
- media: z.ZodOptional<z.ZodObject<{
426
- type: z.ZodEnum<{
427
- image: "image";
428
- audio: "audio";
429
- video: "video";
430
- embed: "embed";
431
- }>;
432
- url: z.ZodUnion<readonly [z.ZodURL, z.ZodString]>;
433
- alt: z.ZodOptional<z.ZodString>;
434
- captionsUrl: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodString]>>;
435
- }, z.core.$loose>>;
436
- feedback: z.ZodOptional<z.ZodObject<{
437
- correct: z.ZodOptional<z.ZodString>;
438
- incorrect: z.ZodOptional<z.ZodString>;
439
- }, z.core.$loose>>;
440
- passThreshold: z.ZodOptional<z.ZodNumber>;
441
- locale: z.ZodOptional<z.ZodString>;
442
- learningObjectives: z.ZodOptional<z.ZodArray<z.ZodString>>;
443
- difficultyLevel: z.ZodOptional<z.ZodLiteral<1 | 2 | 3 | 4 | 5>>;
444
- }, z.core.$loose>;
445
-
446
- /**
447
- * Validates raw activity data against the schema registered for the given
448
- * activity type (built-in or consumer-registered via `registerActivityType`).
449
- *
450
- * Unknown keys are PRESERVED, not stripped: every built-in schema is loose,
451
- * so consumer sidecar fields and forward-version fields survive validation
452
- * verbatim in the returned `data`.
453
- *
454
- * @returns `{ success: true, data }` with the typed, validated data, or
455
- * `{ success: false, errors }` with one entry per failed constraint.
456
- * @throws UnknownActivityTypeError when `type` has no registered descriptor.
457
- */
458
- declare function validateActivity<T extends ActivityType>(type: T, data: unknown): ValidationResult<ActivityDataMap[T]>;
459
-
460
- export { BlankConfigSchema, FeedbackSchema, FillInTheBlanksDataSchema, MediaSchema, MediaUrlSchema, MultipleChoiceDataSchema, MultipleChoiceOptionSchema, RedactedBlankConfigSchema, RedactedFillInTheBlanksDataSchema, RedactedMultipleChoiceDataSchema, RedactedMultipleChoiceOptionSchema, RedactedWrittenResponseDataSchema, TextMatchPolicySchema, WrittenResponseDataSchema, WrittenResponseRubricCriterionSchema, WrittenResponseRubricSchema, fillInTheBlanksJsonSchema, jsonSchemaFor, multipleChoiceJsonSchema, validateActivity, writtenResponseJsonSchema };
1
+ import './activity-wkzRemHx.js';
2
+ export { B as BlankConfigSchema, F as FeedbackSchema, a as FillInTheBlanksDataSchema, b as ItemGroupSchema, M as MediaSchema, c as MediaUrlSchema, d as MultipleChoiceDataSchema, e as MultipleChoiceOptionSchema, R as RedactedBlankConfigSchema, f as RedactedFillInTheBlanksDataSchema, g as RedactedItemGroupSchema, h as RedactedMultipleChoiceDataSchema, i as RedactedMultipleChoiceOptionSchema, j as RedactedStimulusSchema, k as RedactedWrittenResponseDataSchema, p as StimulusSchema, T as TextMatchPolicySchema, W as WrittenResponseDataSchema, q as WrittenResponseRubricCriterionSchema, r as WrittenResponseRubricSchema, s as fillInTheBlanksJsonSchema, t as itemGroupJsonSchema, u as jsonSchemaFor, v as multipleChoiceJsonSchema, w as stimulusJsonSchema, x as validateActivity, y as validateItemGroup, z as writtenResponseJsonSchema } from './index-CLmXzBhB.js';
3
+ import 'zod/v4';
package/dist/schemas.js CHANGED
@@ -1,10 +1,17 @@
1
1
  import {
2
+ ItemGroupSchema,
3
+ RedactedItemGroupSchema,
4
+ RedactedStimulusSchema,
5
+ StimulusSchema,
2
6
  fillInTheBlanksJsonSchema,
7
+ itemGroupJsonSchema,
3
8
  jsonSchemaFor,
4
9
  multipleChoiceJsonSchema,
10
+ stimulusJsonSchema,
5
11
  validateActivity,
12
+ validateItemGroup,
6
13
  writtenResponseJsonSchema
7
- } from "./chunk-55O4M45K.js";
14
+ } from "./chunk-LSHDNA2T.js";
8
15
  import {
9
16
  BlankConfigSchema,
10
17
  FeedbackSchema,
@@ -22,29 +29,35 @@ import {
22
29
  WrittenResponseDataSchema,
23
30
  WrittenResponseRubricCriterionSchema,
24
31
  WrittenResponseRubricSchema
25
- } from "./chunk-5GJJHGY5.js";
26
- import "./chunk-3YAVDV5F.js";
32
+ } from "./chunk-NUCEUU4P.js";
27
33
  export {
28
34
  BlankConfigSchema,
29
35
  FeedbackSchema,
30
36
  FillInTheBlanksDataSchema,
37
+ ItemGroupSchema,
31
38
  MediaSchema,
32
39
  MediaUrlSchema,
33
40
  MultipleChoiceDataSchema,
34
41
  MultipleChoiceOptionSchema,
35
42
  RedactedBlankConfigSchema,
36
43
  RedactedFillInTheBlanksDataSchema,
44
+ RedactedItemGroupSchema,
37
45
  RedactedMultipleChoiceDataSchema,
38
46
  RedactedMultipleChoiceOptionSchema,
47
+ RedactedStimulusSchema,
39
48
  RedactedWrittenResponseDataSchema,
49
+ StimulusSchema,
40
50
  TextMatchPolicySchema,
41
51
  WrittenResponseDataSchema,
42
52
  WrittenResponseRubricCriterionSchema,
43
53
  WrittenResponseRubricSchema,
44
54
  fillInTheBlanksJsonSchema,
55
+ itemGroupJsonSchema,
45
56
  jsonSchemaFor,
46
57
  multipleChoiceJsonSchema,
58
+ stimulusJsonSchema,
47
59
  validateActivity,
60
+ validateItemGroup,
48
61
  writtenResponseJsonSchema
49
62
  };
50
63
  //# sourceMappingURL=schemas.js.map
package/dist/scoring.cjs CHANGED
@@ -3,18 +3,25 @@
3
3
 
4
4
 
5
5
 
6
- var _chunkTHSZMZNDcjs = require('./chunk-THSZMZND.cjs');
7
6
 
8
7
 
9
8
 
10
- var _chunkQOAORTA4cjs = require('./chunk-QOAORTA4.cjs');
11
- require('./chunk-PIMX4B4D.cjs');
12
9
 
10
+ var _chunkSM5HUGYUcjs = require('./chunk-SM5HUGYU.cjs');
13
11
 
14
12
 
15
13
 
14
+ var _chunk4JR3UXX6cjs = require('./chunk-4JR3UXX6.cjs');
16
15
 
17
16
 
18
17
 
19
- exports.DEFAULT_PASS_THRESHOLD = _chunkTHSZMZNDcjs.DEFAULT_PASS_THRESHOLD; exports.computePassThreshold = _chunkTHSZMZNDcjs.computePassThreshold; exports.evaluate = _chunkTHSZMZNDcjs.evaluate; exports.levenshteinDistance = _chunkQOAORTA4cjs.levenshteinDistance; exports.matchText = _chunkQOAORTA4cjs.matchText; exports.score = _chunkTHSZMZNDcjs.score;
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+ exports.DEFAULT_PASS_THRESHOLD = _chunkSM5HUGYUcjs.DEFAULT_PASS_THRESHOLD; exports.classifyBand = _chunkSM5HUGYUcjs.classifyBand; exports.composeAssessmentScore = _chunkSM5HUGYUcjs.composeAssessmentScore; exports.computePassThreshold = _chunkSM5HUGYUcjs.computePassThreshold; exports.evaluate = _chunkSM5HUGYUcjs.evaluate; exports.gte = _chunkSM5HUGYUcjs.gte; exports.levenshteinDistance = _chunk4JR3UXX6cjs.levenshteinDistance; exports.matchText = _chunk4JR3UXX6cjs.matchText; exports.roundGrade = _chunkSM5HUGYUcjs.roundGrade; exports.score = _chunkSM5HUGYUcjs.score;
20
27
  //# sourceMappingURL=scoring.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/learning-kit/learning-kit/packages/lk-core/dist/scoring.cjs"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACF,+VAAC","file":"/home/runner/work/learning-kit/learning-kit/packages/lk-core/dist/scoring.cjs"}
1
+ {"version":3,"sources":["/home/runner/work/learning-kit/learning-kit/packages/lk-core/dist/scoring.cjs"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yjBAAC","file":"/home/runner/work/learning-kit/learning-kit/packages/lk-core/dist/scoring.cjs"}