@longsightgroup/qti3-core 0.7.2 → 0.8.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 (119) hide show
  1. package/README.md +41 -10
  2. package/dist/content-text.d.ts +14 -0
  3. package/dist/content-text.d.ts.map +1 -0
  4. package/dist/content-text.js +58 -0
  5. package/dist/content-text.js.map +1 -0
  6. package/dist/index.d.ts +7 -3
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +6 -2
  9. package/dist/index.js.map +1 -1
  10. package/dist/package-xml.d.ts +12 -0
  11. package/dist/package-xml.d.ts.map +1 -0
  12. package/dist/package-xml.js +17 -0
  13. package/dist/package-xml.js.map +1 -0
  14. package/dist/parser-custom-interactions.d.ts +8 -0
  15. package/dist/parser-custom-interactions.d.ts.map +1 -0
  16. package/dist/parser-custom-interactions.js +178 -0
  17. package/dist/parser-custom-interactions.js.map +1 -0
  18. package/dist/parser-declarations.d.ts +6 -0
  19. package/dist/parser-declarations.d.ts.map +1 -0
  20. package/dist/parser-declarations.js +136 -0
  21. package/dist/parser-declarations.js.map +1 -0
  22. package/dist/parser-item-metadata.d.ts +9 -0
  23. package/dist/parser-item-metadata.d.ts.map +1 -0
  24. package/dist/parser-item-metadata.js +158 -0
  25. package/dist/parser-item-metadata.js.map +1 -0
  26. package/dist/parser-processing.d.ts +5 -0
  27. package/dist/parser-processing.d.ts.map +1 -0
  28. package/dist/parser-processing.js +642 -0
  29. package/dist/parser-processing.js.map +1 -0
  30. package/dist/parser-values.d.ts +8 -0
  31. package/dist/parser-values.d.ts.map +1 -0
  32. package/dist/parser-values.js +49 -0
  33. package/dist/parser-values.js.map +1 -0
  34. package/dist/parser.d.ts.map +1 -1
  35. package/dist/parser.js +32 -1086
  36. package/dist/parser.js.map +1 -1
  37. package/dist/processing-expression-tags.d.ts +56 -0
  38. package/dist/processing-expression-tags.d.ts.map +1 -0
  39. package/dist/processing-expression-tags.js +52 -0
  40. package/dist/processing-expression-tags.js.map +1 -0
  41. package/dist/processing-rules.d.ts +3 -0
  42. package/dist/processing-rules.d.ts.map +1 -0
  43. package/dist/processing-rules.js +10 -0
  44. package/dist/processing-rules.js.map +1 -0
  45. package/dist/serializer-processing-expressions.d.ts +8 -0
  46. package/dist/serializer-processing-expressions.d.ts.map +1 -0
  47. package/dist/serializer-processing-expressions.js +198 -0
  48. package/dist/serializer-processing-expressions.js.map +1 -0
  49. package/dist/serializer-processing-xml.d.ts +15 -0
  50. package/dist/serializer-processing-xml.d.ts.map +1 -0
  51. package/dist/serializer-processing-xml.js +46 -0
  52. package/dist/serializer-processing-xml.js.map +1 -0
  53. package/dist/serializer-processing.d.ts +8 -0
  54. package/dist/serializer-processing.d.ts.map +1 -0
  55. package/dist/serializer-processing.js +106 -0
  56. package/dist/serializer-processing.js.map +1 -0
  57. package/dist/shared-vocabulary-authoring.d.ts +50 -0
  58. package/dist/shared-vocabulary-authoring.d.ts.map +1 -0
  59. package/dist/shared-vocabulary-authoring.js +302 -0
  60. package/dist/shared-vocabulary-authoring.js.map +1 -0
  61. package/dist/shared-vocabulary-interaction-sets.d.ts +6 -0
  62. package/dist/shared-vocabulary-interaction-sets.d.ts.map +1 -0
  63. package/dist/shared-vocabulary-interaction-sets.js +23 -0
  64. package/dist/shared-vocabulary-interaction-sets.js.map +1 -0
  65. package/dist/shared-vocabulary-interaction-validation.d.ts +3 -0
  66. package/dist/shared-vocabulary-interaction-validation.d.ts.map +1 -0
  67. package/dist/shared-vocabulary-interaction-validation.js +99 -0
  68. package/dist/shared-vocabulary-interaction-validation.js.map +1 -0
  69. package/dist/shared-vocabulary-registry-validation.d.ts +5 -0
  70. package/dist/shared-vocabulary-registry-validation.d.ts.map +1 -0
  71. package/dist/shared-vocabulary-registry-validation.js +147 -0
  72. package/dist/shared-vocabulary-registry-validation.js.map +1 -0
  73. package/dist/shared-vocabulary-support.d.ts.map +1 -1
  74. package/dist/shared-vocabulary-support.js +96 -56
  75. package/dist/shared-vocabulary-support.js.map +1 -1
  76. package/dist/shared-vocabulary.d.ts +6 -0
  77. package/dist/shared-vocabulary.d.ts.map +1 -1
  78. package/dist/shared-vocabulary.js +12 -0
  79. package/dist/shared-vocabulary.js.map +1 -1
  80. package/dist/support.d.ts +4 -1
  81. package/dist/support.d.ts.map +1 -1
  82. package/dist/support.js +159 -10
  83. package/dist/support.js.map +1 -1
  84. package/dist/types.d.ts +38 -7
  85. package/dist/types.d.ts.map +1 -1
  86. package/dist/validation.d.ts.map +1 -1
  87. package/dist/validation.js +29 -250
  88. package/dist/validation.js.map +1 -1
  89. package/dist/xml.d.ts +10 -0
  90. package/dist/xml.d.ts.map +1 -1
  91. package/dist/xml.js +321 -249
  92. package/dist/xml.js.map +1 -1
  93. package/package.json +1 -4
  94. package/src/content-text.ts +80 -0
  95. package/src/index.ts +67 -0
  96. package/src/interaction-test-fixtures.ts +44 -0
  97. package/src/package-xml.ts +30 -0
  98. package/src/parser-custom-interactions.ts +309 -0
  99. package/src/parser-declarations.ts +174 -0
  100. package/src/parser-item-metadata.ts +194 -0
  101. package/src/parser-processing.ts +701 -0
  102. package/src/parser-values.ts +61 -0
  103. package/src/parser.ts +59 -1230
  104. package/src/processing-expression-tags.ts +65 -0
  105. package/src/processing-rules.ts +11 -0
  106. package/src/serializer-processing-expressions.ts +456 -0
  107. package/src/serializer-processing-xml.ts +67 -0
  108. package/src/serializer-processing.fixtures.ts +469 -0
  109. package/src/serializer-processing.ts +196 -0
  110. package/src/shared-vocabulary-authoring.ts +409 -0
  111. package/src/shared-vocabulary-interaction-sets.ts +28 -0
  112. package/src/shared-vocabulary-interaction-validation.ts +143 -0
  113. package/src/shared-vocabulary-registry-validation.ts +207 -0
  114. package/src/shared-vocabulary-support.ts +127 -101
  115. package/src/shared-vocabulary.ts +18 -0
  116. package/src/support.ts +174 -14
  117. package/src/types.ts +48 -7
  118. package/src/validation.ts +33 -341
  119. package/src/xml.ts +378 -255
