@nakafa/aksara-contracts 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/LICENSE +185 -0
  2. package/README.md +73 -0
  3. package/dist/artifact/integrity.d.ts +29 -0
  4. package/dist/artifact/integrity.js +54 -0
  5. package/dist/artifact/limits.d.ts +26 -0
  6. package/dist/artifact/limits.js +46 -0
  7. package/dist/artifact/source.d.ts +21 -0
  8. package/dist/artifact/source.js +24 -0
  9. package/dist/artifact/spec.d.ts +148 -0
  10. package/dist/artifact/spec.js +92 -0
  11. package/dist/artifact/verify.d.ts +26 -0
  12. package/dist/artifact/verify.js +18 -0
  13. package/dist/cache/content.d.ts +52 -0
  14. package/dist/cache/content.js +80 -0
  15. package/dist/content.d.ts +168 -0
  16. package/dist/content.js +107 -0
  17. package/dist/country.d.ts +4 -0
  18. package/dist/country.js +8 -0
  19. package/dist/date.d.ts +24 -0
  20. package/dist/date.js +44 -0
  21. package/dist/decode.d.ts +4 -0
  22. package/dist/decode.js +8 -0
  23. package/dist/delivery.d.ts +4 -0
  24. package/dist/delivery.js +7 -0
  25. package/dist/errors.d.ts +10 -0
  26. package/dist/errors.js +8 -0
  27. package/dist/graph/family.d.ts +45 -0
  28. package/dist/graph/family.js +85 -0
  29. package/dist/graph/identity.d.ts +19 -0
  30. package/dist/graph/identity.js +39 -0
  31. package/dist/graph/spec.d.ts +20 -0
  32. package/dist/graph/spec.js +26 -0
  33. package/dist/hash/text.d.ts +10 -0
  34. package/dist/hash/text.js +20 -0
  35. package/dist/ids.d.ts +27 -0
  36. package/dist/ids.js +63 -0
  37. package/dist/limits.d.ts +10 -0
  38. package/dist/limits.js +10 -0
  39. package/dist/locale.d.ts +37 -0
  40. package/dist/locale.js +53 -0
  41. package/dist/material/domain.d.ts +4 -0
  42. package/dist/material/domain.js +8 -0
  43. package/dist/preview/artifact.d.ts +198 -0
  44. package/dist/preview/artifact.js +20 -0
  45. package/dist/preview/auth.d.ts +71 -0
  46. package/dist/preview/auth.js +49 -0
  47. package/dist/preview/document.d.ts +692 -0
  48. package/dist/preview/document.js +90 -0
  49. package/dist/preview/spec.d.ts +2517 -0
  50. package/dist/preview/spec.js +142 -0
  51. package/dist/preview/target.d.ts +172 -0
  52. package/dist/preview/target.js +70 -0
  53. package/dist/program/curriculum.d.ts +69 -0
  54. package/dist/program/curriculum.js +181 -0
  55. package/dist/program/snapshot/digest.d.ts +26 -0
  56. package/dist/program/snapshot/digest.js +220 -0
  57. package/dist/program/snapshot/hash.d.ts +31 -0
  58. package/dist/program/snapshot/hash.js +40 -0
  59. package/dist/program/snapshot/row-hash.d.ts +155 -0
  60. package/dist/program/snapshot/row-hash.js +34 -0
  61. package/dist/program/snapshot/row.d.ts +139 -0
  62. package/dist/program/snapshot/row.js +28 -0
  63. package/dist/program/snapshot/spec.d.ts +36 -0
  64. package/dist/program/snapshot/spec.js +39 -0
  65. package/dist/program/spec.d.ts +85 -0
  66. package/dist/program/spec.js +197 -0
  67. package/dist/projection/article.d.ts +145 -0
  68. package/dist/projection/article.js +150 -0
  69. package/dist/projection/digest.d.ts +261 -0
  70. package/dist/projection/digest.js +59 -0
  71. package/dist/projection/hash.d.ts +3 -0
  72. package/dist/projection/hash.js +10 -0
  73. package/dist/projection/material.d.ts +109 -0
  74. package/dist/projection/material.js +160 -0
  75. package/dist/projection/page.d.ts +112 -0
  76. package/dist/projection/page.js +106 -0
  77. package/dist/projection/question.d.ts +520 -0
  78. package/dist/projection/question.js +109 -0
  79. package/dist/projection/spec.d.ts +503 -0
  80. package/dist/projection/spec.js +56 -0
  81. package/dist/projection/verify.d.ts +281 -0
  82. package/dist/projection/verify.js +86 -0
  83. package/dist/question/identity.d.ts +175 -0
  84. package/dist/question/identity.js +205 -0
  85. package/dist/question/item.d.ts +453 -0
  86. package/dist/question/item.js +146 -0
  87. package/dist/question/response.d.ts +175 -0
  88. package/dist/question/response.js +150 -0
  89. package/dist/quran/attribution.d.ts +48 -0
  90. package/dist/quran/attribution.js +44 -0
  91. package/dist/quran/identity.d.ts +105 -0
  92. package/dist/quran/identity.js +100 -0
  93. package/dist/quran/notes.d.ts +56 -0
  94. package/dist/quran/notes.js +142 -0
  95. package/dist/quran/provenance.d.ts +257 -0
  96. package/dist/quran/provenance.js +144 -0
  97. package/dist/quran/snapshot/digest.d.ts +33 -0
  98. package/dist/quran/snapshot/digest.js +232 -0
  99. package/dist/quran/snapshot/hash.d.ts +51 -0
  100. package/dist/quran/snapshot/hash.js +50 -0
  101. package/dist/quran/snapshot/row/hash.d.ts +748 -0
  102. package/dist/quran/snapshot/row/hash.js +115 -0
  103. package/dist/quran/snapshot/row.d.ts +354 -0
  104. package/dist/quran/snapshot/row.js +91 -0
  105. package/dist/quran/snapshot/spec.d.ts +50 -0
  106. package/dist/quran/snapshot/spec.js +66 -0
  107. package/dist/quran/source.d.ts +206 -0
  108. package/dist/quran/source.js +153 -0
  109. package/dist/quran/spec.d.ts +47 -0
  110. package/dist/quran/spec.js +41 -0
  111. package/dist/quran/text.d.ts +7 -0
  112. package/dist/quran/text.js +11 -0
  113. package/dist/release/canonical.d.ts +23 -0
  114. package/dist/release/canonical.js +29 -0
  115. package/dist/release/current/evidence.d.ts +424 -0
  116. package/dist/release/current/evidence.js +41 -0
  117. package/dist/release/current/runtime.d.ts +4 -0
  118. package/dist/release/current/runtime.js +15 -0
  119. package/dist/release/current/state.d.ts +567 -0
  120. package/dist/release/current/state.js +91 -0
  121. package/dist/release/digest.d.ts +54 -0
  122. package/dist/release/digest.js +71 -0
  123. package/dist/release/hash.d.ts +72 -0
  124. package/dist/release/hash.js +14 -0
  125. package/dist/release/head.d.ts +206 -0
  126. package/dist/release/head.js +131 -0
  127. package/dist/release/items.d.ts +98 -0
  128. package/dist/release/items.js +114 -0
  129. package/dist/release/lifecycle.d.ts +297 -0
  130. package/dist/release/lifecycle.js +97 -0
  131. package/dist/release/origin.d.ts +30 -0
  132. package/dist/release/origin.js +24 -0
  133. package/dist/release/policy.d.ts +45 -0
  134. package/dist/release/policy.js +124 -0
  135. package/dist/release/result/digest.d.ts +127 -0
  136. package/dist/release/result/digest.js +140 -0
  137. package/dist/release/result/spec.d.ts +4 -0
  138. package/dist/release/result/spec.js +5 -0
  139. package/dist/release/rollback/digest.d.ts +126 -0
  140. package/dist/release/rollback/digest.js +92 -0
  141. package/dist/release/rollback/spec.d.ts +1729 -0
  142. package/dist/release/rollback/spec.js +156 -0
  143. package/dist/release/route/digest.d.ts +45 -0
  144. package/dist/release/route/digest.js +59 -0
  145. package/dist/release/route/page.d.ts +56 -0
  146. package/dist/release/route/page.js +46 -0
  147. package/dist/release/route/spec.d.ts +49 -0
  148. package/dist/release/route/spec.js +40 -0
  149. package/dist/release/route/verify.d.ts +66 -0
  150. package/dist/release/route/verify.js +67 -0
  151. package/dist/release/signing.d.ts +6 -0
  152. package/dist/release/signing.js +38 -0
  153. package/dist/release/snapshot/data.d.ts +475 -0
  154. package/dist/release/snapshot/data.js +74 -0
  155. package/dist/release/snapshot/evidence-requirement.d.ts +22 -0
  156. package/dist/release/snapshot/evidence-requirement.js +21 -0
  157. package/dist/release/snapshot/evidence.d.ts +58 -0
  158. package/dist/release/snapshot/evidence.js +14 -0
  159. package/dist/release/snapshot/program-evidence.d.ts +17 -0
  160. package/dist/release/snapshot/program-evidence.js +39 -0
  161. package/dist/release/snapshot/quran-evidence.d.ts +27 -0
  162. package/dist/release/snapshot/quran-evidence.js +43 -0
  163. package/dist/release/snapshot/scope.d.ts +60 -0
  164. package/dist/release/snapshot/scope.js +102 -0
  165. package/dist/release/snapshot/spec.d.ts +193 -0
  166. package/dist/release/snapshot/spec.js +139 -0
  167. package/dist/release/snapshot/tryout-evidence.d.ts +22 -0
  168. package/dist/release/snapshot/tryout-evidence.js +86 -0
  169. package/dist/release/snapshot/verify.d.ts +710 -0
  170. package/dist/release/snapshot/verify.js +147 -0
  171. package/dist/release/spec.d.ts +491 -0
  172. package/dist/release/spec.js +200 -0
  173. package/dist/release/verify.d.ts +98 -0
  174. package/dist/release/verify.js +70 -0
  175. package/dist/renderer/compatibility.d.ts +35 -0
  176. package/dist/renderer/compatibility.js +48 -0
  177. package/dist/renderer/component.d.ts +99 -0
  178. package/dist/renderer/component.js +102 -0
  179. package/dist/renderer/contract.d.ts +144 -0
  180. package/dist/renderer/contract.js +122 -0
  181. package/dist/renderer/domain.d.ts +6 -0
  182. package/dist/renderer/domain.js +18 -0
  183. package/dist/renderer/manifest.d.ts +86 -0
  184. package/dist/renderer/manifest.js +49 -0
  185. package/dist/renderer/selection.d.ts +39 -0
  186. package/dist/renderer/selection.js +87 -0
  187. package/dist/runtime/error.d.ts +8 -0
  188. package/dist/runtime/error.js +20 -0
  189. package/dist/runtime/protected/limits.d.ts +10 -0
  190. package/dist/runtime/protected/limits.js +15 -0
  191. package/dist/runtime/protected/spec.d.ts +328 -0
  192. package/dist/runtime/protected/spec.js +79 -0
  193. package/dist/runtime/protected/verify.d.ts +97 -0
  194. package/dist/runtime/protected/verify.js +72 -0
  195. package/dist/runtime/result.d.ts +12 -0
  196. package/dist/runtime/result.js +17 -0
  197. package/dist/runtime/spec.d.ts +705 -0
  198. package/dist/runtime/spec.js +61 -0
  199. package/dist/runtime/verify.d.ts +479 -0
  200. package/dist/runtime/verify.js +123 -0
  201. package/dist/signature/spec.d.ts +53 -0
  202. package/dist/signature/spec.js +29 -0
  203. package/dist/signature/trusted.d.ts +19 -0
  204. package/dist/signature/trusted.js +32 -0
  205. package/dist/signature/verify.d.ts +10 -0
  206. package/dist/signature/verify.js +82 -0
  207. package/dist/text/order.d.ts +2 -0
  208. package/dist/text/order.js +10 -0
  209. package/dist/text/syntax.d.ts +6 -0
  210. package/dist/text/syntax.js +15 -0
  211. package/dist/transport/batch.d.ts +971 -0
  212. package/dist/transport/batch.js +101 -0
  213. package/dist/transport/failure.d.ts +168 -0
  214. package/dist/transport/failure.js +194 -0
  215. package/dist/transport/group.d.ts +2946 -0
  216. package/dist/transport/group.js +47 -0
  217. package/dist/transport/limits.d.ts +30 -0
  218. package/dist/transport/limits.js +30 -0
  219. package/dist/transport/request.d.ts +9333 -0
  220. package/dist/transport/request.js +121 -0
  221. package/dist/transport/response.d.ts +6247 -0
  222. package/dist/transport/response.js +181 -0
  223. package/dist/transport/runtime.d.ts +77 -0
  224. package/dist/transport/runtime.js +33 -0
  225. package/dist/transport/snapshot.d.ts +978 -0
  226. package/dist/transport/snapshot.js +70 -0
  227. package/dist/tryout/canonical.d.ts +2 -0
  228. package/dist/tryout/canonical.js +11 -0
  229. package/dist/tryout/catalog-hash.d.ts +134 -0
  230. package/dist/tryout/catalog-hash.js +203 -0
  231. package/dist/tryout/catalog.d.ts +376 -0
  232. package/dist/tryout/catalog.js +147 -0
  233. package/dist/tryout/content-hash.d.ts +89 -0
  234. package/dist/tryout/content-hash.js +72 -0
  235. package/dist/tryout/identity.d.ts +12 -0
  236. package/dist/tryout/identity.js +46 -0
  237. package/dist/tryout/key.d.ts +4 -0
  238. package/dist/tryout/key.js +8 -0
  239. package/dist/tryout/language.d.ts +24 -0
  240. package/dist/tryout/language.js +32 -0
  241. package/dist/tryout/locale-closure.d.ts +20 -0
  242. package/dist/tryout/locale-closure.js +164 -0
  243. package/dist/tryout/placement-closure.d.ts +5 -0
  244. package/dist/tryout/placement-closure.js +30 -0
  245. package/dist/tryout/placement-hash.d.ts +11 -0
  246. package/dist/tryout/placement-hash.js +55 -0
  247. package/dist/tryout/placement.d.ts +280 -0
  248. package/dist/tryout/placement.js +82 -0
  249. package/dist/tryout/row-hash.d.ts +28 -0
  250. package/dist/tryout/row-hash.js +50 -0
  251. package/dist/tryout/runtime/canonical.d.ts +8 -0
  252. package/dist/tryout/runtime/canonical.js +33 -0
  253. package/dist/tryout/runtime/hash.d.ts +32 -0
  254. package/dist/tryout/runtime/hash.js +11 -0
  255. package/dist/tryout/runtime/source.d.ts +42 -0
  256. package/dist/tryout/runtime/source.js +47 -0
  257. package/dist/tryout/runtime/spec.d.ts +58 -0
  258. package/dist/tryout/runtime/spec.js +21 -0
  259. package/dist/tryout/runtime/verify.d.ts +61 -0
  260. package/dist/tryout/runtime/verify.js +69 -0
  261. package/dist/tryout/snapshot/canonical.d.ts +7 -0
  262. package/dist/tryout/snapshot/canonical.js +17 -0
  263. package/dist/tryout/snapshot/hash.d.ts +8 -0
  264. package/dist/tryout/snapshot/hash.js +19 -0
  265. package/dist/tryout/snapshot/spec.d.ts +46 -0
  266. package/dist/tryout/snapshot/spec.js +30 -0
  267. package/dist/tryout/spec.d.ts +13 -0
  268. package/dist/tryout/spec.js +15 -0
  269. package/package.json +506 -0
