@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,427 @@
1
+ import { z } from "zod";
2
+
3
+ import { strictObject } from "./shared";
4
+
5
+ const CsvStringSchema = z.string();
6
+ const OptionalCsvStringSchema = z.string().optional();
7
+
8
+ const ManifestCsvRowBaseSchema = strictObject({
9
+ "manifest.version": CsvStringSchema,
10
+ "oneroster.version": CsvStringSchema,
11
+ "file.academicSessions": CsvStringSchema,
12
+ "file.categories": CsvStringSchema,
13
+ "file.classes": CsvStringSchema,
14
+ "file.classResources": CsvStringSchema,
15
+ "file.courses": CsvStringSchema,
16
+ "file.courseResources": CsvStringSchema,
17
+ "file.demographics": CsvStringSchema,
18
+ "file.enrollments": CsvStringSchema,
19
+ "file.lineItems": CsvStringSchema,
20
+ "file.orgs": CsvStringSchema,
21
+ "file.resources": CsvStringSchema,
22
+ "file.results": CsvStringSchema,
23
+ "file.users": CsvStringSchema,
24
+ "file.lineItemLearningObjectiveIds": OptionalCsvStringSchema,
25
+ "file.lineItemLearningObjectiveIds*": OptionalCsvStringSchema,
26
+ "file.lineItemScoreScales": OptionalCsvStringSchema,
27
+ "file.lineItemScoreScales*": OptionalCsvStringSchema,
28
+ "file.resultLearningObjectiveIds": OptionalCsvStringSchema,
29
+ "file.resultLearningObjectiveIds*": OptionalCsvStringSchema,
30
+ "file.resultScoreScales": OptionalCsvStringSchema,
31
+ "file.resultScoreScales*": OptionalCsvStringSchema,
32
+ "file.roles": OptionalCsvStringSchema,
33
+ "file.roles*": OptionalCsvStringSchema,
34
+ "file.scoreScales": OptionalCsvStringSchema,
35
+ "file.scoreScales*": OptionalCsvStringSchema,
36
+ "file.userProfiles": OptionalCsvStringSchema,
37
+ "file.userProfiles*": OptionalCsvStringSchema,
38
+ "file.userResources": OptionalCsvStringSchema,
39
+ "file.userResources*": OptionalCsvStringSchema,
40
+ "source.systemName": OptionalCsvStringSchema,
41
+ "source.systemCode": OptionalCsvStringSchema,
42
+ });
43
+
44
+ const STAR_MANIFEST_KEYS = [
45
+ ["file.lineItemLearningObjectiveIds", "file.lineItemLearningObjectiveIds*"],
46
+ ["file.lineItemScoreScales", "file.lineItemScoreScales*"],
47
+ ["file.resultLearningObjectiveIds", "file.resultLearningObjectiveIds*"],
48
+ ["file.resultScoreScales", "file.resultScoreScales*"],
49
+ ["file.roles", "file.roles*"],
50
+ ["file.scoreScales", "file.scoreScales*"],
51
+ ["file.userProfiles", "file.userProfiles*"],
52
+ ["file.userResources", "file.userResources*"],
53
+ ] as const;
54
+
55
+ export const ManifestCsvRowSchema = ManifestCsvRowBaseSchema.superRefine((value, ctx) => {
56
+ for (const [plainKey, starredKey] of STAR_MANIFEST_KEYS) {
57
+ if (value[plainKey] === undefined && value[starredKey] === undefined) {
58
+ ctx.addIssue({
59
+ code: "custom",
60
+ path: [plainKey],
61
+ message: `Expected either '${plainKey}' or '${starredKey}' column in manifest row`,
62
+ });
63
+ }
64
+ }
65
+ });
66
+
67
+ export const AcademicSessionsCsvRowSchema = strictObject({
68
+ sourcedId: CsvStringSchema,
69
+ status: CsvStringSchema,
70
+ dateLastModified: CsvStringSchema,
71
+ title: CsvStringSchema,
72
+ type: CsvStringSchema,
73
+ startDate: CsvStringSchema,
74
+ endDate: CsvStringSchema,
75
+ parentSourcedId: OptionalCsvStringSchema,
76
+ schoolYear: CsvStringSchema,
77
+ });
78
+
79
+ export const CategoriesCsvRowSchema = strictObject({
80
+ sourcedId: CsvStringSchema,
81
+ status: CsvStringSchema,
82
+ dateLastModified: CsvStringSchema,
83
+ title: CsvStringSchema,
84
+ weight: OptionalCsvStringSchema,
85
+ });
86
+
87
+ export const ClassesCsvRowSchema = strictObject({
88
+ sourcedId: CsvStringSchema,
89
+ status: CsvStringSchema,
90
+ dateLastModified: CsvStringSchema,
91
+ title: CsvStringSchema,
92
+ grades: OptionalCsvStringSchema,
93
+ courseSourcedId: CsvStringSchema,
94
+ classCode: OptionalCsvStringSchema,
95
+ classType: CsvStringSchema,
96
+ location: OptionalCsvStringSchema,
97
+ schoolSourcedId: CsvStringSchema,
98
+ termSourcedIds: CsvStringSchema,
99
+ subjects: OptionalCsvStringSchema,
100
+ subjectCodes: OptionalCsvStringSchema,
101
+ periods: OptionalCsvStringSchema,
102
+ });
103
+
104
+ export const ClassResourcesCsvRowSchema = strictObject({
105
+ sourcedId: CsvStringSchema,
106
+ status: CsvStringSchema,
107
+ dateLastModified: CsvStringSchema,
108
+ title: OptionalCsvStringSchema,
109
+ classSourcedId: CsvStringSchema,
110
+ resourceSourcedId: CsvStringSchema,
111
+ });
112
+
113
+ export const CourseResourcesCsvRowSchema = strictObject({
114
+ sourcedId: CsvStringSchema,
115
+ status: CsvStringSchema,
116
+ dateLastModified: CsvStringSchema,
117
+ title: OptionalCsvStringSchema,
118
+ courseSourcedId: CsvStringSchema,
119
+ resourceSourcedId: CsvStringSchema,
120
+ });
121
+
122
+ export const CoursesCsvRowSchema = strictObject({
123
+ sourcedId: CsvStringSchema,
124
+ status: CsvStringSchema,
125
+ dateLastModified: CsvStringSchema,
126
+ schoolYearSourcedId: OptionalCsvStringSchema,
127
+ title: CsvStringSchema,
128
+ courseCode: OptionalCsvStringSchema,
129
+ grades: OptionalCsvStringSchema,
130
+ orgSourcedId: CsvStringSchema,
131
+ subjects: OptionalCsvStringSchema,
132
+ subjectCodes: OptionalCsvStringSchema,
133
+ });
134
+
135
+ export const DemographicsCsvRowSchema = strictObject({
136
+ sourcedId: CsvStringSchema,
137
+ status: CsvStringSchema,
138
+ dateLastModified: CsvStringSchema,
139
+ birthDate: OptionalCsvStringSchema,
140
+ sex: OptionalCsvStringSchema,
141
+ americanIndianOrAlaskaNative: OptionalCsvStringSchema,
142
+ asian: OptionalCsvStringSchema,
143
+ blackOrAfricanAmerican: OptionalCsvStringSchema,
144
+ nativeHawaiianOrOtherPacificIslander: OptionalCsvStringSchema,
145
+ white: OptionalCsvStringSchema,
146
+ demographicRaceTwoOrMoreRaces: OptionalCsvStringSchema,
147
+ hispanicOrLatinoEthnicity: OptionalCsvStringSchema,
148
+ countryOfBirthCode: OptionalCsvStringSchema,
149
+ stateOfBirthAbbreviation: OptionalCsvStringSchema,
150
+ cityOfBirth: OptionalCsvStringSchema,
151
+ publicSchoolResidenceStatus: OptionalCsvStringSchema,
152
+ });
153
+
154
+ export const EnrollmentsCsvRowSchema = strictObject({
155
+ sourcedId: CsvStringSchema,
156
+ status: CsvStringSchema,
157
+ dateLastModified: CsvStringSchema,
158
+ classSourcedId: CsvStringSchema,
159
+ schoolSourcedId: CsvStringSchema,
160
+ userSourcedId: CsvStringSchema,
161
+ role: CsvStringSchema,
162
+ primary: OptionalCsvStringSchema,
163
+ beginDate: OptionalCsvStringSchema,
164
+ endDate: OptionalCsvStringSchema,
165
+ });
166
+
167
+ export const LineItemLearningObjectiveIdsCsvRowSchema = strictObject({
168
+ sourcedId: CsvStringSchema,
169
+ status: CsvStringSchema,
170
+ dateLastModified: CsvStringSchema,
171
+ lineItemSourcedId: CsvStringSchema,
172
+ source: CsvStringSchema,
173
+ learningObjectiveId: CsvStringSchema,
174
+ });
175
+
176
+ export const LineItemsCsvRowSchema = strictObject({
177
+ sourcedId: CsvStringSchema,
178
+ status: CsvStringSchema,
179
+ dateLastModified: CsvStringSchema,
180
+ title: CsvStringSchema,
181
+ description: OptionalCsvStringSchema,
182
+ assignDate: CsvStringSchema,
183
+ dueDate: CsvStringSchema,
184
+ classSourcedId: CsvStringSchema,
185
+ categorySourcedId: CsvStringSchema,
186
+ academicSessionSourcedId: CsvStringSchema,
187
+ resultValueMin: OptionalCsvStringSchema,
188
+ resultValueMax: OptionalCsvStringSchema,
189
+ schoolSourcedId: CsvStringSchema,
190
+ });
191
+
192
+ export const LineItemScoreScalesCsvRowSchema = strictObject({
193
+ sourcedId: CsvStringSchema,
194
+ status: CsvStringSchema,
195
+ dateLastModified: CsvStringSchema,
196
+ title: OptionalCsvStringSchema,
197
+ lineItemSourcedId: CsvStringSchema,
198
+ scoreScaleSourcedId: CsvStringSchema,
199
+ });
200
+
201
+ export const OrgsCsvRowSchema = strictObject({
202
+ sourcedId: CsvStringSchema,
203
+ status: CsvStringSchema,
204
+ dateLastModified: CsvStringSchema,
205
+ name: CsvStringSchema,
206
+ type: CsvStringSchema,
207
+ identifier: OptionalCsvStringSchema,
208
+ parentSourcedId: OptionalCsvStringSchema,
209
+ });
210
+
211
+ export const ResourcesCsvRowSchema = strictObject({
212
+ sourcedId: CsvStringSchema,
213
+ status: CsvStringSchema,
214
+ dateLastModified: CsvStringSchema,
215
+ vendorResourceId: CsvStringSchema,
216
+ title: OptionalCsvStringSchema,
217
+ roles: OptionalCsvStringSchema,
218
+ importance: OptionalCsvStringSchema,
219
+ vendorId: OptionalCsvStringSchema,
220
+ applicationId: OptionalCsvStringSchema,
221
+ });
222
+
223
+ export const ResultLearningObjectiveIdsCsvRowSchema = strictObject({
224
+ sourcedId: CsvStringSchema,
225
+ status: CsvStringSchema,
226
+ dateLastModified: CsvStringSchema,
227
+ resultSourcedId: CsvStringSchema,
228
+ source: CsvStringSchema,
229
+ learningObjectiveId: CsvStringSchema,
230
+ score: OptionalCsvStringSchema,
231
+ textScore: OptionalCsvStringSchema,
232
+ });
233
+
234
+ export const ResultsCsvRowSchema = strictObject({
235
+ sourcedId: CsvStringSchema,
236
+ status: CsvStringSchema,
237
+ dateLastModified: CsvStringSchema,
238
+ lineItemSourcedId: CsvStringSchema,
239
+ studentSourcedId: CsvStringSchema,
240
+ scoreStatus: CsvStringSchema,
241
+ score: OptionalCsvStringSchema,
242
+ scoreDate: CsvStringSchema,
243
+ comment: OptionalCsvStringSchema,
244
+ textScore: OptionalCsvStringSchema,
245
+ classSourcedId: OptionalCsvStringSchema,
246
+ inProgress: OptionalCsvStringSchema,
247
+ incomplete: OptionalCsvStringSchema,
248
+ late: OptionalCsvStringSchema,
249
+ missing: OptionalCsvStringSchema,
250
+ });
251
+
252
+ export const ResultScoreScalesCsvRowSchema = strictObject({
253
+ sourcedId: CsvStringSchema,
254
+ status: CsvStringSchema,
255
+ dateLastModified: CsvStringSchema,
256
+ title: OptionalCsvStringSchema,
257
+ resultSourcedId: CsvStringSchema,
258
+ scoreScaleSourcedId: CsvStringSchema,
259
+ });
260
+
261
+ export const RolesCsvRowSchema = strictObject({
262
+ sourcedId: CsvStringSchema,
263
+ status: CsvStringSchema,
264
+ dateLastModified: CsvStringSchema,
265
+ userSourcedId: CsvStringSchema,
266
+ roleType: CsvStringSchema,
267
+ role: CsvStringSchema,
268
+ beginDate: OptionalCsvStringSchema,
269
+ endDate: OptionalCsvStringSchema,
270
+ orgSourcedId: CsvStringSchema,
271
+ userProfileSourcedId: OptionalCsvStringSchema,
272
+ });
273
+
274
+ export const ScoreScalesCsvRowSchema = strictObject({
275
+ sourcedId: CsvStringSchema,
276
+ status: CsvStringSchema,
277
+ dateLastModified: CsvStringSchema,
278
+ title: CsvStringSchema,
279
+ type: CsvStringSchema,
280
+ orgSourcedId: CsvStringSchema,
281
+ courseSourcedId: CsvStringSchema,
282
+ classSourcedId: CsvStringSchema,
283
+ scoreScaleValue: CsvStringSchema,
284
+ });
285
+
286
+ export const UserProfilesCsvRowSchema = strictObject({
287
+ sourcedId: CsvStringSchema,
288
+ status: CsvStringSchema,
289
+ dateLastModified: CsvStringSchema,
290
+ userSourcedId: CsvStringSchema,
291
+ profileType: CsvStringSchema,
292
+ vendorId: CsvStringSchema,
293
+ applicationId: OptionalCsvStringSchema,
294
+ description: OptionalCsvStringSchema,
295
+ credentialType: CsvStringSchema,
296
+ username: CsvStringSchema,
297
+ password: OptionalCsvStringSchema,
298
+ });
299
+
300
+ export const UserResourcesCsvRowSchema = strictObject({
301
+ sourcedId: CsvStringSchema,
302
+ status: CsvStringSchema,
303
+ dateLastModified: CsvStringSchema,
304
+ userSourcedId: CsvStringSchema,
305
+ orgSourcedId: OptionalCsvStringSchema,
306
+ classSourcedId: OptionalCsvStringSchema,
307
+ resourceSourcedId: CsvStringSchema,
308
+ });
309
+
310
+ export const UsersCsvRowSchema = strictObject({
311
+ sourcedId: CsvStringSchema,
312
+ status: CsvStringSchema,
313
+ dateLastModified: CsvStringSchema,
314
+ enabledUser: CsvStringSchema,
315
+ username: CsvStringSchema,
316
+ userIds: OptionalCsvStringSchema,
317
+ givenName: CsvStringSchema,
318
+ familyName: CsvStringSchema,
319
+ middleName: OptionalCsvStringSchema,
320
+ identifier: OptionalCsvStringSchema,
321
+ email: OptionalCsvStringSchema,
322
+ sms: OptionalCsvStringSchema,
323
+ phone: OptionalCsvStringSchema,
324
+ agentSourcedIds: OptionalCsvStringSchema,
325
+ grades: OptionalCsvStringSchema,
326
+ password: OptionalCsvStringSchema,
327
+ userMasterIdentifier: OptionalCsvStringSchema,
328
+ preferredGivenName: OptionalCsvStringSchema,
329
+ preferredMiddleName: OptionalCsvStringSchema,
330
+ preferredFamilyName: OptionalCsvStringSchema,
331
+ primaryOrgSourcedId: OptionalCsvStringSchema,
332
+ pronouns: OptionalCsvStringSchema,
333
+ });
334
+
335
+ export const ManifestCsvDocumentSchema = z.array(ManifestCsvRowSchema);
336
+ export const AcademicSessionsCsvDocumentSchema = z.array(AcademicSessionsCsvRowSchema);
337
+ export const CategoriesCsvDocumentSchema = z.array(CategoriesCsvRowSchema);
338
+ export const ClassesCsvDocumentSchema = z.array(ClassesCsvRowSchema);
339
+ export const ClassResourcesCsvDocumentSchema = z.array(ClassResourcesCsvRowSchema);
340
+ export const CourseResourcesCsvDocumentSchema = z.array(CourseResourcesCsvRowSchema);
341
+ export const CoursesCsvDocumentSchema = z.array(CoursesCsvRowSchema);
342
+ export const DemographicsCsvDocumentSchema = z.array(DemographicsCsvRowSchema);
343
+ export const EnrollmentsCsvDocumentSchema = z.array(EnrollmentsCsvRowSchema);
344
+ export const LineItemLearningObjectiveIdsCsvDocumentSchema = z.array(LineItemLearningObjectiveIdsCsvRowSchema);
345
+ export const LineItemsCsvDocumentSchema = z.array(LineItemsCsvRowSchema);
346
+ export const LineItemScoreScalesCsvDocumentSchema = z.array(LineItemScoreScalesCsvRowSchema);
347
+ export const OrgsCsvDocumentSchema = z.array(OrgsCsvRowSchema);
348
+ export const ResourcesCsvDocumentSchema = z.array(ResourcesCsvRowSchema);
349
+ export const ResultLearningObjectiveIdsCsvDocumentSchema = z.array(ResultLearningObjectiveIdsCsvRowSchema);
350
+ export const ResultsCsvDocumentSchema = z.array(ResultsCsvRowSchema);
351
+ export const ResultScoreScalesCsvDocumentSchema = z.array(ResultScoreScalesCsvRowSchema);
352
+ export const RolesCsvDocumentSchema = z.array(RolesCsvRowSchema);
353
+ export const ScoreScalesCsvDocumentSchema = z.array(ScoreScalesCsvRowSchema);
354
+ export const UserProfilesCsvDocumentSchema = z.array(UserProfilesCsvRowSchema);
355
+ export const UserResourcesCsvDocumentSchema = z.array(UserResourcesCsvRowSchema);
356
+ export const UsersCsvDocumentSchema = z.array(UsersCsvRowSchema);
357
+
358
+ export const OneRosterCsvBindingPackageSchema = strictObject({
359
+ manifest: ManifestCsvDocumentSchema,
360
+ academicSessions: AcademicSessionsCsvDocumentSchema.optional(),
361
+ categories: CategoriesCsvDocumentSchema.optional(),
362
+ classes: ClassesCsvDocumentSchema.optional(),
363
+ classResources: ClassResourcesCsvDocumentSchema.optional(),
364
+ courseResources: CourseResourcesCsvDocumentSchema.optional(),
365
+ courses: CoursesCsvDocumentSchema.optional(),
366
+ demographics: DemographicsCsvDocumentSchema.optional(),
367
+ enrollments: EnrollmentsCsvDocumentSchema.optional(),
368
+ lineItemLearningObjectiveIds: LineItemLearningObjectiveIdsCsvDocumentSchema.optional(),
369
+ lineItems: LineItemsCsvDocumentSchema.optional(),
370
+ lineItemScoreScales: LineItemScoreScalesCsvDocumentSchema.optional(),
371
+ orgs: OrgsCsvDocumentSchema.optional(),
372
+ resources: ResourcesCsvDocumentSchema.optional(),
373
+ resultLearningObjectiveIds: ResultLearningObjectiveIdsCsvDocumentSchema.optional(),
374
+ results: ResultsCsvDocumentSchema.optional(),
375
+ resultScoreScales: ResultScoreScalesCsvDocumentSchema.optional(),
376
+ roles: RolesCsvDocumentSchema.optional(),
377
+ scoreScales: ScoreScalesCsvDocumentSchema.optional(),
378
+ userProfiles: UserProfilesCsvDocumentSchema.optional(),
379
+ userResources: UserResourcesCsvDocumentSchema.optional(),
380
+ users: UsersCsvDocumentSchema.optional(),
381
+ });
382
+ // Inferred types from exported Zod validators.
383
+ export type ManifestCsvRow = z.infer<typeof ManifestCsvRowSchema>;
384
+ export type AcademicSessionsCsvRow = z.infer<typeof AcademicSessionsCsvRowSchema>;
385
+ export type CategoriesCsvRow = z.infer<typeof CategoriesCsvRowSchema>;
386
+ export type ClassesCsvRow = z.infer<typeof ClassesCsvRowSchema>;
387
+ export type ClassResourcesCsvRow = z.infer<typeof ClassResourcesCsvRowSchema>;
388
+ export type CourseResourcesCsvRow = z.infer<typeof CourseResourcesCsvRowSchema>;
389
+ export type CoursesCsvRow = z.infer<typeof CoursesCsvRowSchema>;
390
+ export type DemographicsCsvRow = z.infer<typeof DemographicsCsvRowSchema>;
391
+ export type EnrollmentsCsvRow = z.infer<typeof EnrollmentsCsvRowSchema>;
392
+ export type LineItemLearningObjectiveIdsCsvRow = z.infer<typeof LineItemLearningObjectiveIdsCsvRowSchema>;
393
+ export type LineItemsCsvRow = z.infer<typeof LineItemsCsvRowSchema>;
394
+ export type LineItemScoreScalesCsvRow = z.infer<typeof LineItemScoreScalesCsvRowSchema>;
395
+ export type OrgsCsvRow = z.infer<typeof OrgsCsvRowSchema>;
396
+ export type ResourcesCsvRow = z.infer<typeof ResourcesCsvRowSchema>;
397
+ export type ResultLearningObjectiveIdsCsvRow = z.infer<typeof ResultLearningObjectiveIdsCsvRowSchema>;
398
+ export type ResultsCsvRow = z.infer<typeof ResultsCsvRowSchema>;
399
+ export type ResultScoreScalesCsvRow = z.infer<typeof ResultScoreScalesCsvRowSchema>;
400
+ export type RolesCsvRow = z.infer<typeof RolesCsvRowSchema>;
401
+ export type ScoreScalesCsvRow = z.infer<typeof ScoreScalesCsvRowSchema>;
402
+ export type UserProfilesCsvRow = z.infer<typeof UserProfilesCsvRowSchema>;
403
+ export type UserResourcesCsvRow = z.infer<typeof UserResourcesCsvRowSchema>;
404
+ export type UsersCsvRow = z.infer<typeof UsersCsvRowSchema>;
405
+ export type ManifestCsvDocument = z.infer<typeof ManifestCsvDocumentSchema>;
406
+ export type AcademicSessionsCsvDocument = z.infer<typeof AcademicSessionsCsvDocumentSchema>;
407
+ export type CategoriesCsvDocument = z.infer<typeof CategoriesCsvDocumentSchema>;
408
+ export type ClassesCsvDocument = z.infer<typeof ClassesCsvDocumentSchema>;
409
+ export type ClassResourcesCsvDocument = z.infer<typeof ClassResourcesCsvDocumentSchema>;
410
+ export type CourseResourcesCsvDocument = z.infer<typeof CourseResourcesCsvDocumentSchema>;
411
+ export type CoursesCsvDocument = z.infer<typeof CoursesCsvDocumentSchema>;
412
+ export type DemographicsCsvDocument = z.infer<typeof DemographicsCsvDocumentSchema>;
413
+ export type EnrollmentsCsvDocument = z.infer<typeof EnrollmentsCsvDocumentSchema>;
414
+ export type LineItemLearningObjectiveIdsCsvDocument = z.infer<typeof LineItemLearningObjectiveIdsCsvDocumentSchema>;
415
+ export type LineItemsCsvDocument = z.infer<typeof LineItemsCsvDocumentSchema>;
416
+ export type LineItemScoreScalesCsvDocument = z.infer<typeof LineItemScoreScalesCsvDocumentSchema>;
417
+ export type OrgsCsvDocument = z.infer<typeof OrgsCsvDocumentSchema>;
418
+ export type ResourcesCsvDocument = z.infer<typeof ResourcesCsvDocumentSchema>;
419
+ export type ResultLearningObjectiveIdsCsvDocument = z.infer<typeof ResultLearningObjectiveIdsCsvDocumentSchema>;
420
+ export type ResultsCsvDocument = z.infer<typeof ResultsCsvDocumentSchema>;
421
+ export type ResultScoreScalesCsvDocument = z.infer<typeof ResultScoreScalesCsvDocumentSchema>;
422
+ export type RolesCsvDocument = z.infer<typeof RolesCsvDocumentSchema>;
423
+ export type ScoreScalesCsvDocument = z.infer<typeof ScoreScalesCsvDocumentSchema>;
424
+ export type UserProfilesCsvDocument = z.infer<typeof UserProfilesCsvDocumentSchema>;
425
+ export type UserResourcesCsvDocument = z.infer<typeof UserResourcesCsvDocumentSchema>;
426
+ export type UsersCsvDocument = z.infer<typeof UsersCsvDocumentSchema>;
427
+ export type OneRosterCsvBindingPackage = z.infer<typeof OneRosterCsvBindingPackageSchema>;
@@ -0,0 +1,120 @@
1
+ import { z } from "zod";
2
+
3
+ import {
4
+ AssessmentLineItemSetSchema,
5
+ AssessmentResultSetSchema,
6
+ CategorySetSchema,
7
+ GuidPairSetSchema,
8
+ LineItemSetSchema,
9
+ ResultSetSchema,
10
+ ScoreScaleSetSchema,
11
+ SingleAssessmentLineItemSchema,
12
+ SingleAssessmentResultSchema,
13
+ SingleCategorySchema,
14
+ SingleLineItemSchema,
15
+ SingleResultSchema,
16
+ SingleScoreScaleSchema,
17
+ } from "./or_v1p2_gradebook_service_schema";
18
+ import { ImsxStatusInfoSchema } from "./shared";
19
+
20
+ const EmptyPayloadSchema = z.undefined();
21
+
22
+ function gradebookGetOperation(path: string, successResponsePayload: z.ZodTypeAny) {
23
+ return {
24
+ method: "GET",
25
+ path,
26
+ requestPayload: EmptyPayloadSchema,
27
+ successResponsePayload,
28
+ errorResponsePayload: ImsxStatusInfoSchema,
29
+ } as const;
30
+ }
31
+
32
+ function gradebookPostOperation(path: string, requestPayload: z.ZodTypeAny, successResponsePayload: z.ZodTypeAny) {
33
+ return {
34
+ method: "POST",
35
+ path,
36
+ requestPayload,
37
+ successResponsePayload,
38
+ errorResponsePayload: ImsxStatusInfoSchema,
39
+ } as const;
40
+ }
41
+
42
+ function gradebookPutOperation(path: string, requestPayload: z.ZodTypeAny) {
43
+ return {
44
+ method: "PUT",
45
+ path,
46
+ requestPayload,
47
+ successResponsePayload: EmptyPayloadSchema,
48
+ errorResponsePayload: ImsxStatusInfoSchema,
49
+ } as const;
50
+ }
51
+
52
+ function gradebookDeleteOperation(path: string) {
53
+ return {
54
+ method: "DELETE",
55
+ path,
56
+ requestPayload: EmptyPayloadSchema,
57
+ successResponsePayload: EmptyPayloadSchema,
58
+ errorResponsePayload: ImsxStatusInfoSchema,
59
+ } as const;
60
+ }
61
+
62
+ export const GradebookRestBindingOperationSchemas = {
63
+ getAllAssessmentLineItems: gradebookGetOperation("/assessmentLineItems", AssessmentLineItemSetSchema),
64
+ getAssessmentLineItem: gradebookGetOperation("/assessmentLineItems/{sourcedId}", SingleAssessmentLineItemSchema),
65
+ deleteAssessmentLineItem: gradebookDeleteOperation("/assessmentLineItems/{sourcedId}"),
66
+ putAssessmentLineItem: gradebookPutOperation("/assessmentLineItems/{sourcedId}", SingleAssessmentLineItemSchema),
67
+ getAllAssessmentResults: gradebookGetOperation("/assessmentResults", AssessmentResultSetSchema),
68
+ getAssessmentResult: gradebookGetOperation("/assessmentResults/{sourcedId}", SingleAssessmentResultSchema),
69
+ deleteAssessmentResult: gradebookDeleteOperation("/assessmentResults/{sourcedId}"),
70
+ putAssessmentResult: gradebookPutOperation("/assessmentResults/{sourcedId}", SingleAssessmentResultSchema),
71
+ getAllCategories: gradebookGetOperation("/categories", CategorySetSchema),
72
+ getCategory: gradebookGetOperation("/categories/{sourcedId}", SingleCategorySchema),
73
+ deleteCategory: gradebookDeleteOperation("/categories/{sourcedId}"),
74
+ putCategory: gradebookPutOperation("/categories/{sourcedId}", SingleCategorySchema),
75
+ postResultsForAcademicSessionForClass: gradebookPostOperation(
76
+ "/classes/{classSourcedId}/academicSessions/{academicSessionSourcedId}/results",
77
+ ResultSetSchema,
78
+ GuidPairSetSchema,
79
+ ),
80
+ getCategoriesForClass: gradebookGetOperation("/classes/{classSourcedId}/categories", CategorySetSchema),
81
+ getLineItemsForClass: gradebookGetOperation("/classes/{classSourcedId}/lineItems", LineItemSetSchema),
82
+ postLineItemsForClass: gradebookPostOperation(
83
+ "/classes/{classSourcedId}/lineItems",
84
+ LineItemSetSchema,
85
+ GuidPairSetSchema,
86
+ ),
87
+ getResultsForLineItemForClass: gradebookGetOperation(
88
+ "/classes/{classSourcedId}/lineItems/{lineItemSourcedId}/results",
89
+ ResultSetSchema,
90
+ ),
91
+ getResultsForClass: gradebookGetOperation("/classes/{classSourcedId}/results", ResultSetSchema),
92
+ getScoreScalesForClass: gradebookGetOperation("/classes/{classSourcedId}/scoreScales", ScoreScaleSetSchema),
93
+ getResultsForStudentForClass: gradebookGetOperation(
94
+ "/classes/{classSourcedId}/students/{studentSourcedId}/results",
95
+ ResultSetSchema,
96
+ ),
97
+ getAllLineItems: gradebookGetOperation("/lineItems", LineItemSetSchema),
98
+ postResultsForLineItem: gradebookPostOperation(
99
+ "/lineItems/{lineItemSourcedId}/results",
100
+ ResultSetSchema,
101
+ GuidPairSetSchema,
102
+ ),
103
+ getLineItem: gradebookGetOperation("/lineItems/{sourcedId}", SingleLineItemSchema),
104
+ deleteLineItem: gradebookDeleteOperation("/lineItems/{sourcedId}"),
105
+ putLineItem: gradebookPutOperation("/lineItems/{sourcedId}", SingleLineItemSchema),
106
+ getAllResults: gradebookGetOperation("/results", ResultSetSchema),
107
+ getResult: gradebookGetOperation("/results/{sourcedId}", SingleResultSchema),
108
+ deleteResult: gradebookDeleteOperation("/results/{sourcedId}"),
109
+ putResult: gradebookPutOperation("/results/{sourcedId}", SingleResultSchema),
110
+ postLineItemsForSchool: gradebookPostOperation(
111
+ "/schools/{schoolSourcedId}/lineItems",
112
+ LineItemSetSchema,
113
+ GuidPairSetSchema,
114
+ ),
115
+ getScoreScalesForSchool: gradebookGetOperation("/schools/{schoolSourcedId}/scoreScales", ScoreScaleSetSchema),
116
+ getAllScoreScales: gradebookGetOperation("/scoreScales", ScoreScaleSetSchema),
117
+ getScoreScale: gradebookGetOperation("/scoreScales/{sourcedId}", SingleScoreScaleSchema),
118
+ deleteScoreScale: gradebookDeleteOperation("/scoreScales/{sourcedId}"),
119
+ putScoreScale: gradebookPutOperation("/scoreScales/{sourcedId}", SingleScoreScaleSchema),
120
+ } as const;