@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.
Files changed (187) hide show
  1. package/.turbo/turbo-build.log +2 -0
  2. package/.turbo/turbo-format.log +6 -0
  3. package/.turbo/turbo-lint.log +4 -0
  4. package/.turbo/turbo-test.log +196 -0
  5. package/.turbo/turbo-typecheck.log +2 -0
  6. package/README.md +52 -0
  7. package/caliper-v1_2-zod-templates.md +123 -0
  8. package/case-v1_1-zod-templates.md +290 -0
  9. package/cat-v1_0-zod-templates.md +73 -0
  10. package/cc-v1_3-zod-templates.md +531 -0
  11. package/cc-v1_4-zod-templates.md +247 -0
  12. package/clr-v2_0-zod-templates.md +117 -0
  13. package/cmi5-v1_0-zod-templates.md +9 -0
  14. package/lti-zod-templates.md +11 -0
  15. package/oneroster-v1_2-zod-templates.md +76 -0
  16. package/open-badges-v3_0-zod-templates.md +66 -0
  17. package/package.json +42 -0
  18. package/qti-v2_1-zod-templates.md +45 -0
  19. package/qti-v2_2-zod-templates.md +32 -0
  20. package/qti-v3_0_1-zod-templates.md +421 -0
  21. package/src/adapter.ts +83 -0
  22. package/src/caliper/v1_2/caliper_v1p2_bootcamp_schema.ts +781 -0
  23. package/src/caliper/v1_2/index.ts +37 -0
  24. package/src/caliper/v1_2/shared.ts +122 -0
  25. package/src/caliper/v1_2/textual_requirements.ts +219 -0
  26. package/src/case/v1_1/case_v1p1_cfassociation_jsonschema1.ts +1 -0
  27. package/src/case/v1_1/case_v1p1_cfassociationgrouping_jsonschema1.ts +1 -0
  28. package/src/case/v1_1/case_v1p1_cfassociationset_jsonschema1.ts +1 -0
  29. package/src/case/v1_1/case_v1p1_cfconceptset_jsonschema1.ts +1 -0
  30. package/src/case/v1_1/case_v1p1_cfdocument_jsonschema1.ts +1 -0
  31. package/src/case/v1_1/case_v1p1_cfdocumentset_jsonschema1.ts +1 -0
  32. package/src/case/v1_1/case_v1p1_cfitem_jsonschema1.ts +1 -0
  33. package/src/case/v1_1/case_v1p1_cfitemtypeset_jsonschema1.ts +1 -0
  34. package/src/case/v1_1/case_v1p1_cflicense_jsonschema1.ts +1 -0
  35. package/src/case/v1_1/case_v1p1_cfpackage_jsonschema1.ts +1 -0
  36. package/src/case/v1_1/case_v1p1_cfrubric_jsonschema1.ts +1 -0
  37. package/src/case/v1_1/case_v1p1_cfsubjectset_jsonschema1.ts +1 -0
  38. package/src/case/v1_1/case_v1p1_imsx_statusinfo_jsonschema1.ts +1 -0
  39. package/src/case/v1_1/case_v1p1_openapi3_restbinding_schema.ts +113 -0
  40. package/src/case/v1_1/index.ts +95 -0
  41. package/src/case/v1_1/shared.ts +384 -0
  42. package/src/cat/v1_0/cat_v1p0_restbinding_operations_schema.ts +75 -0
  43. package/src/cat/v1_0/index.ts +124 -0
  44. package/src/cat/v1_0/shared.ts +345 -0
  45. package/src/clr/v2_0/clr_v2p0_achievementcredential_schema.ts +16 -0
  46. package/src/clr/v2_0/clr_v2p0_clrcredential_schema.ts +9 -0
  47. package/src/clr/v2_0/clr_v2p0_endorsementcredential_schema.ts +11 -0
  48. package/src/clr/v2_0/clr_v2p0_getclrcredentialsresponse_schema.ts +1 -0
  49. package/src/clr/v2_0/clr_v2p0_imsx_statusinfo_schema.ts +8 -0
  50. package/src/clr/v2_0/clr_v2p0_profile_schema.ts +9 -0
  51. package/src/clr/v2_0/index.ts +22 -0
  52. package/src/clr/v2_0/shared.ts +206 -0
  53. package/src/cmi5/index.ts +3 -0
  54. package/src/cmi5/v1_0/index.ts +134 -0
  55. package/src/common-cartridge/v1_3/ccv1p3_imsccauth_v1p3.ts +26 -0
  56. package/src/common-cartridge/v1_3/ccv1p3_imscp_v1p2_v1p0.ts +352 -0
  57. package/src/common-cartridge/v1_3/ccv1p3_imscsmd_v1p0.ts +35 -0
  58. package/src/common-cartridge/v1_3/ccv1p3_imsdt_v1p3.ts +33 -0
  59. package/src/common-cartridge/v1_3/ccv1p3_imswl_v1p3.ts +23 -0
  60. package/src/common-cartridge/v1_3/ccv1p3_lomccltilink_v1p0.ts +14 -0
  61. package/src/common-cartridge/v1_3/ccv1p3_lommanifest_v1p0.ts +14 -0
  62. package/src/common-cartridge/v1_3/ccv1p3_lomresource_v1p0.ts +14 -0
  63. package/src/common-cartridge/v1_3/ccv1p3_qtiasiv1p2p1_v1p0.ts +964 -0
  64. package/src/common-cartridge/v1_3/index.ts +41 -0
  65. package/src/common-cartridge/v1_3/lom-internal.ts +396 -0
  66. package/src/common-cartridge/v1_3/shared.ts +68 -0
  67. package/src/common-cartridge/v1_4/core/ccv1p4_imscp_v1p2_v1p0.ts +360 -0
  68. package/src/common-cartridge/v1_4/core/ccv1p4_lommanifest_v1p0.ts +14 -0
  69. package/src/common-cartridge/v1_4/core/ccv1p4_lomresource_v1p0.ts +14 -0
  70. package/src/common-cartridge/v1_4/extension/cc_extresource_assignmentv1p0_v1p0.ts +61 -0
  71. package/src/common-cartridge/v1_4/extension/ccv1p4_cpextensionv1p2_v1p0.ts +20 -0
  72. package/src/common-cartridge/v1_4/extension/ims_openvideov1p0_v1p0.ts +325 -0
  73. package/src/common-cartridge/v1_4/index.ts +104 -0
  74. package/src/common-cartridge/v1_4/k12/ccv1p4_imscp_v1p2_v1p0.ts +19 -0
  75. package/src/common-cartridge/v1_4/k12/ccv1p4_imscp_v1p2_v1p0_thin.ts +17 -0
  76. package/src/common-cartridge/v1_4/k12/ccv1p4_lommanifest_v1p0.ts +14 -0
  77. package/src/common-cartridge/v1_4/k12/ccv1p4_lomresource_v1p0.ts +14 -0
  78. package/src/common-cartridge/v1_4/lom-internal.ts +476 -0
  79. package/src/common-cartridge/v1_4/shared/ccv1p4_imsccauth_v1p4.ts +26 -0
  80. package/src/common-cartridge/v1_4/shared/ccv1p4_imscsmd_v1p1.ts +36 -0
  81. package/src/common-cartridge/v1_4/shared/ccv1p4_imsdt_v1p4.ts +33 -0
  82. package/src/common-cartridge/v1_4/shared/ccv1p4_imslticc_v1p4.ts +45 -0
  83. package/src/common-cartridge/v1_4/shared/ccv1p4_imswl_v1p4.ts +23 -0
  84. package/src/common-cartridge/v1_4/shared/ccv1p4_lomccltilink_v1p0.ts +14 -0
  85. package/src/common-cartridge/v1_4/shared/ccv1p4_qtiasiv1p2p1_v1p0.ts +964 -0
  86. package/src/common-cartridge/v1_4/shared/imsbasiclti_v1p0p1.ts +24 -0
  87. package/src/common-cartridge/v1_4/shared/imslticm_v1p0.ts +23 -0
  88. package/src/common-cartridge/v1_4/shared/imslticp_v1p0.ts +57 -0
  89. package/src/common-cartridge/v1_4/shared/lineitem_v1p0.ts +35 -0
  90. package/src/common-cartridge/v1_4/shared/resourcea11ymetadata-20210915.ts +110 -0
  91. package/src/common-cartridge/v1_4/shared.ts +68 -0
  92. package/src/common-cartridge/v1_4/thin/ccv1p4_imscp_v1p2_v1p0.ts +243 -0
  93. package/src/common-cartridge/v1_4/thin/ccv1p4_lommanifest_v1p0.ts +14 -0
  94. package/src/common-cartridge/v1_4/thin/ccv1p4_lomresource_v1p0.ts +14 -0
  95. package/src/common-cartridge/v1_4/vdex/imsmd_loose_v1p3p2.ts +13 -0
  96. package/src/common-cartridge/v1_4/vdex/imsvdex_v1p0.ts +124 -0
  97. package/src/config.ts +121 -0
  98. package/src/index.ts +32 -0
  99. package/src/lti/ags/v2_0/index.ts +97 -0
  100. package/src/lti/deep-linking/v2_0/index.ts +100 -0
  101. package/src/lti/index.ts +26 -0
  102. package/src/lti/nrps/v2_0/index.ts +69 -0
  103. package/src/lti/proctoring/v1_0/index.ts +131 -0
  104. package/src/lti/shared.ts +66 -0
  105. package/src/lti/v1_3/index.ts +84 -0
  106. package/src/oneroster/v1_2/index.ts +156 -0
  107. package/src/oneroster/v1_2/or_v1p2_csv_binding_schema.ts +427 -0
  108. package/src/oneroster/v1_2/or_v1p2_gradebook_restbinding_schema.ts +120 -0
  109. package/src/oneroster/v1_2/or_v1p2_gradebook_service_schema.ts +243 -0
  110. package/src/oneroster/v1_2/or_v1p2_resource_restbinding_schema.ts +24 -0
  111. package/src/oneroster/v1_2/or_v1p2_resource_service_schema.ts +47 -0
  112. package/src/oneroster/v1_2/or_v1p2_rostering_restbinding_schema.ts +84 -0
  113. package/src/oneroster/v1_2/or_v1p2_rostering_service_schema.ts +288 -0
  114. package/src/oneroster/v1_2/shared.ts +90 -0
  115. package/src/open-badges/v3_0/index.ts +20 -0
  116. package/src/open-badges/v3_0/ob_v3p0_achievementcredential_schema.ts +17 -0
  117. package/src/open-badges/v3_0/ob_v3p0_endorsementcredential_schema.ts +11 -0
  118. package/src/open-badges/v3_0/ob_v3p0_getopenbadgecredentialsresponse_schema.ts +1 -0
  119. package/src/open-badges/v3_0/ob_v3p0_imsx_statusinfo_schema.ts +8 -0
  120. package/src/open-badges/v3_0/ob_v3p0_profile_schema.ts +9 -0
  121. package/src/open-badges/v3_0/shared.ts +458 -0
  122. package/src/qti/v2-internal.ts +1683 -0
  123. package/src/qti/v2_1/apipv1p0_qtiextv2p1_v1p0.ts +3 -0
  124. package/src/qti/v2_1/imsqti_metadata_v2p1.ts +3 -0
  125. package/src/qti/v2_1/imsqti_result_v2p1.ts +3 -0
  126. package/src/qti/v2_1/imsqti_usagedata_v2p1.ts +3 -0
  127. package/src/qti/v2_1/imsqti_v2p1p2.ts +71 -0
  128. package/src/qti/v2_1/index.ts +53 -0
  129. package/src/qti/v2_1/qtiv2p1_imscpv1p2_v1p0.ts +3 -0
  130. package/src/qti/v2_1/schemas.ts +15 -0
  131. package/src/qti/v2_1/shared.ts +3 -0
  132. package/src/qti/v2_2/apipv1p0_qtiextv2p2_v1p0p1.ts +3 -0
  133. package/src/qti/v2_2/imsqti_metadata_v2p2.ts +3 -0
  134. package/src/qti/v2_2/imsqti_result_v2p2.ts +3 -0
  135. package/src/qti/v2_2/imsqti_usagedata_v2p2.ts +3 -0
  136. package/src/qti/v2_2/imsqti_v2p2p4.ts +76 -0
  137. package/src/qti/v2_2/imsqtiv2p2p4_html5_v1p0.ts +8 -0
  138. package/src/qti/v2_2/index.ts +59 -0
  139. package/src/qti/v2_2/qtiv2p2_csm_v2p2.ts +4 -0
  140. package/src/qti/v2_2/qtiv2p2_imscpv1p2_v1p0.ts +3 -0
  141. package/src/qti/v2_2/schemas.ts +19 -0
  142. package/src/qti/v2_2/shared.ts +3 -0
  143. package/src/qti/v3_0_1/assessment-internal.ts +1509 -0
  144. package/src/qti/v3_0_1/imsqti_asiv3p0p1_v1p0.ts +57 -0
  145. package/src/qti/v3_0_1/imsqti_itemv3p0p1_v1p0.ts +60 -0
  146. package/src/qti/v3_0_1/imsqti_metadatav3p0_v1p0.ts +73 -0
  147. package/src/qti/v3_0_1/imsqti_outcomev3p0p1_v1p0.ts +11 -0
  148. package/src/qti/v3_0_1/imsqti_responseprocessingv3p0p1_v1p0.ts +17 -0
  149. package/src/qti/v3_0_1/imsqti_resultv3p0_v1p0.ts +222 -0
  150. package/src/qti/v3_0_1/imsqti_sectionv3p0p1_v1p0.ts +15 -0
  151. package/src/qti/v3_0_1/imsqti_stimulusv3p0p1_v1p0.ts +15 -0
  152. package/src/qti/v3_0_1/imsqti_testv3p0p1_v1p0.ts +49 -0
  153. package/src/qti/v3_0_1/imsqti_usagedatav3p0_v1p0.ts +77 -0
  154. package/src/qti/v3_0_1/imsqtiv3p0_afa3p0pnp_v1p0.ts +269 -0
  155. package/src/qti/v3_0_1/index.ts +50 -0
  156. package/src/qti/v3_0_1/processing-internal.ts +667 -0
  157. package/src/qti/v3_0_1/shared.ts +146 -0
  158. package/src/qti/v3_0_1/variables-internal.ts +274 -0
  159. package/src/shared/imsx-status.ts +49 -0
  160. package/src/summary.ts +70 -0
  161. package/src/vc-data-model/v2_0/index.ts +27 -0
  162. package/src/vc-data-model/v2_0/shared.ts +206 -0
  163. package/src/xapi/index.ts +12 -0
  164. package/src/xapi/shared.ts +444 -0
  165. package/src/xapi/v1_0_3/index.ts +169 -0
  166. package/src/xapi/v2_0/index.ts +256 -0
  167. package/test/caliper-v1_2.test.ts +270 -0
  168. package/test/case-v1_1.test.ts +147 -0
  169. package/test/cat-v1_0.test.ts +338 -0
  170. package/test/cc-v1_4.test.ts +239 -0
  171. package/test/clr-v2_0.test.ts +225 -0
  172. package/test/cmi5-v1_0.test.ts +196 -0
  173. package/test/contracts.test.ts +125 -0
  174. package/test/fixtures/cmi5/extended-cmi5.xml +72 -0
  175. package/test/fixtures/cmi5/simple-cmi5.xml +26 -0
  176. package/test/lti.test.ts +146 -0
  177. package/test/oneroster-v1_2.test.ts +234 -0
  178. package/test/open-badges-v3_0.test.ts +144 -0
  179. package/test/qti-v2_1.test.ts +146 -0
  180. package/test/qti-v2_2.test.ts +154 -0
  181. package/test/qti-v3_0_1.test.ts +576 -0
  182. package/test/schema-examples.test.ts +101 -0
  183. package/test/vc-data-model-v2_0.test.ts +63 -0
  184. package/test/xapi.test.ts +384 -0
  185. package/tsconfig.json +7 -0
  186. package/vc-data-model-v2_0-zod-templates.md +43 -0
  187. package/xapi-zod-templates.md +95 -0