@@ -0,0 +1,376 @@
1
+ import { Schema } from "effect";
2
+ /** Current semantic catalog key accepted before its signed row is loaded. */
3
+ export declare const TryoutCatalogNodeIdentitySchema: Schema.Union<readonly [Schema.Struct<{
4
+ readonly appLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">;
5
+ readonly countryKey: Schema.String;
6
+ readonly kind: Schema.Literal<"country">;
7
+ }>, Schema.Struct<{
8
+ readonly appLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">;
9
+ readonly countryKey: Schema.String;
10
+ readonly examKey: Schema.String;
11
+ readonly kind: Schema.Literal<"exam">;
12
+ }>, Schema.Struct<{
13
+ readonly appLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">;
14
+ readonly countryKey: Schema.String;
15
+ readonly examKey: Schema.String;
16
+ readonly kind: Schema.Literal<"track">;
17
+ readonly trackKey: Schema.String;
18
+ }>, Schema.Struct<{
19
+ readonly appLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">;
20
+ readonly countryKey: Schema.String;
21
+ readonly examKey: Schema.String;
22
+ readonly kind: Schema.Literal<"set">;
23
+ readonly setKey: Schema.String;
24
+ readonly trackKey: Schema.String;
25
+ }>, Schema.Struct<{
26
+ readonly appLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">;
27
+ readonly countryKey: Schema.String;
28
+ readonly examKey: Schema.String;
29
+ readonly kind: Schema.Literal<"section">;
30
+ readonly sectionKey: Schema.String;
31
+ readonly setKey: Schema.String;
32
+ readonly trackKey: Schema.String;
33
+ }>]>;
34
+ export type TryoutCatalogNodeIdentity = typeof TryoutCatalogNodeIdentitySchema.Type;
35
+ /** One localized country row. */
36
+ export declare const TryoutCountrySchema: Schema.Struct<{
37
+ readonly appLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">;
38
+ readonly description: Schema.optional<Schema.String>;
39
+ readonly graph: Schema.Struct<{
40
+ readonly alignmentId: Schema.String;
41
+ readonly assetId: Schema.String;
42
+ readonly conceptId: Schema.String;
43
+ readonly learningObjectId: Schema.String;
44
+ readonly lensId: Schema.String;
45
+ }>;
46
+ readonly sourceRevision: Schema.Trimmed;
47
+ readonly title: Schema.String;
48
+ readonly countryCode: Schema.String;
49
+ readonly countryKey: Schema.String;
50
+ readonly kind: Schema.Literal<"country">;
51
+ readonly order: Schema.Finite;
52
+ readonly publicPath: Schema.brand<Schema.String, "@NakafaAI/AksaraPublicPath">;
53
+ }>;
54
+ export type TryoutCountry = typeof TryoutCountrySchema.Type;
55
+ /** One localized exam row. */
56
+ export declare const TryoutExamSchema: Schema.Struct<{
57
+ readonly appLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">;
58
+ readonly description: Schema.optional<Schema.String>;
59
+ readonly graph: Schema.Struct<{
60
+ readonly alignmentId: Schema.String;
61
+ readonly assetId: Schema.String;
62
+ readonly conceptId: Schema.String;
63
+ readonly learningObjectId: Schema.String;
64
+ readonly lensId: Schema.String;
65
+ }>;
66
+ readonly sourceRevision: Schema.Trimmed;
67
+ readonly title: Schema.String;
68
+ readonly countryKey: Schema.String;
69
+ readonly examKey: Schema.String;
70
+ readonly kind: Schema.Literal<"exam">;
71
+ readonly order: Schema.Finite;
72
+ readonly publicPath: Schema.brand<Schema.String, "@NakafaAI/AksaraPublicPath">;
73
+ readonly scoringStrategy: Schema.Literals<readonly ["irt", "raw"]>;
74
+ }>;
75
+ export type TryoutExam = typeof TryoutExamSchema.Type;
76
+ /** One localized track row with exact inventory counts. */
77
+ export declare const TryoutTrackSchema: Schema.Struct<{
78
+ readonly appLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">;
79
+ readonly description: Schema.optional<Schema.String>;
80
+ readonly graph: Schema.Struct<{
81
+ readonly alignmentId: Schema.String;
82
+ readonly assetId: Schema.String;
83
+ readonly conceptId: Schema.String;
84
+ readonly learningObjectId: Schema.String;
85
+ readonly lensId: Schema.String;
86
+ }>;
87
+ readonly sourceRevision: Schema.Trimmed;
88
+ readonly title: Schema.String;
89
+ readonly countryKey: Schema.String;
90
+ readonly examKey: Schema.String;
91
+ readonly kind: Schema.Literal<"track">;
92
+ readonly order: Schema.Finite;
93
+ readonly publicPath: Schema.brand<Schema.String, "@NakafaAI/AksaraPublicPath">;
94
+ readonly questionCount: Schema.Finite;
95
+ readonly sectionCount: Schema.Finite;
96
+ readonly setCount: Schema.Finite;
97
+ readonly trackKey: Schema.String;
98
+ readonly trackKind: Schema.Literals<readonly ["subject", "year"]>;
99
+ readonly visibleSectionCount: Schema.Finite;
100
+ }>;
101
+ export type TryoutTrack = typeof TryoutTrackSchema.Type;
102
+ /** One localized set row with exact inventory counts. */
103
+ export declare const TryoutSetSchema: Schema.Struct<{
104
+ readonly appLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">;
105
+ readonly description: Schema.optional<Schema.String>;
106
+ readonly graph: Schema.Struct<{
107
+ readonly alignmentId: Schema.String;
108
+ readonly assetId: Schema.String;
109
+ readonly conceptId: Schema.String;
110
+ readonly learningObjectId: Schema.String;
111
+ readonly lensId: Schema.String;
112
+ }>;
113
+ readonly sourceRevision: Schema.Trimmed;
114
+ readonly title: Schema.String;
115
+ readonly countryKey: Schema.String;
116
+ readonly examKey: Schema.String;
117
+ readonly internalEntrySectionKey: Schema.optional<Schema.String>;
118
+ readonly kind: Schema.Literal<"set">;
119
+ readonly order: Schema.Finite;
120
+ readonly publicPath: Schema.brand<Schema.String, "@NakafaAI/AksaraPublicPath">;
121
+ readonly questionCount: Schema.Finite;
122
+ readonly scoringStrategy: Schema.Literals<readonly ["irt", "raw"]>;
123
+ readonly sectionCount: Schema.Finite;
124
+ readonly setKey: Schema.String;
125
+ readonly trackKey: Schema.String;
126
+ readonly visibleSectionCount: Schema.Finite;
127
+ }>;
128
+ export type TryoutSet = typeof TryoutSetSchema.Type;
129
+ /** One localized section row with source ownership. */
130
+ export declare const TryoutSectionSchema: Schema.Struct<{
131
+ readonly appLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">;
132
+ readonly description: Schema.optional<Schema.String>;
133
+ readonly graph: Schema.Struct<{
134
+ readonly alignmentId: Schema.String;
135
+ readonly assetId: Schema.String;
136
+ readonly conceptId: Schema.String;
137
+ readonly learningObjectId: Schema.String;
138
+ readonly lensId: Schema.String;
139
+ }>;
140
+ readonly sourceRevision: Schema.Trimmed;
141
+ readonly title: Schema.String;
142
+ readonly countryKey: Schema.String;
143
+ readonly examKey: Schema.String;
144
+ readonly kind: Schema.Literal<"section">;
145
+ readonly order: Schema.Finite;
146
+ readonly publicPath: Schema.optional<Schema.brand<Schema.String, "@NakafaAI/AksaraPublicPath">>;
147
+ readonly questionCount: Schema.Finite;
148
+ readonly questionSourcePath: Schema.brand<Schema.String, "@NakafaAI/AksaraCorpusSourcePath">;
149
+ readonly sectionKey: Schema.String;
150
+ readonly setKey: Schema.String;
151
+ readonly timeLimitSeconds: Schema.Finite;
152
+ readonly trackKey: Schema.String;
153
+ readonly visibility: Schema.Literals<readonly ["internal-entry", "visible"]>;
154
+ }>;
155
+ export type TryoutSection = typeof TryoutSectionSchema.Type;
156
+ /** Complete hierarchy vocabulary for try-out publication. */
157
+ export declare const TryoutCatalogRowSchema: Schema.Union<readonly [Schema.Struct<{
158
+ readonly appLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">;
159
+ readonly description: Schema.optional<Schema.String>;
160
+ readonly graph: Schema.Struct<{
161
+ readonly alignmentId: Schema.String;
162
+ readonly assetId: Schema.String;
163
+ readonly conceptId: Schema.String;
164
+ readonly learningObjectId: Schema.String;
165
+ readonly lensId: Schema.String;
166
+ }>;
167
+ readonly sourceRevision: Schema.Trimmed;
168
+ readonly title: Schema.String;
169
+ readonly countryCode: Schema.String;
170
+ readonly countryKey: Schema.String;
171
+ readonly kind: Schema.Literal<"country">;
172
+ readonly order: Schema.Finite;
173
+ readonly publicPath: Schema.brand<Schema.String, "@NakafaAI/AksaraPublicPath">;
174
+ }>, Schema.Struct<{
175
+ readonly appLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">;
176
+ readonly description: Schema.optional<Schema.String>;
177
+ readonly graph: Schema.Struct<{
178
+ readonly alignmentId: Schema.String;
179
+ readonly assetId: Schema.String;
180
+ readonly conceptId: Schema.String;
181
+ readonly learningObjectId: Schema.String;
182
+ readonly lensId: Schema.String;
183
+ }>;
184
+ readonly sourceRevision: Schema.Trimmed;
185
+ readonly title: Schema.String;
186
+ readonly countryKey: Schema.String;
187
+ readonly examKey: Schema.String;
188
+ readonly kind: Schema.Literal<"exam">;
189
+ readonly order: Schema.Finite;
190
+ readonly publicPath: Schema.brand<Schema.String, "@NakafaAI/AksaraPublicPath">;
191
+ readonly scoringStrategy: Schema.Literals<readonly ["irt", "raw"]>;
192
+ }>, Schema.Struct<{
193
+ readonly appLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">;
194
+ readonly description: Schema.optional<Schema.String>;
195
+ readonly graph: Schema.Struct<{
196
+ readonly alignmentId: Schema.String;
197
+ readonly assetId: Schema.String;
198
+ readonly conceptId: Schema.String;
199
+ readonly learningObjectId: Schema.String;
200
+ readonly lensId: Schema.String;
201
+ }>;
202
+ readonly sourceRevision: Schema.Trimmed;
203
+ readonly title: Schema.String;
204
+ readonly countryKey: Schema.String;
205
+ readonly examKey: Schema.String;
206
+ readonly kind: Schema.Literal<"track">;
207
+ readonly order: Schema.Finite;
208
+ readonly publicPath: Schema.brand<Schema.String, "@NakafaAI/AksaraPublicPath">;
209
+ readonly questionCount: Schema.Finite;
210
+ readonly sectionCount: Schema.Finite;
211
+ readonly setCount: Schema.Finite;
212
+ readonly trackKey: Schema.String;
213
+ readonly trackKind: Schema.Literals<readonly ["subject", "year"]>;
214
+ readonly visibleSectionCount: Schema.Finite;
215
+ }>, Schema.Struct<{
216
+ readonly appLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">;
217
+ readonly description: Schema.optional<Schema.String>;
218
+ readonly graph: Schema.Struct<{
219
+ readonly alignmentId: Schema.String;
220
+ readonly assetId: Schema.String;
221
+ readonly conceptId: Schema.String;
222
+ readonly learningObjectId: Schema.String;
223
+ readonly lensId: Schema.String;
224
+ }>;
225
+ readonly sourceRevision: Schema.Trimmed;
226
+ readonly title: Schema.String;
227
+ readonly countryKey: Schema.String;
228
+ readonly examKey: Schema.String;
229
+ readonly internalEntrySectionKey: Schema.optional<Schema.String>;
230
+ readonly kind: Schema.Literal<"set">;
231
+ readonly order: Schema.Finite;
232
+ readonly publicPath: Schema.brand<Schema.String, "@NakafaAI/AksaraPublicPath">;
233
+ readonly questionCount: Schema.Finite;
234
+ readonly scoringStrategy: Schema.Literals<readonly ["irt", "raw"]>;
235
+ readonly sectionCount: Schema.Finite;
236
+ readonly setKey: Schema.String;
237
+ readonly trackKey: Schema.String;
238
+ readonly visibleSectionCount: Schema.Finite;
239
+ }>, Schema.Struct<{
240
+ readonly appLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">;
241
+ readonly description: Schema.optional<Schema.String>;
242
+ readonly graph: Schema.Struct<{
243
+ readonly alignmentId: Schema.String;
244
+ readonly assetId: Schema.String;
245
+ readonly conceptId: Schema.String;
246
+ readonly learningObjectId: Schema.String;
247
+ readonly lensId: Schema.String;
248
+ }>;
249
+ readonly sourceRevision: Schema.Trimmed;
250
+ readonly title: Schema.String;
251
+ readonly countryKey: Schema.String;
252
+ readonly examKey: Schema.String;
253
+ readonly kind: Schema.Literal<"section">;
254
+ readonly order: Schema.Finite;
255
+ readonly publicPath: Schema.optional<Schema.brand<Schema.String, "@NakafaAI/AksaraPublicPath">>;
256
+ readonly questionCount: Schema.Finite;
257
+ readonly questionSourcePath: Schema.brand<Schema.String, "@NakafaAI/AksaraCorpusSourcePath">;
258
+ readonly sectionKey: Schema.String;
259
+ readonly setKey: Schema.String;
260
+ readonly timeLimitSeconds: Schema.Finite;
261
+ readonly trackKey: Schema.String;
262
+ readonly visibility: Schema.Literals<readonly ["internal-entry", "visible"]>;
263
+ }>]>;
264
+ export type TryoutCatalogRow = typeof TryoutCatalogRowSchema.Type;
265
+ /** One hierarchy row bound to its deterministic hash. */
266
+ export declare const TryoutCatalogRecordSchema: Schema.Struct<{
267
+ readonly row: Schema.Union<readonly [Schema.Struct<{
268
+ readonly appLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">;
269
+ readonly description: Schema.optional<Schema.String>;
270
+ readonly graph: Schema.Struct<{
271
+ readonly alignmentId: Schema.String;
272
+ readonly assetId: Schema.String;
273
+ readonly conceptId: Schema.String;
274
+ readonly learningObjectId: Schema.String;
275
+ readonly lensId: Schema.String;
276
+ }>;
277
+ readonly sourceRevision: Schema.Trimmed;
278
+ readonly title: Schema.String;
279
+ readonly countryCode: Schema.String;
280
+ readonly countryKey: Schema.String;
281
+ readonly kind: Schema.Literal<"country">;
282
+ readonly order: Schema.Finite;
283
+ readonly publicPath: Schema.brand<Schema.String, "@NakafaAI/AksaraPublicPath">;
284
+ }>, Schema.Struct<{
285
+ readonly appLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">;
286
+ readonly description: Schema.optional<Schema.String>;
287
+ readonly graph: Schema.Struct<{
288
+ readonly alignmentId: Schema.String;
289
+ readonly assetId: Schema.String;
290
+ readonly conceptId: Schema.String;
291
+ readonly learningObjectId: Schema.String;
292
+ readonly lensId: Schema.String;
293
+ }>;
294
+ readonly sourceRevision: Schema.Trimmed;
295
+ readonly title: Schema.String;
296
+ readonly countryKey: Schema.String;
297
+ readonly examKey: Schema.String;
298
+ readonly kind: Schema.Literal<"exam">;
299
+ readonly order: Schema.Finite;
300
+ readonly publicPath: Schema.brand<Schema.String, "@NakafaAI/AksaraPublicPath">;
301
+ readonly scoringStrategy: Schema.Literals<readonly ["irt", "raw"]>;
302
+ }>, Schema.Struct<{
303
+ readonly appLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">;
304
+ readonly description: Schema.optional<Schema.String>;
305
+ readonly graph: Schema.Struct<{
306
+ readonly alignmentId: Schema.String;
307
+ readonly assetId: Schema.String;
308
+ readonly conceptId: Schema.String;
309
+ readonly learningObjectId: Schema.String;
310
+ readonly lensId: Schema.String;
311
+ }>;
312
+ readonly sourceRevision: Schema.Trimmed;
313
+ readonly title: Schema.String;
314
+ readonly countryKey: Schema.String;
315
+ readonly examKey: Schema.String;
316
+ readonly kind: Schema.Literal<"track">;
317
+ readonly order: Schema.Finite;
318
+ readonly publicPath: Schema.brand<Schema.String, "@NakafaAI/AksaraPublicPath">;
319
+ readonly questionCount: Schema.Finite;
320
+ readonly sectionCount: Schema.Finite;
321
+ readonly setCount: Schema.Finite;
322
+ readonly trackKey: Schema.String;
323
+ readonly trackKind: Schema.Literals<readonly ["subject", "year"]>;
324
+ readonly visibleSectionCount: Schema.Finite;
325
+ }>, Schema.Struct<{
326
+ readonly appLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">;
327
+ readonly description: Schema.optional<Schema.String>;
328
+ readonly graph: Schema.Struct<{
329
+ readonly alignmentId: Schema.String;
330
+ readonly assetId: Schema.String;
331
+ readonly conceptId: Schema.String;
332
+ readonly learningObjectId: Schema.String;
333
+ readonly lensId: Schema.String;
334
+ }>;
335
+ readonly sourceRevision: Schema.Trimmed;
336
+ readonly title: Schema.String;
337
+ readonly countryKey: Schema.String;
338
+ readonly examKey: Schema.String;
339
+ readonly internalEntrySectionKey: Schema.optional<Schema.String>;
340
+ readonly kind: Schema.Literal<"set">;
341
+ readonly order: Schema.Finite;
342
+ readonly publicPath: Schema.brand<Schema.String, "@NakafaAI/AksaraPublicPath">;
343
+ readonly questionCount: Schema.Finite;
344
+ readonly scoringStrategy: Schema.Literals<readonly ["irt", "raw"]>;
345
+ readonly sectionCount: Schema.Finite;
346
+ readonly setKey: Schema.String;
347
+ readonly trackKey: Schema.String;
348
+ readonly visibleSectionCount: Schema.Finite;
349
+ }>, Schema.Struct<{
350
+ readonly appLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">;
351
+ readonly description: Schema.optional<Schema.String>;
352
+ readonly graph: Schema.Struct<{
353
+ readonly alignmentId: Schema.String;
354
+ readonly assetId: Schema.String;
355
+ readonly conceptId: Schema.String;
356
+ readonly learningObjectId: Schema.String;
357
+ readonly lensId: Schema.String;
358
+ }>;
359
+ readonly sourceRevision: Schema.Trimmed;
360
+ readonly title: Schema.String;
361
+ readonly countryKey: Schema.String;
362
+ readonly examKey: Schema.String;
363
+ readonly kind: Schema.Literal<"section">;
364
+ readonly order: Schema.Finite;
365
+ readonly publicPath: Schema.optional<Schema.brand<Schema.String, "@NakafaAI/AksaraPublicPath">>;
366
+ readonly questionCount: Schema.Finite;
367
+ readonly questionSourcePath: Schema.brand<Schema.String, "@NakafaAI/AksaraCorpusSourcePath">;
368
+ readonly sectionKey: Schema.String;
369
+ readonly setKey: Schema.String;
370
+ readonly timeLimitSeconds: Schema.Finite;
371
+ readonly trackKey: Schema.String;
372
+ readonly visibility: Schema.Literals<readonly ["internal-entry", "visible"]>;
373
+ }>]>;
374
+ readonly rowHash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
375
+ }>;
376
+ export type TryoutCatalogRecord = typeof TryoutCatalogRecordSchema.Type;
@@ -0,0 +1,147 @@
1
+ import { Schema } from "effect";
2
+ import { CountryCodeSchema } from "#contracts/country";
3
+ import { LearningGraphIdentitySchema } from "#contracts/graph/spec";
4
+ import { CorpusSourcePathSchema, PublicPathSchema, Sha256HashSchema, } from "#contracts/ids";
5
+ import { AppLocaleSchema } from "#contracts/locale";
6
+ import { TryoutKeySchema } from "#contracts/tryout/key";
7
+ import { TryoutScoringSchema, TryoutSourceRevisionSchema, TryoutTrackKindSchema, TryoutVisibilitySchema, } from "#contracts/tryout/spec";
8
+ const PositiveCountSchema = Schema.Finite.pipe(Schema.check(Schema.isInt()), Schema.check(Schema.isGreaterThan(0)));
9
+ const NonNegativeCountSchema = Schema.Finite.pipe(Schema.check(Schema.isInt()), Schema.check(Schema.isGreaterThanOrEqualTo(0)));
10
+ const LocalizedFields = {
11
+ appLocale: AppLocaleSchema,
12
+ description: Schema.optional(Schema.String),
13
+ graph: LearningGraphIdentitySchema,
14
+ sourceRevision: TryoutSourceRevisionSchema,
15
+ title: Schema.String,
16
+ };
17
+ const ParentFields = {
18
+ countryKey: TryoutKeySchema,
19
+ examKey: TryoutKeySchema,
20
+ };
21
+ const CatalogNodeFields = {
22
+ appLocale: AppLocaleSchema,
23
+ countryKey: TryoutKeySchema,
24
+ };
25
+ /** Minimal country identity used to retrieve its complete signed row. */
26
+ const TryoutCountryIdentitySchema = Schema.Struct({
27
+ ...CatalogNodeFields,
28
+ kind: Schema.Literal("country"),
29
+ });
30
+ /** Minimal exam identity used to retrieve its complete signed row. */
31
+ const TryoutExamIdentitySchema = Schema.Struct({
32
+ ...CatalogNodeFields,
33
+ examKey: TryoutKeySchema,
34
+ kind: Schema.Literal("exam"),
35
+ });
36
+ /** Minimal track identity used to retrieve its complete signed row. */
37
+ const TryoutTrackIdentitySchema = Schema.Struct({
38
+ ...CatalogNodeFields,
39
+ examKey: TryoutKeySchema,
40
+ kind: Schema.Literal("track"),
41
+ trackKey: TryoutKeySchema,
42
+ });
43
+ /** Minimal set identity used to retrieve its complete signed row. */
44
+ const TryoutSetIdentitySchema = Schema.Struct({
45
+ ...CatalogNodeFields,
46
+ examKey: TryoutKeySchema,
47
+ kind: Schema.Literal("set"),
48
+ setKey: TryoutKeySchema,
49
+ trackKey: TryoutKeySchema,
50
+ });
51
+ /** Minimal section identity used to retrieve its complete signed row. */
52
+ const TryoutSectionIdentitySchema = Schema.Struct({
53
+ ...CatalogNodeFields,
54
+ examKey: TryoutKeySchema,
55
+ kind: Schema.Literal("section"),
56
+ sectionKey: TryoutKeySchema,
57
+ setKey: TryoutKeySchema,
58
+ trackKey: TryoutKeySchema,
59
+ });
60
+ /** Current semantic catalog key accepted before its signed row is loaded. */
61
+ export const TryoutCatalogNodeIdentitySchema = Schema.Union([
62
+ TryoutCountryIdentitySchema,
63
+ TryoutExamIdentitySchema,
64
+ TryoutTrackIdentitySchema,
65
+ TryoutSetIdentitySchema,
66
+ TryoutSectionIdentitySchema,
67
+ ]);
68
+ /** One localized country row. */
69
+ export const TryoutCountrySchema = Schema.Struct({
70
+ ...LocalizedFields,
71
+ countryCode: CountryCodeSchema,
72
+ countryKey: TryoutKeySchema,
73
+ kind: Schema.Literal("country"),
74
+ order: PositiveCountSchema,
75
+ publicPath: PublicPathSchema,
76
+ });
77
+ /** One localized exam row. */
78
+ export const TryoutExamSchema = Schema.Struct({
79
+ ...LocalizedFields,
80
+ countryKey: TryoutKeySchema,
81
+ examKey: TryoutKeySchema,
82
+ kind: Schema.Literal("exam"),
83
+ order: PositiveCountSchema,
84
+ publicPath: PublicPathSchema,
85
+ scoringStrategy: TryoutScoringSchema,
86
+ });
87
+ /** One localized track row with exact inventory counts. */
88
+ export const TryoutTrackSchema = Schema.Struct({
89
+ ...LocalizedFields,
90
+ ...ParentFields,
91
+ kind: Schema.Literal("track"),
92
+ order: PositiveCountSchema,
93
+ publicPath: PublicPathSchema,
94
+ questionCount: PositiveCountSchema,
95
+ sectionCount: PositiveCountSchema,
96
+ setCount: PositiveCountSchema,
97
+ trackKey: TryoutKeySchema,
98
+ trackKind: TryoutTrackKindSchema,
99
+ visibleSectionCount: NonNegativeCountSchema,
100
+ }).pipe(Schema.check(Schema.makeFilter(({ sectionCount, visibleSectionCount }) => visibleSectionCount <= sectionCount, { message: "Visible track sections cannot exceed all sections." })));
101
+ /** One localized set row with exact inventory counts. */
102
+ export const TryoutSetSchema = Schema.Struct({
103
+ ...LocalizedFields,
104
+ ...ParentFields,
105
+ internalEntrySectionKey: Schema.optional(TryoutKeySchema),
106
+ kind: Schema.Literal("set"),
107
+ order: PositiveCountSchema,
108
+ publicPath: PublicPathSchema,
109
+ questionCount: PositiveCountSchema,
110
+ scoringStrategy: TryoutScoringSchema,
111
+ sectionCount: PositiveCountSchema,
112
+ setKey: TryoutKeySchema,
113
+ trackKey: TryoutKeySchema,
114
+ visibleSectionCount: NonNegativeCountSchema,
115
+ }).pipe(Schema.check(Schema.makeFilter(({ internalEntrySectionKey, sectionCount, visibleSectionCount }) => internalEntrySectionKey === undefined
116
+ ? visibleSectionCount === sectionCount
117
+ : sectionCount === 1 && visibleSectionCount === 0, { message: "Set section counts do not match their visibility." })));
118
+ /** One localized section row with source ownership. */
119
+ export const TryoutSectionSchema = Schema.Struct({
120
+ ...LocalizedFields,
121
+ ...ParentFields,
122
+ kind: Schema.Literal("section"),
123
+ order: PositiveCountSchema,
124
+ publicPath: Schema.optional(PublicPathSchema),
125
+ questionCount: PositiveCountSchema,
126
+ questionSourcePath: CorpusSourcePathSchema,
127
+ sectionKey: TryoutKeySchema,
128
+ setKey: TryoutKeySchema,
129
+ timeLimitSeconds: PositiveCountSchema,
130
+ trackKey: TryoutKeySchema,
131
+ visibility: TryoutVisibilitySchema,
132
+ }).pipe(Schema.check(Schema.makeFilter(({ publicPath, visibility }) => visibility === "visible"
133
+ ? publicPath !== undefined
134
+ : publicPath === undefined, { message: "Section visibility does not match its public path." })));
135
+ /** Complete hierarchy vocabulary for try-out publication. */
136
+ export const TryoutCatalogRowSchema = Schema.Union([
137
+ TryoutCountrySchema,
138
+ TryoutExamSchema,
139
+ TryoutTrackSchema,
140
+ TryoutSetSchema,
141
+ TryoutSectionSchema,
142
+ ]);
143
+ /** One hierarchy row bound to its deterministic hash. */
144
+ export const TryoutCatalogRecordSchema = Schema.Struct({
145
+ row: TryoutCatalogRowSchema,
146
+ rowHash: Sha256HashSchema,
147
+ });
@@ -0,0 +1,89 @@
1
+ import { Schema } from "effect";
2
+ /** Exact authored facts that define one app and delivery-language question. */
3
+ export declare const TryoutContentInputSchema: Schema.Struct<{
4
+ readonly dateModified: Schema.optionalKey<Schema.String>;
5
+ readonly datePublished: Schema.String;
6
+ readonly answerArtifactLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraArtifactLocale">;
7
+ readonly answerBody: Schema.String;
8
+ readonly appLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">;
9
+ readonly blueprint: Schema.optionalKey<Schema.Struct<{
10
+ readonly cognitiveLevel: Schema.String;
11
+ readonly contentDomain: Schema.String;
12
+ readonly topic: Schema.String;
13
+ }>>;
14
+ readonly deliveryLanguage: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraDeliveryLanguage">;
15
+ readonly languagePolicy: Schema.Union<readonly [Schema.Struct<{
16
+ readonly kind: Schema.Literal<"app-locale">;
17
+ }>, Schema.Struct<{
18
+ readonly kind: Schema.Literal<"fixed">;
19
+ readonly language: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraDeliveryLanguage">;
20
+ }>]>;
21
+ readonly questionArtifactLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraArtifactLocale">;
22
+ readonly questionBody: Schema.String;
23
+ readonly response: Schema.Union<readonly [Schema.Struct<{
24
+ readonly categories: Schema.$Array<Schema.Struct<{
25
+ readonly categoryKey: Schema.String;
26
+ readonly label: Schema.NonEmptyArray<Schema.Union<readonly [Schema.Struct<{
27
+ readonly display: Schema.Literals<readonly ["block", "inline"]>;
28
+ readonly kind: Schema.Literal<"math">;
29
+ readonly math: Schema.String;
30
+ }>, Schema.Struct<{
31
+ readonly kind: Schema.Literal<"text">;
32
+ readonly text: Schema.String;
33
+ }>]>>;
34
+ readonly order: Schema.Int;
35
+ }>>;
36
+ readonly kind: Schema.Literal<"category">;
37
+ readonly statements: Schema.$Array<Schema.Struct<{
38
+ readonly correctCategoryKey: Schema.String;
39
+ readonly label: Schema.NonEmptyArray<Schema.Union<readonly [Schema.Struct<{
40
+ readonly display: Schema.Literals<readonly ["block", "inline"]>;
41
+ readonly kind: Schema.Literal<"math">;
42
+ readonly math: Schema.String;
43
+ }>, Schema.Struct<{
44
+ readonly kind: Schema.Literal<"text">;
45
+ readonly text: Schema.String;
46
+ }>]>>;
47
+ readonly order: Schema.Int;
48
+ readonly statementKey: Schema.String;
49
+ }>>;
50
+ }>, Schema.Struct<{
51
+ readonly kind: Schema.Literal<"multiple-choice">;
52
+ readonly options: Schema.$Array<Schema.Struct<{
53
+ readonly isCorrect: Schema.Boolean;
54
+ readonly label: Schema.NonEmptyArray<Schema.Union<readonly [Schema.Struct<{
55
+ readonly display: Schema.Literals<readonly ["block", "inline"]>;
56
+ readonly kind: Schema.Literal<"math">;
57
+ readonly math: Schema.String;
58
+ }>, Schema.Struct<{
59
+ readonly kind: Schema.Literal<"text">;
60
+ readonly text: Schema.String;
61
+ }>]>>;
62
+ readonly optionKey: Schema.String;
63
+ readonly order: Schema.Int;
64
+ }>>;
65
+ }>, Schema.Struct<{
66
+ readonly kind: Schema.Literal<"single-choice">;
67
+ readonly options: Schema.$Array<Schema.Struct<{
68
+ readonly isCorrect: Schema.Boolean;
69
+ readonly label: Schema.NonEmptyArray<Schema.Union<readonly [Schema.Struct<{
70
+ readonly display: Schema.Literals<readonly ["block", "inline"]>;
71
+ readonly kind: Schema.Literal<"math">;
72
+ readonly math: Schema.String;
73
+ }>, Schema.Struct<{
74
+ readonly kind: Schema.Literal<"text">;
75
+ readonly text: Schema.String;
76
+ }>]>>;
77
+ readonly optionKey: Schema.String;
78
+ readonly order: Schema.Int;
79
+ }>>;
80
+ }>]>;
81
+ readonly sourcePath: Schema.brand<Schema.String, "@NakafaAI/AksaraQuestionKey">;
82
+ readonly sourceRevision: Schema.Trimmed;
83
+ readonly stimulusKey: Schema.optionalKey<Schema.String>;
84
+ }>;
85
+ export type TryoutContentInput = typeof TryoutContentInputSchema.Type;
86
+ /** Serializes every current question-pair identity field in stable order. */
87
+ export declare function canonicalizeTryoutContent(input: TryoutContentInput): string;
88
+ /** Hashes one complete current question pair through its canonical identity. */
89
+ export declare function hashTryoutContent(input: TryoutContentInput): string & import("effect/Brand").Brand<"@NakafaAI/AksaraTryoutContentHash">;