@getodk/xforms-engine 0.5.0 → 0.7.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 (425) hide show
  1. package/README.md +1 -1
  2. package/dist/client/BaseNode.d.ts +8 -4
  3. package/dist/client/BaseValueNode.d.ts +8 -4
  4. package/dist/client/GroupNode.d.ts +1 -0
  5. package/dist/client/InputNode.d.ts +32 -3
  6. package/dist/client/ModelValueNode.d.ts +1 -0
  7. package/dist/client/NoteNode.d.ts +24 -7
  8. package/dist/client/RangeNode.d.ts +36 -0
  9. package/dist/client/RankNode.d.ts +46 -0
  10. package/dist/client/RootNode.d.ts +21 -14
  11. package/dist/client/SelectNode.d.ts +47 -25
  12. package/dist/client/SubtreeNode.d.ts +1 -0
  13. package/dist/client/TriggerNode.d.ts +10 -6
  14. package/dist/client/constants.d.ts +11 -12
  15. package/dist/client/form/CreateFormInstance.d.ts +14 -0
  16. package/dist/client/form/EditFormInstance.d.ts +62 -0
  17. package/dist/client/form/FormInstance.d.ts +104 -0
  18. package/dist/client/form/FormInstanceConfig.d.ts +17 -0
  19. package/dist/client/form/FormResource.d.ts +1 -0
  20. package/dist/client/form/LoadForm.d.ts +79 -0
  21. package/dist/client/form/LoadFormResult.d.ts +67 -0
  22. package/dist/client/form/RestoreFormInstance.d.ts +8 -0
  23. package/dist/client/hierarchy.d.ts +5 -5
  24. package/dist/client/index.d.ts +37 -11
  25. package/dist/client/node-types.d.ts +2 -2
  26. package/dist/client/repeat/BaseRepeatRangeNode.d.ts +3 -4
  27. package/dist/client/repeat/RepeatInstanceNode.d.ts +4 -5
  28. package/dist/client/repeat/RepeatRangeControlledNode.d.ts +2 -2
  29. package/dist/client/repeat/RepeatRangeUncontrolledNode.d.ts +2 -2
  30. package/dist/client/resources.d.ts +1 -1
  31. package/dist/client/serialization/InstanceData.d.ts +12 -0
  32. package/dist/client/serialization/InstanceFile.d.ts +6 -0
  33. package/dist/client/serialization/InstancePayload.d.ts +93 -0
  34. package/dist/client/serialization/InstancePayloadOptions.d.ts +23 -0
  35. package/dist/client/serialization/InstanceState.d.ts +12 -0
  36. package/dist/client/submission/{SubmissionDefinition.d.ts → SubmissionMeta.d.ts} +1 -1
  37. package/dist/client/unsupported/UnsupportedControlNode.d.ts +1 -3
  38. package/dist/entrypoints/FormInstance.d.ts +20 -0
  39. package/dist/entrypoints/FormResult/BaseFormResult.d.ts +22 -0
  40. package/dist/entrypoints/FormResult/BaseInstantiableFormResult.d.ts +25 -0
  41. package/dist/entrypoints/FormResult/FormFailureResult.d.ts +17 -0
  42. package/dist/entrypoints/FormResult/FormSuccessResult.d.ts +15 -0
  43. package/dist/entrypoints/FormResult/FormWarningResult.d.ts +15 -0
  44. package/dist/entrypoints/createInstance.d.ts +9 -0
  45. package/dist/entrypoints/editInstance.d.ts +9 -0
  46. package/dist/entrypoints/index.d.ts +4 -0
  47. package/dist/entrypoints/loadForm.d.ts +4 -0
  48. package/dist/entrypoints/restoreInstance.d.ts +9 -0
  49. package/dist/error/LoadFormFailureError.d.ts +9 -0
  50. package/dist/error/MalformedInstanceDataError.d.ts +3 -0
  51. package/dist/error/RankMissingValueError.d.ts +3 -0
  52. package/dist/error/RankValueTypeError.d.ts +6 -0
  53. package/dist/error/SelectValueTypeError.d.ts +15 -0
  54. package/dist/error/TemplatedNodeAttributeSerializationError.d.ts +22 -0
  55. package/dist/error/XFormsSpecViolationError.d.ts +2 -0
  56. package/dist/index.d.ts +2 -34
  57. package/dist/index.js +7274 -5840
  58. package/dist/index.js.map +1 -1
  59. package/dist/instance/Group.d.ts +7 -5
  60. package/dist/instance/InputControl.d.ts +9 -6
  61. package/dist/instance/ModelValue.d.ts +7 -4
  62. package/dist/instance/Note.d.ts +14 -25
  63. package/dist/instance/PrimaryInstance.d.ts +36 -8
  64. package/dist/instance/RangeControl.d.ts +35 -0
  65. package/dist/instance/RankControl.d.ts +41 -0
  66. package/dist/instance/Root.d.ts +8 -9
  67. package/dist/instance/SelectControl.d.ts +67 -0
  68. package/dist/instance/Subtree.d.ts +7 -5
  69. package/dist/instance/TriggerControl.d.ts +10 -22
  70. package/dist/instance/abstract/DescendantNode.d.ts +11 -3
  71. package/dist/instance/abstract/InstanceNode.d.ts +10 -5
  72. package/dist/instance/abstract/ValueNode.d.ts +7 -6
  73. package/dist/instance/children/DescendantNodeInitOptions.d.ts +32 -0
  74. package/dist/instance/{children.d.ts → children/buildChildren.d.ts} +1 -1
  75. package/dist/instance/children/childrenInitOptions.d.ts +9 -0
  76. package/dist/instance/children/normalizeChildInitOptions.d.ts +2 -0
  77. package/dist/instance/hierarchy.d.ts +9 -9
  78. package/dist/instance/input/InitialInstanceState.d.ts +13 -0
  79. package/dist/instance/input/InstanceAttachmentMap.d.ts +19 -0
  80. package/dist/instance/internal-api/InstanceConfig.d.ts +2 -9
  81. package/dist/instance/internal-api/InstanceValueContext.d.ts +10 -1
  82. package/dist/instance/internal-api/serialization/ClientReactiveSerializableInstance.d.ts +14 -0
  83. package/dist/instance/internal-api/serialization/ClientReactiveSerializableLeafNode.d.ts +32 -0
  84. package/dist/instance/internal-api/serialization/ClientReactiveSerializableParentNode.d.ts +18 -0
  85. package/dist/instance/internal-api/serialization/ClientReactiveSerializableTemplatedNode.d.ts +13 -0
  86. package/dist/instance/internal-api/serialization/ClientReactiveSerializableValueNode.d.ts +21 -0
  87. package/dist/instance/repeat/BaseRepeatRange.d.ts +11 -8
  88. package/dist/instance/repeat/RepeatInstance.d.ts +11 -7
  89. package/dist/instance/repeat/RepeatRangeControlled.d.ts +27 -3
  90. package/dist/instance/repeat/RepeatRangeUncontrolled.d.ts +4 -3
  91. package/dist/instance/resource.d.ts +5 -1
  92. package/dist/instance/unsupported/UploadControl.d.ts +32 -4
  93. package/dist/integration/xpath/EngineXPathEvaluator.d.ts +2 -2
  94. package/dist/integration/xpath/adapter/kind.d.ts +4 -10
  95. package/dist/integration/xpath/adapter/names.d.ts +1 -11
  96. package/dist/integration/xpath/adapter/traversal.d.ts +10 -9
  97. package/dist/integration/xpath/static-dom/StaticAttribute.d.ts +10 -4
  98. package/dist/integration/xpath/static-dom/StaticDocument.d.ts +13 -11
  99. package/dist/integration/xpath/static-dom/StaticElement.d.ts +25 -18
  100. package/dist/integration/xpath/static-dom/StaticNode.d.ts +1 -1
  101. package/dist/integration/xpath/static-dom/StaticParentNode.d.ts +13 -0
  102. package/dist/integration/xpath/static-dom/staticNodeName.d.ts +3 -0
  103. package/dist/lib/client-reactivity/instance-state/createNodeRangeInstanceState.d.ts +4 -0
  104. package/dist/lib/client-reactivity/instance-state/createParentNodeInstanceState.d.ts +4 -0
  105. package/dist/lib/client-reactivity/instance-state/createPrimaryInstanceState.d.ts +3 -0
  106. package/dist/lib/client-reactivity/instance-state/createRootInstanceState.d.ts +3 -0
  107. package/dist/lib/client-reactivity/instance-state/createTemplatedNodeInstanceState.d.ts +6 -0
  108. package/dist/lib/client-reactivity/instance-state/createValueNodeInstanceState.d.ts +3 -0
  109. package/dist/lib/client-reactivity/instance-state/prepareInstancePayload.d.ts +8 -0
  110. package/dist/lib/codecs/Geopoint/Geopoint.d.ts +48 -0
  111. package/dist/lib/codecs/Geopoint/GeopointValueCodec.d.ts +5 -0
  112. package/dist/lib/codecs/NoteCodec.d.ts +8 -0
  113. package/dist/lib/codecs/RangeCodec.d.ts +8 -0
  114. package/dist/lib/codecs/TempUnsupportedControlCodec.d.ts +7 -0
  115. package/dist/lib/codecs/TriggerCodec.d.ts +7 -0
  116. package/dist/lib/codecs/ValueArrayCodec.d.ts +11 -0
  117. package/dist/lib/codecs/ValueCodec.d.ts +2 -2
  118. package/dist/lib/codecs/getNoteCodec.d.ts +3 -0
  119. package/dist/lib/codecs/getSelectCodec.d.ts +5 -0
  120. package/dist/lib/codecs/getSharedValueCodec.d.ts +3 -2
  121. package/dist/lib/codecs/items/BaseItemCodec.d.ts +9 -0
  122. package/dist/lib/codecs/items/MultipleValueItemCodec.d.ts +14 -0
  123. package/dist/lib/codecs/items/SingleValueItemCodec.d.ts +24 -0
  124. package/dist/lib/dom/query.d.ts +1 -2
  125. package/dist/lib/names/NamespaceDeclaration.d.ts +45 -0
  126. package/dist/lib/names/NamespaceDeclarationMap.d.ts +137 -0
  127. package/dist/lib/names/NamespaceURL.d.ts +30 -0
  128. package/dist/lib/names/QualifiedName.d.ts +113 -0
  129. package/dist/lib/names/UnprefixedXFormsName.d.ts +4 -0
  130. package/dist/lib/number-parsers.d.ts +2 -0
  131. package/dist/lib/reactivity/createInstanceValueState.d.ts +2 -27
  132. package/dist/lib/reactivity/createItemCollection.d.ts +21 -0
  133. package/dist/lib/xml-serialization.d.ts +11 -2
  134. package/dist/parse/XFormDOM.d.ts +1 -1
  135. package/dist/parse/body/BodyDefinition.d.ts +2 -2
  136. package/dist/parse/body/appearance/rangeAppearanceParser.d.ts +3 -0
  137. package/dist/parse/body/control/InputControlDefinition.d.ts +3 -0
  138. package/dist/parse/body/control/ItemDefinition.d.ts +14 -0
  139. package/dist/parse/body/control/ItemsetDefinition.d.ts +18 -0
  140. package/dist/parse/body/control/RangeControlDefinition.d.ts +31 -2
  141. package/dist/parse/body/control/RankControlDefinition.d.ts +7 -3
  142. package/dist/parse/body/control/{select/SelectDefinition.d.ts → SelectControlDefinition.d.ts} +9 -9
  143. package/dist/parse/expression/ItemsetNodesetExpression.d.ts +1 -1
  144. package/dist/parse/expression/ItemsetValueExpression.d.ts +1 -1
  145. package/dist/parse/model/BindDefinition.d.ts +3 -1
  146. package/dist/parse/model/BindPreloadDefinition.d.ts +42 -0
  147. package/dist/parse/model/DescendentNodeDefinition.d.ts +4 -13
  148. package/dist/parse/model/ItextTranslationsDefinition.d.ts +18 -0
  149. package/dist/parse/model/LeafNodeDefinition.d.ts +9 -7
  150. package/dist/parse/model/ModelDefinition.d.ts +9 -2
  151. package/dist/parse/model/NodeDefinition.d.ts +30 -45
  152. package/dist/parse/model/NoteNodeDefinition.d.ts +7 -5
  153. package/dist/parse/model/RangeNodeDefinition.d.ts +42 -0
  154. package/dist/parse/model/RepeatDefinition.d.ts +62 -0
  155. package/dist/parse/model/RootAttributeDefinition.d.ts +21 -0
  156. package/dist/parse/model/RootAttributeMap.d.ts +24 -0
  157. package/dist/parse/model/RootDefinition.d.ts +15 -14
  158. package/dist/parse/model/SecondaryInstance/SecondaryInstancesDefinition.d.ts +15 -2
  159. package/dist/parse/model/SecondaryInstance/assertSecondaryInstanceDefinition.d.ts +5 -0
  160. package/dist/parse/model/SecondaryInstance/defineSecondaryInstance.d.ts +5 -0
  161. package/dist/parse/model/SecondaryInstance/sources/BlankSecondaryInstanceSource.d.ts +1 -7
  162. package/dist/parse/model/SecondaryInstance/sources/CSVExternalSecondaryInstance.d.ts +1 -1
  163. package/dist/parse/model/SecondaryInstance/sources/GeoJSONExternalSecondaryInstance.d.ts +1 -1
  164. package/dist/parse/model/SecondaryInstance/sources/InternalSecondaryInstanceSource.d.ts +1 -1
  165. package/dist/parse/model/SecondaryInstance/sources/SecondaryInstanceSource.d.ts +1 -1
  166. package/dist/parse/model/SecondaryInstance/sources/XMLExternalSecondaryInstanceSource.d.ts +1 -1
  167. package/dist/parse/model/{FormSubmissionDefinition.d.ts → SubmissionDefinition.d.ts} +2 -2
  168. package/dist/parse/model/SubtreeDefinition.d.ts +9 -7
  169. package/dist/parse/model/nodeDefinitionMap.d.ts +5 -0
  170. package/dist/parse/shared/parseInstanceXML.d.ts +21 -0
  171. package/dist/parse/shared/parseStaticDocumentFromDOMSubtree.d.ts +4 -22
  172. package/dist/parse/text/ItemLabelDefinition.d.ts +1 -1
  173. package/dist/parse/text/ItemsetLabelDefinition.d.ts +2 -2
  174. package/dist/parse/text/abstract/TextElementDefinition.d.ts +1 -1
  175. package/dist/parse/xpath/semantic-analysis.d.ts +1 -3
  176. package/dist/solid.js +7247 -5813
  177. package/dist/solid.js.map +1 -1
  178. package/package.json +15 -12
  179. package/src/client/BaseNode.ts +9 -4
  180. package/src/client/BaseValueNode.ts +8 -4
  181. package/src/client/GroupNode.ts +1 -0
  182. package/src/client/InputNode.ts +38 -2
  183. package/src/client/ModelValueNode.ts +1 -0
  184. package/src/client/NoteNode.ts +43 -7
  185. package/src/client/RangeNode.ts +51 -0
  186. package/src/client/RankNode.ts +54 -0
  187. package/src/client/RootNode.ts +30 -16
  188. package/src/client/SelectNode.ts +53 -26
  189. package/src/client/SubtreeNode.ts +1 -0
  190. package/src/client/TriggerNode.ts +12 -6
  191. package/src/client/constants.ts +12 -14
  192. package/src/client/form/CreateFormInstance.ts +19 -0
  193. package/src/client/form/EditFormInstance.ts +93 -0
  194. package/src/client/form/FormInstance.ts +114 -0
  195. package/src/client/form/FormInstanceConfig.ts +18 -0
  196. package/src/client/form/FormResource.ts +1 -0
  197. package/src/client/form/LoadForm.ts +92 -0
  198. package/src/client/form/LoadFormResult.ts +103 -0
  199. package/src/client/form/RestoreFormInstance.ts +14 -0
  200. package/src/client/hierarchy.ts +7 -8
  201. package/src/client/index.ts +47 -29
  202. package/src/client/node-types.ts +3 -5
  203. package/src/client/repeat/BaseRepeatRangeNode.ts +3 -4
  204. package/src/client/repeat/RepeatInstanceNode.ts +4 -8
  205. package/src/client/repeat/RepeatRangeControlledNode.ts +2 -2
  206. package/src/client/repeat/RepeatRangeUncontrolledNode.ts +2 -2
  207. package/src/client/resources.ts +2 -2
  208. package/src/client/serialization/InstanceData.ts +16 -0
  209. package/src/client/serialization/InstanceFile.ts +9 -0
  210. package/src/client/serialization/InstancePayload.ts +126 -0
  211. package/src/client/serialization/InstancePayloadOptions.ts +28 -0
  212. package/src/client/serialization/InstanceState.ts +14 -0
  213. package/src/client/submission/{SubmissionDefinition.ts → SubmissionMeta.ts} +1 -1
  214. package/src/client/unsupported/UnsupportedControlNode.ts +2 -6
  215. package/src/entrypoints/FormInstance.ts +55 -0
  216. package/src/entrypoints/FormResult/BaseFormResult.ts +40 -0
  217. package/src/entrypoints/FormResult/BaseInstantiableFormResult.ts +109 -0
  218. package/src/entrypoints/FormResult/FormFailureResult.ts +44 -0
  219. package/src/entrypoints/FormResult/FormSuccessResult.ts +25 -0
  220. package/src/entrypoints/FormResult/FormWarningResult.ts +25 -0
  221. package/src/entrypoints/createInstance.ts +23 -0
  222. package/src/entrypoints/editInstance.ts +24 -0
  223. package/src/entrypoints/index.ts +4 -0
  224. package/src/entrypoints/loadForm.ts +154 -0
  225. package/src/entrypoints/restoreInstance.ts +27 -0
  226. package/src/error/LoadFormFailureError.ts +114 -0
  227. package/src/error/MalformedInstanceDataError.ts +3 -0
  228. package/src/error/RankMissingValueError.ts +5 -0
  229. package/src/error/RankValueTypeError.ts +13 -0
  230. package/src/error/SelectValueTypeError.ts +22 -0
  231. package/src/error/TemplatedNodeAttributeSerializationError.ts +24 -0
  232. package/src/error/XFormsSpecViolationError.ts +1 -0
  233. package/src/index.ts +2 -56
  234. package/src/instance/Group.ts +17 -15
  235. package/src/instance/InputControl.ts +58 -12
  236. package/src/instance/ModelValue.ts +19 -11
  237. package/src/instance/Note.ts +40 -64
  238. package/src/instance/PrimaryInstance.ts +70 -31
  239. package/src/instance/RangeControl.ts +119 -0
  240. package/src/instance/RankControl.ts +208 -0
  241. package/src/instance/Root.ts +21 -31
  242. package/src/instance/SelectControl.ts +228 -0
  243. package/src/instance/Subtree.ts +17 -15
  244. package/src/instance/TriggerControl.ts +50 -80
  245. package/src/instance/abstract/DescendantNode.ts +13 -8
  246. package/src/instance/abstract/InstanceNode.ts +19 -7
  247. package/src/instance/abstract/ValueNode.ts +14 -15
  248. package/src/instance/children/DescendantNodeInitOptions.ts +35 -0
  249. package/src/instance/children/buildChildren.ts +206 -0
  250. package/src/instance/children/childrenInitOptions.ts +117 -0
  251. package/src/instance/children/normalizeChildInitOptions.ts +332 -0
  252. package/src/instance/hierarchy.ts +21 -16
  253. package/src/instance/input/InitialInstanceState.ts +108 -0
  254. package/src/instance/input/InstanceAttachmentMap.ts +142 -0
  255. package/src/instance/internal-api/InstanceConfig.ts +3 -10
  256. package/src/instance/internal-api/InstanceValueContext.ts +11 -1
  257. package/src/instance/internal-api/serialization/ClientReactiveSerializableInstance.ts +20 -0
  258. package/src/instance/internal-api/serialization/ClientReactiveSerializableLeafNode.ts +43 -0
  259. package/src/instance/internal-api/serialization/ClientReactiveSerializableParentNode.ts +26 -0
  260. package/src/instance/internal-api/serialization/ClientReactiveSerializableTemplatedNode.ts +24 -0
  261. package/src/instance/internal-api/serialization/ClientReactiveSerializableValueNode.ts +28 -0
  262. package/src/instance/repeat/BaseRepeatRange.ts +21 -24
  263. package/src/instance/repeat/RepeatInstance.ts +27 -19
  264. package/src/instance/repeat/RepeatRangeControlled.ts +90 -17
  265. package/src/instance/repeat/RepeatRangeUncontrolled.ts +10 -9
  266. package/src/instance/resource.ts +18 -2
  267. package/src/instance/unsupported/UploadControl.ts +116 -5
  268. package/src/integration/xpath/EngineXPathEvaluator.ts +2 -2
  269. package/src/integration/xpath/adapter/kind.ts +1 -28
  270. package/src/integration/xpath/adapter/names.ts +66 -17
  271. package/src/integration/xpath/adapter/traversal.ts +12 -11
  272. package/src/integration/xpath/static-dom/StaticAttribute.ts +16 -7
  273. package/src/integration/xpath/static-dom/StaticDocument.ts +17 -18
  274. package/src/integration/xpath/static-dom/StaticElement.ts +211 -52
  275. package/src/integration/xpath/static-dom/StaticNode.ts +1 -1
  276. package/src/integration/xpath/static-dom/StaticParentNode.ts +22 -0
  277. package/src/integration/xpath/static-dom/staticNodeName.ts +20 -0
  278. package/src/lib/client-reactivity/instance-state/createNodeRangeInstanceState.ts +17 -0
  279. package/src/lib/client-reactivity/instance-state/createParentNodeInstanceState.ts +22 -0
  280. package/src/lib/client-reactivity/instance-state/createPrimaryInstanceState.ts +12 -0
  281. package/src/lib/client-reactivity/instance-state/createRootInstanceState.ts +19 -0
  282. package/src/lib/client-reactivity/instance-state/createTemplatedNodeInstanceState.ts +31 -0
  283. package/src/lib/client-reactivity/instance-state/createValueNodeInstanceState.ts +21 -0
  284. package/src/lib/client-reactivity/instance-state/prepareInstancePayload.ts +173 -0
  285. package/src/lib/codecs/Geopoint/Geopoint.ts +150 -0
  286. package/src/lib/codecs/Geopoint/GeopointValueCodec.ts +20 -0
  287. package/src/lib/codecs/NoteCodec.ts +32 -0
  288. package/src/lib/codecs/RangeCodec.ts +65 -0
  289. package/src/lib/codecs/TempUnsupportedControlCodec.ts +32 -0
  290. package/src/lib/codecs/TriggerCodec.ts +64 -0
  291. package/src/lib/codecs/ValueArrayCodec.ts +42 -0
  292. package/src/lib/codecs/ValueCodec.ts +2 -2
  293. package/src/lib/codecs/getNoteCodec.ts +27 -0
  294. package/src/lib/codecs/getSelectCodec.ts +27 -0
  295. package/src/lib/codecs/getSharedValueCodec.ts +5 -3
  296. package/src/lib/codecs/items/BaseItemCodec.ts +20 -0
  297. package/src/lib/codecs/items/MultipleValueItemCodec.ts +28 -0
  298. package/src/lib/codecs/items/SingleValueItemCodec.ts +67 -0
  299. package/src/lib/dom/query.ts +1 -2
  300. package/src/lib/names/NamespaceDeclaration.ts +106 -0
  301. package/src/lib/names/NamespaceDeclarationMap.ts +228 -0
  302. package/src/lib/names/NamespaceURL.ts +44 -0
  303. package/src/lib/names/QualifiedName.ts +170 -0
  304. package/src/lib/names/UnprefixedXFormsName.ts +12 -0
  305. package/src/lib/number-parsers.ts +25 -0
  306. package/src/lib/reactivity/createInstanceValueState.ts +69 -43
  307. package/src/lib/reactivity/{createSelectItems.ts → createItemCollection.ts} +41 -36
  308. package/src/lib/xml-serialization.ts +76 -9
  309. package/src/parse/XFormDOM.ts +141 -21
  310. package/src/parse/XFormDefinition.ts +1 -4
  311. package/src/parse/body/BodyDefinition.ts +4 -4
  312. package/src/parse/body/appearance/rangeAppearanceParser.ts +11 -0
  313. package/src/parse/body/control/InputControlDefinition.ts +9 -0
  314. package/src/parse/body/control/{select/ItemDefinition.ts → ItemDefinition.ts} +8 -6
  315. package/src/parse/body/control/{select/ItemsetDefinition.ts → ItemsetDefinition.ts} +11 -9
  316. package/src/parse/body/control/RangeControlDefinition.ts +91 -6
  317. package/src/parse/body/control/RankControlDefinition.ts +25 -7
  318. package/src/parse/body/control/{select/SelectDefinition.ts → SelectControlDefinition.ts} +9 -9
  319. package/src/parse/expression/ItemsetNodesetExpression.ts +1 -1
  320. package/src/parse/expression/ItemsetValueExpression.ts +1 -1
  321. package/src/parse/model/BindDefinition.ts +4 -0
  322. package/src/parse/model/BindPreloadDefinition.ts +100 -0
  323. package/src/parse/model/DescendentNodeDefinition.ts +7 -25
  324. package/src/parse/model/ItextTranslationsDefinition.ts +79 -0
  325. package/src/parse/model/LeafNodeDefinition.ts +13 -8
  326. package/src/parse/model/ModelDefinition.ts +36 -3
  327. package/src/parse/model/NodeDefinition.ts +38 -85
  328. package/src/parse/model/NoteNodeDefinition.ts +12 -10
  329. package/src/parse/model/RangeNodeDefinition.ts +119 -0
  330. package/src/parse/model/RepeatDefinition.ts +382 -0
  331. package/src/parse/model/RootAttributeDefinition.ts +44 -0
  332. package/src/parse/model/RootAttributeMap.ts +49 -0
  333. package/src/parse/model/RootDefinition.ts +42 -43
  334. package/src/parse/model/SecondaryInstance/SecondaryInstancesDefinition.ts +23 -2
  335. package/src/parse/model/SecondaryInstance/assertSecondaryInstanceDefinition.ts +14 -0
  336. package/src/parse/model/SecondaryInstance/defineSecondaryInstance.ts +32 -0
  337. package/src/parse/model/SecondaryInstance/sources/BlankSecondaryInstanceSource.ts +3 -24
  338. package/src/parse/model/SecondaryInstance/sources/CSVExternalSecondaryInstance.ts +33 -86
  339. package/src/parse/model/SecondaryInstance/sources/GeoJSONExternalSecondaryInstance.ts +64 -136
  340. package/src/parse/model/SecondaryInstance/sources/InternalSecondaryInstanceSource.ts +9 -7
  341. package/src/parse/model/SecondaryInstance/sources/SecondaryInstanceSource.ts +1 -1
  342. package/src/parse/model/SecondaryInstance/sources/XMLExternalSecondaryInstanceSource.ts +7 -7
  343. package/src/parse/model/{FormSubmissionDefinition.ts → SubmissionDefinition.ts} +2 -2
  344. package/src/parse/model/SubtreeDefinition.ts +15 -16
  345. package/src/parse/model/nodeDefinitionMap.ts +34 -0
  346. package/src/parse/shared/parseInstanceXML.ts +79 -0
  347. package/src/parse/shared/parseStaticDocumentFromDOMSubtree.ts +46 -131
  348. package/src/parse/text/ItemLabelDefinition.ts +1 -1
  349. package/src/parse/text/ItemsetLabelDefinition.ts +2 -2
  350. package/src/parse/text/abstract/TextElementDefinition.ts +1 -1
  351. package/src/parse/xpath/semantic-analysis.ts +4 -3
  352. package/dist/client/EngineConfig.d.ts +0 -79
  353. package/dist/client/submission/SubmissionData.d.ts +0 -7
  354. package/dist/client/submission/SubmissionInstanceFile.d.ts +0 -6
  355. package/dist/client/submission/SubmissionOptions.d.ts +0 -23
  356. package/dist/client/submission/SubmissionResult.d.ts +0 -91
  357. package/dist/client/submission/SubmissionState.d.ts +0 -12
  358. package/dist/client/unsupported/RangeNode.d.ts +0 -9
  359. package/dist/client/unsupported/RankNode.d.ts +0 -9
  360. package/dist/instance/SelectField.d.ts +0 -58
  361. package/dist/instance/abstract/UnsupportedControl.d.ts +0 -53
  362. package/dist/instance/index.d.ts +0 -8
  363. package/dist/instance/internal-api/ValueContext.d.ts +0 -23
  364. package/dist/instance/internal-api/submission/ClientReactiveSubmittableInstance.d.ts +0 -14
  365. package/dist/instance/internal-api/submission/ClientReactiveSubmittableLeafNode.d.ts +0 -31
  366. package/dist/instance/internal-api/submission/ClientReactiveSubmittableParentNode.d.ts +0 -18
  367. package/dist/instance/internal-api/submission/ClientReactiveSubmittableValueNode.d.ts +0 -17
  368. package/dist/instance/unsupported/RangeControl.d.ts +0 -6
  369. package/dist/instance/unsupported/RankControl.d.ts +0 -6
  370. package/dist/integration/xpath/static-dom/StaticNamedNode.d.ts +0 -17
  371. package/dist/lib/client-reactivity/submission/createInstanceSubmissionState.d.ts +0 -3
  372. package/dist/lib/client-reactivity/submission/createLeafNodeSubmissionState.d.ts +0 -3
  373. package/dist/lib/client-reactivity/submission/createNodeRangeSubmissionState.d.ts +0 -4
  374. package/dist/lib/client-reactivity/submission/createParentNodeSubmissionState.d.ts +0 -4
  375. package/dist/lib/client-reactivity/submission/createValueNodeSubmissionState.d.ts +0 -3
  376. package/dist/lib/client-reactivity/submission/prepareSubmission.d.ts +0 -8
  377. package/dist/lib/reactivity/createSelectItems.d.ts +0 -16
  378. package/dist/lib/reactivity/createValueState.d.ts +0 -40
  379. package/dist/parse/body/control/select/ItemDefinition.d.ts +0 -13
  380. package/dist/parse/body/control/select/ItemsetDefinition.d.ts +0 -17
  381. package/dist/parse/body/control/select/ItemsetNodesetContext.d.ts +0 -9
  382. package/dist/parse/model/ItextTranslation/ItextTranslationDefinition.d.ts +0 -4
  383. package/dist/parse/model/ItextTranslation/ItextTranslationRootDefinition.d.ts +0 -8
  384. package/dist/parse/model/ItextTranslation/ItextTranslationsDefinition.d.ts +0 -8
  385. package/dist/parse/model/RepeatInstanceDefinition.d.ts +0 -14
  386. package/dist/parse/model/RepeatRangeDefinition.d.ts +0 -29
  387. package/dist/parse/model/RepeatTemplateDefinition.d.ts +0 -28
  388. package/dist/parse/model/SecondaryInstance/SecondaryInstanceDefinition.d.ts +0 -4
  389. package/dist/parse/model/SecondaryInstance/SecondaryInstanceRootDefinition.d.ts +0 -7
  390. package/src/client/EngineConfig.ts +0 -84
  391. package/src/client/submission/SubmissionData.ts +0 -12
  392. package/src/client/submission/SubmissionInstanceFile.ts +0 -9
  393. package/src/client/submission/SubmissionOptions.ts +0 -28
  394. package/src/client/submission/SubmissionResult.ts +0 -124
  395. package/src/client/submission/SubmissionState.ts +0 -14
  396. package/src/client/unsupported/RangeNode.ts +0 -14
  397. package/src/client/unsupported/RankNode.ts +0 -14
  398. package/src/instance/SelectField.ts +0 -263
  399. package/src/instance/abstract/UnsupportedControl.ts +0 -174
  400. package/src/instance/children.ts +0 -158
  401. package/src/instance/index.ts +0 -55
  402. package/src/instance/internal-api/ValueContext.ts +0 -28
  403. package/src/instance/internal-api/submission/ClientReactiveSubmittableInstance.ts +0 -20
  404. package/src/instance/internal-api/submission/ClientReactiveSubmittableLeafNode.ts +0 -42
  405. package/src/instance/internal-api/submission/ClientReactiveSubmittableParentNode.ts +0 -25
  406. package/src/instance/internal-api/submission/ClientReactiveSubmittableValueNode.ts +0 -23
  407. package/src/instance/unsupported/RangeControl.ts +0 -9
  408. package/src/instance/unsupported/RankControl.ts +0 -9
  409. package/src/integration/xpath/static-dom/StaticNamedNode.ts +0 -45
  410. package/src/lib/client-reactivity/submission/createInstanceSubmissionState.ts +0 -12
  411. package/src/lib/client-reactivity/submission/createLeafNodeSubmissionState.ts +0 -20
  412. package/src/lib/client-reactivity/submission/createNodeRangeSubmissionState.ts +0 -17
  413. package/src/lib/client-reactivity/submission/createParentNodeSubmissionState.ts +0 -22
  414. package/src/lib/client-reactivity/submission/createValueNodeSubmissionState.ts +0 -21
  415. package/src/lib/client-reactivity/submission/prepareSubmission.ts +0 -172
  416. package/src/lib/reactivity/createValueState.ts +0 -200
  417. package/src/parse/body/control/select/ItemsetNodesetContext.ts +0 -21
  418. package/src/parse/model/ItextTranslation/ItextTranslationDefinition.ts +0 -4
  419. package/src/parse/model/ItextTranslation/ItextTranslationRootDefinition.ts +0 -41
  420. package/src/parse/model/ItextTranslation/ItextTranslationsDefinition.ts +0 -31
  421. package/src/parse/model/RepeatInstanceDefinition.ts +0 -34
  422. package/src/parse/model/RepeatRangeDefinition.ts +0 -94
  423. package/src/parse/model/RepeatTemplateDefinition.ts +0 -145
  424. package/src/parse/model/SecondaryInstance/SecondaryInstanceDefinition.ts +0 -4
  425. package/src/parse/model/SecondaryInstance/SecondaryInstanceRootDefinition.ts +0 -12
