@longsightgroup/qti3-core 0.7.3 → 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.
- package/README.md +41 -10
- package/dist/content-text.d.ts +7 -1
- package/dist/content-text.d.ts.map +1 -1
- package/dist/content-text.js +14 -0
- package/dist/content-text.js.map +1 -1
- package/dist/index.d.ts +7 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/package-xml.d.ts +12 -0
- package/dist/package-xml.d.ts.map +1 -0
- package/dist/package-xml.js +17 -0
- package/dist/package-xml.js.map +1 -0
- package/dist/parser-custom-interactions.d.ts +8 -0
- package/dist/parser-custom-interactions.d.ts.map +1 -0
- package/dist/parser-custom-interactions.js +178 -0
- package/dist/parser-custom-interactions.js.map +1 -0
- package/dist/parser-declarations.d.ts +6 -0
- package/dist/parser-declarations.d.ts.map +1 -0
- package/dist/parser-declarations.js +136 -0
- package/dist/parser-declarations.js.map +1 -0
- package/dist/parser-item-metadata.d.ts +9 -0
- package/dist/parser-item-metadata.d.ts.map +1 -0
- package/dist/parser-item-metadata.js +158 -0
- package/dist/parser-item-metadata.js.map +1 -0
- package/dist/parser-processing.d.ts +5 -0
- package/dist/parser-processing.d.ts.map +1 -0
- package/dist/parser-processing.js +642 -0
- package/dist/parser-processing.js.map +1 -0
- package/dist/parser-values.d.ts +8 -0
- package/dist/parser-values.d.ts.map +1 -0
- package/dist/parser-values.js +49 -0
- package/dist/parser-values.js.map +1 -0
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +15 -1083
- package/dist/parser.js.map +1 -1
- package/dist/processing-expression-tags.d.ts +56 -0
- package/dist/processing-expression-tags.d.ts.map +1 -0
- package/dist/processing-expression-tags.js +52 -0
- package/dist/processing-expression-tags.js.map +1 -0
- package/dist/processing-rules.d.ts +3 -0
- package/dist/processing-rules.d.ts.map +1 -0
- package/dist/processing-rules.js +10 -0
- package/dist/processing-rules.js.map +1 -0
- package/dist/serializer-processing-expressions.d.ts +8 -0
- package/dist/serializer-processing-expressions.d.ts.map +1 -0
- package/dist/serializer-processing-expressions.js +198 -0
- package/dist/serializer-processing-expressions.js.map +1 -0
- package/dist/serializer-processing-xml.d.ts +15 -0
- package/dist/serializer-processing-xml.d.ts.map +1 -0
- package/dist/serializer-processing-xml.js +46 -0
- package/dist/serializer-processing-xml.js.map +1 -0
- package/dist/serializer-processing.d.ts +8 -0
- package/dist/serializer-processing.d.ts.map +1 -0
- package/dist/serializer-processing.js +106 -0
- package/dist/serializer-processing.js.map +1 -0
- package/dist/shared-vocabulary-authoring.d.ts +50 -0
- package/dist/shared-vocabulary-authoring.d.ts.map +1 -0
- package/dist/shared-vocabulary-authoring.js +302 -0
- package/dist/shared-vocabulary-authoring.js.map +1 -0
- package/dist/shared-vocabulary-interaction-sets.d.ts +6 -0
- package/dist/shared-vocabulary-interaction-sets.d.ts.map +1 -0
- package/dist/shared-vocabulary-interaction-sets.js +23 -0
- package/dist/shared-vocabulary-interaction-sets.js.map +1 -0
- package/dist/shared-vocabulary-interaction-validation.d.ts +3 -0
- package/dist/shared-vocabulary-interaction-validation.d.ts.map +1 -0
- package/dist/shared-vocabulary-interaction-validation.js +99 -0
- package/dist/shared-vocabulary-interaction-validation.js.map +1 -0
- package/dist/shared-vocabulary-registry-validation.d.ts +5 -0
- package/dist/shared-vocabulary-registry-validation.d.ts.map +1 -0
- package/dist/shared-vocabulary-registry-validation.js +147 -0
- package/dist/shared-vocabulary-registry-validation.js.map +1 -0
- package/dist/shared-vocabulary-support.d.ts.map +1 -1
- package/dist/shared-vocabulary-support.js +96 -56
- package/dist/shared-vocabulary-support.js.map +1 -1
- package/dist/shared-vocabulary.d.ts +6 -0
- package/dist/shared-vocabulary.d.ts.map +1 -1
- package/dist/shared-vocabulary.js +12 -0
- package/dist/shared-vocabulary.js.map +1 -1
- package/dist/support.d.ts +4 -1
- package/dist/support.d.ts.map +1 -1
- package/dist/support.js +130 -0
- package/dist/support.js.map +1 -1
- package/dist/types.d.ts +32 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +29 -250
- package/dist/validation.js.map +1 -1
- package/dist/xml.d.ts +10 -0
- package/dist/xml.d.ts.map +1 -1
- package/dist/xml.js +321 -272
- package/dist/xml.js.map +1 -1
- package/package.json +1 -4
- package/src/content-text.ts +20 -1
- package/src/index.ts +67 -0
- package/src/interaction-test-fixtures.ts +44 -0
- package/src/package-xml.ts +30 -0
- package/src/parser-custom-interactions.ts +309 -0
- package/src/parser-declarations.ts +174 -0
- package/src/parser-item-metadata.ts +194 -0
- package/src/parser-processing.ts +701 -0
- package/src/parser-values.ts +61 -0
- package/src/parser.ts +36 -1227
- package/src/processing-expression-tags.ts +65 -0
- package/src/processing-rules.ts +11 -0
- package/src/serializer-processing-expressions.ts +456 -0
- package/src/serializer-processing-xml.ts +67 -0
- package/src/serializer-processing.fixtures.ts +469 -0
- package/src/serializer-processing.ts +196 -0
- package/src/shared-vocabulary-authoring.ts +409 -0
- package/src/shared-vocabulary-interaction-sets.ts +28 -0
- package/src/shared-vocabulary-interaction-validation.ts +143 -0
- package/src/shared-vocabulary-registry-validation.ts +207 -0
- package/src/shared-vocabulary-support.ts +127 -101
- package/src/shared-vocabulary.ts +18 -0
- package/src/support.ts +144 -0
- package/src/types.ts +42 -7
- package/src/validation.ts +33 -341
- package/src/xml.ts +376 -276
package/README.md
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
Framework-neutral TypeScript core for QTI 3 assessment items.
|
|
4
4
|
|
|
5
|
-
This package handles parsing, validation, response processing, scoring,
|
|
6
|
-
and serialized attempt state. It
|
|
7
|
-
framework.
|
|
5
|
+
This package handles dependency-free XML parsing, validation, response processing, scoring,
|
|
6
|
+
support metadata, and serialized attempt state. It has zero third-party runtime dependencies,
|
|
7
|
+
does not render UI, and does not depend on a browser framework.
|
|
8
8
|
|
|
9
9
|
## Install
|
|
10
10
|
|
|
@@ -61,16 +61,16 @@ tables, response/outcome/template declaration default values, response processin
|
|
|
61
61
|
authored feedback subtrees. It also reports secure-delivery v1 blockers such as
|
|
62
62
|
template processing, set-correct-response, and adaptive response processing.
|
|
63
63
|
|
|
64
|
-
String-range redaction
|
|
65
|
-
|
|
66
|
-
must treat those diagnostics, `parseQtiXml().ok === false`,
|
|
67
|
-
`buildQtiDeliverySafeXml().ok === false` as non-deliverable. The redacted output is
|
|
64
|
+
String-range redaction uses the same dependency-free XML parser as `parseQtiXml`, with
|
|
65
|
+
source ranges recorded during parsing. XML parse failures are reported as `xml.parse`
|
|
66
|
+
error diagnostics; hosts must treat those diagnostics, `parseQtiXml().ok === false`,
|
|
67
|
+
and `buildQtiDeliverySafeXml().ok === false` as non-deliverable. The redacted output is
|
|
68
68
|
re-analyzed before `ok` is returned, but hosts should still treat redacted XML as
|
|
69
69
|
untrusted presentation input.
|
|
70
70
|
|
|
71
|
-
The
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
The parser does not resolve external entities, process DTD entity declarations, or access
|
|
72
|
+
the network or filesystem. Unknown named entities are preserved verbatim, and numeric
|
|
73
|
+
character references expand to at most one valid XML character.
|
|
74
74
|
|
|
75
75
|
Candidate-safe XML is not a full content audit. It does not remove solution text an
|
|
76
76
|
author wrote directly into the item body, and it does not validate Portable Custom
|
|
@@ -120,3 +120,34 @@ line yet.
|
|
|
120
120
|
|
|
121
121
|
See the main repository README for the support matrix and release notes:
|
|
122
122
|
https://github.com/LongsightGroup/qti3
|
|
123
|
+
|
|
124
|
+
### Shared vocabulary authoring
|
|
125
|
+
|
|
126
|
+
Authoring tools can build QTI shared-vocabulary controls from the core field registry instead of
|
|
127
|
+
maintaining local class-prefix logic:
|
|
128
|
+
|
|
129
|
+
```ts
|
|
130
|
+
import {
|
|
131
|
+
parseSharedVocabularyClasses,
|
|
132
|
+
serializeSharedVocabularyAttributes,
|
|
133
|
+
serializeSharedVocabularyClassNames,
|
|
134
|
+
sharedVocabularyFieldsForInteraction,
|
|
135
|
+
} from "@longsightgroup/qti3-core";
|
|
136
|
+
|
|
137
|
+
const fields = sharedVocabularyFieldsForInteraction("choice");
|
|
138
|
+
const state = parseSharedVocabularyClasses("qti-labels-decimal qti-orientation-horizontal");
|
|
139
|
+
|
|
140
|
+
const className = serializeSharedVocabularyClassNames({
|
|
141
|
+
...state,
|
|
142
|
+
"input-control-hidden": true,
|
|
143
|
+
}).join(" ");
|
|
144
|
+
|
|
145
|
+
const attrs = serializeSharedVocabularyAttributes(
|
|
146
|
+
{ "media-player-controls": ["play", "captions"] },
|
|
147
|
+
"media",
|
|
148
|
+
);
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
The registry models authoring-level fields such as `labels-style`, `choices-position`, and
|
|
152
|
+
`media-player-controls`; downstream products should keep UI labels, editor layout, and draft
|
|
153
|
+
property names in their own adapter layer.
|
package/dist/content-text.d.ts
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
|
-
import type { QtiChoice, QtiContentNode } from "./types.js";
|
|
1
|
+
import type { QtiChoice, QtiContentNode, QtiSourceLocation } from "./types.js";
|
|
2
2
|
export interface FlatTextFromContentOptions {
|
|
3
3
|
excludeAnnotations?: boolean;
|
|
4
4
|
}
|
|
5
5
|
export declare function normalizeFlatText(text: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Append parsed character data to QTI content. The XML layer keeps text verbatim in
|
|
8
|
+
* `XmlNode.content`; this helper drops block-layout indentation (whitespace-only segments
|
|
9
|
+
* that contain a newline) when building `QtiContentNode` trees.
|
|
10
|
+
*/
|
|
11
|
+
export declare function appendContentTextNode(content: QtiContentNode[], text: string, source?: QtiSourceLocation): void;
|
|
6
12
|
export declare function flatTextFromContent(nodes: QtiContentNode[], options?: FlatTextFromContentOptions): string;
|
|
7
13
|
export declare function choiceAccessibleLabel(choice: QtiChoice | undefined, fallbackIdentifier?: string): string;
|
|
8
14
|
//# sourceMappingURL=content-text.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-text.d.ts","sourceRoot":"","sources":["../src/content-text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"content-text.d.ts","sourceRoot":"","sources":["../src/content-text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/E,MAAM,WAAW,0BAA0B;IACzC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,cAAc,EAAE,EACzB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,iBAAiB,GACzB,IAAI,CAGN;AAOD,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,GAAE,0BAA+B,GACvC,MAAM,CAKR;AA+BD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,GAAG,SAAS,EAC7B,kBAAkB,CAAC,EAAE,MAAM,GAC1B,MAAM,CAQR"}
|
package/dist/content-text.js
CHANGED
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
export function normalizeFlatText(text) {
|
|
2
2
|
return text.replace(/\s+/g, " ").trim();
|
|
3
3
|
}
|
|
4
|
+
/**
|
|
5
|
+
* Append parsed character data to QTI content. The XML layer keeps text verbatim in
|
|
6
|
+
* `XmlNode.content`; this helper drops block-layout indentation (whitespace-only segments
|
|
7
|
+
* that contain a newline) when building `QtiContentNode` trees.
|
|
8
|
+
*/
|
|
9
|
+
export function appendContentTextNode(content, text, source) {
|
|
10
|
+
if (text.length === 0 || isIndentationWhitespace(text))
|
|
11
|
+
return;
|
|
12
|
+
content.push({ kind: "text", text, source });
|
|
13
|
+
}
|
|
14
|
+
/** Block pretty-print noise such as `\n ` between sibling block elements, not inline spaces. */
|
|
15
|
+
function isIndentationWhitespace(text) {
|
|
16
|
+
return text.trim().length === 0 && text.includes("\n");
|
|
17
|
+
}
|
|
4
18
|
export function flatTextFromContent(nodes, options = {}) {
|
|
5
19
|
const excludeAnnotations = options.excludeAnnotations ?? false;
|
|
6
20
|
return normalizeFlatText(nodes.map((node) => flatTextFromContentNode(node, excludeAnnotations)).join(" "));
|
package/dist/content-text.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-text.js","sourceRoot":"","sources":["../src/content-text.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,KAAuB,EACvB,UAAsC,EAAE;IAExC,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,IAAI,KAAK,CAAC;IAC/D,OAAO,iBAAiB,CACtB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CACjF,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAoB,EAAE,kBAA2B;IAChF,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,MAAM;YACT,OAAO,IAAI,CAAC,IAAI,CAAC;QACnB,KAAK,SAAS;YACZ,IACE,kBAAkB;gBAClB,CAAC,IAAI,CAAC,OAAO,KAAK,YAAY,IAAI,IAAI,CAAC,OAAO,KAAK,gBAAgB,CAAC,EACpE,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YACvF,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG;gBAAE,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAC9E,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;gBACjE,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;YACzC,CAAC;YACD,OAAO,IAAI,CAAC,QAAQ;iBACjB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,uBAAuB,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;iBAClE,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,KAAK,UAAU;YACb,OAAO,IAAI,CAAC,QAAQ;iBACjB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,uBAAuB,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;iBAClE,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,KAAK,aAAa,CAAC;QACnB,KAAK,iBAAiB;YACpB,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,MAA6B,EAC7B,kBAA2B;IAE3B,IAAI,CAAC,MAAM;QAAE,OAAO,kBAAkB,IAAI,EAAE,CAAC;IAC7C,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO;QAChC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;QACnE,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,iBAAiB,CACtB,WAAW,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,UAAU,IAAI,kBAAkB,IAAI,EAAE,CAC5E,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"content-text.js","sourceRoot":"","sources":["../src/content-text.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
export { createCatalogSupportResolution, type QtiCatalogSupportResolution, type QtiCatalogSupportResolutionOptions, type QtiResolvedCatalogReference, type QtiResolvedCatalogSupport, } from "./catalog.js";
|
|
2
2
|
export { analyzeQtiDeliverySecurity, buildQtiDeliverySafeXml, type QtiDeliverySafeXmlResult, type QtiDeliverySecurityAnalysis, type QtiDeliverySecurityFinding, type QtiDeliverySecurityFindingKind, } from "./delivery-security.js";
|
|
3
3
|
export { compileQtiPatternMask, isValidQtiPatternMask } from "./pattern-mask.js";
|
|
4
|
+
export { parseQtiPackageXmlTree, type QtiPackageXmlNode, type QtiPackageXmlTree, } from "./package-xml.js";
|
|
4
5
|
export { parseQtiXml } from "./parser.js";
|
|
5
6
|
export { scoreQtiItemServerSide, type QtiServerScoringInput, type QtiServerScoringResponseInput, type QtiServerScoringResult, } from "./server-scoring.js";
|
|
7
|
+
export { serializeResponseProcessing, type QtiSerializeResponseProcessingResult, } from "./serializer-processing.js";
|
|
6
8
|
export { createTextToSpeechTraversal, parseQtiDataSsml, validateQtiDataSsmlMetadata, type QtiDataSsml, type QtiDataSsmlBreak, type QtiDataSsmlBreakStrength, type QtiDataSsmlParseResult, type QtiDataSsmlPhoneme, type QtiDataSsmlProsody, type QtiDataSsmlSayAs, type QtiDataSsmlSub, type QtiTextToSpeechSegment, type QtiTextToSpeechSegmentKind, type QtiTextToSpeechTraversal, } from "./tts.js";
|
|
7
9
|
export { assertQtiAttemptStateV1, createItemSession, isQtiAttemptStateV1, visibleModalFeedback, type QtiCustomOperatorContext, type QtiCustomOperatorHandler, type QtiCustomOperatorRegistry, type QtiItemSession, type QtiItemSessionOptions, } from "./session.js";
|
|
8
|
-
export { deprecatedInteractionSupport, elementSupport, getInteractionSupport, interactionNameToType, interactionSupport, processingSupport, } from "./support.js";
|
|
10
|
+
export { deprecatedInteractionSupport, elementSupport, getInteractionSupport, interactionRegistryStatus, interactionNameToType, interactionSupport, itemMetadataSupport, processingSupport, } from "./support.js";
|
|
9
11
|
export { sharedVocabularyClassSupport } from "./shared-vocabulary-support.js";
|
|
10
12
|
export { findSharedVocabularyCoverageViolations, type SharedVocabularyCoverageViolation, } from "./shared-vocabulary-coverage-policy.js";
|
|
13
|
+
export { describeSharedVocabularyPrecedence, formatSharedVocabularyClassValueRange, matchedSharedVocabularyClassNames, parseClassValue, parseSharedVocabularyAttributes, parseSharedVocabularyClasses, serializeSharedVocabularyAttributes, serializeSharedVocabularyClassNames, sharedVocabularyClassNamesForField, sharedVocabularyFieldById, sharedVocabularyFieldsForInteraction, sharedVocabularyFixedClassName, sharedVocabularyInteractionFields, type QtiSharedVocabularyAttributeValueType, type QtiSharedVocabularyField, type QtiSharedVocabularyFieldValue, type QtiSharedVocabularyState, type QtiSharedVocabularyStateValue, } from "./shared-vocabulary-authoring.js";
|
|
14
|
+
export { SHARED_VOCABULARY_CHOICE_AND_ORDER_INTERACTIONS, SHARED_VOCABULARY_CHOICE_INTERACTIONS, SHARED_VOCABULARY_CHOICES_LAYOUT_INTERACTIONS, SHARED_VOCABULARY_MEDIA_INTERACTIONS, SHARED_VOCABULARY_SELECTION_PRESENTATION_INTERACTIONS, } from "./shared-vocabulary-interaction-sets.js";
|
|
11
15
|
export { matrixCoverageFamilyForClass, SHARED_VOCABULARY_CHOICE_WRITING_ORIENTATIONS, SHARED_VOCABULARY_CONTENT_ALIGNMENTS, SHARED_VOCABULARY_CONTENT_FLOAT_SUFFIXES, SHARED_VOCABULARY_CONTENT_LIST_STYLE_TYPES, SHARED_VOCABULARY_CONTENT_TEXT_INDENT_SUFFIXES, SHARED_VOCABULARY_CONTENT_VALIGNS, SHARED_VOCABULARY_CONTENT_WIDTH_ALIASES, SHARED_VOCABULARY_CONTENT_WRITING_MODES, SHARED_VOCABULARY_LAYOUT_COLUMN_SPAN_COUNT, SHARED_VOCABULARY_LAYOUT_OFFSET_COUNT, sharedVocabularyMatrixCoverageFamilies, } from "./shared-vocabulary-generated-families.js";
|
|
12
16
|
export { isEnforcedSharedVocabularyLevel, type SharedVocabularySupportLevel, } from "./shared-vocabulary-levels.js";
|
|
13
|
-
export { extendedTextCounterPosition, extendedTextCounterPositionFromAttributes, extendedTextCounterState, extendedTextCounterStateFromAttributes, extendedTextCounterValues, extendedTextExpectedLengthFromAttributes, extendedTextHeightLines, extendedTextHeightLinesFromAttributes, firstMatchingSharedVocabularyClass, formatSupportedExtendedTextCounterClasses, formatSupportedExtendedTextHeightLinesClasses, formatSupportedGapInputWidthClasses, formatSupportedInputWidthClasses, formatSupportedMediaPlayerControlsTokens, gapInputWidthFromAttributes, isSupportedExtendedTextCounterClassName, isSupportedExtendedTextHeightLinesClassName, inputWidthFromAttributes, isSupportedInputWidthClassName, isSupportedMediaPlayerControlsToken, mediaPlayerControlsTokens, SHARED_VOCABULARY_EXTENDED_TEXT_COUNTER_CLASSES, SHARED_VOCABULARY_EXTENDED_TEXT_HEIGHT_LINES, SHARED_VOCABULARY_GAP_INPUT_WIDTHS, SHARED_VOCABULARY_INPUT_WIDTHS, SHARED_VOCABULARY_MEDIA_PLAYER_CONTROLS, sharedVocabularyClassNames, supportedExtendedTextCounterClassNames, supportedExtendedTextHeightLinesClassNames, supportedGapInputWidthClassNames, supportedInputWidthClassNames, unsupportedMediaPlayerControlsTokens, type ExtendedTextCounterState, type SharedVocabularyExtendedTextCounterPosition, type SharedVocabularyMediaPlayerControls, } from "./shared-vocabulary.js";
|
|
17
|
+
export { extendedTextCounterPosition, extendedTextCounterPositionFromAttributes, extendedTextCounterState, extendedTextCounterStateFromAttributes, extendedTextCounterValues, extendedTextExpectedLengthFromAttributes, extendedTextHeightLines, extendedTextHeightLinesFromAttributes, firstMatchingSharedVocabularyClass, formatSupportedExtendedTextCounterClasses, formatSupportedExtendedTextHeightLinesClasses, formatSupportedGapInputWidthClasses, formatSupportedInputWidthClasses, formatSupportedMediaPlayerControlsTokens, gapInputWidthFromAttributes, isSupportedExtendedTextCounterClassName, isSupportedExtendedTextHeightLinesClassName, inputWidthFromAttributes, isSupportedInputWidthClassName, isSupportedMediaPlayerControlsToken, mediaPlayerControlsTokens, SHARED_VOCABULARY_CHOICES_POSITIONS, SHARED_VOCABULARY_CHOICES_STACKING, SHARED_VOCABULARY_EXTENDED_TEXT_COUNTER_CLASSES, SHARED_VOCABULARY_EXTENDED_TEXT_HEIGHT_LINES, SHARED_VOCABULARY_GAP_INPUT_WIDTHS, SHARED_VOCABULARY_INPUT_WIDTHS, SHARED_VOCABULARY_LABEL_STYLES, SHARED_VOCABULARY_LABEL_SUFFIXES, SHARED_VOCABULARY_MEDIA_PLAYER_CONTROLS, SHARED_VOCABULARY_ORIENTATIONS, SHARED_VOCABULARY_SELECTION_TONES, sharedVocabularyClassNames, supportedExtendedTextCounterClassNames, supportedExtendedTextHeightLinesClassNames, supportedGapInputWidthClassNames, supportedInputWidthClassNames, unsupportedMediaPlayerControlsTokens, type ExtendedTextCounterState, type SharedVocabularyExtendedTextCounterPosition, type SharedVocabularyMediaPlayerControls, } from "./shared-vocabulary.js";
|
|
14
18
|
export { validateAssessmentItem } from "./validation.js";
|
|
15
|
-
export type { QtiAssessmentItem, QtiAttemptStatus, QtiAttemptStateV1, QtiCatalog, QtiCatalogCard, QtiCatalogCardEntry, QtiCatalogFileHref, QtiCatalogHtmlContent, QtiCatalogInfo, QtiCatalogReference, QtiChoice, QtiChoiceRole, QtiContentNode, QtiDiagnostic, QtiDocument, QtiElementSupport, QtiInteractionElementSupport, QtiInteraction, QtiInteractionType, QtiMediaSource, QtiMediaTrack, QtiModalFeedback, QtiObjectAsset, QtiParseResult, QtiProcessingElementSupport, QtiPortableCustomDefinition, QtiPortableCustomInteractionModule, QtiPortableCustomInteractionModules, QtiPortableCustomStateValue, QtiPortableCustomVariableBinding, QtiResponseBranch, QtiScoreResult, QtiSupportStatus, QtiTemplateDeclaration, QtiTemplateBranch, QtiTemplateProcessing, QtiTemplateRule, QtiValidationResult, QtiValue, SharedVocabularyClassSupport, } from "./types.js";
|
|
19
|
+
export type { QtiAssessmentItem, QtiAttemptStatus, QtiAttemptStateV1, QtiCatalog, QtiCatalogCard, QtiCatalogCardEntry, QtiCatalogFileHref, QtiCatalogHtmlContent, QtiCatalogInfo, QtiCatalogReference, QtiChoice, QtiChoiceRole, QtiCompanionMaterialsInfo, QtiCompanionMaterialsUnparsedChild, QtiContentNode, QtiCustomInteractionDefinition, QtiInteractionMarkupDefinition, QtiDiagnostic, QtiDocument, QtiElementSupport, QtiInteractionElementSupport, QtiItemMetadataElementSupport, QtiInteraction, QtiInteractionRegistryStatus, QtiInteractionType, QtiMediaSource, QtiMediaTrack, QtiMapEntry, QtiModalFeedback, QtiObjectAsset, QtiOutcomeDeclaration, QtiParseResult, QtiPhysicalMaterial, QtiProcessingExpression, QtiProcessingElementSupport, QtiPortableCustomDefinition, QtiPortableCustomInteractionModule, QtiPortableCustomInteractionModules, QtiPortableCustomStateValue, QtiPortableCustomVariableBinding, QtiAreaMapEntry, QtiGapMatchGapSegment, QtiGapMatchSegment, QtiGapMatchTextSegment, QtiHottextChoiceSegment, QtiHottextSegment, QtiHottextTextSegment, QtiResponseBranch, QtiResponseCondition, QtiResponseDeclaration, QtiResponseProcessing, QtiResponseRule, QtiScoreResult, QtiLookupOutcomeValue, QtiSetOutcomeValue, QtiSupportStatus, QtiTemplateDeclaration, QtiTemplateBranch, QtiTemplateProcessing, QtiTemplateRule, QtiValidationResult, QtiValue, SharedVocabularyClassSupport, } from "./types.js";
|
|
16
20
|
export { isQtiPortableCustomStateValue, isQtiValue, qtiScalarToString, qtiValueToIdentifierList, qtiValueToString, qtiValueToStringList, readQtiPortableCustomStateValue, readQtiJsonValue, unknownToDisplayString, } from "./value-format.js";
|
|
17
21
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,8BAA8B,EAC9B,KAAK,2BAA2B,EAChC,KAAK,kCAAkC,EACvC,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,GAC/B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,KAAK,8BAA8B,GACpC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,sBAAsB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,6BAA6B,EAClC,KAAK,sBAAsB,GAC5B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,2BAA2B,EAC3B,gBAAgB,EAChB,2BAA2B,EAC3B,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,GAC9B,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,cAAc,EACnB,KAAK,qBAAqB,GAC3B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,4BAA4B,EAC5B,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EACL,sCAAsC,EACtC,KAAK,iCAAiC,GACvC,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,4BAA4B,EAC5B,6CAA6C,EAC7C,oCAAoC,EACpC,wCAAwC,EACxC,0CAA0C,EAC1C,8CAA8C,EAC9C,iCAAiC,EACjC,uCAAuC,EACvC,uCAAuC,EACvC,0CAA0C,EAC1C,qCAAqC,EACrC,sCAAsC,GACvC,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,+BAA+B,EAC/B,KAAK,4BAA4B,GAClC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,2BAA2B,EAC3B,yCAAyC,EACzC,wBAAwB,EACxB,sCAAsC,EACtC,yBAAyB,EACzB,wCAAwC,EACxC,uBAAuB,EACvB,qCAAqC,EACrC,kCAAkC,EAClC,yCAAyC,EACzC,6CAA6C,EAC7C,mCAAmC,EACnC,gCAAgC,EAChC,wCAAwC,EACxC,2BAA2B,EAC3B,uCAAuC,EACvC,2CAA2C,EAC3C,wBAAwB,EACxB,8BAA8B,EAC9B,mCAAmC,EACnC,yBAAyB,EACzB,+CAA+C,EAC/C,4CAA4C,EAC5C,kCAAkC,EAClC,8BAA8B,EAC9B,uCAAuC,EACvC,0BAA0B,EAC1B,sCAAsC,EACtC,0CAA0C,EAC1C,gCAAgC,EAChC,6BAA6B,EAC7B,oCAAoC,EACpC,KAAK,wBAAwB,EAC7B,KAAK,2CAA2C,EAChD,KAAK,mCAAmC,GACzC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,SAAS,EACT,aAAa,EACb,cAAc,EACd,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,4BAA4B,EAC5B,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,2BAA2B,EAC3B,2BAA2B,EAC3B,kCAAkC,EAClC,mCAAmC,EACnC,2BAA2B,EAC3B,gCAAgC,EAChC,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,QAAQ,EACR,4BAA4B,GAC7B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,6BAA6B,EAC7B,UAAU,EACV,iBAAiB,EACjB,wBAAwB,EACxB,gBAAgB,EAChB,oBAAoB,EACpB,+BAA+B,EAC/B,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
export { createCatalogSupportResolution, } from "./catalog.js";
|
|
2
2
|
export { analyzeQtiDeliverySecurity, buildQtiDeliverySafeXml, } from "./delivery-security.js";
|
|
3
3
|
export { compileQtiPatternMask, isValidQtiPatternMask } from "./pattern-mask.js";
|
|
4
|
+
export { parseQtiPackageXmlTree, } from "./package-xml.js";
|
|
4
5
|
export { parseQtiXml } from "./parser.js";
|
|
5
6
|
export { scoreQtiItemServerSide, } from "./server-scoring.js";
|
|
7
|
+
export { serializeResponseProcessing, } from "./serializer-processing.js";
|
|
6
8
|
export { createTextToSpeechTraversal, parseQtiDataSsml, validateQtiDataSsmlMetadata, } from "./tts.js";
|
|
7
9
|
export { assertQtiAttemptStateV1, createItemSession, isQtiAttemptStateV1, visibleModalFeedback, } from "./session.js";
|
|
8
|
-
export { deprecatedInteractionSupport, elementSupport, getInteractionSupport, interactionNameToType, interactionSupport, processingSupport, } from "./support.js";
|
|
10
|
+
export { deprecatedInteractionSupport, elementSupport, getInteractionSupport, interactionRegistryStatus, interactionNameToType, interactionSupport, itemMetadataSupport, processingSupport, } from "./support.js";
|
|
9
11
|
export { sharedVocabularyClassSupport } from "./shared-vocabulary-support.js";
|
|
10
12
|
export { findSharedVocabularyCoverageViolations, } from "./shared-vocabulary-coverage-policy.js";
|
|
13
|
+
export { describeSharedVocabularyPrecedence, formatSharedVocabularyClassValueRange, matchedSharedVocabularyClassNames, parseClassValue, parseSharedVocabularyAttributes, parseSharedVocabularyClasses, serializeSharedVocabularyAttributes, serializeSharedVocabularyClassNames, sharedVocabularyClassNamesForField, sharedVocabularyFieldById, sharedVocabularyFieldsForInteraction, sharedVocabularyFixedClassName, sharedVocabularyInteractionFields, } from "./shared-vocabulary-authoring.js";
|
|
14
|
+
export { SHARED_VOCABULARY_CHOICE_AND_ORDER_INTERACTIONS, SHARED_VOCABULARY_CHOICE_INTERACTIONS, SHARED_VOCABULARY_CHOICES_LAYOUT_INTERACTIONS, SHARED_VOCABULARY_MEDIA_INTERACTIONS, SHARED_VOCABULARY_SELECTION_PRESENTATION_INTERACTIONS, } from "./shared-vocabulary-interaction-sets.js";
|
|
11
15
|
export { matrixCoverageFamilyForClass, SHARED_VOCABULARY_CHOICE_WRITING_ORIENTATIONS, SHARED_VOCABULARY_CONTENT_ALIGNMENTS, SHARED_VOCABULARY_CONTENT_FLOAT_SUFFIXES, SHARED_VOCABULARY_CONTENT_LIST_STYLE_TYPES, SHARED_VOCABULARY_CONTENT_TEXT_INDENT_SUFFIXES, SHARED_VOCABULARY_CONTENT_VALIGNS, SHARED_VOCABULARY_CONTENT_WIDTH_ALIASES, SHARED_VOCABULARY_CONTENT_WRITING_MODES, SHARED_VOCABULARY_LAYOUT_COLUMN_SPAN_COUNT, SHARED_VOCABULARY_LAYOUT_OFFSET_COUNT, sharedVocabularyMatrixCoverageFamilies, } from "./shared-vocabulary-generated-families.js";
|
|
12
16
|
export { isEnforcedSharedVocabularyLevel, } from "./shared-vocabulary-levels.js";
|
|
13
|
-
export { extendedTextCounterPosition, extendedTextCounterPositionFromAttributes, extendedTextCounterState, extendedTextCounterStateFromAttributes, extendedTextCounterValues, extendedTextExpectedLengthFromAttributes, extendedTextHeightLines, extendedTextHeightLinesFromAttributes, firstMatchingSharedVocabularyClass, formatSupportedExtendedTextCounterClasses, formatSupportedExtendedTextHeightLinesClasses, formatSupportedGapInputWidthClasses, formatSupportedInputWidthClasses, formatSupportedMediaPlayerControlsTokens, gapInputWidthFromAttributes, isSupportedExtendedTextCounterClassName, isSupportedExtendedTextHeightLinesClassName, inputWidthFromAttributes, isSupportedInputWidthClassName, isSupportedMediaPlayerControlsToken, mediaPlayerControlsTokens, SHARED_VOCABULARY_EXTENDED_TEXT_COUNTER_CLASSES, SHARED_VOCABULARY_EXTENDED_TEXT_HEIGHT_LINES, SHARED_VOCABULARY_GAP_INPUT_WIDTHS, SHARED_VOCABULARY_INPUT_WIDTHS, SHARED_VOCABULARY_MEDIA_PLAYER_CONTROLS, sharedVocabularyClassNames, supportedExtendedTextCounterClassNames, supportedExtendedTextHeightLinesClassNames, supportedGapInputWidthClassNames, supportedInputWidthClassNames, unsupportedMediaPlayerControlsTokens, } from "./shared-vocabulary.js";
|
|
17
|
+
export { extendedTextCounterPosition, extendedTextCounterPositionFromAttributes, extendedTextCounterState, extendedTextCounterStateFromAttributes, extendedTextCounterValues, extendedTextExpectedLengthFromAttributes, extendedTextHeightLines, extendedTextHeightLinesFromAttributes, firstMatchingSharedVocabularyClass, formatSupportedExtendedTextCounterClasses, formatSupportedExtendedTextHeightLinesClasses, formatSupportedGapInputWidthClasses, formatSupportedInputWidthClasses, formatSupportedMediaPlayerControlsTokens, gapInputWidthFromAttributes, isSupportedExtendedTextCounterClassName, isSupportedExtendedTextHeightLinesClassName, inputWidthFromAttributes, isSupportedInputWidthClassName, isSupportedMediaPlayerControlsToken, mediaPlayerControlsTokens, SHARED_VOCABULARY_CHOICES_POSITIONS, SHARED_VOCABULARY_CHOICES_STACKING, SHARED_VOCABULARY_EXTENDED_TEXT_COUNTER_CLASSES, SHARED_VOCABULARY_EXTENDED_TEXT_HEIGHT_LINES, SHARED_VOCABULARY_GAP_INPUT_WIDTHS, SHARED_VOCABULARY_INPUT_WIDTHS, SHARED_VOCABULARY_LABEL_STYLES, SHARED_VOCABULARY_LABEL_SUFFIXES, SHARED_VOCABULARY_MEDIA_PLAYER_CONTROLS, SHARED_VOCABULARY_ORIENTATIONS, SHARED_VOCABULARY_SELECTION_TONES, sharedVocabularyClassNames, supportedExtendedTextCounterClassNames, supportedExtendedTextHeightLinesClassNames, supportedGapInputWidthClassNames, supportedInputWidthClassNames, unsupportedMediaPlayerControlsTokens, } from "./shared-vocabulary.js";
|
|
14
18
|
export { validateAssessmentItem } from "./validation.js";
|
|
15
19
|
export { isQtiPortableCustomStateValue, isQtiValue, qtiScalarToString, qtiValueToIdentifierList, qtiValueToString, qtiValueToStringList, readQtiPortableCustomStateValue, readQtiJsonValue, unknownToDisplayString, } from "./value-format.js";
|
|
16
20
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,8BAA8B,GAK/B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,GAKxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,sBAAsB,GAIvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,2BAA2B,EAC3B,gBAAgB,EAChB,2BAA2B,GAY5B,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,GAMrB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,4BAA4B,EAC5B,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EACL,sCAAsC,GAEvC,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,4BAA4B,EAC5B,6CAA6C,EAC7C,oCAAoC,EACpC,wCAAwC,EACxC,0CAA0C,EAC1C,8CAA8C,EAC9C,iCAAiC,EACjC,uCAAuC,EACvC,uCAAuC,EACvC,0CAA0C,EAC1C,qCAAqC,EACrC,sCAAsC,GACvC,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,+BAA+B,GAEhC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,2BAA2B,EAC3B,yCAAyC,EACzC,wBAAwB,EACxB,sCAAsC,EACtC,yBAAyB,EACzB,wCAAwC,EACxC,uBAAuB,EACvB,qCAAqC,EACrC,kCAAkC,EAClC,yCAAyC,EACzC,6CAA6C,EAC7C,mCAAmC,EACnC,gCAAgC,EAChC,wCAAwC,EACxC,2BAA2B,EAC3B,uCAAuC,EACvC,2CAA2C,EAC3C,wBAAwB,EACxB,8BAA8B,EAC9B,mCAAmC,EACnC,yBAAyB,EACzB,+CAA+C,EAC/C,4CAA4C,EAC5C,kCAAkC,EAClC,8BAA8B,EAC9B,uCAAuC,EACvC,0BAA0B,EAC1B,sCAAsC,EACtC,0CAA0C,EAC1C,gCAAgC,EAChC,6BAA6B,EAC7B,oCAAoC,GAIrC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,8BAA8B,GAK/B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,GAKxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EACL,sBAAsB,GAGvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,sBAAsB,GAIvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,2BAA2B,GAE5B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,2BAA2B,EAC3B,gBAAgB,EAChB,2BAA2B,GAY5B,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,GAMrB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,4BAA4B,EAC5B,cAAc,EACd,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EACL,sCAAsC,GAEvC,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,kCAAkC,EAClC,qCAAqC,EACrC,iCAAiC,EACjC,eAAe,EACf,+BAA+B,EAC/B,4BAA4B,EAC5B,mCAAmC,EACnC,mCAAmC,EACnC,kCAAkC,EAClC,yBAAyB,EACzB,oCAAoC,EACpC,8BAA8B,EAC9B,iCAAiC,GAMlC,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,+CAA+C,EAC/C,qCAAqC,EACrC,6CAA6C,EAC7C,oCAAoC,EACpC,qDAAqD,GACtD,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,4BAA4B,EAC5B,6CAA6C,EAC7C,oCAAoC,EACpC,wCAAwC,EACxC,0CAA0C,EAC1C,8CAA8C,EAC9C,iCAAiC,EACjC,uCAAuC,EACvC,uCAAuC,EACvC,0CAA0C,EAC1C,qCAAqC,EACrC,sCAAsC,GACvC,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,+BAA+B,GAEhC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,2BAA2B,EAC3B,yCAAyC,EACzC,wBAAwB,EACxB,sCAAsC,EACtC,yBAAyB,EACzB,wCAAwC,EACxC,uBAAuB,EACvB,qCAAqC,EACrC,kCAAkC,EAClC,yCAAyC,EACzC,6CAA6C,EAC7C,mCAAmC,EACnC,gCAAgC,EAChC,wCAAwC,EACxC,2BAA2B,EAC3B,uCAAuC,EACvC,2CAA2C,EAC3C,wBAAwB,EACxB,8BAA8B,EAC9B,mCAAmC,EACnC,yBAAyB,EACzB,mCAAmC,EACnC,kCAAkC,EAClC,+CAA+C,EAC/C,4CAA4C,EAC5C,kCAAkC,EAClC,8BAA8B,EAC9B,8BAA8B,EAC9B,gCAAgC,EAChC,uCAAuC,EACvC,8BAA8B,EAC9B,iCAAiC,EACjC,0BAA0B,EAC1B,sCAAsC,EACtC,0CAA0C,EAC1C,gCAAgC,EAChC,6BAA6B,EAC7B,oCAAoC,GAIrC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAkEzD,OAAO,EACL,6BAA6B,EAC7B,UAAU,EACV,iBAAiB,EACjB,wBAAwB,EACxB,gBAAgB,EAChB,oBAAoB,EACpB,+BAA+B,EAC/B,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface QtiPackageXmlNode {
|
|
2
|
+
localName: string;
|
|
3
|
+
attributes: Record<string, string>;
|
|
4
|
+
children: QtiPackageXmlNode[];
|
|
5
|
+
text: string;
|
|
6
|
+
}
|
|
7
|
+
export interface QtiPackageXmlTree {
|
|
8
|
+
root: QtiPackageXmlNode | undefined;
|
|
9
|
+
errors: string[];
|
|
10
|
+
}
|
|
11
|
+
export declare function parseQtiPackageXmlTree(xml: string): QtiPackageXmlTree;
|
|
12
|
+
//# sourceMappingURL=package-xml.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-xml.d.ts","sourceRoot":"","sources":["../src/package-xml.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAMrE"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { parseXmlTree } from "./xml.js";
|
|
2
|
+
export function parseQtiPackageXmlTree(xml) {
|
|
3
|
+
const parsed = parseXmlTree(xml);
|
|
4
|
+
return {
|
|
5
|
+
root: parsed.root ? packageXmlNode(parsed.root) : undefined,
|
|
6
|
+
errors: parsed.errors.map((error) => error.message),
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
function packageXmlNode(node) {
|
|
10
|
+
return {
|
|
11
|
+
localName: node.localName,
|
|
12
|
+
attributes: node.attributes,
|
|
13
|
+
children: node.children.map(packageXmlNode),
|
|
14
|
+
text: node.text,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=package-xml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-xml.js","sourceRoot":"","sources":["../src/package-xml.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAgB,MAAM,UAAU,CAAC;AActD,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACjC,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;QAC3D,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;KACpD,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,IAAa;IACnC,OAAO;QACL,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC;QAC3C,IAAI,EAAE,IAAI,CAAC,IAAI;KAChB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { QtiCustomInteractionDefinition, QtiDiagnostic, QtiInteractionType, QtiPortableCustomDefinition } from "./types.js";
|
|
2
|
+
import { type XmlNode } from "./xml.js";
|
|
3
|
+
export type QtiInteractionElementPredicate = (node: XmlNode) => boolean;
|
|
4
|
+
export declare function parseInteractionCustomPayload(node: XmlNode, interactionType: QtiInteractionType | undefined, diagnostics: QtiDiagnostic[], isInteractionElement: QtiInteractionElementPredicate): {
|
|
5
|
+
customInteraction?: QtiCustomInteractionDefinition;
|
|
6
|
+
portableCustom?: QtiPortableCustomDefinition;
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=parser-custom-interactions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-custom-interactions.d.ts","sourceRoot":"","sources":["../src/parser-custom-interactions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,8BAA8B,EAC9B,aAAa,EAEb,kBAAkB,EAClB,2BAA2B,EAI5B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAoD,KAAK,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1F,MAAM,MAAM,8BAA8B,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC;AA4BxE,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,OAAO,EACb,eAAe,EAAE,kBAAkB,GAAG,SAAS,EAC/C,WAAW,EAAE,aAAa,EAAE,EAC5B,oBAAoB,EAAE,8BAA8B,GACnD;IACD,iBAAiB,CAAC,EAAE,8BAA8B,CAAC;IACnD,cAAc,CAAC,EAAE,2BAA2B,CAAC;CAC9C,CAYA"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { appendContentTextNode } from "./content-text.js";
|
|
2
|
+
import { firstChildElement, parseCatalogInfo, parseStylesheet } from "./parser-item-metadata.js";
|
|
3
|
+
import { childElements, escapeXmlAttribute, escapeXmlText } from "./xml.js";
|
|
4
|
+
const LEGACY_CUSTOM_PROMPT_LOCAL_NAME = "qti-prompt";
|
|
5
|
+
const legacyCustomSerializeOptions = {
|
|
6
|
+
excludeLocalNames: [LEGACY_CUSTOM_PROMPT_LOCAL_NAME],
|
|
7
|
+
};
|
|
8
|
+
const legacyCustomMarkupOptions = {
|
|
9
|
+
nestedInteractionCode: "interaction.custom.markupInteraction",
|
|
10
|
+
contextName: "qti-custom-interaction markup",
|
|
11
|
+
skipChild: (child) => child.localName === LEGACY_CUSTOM_PROMPT_LOCAL_NAME,
|
|
12
|
+
};
|
|
13
|
+
const portableCustomMarkupOptions = {
|
|
14
|
+
nestedInteractionCode: "interaction.portableCustom.markupInteraction",
|
|
15
|
+
contextName: "qti-interaction-markup",
|
|
16
|
+
};
|
|
17
|
+
export function parseInteractionCustomPayload(node, interactionType, diagnostics, isInteractionElement) {
|
|
18
|
+
if (node.localName === "qti-custom-interaction") {
|
|
19
|
+
return {
|
|
20
|
+
customInteraction: parseCustomInteractionDefinition(node, diagnostics, isInteractionElement),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
if (interactionType === "portableCustom") {
|
|
24
|
+
return {
|
|
25
|
+
portableCustom: parsePortableCustomDefinition(node, diagnostics, isInteractionElement),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
return {};
|
|
29
|
+
}
|
|
30
|
+
function parseCustomInteractionDefinition(node, diagnostics, isInteractionElement) {
|
|
31
|
+
return parseInteractionMarkupDefinition(node, diagnostics, isInteractionElement, legacyCustomMarkupOptions, legacyCustomSerializeOptions);
|
|
32
|
+
}
|
|
33
|
+
function parsePortableCustomDefinition(node, diagnostics, isInteractionElement) {
|
|
34
|
+
const markup = firstChildElement(node, "qti-interaction-markup", diagnostics, "interaction.portableCustom.child.duplicate");
|
|
35
|
+
const modules = firstChildElement(node, "qti-interaction-modules", diagnostics, "interaction.portableCustom.child.duplicate");
|
|
36
|
+
return {
|
|
37
|
+
...parseInteractionMarkupShell(markup, node, diagnostics, isInteractionElement, portableCustomMarkupOptions),
|
|
38
|
+
customInteractionTypeIdentifier: node.attributes["custom-interaction-type-identifier"],
|
|
39
|
+
module: node.attributes.module,
|
|
40
|
+
interactionModules: modules ? parsePortableCustomInteractionModules(modules) : undefined,
|
|
41
|
+
templateVariables: childElements(node, "qti-template-variable").map((variable) => parsePortableCustomVariableBinding(variable, "template")),
|
|
42
|
+
contextVariables: childElements(node, "qti-context-variable").map((variable) => parsePortableCustomVariableBinding(variable, "context")),
|
|
43
|
+
stylesheets: childElements(node, "qti-stylesheet").map(parseStylesheet),
|
|
44
|
+
catalogInfo: parseCatalogInfo(firstChildElement(node, "qti-catalog-info", diagnostics, "interaction.portableCustom.child.duplicate")),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function parseInteractionMarkupDefinition(markupNode, diagnostics, isInteractionElement, markupOptions, serializeOptions) {
|
|
48
|
+
const interactionMarkup = parseCustomMarkupChildren(markupNode, diagnostics, isInteractionElement, markupOptions);
|
|
49
|
+
const interactionMarkupRaw = serializeXmlContentOrUndefined(markupNode, serializeOptions);
|
|
50
|
+
return {
|
|
51
|
+
responseIdentifier: markupNode.attributes["response-identifier"],
|
|
52
|
+
interactionMarkup,
|
|
53
|
+
interactionMarkupRaw,
|
|
54
|
+
dataAttributes: parseInteractionDataAttributes(markupNode),
|
|
55
|
+
attributes: markupNode.attributes,
|
|
56
|
+
source: markupNode.source,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function parseInteractionMarkupShell(markupNode, attributeNode, diagnostics, isInteractionElement, markupOptions) {
|
|
60
|
+
if (!markupNode) {
|
|
61
|
+
return {
|
|
62
|
+
responseIdentifier: attributeNode.attributes["response-identifier"],
|
|
63
|
+
interactionMarkup: [],
|
|
64
|
+
dataAttributes: parseInteractionDataAttributes(attributeNode),
|
|
65
|
+
attributes: attributeNode.attributes,
|
|
66
|
+
source: attributeNode.source,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
...parseInteractionMarkupDefinition(markupNode, diagnostics, isInteractionElement, markupOptions),
|
|
71
|
+
responseIdentifier: attributeNode.attributes["response-identifier"],
|
|
72
|
+
dataAttributes: parseInteractionDataAttributes(attributeNode),
|
|
73
|
+
attributes: attributeNode.attributes,
|
|
74
|
+
source: attributeNode.source,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function parseInteractionDataAttributes(node) {
|
|
78
|
+
return Object.fromEntries(Object.entries(node.attributes).filter(([name]) => name.startsWith("data-")));
|
|
79
|
+
}
|
|
80
|
+
function parseCustomMarkupChildren(node, diagnostics, isInteractionElement, options) {
|
|
81
|
+
const content = [];
|
|
82
|
+
for (const entry of node.content) {
|
|
83
|
+
if (typeof entry === "string") {
|
|
84
|
+
appendContentTextNode(content, entry, node.source);
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
if (options.skipChild?.(entry))
|
|
88
|
+
continue;
|
|
89
|
+
content.push(parseCustomMarkupNode(entry, diagnostics, isInteractionElement, options));
|
|
90
|
+
}
|
|
91
|
+
return content;
|
|
92
|
+
}
|
|
93
|
+
function parseCustomMarkupNode(node, diagnostics, isInteractionElement, options) {
|
|
94
|
+
if (isInteractionElement(node)) {
|
|
95
|
+
diagnostics.push({
|
|
96
|
+
code: options.nestedInteractionCode,
|
|
97
|
+
severity: "error",
|
|
98
|
+
message: `${options.contextName} must not contain nested QTI interaction ${node.localName}.`,
|
|
99
|
+
path: node.source?.path,
|
|
100
|
+
source: node.source,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
if (node.localName === "qti-printed-variable") {
|
|
104
|
+
return {
|
|
105
|
+
kind: "printedVariable",
|
|
106
|
+
identifier: node.attributes.identifier ?? "",
|
|
107
|
+
format: node.attributes.format,
|
|
108
|
+
attributes: node.attributes,
|
|
109
|
+
source: node.source,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
if (node.localName === "qti-feedback-block" || node.localName === "qti-feedback-inline") {
|
|
113
|
+
return {
|
|
114
|
+
kind: "feedback",
|
|
115
|
+
feedbackType: node.localName === "qti-feedback-block" ? "block" : "inline",
|
|
116
|
+
identifier: node.attributes.identifier ?? "",
|
|
117
|
+
outcomeIdentifier: node.attributes["outcome-identifier"] ?? "",
|
|
118
|
+
showHide: node.attributes["show-hide"] === "hide" ? "hide" : "show",
|
|
119
|
+
attributes: node.attributes,
|
|
120
|
+
children: parseCustomMarkupChildren(node, diagnostics, isInteractionElement, options),
|
|
121
|
+
source: node.source,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
kind: "element",
|
|
126
|
+
qtiName: node.localName,
|
|
127
|
+
attributes: node.attributes,
|
|
128
|
+
children: parseCustomMarkupChildren(node, diagnostics, isInteractionElement, options),
|
|
129
|
+
source: node.source,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
function parsePortableCustomInteractionModules(node) {
|
|
133
|
+
return {
|
|
134
|
+
primaryConfiguration: node.attributes["primary-configuration"],
|
|
135
|
+
secondaryConfiguration: node.attributes["secondary-configuration"] ?? node.attributes["fallback-configuration"],
|
|
136
|
+
modules: childElements(node, "qti-interaction-module").map(parsePortableCustomInteractionModule),
|
|
137
|
+
attributes: node.attributes,
|
|
138
|
+
source: node.source,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
function parsePortableCustomInteractionModule(node) {
|
|
142
|
+
return {
|
|
143
|
+
id: node.attributes.id,
|
|
144
|
+
primaryPath: node.attributes["primary-path"],
|
|
145
|
+
fallbackPath: node.attributes["fallback-path"],
|
|
146
|
+
attributes: node.attributes,
|
|
147
|
+
source: node.source,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
function parsePortableCustomVariableBinding(node, kind) {
|
|
151
|
+
return {
|
|
152
|
+
kind,
|
|
153
|
+
identifier: node.attributes.identifier ?? node.attributes["template-identifier"],
|
|
154
|
+
variableIdentifier: node.attributes["variable-identifier"],
|
|
155
|
+
attributes: node.attributes,
|
|
156
|
+
source: node.source,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
function serializeXmlContentOrUndefined(node, options) {
|
|
160
|
+
const content = serializeXmlContent(node, options);
|
|
161
|
+
return content.trim().length > 0 ? content : undefined;
|
|
162
|
+
}
|
|
163
|
+
function serializeXmlContent(node, options) {
|
|
164
|
+
const exclude = options?.excludeLocalNames ? new Set(options.excludeLocalNames) : undefined;
|
|
165
|
+
return node.content
|
|
166
|
+
.filter((entry) => typeof entry === "string" || !exclude?.has(entry.localName))
|
|
167
|
+
.map((entry) => (typeof entry === "string" ? escapeXmlText(entry) : serializeXmlNode(entry)))
|
|
168
|
+
.join("");
|
|
169
|
+
}
|
|
170
|
+
function serializeXmlNode(node) {
|
|
171
|
+
const attributes = Object.entries(node.attributes)
|
|
172
|
+
.map(([name, value]) => ` ${name}="${escapeXmlAttribute(value)}"`)
|
|
173
|
+
.join("");
|
|
174
|
+
if (node.content.length === 0)
|
|
175
|
+
return `<${node.name}${attributes}/>`;
|
|
176
|
+
return `<${node.name}${attributes}>${serializeXmlContent(node)}</${node.name}>`;
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=parser-custom-interactions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-custom-interactions.js","sourceRoot":"","sources":["../src/parser-custom-interactions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { QtiOutcomeDeclaration, QtiResponseDeclaration, QtiTemplateDeclaration } from "./types.js";
|
|
2
|
+
import { type XmlNode } from "./xml.js";
|
|
3
|
+
export declare function parseResponseDeclaration(node: XmlNode): QtiResponseDeclaration;
|
|
4
|
+
export declare function parseOutcomeDeclaration(node: XmlNode): QtiOutcomeDeclaration;
|
|
5
|
+
export declare function parseTemplateDeclaration(node: XmlNode): QtiTemplateDeclaration;
|
|
6
|
+
//# sourceMappingURL=parser-declarations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-declarations.d.ts","sourceRoot":"","sources":["../src/parser-declarations.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAGV,qBAAqB,EACrB,sBAAsB,EAEtB,sBAAsB,EAEvB,MAAM,YAAY,CAAC;AACpB,OAAO,EAA8B,KAAK,OAAO,EAAE,MAAM,UAAU,CAAC;AAEpE,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,sBAAsB,CAkB9E;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,qBAAqB,CAY5E;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,sBAAsB,CAW9E"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { coerceValue, normalizeValueForCardinality, parseCardinality, parseCoords, parseShape, } from "./parser-values.js";
|
|
2
|
+
import { childElements, textContent } from "./xml.js";
|
|
3
|
+
export function parseResponseDeclaration(node) {
|
|
4
|
+
const cardinality = parseCardinality(node.attributes.cardinality);
|
|
5
|
+
const baseType = node.attributes["base-type"];
|
|
6
|
+
return {
|
|
7
|
+
kind: "response",
|
|
8
|
+
identifier: node.attributes.identifier ?? "",
|
|
9
|
+
cardinality,
|
|
10
|
+
baseType,
|
|
11
|
+
defaultValue: parseVariableValue(childElements(node, "qti-default-value")[0], baseType),
|
|
12
|
+
correctResponse: normalizeValueForCardinality(parseVariableValue(childElements(node, "qti-correct-response")[0], baseType), cardinality),
|
|
13
|
+
mapping: parseMapping(childElements(node, "qti-mapping")[0]),
|
|
14
|
+
areaMapping: parseAreaMapping(childElements(node, "qti-area-mapping")[0]),
|
|
15
|
+
attributes: node.attributes,
|
|
16
|
+
source: node.source,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function parseOutcomeDeclaration(node) {
|
|
20
|
+
const baseType = node.attributes["base-type"];
|
|
21
|
+
return {
|
|
22
|
+
kind: "outcome",
|
|
23
|
+
identifier: node.attributes.identifier ?? "",
|
|
24
|
+
cardinality: parseCardinality(node.attributes.cardinality),
|
|
25
|
+
baseType,
|
|
26
|
+
defaultValue: parseVariableValue(childElements(node, "qti-default-value")[0], baseType),
|
|
27
|
+
lookupTable: parseLookupTable(node, baseType),
|
|
28
|
+
attributes: node.attributes,
|
|
29
|
+
source: node.source,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export function parseTemplateDeclaration(node) {
|
|
33
|
+
const baseType = node.attributes["base-type"];
|
|
34
|
+
return {
|
|
35
|
+
kind: "template",
|
|
36
|
+
identifier: node.attributes.identifier ?? "",
|
|
37
|
+
cardinality: parseCardinality(node.attributes.cardinality),
|
|
38
|
+
baseType,
|
|
39
|
+
defaultValue: parseVariableValue(childElements(node, "qti-default-value")[0], baseType),
|
|
40
|
+
attributes: node.attributes,
|
|
41
|
+
source: node.source,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function parseVariableValue(node, baseType) {
|
|
45
|
+
if (!node)
|
|
46
|
+
return null;
|
|
47
|
+
const valueNodes = childElements(node, "qti-value");
|
|
48
|
+
const entries = valueNodes.map((valueNode) => ({
|
|
49
|
+
fieldIdentifier: valueNode.attributes["field-identifier"],
|
|
50
|
+
value: coerceValue(textContent(valueNode), valueNode.attributes["base-type"] ?? baseType),
|
|
51
|
+
}));
|
|
52
|
+
const recordEntries = entries.filter((entry) => Boolean(entry.fieldIdentifier));
|
|
53
|
+
if (recordEntries.length > 0) {
|
|
54
|
+
return Object.fromEntries(recordEntries.map((entry) => [entry.fieldIdentifier, entry.value]));
|
|
55
|
+
}
|
|
56
|
+
if (entries.length === 0) {
|
|
57
|
+
const text = textContent(node);
|
|
58
|
+
return text.length > 0 ? coerceValue(text, baseType) : null;
|
|
59
|
+
}
|
|
60
|
+
if (entries.length === 1)
|
|
61
|
+
return entries[0]?.value ?? null;
|
|
62
|
+
return entries.map((entry) => entry.value);
|
|
63
|
+
}
|
|
64
|
+
function parseMapping(node) {
|
|
65
|
+
if (!node)
|
|
66
|
+
return undefined;
|
|
67
|
+
return {
|
|
68
|
+
defaultValue: Number(node.attributes["default-value"] ?? 0),
|
|
69
|
+
attributes: node.attributes,
|
|
70
|
+
source: node.source,
|
|
71
|
+
entries: childElements(node, "qti-map-entry").map((entry) => ({
|
|
72
|
+
mapKey: entry.attributes["map-key"],
|
|
73
|
+
mappedValue: Number(entry.attributes["mapped-value"] ?? 0),
|
|
74
|
+
attributes: entry.attributes,
|
|
75
|
+
source: entry.source,
|
|
76
|
+
})),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function parseAreaMapping(node) {
|
|
80
|
+
if (!node)
|
|
81
|
+
return undefined;
|
|
82
|
+
return {
|
|
83
|
+
defaultValue: Number(node.attributes["default-value"] ?? 0),
|
|
84
|
+
attributes: node.attributes,
|
|
85
|
+
source: node.source,
|
|
86
|
+
entries: childElements(node, "qti-area-map-entry").map((entry) => ({
|
|
87
|
+
shape: parseShape(entry.attributes.shape),
|
|
88
|
+
coords: parseCoords(entry.attributes.coords),
|
|
89
|
+
mappedValue: Number(entry.attributes["mapped-value"] ?? 0),
|
|
90
|
+
attributes: entry.attributes,
|
|
91
|
+
source: entry.source,
|
|
92
|
+
})),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function parseLookupTable(node, baseType) {
|
|
96
|
+
const matchTable = childElements(node, "qti-match-table")[0];
|
|
97
|
+
if (matchTable)
|
|
98
|
+
return parseMatchTable(matchTable, baseType);
|
|
99
|
+
const interpolationTable = childElements(node, "qti-interpolation-table")[0];
|
|
100
|
+
if (interpolationTable)
|
|
101
|
+
return parseInterpolationTable(interpolationTable, baseType);
|
|
102
|
+
return undefined;
|
|
103
|
+
}
|
|
104
|
+
function parseMatchTable(node, baseType) {
|
|
105
|
+
return {
|
|
106
|
+
type: "match",
|
|
107
|
+
defaultValue: parseLookupValue(node.attributes["default-value"], baseType),
|
|
108
|
+
attributes: node.attributes,
|
|
109
|
+
source: node.source,
|
|
110
|
+
entries: childElements(node, "qti-match-table-entry").map((entry) => ({
|
|
111
|
+
sourceValue: Number(entry.attributes["source-value"]),
|
|
112
|
+
targetValue: parseLookupValue(entry.attributes["target-value"], baseType),
|
|
113
|
+
attributes: entry.attributes,
|
|
114
|
+
source: entry.source,
|
|
115
|
+
})),
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
function parseInterpolationTable(node, baseType) {
|
|
119
|
+
return {
|
|
120
|
+
type: "interpolation",
|
|
121
|
+
defaultValue: parseLookupValue(node.attributes["default-value"], baseType),
|
|
122
|
+
attributes: node.attributes,
|
|
123
|
+
source: node.source,
|
|
124
|
+
entries: childElements(node, "qti-interpolation-table-entry").map((entry) => ({
|
|
125
|
+
sourceValue: Number(entry.attributes["source-value"]),
|
|
126
|
+
targetValue: parseLookupValue(entry.attributes["target-value"], baseType),
|
|
127
|
+
includeBoundary: entry.attributes["include-boundary"] !== "false",
|
|
128
|
+
attributes: entry.attributes,
|
|
129
|
+
source: entry.source,
|
|
130
|
+
})),
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
function parseLookupValue(value, baseType) {
|
|
134
|
+
return value === undefined ? null : coerceValue(value, baseType);
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=parser-declarations.js.map
|