@@ -0,0 +1,325 @@
1
+ import { z } from "zod";
2
+
3
+ import {
4
+ NonEmptyStringSchema,
5
+ UriReferenceSchema,
6
+ XmlExtensionNodeListSchema,
7
+ addIssue,
8
+ asArray,
9
+ collectDuplicates,
10
+ strictObject,
11
+ } from "../shared";
12
+
13
+ const OpenVideoExtensionStringSchema = z.string().regex(/^ext:[A-Za-z0-9._|-]+$/u);
14
+ const OpenVideoIpAddressSchema = z
15
+ .string()
16
+ .regex(/^(?:(?:1?\d?\d|2[0-4]\d|25[0-5])\.){3}(?:1?\d?\d|2[0-4]\d|25[0-5])$/u);
17
+ const OpenVideoChecksumSchema = z.string().regex(/^[a-fA-F0-9]{8}$/u);
18
+
19
+ export const OpenVideoContributorRoleSchema = z.union([
20
+ z.enum([
21
+ "guest",
22
+ "faculty",
23
+ "teachingassistant",
24
+ "co-presenter",
25
+ "audiencemember",
26
+ "presenter",
27
+ "moderator",
28
+ "group",
29
+ "organization",
30
+ ]),
31
+ OpenVideoExtensionStringSchema,
32
+ ]);
33
+
34
+ export const OpenVideoRecordingAgentTypeSchema = z.union([
35
+ z.enum(["Classroom Capture", "User Generated Content"]),
36
+ OpenVideoExtensionStringSchema,
37
+ ]);
38
+
39
+ export const OpenVideoOperatingSystemSchema = z.union([
40
+ z.enum(["windows", "macos", "linux"]),
41
+ OpenVideoExtensionStringSchema,
42
+ ]);
43
+
44
+ export const OpenVideoRenditionTypeSchema = z.union([
45
+ z.enum(["alternativeAudio", "alternativeBitrate", "audioDescription"]),
46
+ OpenVideoExtensionStringSchema,
47
+ ]);
48
+
49
+ export const OpenVideoStreamSourceSchema = z.union([
50
+ z.enum(["presenter", "screen", "content", "other"]),
51
+ OpenVideoExtensionStringSchema,
52
+ ]);
53
+
54
+ export const OpenVideoAttachmentSchema = strictObject({
55
+ url: UriReferenceSchema,
56
+ mimeType: NonEmptyStringSchema,
57
+ checksum: OpenVideoChecksumSchema.optional(),
58
+ });
59
+
60
+ export const OpenVideoCaptionsSchema = strictObject({
61
+ file: OpenVideoAttachmentSchema,
62
+ source: z.string().optional(),
63
+ visible: z.boolean().optional(),
64
+ description: z.string().optional(),
65
+ xmlLang: z.string().optional(),
66
+ });
67
+
68
+ export const OpenVideoCaptureManifestSchema = strictObject({
69
+ scheduledStartTime: z.string().optional(),
70
+ scheduledDuration: z.number().int().optional(),
71
+ recordingStartTime: z.string().optional(),
72
+ recordingDuration: z.number().int().optional(),
73
+ uploadedStartTime: z.string().optional(),
74
+ });
75
+
76
+ export const OpenVideoSocialMediaSchema = strictObject({
77
+ value: UriReferenceSchema,
78
+ smtype: NonEmptyStringSchema,
79
+ });
80
+
81
+ export const OpenVideoContactInfoSchema = strictObject({
82
+ email: z.string().optional(),
83
+ telephone: z.string().optional(),
84
+ mobile: z.string().optional(),
85
+ sms: z.string().optional(),
86
+ address: z.string().optional(),
87
+ socialmedia: z.array(OpenVideoSocialMediaSchema).optional(),
88
+ });
89
+
90
+ export const OpenVideoNameSchema = strictObject({
91
+ givenName: z.string().optional(),
92
+ familyName: z.string().optional(),
93
+ });
94
+
95
+ export const OpenVideoContributorSchema = strictObject({
96
+ contributorID: NonEmptyStringSchema,
97
+ role: OpenVideoContributorRoleSchema.optional(),
98
+ name: OpenVideoNameSchema.optional(),
99
+ title: z.string().optional(),
100
+ link: UriReferenceSchema.optional(),
101
+ bio: z.string().optional(),
102
+ image: UriReferenceSchema.optional(),
103
+ contactInformation: z.array(OpenVideoContactInfoSchema).optional(),
104
+ });
105
+
106
+ export const OpenVideoContributorsSchema = strictObject({
107
+ contributor: z.array(OpenVideoContributorSchema).min(1),
108
+ });
109
+
110
+ export const OpenVideoCutSchema = strictObject({
111
+ startTime: z.string(),
112
+ duration: z.string(),
113
+ });
114
+
115
+ export const OpenVideoCutsSchema = strictObject({
116
+ cut: z.array(OpenVideoCutSchema).min(1),
117
+ });
118
+
119
+ export const OpenVideoLayoutSchema = strictObject({
120
+ posX: z.number().int(),
121
+ posY: z.number().int(),
122
+ width: z.number().int(),
123
+ height: z.number().int(),
124
+ });
125
+
126
+ export const OpenVideoLocationSchema = strictObject({
127
+ address: z.string(),
128
+ room: z.string().optional(),
129
+ buildingName: z.string().optional(),
130
+ });
131
+
132
+ export const OpenVideoMarkerBaseSchema = strictObject({
133
+ title: z.string().optional(),
134
+ description: z.string().optional(),
135
+ startTime: z.string(),
136
+ userId: z.string().optional(),
137
+ });
138
+
139
+ export const OpenVideoDeckMarkerSchema = OpenVideoMarkerBaseSchema.extend({
140
+ file: OpenVideoAttachmentSchema,
141
+ deckFileIndex: z.number().int().optional(),
142
+ deckFile: OpenVideoAttachmentSchema.optional(),
143
+ });
144
+
145
+ export const OpenVideoFileMarkerSchema = OpenVideoMarkerBaseSchema.extend({
146
+ file: OpenVideoAttachmentSchema,
147
+ });
148
+
149
+ export const OpenVideoHighlightMarkerSchema = OpenVideoMarkerBaseSchema.extend({
150
+ duration: z.string().optional(),
151
+ layout: OpenVideoLayoutSchema.optional(),
152
+ style: z.string().optional(),
153
+ });
154
+
155
+ export const OpenVideoMarkerSchema = OpenVideoMarkerBaseSchema.extend({
156
+ type: z.string(),
157
+ file: OpenVideoAttachmentSchema.optional(),
158
+ duration: z.string().optional(),
159
+ layout: OpenVideoLayoutSchema.optional(),
160
+ style: z.string().optional(),
161
+ });
162
+
163
+ export const OpenVideoSpeakerMarkerSchema = OpenVideoMarkerBaseSchema.extend({
164
+ file: OpenVideoAttachmentSchema.optional(),
165
+ duration: z.string().optional(),
166
+ layout: OpenVideoLayoutSchema.optional(),
167
+ });
168
+
169
+ export const OpenVideoRelatedVideoMarkerSchema = OpenVideoMarkerBaseSchema.extend({
170
+ file: OpenVideoAttachmentSchema,
171
+ duration: z.string().optional(),
172
+ layout: OpenVideoLayoutSchema.optional(),
173
+ style: z.string().optional(),
174
+ });
175
+
176
+ export const OpenVideoMarkersSchema = strictObject({
177
+ imageMarker: z.array(OpenVideoDeckMarkerSchema).optional(),
178
+ confusionPointMarker: z.array(OpenVideoMarkerBaseSchema).optional(),
179
+ bookMarker: z.array(OpenVideoFileMarkerSchema).optional(),
180
+ chapterMarker: z.array(OpenVideoFileMarkerSchema).optional(),
181
+ currentSpeakerMarker: z.array(OpenVideoSpeakerMarkerSchema).optional(),
182
+ highlightMarker: z.array(OpenVideoHighlightMarkerSchema).optional(),
183
+ noteMarker: z.array(OpenVideoFileMarkerSchema).optional(),
184
+ relatedVideoMarker: z.array(OpenVideoRelatedVideoMarkerSchema).optional(),
185
+ slideMarker: z.array(OpenVideoDeckMarkerSchema).optional(),
186
+ marker: z.array(OpenVideoMarkerSchema).optional(),
187
+ });
188
+
189
+ export const OpenVideoRecordingAgentSchema = strictObject({
190
+ agentID: NonEmptyStringSchema,
191
+ recordingAgentType: OpenVideoRecordingAgentTypeSchema.optional(),
192
+ name: z.string().optional(),
193
+ vendor: NonEmptyStringSchema,
194
+ product: NonEmptyStringSchema,
195
+ version: NonEmptyStringSchema,
196
+ isAppliance: z.boolean().optional(),
197
+ ip: OpenVideoIpAddressSchema.optional(),
198
+ os: OpenVideoOperatingSystemSchema.optional(),
199
+ browser: z.string().optional(),
200
+ });
201
+
202
+ export const OpenVideoRecordingAgentsSchema = strictObject({
203
+ recorder: z.array(OpenVideoRecordingAgentSchema).min(1),
204
+ });
205
+
206
+ export const OpenVideoRenditionSchema = strictObject({
207
+ renditionType: OpenVideoRenditionTypeSchema,
208
+ file: OpenVideoAttachmentSchema,
209
+ bitrate: z.number().int().optional(),
210
+ alternateLanguage: z.string().optional(),
211
+ });
212
+
213
+ export const OpenVideoStreamSchema = strictObject({
214
+ title: z.string().optional(),
215
+ startTime: z.string(),
216
+ file: OpenVideoAttachmentSchema,
217
+ bitrate: z.number().int().optional(),
218
+ recorderID: z.string().optional(),
219
+ rendition: z.array(OpenVideoRenditionSchema).optional(),
220
+ cut: z.array(OpenVideoCutSchema).optional(),
221
+ source: OpenVideoStreamSourceSchema,
222
+ providesAudio: z.boolean(),
223
+ captions: z.array(OpenVideoCaptionsSchema).optional(),
224
+ });
225
+
226
+ export const OpenVideoStreamsSchema = strictObject({
227
+ stream: z.array(OpenVideoStreamSchema).min(1),
228
+ });
229
+
230
+ export const OpenVideoTagSchema = strictObject({
231
+ name: z.string().optional(),
232
+ value: z.string(),
233
+ });
234
+
235
+ export const OpenVideoTagsSchema = strictObject({
236
+ tag: z.array(OpenVideoTagSchema).min(1),
237
+ });
238
+
239
+ export const OpenVideoThumbnailTimeSchema = strictObject({
240
+ startTime: z.string(),
241
+ sourceFile: OpenVideoAttachmentSchema,
242
+ });
243
+
244
+ export const OpenVideoSessionSchema = strictObject({
245
+ title: NonEmptyStringSchema,
246
+ description: z.string().optional(),
247
+ dateCreated: z.string().optional(),
248
+ location: OpenVideoLocationSchema.optional(),
249
+ captureManifest: OpenVideoCaptureManifestSchema.optional(),
250
+ markers: OpenVideoMarkersSchema.optional(),
251
+ streams: OpenVideoStreamsSchema.optional(),
252
+ contributors: OpenVideoContributorsSchema.optional(),
253
+ recorders: OpenVideoRecordingAgentsSchema.optional(),
254
+ tags: OpenVideoTagsSchema.optional(),
255
+ thumbnail: OpenVideoAttachmentSchema.optional(),
256
+ thumbnailTime: OpenVideoThumbnailTimeSchema.optional(),
257
+ copyright: z.string().optional(),
258
+ license: z.string().optional(),
259
+ credit: z.array(NonEmptyStringSchema).optional(),
260
+ restrictions: z.string().optional(),
261
+ attachments: z.array(OpenVideoAttachmentSchema).optional(),
262
+ cuts: OpenVideoCutsSchema.optional(),
263
+ extensions: XmlExtensionNodeListSchema.optional(),
264
+ }).superRefine((session, context) => {
265
+ const contributorIds = asArray(session.contributors?.contributor).map((contributor) => contributor.contributorID);
266
+ for (const duplicate of collectDuplicates(contributorIds)) {
267
+ addIssue(context, ["contributors", "contributor"], `Duplicate contributorID in Open Video session: ${duplicate}`);
268
+ }
269
+
270
+ const recorderIds = asArray(session.recorders?.recorder).map((recorder) => recorder.agentID);
271
+ for (const duplicate of collectDuplicates(recorderIds)) {
272
+ addIssue(context, ["recorders", "recorder"], `Duplicate recorder agentID in Open Video session: ${duplicate}`);
273
+ }
274
+
275
+ const knownRecorderIds = new Set(recorderIds);
276
+ asArray(session.streams?.stream).forEach((stream, streamIndex) => {
277
+ if (stream.recorderID && !knownRecorderIds.has(stream.recorderID)) {
278
+ addIssue(
279
+ context,
280
+ ["streams", "stream", streamIndex, "recorderID"],
281
+ `Open Video stream recorderID ${stream.recorderID} does not match any recorder/@agentID.`,
282
+ );
283
+ }
284
+ });
285
+ });
286
+
287
+ export const OpenVideoSessionDocumentSchema = strictObject({
288
+ session: OpenVideoSessionSchema,
289
+ });
290
+ // Inferred types from exported Zod validators.
291
+ export type OpenVideoContributorRole = z.infer<typeof OpenVideoContributorRoleSchema>;
292
+ export type OpenVideoRecordingAgentType = z.infer<typeof OpenVideoRecordingAgentTypeSchema>;
293
+ export type OpenVideoOperatingSystem = z.infer<typeof OpenVideoOperatingSystemSchema>;
294
+ export type OpenVideoRenditionType = z.infer<typeof OpenVideoRenditionTypeSchema>;
295
+ export type OpenVideoStreamSource = z.infer<typeof OpenVideoStreamSourceSchema>;
296
+ export type OpenVideoAttachment = z.infer<typeof OpenVideoAttachmentSchema>;
297
+ export type OpenVideoCaptions = z.infer<typeof OpenVideoCaptionsSchema>;
298
+ export type OpenVideoCaptureManifest = z.infer<typeof OpenVideoCaptureManifestSchema>;
299
+ export type OpenVideoSocialMedia = z.infer<typeof OpenVideoSocialMediaSchema>;
300
+ export type OpenVideoContactInfo = z.infer<typeof OpenVideoContactInfoSchema>;
301
+ export type OpenVideoName = z.infer<typeof OpenVideoNameSchema>;
302
+ export type OpenVideoContributor = z.infer<typeof OpenVideoContributorSchema>;
303
+ export type OpenVideoContributors = z.infer<typeof OpenVideoContributorsSchema>;
304
+ export type OpenVideoCut = z.infer<typeof OpenVideoCutSchema>;
305
+ export type OpenVideoCuts = z.infer<typeof OpenVideoCutsSchema>;
306
+ export type OpenVideoLayout = z.infer<typeof OpenVideoLayoutSchema>;
307
+ export type OpenVideoLocation = z.infer<typeof OpenVideoLocationSchema>;
308
+ export type OpenVideoMarkerBase = z.infer<typeof OpenVideoMarkerBaseSchema>;
309
+ export type OpenVideoDeckMarker = z.infer<typeof OpenVideoDeckMarkerSchema>;
310
+ export type OpenVideoFileMarker = z.infer<typeof OpenVideoFileMarkerSchema>;
311
+ export type OpenVideoHighlightMarker = z.infer<typeof OpenVideoHighlightMarkerSchema>;
312
+ export type OpenVideoMarker = z.infer<typeof OpenVideoMarkerSchema>;
313
+ export type OpenVideoSpeakerMarker = z.infer<typeof OpenVideoSpeakerMarkerSchema>;
314
+ export type OpenVideoRelatedVideoMarker = z.infer<typeof OpenVideoRelatedVideoMarkerSchema>;
315
+ export type OpenVideoMarkers = z.infer<typeof OpenVideoMarkersSchema>;
316
+ export type OpenVideoRecordingAgent = z.infer<typeof OpenVideoRecordingAgentSchema>;
317
+ export type OpenVideoRecordingAgents = z.infer<typeof OpenVideoRecordingAgentsSchema>;
318
+ export type OpenVideoRendition = z.infer<typeof OpenVideoRenditionSchema>;
319
+ export type OpenVideoStream = z.infer<typeof OpenVideoStreamSchema>;
320
+ export type OpenVideoStreams = z.infer<typeof OpenVideoStreamsSchema>;
321
+ export type OpenVideoTag = z.infer<typeof OpenVideoTagSchema>;
322
+ export type OpenVideoTags = z.infer<typeof OpenVideoTagsSchema>;
323
+ export type OpenVideoThumbnailTime = z.infer<typeof OpenVideoThumbnailTimeSchema>;
324
+ export type OpenVideoSession = z.infer<typeof OpenVideoSessionSchema>;
325
+ export type OpenVideoSessionDocument = z.infer<typeof OpenVideoSessionDocumentSchema>;
@@ -0,0 +1,104 @@
1
+ export { XmlExtensionNodeListSchema, XmlExtensionNodeSchema } from "./shared";
2
+
3
+ export * from "./core/ccv1p4_imscp_v1p2_v1p0";
4
+ export * from "./core/ccv1p4_lommanifest_v1p0";
5
+ export * from "./core/ccv1p4_lomresource_v1p0";
6
+ export * from "./thin/ccv1p4_imscp_v1p2_v1p0";
7
+ export * from "./thin/ccv1p4_lommanifest_v1p0";
8
+ export * from "./thin/ccv1p4_lomresource_v1p0";
9
+ export * from "./k12/ccv1p4_imscp_v1p2_v1p0";
10
+ export * from "./k12/ccv1p4_imscp_v1p2_v1p0_thin";
11
+ export * from "./k12/ccv1p4_lommanifest_v1p0";
12
+ export * from "./k12/ccv1p4_lomresource_v1p0";
13
+ export * from "./shared/ccv1p4_imsccauth_v1p4";
14
+ export * from "./shared/ccv1p4_imscsmd_v1p1";
15
+ export * from "./shared/ccv1p4_imsdt_v1p4";
16
+ export * from "./shared/ccv1p4_imslticc_v1p4";
17
+ export * from "./shared/ccv1p4_imswl_v1p4";
18
+ export * from "./shared/ccv1p4_lomccltilink_v1p0";
19
+ export * from "./shared/ccv1p4_qtiasiv1p2p1_v1p0";
20
+ export * from "./shared/imsbasiclti_v1p0p1";
21
+ export * from "./shared/imslticm_v1p0";
22
+ export * from "./shared/imslticp_v1p0";
23
+ export * from "./shared/lineitem_v1p0";
24
+ export * from "./shared/resourcea11ymetadata-20210915";
25
+ export * from "./extension/cc_extresource_assignmentv1p0_v1p0";
26
+ export * from "./extension/ccv1p4_cpextensionv1p2_v1p0";
27
+ export * from "./extension/ims_openvideov1p0_v1p0";
28
+ export * from "./vdex/imsmd_loose_v1p3p2";
29
+ export * from "./vdex/imsvdex_v1p0";
30
+
31
+ import {
32
+ CommonCartridgeManifestProfileDocumentSchema,
33
+ CommonCartridgeManifestRawDocumentSchema,
34
+ } from "./core/ccv1p4_imscp_v1p2_v1p0";
35
+ import { LomManifestDocumentSchema } from "./core/ccv1p4_lommanifest_v1p0";
36
+ import { LomResourceDocumentSchema } from "./core/ccv1p4_lomresource_v1p0";
37
+ import {
38
+ K12CommonCartridgeManifestProfileDocumentSchema,
39
+ K12CommonCartridgeManifestRawDocumentSchema,
40
+ } from "./k12/ccv1p4_imscp_v1p2_v1p0";
41
+ import {
42
+ K12ThinCommonCartridgeManifestProfileDocumentSchema,
43
+ K12ThinCommonCartridgeManifestRawDocumentSchema,
44
+ } from "./k12/ccv1p4_imscp_v1p2_v1p0_thin";
45
+ import { K12LomManifestDocumentSchema } from "./k12/ccv1p4_lommanifest_v1p0";
46
+ import { K12LomResourceDocumentSchema } from "./k12/ccv1p4_lomresource_v1p0";
47
+ import { CommonCartridgeAuthorizationsDocumentSchema } from "./shared/ccv1p4_imsccauth_v1p4";
48
+ import { CurriculumStandardsMetadataSetDocumentSchema } from "./shared/ccv1p4_imscsmd_v1p1";
49
+ import { DiscussionTopicDocumentSchema } from "./shared/ccv1p4_imsdt_v1p4";
50
+ import { CartridgeBasicLTILinkDocumentSchema, CartridgeToolLocatorDocumentSchema } from "./shared/ccv1p4_imslticc_v1p4";
51
+ import { WebLinkDocumentSchema } from "./shared/ccv1p4_imswl_v1p4";
52
+ import { LomCcLtiLinkDocumentSchema } from "./shared/ccv1p4_lomccltilink_v1p0";
53
+ import {
54
+ QtiQuestestinteropProfileDocumentSchema,
55
+ QtiQuestestinteropRawDocumentSchema,
56
+ } from "./shared/ccv1p4_qtiasiv1p2p1_v1p0";
57
+ import { BasicLTILinkDocumentSchema } from "./shared/imsbasiclti_v1p0p1";
58
+ import { LineItemDocumentSchema } from "./shared/lineitem_v1p0";
59
+ import { ResourceAccessibilityMetadataDocumentSchema } from "./shared/resourcea11ymetadata-20210915";
60
+ import { AssignmentDocumentSchema } from "./extension/cc_extresource_assignmentv1p0_v1p0";
61
+ import { CpxVariantDocumentSchema } from "./extension/ccv1p4_cpextensionv1p2_v1p0";
62
+ import { OpenVideoSessionDocumentSchema } from "./extension/ims_openvideov1p0_v1p0";
63
+ import { ImsMdLooseLomDocumentSchema } from "./vdex/imsmd_loose_v1p3p2";
64
+ import { VdexDocumentSchema } from "./vdex/imsvdex_v1p0";
65
+ import {
66
+ ThinCommonCartridgeManifestProfileDocumentSchema,
67
+ ThinCommonCartridgeManifestRawDocumentSchema,
68
+ } from "./thin/ccv1p4_imscp_v1p2_v1p0";
69
+ import { ThinLomManifestDocumentSchema } from "./thin/ccv1p4_lommanifest_v1p0";
70
+ import { ThinLomResourceDocumentSchema } from "./thin/ccv1p4_lomresource_v1p0";
71
+
72
+ export const CommonCartridgeDerivedZodTemplates = {
73
+ curriculumStandardsMetadataSetDocument: CurriculumStandardsMetadataSetDocumentSchema,
74
+ discussionTopicDocument: DiscussionTopicDocumentSchema,
75
+ webLinkDocument: WebLinkDocumentSchema,
76
+ lomManifestDocument: LomManifestDocumentSchema,
77
+ lomResourceDocument: LomResourceDocumentSchema,
78
+ lomCcLtiLinkDocument: LomCcLtiLinkDocumentSchema,
79
+ commonCartridgeAuthorizationsDocument: CommonCartridgeAuthorizationsDocumentSchema,
80
+ commonCartridgeManifestRawDocument: CommonCartridgeManifestRawDocumentSchema,
81
+ commonCartridgeManifestProfileDocument: CommonCartridgeManifestProfileDocumentSchema,
82
+ thinLomManifestDocument: ThinLomManifestDocumentSchema,
83
+ thinLomResourceDocument: ThinLomResourceDocumentSchema,
84
+ thinCommonCartridgeManifestRawDocument: ThinCommonCartridgeManifestRawDocumentSchema,
85
+ thinCommonCartridgeManifestProfileDocument: ThinCommonCartridgeManifestProfileDocumentSchema,
86
+ k12LomManifestDocument: K12LomManifestDocumentSchema,
87
+ k12LomResourceDocument: K12LomResourceDocumentSchema,
88
+ k12CommonCartridgeManifestRawDocument: K12CommonCartridgeManifestRawDocumentSchema,
89
+ k12CommonCartridgeManifestProfileDocument: K12CommonCartridgeManifestProfileDocumentSchema,
90
+ k12ThinCommonCartridgeManifestRawDocument: K12ThinCommonCartridgeManifestRawDocumentSchema,
91
+ k12ThinCommonCartridgeManifestProfileDocument: K12ThinCommonCartridgeManifestProfileDocumentSchema,
92
+ qtiQuestestinteropRawDocument: QtiQuestestinteropRawDocumentSchema,
93
+ qtiQuestestinteropProfileDocument: QtiQuestestinteropProfileDocumentSchema,
94
+ cartridgeBasicLtiLinkDocument: CartridgeBasicLTILinkDocumentSchema,
95
+ cartridgeToolLocatorDocument: CartridgeToolLocatorDocumentSchema,
96
+ basicLtiLinkDocument: BasicLTILinkDocumentSchema,
97
+ lineItemDocument: LineItemDocumentSchema,
98
+ resourceAccessibilityMetadataDocument: ResourceAccessibilityMetadataDocumentSchema,
99
+ commonCartridgeVariantDocument: CpxVariantDocumentSchema,
100
+ assignmentDocument: AssignmentDocumentSchema,
101
+ openVideoSessionDocument: OpenVideoSessionDocumentSchema,
102
+ imsMdLooseDocument: ImsMdLooseLomDocumentSchema,
103
+ vdexDocument: VdexDocumentSchema,
104
+ } as const;
@@ -0,0 +1,19 @@
1
+ export {
2
+ CommonCartridgeDependencySchema as K12CommonCartridgeDependencySchema,
3
+ CommonCartridgeFileSchema as K12CommonCartridgeFileSchema,
4
+ CommonCartridgeGenericMetadataSchema as K12CommonCartridgeGenericMetadataSchema,
5
+ CommonCartridgeIntendedUseSchema as K12CommonCartridgeIntendedUseSchema,
6
+ CommonCartridgeItemOrgSchema as K12CommonCartridgeItemOrgSchema,
7
+ CommonCartridgeItemSchema as K12CommonCartridgeItemSchema,
8
+ CommonCartridgeManifestProfileDocumentSchema as K12CommonCartridgeManifestProfileDocumentSchema,
9
+ CommonCartridgeManifestProfileSchema as K12CommonCartridgeManifestProfileSchema,
10
+ CommonCartridgeManifestRawDocumentSchema as K12CommonCartridgeManifestRawDocumentSchema,
11
+ CommonCartridgeManifestRawSchema as K12CommonCartridgeManifestRawSchema,
12
+ CommonCartridgeManifestMetadataSchema as K12CommonCartridgeManifestMetadataSchema,
13
+ CommonCartridgeOrganizationSchema as K12CommonCartridgeOrganizationSchema,
14
+ CommonCartridgeOrganizationsSchema as K12CommonCartridgeOrganizationsSchema,
15
+ CommonCartridgeResourceMetadataSchema as K12CommonCartridgeResourceMetadataSchema,
16
+ CommonCartridgeResourceSchema as K12CommonCartridgeResourceSchema,
17
+ CommonCartridgeResourcesSchema as K12CommonCartridgeResourcesSchema,
18
+ CommonCartridgeResourceTypeSchema as K12CommonCartridgeResourceTypeSchema,
19
+ } from "../core/ccv1p4_imscp_v1p2_v1p0";
@@ -0,0 +1,17 @@
1
+ export {
2
+ ThinCommonCartridgeFileSchema as K12ThinCommonCartridgeFileSchema,
3
+ ThinCommonCartridgeIntendedUseSchema as K12ThinCommonCartridgeIntendedUseSchema,
4
+ ThinCommonCartridgeItemOrgSchema as K12ThinCommonCartridgeItemOrgSchema,
5
+ ThinCommonCartridgeItemSchema as K12ThinCommonCartridgeItemSchema,
6
+ ThinCommonCartridgeManifestMetadataSchema as K12ThinCommonCartridgeManifestMetadataSchema,
7
+ ThinCommonCartridgeManifestProfileDocumentSchema as K12ThinCommonCartridgeManifestProfileDocumentSchema,
8
+ ThinCommonCartridgeManifestProfileSchema as K12ThinCommonCartridgeManifestProfileSchema,
9
+ ThinCommonCartridgeManifestRawDocumentSchema as K12ThinCommonCartridgeManifestRawDocumentSchema,
10
+ ThinCommonCartridgeManifestRawSchema as K12ThinCommonCartridgeManifestRawSchema,
11
+ ThinCommonCartridgeOrganizationSchema as K12ThinCommonCartridgeOrganizationSchema,
12
+ ThinCommonCartridgeOrganizationsSchema as K12ThinCommonCartridgeOrganizationsSchema,
13
+ ThinCommonCartridgeResourceMetadataSchema as K12ThinCommonCartridgeResourceMetadataSchema,
14
+ ThinCommonCartridgeResourceSchema as K12ThinCommonCartridgeResourceSchema,
15
+ ThinCommonCartridgeResourcesSchema as K12ThinCommonCartridgeResourcesSchema,
16
+ ThinCommonCartridgeResourceTypeSchema as K12ThinCommonCartridgeResourceTypeSchema,
17
+ } from "../thin/ccv1p4_imscp_v1p2_v1p0";
@@ -0,0 +1,14 @@
1
+ import type { z } from "zod";
2
+ import { strictObject } from "../shared";
3
+ import { LomK12ManifestProfileSchemas } from "../lom-internal";
4
+
5
+ export { LomK12ManifestProfileSchemas } from "../lom-internal";
6
+
7
+ export const K12LomManifestSchema = LomK12ManifestProfileSchemas.LomSchema;
8
+
9
+ export const K12LomManifestDocumentSchema = strictObject({
10
+ lom: K12LomManifestSchema,
11
+ });
12
+ // Inferred types from exported Zod validators.
13
+ export type K12LomManifest = z.infer<typeof K12LomManifestSchema>;
14
+ export type K12LomManifestDocument = z.infer<typeof K12LomManifestDocumentSchema>;
@@ -0,0 +1,14 @@
1
+ import type { z } from "zod";
2
+ import { strictObject } from "../shared";
3
+ import { LomK12ResourceProfileSchemas } from "../lom-internal";
4
+
5
+ export { LomK12ResourceProfileSchemas } from "../lom-internal";
6
+
7
+ export const K12LomResourceSchema = LomK12ResourceProfileSchemas.LomSchema;
8
+
9
+ export const K12LomResourceDocumentSchema = strictObject({
10
+ lom: K12LomResourceSchema,
11
+ });
12
+ // Inferred types from exported Zod validators.
13
+ export type K12LomResource = z.infer<typeof K12LomResourceSchema>;
14
+ export type K12LomResourceDocument = z.infer<typeof K12LomResourceDocumentSchema>;