@@ -1,29 +1,47 @@
1
- import type { EngineConfig } from './EngineConfig.ts';
2
- import type { RootNode } from './RootNode.ts';
3
-
4
- export type FormResource = Blob | URL | string;
5
-
6
- export interface InitializeFormOptions {
7
- readonly config: EngineConfig;
8
-
9
- // E.g. opening a submitted form instance for edit. TDOO: the `FormResource`
10
- // name is shared here for both init input and initial state, but the shape of
11
- // those resources would differ. Probably a more generic name is appropriate.
12
- readonly initialState?: FormResource;
13
- }
14
-
15
- /**
16
- * Creates an instance of a form to be filled (or edited) by a client.
17
- */
18
- // TODO: initialization is represented as asynchronous here, so that any
19
- // requisite resources can be retrieved before passing control to a client. This
20
- // is an obvious first step, but we can consider a more complex (if optional)
21
- // flow, e.g.:
22
- //
23
- // - Where it can be determined upfront that the form has no need to perform IO
24
- // - Where the IO may have already been performed (e.g. offline, other potential
25
- // caching cases where appropriate)
26
- export type InitializeForm = (
27
- input: FormResource,
28
- options?: InitializeFormOptions
29
- ) => Promise<RootNode>;
1
+ export type * from './constants.ts';
2
+ export * as constants from './constants.ts';
3
+ export type * from './form/CreateFormInstance.ts';
4
+ export type * from './form/EditFormInstance.ts';
5
+ export type * from './form/FormInstance.ts';
6
+ export type * from './form/FormInstanceConfig.ts';
7
+ export type * from './form/FormResource.ts';
8
+ export type * from './form/LoadForm.ts';
9
+ export type * from './form/LoadFormResult.ts';
10
+ export type * from './form/RestoreFormInstance.ts';
11
+ export type * from './FormLanguage.ts';
12
+ export type * from './GroupNode.ts';
13
+ export type {
14
+ AnyChildNode,
15
+ AnyControlNode,
16
+ AnyLeafNode,
17
+ AnyNode,
18
+ AnyParentNode,
19
+ AnyUnsupportedControlNode,
20
+ GeneralChildNode,
21
+ GeneralParentNode,
22
+ RepeatRangeNode,
23
+ } from './hierarchy.ts';
24
+ export type * from './InputNode.ts';
25
+ export type * from './ModelValueNode.ts';
26
+ export type * from './NoteNode.ts';
27
+ export type * from './OpaqueReactiveObjectFactory.ts';
28
+ export type * from './RangeNode.ts';
29
+ export type * from './RankNode.ts';
30
+ export type * from './repeat/RepeatInstanceNode.ts';
31
+ export type * from './repeat/RepeatRangeControlledNode.ts';
32
+ export type * from './repeat/RepeatRangeUncontrolledNode.ts';
33
+ export type * from './resources.ts';
34
+ export type * from './RootNode.ts';
35
+ export type * from './SelectNode.ts';
36
+ export type * from './serialization/InstanceData.ts';
37
+ export type * from './serialization/InstanceFile.ts';
38
+ export type * from './serialization/InstancePayload.ts';
39
+ export type * from './serialization/InstancePayloadOptions.ts';
40
+ export type * from './serialization/InstanceState.ts';
41
+ export type * from './submission/SubmissionMeta.ts';
42
+ export type * from './SubtreeNode.ts';
43
+ export type * from './TextRange.ts';
44
+ export type * from './TriggerNode.ts';
45
+ export type * from './unsupported/UploadNode.ts';
46
+ export type * from './validation.ts';
47
+ export type * from './ValueType.ts';
@@ -1,8 +1,4 @@
1
- // prettier-ignore
2
- export type UnsupportedControlNodeType =
3
- | 'range'
4
- | 'rank'
5
- | 'upload';
1
+ export type UnsupportedControlNodeType = 'upload';
6
2
 
