@conform-ed/contracts 0.0.3
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/.turbo/turbo-build.log +2 -0
- package/.turbo/turbo-format.log +6 -0
- package/.turbo/turbo-lint.log +4 -0
- package/.turbo/turbo-test.log +196 -0
- package/.turbo/turbo-typecheck.log +2 -0
- package/README.md +52 -0
- package/caliper-v1_2-zod-templates.md +123 -0
- package/case-v1_1-zod-templates.md +290 -0
- package/cat-v1_0-zod-templates.md +73 -0
- package/cc-v1_3-zod-templates.md +531 -0
- package/cc-v1_4-zod-templates.md +247 -0
- package/clr-v2_0-zod-templates.md +117 -0
- package/cmi5-v1_0-zod-templates.md +9 -0
- package/lti-zod-templates.md +11 -0
- package/oneroster-v1_2-zod-templates.md +76 -0
- package/open-badges-v3_0-zod-templates.md +66 -0
- package/package.json +42 -0
- package/qti-v2_1-zod-templates.md +45 -0
- package/qti-v2_2-zod-templates.md +32 -0
- package/qti-v3_0_1-zod-templates.md +421 -0
- package/src/adapter.ts +83 -0
- package/src/caliper/v1_2/caliper_v1p2_bootcamp_schema.ts +781 -0
- package/src/caliper/v1_2/index.ts +37 -0
- package/src/caliper/v1_2/shared.ts +122 -0
- package/src/caliper/v1_2/textual_requirements.ts +219 -0
- package/src/case/v1_1/case_v1p1_cfassociation_jsonschema1.ts +1 -0
- package/src/case/v1_1/case_v1p1_cfassociationgrouping_jsonschema1.ts +1 -0
- package/src/case/v1_1/case_v1p1_cfassociationset_jsonschema1.ts +1 -0
- package/src/case/v1_1/case_v1p1_cfconceptset_jsonschema1.ts +1 -0
- package/src/case/v1_1/case_v1p1_cfdocument_jsonschema1.ts +1 -0
- package/src/case/v1_1/case_v1p1_cfdocumentset_jsonschema1.ts +1 -0
- package/src/case/v1_1/case_v1p1_cfitem_jsonschema1.ts +1 -0
- package/src/case/v1_1/case_v1p1_cfitemtypeset_jsonschema1.ts +1 -0
- package/src/case/v1_1/case_v1p1_cflicense_jsonschema1.ts +1 -0
- package/src/case/v1_1/case_v1p1_cfpackage_jsonschema1.ts +1 -0
- package/src/case/v1_1/case_v1p1_cfrubric_jsonschema1.ts +1 -0
- package/src/case/v1_1/case_v1p1_cfsubjectset_jsonschema1.ts +1 -0
- package/src/case/v1_1/case_v1p1_imsx_statusinfo_jsonschema1.ts +1 -0
- package/src/case/v1_1/case_v1p1_openapi3_restbinding_schema.ts +113 -0
- package/src/case/v1_1/index.ts +95 -0
- package/src/case/v1_1/shared.ts +384 -0
- package/src/cat/v1_0/cat_v1p0_restbinding_operations_schema.ts +75 -0
- package/src/cat/v1_0/index.ts +124 -0
- package/src/cat/v1_0/shared.ts +345 -0
- package/src/clr/v2_0/clr_v2p0_achievementcredential_schema.ts +16 -0
- package/src/clr/v2_0/clr_v2p0_clrcredential_schema.ts +9 -0
- package/src/clr/v2_0/clr_v2p0_endorsementcredential_schema.ts +11 -0
- package/src/clr/v2_0/clr_v2p0_getclrcredentialsresponse_schema.ts +1 -0
- package/src/clr/v2_0/clr_v2p0_imsx_statusinfo_schema.ts +8 -0
- package/src/clr/v2_0/clr_v2p0_profile_schema.ts +9 -0
- package/src/clr/v2_0/index.ts +22 -0
- package/src/clr/v2_0/shared.ts +206 -0
- package/src/cmi5/index.ts +3 -0
- package/src/cmi5/v1_0/index.ts +134 -0
- package/src/common-cartridge/v1_3/ccv1p3_imsccauth_v1p3.ts +26 -0
- package/src/common-cartridge/v1_3/ccv1p3_imscp_v1p2_v1p0.ts +352 -0
- package/src/common-cartridge/v1_3/ccv1p3_imscsmd_v1p0.ts +35 -0
- package/src/common-cartridge/v1_3/ccv1p3_imsdt_v1p3.ts +33 -0
- package/src/common-cartridge/v1_3/ccv1p3_imswl_v1p3.ts +23 -0
- package/src/common-cartridge/v1_3/ccv1p3_lomccltilink_v1p0.ts +14 -0
- package/src/common-cartridge/v1_3/ccv1p3_lommanifest_v1p0.ts +14 -0
- package/src/common-cartridge/v1_3/ccv1p3_lomresource_v1p0.ts +14 -0
- package/src/common-cartridge/v1_3/ccv1p3_qtiasiv1p2p1_v1p0.ts +964 -0
- package/src/common-cartridge/v1_3/index.ts +41 -0
- package/src/common-cartridge/v1_3/lom-internal.ts +396 -0
- package/src/common-cartridge/v1_3/shared.ts +68 -0
- package/src/common-cartridge/v1_4/core/ccv1p4_imscp_v1p2_v1p0.ts +360 -0
- package/src/common-cartridge/v1_4/core/ccv1p4_lommanifest_v1p0.ts +14 -0
- package/src/common-cartridge/v1_4/core/ccv1p4_lomresource_v1p0.ts +14 -0
- package/src/common-cartridge/v1_4/extension/cc_extresource_assignmentv1p0_v1p0.ts +61 -0
- package/src/common-cartridge/v1_4/extension/ccv1p4_cpextensionv1p2_v1p0.ts +20 -0
- package/src/common-cartridge/v1_4/extension/ims_openvideov1p0_v1p0.ts +325 -0
- package/src/common-cartridge/v1_4/index.ts +104 -0
- package/src/common-cartridge/v1_4/k12/ccv1p4_imscp_v1p2_v1p0.ts +19 -0
- package/src/common-cartridge/v1_4/k12/ccv1p4_imscp_v1p2_v1p0_thin.ts +17 -0
- package/src/common-cartridge/v1_4/k12/ccv1p4_lommanifest_v1p0.ts +14 -0
- package/src/common-cartridge/v1_4/k12/ccv1p4_lomresource_v1p0.ts +14 -0
- package/src/common-cartridge/v1_4/lom-internal.ts +476 -0
- package/src/common-cartridge/v1_4/shared/ccv1p4_imsccauth_v1p4.ts +26 -0
- package/src/common-cartridge/v1_4/shared/ccv1p4_imscsmd_v1p1.ts +36 -0
- package/src/common-cartridge/v1_4/shared/ccv1p4_imsdt_v1p4.ts +33 -0
- package/src/common-cartridge/v1_4/shared/ccv1p4_imslticc_v1p4.ts +45 -0
- package/src/common-cartridge/v1_4/shared/ccv1p4_imswl_v1p4.ts +23 -0
- package/src/common-cartridge/v1_4/shared/ccv1p4_lomccltilink_v1p0.ts +14 -0
- package/src/common-cartridge/v1_4/shared/ccv1p4_qtiasiv1p2p1_v1p0.ts +964 -0
- package/src/common-cartridge/v1_4/shared/imsbasiclti_v1p0p1.ts +24 -0
- package/src/common-cartridge/v1_4/shared/imslticm_v1p0.ts +23 -0
- package/src/common-cartridge/v1_4/shared/imslticp_v1p0.ts +57 -0
- package/src/common-cartridge/v1_4/shared/lineitem_v1p0.ts +35 -0
- package/src/common-cartridge/v1_4/shared/resourcea11ymetadata-20210915.ts +110 -0
- package/src/common-cartridge/v1_4/shared.ts +68 -0
- package/src/common-cartridge/v1_4/thin/ccv1p4_imscp_v1p2_v1p0.ts +243 -0
- package/src/common-cartridge/v1_4/thin/ccv1p4_lommanifest_v1p0.ts +14 -0
- package/src/common-cartridge/v1_4/thin/ccv1p4_lomresource_v1p0.ts +14 -0
- package/src/common-cartridge/v1_4/vdex/imsmd_loose_v1p3p2.ts +13 -0
- package/src/common-cartridge/v1_4/vdex/imsvdex_v1p0.ts +124 -0
- package/src/config.ts +121 -0
- package/src/index.ts +32 -0
- package/src/lti/ags/v2_0/index.ts +97 -0
- package/src/lti/deep-linking/v2_0/index.ts +100 -0
- package/src/lti/index.ts +26 -0
- package/src/lti/nrps/v2_0/index.ts +69 -0
- package/src/lti/proctoring/v1_0/index.ts +131 -0
- package/src/lti/shared.ts +66 -0
- package/src/lti/v1_3/index.ts +84 -0
- package/src/oneroster/v1_2/index.ts +156 -0
- package/src/oneroster/v1_2/or_v1p2_csv_binding_schema.ts +427 -0
- package/src/oneroster/v1_2/or_v1p2_gradebook_restbinding_schema.ts +120 -0
- package/src/oneroster/v1_2/or_v1p2_gradebook_service_schema.ts +243 -0
- package/src/oneroster/v1_2/or_v1p2_resource_restbinding_schema.ts +24 -0
- package/src/oneroster/v1_2/or_v1p2_resource_service_schema.ts +47 -0
- package/src/oneroster/v1_2/or_v1p2_rostering_restbinding_schema.ts +84 -0
- package/src/oneroster/v1_2/or_v1p2_rostering_service_schema.ts +288 -0
- package/src/oneroster/v1_2/shared.ts +90 -0
- package/src/open-badges/v3_0/index.ts +20 -0
- package/src/open-badges/v3_0/ob_v3p0_achievementcredential_schema.ts +17 -0
- package/src/open-badges/v3_0/ob_v3p0_endorsementcredential_schema.ts +11 -0
- package/src/open-badges/v3_0/ob_v3p0_getopenbadgecredentialsresponse_schema.ts +1 -0
- package/src/open-badges/v3_0/ob_v3p0_imsx_statusinfo_schema.ts +8 -0
- package/src/open-badges/v3_0/ob_v3p0_profile_schema.ts +9 -0
- package/src/open-badges/v3_0/shared.ts +458 -0
- package/src/qti/v2-internal.ts +1683 -0
- package/src/qti/v2_1/apipv1p0_qtiextv2p1_v1p0.ts +3 -0
- package/src/qti/v2_1/imsqti_metadata_v2p1.ts +3 -0
- package/src/qti/v2_1/imsqti_result_v2p1.ts +3 -0
- package/src/qti/v2_1/imsqti_usagedata_v2p1.ts +3 -0
- package/src/qti/v2_1/imsqti_v2p1p2.ts +71 -0
- package/src/qti/v2_1/index.ts +53 -0
- package/src/qti/v2_1/qtiv2p1_imscpv1p2_v1p0.ts +3 -0
- package/src/qti/v2_1/schemas.ts +15 -0
- package/src/qti/v2_1/shared.ts +3 -0
- package/src/qti/v2_2/apipv1p0_qtiextv2p2_v1p0p1.ts +3 -0
- package/src/qti/v2_2/imsqti_metadata_v2p2.ts +3 -0
- package/src/qti/v2_2/imsqti_result_v2p2.ts +3 -0
- package/src/qti/v2_2/imsqti_usagedata_v2p2.ts +3 -0
- package/src/qti/v2_2/imsqti_v2p2p4.ts +76 -0
- package/src/qti/v2_2/imsqtiv2p2p4_html5_v1p0.ts +8 -0
- package/src/qti/v2_2/index.ts +59 -0
- package/src/qti/v2_2/qtiv2p2_csm_v2p2.ts +4 -0
- package/src/qti/v2_2/qtiv2p2_imscpv1p2_v1p0.ts +3 -0
- package/src/qti/v2_2/schemas.ts +19 -0
- package/src/qti/v2_2/shared.ts +3 -0
- package/src/qti/v3_0_1/assessment-internal.ts +1509 -0
- package/src/qti/v3_0_1/imsqti_asiv3p0p1_v1p0.ts +57 -0
- package/src/qti/v3_0_1/imsqti_itemv3p0p1_v1p0.ts +60 -0
- package/src/qti/v3_0_1/imsqti_metadatav3p0_v1p0.ts +73 -0
- package/src/qti/v3_0_1/imsqti_outcomev3p0p1_v1p0.ts +11 -0
- package/src/qti/v3_0_1/imsqti_responseprocessingv3p0p1_v1p0.ts +17 -0
- package/src/qti/v3_0_1/imsqti_resultv3p0_v1p0.ts +222 -0
- package/src/qti/v3_0_1/imsqti_sectionv3p0p1_v1p0.ts +15 -0
- package/src/qti/v3_0_1/imsqti_stimulusv3p0p1_v1p0.ts +15 -0
- package/src/qti/v3_0_1/imsqti_testv3p0p1_v1p0.ts +49 -0
- package/src/qti/v3_0_1/imsqti_usagedatav3p0_v1p0.ts +77 -0
- package/src/qti/v3_0_1/imsqtiv3p0_afa3p0pnp_v1p0.ts +269 -0
- package/src/qti/v3_0_1/index.ts +50 -0
- package/src/qti/v3_0_1/processing-internal.ts +667 -0
- package/src/qti/v3_0_1/shared.ts +146 -0
- package/src/qti/v3_0_1/variables-internal.ts +274 -0
- package/src/shared/imsx-status.ts +49 -0
- package/src/summary.ts +70 -0
- package/src/vc-data-model/v2_0/index.ts +27 -0
- package/src/vc-data-model/v2_0/shared.ts +206 -0
- package/src/xapi/index.ts +12 -0
- package/src/xapi/shared.ts +444 -0
- package/src/xapi/v1_0_3/index.ts +169 -0
- package/src/xapi/v2_0/index.ts +256 -0
- package/test/caliper-v1_2.test.ts +270 -0
- package/test/case-v1_1.test.ts +147 -0
- package/test/cat-v1_0.test.ts +338 -0
- package/test/cc-v1_4.test.ts +239 -0
- package/test/clr-v2_0.test.ts +225 -0
- package/test/cmi5-v1_0.test.ts +196 -0
- package/test/contracts.test.ts +125 -0
- package/test/fixtures/cmi5/extended-cmi5.xml +72 -0
- package/test/fixtures/cmi5/simple-cmi5.xml +26 -0
- package/test/lti.test.ts +146 -0
- package/test/oneroster-v1_2.test.ts +234 -0
- package/test/open-badges-v3_0.test.ts +144 -0
- package/test/qti-v2_1.test.ts +146 -0
- package/test/qti-v2_2.test.ts +154 -0
- package/test/qti-v3_0_1.test.ts +576 -0
- package/test/schema-examples.test.ts +101 -0
- package/test/vc-data-model-v2_0.test.ts +63 -0
- package/test/xapi.test.ts +384 -0
- package/tsconfig.json +7 -0
- package/vc-data-model-v2_0-zod-templates.md +43 -0
- package/xapi-zod-templates.md +95 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
|
|
2
|
+
[0m[2m[35m$[0m [2m[1mbun test[0m
|
|
3
|
+
[0m[1mbun test [0m[2mv1.3.14 (0d9b296a)[0m
|
|
4
|
+
[0m
|
|
5
|
+
test/xapi.test.ts:
|
|
6
|
+
[0m[32m✓[0m[0m[1m xAPI 1.0.3 statement schema accepts the core data model[0m [0m[2m[9.81ms[0m[2m][0m
|
|
7
|
+
[0m[32m✓[0m[0m[1m xAPI 2.0 statement schema accepts the same core data model[0m [0m[2m[1.62ms[0m[2m][0m
|
|
8
|
+
[0m[32m✓[0m[0m[1m xAPI 2.0 statement schema accepts IEEE 2.0 contextAgent/contextGroup objects[0m [0m[2m[5.43ms[0m[2m][0m
|
|
9
|
+
[0m[32m✓[0m[0m[1m xAPI statement submission schema accepts batches[0m [0m[2m[0.28ms[0m[2m][0m
|
|
10
|
+
[0m[32m✓[0m[0m[1m xAPI document, listing, and about schemas validate LRS metadata[0m [0m[2m[1.72ms[0m[2m][0m
|
|
11
|
+
[0m[32m✓[0m[0m[1m xAPI validation rejects statements missing required fields[0m [0m[2m[0.36ms[0m[2m][0m
|
|
12
|
+
[0m[32m✓[0m[0m[1m xAPI statement result, person object, and resource queries validate missing spec objects[0m [0m[2m[2.13ms[0m[2m][0m
|
|
13
|
+
[0m[32m✓[0m[0m[1m xAPI HTTP method enum validates LRS operations[0m [0m[2m[0.10ms[0m[2m][0m
|
|
14
|
+
[0m[32m✓[0m[0m[1m xAPI error response schema validates LRS error payloads[0m [0m[2m[0.38ms[0m[2m][0m
|
|
15
|
+
[0m[32m✓[0m[0m[1m xAPI error codes validate standard HTTP status responses[0m [0m[2m[0.12ms[0m[2m][0m
|
|
16
|
+
[0m[32m✓[0m[0m[1m xAPI concurrency schema validates ETags and conditional headers[0m [0m[2m[0.31ms[0m[2m][0m
|
|
17
|
+
[0m[32m✓[0m[0m[1m xAPI multipart attachment part schema validates attachment data structure[0m [0m[2m[0.16ms[0m[2m][0m
|
|
18
|
+
[0m[32m✓[0m[0m[1m xAPI multipart request schema validates statement with attachments[0m [0m[2m[0.41ms[0m[2m][0m
|
|
19
|
+
[0m[32m✓[0m[0m[1m xAPI resource schema models LRS endpoint definitions[0m [0m[2m[0.44ms[0m[2m][0m
|
|
20
|
+
[0m[32m✓[0m[0m[1m xAPI request and response headers are properly enumerated[0m [0m[2m[0.17ms[0m[2m][0m
|
|
21
|
+
[0m
|
|
22
|
+
test/cmi5-v1_0.test.ts:
|
|
23
|
+
[0m[32m✓[0m[0m[1m cmi5 course structure schema parses the simple XML example[0m [0m[2m[6.15ms[0m[2m][0m
|
|
24
|
+
[0m[32m✓[0m[0m[1m cmi5 keyword extension schema parses the extended XML example[0m [0m[2m[3.01ms[0m[2m][0m
|
|
25
|
+
[0m[32m✓[0m[0m[1m cmi5 recursive course structure schema accepts nested blocks and AUs[0m [0m[2m[0.86ms[0m[2m][0m
|
|
26
|
+
[0m
|
|
27
|
+
test/oneroster-v1_2.test.ts:
|
|
28
|
+
[0m[32m✓[0m[0m[1m UserSchema parses a minimal OneRoster user[0m [0m[2m[2.35ms[0m[2m][0m
|
|
29
|
+
[0m[32m✓[0m[0m[1m LineItemSchema parses a minimal gradebook line item[0m [0m[2m[1.11ms[0m[2m][0m
|
|
30
|
+
[0m[32m✓[0m[0m[1m ResourceSchema parses a minimal resource entry[0m [0m[2m[0.65ms[0m[2m][0m
|
|
31
|
+
[0m[32m✓[0m[0m[1m ImsxStatusInfoSchema parses a OneRoster status envelope[0m [0m[2m[0.63ms[0m[2m][0m
|
|
32
|
+
[0m[32m✓[0m[0m[1m EnrollmentRoleSchema accepts extension values and rejects unknown built-ins[0m [0m[2m[0.20ms[0m[2m][0m
|
|
33
|
+
[0m[32m✓[0m[0m[1m ClassSchema requires at least one term reference[0m [0m[2m[1.05ms[0m[2m][0m
|
|
34
|
+
[0m[32m✓[0m[0m[1m OneRoster12DerivedZodTemplates exposes core published entry points[0m [0m[2m[0.05ms[0m[2m][0m
|
|
35
|
+
[0m[32m✓[0m[0m[1m OneRoster REST binding operation catalogs expose all endpoint schemas[0m [0m[2m[0.05ms[0m[2m][0m
|
|
36
|
+
[0m[32m✓[0m[0m[1m Gradebook operation bindings expose request/response payload schemas[0m [0m[2m[0.04ms[0m[2m][0m
|
|
37
|
+
[0m[32m✓[0m[0m[1m ManifestCsvRowSchema accepts either starred or unstarred optional file keys[0m [0m[2m[1.70ms[0m[2m][0m
|
|
38
|
+
[0m[32m✓[0m[0m[1m UsersCsvRowSchema validates required OneRoster 1.2 user CSV columns[0m [0m[2m[1.09ms[0m[2m][0m
|
|
39
|
+
[0m[32m✓[0m[0m[1m OneRosterCsvBindingPackageSchema validates package-level CSV document sets[0m [0m[2m[1.73ms[0m[2m][0m
|
|
40
|
+
[0m
|
|
41
|
+
test/qti-v2_1.test.ts:
|
|
42
|
+
[0m[32m✓[0m[0m[1m QtiV2_1 metadata document parses a minimal metadata payload[0m [0m[2m[0.83ms[0m[2m][0m
|
|
43
|
+
[0m[32m✓[0m[0m[1m QtiV2_1 assessment item document parses a minimal choice item[0m [0m[2m[[1m10.72ms[0m[2m][0m
|
|
44
|
+
[0m[32m✓[0m[0m[1m QtiV2_1 result document rejects record responses without field identifiers[0m [0m[2m[1.75ms[0m[2m][0m
|
|
45
|
+
[0m[32m✓[0m[0m[1m QtiV2_1 manifest document parses a minimal package[0m [0m[2m[1.37ms[0m[2m][0m
|
|
46
|
+
[0m[32m✓[0m[0m[1m QtiV2_1 APIP accessibility document parses a minimal payload[0m [0m[2m[1.45ms[0m[2m][0m
|
|
47
|
+
[0m
|
|
48
|
+
test/qti-v3_0_1.test.ts:
|
|
49
|
+
[0m[32m✓[0m[0m[1m QtiMetadataDocumentSchema parses a minimal metadata document[0m [0m[2m[0.89ms[0m[2m][0m
|
|
50
|
+
[0m[32m✓[0m[0m[1m QtiAccessForAllPnpDocumentSchema parses a minimal preferences document[0m [0m[2m[2.57ms[0m[2m][0m
|
|
51
|
+
[0m[32m✓[0m[0m[1m QtiAssessmentResultDocumentSchema parses a minimal result report[0m [0m[2m[2.67ms[0m[2m][0m
|
|
52
|
+
[0m[32m✓[0m[0m[1m QtiAssessmentResultDocumentSchema rejects record response values without field identifiers[0m [0m[2m[0.30ms[0m[2m][0m
|
|
53
|
+
[0m[32m✓[0m[0m[1m QtiAssessmentResultDocumentSchema rejects record outcomes with baseType[0m [0m[2m[0.72ms[0m[2m][0m
|
|
54
|
+
[0m[32m✓[0m[0m[1m QtiUsageDataDocumentSchema parses ordinary and categorized statistics[0m [0m[2m[2.83ms[0m[2m][0m
|
|
55
|
+
[0m[32m✓[0m[0m[1m QtiUsageDataDocumentSchema rejects invalid objectType and mapping bounds[0m [0m[2m[0.58ms[0m[2m][0m
|
|
56
|
+
[0m[32m✓[0m[0m[1m QtiResponseProcessingDocumentSchema parses typed processing operators[0m [0m[2m[[1m11.39ms[0m[2m][0m
|
|
57
|
+
[0m[32m✓[0m[0m[1m QtiOutcomeProcessingDocumentSchema parses typed aggregate operators[0m [0m[2m[7.39ms[0m[2m][0m
|
|
58
|
+
[0m[32m✓[0m[0m[1m QtiResponseProcessingDocumentSchema rejects invalid operator parameters[0m [0m[2m[2.33ms[0m[2m][0m
|
|
59
|
+
[0m[32m✓[0m[0m[1m QtiOutcomeProcessingDocumentSchema rejects invalid operator arity and ranges[0m [0m[2m[2.26ms[0m[2m][0m
|
|
60
|
+
[0m[32m✓[0m[0m[1m QtiAssessmentSectionDocumentSchema parses a minimal standalone section[0m [0m[2m[3.71ms[0m[2m][0m
|
|
61
|
+
[0m[32m✓[0m[0m[1m QtiAssessmentStimulusDocumentSchema parses a minimal stimulus[0m [0m[2m[2.73ms[0m[2m][0m
|
|
62
|
+
[0m[32m✓[0m[0m[1m QtiOutcomeDeclarationDocumentSchema parses a minimal outcome declaration[0m [0m[2m[1.55ms[0m[2m][0m
|
|
63
|
+
[0m[32m✓[0m[0m[1m QtiAsiProfileDocumentSchema accepts resource-specific QTI documents[0m [0m[2m[1.40ms[0m[2m][0m
|
|
64
|
+
[0m[32m✓[0m[0m[1m QtiAssessmentItemDocumentSchema parses a minimal choice item[0m [0m[2m[[1m20.41ms[0m[2m][0m
|
|
65
|
+
[0m[32m✓[0m[0m[1m QtiAssessmentItemDocumentSchema rejects incompatible response declarations[0m [0m[2m[0.71ms[0m[2m][0m
|
|
66
|
+
[0m[32m✓[0m[0m[1m QtiAssessmentTestDocumentSchema parses a minimal test document[0m [0m[2m[2.00ms[0m[2m][0m
|
|
67
|
+
[0m[32m✓[0m[0m[1m Qti301DerivedZodTemplates exposes expected document templates[0m [0m[2m[0.03ms[0m[2m][0m
|
|
68
|
+
[0m[32m✓[0m[0m[1m QTI barrel exports prefixed XML extension node helpers[0m [0m[2m[0.41ms[0m[2m][0m
|
|
69
|
+
[0m
|
|
70
|
+
test/contracts.test.ts:
|
|
71
|
+
[0m[32m✓[0m[0m[1m RunnerConfigSchema parses minimal config[0m [0m[2m[3.44ms[0m[2m][0m
|
|
72
|
+
[0m[32m✓[0m[0m[1m RunnerConfigSchema requires adapter for cmi5 suite[0m [0m[2m[0.15ms[0m[2m][0m
|
|
73
|
+
[0m[32m✓[0m[0m[1m RunnerConfigSchema enforces bearer adapter token source[0m [0m[2m[0.79ms[0m[2m][0m
|
|
74
|
+
[0m[32m✓[0m[0m[1m AdapterCapabilitySchema validates profile payload[0m [0m[2m[0.65ms[0m[2m][0m
|
|
75
|
+
[0m[32m✓[0m[0m[1m AdapterProfileSchema validates cmi5 interoperability contract[0m [0m[2m[1.38ms[0m[2m][0m
|
|
76
|
+
[0m[32m✓[0m[0m[1m AdapterProfileSchema requires cmi5 packageUpload[0m [0m[2m[0.10ms[0m[2m][0m
|
|
77
|
+
[0m[32m✓[0m[0m[1m AdapterErrorSchema validates uniform error envelope[0m [0m[2m[0.51ms[0m[2m][0m
|
|
78
|
+
[0m
|
|
79
|
+
test/qti-v2_2.test.ts:
|
|
80
|
+
[0m[32m✓[0m[0m[1m QtiV2_2 metadata document parses a minimal metadata payload with scoring modes[0m [0m[2m[0.81ms[0m[2m][0m
|
|
81
|
+
[0m[32m✓[0m[0m[1m QtiV2_2 assessment stimulus and assessment item documents parse together[0m [0m[2m[3.49ms[0m[2m][0m
|
|
82
|
+
[0m[32m✓[0m[0m[1m QtiV2_2 processing rejects invalid numeric operator parameters[0m [0m[2m[6.84ms[0m[2m][0m
|
|
83
|
+
[0m[32m✓[0m[0m[1m QtiV2_2 curriculum standards metadata and manifest documents parse[0m [0m[2m[1.70ms[0m[2m][0m
|
|
84
|
+
[0m[32m✓[0m[0m[1m QtiV2_2 APIP accessibility document parses external supplemental accessibility[0m [0m[2m[1.77ms[0m[2m][0m
|
|
85
|
+
[0m
|
|
86
|
+
test/cat-v1_0.test.ts:
|
|
87
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mShared validators[2m >[0m[1m UuidSchema validates RFC4122 compliant UUIDs[0m [0m[2m[1.78ms[0m[2m][0m
|
|
88
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mShared validators[2m >[0m[1m DateTimeSchema validates ISO8601 datetimes[0m [0m[2m[0.35ms[0m[2m][0m
|
|
89
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mShared validators[2m >[0m[1m ExtensionEnum supports standard values and ext:* vendor extensions[0m [0m[2m[0.23ms[0m[2m][0m
|
|
90
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mShared validators[2m >[0m[1m OutcomeVariableType supports outcome types and vendor extensions[0m [0m[2m[0.06ms[0m[2m][0m
|
|
91
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mCore data types[2m >[0m[1m OutcomeVariable validates outcome variable structure[0m [0m[2m[0.50ms[0m[2m][0m
|
|
92
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mCore data types[2m >[0m[1m OutcomeVariable rejects additional properties[0m [0m[2m[0.12ms[0m[2m][0m
|
|
93
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mCore data types[2m >[0m[1m ResponseVariable validates candidate responses[0m [0m[2m[0.16ms[0m[2m][0m
|
|
94
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mCore data types[2m >[0m[1m ItemRef validates item references[0m [0m[2m[0.24ms[0m[2m][0m
|
|
95
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mCore data types[2m >[0m[1m ItemPool validates item pool with multiple items[0m [0m[2m[0.26ms[0m[2m][0m
|
|
96
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mCore data types[2m >[0m[1m SectionData validates complete section configuration[0m [0m[2m[0.59ms[0m[2m][0m
|
|
97
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mCore data types[2m >[0m[1m ItemStage validates items to present to candidate[0m [0m[2m[0.49ms[0m[2m][0m
|
|
98
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mCore data types[2m >[0m[1m AssessmentResult validates candidate responses and outcomes[0m [0m[2m[0.66ms[0m[2m][0m
|
|
99
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mCore data types[2m >[0m[1m CatEngineResultReport validates CAT engine response[0m [0m[2m[0.56ms[0m[2m][0m
|
|
100
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mCore data types[2m >[0m[1m SessionInfo validates session state[0m [0m[2m[0.49ms[0m[2m][0m
|
|
101
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mREST operation payloads[2m >[0m[1m CreateSectionRequest validates section creation[0m [0m[2m[0.18ms[0m[2m][0m
|
|
102
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mREST operation payloads[2m >[0m[1m CreateSectionResponse validates section creation response[0m [0m[2m[0.23ms[0m[2m][0m
|
|
103
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mREST operation payloads[2m >[0m[1m CreateSessionRequest validates session creation[0m [0m[2m[0.24ms[0m[2m][0m
|
|
104
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mREST operation payloads[2m >[0m[1m CreateSessionResponse validates session creation response[0m [0m[2m[0.20ms[0m[2m][0m
|
|
105
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mREST operation payloads[2m >[0m[1m SubmitResultsRequest validates result submission[0m [0m[2m[0.26ms[0m[2m][0m
|
|
106
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mREST operation payloads[2m >[0m[1m SubmitResultsResponse validates CAT engine result report[0m [0m[2m[0.05ms[0m[2m][0m
|
|
107
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mREST operation payloads[2m >[0m[1m EndSessionRequest validates session termination[0m [0m[2m[0.19ms[0m[2m][0m
|
|
108
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mREST operation payloads[2m >[0m[1m EndSessionResponse validates session termination response[0m [0m[2m[0.22ms[0m[2m][0m
|
|
109
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mREST operation payloads[2m >[0m[1m EndSectionRequest validates section closure[0m [0m[2m[0.14ms[0m[2m][0m
|
|
110
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mREST operation payloads[2m >[0m[1m EndSectionResponse validates section closure response[0m [0m[2m[0.09ms[0m[2m][0m
|
|
111
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mREST operation bindings[2m >[0m[1m REST operation catalog exposes all 6 CAT operations[0m [0m[2m[0.04ms[0m[2m][0m
|
|
112
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mREST operation bindings[2m >[0m[1m CreateSection operation has correct structure[0m [0m[2m[0.03ms[0m[2m][0m
|
|
113
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mREST operation bindings[2m >[0m[1m SubmitResults operation has correct path template[0m [0m[2m[0.03ms[0m[2m][0m
|
|
114
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mDerived templates[2m >[0m[1m Cat10DerivedZodTemplates exposes specification metadata[0m [0m[2m[0.27ms[0m[2m][0m
|
|
115
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mDerived templates[2m >[0m[1m Specification links point to official CAT v1.0 resources[0m [0m[2m[0.06ms[0m[2m][0m
|
|
116
|
+
[0m[32m✓[0m [0mCAT v1.0 Zod Schemas[2m > [0mError handling[2m >[0m[1m ErrorResponse validates error payloads[0m [0m[2m[0.36ms[0m[2m][0m
|
|
117
|
+
[0m
|
|
118
|
+
test/schema-examples.test.ts:
|
|
119
|
+
[0m[32m✓[0m[0m[1m example configs parse with RunnerConfigSchema[0m [0m[2m[0.51ms[0m[2m][0m
|
|
120
|
+
[0m[32m✓[0m[0m[1m summary sample shape validates[0m [0m[2m[2.03ms[0m[2m][0m
|
|
121
|
+
[0m[32m✓[0m[0m[1m requirement trace sample shape validates[0m [0m[2m[0.80ms[0m[2m][0m
|
|
122
|
+
[0m[32m✓[0m[0m[1m run metadata sample shape validates[0m [0m[2m[1.75ms[0m[2m][0m
|
|
123
|
+
[0m[32m✓[0m[0m[1m adapter profile sample shape validates[0m [0m[2m[0.19ms[0m[2m][0m
|
|
124
|
+
[0m
|
|
125
|
+
test/clr-v2_0.test.ts:
|
|
126
|
+
[0m[32m✓[0m[0m[1m ClrCredentialSchema parses a realistic CLR 2.0 credential[0m [0m[2m[6.57ms[0m[2m][0m
|
|
127
|
+
[0m[32m✓[0m[0m[1m AchievementCredentialSchema parses a minimal achievement credential[0m [0m[2m[1.95ms[0m[2m][0m
|
|
128
|
+
[0m[32m✓[0m[0m[1m ProfileSchema parses a minimal issuer profile[0m [0m[2m[0.09ms[0m[2m][0m
|
|
129
|
+
[0m[32m✓[0m[0m[1m GetClrCredentialsResponseSchema parses credential and JWS collections[0m [0m[2m[0.43ms[0m[2m][0m
|
|
130
|
+
[0m[32m✓[0m[0m[1m ImsxStatusInfoSchema enforces known status vocabularies[0m [0m[2m[0.44ms[0m[2m][0m
|
|
131
|
+
[0m[32m✓[0m[0m[1m ClrCredentialSchema rejects credentials without the CLR context set[0m [0m[2m[0.38ms[0m[2m][0m
|
|
132
|
+
[0m[32m✓[0m[0m[1m Clr20DerivedZodTemplates exposes the published entry points[0m [0m[2m[0.05ms[0m[2m][0m
|
|
133
|
+
[0m
|
|
134
|
+
test/cc-v1_4.test.ts:
|
|
135
|
+
[0m[32m✓[0m[0m[1m CommonCartridgeV1_4 parses a minimal core manifest[0m [0m[2m[3.74ms[0m[2m][0m
|
|
136
|
+
[0m[32m✓[0m[0m[1m CommonCartridgeV1_4 rejects question-bank references from organization items[0m [0m[2m[0.95ms[0m[2m][0m
|
|
137
|
+
[0m[32m✓[0m[0m[1m CommonCartridgeV1_4 parses a minimal thin manifest with embedded webLink XML[0m [0m[2m[2.29ms[0m[2m][0m
|
|
138
|
+
[0m[32m✓[0m[0m[1m CommonCartridgeV1_4 thin profile rejects mismatched embedded resource XML[0m [0m[2m[1.30ms[0m[2m][0m
|
|
139
|
+
[0m[32m✓[0m[0m[1m CommonCartridgeV1_4 K-12 LOM resource profile enforces required educational metadata[0m [0m[2m[2.15ms[0m[2m][0m
|
|
140
|
+
[0m[32m✓[0m[0m[1m CommonCartridgeV1_4 parses assignment, line item, accessibility, and open video documents[0m [0m[2m[3.62ms[0m[2m][0m
|
|
141
|
+
[0m[32m✓[0m[0m[1m CommonCartridgeV1_4 exposes expected derived templates[0m [0m[2m[0.05ms[0m[2m][0m
|
|
142
|
+
[0m
|
|
143
|
+
test/open-badges-v3_0.test.ts:
|
|
144
|
+
[0m[32m✓[0m[0m[1m AchievementCredentialSchema parses a realistic Open Badge credential[0m [0m[2m[0.48ms[0m[2m][0m
|
|
145
|
+
[0m[32m✓[0m[0m[1m EndorsementCredentialSchema parses a valid endorsement credential[0m [0m[2m[1.50ms[0m[2m][0m
|
|
146
|
+
[0m[32m✓[0m[0m[1m GetOpenBadgeCredentialsResponseSchema parses credential and JWS collections[0m [0m[2m[0.34ms[0m[2m][0m
|
|
147
|
+
[0m[32m✓[0m[0m[1m AchievementCredentialSchema rejects missing OB context[0m [0m[2m[0.41ms[0m[2m][0m
|
|
148
|
+
[0m[32m✓[0m[0m[1m OpenBadges30DerivedZodTemplates exposes expected entry points[0m [0m[2m[0.05ms[0m[2m][0m
|
|
149
|
+
[0m
|
|
150
|
+
test/vc-data-model-v2_0.test.ts:
|
|
151
|
+
[0m[32m✓[0m[0m[1m VerifiableCredentialSchema parses a minimal VC Data Model 2.0 credential[0m [0m[2m[1.11ms[0m[2m][0m
|
|
152
|
+
[0m[32m✓[0m[0m[1m VerifiablePresentationSchema parses a presentation carrying VC and JWS credentials[0m [0m[2m[0.53ms[0m[2m][0m
|
|
153
|
+
[0m[32m✓[0m[0m[1m VerifiableCredentialSchema rejects wrong core context[0m [0m[2m[0.17ms[0m[2m][0m
|
|
154
|
+
[0m[32m✓[0m[0m[1m VcDataModel20DerivedZodTemplates exposes expected entry points[0m [0m[2m[0.04ms[0m[2m][0m
|
|
155
|
+
[0m
|
|
156
|
+
test/lti.test.ts:
|
|
157
|
+
[0m[32m✓[0m[0m[1m LTI core launch schema accepts a normalized resource link launch[0m [0m[2m[2.00ms[0m[2m][0m
|
|
158
|
+
[0m[32m✓[0m[0m[1m LTI deep linking schema accepts request settings and response items[0m [0m[2m[2.03ms[0m[2m][0m
|
|
159
|
+
[0m[32m✓[0m[0m[1m LTI AGS schema accepts endpoint, line item, score, and result shapes[0m [0m[2m[1.68ms[0m[2m][0m
|
|
160
|
+
[0m[32m✓[0m[0m[1m LTI NRPS schema accepts names/roles service and membership container shapes[0m [0m[2m[1.39ms[0m[2m][0m
|
|
161
|
+
[0m[32m✓[0m[0m[1m LTI proctoring schema accepts start and end assessment messages[0m [0m[2m[1.57ms[0m[2m][0m
|
|
162
|
+
[0m
|
|
163
|
+
test/case-v1_1.test.ts:
|
|
164
|
+
[0m[32m✓[0m [0mCASE v1.1 Schemas[2m > [0mCore entity schemas[2m >[0m[1m should validate a valid CFAssociation[0m [0m[2m[1.11ms[0m[2m][0m
|
|
165
|
+
[0m[32m✓[0m [0mCASE v1.1 Schemas[2m > [0mCore entity schemas[2m >[0m[1m should reject CFAssociation with invalid UUID[0m [0m[2m[0.20ms[0m[2m][0m
|
|
166
|
+
[0m[32m✓[0m [0mCASE v1.1 Schemas[2m > [0mREST binding operations[2m >[0m[1m should expose getCFAssociation operation[0m [0m[2m[0.04ms[0m[2m][0m
|
|
167
|
+
[0m[32m✓[0m [0mCASE v1.1 Schemas[2m > [0mREST binding operations[2m >[0m[1m should expose listCFAssociations operation[0m [0m[2m[0.02ms[0m[2m][0m
|
|
168
|
+
[0m[32m✓[0m [0mCASE v1.1 Schemas[2m > [0mREST binding operations[2m >[0m[1m should expose getCFPackage operation[0m [0m[2m[0.05ms[0m[2m][0m
|
|
169
|
+
[0m[32m✓[0m [0mCASE v1.1 Schemas[2m > [0mREST binding operations[2m >[0m[1m should expose listCFItems operation[0m [0m[2m[0.02ms[0m[2m][0m
|
|
170
|
+
[0m[32m✓[0m [0mCASE v1.1 Schemas[2m > [0mREST binding operations[2m >[0m[1m should expose getCFRubric operation[0m [0m[2m[0.02ms[0m[2m][0m
|
|
171
|
+
[0m[32m✓[0m [0mCASE v1.1 Schemas[2m > [0mShared validators[2m >[0m[1m should validate RFC4122 UUID[0m [0m[2m[0.03ms[0m[2m][0m
|
|
172
|
+
[0m[32m✓[0m [0mCASE v1.1 Schemas[2m > [0mShared validators[2m >[0m[1m should reject invalid UUID format[0m [0m[2m[0.06ms[0m[2m][0m
|
|
173
|
+
[0m[32m✓[0m [0mCASE v1.1 Schemas[2m > [0mShared validators[2m >[0m[1m should validate ISO8601 datetime[0m [0m[2m[0.04ms[0m[2m][0m
|
|
174
|
+
[0m[32m✓[0m [0mCASE v1.1 Schemas[2m > [0mShared validators[2m >[0m[1m should validate link URI[0m [0m[2m[0.29ms[0m[2m][0m
|
|
175
|
+
[0m[32m✓[0m [0mCASE v1.1 Schemas[2m > [0mExtensible vocabularies[2m >[0m[1m should allow standard association types[0m [0m[2m[0.14ms[0m[2m][0m
|
|
176
|
+
[0m[32m✓[0m [0mCASE v1.1 Schemas[2m > [0mExtensible vocabularies[2m >[0m[1m should allow ext:* custom extensions[0m [0m[2m[0.08ms[0m[2m][0m
|
|
177
|
+
[0m[32m✓[0m [0mCASE v1.1 Schemas[2m > [0mExtensible vocabularies[2m >[0m[1m should reject invalid ext: format[0m [0m[2m[0.10ms[0m[2m][0m
|
|
178
|
+
[0m[32m✓[0m [0mCASE v1.1 Schemas[2m > [0mDerived templates[2m >[0m[1m should expose spec links[0m [0m[2m[0.04ms[0m[2m][0m
|
|
179
|
+
[0m[32m✓[0m [0mCASE v1.1 Schemas[2m > [0mDerived templates[2m >[0m[1m should document scope coverage[0m [0m[2m[0.03ms[0m[2m][0m
|
|
180
|
+
[0m
|
|
181
|
+
test/caliper-v1_2.test.ts:
|
|
182
|
+
[0m[32m✓[0m[0m[1m ActionSchema validates Caliper action vocabulary[0m [0m[2m[0.20ms[0m[2m][0m
|
|
183
|
+
[0m[32m✓[0m[0m[1m PersonSchema requires top-level @context for described entity documents[0m [0m[2m[0.78ms[0m[2m][0m
|
|
184
|
+
[0m[32m✓[0m[0m[1m EventSchema enforces URN UUID ids and UTC-millisecond eventTime[0m [0m[2m[1.14ms[0m[2m][0m
|
|
185
|
+
[0m[32m✓[0m[0m[1m AnnotationEventSchema enforces textual actor/action/object constraints[0m [0m[2m[0.96ms[0m[2m][0m
|
|
186
|
+
[0m[32m✓[0m[0m[1m MessageEventSchema accepts MarkedAsUnRead textual alias[0m [0m[2m[0.37ms[0m[2m][0m
|
|
187
|
+
[0m[32m✓[0m[0m[1m ViewEventSchema restricts target entity type to Frame[0m [0m[2m[0.47ms[0m[2m][0m
|
|
188
|
+
[0m[32m✓[0m[0m[1m EnvelopeSchema enforces required fields and disallows custom top-level properties[0m [0m[2m[5.80ms[0m[2m][0m
|
|
189
|
+
[0m[32m✓[0m[0m[1m TextPositionSelectorSchema requires type/start/end[0m [0m[2m[0.50ms[0m[2m][0m
|
|
190
|
+
[0m[32m✓[0m[0m[1m SystemIdentifierSchema validates required identifier fields[0m [0m[2m[0.47ms[0m[2m][0m
|
|
191
|
+
[0m[32m✓[0m[0m[1m Caliper12DerivedZodTemplates exposes key Caliper entry points and conformance metadata[0m [0m[2m[0.08ms[0m[2m][0m
|
|
192
|
+
|
|
193
|
+
[0m[32m 156 pass[0m
|
|
194
|
+
[0m[2m 0 fail[0m
|
|
195
|
+
279 expect() calls
|
|
196
|
+
Ran 156 tests across 16 files. [0m[2m[[1m456.00ms[0m[2m][0m
|
package/README.md
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# @conform-ed/contracts
|
|
2
|
+
|
|
3
|
+
Shared runtime contracts and zod schemas for runner config and output.
|
|
4
|
+
|
|
5
|
+
Implementation notes for the XSD-to-Zod ports live alongside this package:
|
|
6
|
+
|
|
7
|
+
- `packages/contracts/caliper-v1_2-zod-templates.md`
|
|
8
|
+
- `packages/contracts/cmi5-v1_0-zod-templates.md`
|
|
9
|
+
- `packages/contracts/xapi-zod-templates.md`
|
|
10
|
+
- `packages/contracts/case-v1_1-zod-templates.md`
|
|
11
|
+
- `packages/contracts/cat-v1_0-zod-templates.md`
|
|
12
|
+
- `packages/contracts/cc-v1_3-zod-templates.md`
|
|
13
|
+
- `packages/contracts/cc-v1_4-zod-templates.md`
|
|
14
|
+
- `packages/contracts/clr-v2_0-zod-templates.md`
|
|
15
|
+
- `packages/contracts/lti-zod-templates.md`
|
|
16
|
+
- `packages/contracts/open-badges-v3_0-zod-templates.md`
|
|
17
|
+
- `packages/contracts/oneroster-v1_2-zod-templates.md`
|
|
18
|
+
- `packages/contracts/qti-v2_1-zod-templates.md`
|
|
19
|
+
- `packages/contracts/qti-v2_2-zod-templates.md`
|
|
20
|
+
- `packages/contracts/qti-v3_0_1-zod-templates.md`
|
|
21
|
+
- `packages/contracts/vc-data-model-v2_0-zod-templates.md`
|
|
22
|
+
|
|
23
|
+
Versioned schema bundles are exported from the package root as namespaces:
|
|
24
|
+
|
|
25
|
+
- `CaliperV1_2`
|
|
26
|
+
- `Cmi5`
|
|
27
|
+
- `Cmi5V1_0`
|
|
28
|
+
- `Xapi`
|
|
29
|
+
- `XapiV1_0_3`
|
|
30
|
+
- `XapiV2_0`
|
|
31
|
+
- `CaseV1_1`
|
|
32
|
+
- `CatV1_0`
|
|
33
|
+
- `CommonCartridgeV1_3`
|
|
34
|
+
- `CommonCartridgeV1_4`
|
|
35
|
+
- `ClrV2_0`
|
|
36
|
+
- `Lti`
|
|
37
|
+
- `LtiV1_3`
|
|
38
|
+
- `LtiDeepLinkingV2_0`
|
|
39
|
+
- `LtiAgsV2_0`
|
|
40
|
+
- `LtiNrpsV2_0`
|
|
41
|
+
- `LtiProctoringV1_0`
|
|
42
|
+
- `OpenBadgesV3_0`
|
|
43
|
+
- `OneRosterV1_2`
|
|
44
|
+
- `QtiV2_1`
|
|
45
|
+
- `QtiV2_2`
|
|
46
|
+
- `QtiV3_0_1`
|
|
47
|
+
- `VcDataModelV2_0`
|
|
48
|
+
|
|
49
|
+
XML intake, example inventory, and file/folder validation helpers now live alongside this package in:
|
|
50
|
+
|
|
51
|
+
- `packages/qti-xml`
|
|
52
|
+
- `packages/cli`
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Caliper Analytics v1.2 JSON schema bundle -> Zod template notes
|
|
2
|
+
|
|
3
|
+
## Published specification
|
|
4
|
+
|
|
5
|
+
- Main specification: `https://www.imsglobal.org/spec/caliper/v1p2/impl/`
|
|
6
|
+
- Canonical source repository: `https://github.com/1EdTech/caliper-spec`
|
|
7
|
+
- Practical JSON schema corpus used for this implementation: `https://github.com/1EdTech/CaliperBootcamp/tree/main/schemas/v1_2`
|
|
8
|
+
|
|
9
|
+
This note accompanies `packages/contracts/src/caliper/v1_2/`.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 1. Source precedence used for this implementation
|
|
14
|
+
|
|
15
|
+
To align with textual spec intent while remaining interoperable with published artifacts, this implementation follows an explicit precedence order:
|
|
16
|
+
|
|
17
|
+
1. `https://www.imsglobal.org/spec/caliper/v1p2` (normative textual specification)
|
|
18
|
+
2. `https://www.imsglobal.org/spec/caliper/v1p2/impl/` (implementation guide clarifications)
|
|
19
|
+
3. `tmp/CaliperBootcamp/schemas/v1_2/*` (machine-readable compatibility corpus)
|
|
20
|
+
|
|
21
|
+
This precedence is exported in code via `CALIPER_REQUIREMENT_SOURCE_PRECEDENCE` and related metadata.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 2. What was implemented
|
|
26
|
+
|
|
27
|
+
This port adds a versioned Caliper v1.2 bundle with:
|
|
28
|
+
|
|
29
|
+
- Caliper envelope schema
|
|
30
|
+
- full published Action/Profile/Metric/Status vocabularies
|
|
31
|
+
- base event contracts and all Bootcamp v1.2 event entry points
|
|
32
|
+
- base entity contracts and all Bootcamp v1.2 entity entry points
|
|
33
|
+
- SystemIdentifier, CaliperData, Selector/TextPositionSelector helper schemas
|
|
34
|
+
- an explicit published-entry-point map (`CaliperV1P2JsonSchemaEntryPoints`)
|
|
35
|
+
|
|
36
|
+
Public package surface:
|
|
37
|
+
|
|
38
|
+
- root namespace: `CaliperV1_2`
|
|
39
|
+
- subpath export: `@conform-ed/contracts/caliper/v1_2`
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 3. Structural choices
|
|
44
|
+
|
|
45
|
+
The implementation is split into:
|
|
46
|
+
|
|
47
|
+
- `shared.ts` for shared context, datetime, IRI/UUID, reference, and entity/event schema builders
|
|
48
|
+
- `caliper_v1p2_bootcamp_schema.ts` for vocabulary and published entry-point schemas
|
|
49
|
+
- `textual_requirements.ts` for extracted event-level textual constraints and source metadata
|
|
50
|
+
- `index.ts` for barrel exports and `Caliper12DerivedZodTemplates`
|
|
51
|
+
|
|
52
|
+
This keeps Caliper-specific concerns isolated and aligned with existing versioned standards packages.
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 4. Validation choices
|
|
57
|
+
|
|
58
|
+
Implemented strict alignment upgrades:
|
|
59
|
+
|
|
60
|
+
- **Event id** requires UUID URN form (`urn:uuid:...`) via `CaliperEventIdSchema`
|
|
61
|
+
- **Datetime** requires ISO8601 UTC with millisecond precision (`YYYY-MM-DDTHH:mm:ss.SSSZ`)
|
|
62
|
+
- **Envelope** enforces required `sensor`, `sendTime`, `dataVersion`, and non-empty `data`
|
|
63
|
+
- **Envelope** is strict at top-level (no unknown custom envelope properties)
|
|
64
|
+
- **Event subtype constraints** are enforced for textual-spec-covered events:
|
|
65
|
+
- supported actor type(s)
|
|
66
|
+
- supported action terms (including documented deprecated terms where applicable)
|
|
67
|
+
- supported object type(s)
|
|
68
|
+
- supported generated/target entity type(s) where defined
|
|
69
|
+
- **Entity entry points** require `id`, `type`, and top-level `@context`
|
|
70
|
+
- **No-id entity alignment**: `TextPositionSelector` requires `type`, `start`, `end`; `SystemIdentifier` requires `type`, `identifier`, `identifierType`
|
|
71
|
+
|
|
72
|
+
`CaliperV1P2ConformanceMetadata` exposes the extracted textual rule set and identifies Bootcamp-only event types.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 5. Coverage and known deviations
|
|
77
|
+
|
|
78
|
+
### Textual-spec covered event constraints
|
|
79
|
+
|
|
80
|
+
Event-level textual constraints are explicitly enforced for:
|
|
81
|
+
|
|
82
|
+
- `AnnotationEvent`
|
|
83
|
+
- `AssessmentEvent`
|
|
84
|
+
- `AssessmentItemEvent`
|
|
85
|
+
- `AssignableEvent`
|
|
86
|
+
- `ForumEvent`
|
|
87
|
+
- `GradeEvent`
|
|
88
|
+
- `MediaEvent`
|
|
89
|
+
- `MessageEvent`
|
|
90
|
+
- `NavigationEvent`
|
|
91
|
+
- `SessionEvent`
|
|
92
|
+
- `ThreadEvent`
|
|
93
|
+
- `ToolUseEvent`
|
|
94
|
+
- `ViewEvent`
|
|
95
|
+
|
|
96
|
+
### Bootcamp-only compatibility events
|
|
97
|
+
|
|
98
|
+
The following event types exist in Bootcamp v1.2 artifacts but are not fully constrained by the extracted textual rule set used in this implementation:
|
|
99
|
+
|
|
100
|
+
- `Event`
|
|
101
|
+
- `FeedbackEvent`
|
|
102
|
+
- `OutcomeEvent`
|
|
103
|
+
- `QuestionnaireEvent`
|
|
104
|
+
- `QuestionnaireItemEvent`
|
|
105
|
+
- `ReadingEvent`
|
|
106
|
+
- `ResourceManagementEvent`
|
|
107
|
+
- `SearchEvent`
|
|
108
|
+
- `SurveyEvent`
|
|
109
|
+
- `SurveyInvitationEvent`
|
|
110
|
+
- `ToolLaunchEvent`
|
|
111
|
+
|
|
112
|
+
These remain structurally validated but without the same actor/action/object subset enforcement as the textual-spec-covered list above.
|
|
113
|
+
|
|
114
|
+
### Additional explicit deviation notes
|
|
115
|
+
|
|
116
|
+
- Caliper context handling in public artifacts can vary between `v1p1` and `v1p2` context URIs; this implementation accepts both.
|
|
117
|
+
- Full per-entity property-table enforcement across all Appendix entity definitions is not yet exhaustive; current implementation focuses on base required semantics (`id`, `type`, context) plus key no-id entities and event/profile-level constraints.
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## 6. Scope note
|
|
122
|
+
|
|
123
|
+
The 1EdTech Caliper implementation page does not currently publish an official machine-readable schema bundle comparable to some other standards in this repository. This implementation therefore uses the Bootcamp v1.2 schema corpus as the concrete source for operational Zod contracts, while keeping all spec links and versioning explicit.
|