@getodk/xforms-engine 0.6.0 → 0.8.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 (332) hide show
  1. package/dist/client/BaseNode.d.ts +4 -4
  2. package/dist/client/BaseValueNode.d.ts +7 -3
  3. package/dist/client/RootNode.d.ts +20 -16
  4. package/dist/client/UploadNode.d.ts +53 -0
  5. package/dist/client/attachments/InstanceAttachmentMeta.d.ts +8 -0
  6. package/dist/client/attachments/InstanceAttachmentsConfig.d.ts +8 -0
  7. package/dist/client/constants.d.ts +11 -12
  8. package/dist/client/form/CreateFormInstance.d.ts +14 -0
  9. package/dist/client/form/EditFormInstance.d.ts +62 -0
  10. package/dist/client/form/FormInstance.d.ts +104 -0
  11. package/dist/client/form/FormInstanceConfig.d.ts +19 -0
  12. package/dist/client/form/FormResource.d.ts +1 -0
  13. package/dist/client/form/LoadForm.d.ts +79 -0
  14. package/dist/client/form/LoadFormResult.d.ts +67 -0
  15. package/dist/client/form/RestoreFormInstance.d.ts +8 -0
  16. package/dist/client/hierarchy.d.ts +4 -5
  17. package/dist/client/index.d.ts +40 -11
  18. package/dist/client/node-types.d.ts +2 -3
  19. package/dist/client/repeat/BaseRepeatRangeNode.d.ts +3 -4
  20. package/dist/client/repeat/RepeatInstanceNode.d.ts +4 -5
  21. package/dist/client/repeat/RepeatRangeControlledNode.d.ts +2 -2
  22. package/dist/client/repeat/RepeatRangeUncontrolledNode.d.ts +2 -2
  23. package/dist/client/resources.d.ts +1 -1
  24. package/dist/client/serialization/InstanceData.d.ts +14 -0
  25. package/dist/client/serialization/InstanceFile.d.ts +6 -0
  26. package/dist/client/serialization/InstancePayload.d.ts +93 -0
  27. package/dist/client/serialization/InstancePayloadOptions.d.ts +24 -0
  28. package/dist/client/serialization/InstanceState.d.ts +12 -0
  29. package/dist/client/submission/{SubmissionDefinition.d.ts → SubmissionMeta.d.ts} +1 -1
  30. package/dist/entrypoints/FormInstance.d.ts +20 -0
  31. package/dist/entrypoints/FormResult/BaseFormResult.d.ts +22 -0
  32. package/dist/entrypoints/FormResult/BaseInstantiableFormResult.d.ts +25 -0
  33. package/dist/entrypoints/FormResult/FormFailureResult.d.ts +17 -0
  34. package/dist/entrypoints/FormResult/FormSuccessResult.d.ts +15 -0
  35. package/dist/entrypoints/FormResult/FormWarningResult.d.ts +15 -0
  36. package/dist/entrypoints/createInstance.d.ts +9 -0
  37. package/dist/entrypoints/editInstance.d.ts +9 -0
  38. package/dist/entrypoints/index.d.ts +4 -0
  39. package/dist/entrypoints/loadForm.d.ts +4 -0
  40. package/dist/entrypoints/restoreInstance.d.ts +9 -0
  41. package/dist/error/LoadFormFailureError.d.ts +9 -0
  42. package/dist/error/MalformedInstanceDataError.d.ts +3 -0
  43. package/dist/error/TemplatedNodeAttributeSerializationError.d.ts +22 -0
  44. package/dist/error/UploadValueTypeError.d.ts +8 -0
  45. package/dist/index.d.ts +2 -33
  46. package/dist/index.js +8280 -6779
  47. package/dist/index.js.map +1 -1
  48. package/dist/instance/Group.d.ts +6 -5
  49. package/dist/instance/InputControl.d.ts +5 -4
  50. package/dist/instance/ModelValue.d.ts +5 -4
  51. package/dist/instance/Note.d.ts +4 -3
  52. package/dist/instance/PrimaryInstance.d.ts +34 -8
  53. package/dist/instance/RangeControl.d.ts +5 -4
  54. package/dist/instance/RankControl.d.ts +6 -5
  55. package/dist/instance/Root.d.ts +7 -9
  56. package/dist/instance/SelectControl.d.ts +4 -3
  57. package/dist/instance/Subtree.d.ts +6 -5
  58. package/dist/instance/TriggerControl.d.ts +4 -3
  59. package/dist/instance/UploadControl.d.ts +58 -0
  60. package/dist/instance/abstract/DescendantNode.d.ts +10 -1
  61. package/dist/instance/abstract/InstanceNode.d.ts +7 -4
  62. package/dist/instance/abstract/ValueNode.d.ts +7 -5
  63. package/dist/instance/attachments/InstanceAttachment.d.ts +42 -0
  64. package/dist/instance/attachments/InstanceAttachmentsState.d.ts +9 -0
  65. package/dist/instance/children/DescendantNodeInitOptions.d.ts +32 -0
  66. package/dist/instance/{children.d.ts → children/buildChildren.d.ts} +1 -1
  67. package/dist/instance/children/childrenInitOptions.d.ts +9 -0
  68. package/dist/instance/children/normalizeChildInitOptions.d.ts +2 -0
  69. package/dist/instance/hierarchy.d.ts +6 -7
  70. package/dist/instance/input/InitialInstanceState.d.ts +13 -0
  71. package/dist/instance/input/InstanceAttachmentMap.d.ts +19 -0
  72. package/dist/instance/internal-api/InstanceAttachmentContext.d.ts +19 -0
  73. package/dist/instance/internal-api/InstanceConfig.d.ts +4 -9
  74. package/dist/instance/internal-api/InstanceValueContext.d.ts +8 -1
  75. package/dist/instance/internal-api/serialization/ClientReactiveSerializableInstance.d.ts +16 -0
  76. package/dist/instance/internal-api/serialization/ClientReactiveSerializableLeafNode.d.ts +32 -0
  77. package/dist/instance/internal-api/serialization/ClientReactiveSerializableParentNode.d.ts +18 -0
  78. package/dist/instance/internal-api/serialization/ClientReactiveSerializableTemplatedNode.d.ts +13 -0
  79. package/dist/instance/internal-api/serialization/ClientReactiveSerializableValueNode.d.ts +21 -0
  80. package/dist/instance/repeat/BaseRepeatRange.d.ts +10 -8
  81. package/dist/instance/repeat/RepeatInstance.d.ts +10 -7
  82. package/dist/instance/repeat/RepeatRangeControlled.d.ts +27 -3
  83. package/dist/instance/repeat/RepeatRangeUncontrolled.d.ts +4 -3
  84. package/dist/instance/resource.d.ts +5 -1
  85. package/dist/integration/xpath/EngineXPathEvaluator.d.ts +2 -2
  86. package/dist/integration/xpath/adapter/kind.d.ts +4 -10
  87. package/dist/integration/xpath/static-dom/StaticAttribute.d.ts +4 -5
  88. package/dist/integration/xpath/static-dom/StaticDocument.d.ts +13 -10
  89. package/dist/integration/xpath/static-dom/StaticElement.d.ts +21 -22
  90. package/dist/integration/xpath/static-dom/StaticNode.d.ts +1 -1
  91. package/dist/integration/xpath/static-dom/StaticParentNode.d.ts +13 -0
  92. package/dist/integration/xpath/static-dom/staticNodeName.d.ts +3 -0
  93. package/dist/lib/client-reactivity/instance-state/createNodeRangeInstanceState.d.ts +4 -0
  94. package/dist/lib/client-reactivity/instance-state/createParentNodeInstanceState.d.ts +4 -0
  95. package/dist/lib/client-reactivity/instance-state/createPrimaryInstanceState.d.ts +3 -0
  96. package/dist/lib/client-reactivity/instance-state/createRootInstanceState.d.ts +3 -0
  97. package/dist/lib/client-reactivity/instance-state/createTemplatedNodeInstanceState.d.ts +6 -0
  98. package/dist/lib/client-reactivity/instance-state/createValueNodeInstanceState.d.ts +3 -0
  99. package/dist/lib/client-reactivity/instance-state/prepareInstancePayload.d.ts +8 -0
  100. package/dist/lib/names/UnprefixedXFormsName.d.ts +4 -0
  101. package/dist/lib/reactivity/createInstanceAttachment.d.ts +8 -0
  102. package/dist/lib/reactivity/createInstanceValueState.d.ts +2 -27
  103. package/dist/lib/resource-helpers.d.ts +2 -0
  104. package/dist/parse/XFormDOM.d.ts +1 -1
  105. package/dist/parse/body/BodyDefinition.d.ts +2 -1
  106. package/dist/parse/body/control/UploadControlDefinition.d.ts +2 -0
  107. package/dist/parse/model/BindDefinition.d.ts +1 -1
  108. package/dist/parse/model/BindTypeDefinition.d.ts +2 -7
  109. package/dist/parse/model/ItextTranslationsDefinition.d.ts +18 -0
  110. package/dist/parse/model/LeafNodeDefinition.d.ts +4 -5
  111. package/dist/parse/model/ModelBindMap.d.ts +1 -1
  112. package/dist/parse/model/ModelDefinition.d.ts +9 -2
  113. package/dist/parse/model/NodeDefinition.d.ts +18 -30
  114. package/dist/parse/model/NoteNodeDefinition.d.ts +3 -2
  115. package/dist/parse/model/RangeNodeDefinition.d.ts +2 -1
  116. package/dist/parse/model/RepeatDefinition.d.ts +62 -0
  117. package/dist/parse/model/RootAttributeDefinition.d.ts +1 -4
  118. package/dist/parse/model/RootAttributeMap.d.ts +2 -1
  119. package/dist/parse/model/RootDefinition.d.ts +7 -8
  120. package/dist/parse/model/SecondaryInstance/SecondaryInstancesDefinition.d.ts +15 -2
  121. package/dist/parse/model/SecondaryInstance/assertSecondaryInstanceDefinition.d.ts +5 -0
  122. package/dist/parse/model/SecondaryInstance/defineSecondaryInstance.d.ts +5 -0
  123. package/dist/parse/model/SecondaryInstance/sources/BlankSecondaryInstanceSource.d.ts +1 -7
  124. package/dist/parse/model/SecondaryInstance/sources/CSVExternalSecondaryInstance.d.ts +1 -1
  125. package/dist/parse/model/SecondaryInstance/sources/GeoJSONExternalSecondaryInstance.d.ts +1 -1
  126. package/dist/parse/model/SecondaryInstance/sources/InternalSecondaryInstanceSource.d.ts +1 -1
  127. package/dist/parse/model/SecondaryInstance/sources/SecondaryInstanceSource.d.ts +1 -1
  128. package/dist/parse/model/SecondaryInstance/sources/XMLExternalSecondaryInstanceSource.d.ts +1 -1
  129. package/dist/parse/model/{FormSubmissionDefinition.d.ts → SubmissionDefinition.d.ts} +2 -2
  130. package/dist/parse/model/SubtreeDefinition.d.ts +4 -5
  131. package/dist/parse/model/nodeDefinitionMap.d.ts +5 -0
  132. package/dist/parse/shared/parseInstanceXML.d.ts +21 -0
  133. package/dist/parse/shared/parseStaticDocumentFromDOMSubtree.d.ts +4 -21
  134. package/dist/solid.js +8251 -6751
  135. package/dist/solid.js.map +1 -1
  136. package/package.json +15 -14
  137. package/src/client/BaseNode.ts +4 -4
  138. package/src/client/BaseValueNode.ts +7 -3
  139. package/src/client/RootNode.ts +32 -19
  140. package/src/client/UploadNode.ts +78 -0
  141. package/src/client/attachments/InstanceAttachmentMeta.ts +10 -0
  142. package/src/client/attachments/InstanceAttachmentsConfig.ts +13 -0
  143. package/src/client/constants.ts +12 -14
  144. package/src/client/form/CreateFormInstance.ts +19 -0
  145. package/src/client/form/EditFormInstance.ts +93 -0
  146. package/src/client/form/FormInstance.ts +114 -0
  147. package/src/client/form/FormInstanceConfig.ts +21 -0
  148. package/src/client/form/FormResource.ts +1 -0
  149. package/src/client/form/LoadForm.ts +92 -0
  150. package/src/client/form/LoadFormResult.ts +103 -0
  151. package/src/client/form/RestoreFormInstance.ts +14 -0
  152. package/src/client/hierarchy.ts +5 -8
  153. package/src/client/index.ts +49 -29
  154. package/src/client/node-types.ts +3 -8
  155. package/src/client/repeat/BaseRepeatRangeNode.ts +3 -4
  156. package/src/client/repeat/RepeatInstanceNode.ts +4 -8
  157. package/src/client/repeat/RepeatRangeControlledNode.ts +2 -2
  158. package/src/client/repeat/RepeatRangeUncontrolledNode.ts +2 -2
  159. package/src/client/resources.ts +2 -2
  160. package/src/client/serialization/InstanceData.ts +24 -0
  161. package/src/client/serialization/InstanceFile.ts +9 -0
  162. package/src/client/serialization/InstancePayload.ts +126 -0
  163. package/src/client/serialization/InstancePayloadOptions.ts +29 -0
  164. package/src/client/serialization/InstanceState.ts +14 -0
  165. package/src/client/submission/{SubmissionDefinition.ts → SubmissionMeta.ts} +1 -1
  166. package/src/entrypoints/FormInstance.ts +56 -0
  167. package/src/entrypoints/FormResult/BaseFormResult.ts +40 -0
  168. package/src/entrypoints/FormResult/BaseInstantiableFormResult.ts +109 -0
  169. package/src/entrypoints/FormResult/FormFailureResult.ts +44 -0
  170. package/src/entrypoints/FormResult/FormSuccessResult.ts +25 -0
  171. package/src/entrypoints/FormResult/FormWarningResult.ts +25 -0
  172. package/src/entrypoints/createInstance.ts +23 -0
  173. package/src/entrypoints/editInstance.ts +24 -0
  174. package/src/entrypoints/index.ts +4 -0
  175. package/src/entrypoints/loadForm.ts +154 -0
  176. package/src/entrypoints/restoreInstance.ts +27 -0
  177. package/src/error/LoadFormFailureError.ts +114 -0
  178. package/src/error/MalformedInstanceDataError.ts +3 -0
  179. package/src/error/TemplatedNodeAttributeSerializationError.ts +24 -0
  180. package/src/error/UploadValueTypeError.ts +13 -0
  181. package/src/index.ts +2 -46
  182. package/src/instance/Group.ts +16 -15
  183. package/src/instance/InputControl.ts +17 -11
  184. package/src/instance/ModelValue.ts +17 -11
  185. package/src/instance/Note.ts +10 -9
  186. package/src/instance/PrimaryInstance.ts +68 -31
  187. package/src/instance/RangeControl.ts +17 -11
  188. package/src/instance/RankControl.ts +28 -19
  189. package/src/instance/Root.ts +20 -31
  190. package/src/instance/SelectControl.ts +21 -12
  191. package/src/instance/Subtree.ts +16 -15
  192. package/src/instance/TriggerControl.ts +21 -12
  193. package/src/instance/UploadControl.ts +184 -0
  194. package/src/instance/abstract/DescendantNode.ts +12 -2
  195. package/src/instance/abstract/InstanceNode.ts +9 -5
  196. package/src/instance/abstract/ValueNode.ts +11 -13
  197. package/src/instance/attachments/InstanceAttachment.ts +69 -0
  198. package/src/instance/attachments/InstanceAttachmentsState.ts +18 -0
  199. package/src/instance/children/DescendantNodeInitOptions.ts +35 -0
  200. package/src/instance/{children.ts → children/buildChildren.ts} +57 -53
  201. package/src/instance/children/childrenInitOptions.ts +117 -0
  202. package/src/instance/children/normalizeChildInitOptions.ts +332 -0
  203. package/src/instance/hierarchy.ts +6 -9
  204. package/src/instance/input/InitialInstanceState.ts +108 -0
  205. package/src/instance/input/InstanceAttachmentMap.ts +154 -0
  206. package/src/instance/internal-api/InstanceAttachmentContext.ts +20 -0
  207. package/src/instance/internal-api/InstanceConfig.ts +6 -10
  208. package/src/instance/internal-api/InstanceValueContext.ts +9 -1
  209. package/src/instance/internal-api/serialization/ClientReactiveSerializableInstance.ts +22 -0
  210. package/src/instance/internal-api/serialization/ClientReactiveSerializableLeafNode.ts +43 -0
  211. package/src/instance/internal-api/serialization/ClientReactiveSerializableParentNode.ts +26 -0
  212. package/src/instance/internal-api/serialization/ClientReactiveSerializableTemplatedNode.ts +24 -0
  213. package/src/instance/internal-api/serialization/ClientReactiveSerializableValueNode.ts +28 -0
  214. package/src/instance/repeat/BaseRepeatRange.ts +19 -24
  215. package/src/instance/repeat/RepeatInstance.ts +26 -19
  216. package/src/instance/repeat/RepeatRangeControlled.ts +90 -17
  217. package/src/instance/repeat/RepeatRangeUncontrolled.ts +10 -9
  218. package/src/instance/resource.ts +14 -1
  219. package/src/integration/xpath/EngineXPathEvaluator.ts +2 -2
  220. package/src/integration/xpath/adapter/kind.ts +1 -28
  221. package/src/integration/xpath/adapter/traversal.ts +2 -2
  222. package/src/integration/xpath/static-dom/StaticAttribute.ts +6 -5
  223. package/src/integration/xpath/static-dom/StaticDocument.ts +17 -16
  224. package/src/integration/xpath/static-dom/StaticElement.ts +196 -50
  225. package/src/integration/xpath/static-dom/StaticNode.ts +1 -1
  226. package/src/integration/xpath/static-dom/StaticParentNode.ts +22 -0
  227. package/src/integration/xpath/static-dom/staticNodeName.ts +20 -0
  228. package/src/lib/client-reactivity/instance-state/createNodeRangeInstanceState.ts +17 -0
  229. package/src/lib/client-reactivity/instance-state/createParentNodeInstanceState.ts +22 -0
  230. package/src/lib/client-reactivity/instance-state/createPrimaryInstanceState.ts +12 -0
  231. package/src/lib/client-reactivity/{submission/createRootSubmissionState.ts → instance-state/createRootInstanceState.ts} +4 -4
  232. package/src/lib/client-reactivity/instance-state/createTemplatedNodeInstanceState.ts +31 -0
  233. package/src/lib/client-reactivity/instance-state/createValueNodeInstanceState.ts +21 -0
  234. package/src/lib/client-reactivity/instance-state/prepareInstancePayload.ts +237 -0
  235. package/src/lib/names/UnprefixedXFormsName.ts +12 -0
  236. package/src/lib/reactivity/createInstanceAttachment.ts +212 -0
  237. package/src/lib/reactivity/createInstanceValueState.ts +27 -51
  238. package/src/lib/resource-helpers.ts +33 -0
  239. package/src/parse/XFormDOM.ts +1 -3
  240. package/src/parse/body/BodyDefinition.ts +4 -0
  241. package/src/parse/body/control/UploadControlDefinition.ts +42 -0
  242. package/src/parse/model/BindDefinition.ts +1 -1
  243. package/src/parse/model/BindTypeDefinition.ts +68 -26
  244. package/src/parse/model/ItextTranslationsDefinition.ts +79 -0
  245. package/src/parse/model/LeafNodeDefinition.ts +3 -5
  246. package/src/parse/model/ModelBindMap.ts +0 -5
  247. package/src/parse/model/ModelDefinition.ts +36 -3
  248. package/src/parse/model/NodeDefinition.ts +19 -45
  249. package/src/parse/model/NoteNodeDefinition.ts +4 -3
  250. package/src/parse/model/RangeNodeDefinition.ts +3 -2
  251. package/src/parse/model/RepeatDefinition.ts +382 -0
  252. package/src/parse/model/RootAttributeDefinition.ts +6 -7
  253. package/src/parse/model/RootAttributeMap.ts +15 -10
  254. package/src/parse/model/RootDefinition.ts +17 -19
  255. package/src/parse/model/SecondaryInstance/SecondaryInstancesDefinition.ts +23 -2
  256. package/src/parse/model/SecondaryInstance/assertSecondaryInstanceDefinition.ts +14 -0
  257. package/src/parse/model/SecondaryInstance/defineSecondaryInstance.ts +32 -0
  258. package/src/parse/model/SecondaryInstance/sources/BlankSecondaryInstanceSource.ts +3 -24
  259. package/src/parse/model/SecondaryInstance/sources/CSVExternalSecondaryInstance.ts +33 -86
  260. package/src/parse/model/SecondaryInstance/sources/ExternalSecondaryInstanceResource.ts +1 -30
  261. package/src/parse/model/SecondaryInstance/sources/GeoJSONExternalSecondaryInstance.ts +64 -137
  262. package/src/parse/model/SecondaryInstance/sources/InternalSecondaryInstanceSource.ts +9 -7
  263. package/src/parse/model/SecondaryInstance/sources/SecondaryInstanceSource.ts +1 -1
  264. package/src/parse/model/SecondaryInstance/sources/XMLExternalSecondaryInstanceSource.ts +7 -7
  265. package/src/parse/model/{FormSubmissionDefinition.ts → SubmissionDefinition.ts} +2 -2
  266. package/src/parse/model/SubtreeDefinition.ts +4 -5
  267. package/src/parse/model/nodeDefinitionMap.ts +34 -0
  268. package/src/parse/shared/parseInstanceXML.ts +79 -0
  269. package/src/parse/shared/parseStaticDocumentFromDOMSubtree.ts +45 -130
  270. package/dist/client/EngineConfig.d.ts +0 -79
  271. package/dist/client/submission/SubmissionData.d.ts +0 -7
  272. package/dist/client/submission/SubmissionInstanceFile.d.ts +0 -6
  273. package/dist/client/submission/SubmissionOptions.d.ts +0 -23
  274. package/dist/client/submission/SubmissionResult.d.ts +0 -91
  275. package/dist/client/submission/SubmissionState.d.ts +0 -12
  276. package/dist/client/unsupported/UnsupportedControlNode.d.ts +0 -30
  277. package/dist/client/unsupported/UploadNode.d.ts +0 -9
  278. package/dist/instance/abstract/UnsupportedControl.d.ts +0 -54
  279. package/dist/instance/index.d.ts +0 -8
  280. package/dist/instance/internal-api/ValueContext.d.ts +0 -23
  281. package/dist/instance/internal-api/submission/ClientReactiveSubmittableInstance.d.ts +0 -14
  282. package/dist/instance/internal-api/submission/ClientReactiveSubmittableLeafNode.d.ts +0 -32
  283. package/dist/instance/internal-api/submission/ClientReactiveSubmittableParentNode.d.ts +0 -19
  284. package/dist/instance/internal-api/submission/ClientReactiveSubmittableValueNode.d.ts +0 -18
  285. package/dist/instance/unsupported/UploadControl.d.ts +0 -6
  286. package/dist/lib/client-reactivity/submission/createInstanceSubmissionState.d.ts +0 -3
  287. package/dist/lib/client-reactivity/submission/createLeafNodeSubmissionState.d.ts +0 -3
  288. package/dist/lib/client-reactivity/submission/createNodeRangeSubmissionState.d.ts +0 -4
  289. package/dist/lib/client-reactivity/submission/createParentNodeSubmissionState.d.ts +0 -4
  290. package/dist/lib/client-reactivity/submission/createRootSubmissionState.d.ts +0 -3
  291. package/dist/lib/client-reactivity/submission/createValueNodeSubmissionState.d.ts +0 -3
  292. package/dist/lib/client-reactivity/submission/prepareSubmission.d.ts +0 -8
  293. package/dist/lib/reactivity/createValueState.d.ts +0 -40
  294. package/dist/parse/model/ItextTranslation/ItextTranslationDefinition.d.ts +0 -4
  295. package/dist/parse/model/ItextTranslation/ItextTranslationRootDefinition.d.ts +0 -9
  296. package/dist/parse/model/ItextTranslation/ItextTranslationsDefinition.d.ts +0 -8
  297. package/dist/parse/model/RepeatInstanceDefinition.d.ts +0 -17
  298. package/dist/parse/model/RepeatRangeDefinition.d.ts +0 -32
  299. package/dist/parse/model/RepeatTemplateDefinition.d.ts +0 -31
  300. package/dist/parse/model/SecondaryInstance/SecondaryInstanceDefinition.d.ts +0 -4
  301. package/dist/parse/model/SecondaryInstance/SecondaryInstanceRootDefinition.d.ts +0 -7
  302. package/src/client/EngineConfig.ts +0 -84
  303. package/src/client/submission/SubmissionData.ts +0 -12
  304. package/src/client/submission/SubmissionInstanceFile.ts +0 -9
  305. package/src/client/submission/SubmissionOptions.ts +0 -28
  306. package/src/client/submission/SubmissionResult.ts +0 -124
  307. package/src/client/submission/SubmissionState.ts +0 -14
  308. package/src/client/unsupported/UnsupportedControlNode.ts +0 -36
  309. package/src/client/unsupported/UploadNode.ts +0 -14
  310. package/src/instance/abstract/UnsupportedControl.ts +0 -175
  311. package/src/instance/index.ts +0 -55
  312. package/src/instance/internal-api/ValueContext.ts +0 -28
  313. package/src/instance/internal-api/submission/ClientReactiveSubmittableInstance.ts +0 -20
  314. package/src/instance/internal-api/submission/ClientReactiveSubmittableLeafNode.ts +0 -43
  315. package/src/instance/internal-api/submission/ClientReactiveSubmittableParentNode.ts +0 -26
  316. package/src/instance/internal-api/submission/ClientReactiveSubmittableValueNode.ts +0 -24
  317. package/src/instance/unsupported/UploadControl.ts +0 -9
  318. package/src/lib/client-reactivity/submission/createInstanceSubmissionState.ts +0 -12
  319. package/src/lib/client-reactivity/submission/createLeafNodeSubmissionState.ts +0 -20
  320. package/src/lib/client-reactivity/submission/createNodeRangeSubmissionState.ts +0 -17
  321. package/src/lib/client-reactivity/submission/createParentNodeSubmissionState.ts +0 -22
  322. package/src/lib/client-reactivity/submission/createValueNodeSubmissionState.ts +0 -21
  323. package/src/lib/client-reactivity/submission/prepareSubmission.ts +0 -172
  324. package/src/lib/reactivity/createValueState.ts +0 -200
  325. package/src/parse/model/ItextTranslation/ItextTranslationDefinition.ts +0 -4
  326. package/src/parse/model/ItextTranslation/ItextTranslationRootDefinition.ts +0 -42
  327. package/src/parse/model/ItextTranslation/ItextTranslationsDefinition.ts +0 -31
  328. package/src/parse/model/RepeatInstanceDefinition.ts +0 -38
  329. package/src/parse/model/RepeatRangeDefinition.ts +0 -98
  330. package/src/parse/model/RepeatTemplateDefinition.ts +0 -149
  331. package/src/parse/model/SecondaryInstance/SecondaryInstanceDefinition.ts +0 -4
  332. package/src/parse/model/SecondaryInstance/SecondaryInstanceRootDefinition.ts +0 -12
