@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
@@ -5,10 +5,12 @@ import type {
5
5
  InputNode,
6
6
  InputNodeAppearances,
7
7
  InputNodeInputValue,
8
+ InputNodeOptions,
8
9
  } from '../client/InputNode.ts';
9
10
  import type { TextRange } from '../client/TextRange.ts';
10
11
  import type { ValueType } from '../client/ValueType.ts';
11
12
  import type { XFormsXPathElement } from '../integration/xpath/adapter/XFormsXPathNode.ts';
13
+ import type { StaticLeafElement } from '../integration/xpath/static-dom/StaticElement.ts';
12
14
  import type { RuntimeInputValue, RuntimeValue } from '../lib/codecs/getSharedValueCodec.ts';
13
15
  import { getSharedValueCodec } from '../lib/codecs/getSharedValueCodec.ts';
14
16
  import type { CurrentState } from '../lib/reactivity/node-state/createCurrentState.ts';
@@ -17,20 +19,57 @@ import type { SharedNodeState } from '../lib/reactivity/node-state/createSharedN
17
19
  import { createSharedNodeState } from '../lib/reactivity/node-state/createSharedNodeState.ts';
18
20
  import { createFieldHint } from '../lib/reactivity/text/createFieldHint.ts';
19
21
  import { createNodeLabel } from '../lib/reactivity/text/createNodeLabel.ts';
20
- import type { Root } from './Root.ts';
22
+ import type { InputControlDefinition } from '../parse/body/control/InputControlDefinition.ts';
21
23
  import { ValueNode, type ValueNodeStateSpec } from './abstract/ValueNode.ts';
22
24
  import type { GeneralParentNode } from './hierarchy.ts';
23
25
  import type { EvaluationContext } from './internal-api/EvaluationContext.ts';
26
+ import type { ClientReactiveSerializableValueNode } from './internal-api/serialization/ClientReactiveSerializableValueNode.ts';
24
27
  import type { ValidationContext } from './internal-api/ValidationContext.ts';
25
- import type { ClientReactiveSubmittableValueNode } from './internal-api/submission/ClientReactiveSubmittableValueNode.ts';
28
+ import type { Root } from './Root.ts';
26
29
 
27
30
  export type AnyInputDefinition = {
28
31
  [V in ValueType]: InputDefinition<V>;
29
32
  }[ValueType];
30
33
 
34
+ const stringInputNodeOptions = (control: InputControlDefinition): InputNodeOptions<'string'> => ({
35
+ rows: control.rows,
36
+ });
37
+
38
+ const geoInputNodeOptions = (
39
+ control: InputControlDefinition
40
+ ): InputNodeOptions<'geopoint' | 'geoshape' | 'geotrace'> => ({
41
+ accuracyThreshold: control.accuracyThreshold,
42
+ unacceptableAccuracyThreshold: control.unacceptableAccuracyThreshold,
43
+ });
44
+
45
+ type NodeOptionsFactory<V extends ValueType> = (
46
+ controlDefinition: InputControlDefinition
47
+ ) => InputNodeOptions<V>;
48
+
49
+ type NodeOptionsFactoryByType = {
50
+ [V in ValueType]: NodeOptionsFactory<V>;
51
+ };
52
+
53
+ const nodeOptionsFactoryByType: NodeOptionsFactoryByType = {
54
+ string: stringInputNodeOptions,
55
+ int: () => null,
56
+ boolean: () => null,
57
+ decimal: () => null,
58
+ date: () => null,
59
+ time: () => null,
60
+ dateTime: () => null,
61
+ geopoint: geoInputNodeOptions,
62
+ geotrace: geoInputNodeOptions,
63
+ geoshape: geoInputNodeOptions,
64
+ binary: () => null,
65
+ barcode: () => null,
66
+ intent: () => null,
67
+ };
68
+
31
69
  interface InputControlStateSpec<V extends ValueType> extends ValueNodeStateSpec<RuntimeValue<V>> {
32
70
  readonly label: Accessor<TextRange<'label'> | null>;
33
71
  readonly hint: Accessor<TextRange<'hint'> | null>;
72
+ readonly valueOptions: null;
34
73
  }
35
74
 
36
75
  export class InputControl<V extends ValueType = ValueType>
@@ -40,14 +79,19 @@ export class InputControl<V extends ValueType = ValueType>
40
79
  XFormsXPathElement,
