@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,11 +1,12 @@
1
1
  import { XPathNodeKindKey } from '@getodk/xpath';
2
2
  import type { Accessor } from 'solid-js';
3
3
  import type { FormNodeID } from '../client/identity.ts';
4
- import type { SubmissionState } from '../client/submission/SubmissionState.ts';
4
+ import type { InstanceState } from '../client/serialization/InstanceState.ts';
5
5
  import type { SubtreeDefinition, SubtreeNode } from '../client/SubtreeNode.ts';
6
6
  import type { AncestorNodeValidationState } from '../client/validation.ts';
7
7
  import type { XFormsXPathElement } from '../integration/xpath/adapter/XFormsXPathNode.ts';
8
- import { createParentNodeSubmissionState } from '../lib/client-reactivity/submission/createParentNodeSubmissionState.ts';
8
+ import type { StaticElement } from '../integration/xpath/static-dom/StaticElement.ts';
9
+ import { createParentNodeInstanceState } from '../lib/client-reactivity/instance-state/createParentNodeInstanceState.ts';
9
10
  import type { ChildrenState } from '../lib/reactivity/createChildrenState.ts';
10
11
  import { createChildrenState } from '../lib/reactivity/createChildrenState.ts';
11
12
  import type { MaterializedChildren } from '../lib/reactivity/materializeCurrentStateChildren.ts';
@@ -17,10 +18,10 @@ import { createSharedNodeState } from '../lib/reactivity/node-state/createShared
17
18
  import { createAggregatedViolations } from '../lib/reactivity/validation/createAggregatedViolations.ts';
18
19
  import type { DescendantNodeSharedStateSpec } from './abstract/DescendantNode.ts';
19
20
  import { DescendantNode } from './abstract/DescendantNode.ts';
20
- import { buildChildren } from './children.ts';
21
+ import { buildChildren } from './children/buildChildren.ts';
21
22
  import type { GeneralChildNode, GeneralParentNode } from './hierarchy.ts';
22
23
  import type { EvaluationContext } from './internal-api/EvaluationContext.ts';
23
- import type { ClientReactiveSubmittableParentNode } from './internal-api/submission/ClientReactiveSubmittableParentNode.ts';
24
+ import type { ClientReactiveSerializableParentNode } from './internal-api/serialization/ClientReactiveSerializableParentNode.ts';
24
25
 