7
3
  // prettier-ignore
8
4
  export type RepeatRangeNodeType =
@@ -17,6 +13,8 @@ export type LeafNodeType =
17
13
  | 'select'
18
14
  | 'input'
19
15
  | 'trigger'
16
+ | 'range'
17
+ | 'rank'
20
18
  | UnsupportedControlNodeType;
21
19
 
22
20
  // prettier-ignore
@@ -1,4 +1,3 @@
1
- import type { AnyRepeatRangeDefinition } from '../../parse/model/RepeatRangeDefinition.ts';
2
1
  import type { BaseNode, BaseNodeState } from '../BaseNode.ts';
3
2
  import type { NodeAppearances } from '../NodeAppearances.ts';
4
3
  import type { RootNode } from '../RootNode.ts';
@@ -6,7 +5,7 @@ import type { TextRange } from '../TextRange.ts';
6
5
  import type { GeneralParentNode } from '../hierarchy.ts';
7
6
  import type { RepeatRangeNodeType } from '../node-types.ts';
8
7
  import type { AncestorNodeValidationState } from '../validation.ts';
9
- import type { RepeatInstanceNode } from './RepeatInstanceNode.ts';
8
+ import type { AnyRepeatDefinition, RepeatInstanceNode } from './RepeatInstanceNode.ts';
10
9
 
