@longsightgroup/qti3-core 0.1.1 → 0.1.2

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/src/support.ts ADDED
@@ -0,0 +1,245 @@
1
+ import type {
2
+ QtiElementSupport,
3
+ QtiInteractionElementSupport,
4
+ QtiInteractionType,
5
+ QtiProcessingElementSupport,
6
+ } from "./types.js";
7
+
8
+ export const interactionSupport: QtiInteractionElementSupport[] = [
9
+ entry("qti-associate-interaction", "associate"),
10
+ entry("qti-choice-interaction", "choice"),
11
+ entry("qti-drawing-interaction", "drawing"),
12
+ entry("qti-end-attempt-interaction", "endAttempt"),
13
+ entry("qti-extended-text-interaction", "extendedText"),
14
+ entry("qti-gap-match-interaction", "gapMatch"),
15
+ entry("qti-graphic-associate-interaction", "graphicAssociate"),
16
+ entry("qti-graphic-gap-match-interaction", "graphicGapMatch"),
17
+ entry("qti-graphic-order-interaction", "graphicOrder"),
18
+ entry("qti-hotspot-interaction", "hotspot"),
19
+ entry("qti-hottext-interaction", "hottext"),
20
+ entry("qti-inline-choice-interaction", "inlineChoice"),
21
+ entry("qti-match-interaction", "match"),
22
+ entry("qti-media-interaction", "media"),
23
+ entry("qti-order-interaction", "order"),
24
+ entry("qti-position-object-interaction", "positionObject"),
25
+ entry("qti-portable-custom-interaction", "portableCustom"),
26
+ entry("qti-select-point-interaction", "selectPoint"),
27
+ entry("qti-slider-interaction", "slider"),
28
+ entry("qti-text-entry-interaction", "textEntry"),
29
+ entry("qti-upload-interaction", "upload"),
30
+ ];
31
+
32
+ export const deprecatedInteractionSupport: QtiInteractionElementSupport[] = [
33
+ {
34
+ qtiName: "qti-custom-interaction",
35
+ interactionType: "custom",
36
+ category: "interaction",
37
+ support: "deprecated",
38
+ specReference: "QTI 3.0.1 ASI Q-31",
39
+ parse: true,
40
+ validate: false,
41
+ render: false,
42
+ process: false,
43
+ fixtures: [],
44
+ tests: ["packages/core/src/core.test.ts"],
45
+ notes: "Deprecated in favor of qti-portable-custom-interaction.",
46
+ },
47
+ ];
48
+
49
+ export const processingSupport: QtiProcessingElementSupport[] = [
50
+ processingEntry("qti-template-processing", "packages/core/src/core.test.ts", [
51
+ "packages/fixtures/xml/template-processing-reference.xml",
52
+ "packages/fixtures/xml/template-content-reference.xml",
53
+ ]),
54
+ processingEntry("qti-response-processing", "packages/core/src/core.test.ts", [
55
+ "packages/fixtures/xml/mapping-processing-reference.xml",
56
+ "packages/fixtures/xml/generic-match-processing-reference.xml",
57
+ "packages/fixtures/xml/advanced-processing-reference.xml",
58
+ "packages/fixtures/xml/adaptive-feedback-reference.xml",
59
+ ]),
60
+ processingEntry("qti-set-template-value", "packages/core/src/core.test.ts", [
61
+ "packages/fixtures/xml/template-processing-reference.xml",
62
+ "packages/fixtures/xml/template-content-reference.xml",
63
+ ]),
64
+ processingEntry("qti-set-default-value", "packages/core/src/core.test.ts"),
65
+ processingEntry("qti-set-correct-response", "packages/core/src/core.test.ts", [
66
+ "packages/fixtures/xml/template-processing-reference.xml",
67
+ ]),
68
+ processingEntry("qti-template-condition", "packages/core/src/core.test.ts"),
69
+ processingEntry("qti-template-if", "packages/core/src/core.test.ts"),
70
+ processingEntry("qti-template-else-if", "packages/core/src/core.test.ts"),
71
+ processingEntry("qti-template-else", "packages/core/src/core.test.ts"),
72
+ processingEntry("qti-template-constraint", "packages/core/src/core.test.ts"),
73
+ processingEntry("qti-response-condition", "packages/core/src/core.test.ts", [
74
+ "packages/fixtures/xml/generic-match-processing-reference.xml",
75
+ "packages/fixtures/xml/advanced-processing-reference.xml",
76
+ "packages/fixtures/xml/adaptive-feedback-reference.xml",
77
+ ]),
78
+ processingEntry("qti-response-if", "packages/core/src/core.test.ts", [
79
+ "packages/fixtures/xml/generic-match-processing-reference.xml",
80
+ "packages/fixtures/xml/advanced-processing-reference.xml",
81
+ "packages/fixtures/xml/adaptive-feedback-reference.xml",
82
+ ]),
83
+ processingEntry("qti-response-else-if", "packages/core/src/core.test.ts"),
84
+ processingEntry("qti-response-else", "packages/core/src/core.test.ts", [
85
+ "packages/fixtures/xml/generic-match-processing-reference.xml",
86
+ ]),
87
+ processingEntry("qti-set-outcome-value", "packages/core/src/core.test.ts", [
88
+ "packages/fixtures/xml/generic-match-processing-reference.xml",
89
+ "packages/fixtures/xml/advanced-processing-reference.xml",
90
+ "packages/fixtures/xml/adaptive-feedback-reference.xml",
91
+ ]),
92
+ processingEntry("qti-lookup-outcome-value", "packages/core/src/core.test.ts"),
93
+ processingEntry("qti-exit-response", "packages/core/src/core.test.ts"),
94
+ processingEntry("qti-exit-template", "packages/core/src/core.test.ts"),
95
+ processingEntry("qti-response-processing-fragment", "packages/core/src/core.test.ts"),
96
+ processingEntry("qti-base-value", "packages/core/src/core.test.ts", [
97
+ "packages/fixtures/xml/generic-match-processing-reference.xml",
98
+ "packages/fixtures/xml/template-processing-reference.xml",
99
+ "packages/fixtures/xml/advanced-processing-reference.xml",
100
+ ]),
101
+ processingEntry("qti-null", "packages/core/src/core.test.ts"),
102
+ processingEntry("qti-match-table", "packages/core/src/core.test.ts"),
103
+ processingEntry("qti-match-table-entry", "packages/core/src/core.test.ts"),
104
+ processingEntry("qti-interpolation-table", "packages/core/src/core.test.ts"),
105
+ processingEntry("qti-interpolation-table-entry", "packages/core/src/core.test.ts"),
106
+ processingEntry("qti-is-null", "packages/core/src/core.test.ts"),
107
+ processingEntry("qti-match", "packages/core/src/core.test.ts", [
108
+ "packages/fixtures/xml/generic-match-processing-reference.xml",
109
+ "packages/fixtures/xml/advanced-processing-reference.xml",
110
+ ]),
111
+ processingEntry("qti-correct", "packages/core/src/core.test.ts"),
112
+ processingEntry("qti-default", "packages/core/src/core.test.ts"),
113
+ processingEntry("qti-map-response", "packages/core/src/core.test.ts"),
114
+ processingEntry("qti-map-response-point", "packages/core/src/core.test.ts"),
115
+ processingEntry("qti-variable", "packages/core/src/core.test.ts", [
116
+ "packages/fixtures/xml/generic-match-processing-reference.xml",
117
+ "packages/fixtures/xml/template-processing-reference.xml",
118
+ "packages/fixtures/xml/template-content-reference.xml",
119
+ "packages/fixtures/xml/advanced-processing-reference.xml",
120
+ "packages/fixtures/xml/adaptive-feedback-reference.xml",
121
+ ]),
122
+ processingEntry("qti-random-integer", "packages/core/src/core.test.ts"),
123
+ processingEntry("qti-random-float", "packages/core/src/core.test.ts"),
124
+ processingEntry("qti-random", "packages/core/src/core.test.ts"),
125
+ processingEntry("qti-multiple", "packages/core/src/core.test.ts", [
126
+ "packages/fixtures/xml/advanced-processing-reference.xml",
127
+ ]),
128
+ processingEntry("qti-ordered", "packages/core/src/core.test.ts", [
129
+ "packages/fixtures/xml/advanced-processing-reference.xml",
130
+ ]),
131
+ processingEntry("qti-index", "packages/core/src/core.test.ts"),
132
+ processingEntry("qti-contains", "packages/core/src/core.test.ts"),
133
+ processingEntry("qti-container-size", "packages/core/src/core.test.ts", [
134
+ "packages/fixtures/xml/advanced-processing-reference.xml",
135
+ ]),
136
+ processingEntry("qti-sum", "packages/core/src/core.test.ts", [
137
+ "packages/fixtures/xml/template-processing-reference.xml",
138
+ ]),
139
+ processingEntry("qti-product", "packages/core/src/core.test.ts"),
140
+ processingEntry("qti-min", "packages/core/src/core.test.ts"),
141
+ processingEntry("qti-max", "packages/core/src/core.test.ts"),
142
+ processingEntry("qti-subtract", "packages/core/src/core.test.ts"),
143
+ processingEntry("qti-divide", "packages/core/src/core.test.ts"),
144
+ processingEntry("qti-power", "packages/core/src/core.test.ts"),
145
+ processingEntry("qti-integer-divide", "packages/core/src/core.test.ts"),
146
+ processingEntry("qti-integer-modulus", "packages/core/src/core.test.ts"),
147
+ processingEntry("qti-round", "packages/core/src/core.test.ts"),
148
+ processingEntry("qti-round-to", "packages/core/src/core.test.ts"),
149
+ processingEntry("qti-truncate", "packages/core/src/core.test.ts"),
150
+ processingEntry("qti-integer-to-float", "packages/core/src/core.test.ts"),
151
+ processingEntry("qti-and", "packages/core/src/core.test.ts"),
152
+ processingEntry("qti-any-n", "packages/core/src/core.test.ts"),
153
+ processingEntry("qti-or", "packages/core/src/core.test.ts"),
154
+ processingEntry("qti-not", "packages/core/src/core.test.ts"),
155
+ processingEntry("qti-equal", "packages/core/src/core.test.ts"),
156
+ processingEntry("qti-equal-rounded", "packages/core/src/core.test.ts", [
157
+ "packages/fixtures/xml/advanced-processing-reference.xml",
158
+ ]),
159
+ processingEntry("qti-field-value", "packages/core/src/core.test.ts"),
160
+ processingEntry("qti-lt", "packages/core/src/core.test.ts"),
161
+ processingEntry("qti-lte", "packages/core/src/core.test.ts"),
162
+ processingEntry("qti-gt", "packages/core/src/core.test.ts"),
163
+ processingEntry("qti-gte", "packages/core/src/core.test.ts"),
164
+ processingEntry("qti-string-match", "packages/core/src/core.test.ts"),
165
+ processingEntry("qti-substring", "packages/core/src/core.test.ts"),
166
+ processingEntry("qti-pattern-match", "packages/core/src/core.test.ts"),
167
+ processingEntry("qti-member", "packages/core/src/core.test.ts"),
168
+ processingEntry("qti-delete", "packages/core/src/core.test.ts"),
169
+ processingEntry("qti-duration-gte", "packages/core/src/core.test.ts"),
170
+ processingEntry("qti-duration-lt", "packages/core/src/core.test.ts"),
171
+ processingEntry("qti-gcd", "packages/core/src/core.test.ts", [
172
+ "packages/fixtures/xml/advanced-processing-reference.xml",
173
+ ]),
174
+ processingEntry("qti-inside", "packages/core/src/core.test.ts", [
175
+ "packages/fixtures/xml/advanced-processing-reference.xml",
176
+ ]),
177
+ processingEntry("qti-lcm", "packages/core/src/core.test.ts", [
178
+ "packages/fixtures/xml/advanced-processing-reference.xml",
179
+ ]),
180
+ processingEntry("qti-math-constant", "packages/core/src/core.test.ts"),
181
+ processingEntry("qti-math-operator", "packages/core/src/core.test.ts"),
182
+ processingEntry("qti-repeat", "packages/core/src/core.test.ts", [
183
+ "packages/fixtures/xml/advanced-processing-reference.xml",
184
+ ]),
185
+ processingEntry("qti-stats-operator", "packages/core/src/core.test.ts", [
186
+ "packages/fixtures/xml/advanced-processing-reference.xml",
187
+ ]),
188
+ processingEntry("qti-custom-operator", "packages/core/src/core.test.ts"),
189
+ ];
190
+
191
+ export const elementSupport: QtiElementSupport[] = [
192
+ ...interactionSupport,
193
+ ...deprecatedInteractionSupport,
194
+ ...processingSupport,
195
+ ];
196
+
197
+ const allInteractionSupport = [...interactionSupport, ...deprecatedInteractionSupport];
198
+
199
+ export const interactionNameToType = new Map<string, QtiInteractionType>(
200
+ allInteractionSupport.map((item) => [item.qtiName, item.interactionType]),
201
+ );
202
+
203
+ export function getInteractionSupport(qtiName: string): QtiElementSupport | undefined {
204
+ return allInteractionSupport.find((item) => item.qtiName === qtiName);
205
+ }
206
+
207
+ function entry(qtiName: string, interactionType: QtiInteractionType): QtiInteractionElementSupport {
208
+ return {
209
+ qtiName,
210
+ interactionType,
211
+ category: "interaction",
212
+ support: "supported",
213
+ specReference: "QTI 3.0.1 ASI",
214
+ parse: true,
215
+ validate: true,
216
+ render: true,
217
+ process: true,
218
+ fixtures: [`packages/fixtures/xml/${interactionType}-reference.xml`],
219
+ tests: [
220
+ "packages/fixtures/src/fixtures.test.ts",
221
+ "packages/conformance/src/conformance.test.ts",
222
+ "packages/a11y/src/a11y.test.ts",
223
+ "tests/browser/player.spec.ts",
224
+ ],
225
+ };
226
+ }
227
+
228
+ function processingEntry(
229
+ qtiName: string,
230
+ test: string,
231
+ fixtures: string[] = [],
232
+ ): QtiProcessingElementSupport {
233
+ return {
234
+ qtiName,
235
+ category: "processing",
236
+ support: "supported",
237
+ specReference: "QTI 3.0.1 ASI processing",
238
+ parse: true,
239
+ validate: true,
240
+ render: false,
241
+ process: true,
242
+ fixtures,
243
+ tests: [test],
244
+ };
245
+ }