25
26
  interface SubtreeStateSpec extends DescendantNodeSharedStateSpec {
26
27
  readonly label: null;
@@ -36,7 +37,7 @@ export class Subtree
36
37
  SubtreeNode,
37
38
  XFormsXPathElement,
38
39
  EvaluationContext,
39
- ClientReactiveSubmittableParentNode<GeneralChildNode>
40
+ ClientReactiveSerializableParentNode<GeneralChildNode>
40
41
  {
41
42
  private readonly childrenState: ChildrenState<GeneralChildNode>;
42
43
 
@@ -49,21 +50,22 @@ export class Subtree
49
50
  // SubtreeNode
50
51
  readonly nodeType = 'subtree';
51
52
  readonly appearances = null;
53
+ readonly nodeOptions = null;
52
54
  readonly currentState: MaterializedChildren<CurrentState<SubtreeStateSpec>, GeneralChildNode>;
53
55
  readonly validationState: AncestorNodeValidationState;
54
- readonly submissionState: SubmissionState;
56
+ readonly instanceState: InstanceState;
55
57
 
56
- constructor(parent: GeneralParentNode, definition: SubtreeDefinition) {
57
- super(parent, definition);
58
+ constructor(
59
+ parent: GeneralParentNode,
60
+ instanceNode: StaticElement | null,
61
+ definition: SubtreeDefinition
62
+ ) {
63
+ super(parent, instanceNode, definition);
58
64
 
59
65
  const childrenState = createChildrenState<Subtree, GeneralChildNode>(this);
60
66
 
61
67
  this.childrenState = childrenState;
62
68
 
63
- const sharedStateOptions = {
64
- clientStateFactory: this.engineConfig.stateFactory,
65
- };
66
-
67
69
  const state = createSharedNodeState(
68
70
  this.scope,
69
71
  {
@@ -78,7 +80,7 @@ export class Subtree
78
80
  valueOptions: null,
79
81
  value: null,
80
82
  },
81
- sharedStateOptions
83
+ this.instanceConfig
82
84
  );
83
85
 
84
86
  this.state = state;
@@ -90,8 +92,8 @@ export class Subtree
90
92
  );
91
93
 
92
94
  childrenState.setChildren(buildChildren(this));
93
- this.validationState = createAggregatedViolations(this, sharedStateOptions);
94
- this.submissionState = createParentNodeSubmissionState(this);
95
+ this.validationState = createAggregatedViolations(this, this.instanceConfig);
96
+ this.instanceState = createParentNodeInstanceState(this);
95
97
  }
96
98
 
97
99
  getChildren(): readonly GeneralChildNode[] {
@@ -2,51 +2,70 @@ import { XPathNodeKindKey } from '@getodk/xpath';
2
2
  import type { Accessor } from 'solid-js';
3
3
  import type { TextRange } from '../client/TextRange.ts';
4
4
  import type { TriggerNode, TriggerNodeDefinition } from '../client/TriggerNode.ts';
5
- import type { SubmissionState } from '../client/submission/SubmissionState.ts';
6
- import type { AnyViolation, LeafNodeValidationState } from '../client/validation.ts';
5
+ import type { ValueType } from '../client/ValueType.ts';
6
+ import { ErrorProductionDesignPendingError } from '../error/ErrorProductionDesignPendingError.ts';
7
7
  import type { XFormsXPathElement } from '../integration/xpath/adapter/XFormsXPathNode.ts';
8
- import { createLeafNodeSubmissionState } from '../lib/client-reactivity/submission/createLeafNodeSubmissionState.ts';
9
- import { createValueState } from '../lib/reactivity/createValueState.ts';
8
+ import type { StaticLeafElement } from '../integration/xpath/static-dom/StaticElement.ts';
9
+ import type { TriggerInputValue, TriggerRuntimeValue } from '../lib/codecs/TriggerCodec.ts';
10
+ import { TriggerCodec } from '../lib/codecs/TriggerCodec.ts';
10
11
  import type { CurrentState } from '../lib/reactivity/node-state/createCurrentState.ts';
11
12
  import type { EngineState } from '../lib/reactivity/node-state/createEngineState.ts';
12
13
  import type { SharedNodeState } from '../lib/reactivity/node-state/createSharedNodeState.ts';
13
14
  import { createSharedNodeState } from '../lib/reactivity/node-state/createSharedNodeState.ts';
14
15
  import { createFieldHint } from '../lib/reactivity/text/createFieldHint.ts';
15
16
  import { createNodeLabel } from '../lib/reactivity/text/createNodeLabel.ts';
16
- import type { SimpleAtomicState } from '../lib/reactivity/types.ts';
17
- import type { SharedValidationState } from '../lib/reactivity/validation/createValidation.ts';
18
- import { createValidationState } from '../lib/reactivity/validation/createValidation.ts';
19
17
  import type { UnknownAppearanceDefinition } from '../parse/body/appearance/unknownAppearanceParser.ts';
20
18
  import type { Root } from './Root.ts';
21
- import type { DescendantNodeStateSpec } from './abstract/DescendantNode.ts';
22
- import { DescendantNode } from './abstract/DescendantNode.ts';
19
+ import { ValueNode, type ValueNodeStateSpec } from './abstract/ValueNode.ts';
23
20
  import type { GeneralParentNode } from './hierarchy.ts';
24
21
  import type { EvaluationContext } from './internal-api/EvaluationContext.ts';
25
22
  import type { ValidationContext } from './internal-api/ValidationContext.ts';
26
- import type { ValueContext } from './internal-api/ValueContext.ts';
27
- import type { ClientReactiveSubmittableLeafNode } from './internal-api/submission/ClientReactiveSubmittableLeafNode.ts';
23
+ import type { ClientReactiveSerializableValueNode } from './internal-api/serialization/ClientReactiveSerializableValueNode.ts';
28
24
 
29
- interface TriggerControlStateSpec extends DescendantNodeStateSpec<boolean> {
25
+ interface TriggerControlStateSpec extends ValueNodeStateSpec<TriggerRuntimeValue> {
30
26
  readonly label: Accessor<TextRange<'label'> | null>;
31
27
  readonly hint: Accessor<TextRange<'hint'> | null>;
32
- readonly children: null;
33
- readonly value: SimpleAtomicState<boolean>;
34
28
  readonly valueOptions: null;
35
29
  }
36
30
 
37
- const TRIGGER_ASSIGNED_VALUE = 'OK';
31
+ type AnyTriggerNodeDefinition = {
32
+ [V in ValueType]: TriggerNodeDefinition<V>;
33
+ }[ValueType];
34
+
35
+ const codec = new TriggerCodec();
38
36
 
39
37
  export class TriggerControl
40
- extends DescendantNode<TriggerNodeDefinition, TriggerControlStateSpec, GeneralParentNode, null>
38
+ extends ValueNode<
39
+ 'string',
40
+ TriggerNodeDefinition<'string'>,
41
+ TriggerRuntimeValue,
42
+ TriggerInputValue
43
+ >
41
44
  implements
42
45
  TriggerNode,
43
46
  XFormsXPathElement,
44
47
  EvaluationContext,
45
48
  ValidationContext,
46
- ValueContext<boolean>,
47
- ClientReactiveSubmittableLeafNode<boolean>
49
+ ClientReactiveSerializableValueNode
48
50
  {
49
- private readonly validation: SharedValidationState;
51
+ static from(
52
+ parent: GeneralParentNode,
53
+ instanceNode: StaticLeafElement | null,
54
+ definition: TriggerNodeDefinition
55
+ ): TriggerControl;
56
+ static from(
57
+ parent: GeneralParentNode,
58
+ instanceNode: StaticLeafElement | null,
59
+ definition: AnyTriggerNodeDefinition
60
+ ): TriggerControl {
61
+ if (definition.valueType !== 'string') {
62
+ throw new ErrorProductionDesignPendingError(
63
+ `Unsupported trigger value type: ${definition.valueType}`
64
+ );
65
+ }
66
+
67
+ return new this(parent, instanceNode, definition);
68
+ }
50
69
 
51
70
  // XFormsXPathElement
52
71
  override readonly [XPathNodeKindKey] = 'element';
@@ -58,46 +77,17 @@ export class TriggerControl
58
77
  // TriggerNode
59
78
  readonly nodeType = 'trigger';
60
79
  readonly appearances: UnknownAppearanceDefinition;
80
+ readonly nodeOptions = null;
61
81
  readonly currentState: CurrentState<TriggerControlStateSpec>;
62
82
 
63
- get validationState(): LeafNodeValidationState {
64
- return this.validation.currentState;
65
- }
66
-
67
- readonly submissionState: SubmissionState;
68
-
69
- // ValueContext
70
- override readonly contextNode = this;
71
- readonly encodeValue: (runtimeValue: boolean) => string;
72
- readonly decodeValue: (instanceValue: string) => boolean;
73
-
74
- constructor(parent: GeneralParentNode, definition: TriggerNodeDefinition) {
75
- super(parent, definition);
83
+ private constructor(
84
+ parent: GeneralParentNode,
85
+ instanceNode: StaticLeafElement | null,
86
+ definition: TriggerNodeDefinition<'string'>
87
+ ) {
88
+ super(parent, instanceNode, definition, codec);
76
89
 
77
90
  this.appearances = definition.bodyElement.appearances;
78
- this.encodeValue = (runtimeValue) => {
79
- return runtimeValue ? TRIGGER_ASSIGNED_VALUE : '';
80
- };
81
- this.decodeValue = (instanceValue) => {
82
- const value = instanceValue.trim();
83
-
84
- switch (value) {
85
- case TRIGGER_ASSIGNED_VALUE:
86
- return true;
87
-
88
- case '':
89
- return false;
90
-
91
- // TODO (robustness principle): Case insensitivity? Handle
92
- // XPath-semantic booleans?? Other known/common equivalents?
93
- default:
94
- throw new Error(`Unexpected trigger value: ${value}`);
95
- }
96
- };
97
-
98
- const sharedStateOptions = {
99
- clientStateFactory: this.engineConfig.stateFactory,
100
- };
101
91
 
102
92
  const state = createSharedNodeState(
103
93
  this.scope,
@@ -111,40 +101,20 @@ export class TriggerControl
111
101
  hint: createFieldHint(this, definition),
112
102
  children: null,
113
103
  valueOptions: null,
114
- value: createValueState(this),
104
+ value: this.valueState,
105
+ instanceValue: this.getInstanceValue,
115
106
  },
116
- sharedStateOptions
107
+ this.instanceConfig
117
108
  );
118
109
 
119
110
  this.state = state;
120
111
  this.engineState = state.engineState;
121
112
  this.currentState = state.currentState;
122
- this.validation = createValidationState(this, sharedStateOptions);
123
- this.submissionState = createLeafNodeSubmissionState(this);
124
- }
125
-
126
- // XFormsXPathElement
127
- override getXPathValue(): string {
128
- return this.encodeValue(this.engineState.value);
129
- }
130
-
131
- // ValidationContext
132
- getViolation(): AnyViolation | null {
133
- return this.validation.engineState.violation;
134
- }
135
-
136
- isBlank(): boolean {
137
- return this.engineState.value == null;
138
- }
139
-
140
- // InstanceNode
141
- getChildren(): readonly [] {
142
- return [];
143
113
  }
144
114
 
145
115
  // TriggerNode
146
- setValue(value: boolean): Root {
147
- this.state.setProperty('value', value);
116
+ setValue(value: TriggerInputValue): Root {
117
+ this.setValueState(value);
148
118
 
149
119
  return this.root;
150
120
  }
@@ -11,10 +11,11 @@ import type {
11
11
  } from '../../integration/xpath/adapter/XFormsXPathNode.ts';
12
12
  import { XFORMS_XPATH_NODE_RANGE_KIND } from '../../integration/xpath/adapter/XFormsXPathNode.ts';
13
13
  import type { EngineXPathEvaluator } from '../../integration/xpath/EngineXPathEvaluator.ts';
14
+ import type { StaticElement } from '../../integration/xpath/static-dom/StaticElement.ts';
14
15
  import { createComputedExpression } from '../../lib/reactivity/createComputedExpression.ts';
15
16
  import type { ReactiveScope } from '../../lib/reactivity/scope.ts';
16
- import type { AnyDescendantNodeDefinition } from '../../parse/model/DescendentNodeDefinition.ts';
17
17
  import type { AnyNodeDefinition } from '../../parse/model/NodeDefinition.ts';
18
+ import type { DescendantNodeInitOptions } from '../children/DescendantNodeInitOptions.ts';
18
19
  import type { AnyChildNode, AnyParentNode, RepeatRange } from '../hierarchy.ts';
19
20
  import type { EvaluationContext } from '../internal-api/EvaluationContext.ts';
20
21
  import type { RepeatInstance } from '../repeat/RepeatInstance.ts';
@@ -35,11 +36,7 @@ export type DescendantNodeStateSpec<Value = never> =
35
36
  & InstanceNodeStateSpec<Value>
36
37
  & DescendantNodeSharedStateSpec;
37
38
 
38
- // prettier-ignore
39
- export type DescendantNodeDefinition = Extract<
40
- AnyNodeDefinition,
41
- AnyDescendantNodeDefinition
42
- >;
39
+ export type DescendantNodeDefinition = AnyNodeDefinition;
43
40
 
44
41
  export type AnyDescendantNode = DescendantNode<
45
42
  DescendantNodeDefinition,
@@ -55,6 +52,13 @@ interface DescendantNodeOptions {
55
52
  readonly computeReference?: Accessor<string>;
56
53
  }
57
54
 
55
+ /**
56
+ * @todo Unify constructor signatures of {@link DescendantNode} and its
57
+ * subclasses, which will simplify the branchy logic of child node construction
58
+ * and minimize internal churn as common themes evolve. A good starting point is
59
+ * beginning to form in {@link DescendantNodeInitOptions} (not to be confused
60
+ * with the current module-local {@link DescendantNodeOptions}).
61
+ */
58
62
  export abstract class DescendantNode<
59
63
  Definition extends DescendantNodeDefinition,
60
64
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -133,10 +137,11 @@ export abstract class DescendantNode<
133
137
 
134
138
  constructor(
135
139
  override readonly parent: Parent,
140
+ override readonly instanceNode: StaticElement | null,
136
141
  override readonly definition: Definition,
137
142
  options?: DescendantNodeOptions
138
143
  ) {
139
- super(parent.engineConfig, parent, definition, options);
144
+ super(parent.instanceConfig, parent, instanceNode, definition, options);
140
145
 
141
146
  if (this.isRoot()) {
142
147
  this.root = this;
@@ -147,7 +152,7 @@ export abstract class DescendantNode<
147
152
  const { evaluator } = parent;
148
153
 
149
154
  // See notes on property declaration
150
- if (definition.type === 'repeat-range') {
155
+ if (definition.type === 'repeat') {
151
156
  this[XPathNodeKindKey] = XFORMS_XPATH_NODE_RANGE_KIND;
152
157
  } else {
153
158
  this[XPathNodeKindKey] = 'element';
@@ -4,7 +4,7 @@ import type { BaseNode } from '../../client/BaseNode.ts';
4
4
  import type { NodeAppearances } from '../../client/NodeAppearances.ts';
5
5
  import type { FormNodeID } from '../../client/identity.ts';
6
6
  import type { InstanceNodeType as ClientInstanceNodeType } from '../../client/node-types.ts';
7
- import type { SubmissionState } from '../../client/submission/SubmissionState.ts';
7
+ import type { InstanceState } from '../../client/serialization/InstanceState.ts';
8
8
  import type { NodeValidationState } from '../../client/validation.ts';
9
9
  import type { ActiveLanguage, TextRange } from '../../index.ts';
10
10
  import type { EngineXPathEvaluator } from '../../integration/xpath/EngineXPathEvaluator.ts';
@@ -13,6 +13,8 @@ import type {
13
13
  XFormsXPathPrimaryInstanceNodeKind,
14
14
  } from '../../integration/xpath/adapter/XFormsXPathNode.ts';
15
15
  import type { PrimaryInstanceXPathNode } from '../../integration/xpath/adapter/kind.ts';
16
+ import type { StaticDocument } from '../../integration/xpath/static-dom/StaticDocument.ts';
17
+ import type { StaticElement } from '../../integration/xpath/static-dom/StaticElement.ts';
16
18
  import type { MaterializedChildren } from '../../lib/reactivity/materializeCurrentStateChildren.ts';
17
19
  import type { CurrentState } from '../../lib/reactivity/node-state/createCurrentState.ts';
18
20
  import type { EngineState } from '../../lib/reactivity/node-state/createEngineState.ts';
@@ -20,6 +22,7 @@ import type { SharedNodeState } from '../../lib/reactivity/node-state/createShar
20
22
  import type { ReactiveScope } from '../../lib/reactivity/scope.ts';
21
23
  import { createReactiveScope } from '../../lib/reactivity/scope.ts';
22
24
  import type { SimpleAtomicState } from '../../lib/reactivity/types.ts';
25
+ import { createUniqueId } from '../../lib/unique-id.ts';
23
26
  import type { AnyNodeDefinition } from '../../parse/model/NodeDefinition.ts';
24
27
  import type { PrimaryInstance } from '../PrimaryInstance.ts';
25
28
  import type { Root } from '../Root.ts';
@@ -34,6 +37,12 @@ export interface BaseEngineNode extends Omit<BaseNode, 'nodeType'> {
34
37
  readonly nodeType: EngineInstanceNodeType;
35
38
  }
36
39
 
40
+ // prettier-ignore
41
+ export type InstanceNodeValueOptionsStateSpec =
42
+ | Accessor<null>
43
+ | Accessor<readonly unknown[]>
44
+ | null
45
+
37
46
  export interface InstanceNodeStateSpec<Value = never> {
38
47
  readonly reference: Accessor<string> | string;
39
48
  readonly readonly: Accessor<boolean> | boolean;
@@ -42,7 +51,7 @@ export interface InstanceNodeStateSpec<Value = never> {
42
51
  readonly label: Accessor<TextRange<'label'> | null> | null;
43
52
  readonly hint: Accessor<TextRange<'hint'> | null> | null;
44
53
  readonly children: Accessor<readonly FormNodeID[]> | null;
45
- readonly valueOptions: Accessor<null> | Accessor<readonly unknown[]> | null;
54
+ readonly valueOptions: InstanceNodeValueOptionsStateSpec;
46
55
  readonly value: Signal<Value> | SimpleAtomicState<Value> | null;
47
56
  }
48
57
 
@@ -136,11 +145,13 @@ export abstract class InstanceNode<
136
145
 
137
146
  abstract readonly appearances: NodeAppearances<Definition>;
138
147
 
148
+ abstract readonly nodeOptions: object | null;
149
+
139
150
  abstract readonly currentState: InstanceNodeCurrentState<Spec, Child>;
140
151
 
141
152
  abstract readonly validationState: NodeValidationState;
142
153
 
143
- abstract readonly submissionState: SubmissionState;
154
+ abstract readonly instanceState: InstanceState;
144
155
 
145
156
  // EvaluationContext: instance-global/shared
146
157
  abstract readonly evaluator: EngineXPathEvaluator;
@@ -161,7 +172,7 @@ export abstract class InstanceNode<
161
172
  );
162
173
  }
163
174
 
164
- return `${parent.contextReference()}/${definition.nodeName}`;
175
+ return `${parent.contextReference()}/${definition.qualifiedName.getPrefixedName()}`;
165
176
  };
166
177
 
167
178
  // EvaluationContext: node-specific
@@ -178,8 +189,9 @@ export abstract class InstanceNode<
178
189
  this as AnyInstanceNode as PrimaryInstanceXPathNode;
179
190
 
180
191
  constructor(
181
- readonly engineConfig: InstanceConfig,
192
+ readonly instanceConfig: InstanceConfig,
182
193
  readonly parent: Parent,
194
+ readonly instanceNode: StaticDocument | StaticElement | null,
183
195
  readonly definition: Definition,
184
196
  options?: InstanceNodeOptions
185
197
  ) {
@@ -200,8 +212,8 @@ export abstract class InstanceNode<
200
212
  this.computeReference = options?.computeReference ?? this.computeChildStepReference;
201
213
 
202
214
  this.scope = options?.scope ?? createReactiveScope();
203
- this.engineConfig = engineConfig;
204
- this.nodeId = nodeID(engineConfig.createUniqueId());
215
+ this.instanceConfig = instanceConfig;
216
+ this.nodeId = nodeID(createUniqueId());
205
217
  this.definition = definition;
206
218
  }
207
219
 
@@ -2,11 +2,12 @@ import { XPathNodeKindKey } from '@getodk/xpath';
2
2
  import type { Accessor } from 'solid-js';
3
3
  import type { BaseValueNode } from '../../client/BaseValueNode.ts';
4
4
  import type { LeafNodeType as ValueNodeType } from '../../client/node-types.ts';
5
- import type { SubmissionState } from '../../client/submission/SubmissionState.ts';
5
+ import type { InstanceState } from '../../client/serialization/InstanceState.ts';
6
6
  import type { AnyViolation, LeafNodeValidationState } from '../../client/validation.ts';
7
7
  import type { ValueType } from '../../client/ValueType.ts';
8
8
  import type { XFormsXPathElement } from '../../integration/xpath/adapter/XFormsXPathNode.ts';
9
- import { createValueNodeSubmissionState } from '../../lib/client-reactivity/submission/createValueNodeSubmissionState.ts';
9
+ import type { StaticLeafElement } from '../../integration/xpath/static-dom/StaticElement.ts';
10
+ import { createValueNodeInstanceState } from '../../lib/client-reactivity/instance-state/createValueNodeInstanceState.ts';
10
11
  import type {
11
12
  RuntimeValueSetter,
12
13
  RuntimeValueState,
@@ -26,7 +27,7 @@ import type {
26
27
  DecodeInstanceValue,
27
28
  InstanceValueContext,
28
29
  } from '../internal-api/InstanceValueContext.ts';
29
- import type { ClientReactiveSubmittableValueNode } from '../internal-api/submission/ClientReactiveSubmittableValueNode.ts';
30
+ import type { ClientReactiveSerializableValueNode } from '../internal-api/serialization/ClientReactiveSerializableValueNode.ts';
30
31
  import type { ValidationContext } from '../internal-api/ValidationContext.ts';
31
32
  import type { DescendantNodeStateSpec } from './DescendantNode.ts';
32
33
  import { DescendantNode } from './DescendantNode.ts';
@@ -35,7 +36,6 @@ export type ValueNodeDefinition<V extends ValueType> = LeafNodeDefinition<V>;
35
36
 
36
37
  export interface ValueNodeStateSpec<RuntimeValue> extends DescendantNodeStateSpec<RuntimeValue> {
37
38
  readonly children: null;
38
- readonly valueOptions: null;
39
39
  readonly value: SimpleAtomicState<RuntimeValue>;
40
40
  readonly instanceValue: Accessor<string>;
41
41
  }
@@ -53,7 +53,7 @@ export abstract class ValueNode<
53
53
  EvaluationContext,
54
54
  InstanceValueContext,
55
55
  ValidationContext,
56
- ClientReactiveSubmittableValueNode
56
+ ClientReactiveSerializableValueNode
57
57
  {
58
58
  protected readonly validation: SharedValidationState;
59
59
  protected readonly getInstanceValue: Accessor<string>;
@@ -81,21 +81,20 @@ export abstract class ValueNode<
81
81
  return this.validation.currentState;
82
82
  }
83
83
 
84
- readonly submissionState: SubmissionState;
84
+ readonly instanceState: InstanceState;
85
85
 
86
86
  constructor(
87
87
  parent: GeneralParentNode,
88
+ override readonly instanceNode: StaticLeafElement | null,
88
89
  definition: Definition,
89
90
  codec: ValueCodec<V, RuntimeValue, RuntimeInputValue>
90
91
  ) {
91
- super(parent, definition);
92
+ super(parent, instanceNode, definition);
92
93
 
93
94
  this.valueType = definition.valueType;
94
95
  this.decodeInstanceValue = codec.decodeInstanceValue;
95
96
 
96
- const instanceValueState = createInstanceValueState(this, {
97
- initialValueSource: 'FORM_DEFAULT',
98
- });
97
+ const instanceValueState = createInstanceValueState(this);
99
98
  const valueState = codec.createRuntimeValueState(instanceValueState);
100
99
 
101
100
  const [getInstanceValue] = instanceValueState;
@@ -103,12 +102,12 @@ export abstract class ValueNode<
103
102
 
104
103
  this.getInstanceValue = getInstanceValue;
105
104
  this.setValueState = setValueState;
106
- this.getXPathValue = getInstanceValue;
105
+ this.getXPathValue = () => {
106
+ return this.getInstanceValue();
107
+ };
107
108
  this.valueState = valueState;
108
- this.validation = createValidationState(this, {
109
- clientStateFactory: this.engineConfig.stateFactory,
110
- });
111
- this.submissionState = createValueNodeSubmissionState(this);
109
+ this.validation = createValidationState(this, this.instanceConfig);
110
+ this.instanceState = createValueNodeInstanceState(this);
112
111
  }
113
112
 
114
113
  // ValidationContext
@@ -0,0 +1,35 @@
1
+ import type { StaticElement } from '../../integration/xpath/static-dom/StaticElement.ts';
2
+ import type { ChildNodeDefinition } from '../../parse/model/NodeDefinition.ts';
3
+ import type { DescendantNode } from '../abstract/DescendantNode.ts';
4
+ import type { childrenInitOptions } from './childrenInitOptions.ts';
5
+
6
+ /**
7
+ * @todo We could pretty significantly simplify downstream child node
8
+ * construction logic, if we break this down into a tagged union (essentially
9
+ * moving the branchy type refinement aspects up the stack, probably trimming
10
+ * the construction logic itself down to a switch statement). At which point,
11
+ * it'd also probably be easier to reason about each of those constructors
12
+ * accepting input exactly as it's represented as a member of this hypothetical
13
+ * tagged union. Something like this:
14
+ *
15
+ * - Revise each concrete {@link DescendantNode} class to accept an options-like
16
+ * object suitable for its construction, each respectively defined by an
17
+ * interface whose name is consistent with that node
18
+ * - Update this type to be a union of those interfaces
19
+ * - Implement that in {@link childrenInitOptions}
20
+ * - Update downstream construction to switch over whatever narrows the union
21
+ * - Bonus points: revise each concrete {@link DescendantNode} to use a common
22
+ * constructor API (i.e. a static `from` method, since several such classes
23
+ * already have private constructors). Then downstream isn't even a switch
24
+ * statement, it's just a lookup table.
25
+ *
26
+ * @todo As of this commit, and as now mentioned on {@link DescendantNode}, and
27
+ * as discussed in
28
+ * {@link https://github.com/getodk/web-forms/pull/352#discussion_r2008237762}:
29
+ * this interface is intended as an intermediate step toward these goals.
30
+ */
31
+ export interface DescendantNodeInitOptions {
32
+ readonly childNodeset: string;
33
+ readonly definition: ChildNodeDefinition;
34
+ readonly instanceNodes: readonly StaticElement[];
35
+ }