11
10
  export interface BaseRepeatRangeNodeState extends BaseNodeState {
12
11
  get hint(): null;
@@ -26,7 +25,7 @@ export interface BaseRepeatRangeNodeState extends BaseNodeState {
26
25
  get value(): null;
27
26
  }
28
27
 
29
- export type RepeatRangeNodeAppearances = NodeAppearances<AnyRepeatRangeDefinition>;
28
+ export type RepeatRangeNodeAppearances = NodeAppearances<AnyRepeatDefinition>;
30
29
 
31
30
  /**
32
31
  * Represents a contiguous set of zero or more {@link RepeatInstanceNode}s
@@ -95,7 +94,7 @@ export type RepeatRangeNodeAppearances = NodeAppearances<AnyRepeatRangeDefinitio
95
94
  export interface BaseRepeatRangeNode extends BaseNode {
96
95
  readonly nodeType: RepeatRangeNodeType;
97
96
  readonly appearances: RepeatRangeNodeAppearances;
98
- readonly definition: AnyRepeatRangeDefinition;
97
+ readonly definition: AnyRepeatDefinition;
99
98
  readonly root: RootNode;
100
99
  readonly parent: GeneralParentNode;
101
100
  readonly currentState: BaseRepeatRangeNodeState;
@@ -1,5 +1,4 @@
1
- import type { RepeatInstanceDefinition } from '../../parse/model/RepeatInstanceDefinition.ts';
2
- import type { RepeatTemplateDefinition } from '../../parse/model/RepeatTemplateDefinition.ts';
1
+ import type { AnyRepeatDefinition } from '../../parse/model/RepeatDefinition.ts';
3
2
  import type { BaseNode, BaseNodeState } from '../BaseNode.ts';
4
3
  import type { GeneralChildNode, RepeatRangeNode } from '../hierarchy.ts';
5
4
  import type { NodeAppearances } from '../NodeAppearances.ts';
@@ -19,17 +18,14 @@ export interface RepeatInstanceNodeState extends BaseNodeState {
19
18
  get value(): null;
20
19
  }
21
20
 
22
- // prettier-ignore
23
- export type RepeatDefinition =
24
- | RepeatInstanceDefinition
25
- | RepeatTemplateDefinition;
21
+ export type { AnyRepeatDefinition };
26
22
 
27
- export type RepeatInstanceNodeAppearances = NodeAppearances<RepeatDefinition>;
23
+ export type RepeatInstanceNodeAppearances = NodeAppearances<AnyRepeatDefinition>;
28
24
 
29
25
  export interface RepeatInstanceNode extends BaseNode {
30
26
  readonly nodeType: 'repeat-instance';
31
27
  readonly appearances: RepeatInstanceNodeAppearances;
32
- readonly definition: RepeatDefinition;
28
+ readonly definition: AnyRepeatDefinition;
33
29
  readonly root: RootNode;
34
30
 
35
31
  /**
@@ -1,4 +1,4 @@
1
- import type { ControlledRepeatRangeDefinition } from '../../parse/model/RepeatRangeDefinition.ts';
1
+ import type { ControlledRepeatDefinition } from '../../parse/model/RepeatDefinition.ts';
2
2
  import type { BaseRepeatRangeNode, BaseRepeatRangeNodeState } from './BaseRepeatRangeNode.ts';
3
3
  import type { RepeatRangeUncontrolledNode } from './RepeatRangeUncontrolledNode.ts';
4
4
 
@@ -16,5 +16,5 @@ export interface RepeatRangeControlledState extends BaseRepeatRangeNodeState {}
16
16
  */
17
17
  export interface RepeatRangeControlledNode extends BaseRepeatRangeNode {
18
18
  readonly nodeType: 'repeat-range:controlled';
19
- readonly definition: ControlledRepeatRangeDefinition;
19
+ readonly definition: ControlledRepeatDefinition;
20
20
  }
@@ -1,4 +1,4 @@
1
- import type { UncontrolledRepeatRangeDefinition } from '../../parse/model/RepeatRangeDefinition.ts';
1
+ import type { UncontrolledRepeatDefinition } from '../../parse/model/RepeatDefinition.ts';
2
2
  import type { RootNode } from '../RootNode.ts';
3
3
  import type { BaseRepeatRangeNode, BaseRepeatRangeNodeState } from './BaseRepeatRangeNode.ts';
4
4
 
@@ -14,7 +14,7 @@ export interface RepeatRangeUncontrolledState extends BaseRepeatRangeNodeState {
14
14
  */
15
15
  export interface RepeatRangeUncontrolledNode extends BaseRepeatRangeNode {
16
16
  readonly nodeType: 'repeat-range:uncontrolled';
17
- readonly definition: UncontrolledRepeatRangeDefinition;
17
+ readonly definition: UncontrolledRepeatDefinition;
18
18
 
19
19
  addInstances(afterIndex?: number, count?: number): RootNode;
20
20
  removeInstances(startIndex: number, count?: number): RootNode;
@@ -1,5 +1,5 @@
1
1
  import type { JRResourceURL } from '@getodk/common/jr-resources/JRResourceURL.ts';
2
- import type { initializeForm } from '../instance/index.ts';
2
+ import type { loadForm } from '../entrypoints/loadForm.ts';
3
3
 
4
4
  interface FetchResourceHeadersIterator<T>
5
5
  extends IteratorObject<
@@ -85,7 +85,7 @@ export interface FetchResourceResponseHeaders {
85
85
  *
86
86
  * Furthermore, if the engine intends to read {@link body} (or its indirect
87
87
  * {@link blob} or {@link text} consumers), it will do so in the course of a
88
- * client's call to {@link initializeForm}, and before the
88
+ * client's call to {@link loadForm}, and before the
89
89
  * {@link Promise<PrimaryInstance>} returned by that call is resolved.
90
90
  */
91
91
  export interface FetchResourceResponse {
@@ -0,0 +1,16 @@
1
+ import type { INSTANCE_FILE_NAME, InstanceFile } from './InstanceFile.ts';
2
+
3
+ export type InstanceAttachmentFileName = string;
4
+
5
+ export interface InstanceData extends FormData {
6
+ get(name: INSTANCE_FILE_NAME): InstanceFile;
7
+
8
+ /**
9
+ * @todo Can we guarantee (both in static types and at runtime) that
10
+ * {@link InstanceData} only contains files?
11
+ */
12
+ get(name: InstanceAttachmentFileName): FormDataEntryValue | null;
13
+
14
+ has(name: INSTANCE_FILE_NAME): true;
15
+ has(name: InstanceAttachmentFileName): boolean;
16
+ }
@@ -0,0 +1,9 @@
1
+ import type { INSTANCE_FILE_NAME, INSTANCE_FILE_TYPE } from '../constants.ts';
2
+
3
+ // Re-export for convenient `InstanceFile` construction/access flows
4
+ export type { INSTANCE_FILE_NAME, INSTANCE_FILE_TYPE };
5
+
6
+ export interface InstanceFile extends File {
7
+ readonly name: INSTANCE_FILE_NAME;
8
+ readonly type: INSTANCE_FILE_TYPE;
9
+ }
@@ -0,0 +1,126 @@
1
+ import type { SubmissionMeta } from '../submission/SubmissionMeta.ts';
2
+ import type { AnyViolation, DescendantNodeViolationReference } from '../validation.ts';
3
+ import type { InstanceData } from './InstanceData.ts';
4
+ import type { InstancePayloadOptions, InstancePayloadType } from './InstancePayloadOptions.ts';
5
+
6
+ // prettier-ignore
7
+ export type InstancePayloadStatus =
8
+ // eslint-disable-next-line @typescript-eslint/sort-type-constituents
9
+ | 'pending'
10
+ | 'max-size-exceeded'
11
+ | 'ready';
12
+
13
+ // prettier-ignore
14
+ type InstancePayloadData<PayloadType extends InstancePayloadType> = {
15
+ chunked: readonly [InstanceData, ...InstanceData[]];
16
+ monolithic: readonly [InstanceData];
17
+ }[PayloadType];
18
+
19
+ /**
20
+ * Provides detail about an individual instance attachment {@link File}s which
21
+ * exceeds the client-specified {@link maxSize} for a
22
+ * {@link ChunkedInstancePayload | chunked instance payload}. Clients may use
23
+ * this value to provide guidance to users.
24
+ *
25
+ * @todo We may want to consider (a) making {@link maxSize} a configuration the
26
+ * client can provide when initializing a form instance, rather than only when
27
+ * serializing an instance payload; and then (b) treating a maximum size
28
+ * violation as another kind of node-level violation. This would go beyond the
29
+ * kinds of validation specified by ODK XForms, but it would make a lot of
30
+ * _conceptual sense_.
31
+ *
32
+ * It would almost certainly be helpful to alert users to violations as the
33
+ * occur, rather than only at instance payload serialization time (where they
34
+ * have likely already moved on). This is something clients can do without
35
+ * engine support, but it would likely promote good usability patterns if the
36
+ * engine makes it an obvious and uniform option at the main engine/client
37
+ * entrypoint.
38
+ *
39
+ * @todo If we consider the above, we'd want to reframe _this interface_ to
40
+ * match the shape of other {@link AnyViolation | violations} (adding it as a
41
+ * member of that union). We'd also likely eliminate
42
+ * {@link MaxSizeExceededResult} in the process, since
43
+ * {@link PendingInstancePayload} would then cover the case.
44
+ */
45
+ interface MaxSizeViolation {
46
+ /**
47
+ * Specifies the index of
48
+ * {@link InstancePayloadData<'chunked'> | chunked instance payload data}
49
+ * where an instance attachment {@link File} exceeds the client-specified
50
+ * {@link maxSize}.
51
+ */
52
+ readonly dataIndex: number;
53
+
54
+ /**
55
+ * Specifies the name of the file which exceeds the client-specified
56
+ * {@link maxSize}. This name can also be used as a key to access the
57
+ * violating {@link File}/instance attachment, in the {@link InstanceData} at
58
+ * the specified {@link dataIndex}.
59
+ */
60
+ readonly fileName: string;
61
+
62
+ /**
63
+ * Reflects the client-specified maximum size for each chunk of a
64
+ * {@link ChunkedInstancePayload | chunked instance payload}.
65
+ */
66
+ readonly maxSize: number;
67
+
68
+ /**
69
+ * Details the actual size of the violating {@link File}/instance attachment.
70
+ * Along with {@link maxSize}. Clients may use the delta between this value
71
+ * and {@link maxSize} to provide detailed guidance to users.
72
+ */
73
+ readonly actualSize: number;
74
+ }
75
+
76
+ // prettier-ignore
77
+ type InstancePayloadViolation =
78
+ | DescendantNodeViolationReference
79
+ | MaxSizeViolation;
80
+
81
+ interface BaseInstancePayload<PayloadType extends InstancePayloadType> {
82
+ readonly payloadType: PayloadType;
83
+ readonly status: InstancePayloadStatus;
84
+ readonly submissionMeta: SubmissionMeta;
85
+
86
+ get violations(): readonly InstancePayloadViolation[] | null;
87
+
88
+ /**
89
+ * Instance attachment data may be chunked according to the
90
+ * {@link InstancePayloadOptions.maxSize | maxSize instance payload option}
91
+ */
92
+ readonly data: InstancePayloadData<PayloadType>;
93
+ }
94
+
95
+ interface PendingInstancePayload<PayloadType extends InstancePayloadType>
96
+ extends BaseInstancePayload<PayloadType> {
97
+ readonly status: 'pending';
98
+ get violations(): readonly DescendantNodeViolationReference[];
99
+ }
100
+
101
+ interface MaxSizeExceededResult extends BaseInstancePayload<'chunked'> {
102
+ readonly status: 'max-size-exceeded';
103
+ get violations(): readonly MaxSizeViolation[];
104
+ }
105
+
106
+ interface ReadyInstancePayload<PayloadType extends InstancePayloadType>
107
+ extends BaseInstancePayload<PayloadType> {
108
+ readonly status: 'ready';
109
+ get violations(): null;
110
+ }
111
+
112
+ // prettier-ignore
113
+ export type ChunkedInstancePayload =
114
+ | MaxSizeExceededResult
115
+ | PendingInstancePayload<'chunked'>
116
+ | ReadyInstancePayload<'chunked'>;
117
+
118
+ export type MonolithicInstancePayload =
119
+ | PendingInstancePayload<'monolithic'>
120
+ | ReadyInstancePayload<'monolithic'>;
121
+
122
+ // prettier-ignore
123
+ export type InstancePayload<PayloadType extends InstancePayloadType> = {
124
+ chunked: ChunkedInstancePayload;
125
+ monolithic: MonolithicInstancePayload;
126
+ }[PayloadType];
@@ -0,0 +1,28 @@
1
+ export type InstancePayloadType = 'chunked' | 'monolithic';
2
+
3
+ interface BaseInstancePayloadOptions<PayloadType extends InstancePayloadType> {
4
+ readonly payloadType?: PayloadType | undefined;
5
+
6
+ /**
7
+ * As described in the
8
+ * {@link https://docs.getodk.org/openrosa-form-submission/#extended-transmission-considerations | OpenRosa Form Submission API},
9
+ * clients may obtain this value from an OpenRosa server's
10
+ * `X-OpenRosa-Accept-Content-Length` header.
11
+ */
12
+ readonly maxSize?: number;
13
+ }
14
+
15
+ interface ChunkedInstancePayloadOptions extends BaseInstancePayloadOptions<'chunked'> {
16
+ readonly maxSize: number;
17
+ }
18
+
19
+ interface MonolithicInstancePayloadOptions extends BaseInstancePayloadOptions<'monolithic'> {
20
+ readonly payloadType?: 'monolithic' | undefined;
21
+ readonly maxSize?: never;
22
+ }
23
+
24
+ // prettier-ignore
25
+ export type InstancePayloadOptions<PayloadType extends InstancePayloadType = 'monolithic'> = {
26
+ chunked: ChunkedInstancePayloadOptions;
27
+ monolithic: MonolithicInstancePayloadOptions;
28
+ }[PayloadType];
@@ -0,0 +1,14 @@
1
+ import type { RootNode } from '../RootNode.ts';
2
+
3
+ export interface InstanceState {
4
+ /**
5
+ * Represents the serialized XML state of a given node. The value produced in
6
+ * {@link RootNode.instanceState} is the same serialization which will be
7
+ * produced for a complete instance.
8
+ *
9
+ * @todo Note that this particular aspect of the design doesn't yet address
10
+ * production of unique file names. As such, this may change as we introduce
11
+ * affected data types (and their supporting nodes).
12
+ */
13
+ get instanceXML(): string;
14
+ }
@@ -1,4 +1,4 @@
1
- export interface SubmissionDefinition {
1
+ export interface SubmissionMeta {
2
2
  /**
3
3
  * @see {@link https://getodk.github.io/xforms-spec/#submission-attributes | `action` submission attribute}
4
4
  */
@@ -1,6 +1,4 @@
1
1
  import type { UnknownAppearanceDefinition } from '../../parse/body/appearance/unknownAppearanceParser.ts';
2
- import type { RangeControlDefinition } from '../../parse/body/control/RangeControlDefinition.ts';
3
- import type { RankControlDefinition } from '../../parse/body/control/RankControlDefinition.ts';
4
2
  import type { UploadControlDefinition } from '../../parse/body/control/UploadControlDefinition.ts';
5
3
  import type { LeafNodeDefinition } from '../../parse/model/LeafNodeDefinition.ts';
6
4
  import type { BaseNode, BaseNodeState } from '../BaseNode.ts';
@@ -15,10 +13,8 @@ export interface UnsupportedControlNodeState extends BaseNodeState {
15
13
  get value(): unknown;
16
14
  }
17
15
 
18
- export type UnsupportedControlElementDefinition =
19
- | RangeControlDefinition
20
- | RankControlDefinition
21
- | UploadControlDefinition;
16
+ // prettier-ignore
17
+ export type UnsupportedControlElementDefinition = UploadControlDefinition;
22
18
 
23
19
  export interface UnsupportedControlDefinition extends LeafNodeDefinition {
24
20
  readonly bodyElement: UnsupportedControlElementDefinition;
@@ -0,0 +1,55 @@
1
+ import { identity } from '@getodk/common/lib/identity.ts';
2
+ import type {
3
+ FormInstance as ClientFormInstance,
4
+ FormInstanceInitializationMode,
5
+ } from '../client/form/FormInstance.ts';
6
+ import type { FormInstanceConfig } from '../client/index.ts';
7
+ import type { InstanceConfig } from '../instance/internal-api/InstanceConfig.ts';
8
+ import type {
9
+ BasePrimaryInstanceOptions,
10
+ PrimaryInstanceInitialState,
11
+ PrimaryInstanceOptions,
12
+ } from '../instance/PrimaryInstance.ts';
13
+ import { PrimaryInstance } from '../instance/PrimaryInstance.ts';
14
+ import type { Root } from '../instance/Root.ts';
15
+ import type { FormSuccessResult } from './FormResult/FormSuccessResult.ts';
16
+ import type { FormWarningResult } from './FormResult/FormWarningResult.ts';
17
+
18
+ // prettier-ignore
19
+ export type InstantiableFormResult =
20
+ | FormSuccessResult
21
+ | FormWarningResult;
22
+
23
+ interface FormInstanceOptions<Mode extends FormInstanceInitializationMode> {
24
+ readonly mode: Mode;
25
+ readonly initialState: PrimaryInstanceInitialState<Mode>;
26
+ readonly instanceOptions: BasePrimaryInstanceOptions;
27
+ readonly instanceConfig: FormInstanceConfig;
28
+ }
29
+
30
+ export class FormInstance<Mode extends FormInstanceInitializationMode>
31
+ implements ClientFormInstance<Mode>
32
+ {
33
+ readonly mode: Mode;
34
+ readonly root: Root;
35
+
36
+ constructor(
37
+ readonly formResult: InstantiableFormResult,
38
+ options: FormInstanceOptions<Mode>
39
+ ) {
40
+ const { mode, initialState } = options;
41
+ const config: InstanceConfig = {
42
+ clientStateFactory: options.instanceConfig.stateFactory ?? identity,
43
+ };
44
+ const primaryInstanceOptions: PrimaryInstanceOptions<Mode> = {
45
+ ...options.instanceOptions,
46
+ mode,
47
+ initialState,
48
+ config,
49
+ };
50
+ const { root } = new PrimaryInstance(primaryInstanceOptions);
51
+
52
+ this.mode = mode;
53
+ this.root = root;
54
+ }
55
+ }
@@ -0,0 +1,40 @@
1
+ import type {
2
+ FormResultStatus,
3
+ LoadFormFailureResult,
4
+ LoadFormResult,
5
+ LoadFormSuccessResult,
6
+ LoadFormWarningResult,
7
+ } from '../../client/form/LoadFormResult.ts';
8
+
9
+ interface LoadFormResultByStatus {
10
+ readonly success: LoadFormSuccessResult;
11
+ readonly warning: LoadFormWarningResult;
12
+ readonly failure: LoadFormFailureResult;
13
+ }
14
+
15
+ export type BaseFormResultProperty<
16
+ Status extends FormResultStatus,
17
+ Key extends keyof LoadFormResult,
18
+ > = LoadFormResultByStatus[Status][Key];
19
+
20
+ export interface BaseFormResultOptions<Status extends FormResultStatus> {
21
+ readonly status: Status;
22
+ readonly warnings: BaseFormResultProperty<Status, 'warnings'>;
23
+ readonly error: BaseFormResultProperty<Status, 'error'>;
24
+ }
25
+
26
+ export abstract class BaseFormResult<Status extends FormResultStatus> {
27
+ readonly status: Status;
28
+ readonly warnings: BaseFormResultProperty<Status, 'warnings'>;
29
+ readonly error: BaseFormResultProperty<Status, 'error'>;
30
+
31
+ abstract readonly createInstance: BaseFormResultProperty<Status, 'createInstance'>;
32
+ abstract readonly editInstance: BaseFormResultProperty<Status, 'editInstance'>;
33
+ abstract readonly restoreInstance: BaseFormResultProperty<Status, 'restoreInstance'>;
34
+
35
+ constructor(options: BaseFormResultOptions<Status>) {
36
+ this.status = options.status;
37
+ this.warnings = options.warnings;
38
+ this.error = options.error;
39
+ }
40
+ }
@@ -0,0 +1,109 @@
1
+ import type { CreateFormInstance } from '../../client/form/CreateFormInstance.ts';
2
+ import type {
3
+ EditFormInstance,
4
+ EditFormInstanceInput,
5
+ } from '../../client/form/EditFormInstance.ts';
6
+ import type { FormInstanceConfig } from '../../client/form/FormInstanceConfig.ts';
7
+ import type { FormResultStatus } from '../../client/form/LoadFormResult.ts';
8
+ import type {
9
+ RestoreFormInstance,
10
+ RestoreFormInstanceInput,
11
+ } from '../../client/form/RestoreFormInstance.ts';
12
+ import { ErrorProductionDesignPendingError } from '../../error/ErrorProductionDesignPendingError.ts';
13
+ import { InitialInstanceState } from '../../instance/input/InitialInstanceState.ts';
14
+ import type { BasePrimaryInstanceOptions } from '../../instance/PrimaryInstance.ts';
15
+ import type { FormResource } from '../../instance/resource.ts';
16
+ import type { ReactiveScope } from '../../lib/reactivity/scope.ts';
17
+ import type { InstantiableFormResult } from '../FormInstance.ts';
18
+ import { FormInstance } from '../FormInstance.ts';
19
+ import type { BaseFormResultProperty } from './BaseFormResult.ts';
20
+ import { BaseFormResult } from './BaseFormResult.ts';
21
+
22
+ // prettier-ignore
23
+ export type InstantiableFormResultStatus =
24
+ | 'success'
25
+ | 'warning';
26
+
27
+ export interface BaseInstantiableFormResultOptions<Status extends InstantiableFormResultStatus> {
28
+ readonly status: Status;
29
+ readonly warnings: BaseFormResultProperty<Status, 'warnings'>;
30
+ readonly error: null;
31
+ readonly scope: ReactiveScope;
32
+ readonly formResource: FormResource;
33
+ readonly instanceOptions: BasePrimaryInstanceOptions;
34
+ }
35
+
36
+ export abstract class BaseInstantiableFormResult<
37
+ Status extends InstantiableFormResultStatus,
38
+ > extends BaseFormResult<Status> {
39
+ readonly createInstance: CreateFormInstance;
40
+ readonly editInstance: EditFormInstance;
41
+ readonly restoreInstance: RestoreFormInstance;
42
+
43
+ constructor(options: BaseInstantiableFormResultOptions<Status>) {
44
+ const { status, warnings, error, instanceOptions } = options;
45
+
46
+ super({
47
+ status,
48
+ warnings,
49
+ error,
50
+ });
51
+
52
+ this.createInstance = (instanceConfig: FormInstanceConfig = {}) => {
53
+ this.assertInstantiable();
54
+
55
+ return new FormInstance(this, {
56
+ mode: 'create',
57
+ instanceOptions,
58
+ initialState: null,
59
+ instanceConfig,
60
+ });
61
+ };
62
+
63
+ this.editInstance = async (
64
+ input: EditFormInstanceInput,
65
+ instanceConfig: FormInstanceConfig = {}
66
+ ) => {
67
+ this.assertInstantiable();
68
+
69
+ const initialState = await InitialInstanceState.resolve(instanceOptions.model, input);
70
+
71
+ return new FormInstance(this, {
72
+ mode: 'edit',
73
+ instanceOptions,
74
+ initialState,
75
+ instanceConfig,
76
+ });
77
+ };
78
+
79
+ this.restoreInstance = async (
80
+ input: RestoreFormInstanceInput,
81
+ instanceConfig: FormInstanceConfig = {}
82
+ ) => {
83
+ this.assertInstantiable();
84
+
85
+ const initialState = await InitialInstanceState.from(instanceOptions.model, input.data);
86
+
87
+ return new FormInstance(this, {
88
+ mode: 'restore',
89
+ instanceOptions,
90
+ initialState,
91
+ instanceConfig,
92
+ });
93
+ };
94
+ }
95
+
96
+ isInstantiable(): this is InstantiableFormResult {
97
+ const self: BaseFormResult<FormResultStatus> = this satisfies BaseFormResult<FormResultStatus>;
98
+
99
+ return self.status !== 'failure';
100
+ }
101
+
102
+ assertInstantiable(): asserts this is InstantiableFormResult {
103
+ if (!this.isInstantiable()) {
104
+ throw new ErrorProductionDesignPendingError(
105
+ 'Failed to instantiate from result with status: "failure"'
106
+ );
107
+ }
108
+ }
109
+ }