@@ -0,0 +1,642 @@
1
+ import { coerceValue, parseCoords, parseShape } from "./parser-values.js";
2
+ import { responseConditionsFromRules } from "./processing-rules.js";
3
+ import { childElements, textContent } from "./xml.js";
4
+ export function parseResponseProcessing(node) {
5
+ if (!node)
6
+ return undefined;
7
+ const rules = parseResponseRules(node);
8
+ return {
9
+ template: node.attributes.template,
10
+ rules,
11
+ conditions: responseConditionsFromRules(rules),
12
+ };
13
+ }
14
+ export function parseTemplateProcessing(node) {
15
+ if (!node)
16
+ return undefined;
17
+ return {
18
+ rules: parseTemplateRules(node),
19
+ };
20
+ }
21
+ function parseTemplateRules(node) {
22
+ return childElements(node)
23
+ .map(parseTemplateRule)
24
+ .filter((rule) => rule !== undefined);
25
+ }
26
+ function parseTemplateRule(node) {
27
+ if (node.localName === "qti-set-template-value") {
28
+ return {
29
+ type: "setTemplateValue",
30
+ identifier: node.attributes.identifier ?? "",
31
+ expression: parseFirstExpression(node) ?? {
32
+ type: "baseValue",
33
+ value: null,
34
+ source: node.source,
35
+ },
36
+ source: node.source,
37
+ };
38
+ }
39
+ if (node.localName === "qti-set-default-value") {
40
+ return {
41
+ type: "setDefaultValue",
42
+ identifier: node.attributes.identifier ?? "",
43
+ expression: parseFirstExpression(node) ?? {
44
+ type: "baseValue",
45
+ value: null,
46
+ source: node.source,
47
+ },
48
+ source: node.source,
49
+ };
50
+ }
51
+ if (node.localName === "qti-set-correct-response") {
52
+ return {
53
+ type: "setCorrectResponse",
54
+ identifier: node.attributes.identifier ?? "",
55
+ expression: parseFirstExpression(node) ?? {
56
+ type: "baseValue",
57
+ value: null,
58
+ source: node.source,
59
+ },
60
+ source: node.source,
61
+ };
62
+ }
63
+ if (node.localName === "qti-template-condition") {
64
+ const templateIf = childElements(node, "qti-template-if")[0];
65
+ const templateElse = childElements(node, "qti-template-else")[0];
66
+ return {
67
+ type: "templateCondition",
68
+ ifExpression: templateIf ? parseFirstExpression(templateIf) : undefined,
69
+ thenRules: templateIf ? parseTemplateRules(templateIf) : [],
70
+ elseIfs: childElements(node, "qti-template-else-if").map((branch) => ({
71
+ expression: parseFirstExpression(branch),
72
+ rules: parseTemplateRules(branch),
73
+ })),
74
+ elseRules: templateElse ? parseTemplateRules(templateElse) : [],
75
+ source: node.source,
76
+ };
77
+ }
78
+ if (node.localName === "qti-exit-template") {
79
+ return {
80
+ type: "exitTemplate",
81
+ source: node.source,
82
+ };
83
+ }
84
+ if (node.localName === "qti-template-constraint") {
85
+ return {
86
+ type: "templateConstraint",
87
+ expression: parseFirstExpression(node) ?? {
88
+ type: "baseValue",
89
+ value: null,
90
+ source: node.source,
91
+ },
92
+ source: node.source,
93
+ };
94
+ }
95
+ return undefined;
96
+ }
97
+ function parseResponseCondition(node) {
98
+ const responseIf = childElements(node, "qti-response-if")[0];
99
+ const responseElse = childElements(node, "qti-response-else")[0];
100
+ return {
101
+ ifExpression: responseIf ? parseFirstExpression(responseIf) : undefined,
102
+ thenRules: responseIf ? parseResponseRules(responseIf) : [],
103
+ elseIfs: childElements(node, "qti-response-else-if").map((branch) => ({
104
+ expression: parseFirstExpression(branch),
105
+ rules: parseResponseRules(branch),
106
+ })),
107
+ elseRules: responseElse ? parseResponseRules(responseElse) : [],
108
+ };
109
+ }
110
+ function parseResponseRules(node) {
111
+ return childElements(node)
112
+ .map(parseResponseRule)
113
+ .filter((rule) => rule !== undefined);
114
+ }
115
+ function parseResponseRule(node) {
116
+ if (node.localName === "qti-response-condition") {
117
+ return {
118
+ type: "responseCondition",
119
+ condition: parseResponseCondition(node),
120
+ source: node.source,
121
+ };
122
+ }
123
+ if (node.localName === "qti-set-outcome-value")
124
+ return parseSetOutcomeValue(node);
125
+ if (node.localName === "qti-lookup-outcome-value")
126
+ return parseLookupOutcomeValue(node);
127
+ if (node.localName === "qti-exit-response") {
128
+ return { type: "exitResponse", source: node.source };
129
+ }
130
+ if (node.localName === "qti-response-processing-fragment") {
131
+ return {
132
+ type: "responseProcessingFragment",
133
+ rules: parseResponseRules(node),
134
+ source: node.source,
135
+ };
136
+ }
137
+ return undefined;
138
+ }
139
+ function parseLookupOutcomeValue(node) {
140
+ return {
141
+ type: "lookupOutcomeValue",
142
+ identifier: node.attributes.identifier ?? "",
143
+ expression: parseFirstExpression(node) ?? {
144
+ type: "baseValue",
145
+ value: null,
146
+ source: node.source,
147
+ },
148
+ source: node.source,
149
+ };
150
+ }
151
+ function parseSetOutcomeValue(setNode) {
152
+ return {
153
+ type: "setOutcomeValue",
154
+ identifier: setNode.attributes.identifier ?? "",
155
+ expression: parseFirstExpression(setNode) ?? {
156
+ type: "baseValue",
157
+ value: null,
158
+ source: setNode.source,
159
+ },
160
+ source: setNode.source,
161
+ };
162
+ }
163
+ function parseFirstExpression(node) {
164
+ for (const child of node.children) {
165
+ const expression = parseExpression(child);
166
+ if (expression)
167
+ return expression;
168
+ }
169
+ return undefined;
170
+ }
171
+ function parseExpression(node) {
172
+ if (node.localName === "qti-base-value") {
173
+ const rawValue = textContent(node);
174
+ return {
175
+ type: "baseValue",
176
+ value: coerceValue(rawValue, node.attributes["base-type"]),
177
+ rawValue,
178
+ baseType: node.attributes["base-type"],
179
+ source: node.source,
180
+ };
181
+ }
182
+ if (node.localName === "qti-null") {
183
+ return { type: "null", source: node.source };
184
+ }
185
+ if (node.localName === "qti-is-null") {
186
+ const variable = childElements(node, "qti-variable")[0];
187
+ return {
188
+ type: "isNull",
189
+ identifier: variable?.attributes.identifier ?? "",
190
+ source: node.source,
191
+ };
192
+ }
193
+ if (node.localName === "qti-map-response") {
194
+ return {
195
+ type: "mapResponse",
196
+ identifier: node.attributes.identifier ?? "",
197
+ source: node.source,
198
+ };
199
+ }
200
+ if (node.localName === "qti-map-response-point") {
201
+ return {
202
+ type: "mapResponsePoint",
203
+ identifier: node.attributes.identifier ?? "",
204
+ source: node.source,
205
+ };
206
+ }
207
+ if (node.localName === "qti-correct") {
208
+ return {
209
+ type: "correct",
210
+ identifier: node.attributes.identifier ?? "",
211
+ source: node.source,
212
+ };
213
+ }
214
+ if (node.localName === "qti-default") {
215
+ return {
216
+ type: "default",
217
+ identifier: node.attributes.identifier ?? "",
218
+ source: node.source,
219
+ };
220
+ }
221
+ if (node.localName === "qti-variable") {
222
+ return { type: "variable", identifier: node.attributes.identifier ?? "", source: node.source };
223
+ }
224
+ if (node.localName === "qti-random-integer") {
225
+ return {
226
+ type: "randomInteger",
227
+ min: Number(node.attributes.min ?? 0),
228
+ max: Number(node.attributes.max ?? 0),
229
+ step: Number(node.attributes.step ?? 1),
230
+ attributes: node.attributes,
231
+ source: node.source,
232
+ };
233
+ }
234
+ if (node.localName === "qti-random-float") {
235
+ return {
236
+ type: "randomFloat",
237
+ min: Number(node.attributes.min ?? 0),
238
+ max: Number(node.attributes.max ?? 0),
239
+ attributes: node.attributes,
240
+ source: node.source,
241
+ };
242
+ }
243
+ if (node.localName === "qti-random") {
244
+ const multiple = childElements(node, "qti-multiple")[0];
245
+ return {
246
+ type: "random",
247
+ values: childElements(multiple ?? node)
248
+ .map(parseExpression)
249
+ .filter((expression) => expression !== undefined),
250
+ source: node.source,
251
+ };
252
+ }
253
+ if (node.localName === "qti-multiple") {
254
+ return {
255
+ type: "multiple",
256
+ expressions: childElements(node)
257
+ .map(parseExpression)
258
+ .filter((expression) => expression !== undefined),
259
+ source: node.source,
260
+ };
261
+ }
262
+ if (node.localName === "qti-ordered") {
263
+ return {
264
+ type: "ordered",
265
+ expressions: childElements(node)
266
+ .map(parseExpression)
267
+ .filter((expression) => expression !== undefined),
268
+ source: node.source,
269
+ };
270
+ }
271
+ if (node.localName === "qti-index") {
272
+ const expression = parseFirstExpression(node);
273
+ if (expression) {
274
+ return { type: "index", expression, n: node.attributes.n ?? "", source: node.source };
275
+ }
276
+ }
277
+ if (node.localName === "qti-container-size") {
278
+ const expression = parseFirstExpression(node);
279
+ if (expression)
280
+ return { type: "containerSize", expression, source: node.source };
281
+ }
282
+ if (node.localName === "qti-sum") {
283
+ return {
284
+ type: "sum",
285
+ expressions: childElements(node)
286
+ .map(parseExpression)
287
+ .filter((expression) => expression !== undefined),
288
+ source: node.source,
289
+ };
290
+ }
291
+ if (node.localName === "qti-product") {
292
+ return {
293
+ type: "product",
294
+ expressions: childElements(node)
295
+ .map(parseExpression)
296
+ .filter((expression) => expression !== undefined),
297
+ source: node.source,
298
+ };
299
+ }
300
+ if (node.localName === "qti-min") {
301
+ return {
302
+ type: "min",
303
+ expressions: childElements(node)
304
+ .map(parseExpression)
305
+ .filter((expression) => expression !== undefined),
306
+ source: node.source,
307
+ };
308
+ }
309
+ if (node.localName === "qti-max") {
310
+ return {
311
+ type: "max",
312
+ expressions: childElements(node)
313
+ .map(parseExpression)
314
+ .filter((expression) => expression !== undefined),
315
+ source: node.source,
316
+ };
317
+ }
318
+ if (node.localName === "qti-subtract") {
319
+ const expressions = childElements(node)
320
+ .map(parseExpression)
321
+ .filter((expression) => expression !== undefined);
322
+ const [left, right] = expressions;
323
+ if (left && right)
324
+ return { type: "subtract", left, right, source: node.source };
325
+ }
326
+ if (node.localName === "qti-divide") {
327
+ const expressions = childElements(node)
328
+ .map(parseExpression)
329
+ .filter((expression) => expression !== undefined);
330
+ const [left, right] = expressions;
331
+ if (left && right)
332
+ return { type: "divide", left, right, source: node.source };
333
+ }
334
+ if (node.localName === "qti-power") {
335
+ const expressions = childElements(node)
336
+ .map(parseExpression)
337
+ .filter((expression) => expression !== undefined);
338
+ const [left, right] = expressions;
339
+ if (left && right)
340
+ return { type: "power", left, right, source: node.source };
341
+ }
342
+ if (node.localName === "qti-integer-divide") {
343
+ const expressions = childElements(node)
344
+ .map(parseExpression)
345
+ .filter((expression) => expression !== undefined);
346
+ const [left, right] = expressions;
347
+ if (left && right)
348
+ return { type: "integerDivide", left, right, source: node.source };
349
+ }
350
+ if (node.localName === "qti-integer-modulus") {
351
+ const expressions = childElements(node)
352
+ .map(parseExpression)
353
+ .filter((expression) => expression !== undefined);
354
+ const [left, right] = expressions;
355
+ if (left && right)
356
+ return { type: "integerModulus", left, right, source: node.source };
357
+ }
358
+ if (node.localName === "qti-round") {
359
+ const expression = parseFirstExpression(node);
360
+ if (expression)
361
+ return { type: "round", expression, source: node.source };
362
+ }
363
+ if (node.localName === "qti-round-to") {
364
+ const expression = parseFirstExpression(node);
365
+ const roundingMode = node.attributes["rounding-mode"];
366
+ const figures = Number(node.attributes.figures ?? 0);
367
+ if (expression &&
368
+ (roundingMode === "decimalPlaces" || roundingMode === "significantFigures") &&
369
+ Number.isInteger(figures) &&
370
+ (roundingMode === "decimalPlaces" ? figures >= 0 : figures > 0)) {
371
+ return { type: "roundTo", expression, roundingMode, figures, source: node.source };
372
+ }
373
+ }
374
+ if (node.localName === "qti-truncate") {
375
+ const expression = parseFirstExpression(node);
376
+ if (expression)
377
+ return { type: "truncate", expression, source: node.source };
378
+ }
379
+ if (node.localName === "qti-integer-to-float") {
380
+ const expression = parseFirstExpression(node);
381
+ if (expression)
382
+ return { type: "integerToFloat", expression, source: node.source };
383
+ }
384
+ if (node.localName === "qti-and") {
385
+ return {
386
+ type: "and",
387
+ expressions: childElements(node)
388
+ .map(parseExpression)
389
+ .filter((expression) => expression !== undefined),
390
+ source: node.source,
391
+ };
392
+ }
393
+ if (node.localName === "qti-any-n") {
394
+ return {
395
+ type: "anyN",
396
+ min: node.attributes.min ?? "",
397
+ max: node.attributes.max ?? "",
398
+ expressions: childElements(node)
399
+ .map(parseExpression)
400
+ .filter((expression) => expression !== undefined),
401
+ source: node.source,
402
+ };
403
+ }
404
+ if (node.localName === "qti-or") {
405
+ return {
406
+ type: "or",
407
+ expressions: childElements(node)
408
+ .map(parseExpression)
409
+ .filter((expression) => expression !== undefined),
410
+ source: node.source,
411
+ };
412
+ }
413
+ if (node.localName === "qti-not") {
414
+ const expression = parseFirstExpression(node);
415
+ if (expression)
416
+ return { type: "not", expression, source: node.source };
417
+ }
418
+ if (node.localName === "qti-equal") {
419
+ const [left, right] = childElements(node)
420
+ .map(parseExpression)
421
+ .filter((expression) => expression !== undefined);
422
+ if (left && right)
423
+ return { type: "equal", left, right, source: node.source };
424
+ }
425
+ if (node.localName === "qti-equal-rounded") {
426
+ const [left, right] = childElements(node)
427
+ .map(parseExpression)
428
+ .filter((expression) => expression !== undefined);
429
+ const roundingMode = node.attributes["rounding-mode"] ?? "";
430
+ const figures = Number(node.attributes.figures ?? 0);
431
+ if (left && right) {
432
+ return { type: "equalRounded", left, right, roundingMode, figures, source: node.source };
433
+ }
434
+ }
435
+ const numericCompareOperator = numericCompareOperatorFor(node.localName);
436
+ if (numericCompareOperator) {
437
+ const [left, right] = childElements(node)
438
+ .map(parseExpression)
439
+ .filter((expression) => expression !== undefined);
440
+ if (left && right) {
441
+ return {
442
+ type: "numericCompare",
443
+ operator: numericCompareOperator,
444
+ left,
445
+ right,
446
+ source: node.source,
447
+ };
448
+ }
449
+ }
450
+ const durationCompareOperator = durationCompareOperatorFor(node.localName);
451
+ if (durationCompareOperator) {
452
+ const [left, right] = childElements(node)
453
+ .map(parseExpression)
454
+ .filter((expression) => expression !== undefined);
455
+ if (left && right) {
456
+ return {
457
+ type: "durationCompare",
458
+ operator: durationCompareOperator,
459
+ left,
460
+ right,
461
+ source: node.source,
462
+ };
463
+ }
464
+ }
465
+ if (node.localName === "qti-string-match") {
466
+ const [left, right] = childElements(node)
467
+ .map(parseExpression)
468
+ .filter((expression) => expression !== undefined);
469
+ if (left && right) {
470
+ return {
471
+ type: "stringMatch",
472
+ left,
473
+ right,
474
+ caseSensitive: node.attributes["case-sensitive"] !== "false",
475
+ substring: node.attributes.substring === "true",
476
+ source: node.source,
477
+ };
478
+ }
479
+ }
480
+ if (node.localName === "qti-substring") {
481
+ const [left, right] = childElements(node)
482
+ .map(parseExpression)
483
+ .filter((expression) => expression !== undefined);
484
+ if (left && right) {
485
+ return {
486
+ type: "substring",
487
+ left,
488
+ right,
489
+ caseSensitive: node.attributes["case-sensitive"] !== "false",
490
+ source: node.source,
491
+ };
492
+ }
493
+ }
494
+ if (node.localName === "qti-pattern-match") {
495
+ const expression = parseFirstExpression(node);
496
+ if (expression) {
497
+ return {
498
+ type: "patternMatch",
499
+ expression,
500
+ pattern: node.attributes.pattern ?? "",
501
+ source: node.source,
502
+ };
503
+ }
504
+ }
505
+ if (node.localName === "qti-field-value") {
506
+ const expression = parseFirstExpression(node);
507
+ if (expression) {
508
+ return {
509
+ type: "fieldValue",
510
+ fieldIdentifier: node.attributes["field-identifier"] ?? "",
511
+ expression,
512
+ source: node.source,
513
+ };
514
+ }
515
+ }
516
+ if (node.localName === "qti-member") {
517
+ const [value, collection] = childElements(node)
518
+ .map(parseExpression)
519
+ .filter((expression) => expression !== undefined);
520
+ if (value && collection)
521
+ return { type: "member", value, collection, source: node.source };
522
+ }
523
+ if (node.localName === "qti-delete") {
524
+ const [value, collection] = childElements(node)
525
+ .map(parseExpression)
526
+ .filter((expression) => expression !== undefined);
527
+ if (value && collection)
528
+ return { type: "delete", value, collection, source: node.source };
529
+ }
530
+ if (node.localName === "qti-contains") {
531
+ const [collection, values] = childElements(node)
532
+ .map(parseExpression)
533
+ .filter((expression) => expression !== undefined);
534
+ if (collection && values)
535
+ return { type: "contains", collection, values, source: node.source };
536
+ }
537
+ if (node.localName === "qti-gcd" || node.localName === "qti-lcm") {
538
+ return {
539
+ type: node.localName === "qti-gcd" ? "gcd" : "lcm",
540
+ expressions: childElements(node)
541
+ .map(parseExpression)
542
+ .filter((expression) => expression !== undefined),
543
+ source: node.source,
544
+ };
545
+ }
546
+ if (node.localName === "qti-inside") {
547
+ const expression = parseFirstExpression(node);
548
+ if (expression) {
549
+ return {
550
+ type: "inside",
551
+ expression,
552
+ shape: parseShape(node.attributes.shape),
553
+ coords: parseCoords(node.attributes.coords),
554
+ attributes: node.attributes,
555
+ source: node.source,
556
+ };
557
+ }
558
+ }
559
+ if (node.localName === "qti-math-constant") {
560
+ return { type: "mathConstant", name: node.attributes.name ?? "", source: node.source };
561
+ }
562
+ if (node.localName === "qti-math-operator") {
563
+ return {
564
+ type: "mathOperator",
565
+ name: node.attributes.name ?? "",
566
+ expressions: childElements(node)
567
+ .map(parseExpression)
568
+ .filter((expression) => expression !== undefined),
569
+ source: node.source,
570
+ };
571
+ }
572
+ if (node.localName === "qti-repeat") {
573
+ return {
574
+ type: "repeat",
575
+ numberRepeats: node.attributes["number-repeats"] ?? "",
576
+ expressions: childElements(node)
577
+ .map(parseExpression)
578
+ .filter((expression) => expression !== undefined),
579
+ source: node.source,
580
+ };
581
+ }
582
+ if (node.localName === "qti-stats-operator") {
583
+ const expression = parseFirstExpression(node);
584
+ if (expression) {
585
+ return {
586
+ type: "statsOperator",
587
+ name: node.attributes.name ?? "",
588
+ expression,
589
+ source: node.source,
590
+ };
591
+ }
592
+ }
593
+ if (node.localName === "qti-custom-operator") {
594
+ return {
595
+ type: "customOperator",
596
+ definition: node.attributes.definition,
597
+ className: node.attributes.class,
598
+ attributes: node.attributes,
599
+ expressions: childElements(node)
600
+ .map(parseExpression)
601
+ .filter((expression) => expression !== undefined),
602
+ source: node.source,
603
+ };
604
+ }
605
+ if (node.localName === "qti-match") {
606
+ const variable = childElements(node, "qti-variable")[0];
607
+ const correct = childElements(node, "qti-correct")[0];
608
+ if (variable && correct) {
609
+ return {
610
+ type: "matchCorrect",
611
+ identifier: variable?.attributes.identifier ?? "",
612
+ correctIdentifier: correct?.attributes.identifier ?? "",
613
+ source: node.source,
614
+ };
615
+ }
616
+ const [left, right] = childElements(node)
617
+ .map(parseExpression)
618
+ .filter((expression) => expression !== undefined);
619
+ if (left && right)
620
+ return { type: "match", left, right, source: node.source };
621
+ }
622
+ return undefined;
623
+ }
624
+ function numericCompareOperatorFor(localName) {
625
+ if (localName === "qti-lt")
626
+ return "lt";
627
+ if (localName === "qti-lte")
628
+ return "lte";
629
+ if (localName === "qti-gt")
630
+ return "gt";
631
+ if (localName === "qti-gte")
632
+ return "gte";
633
+ return undefined;
634
+ }
635
+ function durationCompareOperatorFor(localName) {
636
+ if (localName === "qti-duration-lt")
637
+ return "lt";
638
+ if (localName === "qti-duration-gte")
639
+ return "gte";
640
+ return undefined;
641
+ }
642
+ //# sourceMappingURL=parser-processing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser-processing.js","sourceRoot":"","sources":["../src/parser-processing.ts"],"names":[],"mappings":"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"}