@@ -2,10 +2,11 @@ import { XPathNodeKindKey } from '@getodk/xpath';
2
2
  import { Accessor } from 'solid-js';
3
3
  import { BaseValueNode } from '../../client/BaseValueNode.ts';
4
4
  import { LeafNodeType as ValueNodeType } from '../../client/node-types.ts';
5
- import { SubmissionState } from '../../client/submission/SubmissionState.ts';
5
+ import { InstanceState } from '../../client/serialization/InstanceState.ts';
6
6
  import { AnyViolation, LeafNodeValidationState } from '../../client/validation.ts';
7
7
  import { ValueType } from '../../client/ValueType.ts';
8
8
  import { XFormsXPathElement } from '../../integration/xpath/adapter/XFormsXPathNode.ts';
9
+ import { StaticLeafElement } from '../../integration/xpath/static-dom/StaticElement.ts';
9
10
  import { RuntimeValueSetter, RuntimeValueState, ValueCodec } from '../../lib/codecs/ValueCodec.ts';
10
11
  import { CurrentState } from '../../lib/reactivity/node-state/createCurrentState.ts';
11
12
  import { EngineState } from '../../lib/reactivity/node-state/createEngineState.ts';
@@ -16,7 +17,7 @@ import { LeafNodeDefinition } from '../../parse/model/LeafNodeDefinition.ts';
16
17
  import { GeneralParentNode } from '../hierarchy.ts';