41
80
  EvaluationContext,
42
81
  ValidationContext,
43
- ClientReactiveSubmittableValueNode
82
+ ClientReactiveSerializableValueNode
44
83
  {
45
- static from(parent: GeneralParentNode, definition: InputDefinition): AnyInputControl;
84
+ static from(
85
+ parent: GeneralParentNode,
86
+ instanceNode: StaticLeafElement | null,
87
+ definition: InputDefinition
88
+ ): AnyInputControl;
46
89
  static from<V extends ValueType>(
47
90
  parent: GeneralParentNode,
91
+ instanceNode: StaticLeafElement | null,
48
92
  definition: InputDefinition<V>
49
93
  ): InputControl<V> {
50
- return new this(parent, definition);
94
+ return new this(parent, instanceNode, definition);
51
95
  }
52
96
 
53
97
  // XFormsXPathElement
@@ -60,18 +104,20 @@ export class InputControl<V extends ValueType = ValueType>
60
104
  // InputNode
61
105
  readonly nodeType = 'input';
62
106
  readonly appearances: InputNodeAppearances;
107
+ readonly nodeOptions: InputNodeOptions<V>;
63
108
  readonly currentState: CurrentState<InputControlStateSpec<V>>;
64
109
 
65
- constructor(parent: GeneralParentNode, definition: InputDefinition<V>) {
110
+ constructor(
111
+ parent: GeneralParentNode,
112
+ instanceNode: StaticLeafElement | null,
113
+ definition: InputDefinition<V>
114
+ ) {
66
115
  const codec = getSharedValueCodec(definition.valueType);
67
116
 
68
- super(parent, definition, codec);
117
+ super(parent, instanceNode, definition, codec);
69
118
 
70
119
  this.appearances = definition.bodyElement.appearances;
71
-
72
- const sharedStateOptions = {
73
- clientStateFactory: this.engineConfig.stateFactory,
74
- };
120
+ this.nodeOptions = nodeOptionsFactoryByType[definition.valueType](definition.bodyElement);
75
121
 
76
122
  const state = createSharedNodeState(
77
123
  this.scope,
@@ -88,7 +134,7 @@ export class InputControl<V extends ValueType = ValueType>
88
134
  value: this.valueState,
89
135
  instanceValue: this.getInstanceValue,
90
136
  },
91
- sharedStateOptions
137
+ this.instanceConfig
92
138
  );
93
139
 
94
140
  this.state = state;
@@ -2,6 +2,7 @@ import { XPathNodeKindKey } from '@getodk/xpath';
2
2
  import type { ModelValueDefinition, ModelValueNode } from '../client/ModelValueNode.ts';
3
3
  import type { ValueType } from '../client/ValueType.ts';
4
4
  import type { XFormsXPathElement } from '../integration/xpath/adapter/XFormsXPathNode.ts';
5
+ import type { StaticLeafElement } from '../integration/xpath/static-dom/StaticElement.ts';
5
6
  import type { RuntimeInputValue, RuntimeValue } from '../lib/codecs/getSharedValueCodec.ts';
6
7
  import { getSharedValueCodec } from '../lib/codecs/getSharedValueCodec.ts';
7
8
  import type { CurrentState } from '../lib/reactivity/node-state/createCurrentState.ts';
@@ -12,11 +13,12 @@ import { ValueNode, type ValueNodeStateSpec } from './abstract/ValueNode.ts';
12
13
  import type { GeneralParentNode } from './hierarchy.ts';
13
14
  import type { EvaluationContext } from './internal-api/EvaluationContext.ts';
14
15
  import type { ValidationContext } from './internal-api/ValidationContext.ts';
15
- import type { ClientReactiveSubmittableValueNode } from './internal-api/submission/ClientReactiveSubmittableValueNode.ts';
16
+ import type { ClientReactiveSerializableValueNode } from './internal-api/serialization/ClientReactiveSerializableValueNode.ts';
16
17
 
17
18
  interface ModelValueStateSpec<V extends ValueType> extends ValueNodeStateSpec<RuntimeValue<V>> {
18
19
  readonly label: null;
19
20
  readonly hint: null;
21
+ readonly valueOptions: null;
20
22
  }
21
23
 
22
24
  export class ModelValue<V extends ValueType = ValueType>
@@ -26,14 +28,19 @@ export class ModelValue<V extends ValueType = ValueType>
26
28
  XFormsXPathElement,
27
29
  EvaluationContext,
28
30
  ValidationContext,
29
- ClientReactiveSubmittableValueNode
31
+ ClientReactiveSerializableValueNode
30
32
  {
31
- static from(parent: GeneralParentNode, definition: ModelValueDefinition): AnyModelValue;
33
+ static from(
34
+ parent: GeneralParentNode,
35
+ instanceNode: StaticLeafElement | null,
36
+ definition: ModelValueDefinition
37
+ ): AnyModelValue;
32
38
  static from<V extends ValueType>(
33
39
  parent: GeneralParentNode,
40
+ instanceNode: StaticLeafElement | null,
34
41
  definition: ModelValueDefinition<V>
35
42
  ): ModelValue<V> {
36
- return new this(parent, definition);
43
+ return new this(parent, instanceNode, definition);
37
44
  }
38
45
 
39
46
  // XFormsXPathElement
@@ -46,16 +53,17 @@ export class ModelValue<V extends ValueType = ValueType>
46
53
  // ModelValueNode
47
54
  readonly nodeType = 'model-value';
48
55
  readonly appearances = null;
56
+ readonly nodeOptions = null;
49
57
  readonly currentState: CurrentState<ModelValueStateSpec<V>>;
50
58
 
51
- constructor(parent: GeneralParentNode, definition: ModelValueDefinition<V>) {
59
+ constructor(
60
+ parent: GeneralParentNode,
61
+ instanceNode: StaticLeafElement | null,
62
+ definition: ModelValueDefinition<V>
63
+ ) {
52
64
  const codec = getSharedValueCodec(definition.valueType);
53
65
 
54
- super(parent, definition, codec);
55
-
56
- const sharedStateOptions = {
57
- clientStateFactory: this.engineConfig.stateFactory,
58
- };
66
+ super(parent, instanceNode, definition, codec);
59
67
 
60
68
  const state = createSharedNodeState(
61
69
  this.scope,
@@ -72,7 +80,7 @@ export class ModelValue<V extends ValueType = ValueType>
72
80
  value: this.valueState,
73
81
  instanceValue: this.getInstanceValue,
74
82
  },
75
- sharedStateOptions
83
+ this.instanceConfig
76
84
  );
77
85
 
78
86
  this.state = state;
@@ -1,15 +1,14 @@
1
1
  import { UnreachableError } from '@getodk/common/lib/error/UnreachableError.ts';
2
- import { identity } from '@getodk/common/lib/identity.ts';
3
2
  import { XPathNodeKindKey } from '@getodk/xpath';
4
3
  import type { Accessor } from 'solid-js';
5
- import type { NoteNode, NoteNodeAppearances } from '../client/NoteNode.ts';
6
- import type { SubmissionState } from '../client/submission/SubmissionState.ts';
4
+ import type { NoteNode, NoteNodeAppearances, NoteValue } from '../client/NoteNode.ts';
7
5
  import type { TextRange } from '../client/TextRange.ts';
8
- import type { AnyViolation, LeafNodeValidationState } from '../client/validation.ts';
6
+ import type { ValueType } from '../client/ValueType.ts';
9
7
  import type { XFormsXPathElement } from '../integration/xpath/adapter/XFormsXPathNode.ts';
10
- import { createLeafNodeSubmissionState } from '../lib/client-reactivity/submission/createLeafNodeSubmissionState.ts';
8
+ import type { StaticLeafElement } from '../integration/xpath/static-dom/StaticElement.ts';
9
+ import { getNoteCodec } from '../lib/codecs/getNoteCodec.ts';
10
+ import type { NoteInputValue, NoteRuntimeValue } from '../lib/codecs/NoteCodec.ts';
11
11
  import { createNoteReadonlyThunk } from '../lib/reactivity/createNoteReadonlyThunk.ts';
12
- import { createValueState } from '../lib/reactivity/createValueState.ts';
13
12
  import type { CurrentState } from '../lib/reactivity/node-state/createCurrentState.ts';
14
13
  import type { EngineState } from '../lib/reactivity/node-state/createEngineState.ts';
15
14
  import type { SharedNodeState } from '../lib/reactivity/node-state/createSharedNodeState.ts';
@@ -17,72 +16,54 @@ import { createSharedNodeState } from '../lib/reactivity/node-state/createShared
17
16
  import { createFieldHint } from '../lib/reactivity/text/createFieldHint.ts';
18
17
  import { createNodeLabel } from '../lib/reactivity/text/createNodeLabel.ts';
19
18
  import { createNoteText, type ComputedNoteText } from '../lib/reactivity/text/createNoteText.ts';
20
- import type { SimpleAtomicState } from '../lib/reactivity/types.ts';
21
- import type { SharedValidationState } from '../lib/reactivity/validation/createValidation.ts';
22
- import { createValidationState } from '../lib/reactivity/validation/createValidation.ts';
23
19
  import type { NoteNodeDefinition } from '../parse/model/NoteNodeDefinition.ts';
24
- import type { DescendantNodeStateSpec } from './abstract/DescendantNode.ts';
25
- import { DescendantNode } from './abstract/DescendantNode.ts';
20
+ import { ValueNode, type ValueNodeStateSpec } from './abstract/ValueNode.ts';
26
21
  import type { GeneralParentNode } from './hierarchy.ts';
27
22
  import type { EvaluationContext } from './internal-api/EvaluationContext.ts';
28
- import type { ClientReactiveSubmittableLeafNode } from './internal-api/submission/ClientReactiveSubmittableLeafNode.ts';
23
+ import type { ClientReactiveSerializableValueNode } from './internal-api/serialization/ClientReactiveSerializableValueNode.ts';
29
24
  import type { ValidationContext } from './internal-api/ValidationContext.ts';
30
- import type { ValueContext } from './internal-api/ValueContext.ts';
31
25
 
32
- interface NoteStateSpec extends DescendantNodeStateSpec<string> {
26
+ interface NoteStateSpec<V extends ValueType> extends ValueNodeStateSpec<NoteValue<V>> {
33
27
  readonly readonly: Accessor<true>;
34
28
  readonly noteText: ComputedNoteText;
35
29
  readonly label: Accessor<TextRange<'label', 'form'> | null>;
36
30
  readonly hint: Accessor<TextRange<'hint', 'form'> | null>;
37
- readonly children: null;
38
- readonly value: SimpleAtomicState<string>;
39
31
  readonly valueOptions: null;
40
32
  }
41
33
 
42
- export class Note
43
- extends DescendantNode<NoteNodeDefinition, NoteStateSpec, GeneralParentNode, null>
34
+ export class Note<V extends ValueType = ValueType>
35
+ extends ValueNode<V, NoteNodeDefinition<V>, NoteRuntimeValue<V>, NoteInputValue<V>>
44
36
  implements
45
37
  NoteNode,
46
38
  XFormsXPathElement,
47
39
  EvaluationContext,
48
40
  ValidationContext,
49
- ValueContext<string>,
50
- ClientReactiveSubmittableLeafNode<string>
41
+ ClientReactiveSerializableValueNode
51
42
  {
52
- private readonly validation: SharedValidationState;
53
-
54
43
  // XFormsXPathElement
55
44
  override readonly [XPathNodeKindKey] = 'element';
56
45
 
57
46
  // InstanceNode
58
- protected readonly state: SharedNodeState<NoteStateSpec>;
59
- protected readonly engineState: EngineState<NoteStateSpec>;
47
+ protected readonly state: SharedNodeState<NoteStateSpec<V>>;
48
+ protected readonly engineState: EngineState<NoteStateSpec<V>>;
60
49
 
61
50
  // NoteNode
62
51
  readonly nodeType = 'note';
63
52
  readonly appearances: NoteNodeAppearances;
64
- readonly currentState: CurrentState<NoteStateSpec>;
65
-
66
- get validationState(): LeafNodeValidationState {
67
- return this.validation.currentState;
68
- }
69
-
70
- readonly submissionState: SubmissionState;
53
+ readonly nodeOptions = null;
54
+ readonly currentState: CurrentState<NoteStateSpec<V>>;
71
55
 
72
- // ValueContext
73
- override readonly contextNode = this;
74
- readonly encodeValue = identity<string>;
75
- readonly decodeValue = identity<string>;
56
+ constructor(
57
+ parent: GeneralParentNode,
58
+ instanceNode: StaticLeafElement | null,
59
+ definition: NoteNodeDefinition<V>
60
+ ) {
61
+ const codec = getNoteCodec(definition.valueType);
76
62
 
77
- constructor(parent: GeneralParentNode, definition: NoteNodeDefinition) {
78
- super(parent, definition);
63
+ super(parent, instanceNode, definition, codec);
79
64
 
80
65
  this.appearances = definition.bodyElement.appearances;
81
66
 
82
- const sharedStateOptions = {
83
- clientStateFactory: this.engineConfig.stateFactory,
84
- };
85
-
86
67
  const isReadonly = createNoteReadonlyThunk(this, definition);
87
68
  const noteTextComputation = createNoteText(this, definition.noteTextDefinition);
88
69
 
@@ -125,34 +106,29 @@ export class Note
125
106
 
126
107
  children: null,
127
108
  valueOptions: null,
128
- value: createValueState(this),
109
+ value: this.valueState,
110
+ instanceValue: this.getInstanceValue,
129
111
  },
130
- sharedStateOptions
112
+ this.instanceConfig
131
113
  );
132
114
 
133
115
  this.state = state;
134
116
  this.engineState = state.engineState;
135
117
  this.currentState = state.currentState;
136
- this.validation = createValidationState(this, sharedStateOptions);
137
- this.submissionState = createLeafNodeSubmissionState(this);
138
- }
139
-
140
- // XFormsXPathElement
141
- override getXPathValue(): string {
142
- return this.engineState.value;
143
- }
144
-
145
- // ValidationContext
146
- getViolation(): AnyViolation | null {
147
- return this.validation.engineState.violation;
148
- }
149
-
150
- isBlank(): boolean {
151
- return this.engineState.value === '';
152
- }
153
-
154
- // InstanceNode
155
- getChildren(): readonly [] {
156
- return [];
157
118
  }
158
119
  }
120
+
121
+ export type AnyNote =
122
+ | Note<'barcode'>
123
+ | Note<'binary'>
124
+ | Note<'boolean'>
125
+ | Note<'date'>
126
+ | Note<'dateTime'>
127
+ | Note<'decimal'>
128
+ | Note<'geopoint'>
129
+ | Note<'geoshape'>
130
+ | Note<'geotrace'>
131
+ | Note<'int'>
132
+ | Note<'intent'>
133
+ | Note<'string'>
134
+ | Note<'time'>;
@@ -1,20 +1,22 @@
1
1
  import { XPathNodeKindKey } from '@getodk/xpath';
2
2
  import type { Accessor } from 'solid-js';
3
3
  import { createSignal } from 'solid-js';
4
+ import type { FormInstanceInitializationMode } from '../client/form/FormInstance.ts';
4
5
  import type { ActiveLanguage, FormLanguage, FormLanguages } from '../client/FormLanguage.ts';
5
6
  import type { FormNodeID } from '../client/identity.ts';
6
7
  import type { RootNode } from '../client/RootNode.ts';
8
+ import type { InstancePayload } from '../client/serialization/InstancePayload.ts';
7
9
  import type {
8
- SubmissionChunkedType,
9
- SubmissionOptions,
10
- } from '../client/submission/SubmissionOptions.ts';
11
- import type { SubmissionResult } from '../client/submission/SubmissionResult.ts';
12
- import type { SubmissionState } from '../client/submission/SubmissionState.ts';
10
+ InstancePayloadOptions,
11
+ InstancePayloadType,
12
+ } from '../client/serialization/InstancePayloadOptions.ts';
13
+ import type { InstanceState } from '../client/serialization/InstanceState.ts';
13
14
  import type { AncestorNodeValidationState } from '../client/validation.ts';
14
15
  import type { XFormsXPathDocument } from '../integration/xpath/adapter/XFormsXPathNode.ts';
15
16
  import { EngineXPathEvaluator } from '../integration/xpath/EngineXPathEvaluator.ts';
16
- import { createInstanceSubmissionState } from '../lib/client-reactivity/submission/createInstanceSubmissionState.ts';
17
- import { prepareSubmission } from '../lib/client-reactivity/submission/prepareSubmission.ts';
17
+ import type { StaticDocument } from '../integration/xpath/static-dom/StaticDocument.ts';
18
+ import { createPrimaryInstanceState } from '../lib/client-reactivity/instance-state/createPrimaryInstanceState.ts';
19
+ import { prepareInstancePayload } from '../lib/client-reactivity/instance-state/prepareInstancePayload.ts';
18
20
  import { createChildrenState } from '../lib/reactivity/createChildrenState.ts';
19
21
  import { createTranslationState } from '../lib/reactivity/createTranslationState.ts';
20
22
  import type { MaterializedChildren } from '../lib/reactivity/materializeCurrentStateChildren.ts';
@@ -30,10 +32,11 @@ import type { ModelDefinition } from '../parse/model/ModelDefinition.ts';
30
32
  import type { RootDefinition } from '../parse/model/RootDefinition.ts';
31
33
  import type { SecondaryInstancesDefinition } from '../parse/model/SecondaryInstance/SecondaryInstancesDefinition.ts';
32
34
  import { InstanceNode } from './abstract/InstanceNode.ts';
35
+ import type { InitialInstanceState } from './input/InitialInstanceState.ts';
33
36
  import type { EvaluationContext } from './internal-api/EvaluationContext.ts';
34
37
  import type { InstanceConfig } from './internal-api/InstanceConfig.ts';
35
38
  import type { PrimaryInstanceDocument } from './internal-api/PrimaryInstanceDocument.ts';
36
- import type { ClientReactiveSubmittableInstance } from './internal-api/submission/ClientReactiveSubmittableInstance.ts';
39
+ import type { ClientReactiveSerializableInstance } from './internal-api/serialization/ClientReactiveSerializableInstance.ts';
37
40
  import type { TranslationContext } from './internal-api/TranslationContext.ts';
38
41
  import { Root } from './Root.ts';
39
42
 
@@ -74,20 +77,55 @@ interface PrimaryInstanceStateSpec {
74
77
  readonly activeLanguage: Accessor<ActiveLanguage>;
75
78
  }
76
79
 
77
- export class PrimaryInstance
80
+ interface PrimaryInstanceStateInputByMode {
81
+ readonly create: null;
82
+ readonly edit: InitialInstanceState;
83
+ readonly restore: InitialInstanceState;
84
+ }
85
+
86
+ export type PrimaryInstanceInitialState<Mode extends FormInstanceInitializationMode> =
87
+ PrimaryInstanceStateInputByMode[Mode];
88
+
89
+ export interface BasePrimaryInstanceOptions {
90
+ readonly scope: ReactiveScope;
91
+ readonly model: ModelDefinition;
92
+ readonly secondaryInstances: SecondaryInstancesDefinition;
93
+ }
94
+
95
+ export interface ModelessPrimaryInstanceOptions extends BasePrimaryInstanceOptions {
96
+ readonly config: InstanceConfig;
97
+ }
98
+
99
+ export interface PrimaryInstanceOptions<Mode extends FormInstanceInitializationMode>
100
+ extends ModelessPrimaryInstanceOptions {
101
+ readonly mode: Mode;
102
+ readonly initialState: PrimaryInstanceInitialState<Mode>;
103
+ }
104
+
105
+ export class PrimaryInstance<
106
+ Mode extends FormInstanceInitializationMode = FormInstanceInitializationMode,
107
+ >
78
108
  extends InstanceNode<RootDefinition, PrimaryInstanceStateSpec, null, Root>
79
109
  implements
80
110
  PrimaryInstanceDocument,
81
111
  XFormsXPathDocument,
82
112
  TranslationContext,
83
113
  EvaluationContext,
84
- ClientReactiveSubmittableInstance
114
+ ClientReactiveSerializableInstance
85
115
  {
116
+ /**
117
+ * @todo this will be populated as we introduce other initialization modes!
118
+ */
119
+ readonly initializationMode: FormInstanceInitializationMode = 'create';
120
+
121
+ readonly model: ModelDefinition;
122
+
86
123
  // InstanceNode
87
124
  protected readonly state: SharedNodeState<PrimaryInstanceStateSpec>;
88
125
  protected readonly engineState: EngineState<PrimaryInstanceStateSpec>;
89
- readonly getChildren: Accessor<readonly Root[]>;
90
126
 
127
+ override readonly instanceNode: StaticDocument;
128
+ readonly getChildren: Accessor<readonly Root[]>;
91
129
  readonly hasReadonlyAncestor = () => false;
92
130
  readonly isReadonly = () => false;
93
131
  readonly hasNonRelevantAncestor = () => false;
@@ -99,14 +137,15 @@ export class PrimaryInstance
99
137
  // XFormsXPathDocument
100
138
  readonly [XPathNodeKindKey] = 'document';
101
139
 
102
- // PrimaryInstanceDocument, ClientReactiveSubmittableInstance
140
+ // PrimaryInstanceDocument, ClientReactiveSerializableInstance
103
141
  readonly nodeType = 'primary-instance';
104
142
  readonly appearances = null;
143
+ readonly nodeOptions = null;
105
144
  readonly classes: BodyClassList;
106
145
  readonly root: Root;
107
146
  readonly currentState: MaterializedChildren<CurrentState<PrimaryInstanceStateSpec>, Root>;
108
147
  readonly validationState: AncestorNodeValidationState;
109
- readonly submissionState: SubmissionState;
148
+ readonly instanceState: InstanceState;
110
149
  readonly languages: FormLanguages;
111
150
 
112
151
  // TranslationContext (+ EvaluationContext)
@@ -117,19 +156,21 @@ export class PrimaryInstance
117
156
  readonly evaluator: EngineXPathEvaluator;
118
157
  override readonly contextNode = this;
119
158
 
120
- constructor(
121
- scope: ReactiveScope,
122
- model: ModelDefinition,
123
- secondaryInstances: SecondaryInstancesDefinition,
124
- engineConfig: InstanceConfig
125
- ) {
126
- const { root: definition } = model;
159
+ constructor(options: PrimaryInstanceOptions<Mode>) {
160
+ const { mode, initialState, scope, model, secondaryInstances, config } = options;
161
+ const { instance: modelInstance } = model;
162
+ const activeInstance = initialState?.document ?? modelInstance;
163
+ const definition = model.getRootDefinition(activeInstance);
127
164
 
128
- super(engineConfig, null, definition, {
165
+ super(config, null, activeInstance, definition, {
129
166
  scope,
130
167
  computeReference: () => PRIMARY_INSTANCE_REFERENCE,
131
168
  });
132
169
 
170
+ this.initializationMode = mode;
171
+ this.model = model;
172
+ this.instanceNode = activeInstance;
173
+
133
174
  const [isAttached, setIsAttached] = createSignal(false);
134
175
 
135
176
  this.isAttached = isAttached;
@@ -169,9 +210,7 @@ export class PrimaryInstance
169
210
  children: childrenState.childIds,
170
211
  };
171
212
 
172
- const state = createSharedNodeState(scope, stateSpec, {
173
- clientStateFactory: engineConfig.stateFactory,
174
- });
213
+ const state = createSharedNodeState(scope, stateSpec, config);
175
214
 
176
215
  this.state = state;
177
216
  this.engineState = state.engineState;
@@ -186,7 +225,7 @@ export class PrimaryInstance
186
225
  return root.validationState.violations;
187
226
  },
188
227
  };
189
- this.submissionState = createInstanceSubmissionState(this);
228
+ this.instanceState = createPrimaryInstanceState(this);
190
229
 
191
230
  childrenState.setChildren([root]);
192
231
  setIsAttached(true);
@@ -230,12 +269,12 @@ export class PrimaryInstance
230
269
  return this.setActiveLanguage(availableFormLanguage);
231
270
  }
232
271
 
233
- // PrimaryInstanceDocument, ClientReactiveSubmittableInstance
234
- prepareSubmission<ChunkedType extends SubmissionChunkedType = 'monolithic'>(
235
- options?: SubmissionOptions<ChunkedType>
236
- ): Promise<SubmissionResult<ChunkedType>> {
237
- const result = prepareSubmission(this, {
238
- chunked: (options?.chunked ?? 'monolithic') as ChunkedType,
272
+ // PrimaryInstanceDocument
273
+ prepareInstancePayload<PayloadType extends InstancePayloadType = 'monolithic'>(
274
+ options?: InstancePayloadOptions<PayloadType>
275
+ ): Promise<InstancePayload<PayloadType>> {
276
+ const result = prepareInstancePayload(this, {
277
+ payloadType: (options?.payloadType ?? 'monolithic') as PayloadType,
239
278
  maxSize: options?.maxSize ?? Infinity,
240
279
  });
241
280