17
18
  import { EvaluationContext } from '../internal-api/EvaluationContext.ts';
18
19
  import { DecodeInstanceValue, InstanceValueContext } from '../internal-api/InstanceValueContext.ts';
19
- import { ClientReactiveSubmittableValueNode } from '../internal-api/submission/ClientReactiveSubmittableValueNode.ts';
20
+ import { ClientReactiveSerializableValueNode } from '../internal-api/serialization/ClientReactiveSerializableValueNode.ts';
20
21
  import { ValidationContext } from '../internal-api/ValidationContext.ts';
21
22
  import { DescendantNodeStateSpec, DescendantNode } from './DescendantNode.ts';
22
23
  export type ValueNodeDefinition<V extends ValueType> = LeafNodeDefinition<V>;
@@ -25,7 +26,8 @@ export interface ValueNodeStateSpec<RuntimeValue> extends DescendantNodeStateSpe
25
26
  readonly value: SimpleAtomicState<RuntimeValue>;
26
27
  readonly instanceValue: Accessor<string>;
27
28
  }
28
- export declare abstract class ValueNode<V extends ValueType, Definition extends ValueNodeDefinition<V>, RuntimeValue extends RuntimeInputValue, RuntimeInputValue = RuntimeValue> extends DescendantNode<Definition, ValueNodeStateSpec<RuntimeValue>, GeneralParentNode, null> implements BaseValueNode<V, RuntimeValue>, XFormsXPathElement, EvaluationContext, InstanceValueContext, ValidationContext, ClientReactiveSubmittableValueNode {
29
+ export declare abstract class ValueNode<V extends ValueType, Definition extends ValueNodeDefinition<V>, RuntimeValue extends RuntimeInputValue, RuntimeInputValue = RuntimeValue> extends DescendantNode<Definition, ValueNodeStateSpec<RuntimeValue>, GeneralParentNode, null> implements BaseValueNode<V, RuntimeValue>, XFormsXPathElement, EvaluationContext, InstanceValueContext, ValidationContext, ClientReactiveSerializableValueNode {
30
+ readonly instanceNode: StaticLeafElement | null;
29
31
  protected readonly validation: SharedValidationState;
30
32
  protected readonly getInstanceValue: Accessor<string>;
31
33
  protected readonly valueState: RuntimeValueState<RuntimeValue>;
@@ -39,8 +41,8 @@ export declare abstract class ValueNode<V extends ValueType, Definition extends
39
41
  readonly valueType: V;
40
42
  abstract readonly currentState: CurrentState<ValueNodeStateSpec<RuntimeValue>>;
41
43
  get validationState(): LeafNodeValidationState;
42
- readonly submissionState: SubmissionState;
43
- constructor(parent: GeneralParentNode, definition: Definition, codec: ValueCodec<V, RuntimeValue, RuntimeInputValue>);
44
+ readonly instanceState: InstanceState;
45
+ constructor(parent: GeneralParentNode, instanceNode: StaticLeafElement | null, definition: Definition, codec: ValueCodec<V, RuntimeValue, RuntimeInputValue>);
44
46
  getViolation(): AnyViolation | null;
45
47
  isBlank(): boolean;
46
48
  getChildren(): readonly [];
@@ -0,0 +1,42 @@
1
+ import { Accessor } from 'solid-js';
2
+ import { SimpleAtomicState, SimpleAtomicStateSetter } from '../../lib/reactivity/types.ts';
3
+ import { InstanceAttachmentContext } from '../internal-api/InstanceAttachmentContext.ts';
4
+ import { DecodeInstanceValue } from '../internal-api/InstanceValueContext.ts';
5
+ export type InstanceAttachmentFileName = string;
6
+ export type InstanceAttachmentRuntimeValue = File | null;
7
+ export interface InstanceAttachmentOptions {
8
+ readonly getFileName: Accessor<InstanceAttachmentFileName | null>;
9
+ readonly getInstanceValue: Accessor<InstanceAttachmentFileName>;
10
+ readonly decodeInstanceValue: DecodeInstanceValue;
11
+ readonly getValue: Accessor<InstanceAttachmentRuntimeValue>;
12
+ readonly setValue: SimpleAtomicStateSetter<InstanceAttachmentRuntimeValue>;
13
+ readonly valueState: SimpleAtomicState<InstanceAttachmentRuntimeValue>;
14
+ }
15
+ export declare class InstanceAttachment {
16
+ /**
17
+ * 1. Creates {@link InstanceAttachment | attachment state} from
18
+ * {@link InstanceAttachmentOptions}
19
+ * 2. Registers that attachment state in an instance-global
20
+ * {@link InstanceAttachmentsState} entry
21
+ *
22
+ * This allows an instance to:
23
+ *
24
+ * - Produce distinct file names for each attachment
25
+ * - Track all attachments so they can be serialized in an
26
+ * {@link InstancePayload}
27
+ */
28
+ static init(context: InstanceAttachmentContext, options: InstanceAttachmentOptions): InstanceAttachment;
29
+ /**
30
+ * This property isn't used at runtime. It causes TypeScript to treat
31
+ * {@link InstanceAttachment} as a nominal type, ensuring
32
+ * {@link InstanceAttachment.init} is called to instantiate it.
33
+ */
34
+ protected readonly _: null;
35
+ readonly getFileName: Accessor<InstanceAttachmentFileName | null>;
36
+ readonly getInstanceValue: Accessor<InstanceAttachmentFileName>;
37
+ readonly decodeInstanceValue: DecodeInstanceValue;
38
+ readonly getValue: Accessor<InstanceAttachmentRuntimeValue>;
39
+ readonly setValue: SimpleAtomicStateSetter<InstanceAttachmentRuntimeValue>;
40
+ readonly valueState: SimpleAtomicState<InstanceAttachmentRuntimeValue>;
41
+ private constructor();
42
+ }
@@ -0,0 +1,9 @@
1
+ import { StaticLeafElement } from '../../integration/xpath/static-dom/StaticElement.ts';
2
+ import { InstanceAttachmentMap } from '../input/InstanceAttachmentMap.ts';
3
+ import { InstanceAttachmentContext } from '../internal-api/InstanceAttachmentContext.ts';
4
+ import { InstanceAttachment, InstanceAttachmentRuntimeValue } from './InstanceAttachment.ts';
5
+ export declare class InstanceAttachmentsState extends Map<InstanceAttachmentContext, InstanceAttachment> {
6
+ private readonly sourceAttachments;
7
+ constructor(sourceAttachments?: InstanceAttachmentMap | null);
8
+ getInitialFileValue(instanceNode: StaticLeafElement | null): InstanceAttachmentRuntimeValue;
9
+ }
@@ -0,0 +1,32 @@
1
+ import { StaticElement } from '../../integration/xpath/static-dom/StaticElement.ts';
2
+ import { ChildNodeDefinition } from '../../parse/model/NodeDefinition.ts';
3
+ /**
4
+ * @todo We could pretty significantly simplify downstream child node
5
+ * construction logic, if we break this down into a tagged union (essentially
6
+ * moving the branchy type refinement aspects up the stack, probably trimming
7
+ * the construction logic itself down to a switch statement). At which point,
8
+ * it'd also probably be easier to reason about each of those constructors
9
+ * accepting input exactly as it's represented as a member of this hypothetical
10
+ * tagged union. Something like this:
11
+ *
12
+ * - Revise each concrete {@link DescendantNode} class to accept an options-like
13
+ * object suitable for its construction, each respectively defined by an
14
+ * interface whose name is consistent with that node
15
+ * - Update this type to be a union of those interfaces
16
+ * - Implement that in {@link childrenInitOptions}
17
+ * - Update downstream construction to switch over whatever narrows the union
18
+ * - Bonus points: revise each concrete {@link DescendantNode} to use a common
19
+ * constructor API (i.e. a static `from` method, since several such classes
20
+ * already have private constructors). Then downstream isn't even a switch
21
+ * statement, it's just a lookup table.
22
+ *
23
+ * @todo As of this commit, and as now mentioned on {@link DescendantNode}, and
24
+ * as discussed in
25
+ * {@link https://github.com/getodk/web-forms/pull/352#discussion_r2008237762}:
26
+ * this interface is intended as an intermediate step toward these goals.
27
+ */
28
+ export interface DescendantNodeInitOptions {
29
+ readonly childNodeset: string;
30
+ readonly definition: ChildNodeDefinition;
31
+ readonly instanceNodes: readonly StaticElement[];
32
+ }
@@ -1,2 +1,2 @@
1
- import { GeneralChildNode, GeneralParentNode } from './hierarchy.ts';
1
+ import { GeneralChildNode, GeneralParentNode } from '../hierarchy.ts';
2
2
  export declare const buildChildren: (parent: GeneralParentNode) => GeneralChildNode[];
@@ -0,0 +1,9 @@
1
+ import { ModelDefinition } from '../../parse/model/ModelDefinition.ts';
2
+ import { GeneralParentNode } from '../hierarchy.ts';
3
+ import { DescendantNodeInitOptions } from './DescendantNodeInitOptions.ts';
4
+ export interface ChildrenInitOptions {
5
+ readonly parent: GeneralParentNode;
6
+ readonly model: ModelDefinition;
7
+ readonly children: readonly DescendantNodeInitOptions[];
8
+ }
9
+ export declare const childrenInitOptions: (parent: GeneralParentNode) => ChildrenInitOptions;
@@ -0,0 +1,2 @@
1
+ import { ChildrenInitOptions } from './childrenInitOptions.ts';
2
+ export declare const normalizeChildInitOptions: (options: ChildrenInitOptions) => ChildrenInitOptions;
@@ -4,6 +4,7 @@ import { AnyModelValue } from './ModelValue.ts';
4
4
  import { AnyNote } from './Note.ts';
5
5
  import { PrimaryInstance } from './PrimaryInstance.ts';
6
6
  import { AnyRangeControl } from './RangeControl.ts';
7
+ import { RankControl } from './RankControl.ts';
7
8
  import { RepeatInstance } from './repeat/RepeatInstance.ts';
8
9
  import { RepeatRangeControlled } from './repeat/RepeatRangeControlled.ts';
9
10
  import { RepeatRangeUncontrolled } from './repeat/RepeatRangeUncontrolled.ts';
@@ -11,13 +12,11 @@ import { Root } from './Root.ts';
11
12
  import { SelectControl } from './SelectControl.ts';
12
13
  import { Subtree } from './Subtree.ts';
13
14
  import { TriggerControl } from './TriggerControl.ts';
14
- import { RankControl } from './RankControl.ts';
15
- import { UploadControl } from './unsupported/UploadControl.ts';
15
+ import { UploadControl } from './UploadControl.ts';
16
16
  export type RepeatRange = RepeatRangeControlled | RepeatRangeUncontrolled;
17
- export type AnyUnsupportedControl = UploadControl;
18
- export type AnyNode = PrimaryInstance | Root | Group | Subtree | RepeatRange | RepeatInstance | AnyNote | AnyModelValue | AnyInputControl | AnyRangeControl | RankControl | SelectControl | TriggerControl | AnyUnsupportedControl;
17
+ export type AnyNode = PrimaryInstance | Root | Group | Subtree | RepeatRange | RepeatInstance | AnyNote | AnyModelValue | AnyInputControl | AnyRangeControl | RankControl | SelectControl | TriggerControl | UploadControl;
19
18
  export type AnyParentNode = PrimaryInstance | Root | Group | Subtree | RepeatRange | RepeatInstance;
20
19
  export type GeneralParentNode = Root | Group | Subtree | RepeatInstance;
21
- export type AnyChildNode = Root | Group | Subtree | RepeatRange | RepeatInstance | AnyModelValue | AnyNote | AnyInputControl | AnyRangeControl | RankControl | SelectControl | TriggerControl | AnyUnsupportedControl;
22
- export type GeneralChildNode = Group | Subtree | RepeatRange | AnyModelValue | AnyNote | AnyInputControl | AnyRangeControl | RankControl | SelectControl | TriggerControl | AnyUnsupportedControl;
23
- export type AnyValueNode = AnyModelValue | AnyNote | AnyInputControl | AnyRangeControl | RankControl | SelectControl | TriggerControl | AnyUnsupportedControl;
20
+ export type AnyChildNode = Root | Group | Subtree | RepeatRange | RepeatInstance | AnyModelValue | AnyNote | AnyInputControl | AnyRangeControl | RankControl | SelectControl | TriggerControl | UploadControl;
21
+ export type GeneralChildNode = Group | Subtree | RepeatRange | AnyModelValue | AnyNote | AnyInputControl | AnyRangeControl | RankControl | SelectControl | TriggerControl | UploadControl;
22
+ export type AnyValueNode = AnyModelValue | AnyNote | AnyInputControl | AnyRangeControl | RankControl | SelectControl | TriggerControl | UploadControl;
@@ -0,0 +1,13 @@
1
+ import { EditFormInstanceInput } from '../../client/form/EditFormInstance.ts';
2
+ import { InstanceData } from '../../client/serialization/InstanceData.ts';
3
+ import { StaticDocument } from '../../integration/xpath/static-dom/StaticDocument.ts';
4
+ import { ModelDefinition } from '../../parse/model/ModelDefinition.ts';
5
+ import { InstanceAttachmentMap } from './InstanceAttachmentMap.ts';
6
+ export type InitialInstanceStateSources = readonly [InstanceData, ...InstanceData[]];
7
+ export declare class InitialInstanceState {
8
+ static from(model: ModelDefinition, data: InitialInstanceStateSources): Promise<InitialInstanceState>;
9
+ static resolve(model: ModelDefinition, input: EditFormInstanceInput): Promise<InitialInstanceState>;
10
+ readonly document: StaticDocument;
11
+ readonly attachments: InstanceAttachmentMap;
12
+ private constructor();
13
+ }
@@ -0,0 +1,19 @@
1
+ import { ResolvableInstanceAttachmentsMap } from '../../client/form/EditFormInstance.ts';
2
+ type InstanceAttachmentMapSourceEntry = readonly [key: string, value: FormDataEntryValue];
3
+ interface InstanceAttachmentMapSource {
4
+ entries(): Iterable<InstanceAttachmentMapSourceEntry>;
5
+ }
6
+ type InstanceAttachmentMapSources = readonly [
7
+ InstanceAttachmentMapSource,
8
+ ...InstanceAttachmentMapSource[]
9
+ ];
10
+ export declare class InstanceAttachmentMap extends Map<string, File> {
11
+ static from(sources: InstanceAttachmentMapSources): InstanceAttachmentMap;
12
+ /**
13
+ * @todo
14
+ * @see {@link resolveInstanceAttachmentMapSource}
15
+ */
16
+ static resolve(input: ResolvableInstanceAttachmentsMap): Promise<InstanceAttachmentMap>;
17
+ private constructor();
18
+ }
19
+ export {};
@@ -0,0 +1,19 @@
1
+ import { Accessor } from 'solid-js';
2
+ import { FormNodeID } from '../../client/identity.ts';
3
+ import { StaticLeafElement } from '../../integration/xpath/static-dom/StaticElement.ts';
4
+ import { ReactiveScope } from '../../lib/reactivity/scope.ts';
5
+ import { InstanceAttachmentsState } from '../attachments/InstanceAttachmentsState.ts';
6
+ import { InstanceConfig } from './InstanceConfig.ts';
7
+ interface InstanceAttachmentRootDocument {
8
+ readonly attachments: InstanceAttachmentsState;
9
+ }
10
+ export interface InstanceAttachmentContext {
11
+ readonly instanceConfig: InstanceConfig;
12
+ readonly scope: ReactiveScope;
13
+ readonly rootDocument: InstanceAttachmentRootDocument;
14
+ readonly nodeId: FormNodeID;
15
+ readonly instanceNode: StaticLeafElement | null;
16
+ readonly isRelevant: Accessor<boolean>;
17
+ readonly isAttached: Accessor<boolean>;
18
+ }
19
+ export {};
@@ -1,14 +1,9 @@
1
- import { MissingResourceBehavior } from '../../client/constants.ts';
1
+ import { InstanceAttachmentFileNameFactory } from '../../client/attachments/InstanceAttachmentsConfig.ts';
2
2
  import { OpaqueReactiveObjectFactory } from '../../client/OpaqueReactiveObjectFactory.ts';
3
- import { FetchFormAttachment, FetchResource } from '../../client/resources.ts';
4
- import { CreateUniqueId } from '../../lib/unique-id.ts';
5
3
  export interface InstanceConfig {
6
- readonly stateFactory: OpaqueReactiveObjectFactory;
7
- readonly fetchFormDefinition: FetchResource;
8
- readonly fetchFormAttachment: FetchFormAttachment;
9
- readonly missingResourceBehavior: MissingResourceBehavior;
10
4
  /**
11
- * Uniqueness per form instance session (so e.g. persistence isn't necessary).
5
+ * @see {@link FormInstanceConfig.stateFactory}
12
6
  */
13
- readonly createUniqueId: CreateUniqueId;
7
+ readonly clientStateFactory: OpaqueReactiveObjectFactory;
8
+ readonly computeAttachmentName: InstanceAttachmentFileNameFactory;
14
9
  }
@@ -1,7 +1,12 @@
1
+ import { FormInstanceInitializationMode } from '../../client/index.ts';
2
+ import { StaticLeafElement } from '../../integration/xpath/static-dom/StaticElement.ts';
1
3
  import { ReactiveScope } from '../../lib/reactivity/scope.ts';
2
4
  import { BindComputationExpression } from '../../parse/expression/BindComputationExpression.ts';
3
5
  import { AnyBindPreloadDefinition } from '../../parse/model/BindPreloadDefinition.ts';
4
6
  import { EvaluationContext } from './EvaluationContext.ts';
7
+ export interface InstanceValueContextDocument {
8
+ readonly initializationMode: FormInstanceInitializationMode;
9
+ }
5
10
  export type DecodeInstanceValue = (value: string) => string;
6
11
  interface InstanceValueContextDefinitionBind {
7
12
  readonly preload: AnyBindPreloadDefinition | null;
@@ -10,11 +15,13 @@ interface InstanceValueContextDefinitionBind {
10
15
  }
11
16
  export interface InstanceValueContextDefinition {
12
17
  readonly bind: InstanceValueContextDefinitionBind;
13
- readonly defaultValue: string;
18
+ readonly template: StaticLeafElement;
14
19
  }
15
20
  export interface InstanceValueContext extends EvaluationContext {
16
21
  readonly scope: ReactiveScope;
22
+ readonly rootDocument: InstanceValueContextDocument;
17
23
  readonly definition: InstanceValueContextDefinition;
24
+ readonly instanceNode: StaticLeafElement | null;
18
25
  readonly decodeInstanceValue: DecodeInstanceValue;
19
26
  isReadonly(): boolean;
20
27
  isRelevant(): boolean;
@@ -0,0 +1,16 @@
1
+ import { SubmissionMeta } from '../../../client/submission/SubmissionMeta.ts';
2
+ import { AncestorNodeValidationState } from '../../../client/validation.ts';
3
+ import { InstanceAttachmentsState } from '../../attachments/InstanceAttachmentsState.ts';
4
+ import { Root } from '../../Root.ts';
5
+ import { ClientReactiveSerializableParentNode, ClientReactiveSerializableParentNodeDefinition } from './ClientReactiveSerializableParentNode.ts';
6
+ interface ClientReactiveSerializableInstanceDefinition extends ClientReactiveSerializableParentNodeDefinition {
7
+ readonly submission: SubmissionMeta;
8
+ }
9
+ export interface ClientReactiveSerializableInstance extends ClientReactiveSerializableParentNode<Root> {
10
+ readonly definition: ClientReactiveSerializableInstanceDefinition;
11
+ readonly root: Root;
12
+ readonly parent: null;
13
+ readonly attachments: InstanceAttachmentsState;
14
+ readonly validationState: AncestorNodeValidationState;
15
+ }
16
+ export {};
@@ -0,0 +1,32 @@
1
+ import { InstanceState } from '../../../client/serialization/InstanceState.ts';
2
+ import { QualifiedName } from '../../../lib/names/QualifiedName.ts';
3
+ import { EscapedXMLText } from '../../../lib/xml-serialization.ts';
4
+ import { ClientReactiveSerializableChildNode, ClientReactiveSerializableParentNode } from './ClientReactiveSerializableParentNode.ts';
5
+ interface ClientReactiveSerializableLeafNodeCurrentState<RuntimeValue> {
6
+ get relevant(): boolean;
7
+ get value(): RuntimeValue;
8
+ }
9
+ export type SerializedInstanceValue = string;
10
+ interface ClientReactiveSerializableLeafNodeDefinition {
11
+ readonly qualifiedName: QualifiedName;
12
+ }
13
+ export interface ClientReactiveSerializableLeafNode<RuntimeValue> {
14
+ readonly definition: ClientReactiveSerializableLeafNodeDefinition;
15
+ readonly parent: ClientReactiveSerializableParentNode<ClientReactiveSerializableChildNode>;
16
+ readonly currentState: ClientReactiveSerializableLeafNodeCurrentState<RuntimeValue>;
17
+ /**
18
+ * A client-reactive serializble leaf node is responsible for producing a
19
+ * string representation of its value state, suitable for instance
20
+ * serialization. It **MUST NOT** perform any further instance
21
+ * serialization-specific serialization duties: in particular, the value
22
+ * **MUST NOT** be escaped for XML. This responsibility is delegated up the
23
+ * stack, to avoid repeat escaping.
24
+ *
25
+ * Note: excluding {@link EscapedXMLText} here does not have an effect on the
26
+ * type system, it is a documentation-only hint, to help guard against future
27
+ * double-escaping mistakes.
28
+ */
29
+ readonly encodeValue: (this: unknown, runtimeValue: RuntimeValue) => Exclude<string, EscapedXMLText>;
30
+ readonly instanceState: InstanceState;
31
+ }
32
+ export {};
@@ -0,0 +1,18 @@
1
+ import { InstanceState } from '../../../client/serialization/InstanceState.ts';
2
+ import { QualifiedName } from '../../../lib/names/QualifiedName.ts';
3
+ export interface ClientReactiveSerializableChildNode {
4
+ readonly instanceState: InstanceState;
5
+ }
6
+ export interface ClientReactiveSerializableParentNodeCurrentState<Child extends ClientReactiveSerializableChildNode> {
7
+ get relevant(): boolean;
8
+ get children(): readonly Child[];
9
+ }
10
+ export interface ClientReactiveSerializableParentNodeDefinition {
11
+ readonly qualifiedName: QualifiedName;
12
+ }
13
+ export interface ClientReactiveSerializableParentNode<Child extends ClientReactiveSerializableChildNode> {
14
+ readonly definition: ClientReactiveSerializableParentNodeDefinition;
15
+ readonly parent: ClientReactiveSerializableParentNode<ClientReactiveSerializableChildNode> | null;
16
+ readonly currentState: ClientReactiveSerializableParentNodeCurrentState<Child>;
17
+ readonly instanceState: InstanceState;
18
+ }
@@ -0,0 +1,13 @@
1
+ import { StaticElement } from '../../../integration/xpath/static-dom/StaticElement.ts';
2
+ import { GeneralChildNode } from '../../hierarchy.ts';
3
+ import { ClientReactiveSerializableParentNode, ClientReactiveSerializableParentNodeCurrentState, ClientReactiveSerializableParentNodeDefinition } from './ClientReactiveSerializableParentNode.ts';
4
+ export interface ClientReactiveSerializableTemplatedNodeCurrentState extends ClientReactiveSerializableParentNodeCurrentState<GeneralChildNode> {
5
+ /** @see {@link TemplatedNodeAttributeSerializationError} */
6
+ get attributes(): unknown;
7
+ }
8
+ export interface ClientReactiveSerializableTemplatedNodeDefinition extends ClientReactiveSerializableParentNodeDefinition {
9
+ readonly template: StaticElement;
10
+ }
11
+ export interface ClientReactiveSerializableTemplatedNode extends ClientReactiveSerializableParentNode<GeneralChildNode> {
12
+ readonly currentState: ClientReactiveSerializableTemplatedNodeCurrentState;
13
+ }
@@ -0,0 +1,21 @@
1
+ import { InstanceState } from '../../../client/serialization/InstanceState.ts';
2
+ import { QualifiedName } from '../../../lib/names/QualifiedName.ts';
3
+ import { ClientReactiveSerializableChildNode, ClientReactiveSerializableParentNode } from './ClientReactiveSerializableParentNode.ts';
4
+ export type SerializedInstanceValue = string;
5
+ interface ClientReactiveSerializableValueNodeCurrentState {
6
+ get relevant(): boolean;
7
+ /**
8
+ * @todo Consider moving into {@link InstanceState}
9
+ */
10
+ get instanceValue(): SerializedInstanceValue;
11
+ }
12
+ interface ClientReactiveSerializableValueNodeDefinition {
13
+ readonly qualifiedName: QualifiedName;
14
+ }
15
+ export interface ClientReactiveSerializableValueNode {
16
+ readonly definition: ClientReactiveSerializableValueNodeDefinition;
17
+ readonly parent: ClientReactiveSerializableParentNode<ClientReactiveSerializableChildNode>;
18
+ readonly currentState: ClientReactiveSerializableValueNodeCurrentState;
19
+ readonly instanceState: InstanceState;
20
+ }
21
+ export {};
@@ -1,23 +1,25 @@
1
1
  import { XPathNodeKindKey } from '@getodk/xpath';
2
2
  import { Accessor } from 'solid-js';
3
3
  import { FormNodeID } from '../../client/identity.ts';
4
+ import { AnyRepeatDefinition } from '../../client/index.ts';
4
5
  import { NodeAppearances } from '../../client/NodeAppearances.ts';
5
6
  import { BaseRepeatRangeNode } from '../../client/repeat/BaseRepeatRangeNode.ts';
6
- import { SubmissionState } from '../../client/submission/SubmissionState.ts';
7
+ import { InstanceState } from '../../client/serialization/InstanceState.ts';
7
8
  import { TextRange } from '../../client/TextRange.ts';
8
9
  import { AncestorNodeValidationState } from '../../client/validation.ts';
9
10
  import { XFormsXPathNodeRange, XFormsXPathNodeRangeKind } from '../../integration/xpath/adapter/XFormsXPathNode.ts';
11
+ import { StaticElement } from '../../integration/xpath/static-dom/StaticElement.ts';
10
12
  import { ChildrenState } from '../../lib/reactivity/createChildrenState.ts';
11
13
  import { MaterializedChildren } from '../../lib/reactivity/materializeCurrentStateChildren.ts';
12
14
  import { CurrentState } from '../../lib/reactivity/node-state/createCurrentState.ts';
13
15
  import { EngineState } from '../../lib/reactivity/node-state/createEngineState.ts';
14
16
  import { SharedNodeState } from '../../lib/reactivity/node-state/createSharedNodeState.ts';
15
- import { AnyRepeatRangeDefinition, ControlledRepeatRangeDefinition } from '../../parse/model/RepeatRangeDefinition.ts';
17
+ import { ControlledRepeatDefinition } from '../../parse/model/RepeatDefinition.ts';
16
18
  import { DescendantNodeSharedStateSpec, DescendantNode } from '../abstract/DescendantNode.ts';
17
19
  import { GeneralParentNode } from '../hierarchy.ts';
18
20
  import { EvaluationContext } from '../internal-api/EvaluationContext.ts';
19
- import { ClientReactiveSubmittableParentNode } from '../internal-api/submission/ClientReactiveSubmittableParentNode.ts';
20
- import { RepeatInstance, RepeatDefinition } from './RepeatInstance.ts';
21
+ import { ClientReactiveSerializableParentNode } from '../internal-api/serialization/ClientReactiveSerializableParentNode.ts';
22
+ import { RepeatInstance } from './RepeatInstance.ts';
21
23
  interface RepeatRangeStateSpec extends DescendantNodeSharedStateSpec {
22
24
  readonly hint: null;
23
25
  readonly label: Accessor<TextRange<'label'> | null>;
@@ -25,8 +27,8 @@ interface RepeatRangeStateSpec extends DescendantNodeSharedStateSpec {
25
27
  readonly valueOptions: null;
26
28
  readonly value: null;
27
29
  }
28
- type BaseRepeatRangeNodeType<Definition extends AnyRepeatRangeDefinition> = Definition extends ControlledRepeatRangeDefinition ? 'repeat-range:controlled' : 'repeat-range:uncontrolled';
29
- export declare abstract class BaseRepeatRange<Definition extends AnyRepeatRangeDefinition> extends DescendantNode<Definition, RepeatRangeStateSpec, GeneralParentNode, RepeatInstance> implements BaseRepeatRangeNode, XFormsXPathNodeRange, EvaluationContext, ClientReactiveSubmittableParentNode<RepeatInstance> {
30
+ type BaseRepeatRangeNodeType<Definition extends AnyRepeatDefinition> = Definition extends ControlledRepeatDefinition ? 'repeat-range:controlled' : 'repeat-range:uncontrolled';
31
+ export declare abstract class BaseRepeatRange<Definition extends AnyRepeatDefinition> extends DescendantNode<Definition, RepeatRangeStateSpec, GeneralParentNode, RepeatInstance> implements BaseRepeatRangeNode, XFormsXPathNodeRange, EvaluationContext, ClientReactiveSerializableParentNode<RepeatInstance> {
30
32
  protected readonly childrenState: ChildrenState<RepeatInstance>;
31
33
  /**
32
34
  * A repeat range doesn't have a corresponding primary instance element of its
@@ -104,12 +106,12 @@ export declare abstract class BaseRepeatRange<Definition extends AnyRepeatRangeD
104
106
  readonly nodeOptions: null;
105
107
  readonly currentState: MaterializedChildren<CurrentState<RepeatRangeStateSpec>, RepeatInstance>;
106
108
  abstract readonly validationState: AncestorNodeValidationState;
107
- readonly submissionState: SubmissionState;
109
+ readonly instanceState: InstanceState;
108
110
  constructor(parent: GeneralParentNode, definition: Definition);
109
111
  protected getLastIndex(): number;
110
112
  getInstanceIndex(instance: RepeatInstance): number;
111
113
  private createChildren;
112
- protected addChildren(afterIndex: number, definitions: readonly RepeatDefinition[]): readonly RepeatInstance[];
114
+ protected addChildren(afterIndex: number, instanceNodes: readonly StaticElement[]): readonly RepeatInstance[];
113
115
  protected removeChildren(startIndex: number, count: number): readonly RepeatInstance[];
114
116
  getChildren(): readonly RepeatInstance[];
115
117
  }
@@ -1,11 +1,12 @@
1
1
  import { XPathNodeKindKey } from '@getodk/xpath';
2
2
  import { Accessor } from 'solid-js';
3
3
  import { FormNodeID } from '../../client/identity.ts';
4
- import { RepeatDefinition, RepeatInstanceNode, RepeatInstanceNodeAppearances } from '../../client/repeat/RepeatInstanceNode.ts';
5
- import { SubmissionState } from '../../client/submission/SubmissionState.ts';
4
+ import { AnyRepeatDefinition, RepeatInstanceNode, RepeatInstanceNodeAppearances } from '../../client/repeat/RepeatInstanceNode.ts';
5
+ import { InstanceState } from '../../client/serialization/InstanceState.ts';
6
6
  import { TextRange } from '../../client/TextRange.ts';
7
7
  import { AncestorNodeValidationState } from '../../client/validation.ts';
8
8
  import { XFormsXPathElement } from '../../integration/xpath/adapter/XFormsXPathNode.ts';
9
+ import { StaticElement } from '../../integration/xpath/static-dom/StaticElement.ts';
9
10
  import { MaterializedChildren } from '../../lib/reactivity/materializeCurrentStateChildren.ts';
10
11
  import { CurrentState } from '../../lib/reactivity/node-state/createCurrentState.ts';
11
12
  import { EngineState } from '../../lib/reactivity/node-state/createEngineState.ts';
@@ -13,11 +14,12 @@ import { SharedNodeState } from '../../lib/reactivity/node-state/createSharedNod
13
14
  import { DescendantNodeSharedStateSpec, DescendantNode } from '../abstract/DescendantNode.ts';
14
15
  import { GeneralChildNode, RepeatRange } from '../hierarchy.ts';
15
16
  import { EvaluationContext } from '../internal-api/EvaluationContext.ts';
16
- import { ClientReactiveSubmittableParentNode } from '../internal-api/submission/ClientReactiveSubmittableParentNode.ts';
17
- export type { RepeatDefinition };
17
+ import { ClientReactiveSerializableTemplatedNode } from '../internal-api/serialization/ClientReactiveSerializableTemplatedNode.ts';
18
18
  interface RepeatInstanceStateSpec extends DescendantNodeSharedStateSpec {
19
19
  readonly label: Accessor<TextRange<'label'> | null>;
20
20
  readonly hint: null;
21
+ /** @see {@link TemplatedNodeAttributeSerializationError} */
22
+ readonly attributes: null;
21
23
  readonly children: Accessor<readonly FormNodeID[]>;
22
24
  readonly valueOptions: null;
23
25
  readonly value: null;
@@ -25,7 +27,7 @@ interface RepeatInstanceStateSpec extends DescendantNodeSharedStateSpec {
25
27
  interface RepeatInstanceOptions {
26
28
  readonly precedingInstance: RepeatInstance | null;
27
29
  }
28
- export declare class RepeatInstance extends DescendantNode<RepeatDefinition, RepeatInstanceStateSpec, RepeatRange, GeneralChildNode> implements RepeatInstanceNode, XFormsXPathElement, EvaluationContext, ClientReactiveSubmittableParentNode<GeneralChildNode> {
30
+ export declare class RepeatInstance extends DescendantNode<AnyRepeatDefinition, RepeatInstanceStateSpec, RepeatRange, GeneralChildNode> implements RepeatInstanceNode, XFormsXPathElement, EvaluationContext, ClientReactiveSerializableTemplatedNode {
29
31
  readonly parent: RepeatRange;
30
32
  private readonly childrenState;
31
33
  private readonly currentIndex;
@@ -61,7 +63,8 @@ export declare class RepeatInstance extends DescendantNode<RepeatDefinition, Rep
61
63
  readonly nodeOptions: null;
62
64
  readonly currentState: MaterializedChildren<CurrentState<RepeatInstanceStateSpec>, GeneralChildNode>;
63
65
  readonly validationState: AncestorNodeValidationState;
64
- readonly submissionState: SubmissionState;
65
- constructor(parent: RepeatRange, definition: RepeatDefinition, options: RepeatInstanceOptions);
66
+ readonly instanceState: InstanceState;
67
+ constructor(parent: RepeatRange, instanceNode: StaticElement | null, options: RepeatInstanceOptions);
66
68
  getChildren(): readonly GeneralChildNode[];
67
69
  }
70
+ export {};
@@ -2,14 +2,38 @@ import { RepeatRangeNodeAppearances } from '../../client/repeat/BaseRepeatRangeN
2
2
  import { RepeatRangeControlledNode } from '../../client/repeat/RepeatRangeControlledNode.ts';
3
3
  import { AncestorNodeValidationState } from '../../client/validation.ts';
4
4
  import { XFormsXPathNodeRange } from '../../integration/xpath/adapter/XFormsXPathNode.ts';
5
- import { ControlledRepeatRangeDefinition } from '../../parse/model/RepeatRangeDefinition.ts';
5
+ import { StaticElement } from '../../integration/xpath/static-dom/StaticElement.ts';
6
+ import { ControlledRepeatDefinition } from '../../parse/model/RepeatDefinition.ts';
6
7
  import { GeneralParentNode } from '../hierarchy.ts';
7
8
  import { EvaluationContext } from '../internal-api/EvaluationContext.ts';
8
9
  import { BaseRepeatRange } from './BaseRepeatRange.ts';
9
- export declare class RepeatRangeControlled extends BaseRepeatRange<ControlledRepeatRangeDefinition> implements RepeatRangeControlledNode, XFormsXPathNodeRange, EvaluationContext {
10
+ export declare class RepeatRangeControlled extends BaseRepeatRange<ControlledRepeatDefinition> implements RepeatRangeControlledNode, XFormsXPathNodeRange, EvaluationContext {
11
+ private readonly isInstanceCreation;
12
+ private readonly countControlType;
10
13
  readonly nodeType = "repeat-range:controlled";
11
14
  readonly appearances: RepeatRangeNodeAppearances;
12
15
  readonly validationState: AncestorNodeValidationState;
13
- constructor(parent: GeneralParentNode, definition: ControlledRepeatRangeDefinition);
16
+ constructor(parent: GeneralParentNode, instanceNodes: readonly StaticElement[], definition: ControlledRepeatDefinition);
14
17
  private initializeControlledChildrenState;
18
+ /**
19
+ * Note: we do not warn about dropping "excess" repeat instances...
20
+ *
21
+ * - ... after the instance is fully loaded: dropping repeat instances after
22
+ * that point is an expected behavior of _dynamically-controlled repeats_
23
+ * (i.e. those defined with `jr:count`), and it does not occur for
24
+ * _fixed-controlled repeats_ (i.e. defined with `jr:noAddRemove`);
25
+ *
26
+ * - ... for dynamic (`jr:count`) repeats _in newly created form instances_, i.e. instances whose input instance
27
+ * nodes are derived from the _form definition_: those form-defined repeat
28
+ * instances are not "dropped", instead they're retained in memory to be
29
+ * added as count is recomputed to a larger value.
30
+ *
31
+ * @todo ^ it is pretty likely that retain-in-memory behavior also applies to
32
+ * instance state which has been serialized and restored as well! In this way,
33
+ * it's possible we're not really "dropping" those nodes, only deferring their
34
+ * restoration. Is this what we want?
35
+ *
36
+ * @todo Design and produce {@link LoadFormWarnings | warnings} as values!
37
+ */
38
+ private warnDroppedInstanceNodes;
15
39
  }
@@ -2,16 +2,17 @@ import { RepeatRangeNodeAppearances } from '../../client/repeat/BaseRepeatRangeN
2
2
  import { RepeatRangeUncontrolledNode } from '../../client/repeat/RepeatRangeUncontrolledNode.ts';
3
3
  import { AncestorNodeValidationState } from '../../client/validation.ts';
4
4
  import { XFormsXPathNodeRange } from '../../integration/xpath/adapter/XFormsXPathNode.ts';
5
- import { UncontrolledRepeatRangeDefinition } from '../../parse/model/RepeatRangeDefinition.ts';
5
+ import { StaticElement } from '../../integration/xpath/static-dom/StaticElement.ts';
6
+ import { UncontrolledRepeatDefinition } from '../../parse/model/RepeatDefinition.ts';
6
7
  import { GeneralParentNode } from '../hierarchy.ts';
7
8
  import { EvaluationContext } from '../internal-api/EvaluationContext.ts';
8
9
  import { Root } from '../Root.ts';
9
10
  import { BaseRepeatRange } from './BaseRepeatRange.ts';
10
- export declare class RepeatRangeUncontrolled extends BaseRepeatRange<UncontrolledRepeatRangeDefinition> implements RepeatRangeUncontrolledNode, XFormsXPathNodeRange, EvaluationContext {
11
+ export declare class RepeatRangeUncontrolled extends BaseRepeatRange<UncontrolledRepeatDefinition> implements RepeatRangeUncontrolledNode, XFormsXPathNodeRange, EvaluationContext {
11
12
  readonly nodeType = "repeat-range:uncontrolled";
12
13
  readonly appearances: RepeatRangeNodeAppearances;
13
14
  readonly validationState: AncestorNodeValidationState;
14
- constructor(parent: GeneralParentNode, definition: UncontrolledRepeatRangeDefinition);
15
+ constructor(parent: GeneralParentNode, instanceNodes: readonly StaticElement[], definition: UncontrolledRepeatDefinition);
15
16
  addInstances(afterIndex?: number, count?: number): Root;
16
17
  /**
17
18
  * Removes the {@link RepeatInstance}s corresponding to the specified range of
@@ -1,4 +1,4 @@
1
- import { FormResource } from '../client/index.ts';
1
+ import { FormResource } from '../client/form/FormResource.ts';
2
2
  import { FetchResource, FetchResourceResponse } from '../client/resources.ts';
3
3
  export type { FetchResource, FetchResourceResponse, FormResource };
4
4
  export interface ResourceOptions {
@@ -8,3 +8,7 @@ declare const resourceXMLPrefix = "<";
8
8
  type ResourceXMLPrefix = typeof resourceXMLPrefix;
9
9
  type ResourceXML = `${ResourceXMLPrefix}${string}`;
10
10
  export declare const retrieveSourceXMLResource: (resource: FormResource, options: ResourceOptions) => Promise<ResourceXML>;
11
+ interface RetrieveFormDefinitionOptions {
12
+ readonly fetchFormDefinition: FetchResource;
13
+ }
14
+ export declare const retrieveFormDefinition: (resource: FormResource, options: RetrieveFormDefinitionOptions) => Promise<ResourceXML>;
@@ -1,7 +1,7 @@
1
1
  import { XFormsItextTranslationMap, XFormsSecondaryInstanceMap, XFormsXPathEvaluator } from '@getodk/xpath';
2
2
  import { PrimaryInstance } from '../../instance/PrimaryInstance.ts';
3
- import { ItextTranslationRootDefinition } from '../../parse/model/ItextTranslation/ItextTranslationRootDefinition.ts';
4
- import { SecondaryInstanceRootDefinition } from '../../parse/model/SecondaryInstance/SecondaryInstanceRootDefinition.ts';
3
+ import { ItextTranslationRootDefinition } from '../../parse/model/ItextTranslationsDefinition.ts';
4
+ import { SecondaryInstanceRootDefinition } from '../../parse/model/SecondaryInstance/SecondaryInstancesDefinition.ts';
5
5
  import { EngineXPathNode } from './adapter/kind.ts';
6
6
  interface EngineXPathEvaluatorOptions {
7
7
  readonly rootNode: PrimaryInstance;