@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
@@ -0,0 +1,24 @@
1
+ /**
2
+ * This error class is intended as a common point of reference for all of the
3
+ * related interfaces and implementation where we've deferred two concerns:
4
+ *
5
+ * 1. Support for attributes on instance nodes (which may be bound in a form's
6
+ * model and/or may be expected to preserve model-defined defaults)
7
+ * 2. Present lack of logic to treat a `jr:template` attribute as a special
8
+ * case: whereas in the general case we would expect to pass through a
9
+ * form/model-defined attribute, we expect to specifically **omit**
10
+ * `jr:template` from repeat instances derived from any of form's
11
+ * explicitly-defined repeat templates
12
+ *
13
+ * Addressing #1 is (now) a prerequisite to addressing #2, and it is also a
14
+ * prerequisite for #2's unaddressed status to _become meaningfully observable
15
+ * and problematic_.
16
+ *
17
+ * By introducing this error at a point where a change in #1's status is likely
18
+ * to be implicated, we're also likely to be reminded to address #2 in tandem.
19
+ */
20
+ export class TemplatedNodeAttributeSerializationError extends Error {
21
+ constructor() {
22
+ super('Template attribute omission not implemented');
23
+ }
24
+ }
@@ -0,0 +1,13 @@
1
+ import type { UploadDefinition } from '../client/UploadNode.ts';
2
+ import type { ValueType } from '../client/ValueType.ts';
3
+ import { XFormsSpecViolationError } from './XFormsSpecViolationError.ts';
4
+
5
+ type UnsupportedUploadValueType = Exclude<ValueType, 'binary'>;
6
+
7
+ export class UploadValueTypeError extends XFormsSpecViolationError {
8
+ constructor(definition: UploadDefinition<UnsupportedUploadValueType>) {
9
+ const { valueType } = definition;
10
+
11
+ super(`Expected upload control to have 'binary' value type, got: ${valueType}`);
12
+ }
13
+ }
package/src/index.ts CHANGED
@@ -1,46 +1,2 @@
1
- import type { InitializeForm } from './index.ts';
2
- import { initializeForm as engine__initializeForm } from './instance/index.ts';
3
-
4
- export const initializeForm: InitializeForm = engine__initializeForm;
5
-
6
- export type * from './client/constants.ts';
7
- export * as constants from './client/constants.ts';
8
- export type * from './client/EngineConfig.ts';
9
- export type * from './client/FormLanguage.ts';
10
- export type * from './client/GroupNode.ts';
11
- export type {
12
- AnyChildNode,
13
- AnyControlNode,
14
- AnyLeafNode,
15
- AnyNode,
16
- AnyParentNode,
17
- AnyUnsupportedControlNode,
18
- GeneralChildNode,
19
- GeneralParentNode,
20
- RepeatRangeNode,
21
- } from './client/hierarchy.ts';
22
- export type * from './client/index.ts';
23
- export type * from './client/InputNode.ts';
24
- export type * from './client/ModelValueNode.ts';
25
- export type * from './client/NoteNode.ts';
26
- export type * from './client/OpaqueReactiveObjectFactory.ts';
27
- export type * from './client/RangeNode.ts';
28
- export type * from './client/repeat/RepeatInstanceNode.ts';
29
- export type * from './client/repeat/RepeatRangeControlledNode.ts';
30
- export type * from './client/repeat/RepeatRangeUncontrolledNode.ts';
31
- export type * from './client/resources.ts';
32
- export type * from './client/RootNode.ts';
33
- export type * from './client/SelectNode.ts';
34
- export type * from './client/submission/SubmissionData.ts';
35
- export type * from './client/submission/SubmissionDefinition.ts';
36
- export type * from './client/submission/SubmissionInstanceFile.ts';
37
- export type * from './client/submission/SubmissionOptions.ts';
38
- export type * from './client/submission/SubmissionResult.ts';
39
- export type * from './client/submission/SubmissionState.ts';
40
- export type * from './client/SubtreeNode.ts';
41
- export type * from './client/TextRange.ts';
42
- export type * from './client/TriggerNode.ts';
43
- export type * from './client/RankNode.ts';
44
- export type * from './client/unsupported/UploadNode.ts';
45
- export type * from './client/validation.ts';
46
- export type * from './client/ValueType.ts';
1
+ export * from './client/index.ts';
2
+ export * from './entrypoints/index.ts';
@@ -2,11 +2,12 @@ import { XPathNodeKindKey } from '@getodk/xpath';
2
2
  import type { Accessor } from 'solid-js';
3
3
  import type { GroupDefinition, GroupNode, GroupNodeAppearances } from '../client/GroupNode.ts';
4
4
  import type { FormNodeID } from '../client/identity.ts';
5
- import type { SubmissionState } from '../client/submission/SubmissionState.ts';
5
+ import type { InstanceState } from '../client/serialization/InstanceState.ts';
6
6
  import type { TextRange } from '../client/TextRange.ts';
7
7
  import type { AncestorNodeValidationState } from '../client/validation.ts';
8
8
  import type { XFormsXPathElement } from '../integration/xpath/adapter/XFormsXPathNode.ts';
9
- import { createParentNodeSubmissionState } from '../lib/client-reactivity/submission/createParentNodeSubmissionState.ts';
9
+ import type { StaticElement } from '../integration/xpath/static-dom/StaticElement.ts';
10
+ import { createParentNodeInstanceState } from '../lib/client-reactivity/instance-state/createParentNodeInstanceState.ts';
10
11
  import type { ChildrenState } from '../lib/reactivity/createChildrenState.ts';
11
12
  import { createChildrenState } from '../lib/reactivity/createChildrenState.ts';
12
13
  import type { MaterializedChildren } from '../lib/reactivity/materializeCurrentStateChildren.ts';
@@ -19,10 +20,10 @@ import { createNodeLabel } from '../lib/reactivity/text/createNodeLabel.ts';
19
20
  import { createAggregatedViolations } from '../lib/reactivity/validation/createAggregatedViolations.ts';
20
21
  import type { DescendantNodeSharedStateSpec } from './abstract/DescendantNode.ts';
21
22
  import { DescendantNode } from './abstract/DescendantNode.ts';
22
- import { buildChildren } from './children.ts';
23
+ import { buildChildren } from './children/buildChildren.ts';
23
24
  import type { GeneralChildNode, GeneralParentNode } from './hierarchy.ts';
24
25
  import type { EvaluationContext } from './internal-api/EvaluationContext.ts';
25
- import type { ClientReactiveSubmittableParentNode } from './internal-api/submission/ClientReactiveSubmittableParentNode.ts';
26
+ import type { ClientReactiveSerializableParentNode } from './internal-api/serialization/ClientReactiveSerializableParentNode.ts';
26
27
 
27
28
  // prettier-ignore
28
29
  interface GroupStateSpec extends DescendantNodeSharedStateSpec {
@@ -39,7 +40,7 @@ export class Group
39
40
  GroupNode,
40
41
  XFormsXPathElement,
41
42
  EvaluationContext,
42
- ClientReactiveSubmittableParentNode<GeneralChildNode>
43
+ ClientReactiveSerializableParentNode<GeneralChildNode>
43
44
  {
44
45
  private readonly childrenState: ChildrenState<GeneralChildNode>;
45
46
 
@@ -55,10 +56,14 @@ export class Group
55
56
  readonly nodeOptions = null;
56
57
  readonly currentState: MaterializedChildren<CurrentState<GroupStateSpec>, GeneralChildNode>;
57
58
  readonly validationState: AncestorNodeValidationState;
58
- readonly submissionState: SubmissionState;
59
+ readonly instanceState: InstanceState;
59
60
 
60
- constructor(parent: GeneralParentNode, definition: GroupDefinition) {
61
- super(parent, definition);
61
+ constructor(
62
+ parent: GeneralParentNode,
63
+ instanceNode: StaticElement | null,
64
+ definition: GroupDefinition
65
+ ) {
66
+ super(parent, instanceNode, definition);
62
67
 
63
68
  this.appearances = definition.bodyElement.appearances;
64
69
 
@@ -66,10 +71,6 @@ export class Group
66
71
 
67
72
  this.childrenState = childrenState;
68
73
 
69
- const sharedStateOptions = {
70
- clientStateFactory: this.engineConfig.stateFactory,
71
- };
72
-
73
74
  const state = createSharedNodeState(
74
75
  this.scope,
75
76
  {
@@ -84,7 +85,7 @@ export class Group
84
85
  valueOptions: null,
85
86
  value: null,
86
87
  },
87
- sharedStateOptions
88
+ this.instanceConfig
88
89
  );
89
90
 
90
91
  this.state = state;
@@ -96,8 +97,8 @@ export class Group
96
97
  );
97
98
 
98
99
  childrenState.setChildren(buildChildren(this));
99
- this.validationState = createAggregatedViolations(this, sharedStateOptions);
100
- this.submissionState = createParentNodeSubmissionState(this);
100
+ this.validationState = createAggregatedViolations(this, this.instanceConfig);
101
+ this.instanceState = createParentNodeInstanceState(this);
101
102
  }
102
103
 
103
104
  getChildren(): readonly GeneralChildNode[] {
@@ -10,6 +10,7 @@ import type {
10
10
  import type { TextRange } from '../client/TextRange.ts';
11
11
  import type { ValueType } from '../client/ValueType.ts';
12
12
  import type { XFormsXPathElement } from '../integration/xpath/adapter/XFormsXPathNode.ts';
13
+ import type { StaticLeafElement } from '../integration/xpath/static-dom/StaticElement.ts';
13
14
  import type { RuntimeInputValue, RuntimeValue } from '../lib/codecs/getSharedValueCodec.ts';
14
15
  import { getSharedValueCodec } from '../lib/codecs/getSharedValueCodec.ts';
15
16
  import type { CurrentState } from '../lib/reactivity/node-state/createCurrentState.ts';
@@ -22,7 +23,7 @@ import type { InputControlDefinition } from '../parse/body/control/InputControlD
22
23
  import { ValueNode, type ValueNodeStateSpec } from './abstract/ValueNode.ts';
23
24
  import type { GeneralParentNode } from './hierarchy.ts';
24
25
  import type { EvaluationContext } from './internal-api/EvaluationContext.ts';
25
- import type { ClientReactiveSubmittableValueNode } from './internal-api/submission/ClientReactiveSubmittableValueNode.ts';
26
+ import type { ClientReactiveSerializableValueNode } from './internal-api/serialization/ClientReactiveSerializableValueNode.ts';
26
27
  import type { ValidationContext } from './internal-api/ValidationContext.ts';
27
28
  import type { Root } from './Root.ts';
28
29
 
@@ -78,14 +79,19 @@ export class InputControl<V extends ValueType = ValueType>
78
79
  XFormsXPathElement,
79
80
  EvaluationContext,
80
81
  ValidationContext,
81
- ClientReactiveSubmittableValueNode
82
+ ClientReactiveSerializableValueNode
82
83
  {
83
- static from(parent: GeneralParentNode, definition: InputDefinition): AnyInputControl;
84
+ static from(
85
+ parent: GeneralParentNode,
86
+ instanceNode: StaticLeafElement | null,
87
+ definition: InputDefinition
88
+ ): AnyInputControl;
84
89
  static from<V extends ValueType>(
85
90
  parent: GeneralParentNode,
91
+ instanceNode: StaticLeafElement | null,
86
92
  definition: InputDefinition<V>
87
93
  ): InputControl<V> {
88
- return new this(parent, definition);
94
+ return new this(parent, instanceNode, definition);
89
95
  }
90
96
 
91
97
  // XFormsXPathElement
@@ -101,18 +107,18 @@ export class InputControl<V extends ValueType = ValueType>
101
107
  readonly nodeOptions: InputNodeOptions<V>;
102
108
  readonly currentState: CurrentState<InputControlStateSpec<V>>;
103
109
 
104
- constructor(parent: GeneralParentNode, definition: InputDefinition<V>) {
110
+ constructor(
111
+ parent: GeneralParentNode,
112
+ instanceNode: StaticLeafElement | null,
113
+ definition: InputDefinition<V>
114
+ ) {
105
115
  const codec = getSharedValueCodec(definition.valueType);
106
116
 
107
- super(parent, definition, codec);
117
+ super(parent, instanceNode, definition, codec);
108
118
 
109
119
  this.appearances = definition.bodyElement.appearances;
110
120
  this.nodeOptions = nodeOptionsFactoryByType[definition.valueType](definition.bodyElement);
111
121
 
112
- const sharedStateOptions = {
113
- clientStateFactory: this.engineConfig.stateFactory,
114
- };
115
-
116
122
  const state = createSharedNodeState(
117
123
  this.scope,
118
124
  {
@@ -128,7 +134,7 @@ export class InputControl<V extends ValueType = ValueType>
128
134
  value: this.valueState,
129
135
  instanceValue: this.getInstanceValue,
130
136
  },
131
- sharedStateOptions
137
+ this.instanceConfig
132
138
  );
133
139
 
134
140
  this.state = state;
@@ -2,6 +2,7 @@ import { XPathNodeKindKey } from '@getodk/xpath';
2
2
  import type { ModelValueDefinition, ModelValueNode } from '../client/ModelValueNode.ts';
3
3
  import type { ValueType } from '../client/ValueType.ts';
4
4
  import type { XFormsXPathElement } from '../integration/xpath/adapter/XFormsXPathNode.ts';
5
+ import type { StaticLeafElement } from '../integration/xpath/static-dom/StaticElement.ts';
5
6
  import type { RuntimeInputValue, RuntimeValue } from '../lib/codecs/getSharedValueCodec.ts';
6
7
  import { getSharedValueCodec } from '../lib/codecs/getSharedValueCodec.ts';
7
8
  import type { CurrentState } from '../lib/reactivity/node-state/createCurrentState.ts';
@@ -12,7 +13,7 @@ import { ValueNode, type ValueNodeStateSpec } from './abstract/ValueNode.ts';
12
13
  import type { GeneralParentNode } from './hierarchy.ts';
13
14
  import type { EvaluationContext } from './internal-api/EvaluationContext.ts';
14
15
  import type { ValidationContext } from './internal-api/ValidationContext.ts';
15
- import type { ClientReactiveSubmittableValueNode } from './internal-api/submission/ClientReactiveSubmittableValueNode.ts';
16
+ import type { ClientReactiveSerializableValueNode } from './internal-api/serialization/ClientReactiveSerializableValueNode.ts';
16
17
 
17
18
  interface ModelValueStateSpec<V extends ValueType> extends ValueNodeStateSpec<RuntimeValue<V>> {
18
19
  readonly label: null;
@@ -27,14 +28,19 @@ export class ModelValue<V extends ValueType = ValueType>
27
28
  XFormsXPathElement,
28
29
  EvaluationContext,
29
30
  ValidationContext,
30
- ClientReactiveSubmittableValueNode
31
+ ClientReactiveSerializableValueNode
31
32
  {
32
- static from(parent: GeneralParentNode, definition: ModelValueDefinition): AnyModelValue;
33
+ static from(
34
+ parent: GeneralParentNode,
35
+ instanceNode: StaticLeafElement | null,
36
+ definition: ModelValueDefinition
37
+ ): AnyModelValue;
33
38
  static from<V extends ValueType>(
34
39
  parent: GeneralParentNode,
40
+ instanceNode: StaticLeafElement | null,
35
41
  definition: ModelValueDefinition<V>
36
42
  ): ModelValue<V> {
37
- return new this(parent, definition);
43
+ return new this(parent, instanceNode, definition);
38
44
  }
39
45
 
40
46
  // XFormsXPathElement
@@ -50,14 +56,14 @@ export class ModelValue<V extends ValueType = ValueType>
50
56
  readonly nodeOptions = null;
51
57
  readonly currentState: CurrentState<ModelValueStateSpec<V>>;
52
58
 
53
- constructor(parent: GeneralParentNode, definition: ModelValueDefinition<V>) {
59
+ constructor(
60
+ parent: GeneralParentNode,
61
+ instanceNode: StaticLeafElement | null,
62
+ definition: ModelValueDefinition<V>
63
+ ) {
54
64
  const codec = getSharedValueCodec(definition.valueType);
55
65
 
56
- super(parent, definition, codec);
57
-
58
- const sharedStateOptions = {
59
- clientStateFactory: this.engineConfig.stateFactory,
60
- };
66
+ super(parent, instanceNode, definition, codec);
61
67
 
62
68
  const state = createSharedNodeState(
63
69
  this.scope,
@@ -74,7 +80,7 @@ export class ModelValue<V extends ValueType = ValueType>
74
80
  value: this.valueState,
75
81
  instanceValue: this.getInstanceValue,
76
82
  },
77
- sharedStateOptions
83
+ this.instanceConfig
78
84
  );
79
85
 
80
86
  this.state = state;
@@ -5,6 +5,7 @@ import type { NoteNode, NoteNodeAppearances, NoteValue } from '../client/NoteNod
5
5
  import type { TextRange } from '../client/TextRange.ts';
6
6
  import type { ValueType } from '../client/ValueType.ts';
7
7
  import type { XFormsXPathElement } from '../integration/xpath/adapter/XFormsXPathNode.ts';
8
+ import type { StaticLeafElement } from '../integration/xpath/static-dom/StaticElement.ts';
8
9
  import { getNoteCodec } from '../lib/codecs/getNoteCodec.ts';
9
10
  import type { NoteInputValue, NoteRuntimeValue } from '../lib/codecs/NoteCodec.ts';
10
11
  import { createNoteReadonlyThunk } from '../lib/reactivity/createNoteReadonlyThunk.ts';
@@ -19,7 +20,7 @@ import type { NoteNodeDefinition } from '../parse/model/NoteNodeDefinition.ts';
19
20
  import { ValueNode, type ValueNodeStateSpec } from './abstract/ValueNode.ts';
20
21
  import type { GeneralParentNode } from './hierarchy.ts';
21
22
  import type { EvaluationContext } from './internal-api/EvaluationContext.ts';
22
- import type { ClientReactiveSubmittableValueNode } from './internal-api/submission/ClientReactiveSubmittableValueNode.ts';
23
+ import type { ClientReactiveSerializableValueNode } from './internal-api/serialization/ClientReactiveSerializableValueNode.ts';
23
24
  import type { ValidationContext } from './internal-api/ValidationContext.ts';
24
25
 
25
26
  interface NoteStateSpec<V extends ValueType> extends ValueNodeStateSpec<NoteValue<V>> {
@@ -37,7 +38,7 @@ export class Note<V extends ValueType = ValueType>
37
38
  XFormsXPathElement,
38
39
  EvaluationContext,
39
40
  ValidationContext,
40
- ClientReactiveSubmittableValueNode
41
+ ClientReactiveSerializableValueNode
41
42
  {
42
43
  // XFormsXPathElement
43
44
  override readonly [XPathNodeKindKey] = 'element';
@@ -52,17 +53,17 @@ export class Note<V extends ValueType = ValueType>
52
53
  readonly nodeOptions = null;
53
54
  readonly currentState: CurrentState<NoteStateSpec<V>>;
54
55
 
55
- constructor(parent: GeneralParentNode, definition: NoteNodeDefinition<V>) {
56
+ constructor(
57
+ parent: GeneralParentNode,
58
+ instanceNode: StaticLeafElement | null,
59
+ definition: NoteNodeDefinition<V>
60
+ ) {
56
61
  const codec = getNoteCodec(definition.valueType);
57
62
 
58
- super(parent, definition, codec);
63
+ super(parent, instanceNode, definition, codec);
59
64
 
60
65
  this.appearances = definition.bodyElement.appearances;
61
66
 
62
- const sharedStateOptions = {
63
- clientStateFactory: this.engineConfig.stateFactory,
64
- };
65
-
66
67
  const isReadonly = createNoteReadonlyThunk(this, definition);
67
68
  const noteTextComputation = createNoteText(this, definition.noteTextDefinition);
68
69
 
@@ -108,7 +109,7 @@ export class Note<V extends ValueType = ValueType>
108
109
  value: this.valueState,
109
110
  instanceValue: this.getInstanceValue,
110
111
  },
111
- sharedStateOptions
112
+ this.instanceConfig
112
113
  );
113
114
 
114
115
  this.state = state;
@@ -1,20 +1,22 @@
1
1
  import { XPathNodeKindKey } from '@getodk/xpath';
2
2
  import type { Accessor } from 'solid-js';
3
3
  import { createSignal } from 'solid-js';
4
+ import type { FormInstanceInitializationMode } from '../client/form/FormInstance.ts';
4
5
  import type { ActiveLanguage, FormLanguage, FormLanguages } from '../client/FormLanguage.ts';
5
6
  import type { FormNodeID } from '../client/identity.ts';
6
7
  import type { RootNode } from '../client/RootNode.ts';
8
+ import type { InstancePayload } from '../client/serialization/InstancePayload.ts';
7
9
  import type {
8
- SubmissionChunkedType,
9
- SubmissionOptions,
10
- } from '../client/submission/SubmissionOptions.ts';
11
- import type { SubmissionResult } from '../client/submission/SubmissionResult.ts';
12
- import type { SubmissionState } from '../client/submission/SubmissionState.ts';
10
+ InstancePayloadOptions,
11
+ InstancePayloadType,
12
+ } from '../client/serialization/InstancePayloadOptions.ts';
13
+ import type { InstanceState } from '../client/serialization/InstanceState.ts';
13
14
  import type { AncestorNodeValidationState } from '../client/validation.ts';
14
15
  import type { XFormsXPathDocument } from '../integration/xpath/adapter/XFormsXPathNode.ts';
15
16
  import { EngineXPathEvaluator } from '../integration/xpath/EngineXPathEvaluator.ts';
16
- import { createInstanceSubmissionState } from '../lib/client-reactivity/submission/createInstanceSubmissionState.ts';
17
- import { prepareSubmission } from '../lib/client-reactivity/submission/prepareSubmission.ts';
17
+ import type { StaticDocument } from '../integration/xpath/static-dom/StaticDocument.ts';
18
+ import { createPrimaryInstanceState } from '../lib/client-reactivity/instance-state/createPrimaryInstanceState.ts';
19
+ import { prepareInstancePayload } from '../lib/client-reactivity/instance-state/prepareInstancePayload.ts';
18
20
  import { createChildrenState } from '../lib/reactivity/createChildrenState.ts';
19
21
  import { createTranslationState } from '../lib/reactivity/createTranslationState.ts';
20
22
  import type { MaterializedChildren } from '../lib/reactivity/materializeCurrentStateChildren.ts';
@@ -30,10 +32,12 @@ import type { ModelDefinition } from '../parse/model/ModelDefinition.ts';
30
32
  import type { RootDefinition } from '../parse/model/RootDefinition.ts';
31
33
  import type { SecondaryInstancesDefinition } from '../parse/model/SecondaryInstance/SecondaryInstancesDefinition.ts';
32
34
  import { InstanceNode } from './abstract/InstanceNode.ts';
35
+ import { InstanceAttachmentsState } from './attachments/InstanceAttachmentsState.ts';
36
+ import type { InitialInstanceState } from './input/InitialInstanceState.ts';
33
37
  import type { EvaluationContext } from './internal-api/EvaluationContext.ts';
34
38
  import type { InstanceConfig } from './internal-api/InstanceConfig.ts';
35
39
  import type { PrimaryInstanceDocument } from './internal-api/PrimaryInstanceDocument.ts';
36
- import type { ClientReactiveSubmittableInstance } from './internal-api/submission/ClientReactiveSubmittableInstance.ts';
40
+ import type { ClientReactiveSerializableInstance } from './internal-api/serialization/ClientReactiveSerializableInstance.ts';
37
41
  import type { TranslationContext } from './internal-api/TranslationContext.ts';
38
42
  import { Root } from './Root.ts';
39
43
 
@@ -74,20 +78,52 @@ interface PrimaryInstanceStateSpec {
74
78
  readonly activeLanguage: Accessor<ActiveLanguage>;
75
79
  }
76
80
 
77
- export class PrimaryInstance
81
+ interface PrimaryInstanceStateInputByMode {
82
+ readonly create: null;
83
+ readonly edit: InitialInstanceState;
84
+ readonly restore: InitialInstanceState;
85
+ }
86
+
87
+ export type PrimaryInstanceInitialState<Mode extends FormInstanceInitializationMode> =
88
+ PrimaryInstanceStateInputByMode[Mode];
89
+
90
+ export interface BasePrimaryInstanceOptions {
91
+ readonly scope: ReactiveScope;
92
+ readonly model: ModelDefinition;
93
+ readonly secondaryInstances: SecondaryInstancesDefinition;
94
+ }
95
+
96
+ export interface ModelessPrimaryInstanceOptions extends BasePrimaryInstanceOptions {
97
+ readonly config: InstanceConfig;
98
+ }
99
+
100
+ export interface PrimaryInstanceOptions<Mode extends FormInstanceInitializationMode>
101
+ extends ModelessPrimaryInstanceOptions {
102
+ readonly mode: Mode;
103
+ readonly initialState: PrimaryInstanceInitialState<Mode>;
104
+ }
105
+
106
+ export class PrimaryInstance<
107
+ Mode extends FormInstanceInitializationMode = FormInstanceInitializationMode,
108
+ >
78
109
  extends InstanceNode<RootDefinition, PrimaryInstanceStateSpec, null, Root>
79
110
  implements
80
111
  PrimaryInstanceDocument,
81
112
  XFormsXPathDocument,
82
113
  TranslationContext,
83
114
  EvaluationContext,
84
- ClientReactiveSubmittableInstance
115
+ ClientReactiveSerializableInstance
85
116
  {
117
+ readonly initializationMode: FormInstanceInitializationMode;
118
+ readonly model: ModelDefinition;
119
+ readonly attachments: InstanceAttachmentsState;
120
+
86
121
  // InstanceNode
87
122
  protected readonly state: SharedNodeState<PrimaryInstanceStateSpec>;
88
123
  protected readonly engineState: EngineState<PrimaryInstanceStateSpec>;
89
- readonly getChildren: Accessor<readonly Root[]>;
90
124
 
125
+ override readonly instanceNode: StaticDocument;
126
+ readonly getChildren: Accessor<readonly Root[]>;
91
127
  readonly hasReadonlyAncestor = () => false;
92
128
  readonly isReadonly = () => false;
93
129
  readonly hasNonRelevantAncestor = () => false;
@@ -99,7 +135,7 @@ export class PrimaryInstance
99
135
  // XFormsXPathDocument
100
136
  readonly [XPathNodeKindKey] = 'document';
101
137
 
102
- // PrimaryInstanceDocument, ClientReactiveSubmittableInstance
138
+ // PrimaryInstanceDocument, ClientReactiveSerializableInstance
103
139
  readonly nodeType = 'primary-instance';
104
140
  readonly appearances = null;
105
141
  readonly nodeOptions = null;
@@ -107,7 +143,7 @@ export class PrimaryInstance
107
143
  readonly root: Root;
108
144
  readonly currentState: MaterializedChildren<CurrentState<PrimaryInstanceStateSpec>, Root>;
109
145
  readonly validationState: AncestorNodeValidationState;
110
- readonly submissionState: SubmissionState;
146
+ readonly instanceState: InstanceState;
111
147
  readonly languages: FormLanguages;
112
148
 
113
149
  // TranslationContext (+ EvaluationContext)
@@ -118,19 +154,22 @@ export class PrimaryInstance
118
154
  readonly evaluator: EngineXPathEvaluator;
119
155
  override readonly contextNode = this;
120
156
 
121
- constructor(
122
- scope: ReactiveScope,
123
- model: ModelDefinition,
124
- secondaryInstances: SecondaryInstancesDefinition,
125
- engineConfig: InstanceConfig
126
- ) {
127
- const { root: definition } = model;
157
+ constructor(options: PrimaryInstanceOptions<Mode>) {
158
+ const { mode, initialState, scope, model, secondaryInstances, config } = options;
159
+ const { instance: modelInstance } = model;
160
+ const activeInstance = initialState?.document ?? modelInstance;
161
+ const definition = model.getRootDefinition(activeInstance);
128
162
 
129
- super(engineConfig, null, definition, {
163
+ super(config, null, activeInstance, definition, {
130
164
  scope,
131
165
  computeReference: () => PRIMARY_INSTANCE_REFERENCE,
132
166
  });
133
167
 
168
+ this.initializationMode = mode;
169
+ this.model = model;
170
+ this.attachments = new InstanceAttachmentsState(initialState?.attachments);
171
+ this.instanceNode = activeInstance;
172
+
134
173
  const [isAttached, setIsAttached] = createSignal(false);
135
174
 
136
175
  this.isAttached = isAttached;
@@ -170,9 +209,7 @@ export class PrimaryInstance
170
209
  children: childrenState.childIds,
171
210
  };
172
211
 
173
- const state = createSharedNodeState(scope, stateSpec, {
174
- clientStateFactory: engineConfig.stateFactory,
175
- });
212
+ const state = createSharedNodeState(scope, stateSpec, config);
176
213
 
177
214
  this.state = state;
178
215
  this.engineState = state.engineState;
@@ -187,7 +224,7 @@ export class PrimaryInstance
187
224
  return root.validationState.violations;
188
225
  },
189
226
  };
190
- this.submissionState = createInstanceSubmissionState(this);
227
+ this.instanceState = createPrimaryInstanceState(this);
191
228
 
192
229
  childrenState.setChildren([root]);
193
230
  setIsAttached(true);
@@ -231,12 +268,12 @@ export class PrimaryInstance
231
268
  return this.setActiveLanguage(availableFormLanguage);
232
269
  }
233
270
 
234
- // PrimaryInstanceDocument, ClientReactiveSubmittableInstance
235
- prepareSubmission<ChunkedType extends SubmissionChunkedType = 'monolithic'>(
236
- options?: SubmissionOptions<ChunkedType>
237
- ): Promise<SubmissionResult<ChunkedType>> {
238
- const result = prepareSubmission(this, {
239
- chunked: (options?.chunked ?? 'monolithic') as ChunkedType,
271
+ // PrimaryInstanceDocument
272
+ prepareInstancePayload<PayloadType extends InstancePayloadType = 'monolithic'>(
273
+ options?: InstancePayloadOptions<PayloadType>
274
+ ): Promise<InstancePayload<PayloadType>> {
275
+ const result = prepareInstancePayload(this, {
276
+ payloadType: (options?.payloadType ?? 'monolithic') as PayloadType,
240
277
  maxSize: options?.maxSize ?? Infinity,
241
278
  });
242
279
 
@@ -8,6 +8,7 @@ import type {
8
8
  } from '../client/RangeNode.ts';
9
9
  import type { TextRange } from '../client/TextRange.ts';
10
10
  import type { XFormsXPathElement } from '../integration/xpath/adapter/XFormsXPathNode.ts';
11
+ import type { StaticLeafElement } from '../integration/xpath/static-dom/StaticElement.ts';
11
12
  import { RangeCodec } from '../lib/codecs/RangeCodec.ts';
12
13
  import { getSharedValueCodec } from '../lib/codecs/getSharedValueCodec.ts';
13
14
  import type { CurrentState } from '../lib/reactivity/node-state/createCurrentState.ts';
@@ -26,7 +27,7 @@ import { ValueNode, type ValueNodeStateSpec } from './abstract/ValueNode.ts';
26
27
  import type { GeneralParentNode } from './hierarchy.ts';
27
28
  import type { EvaluationContext } from './internal-api/EvaluationContext.ts';
28
29
  import type { ValidationContext } from './internal-api/ValidationContext.ts';
29
- import type { ClientReactiveSubmittableValueNode } from './internal-api/submission/ClientReactiveSubmittableValueNode.ts';
30
+ import type { ClientReactiveSerializableValueNode } from './internal-api/serialization/ClientReactiveSerializableValueNode.ts';
30
31
 
31
32
  interface RangeControlStateSpec<V extends RangeValueType>
32
33
  extends ValueNodeStateSpec<RangeValue<V>> {
@@ -42,14 +43,19 @@ export class RangeControl<V extends RangeValueType = RangeValueType>
42
43
  XFormsXPathElement,
43
44
  EvaluationContext,
44
45
  ValidationContext,
45
- ClientReactiveSubmittableValueNode
46
+ ClientReactiveSerializableValueNode
46
47
  {
47
- static from(parent: GeneralParentNode, definition: AnyRangeNodeDefinition): AnyRangeControl;
48
+ static from(
49
+ parent: GeneralParentNode,
50
+ instanceNode: StaticLeafElement | null,
51
+ definition: AnyRangeNodeDefinition
52
+ ): AnyRangeControl;
48
53
  static from<V extends RangeValueType>(
49
54
  parent: GeneralParentNode,
55
+ instanceNode: StaticLeafElement | null,
50
56
  definition: RangeNodeDefinition<V>
51
57
  ): RangeControl<V> {
52
- return new this<V>(parent, definition);
58
+ return new this<V>(parent, instanceNode, definition);
53
59
  }
54
60
 
55
61
  // XFormsXPathElement
@@ -65,18 +71,18 @@ export class RangeControl<V extends RangeValueType = RangeValueType>
65
71
  readonly nodeOptions = null;
66
72
  readonly currentState: CurrentState<RangeControlStateSpec<V>>;
67
73
 
68
- constructor(parent: GeneralParentNode, definition: RangeNodeDefinition<V>) {
74
+ constructor(
75
+ parent: GeneralParentNode,
76
+ instanceNode: StaticLeafElement | null,
77
+ definition: RangeNodeDefinition<V>
78
+ ) {
69
79
  const baseCodec = getSharedValueCodec(definition.valueType);
70
80
  const codec = new RangeCodec(baseCodec, definition);
71
81
 
72
- super(parent, definition, codec);
82
+ super(parent, instanceNode, definition, codec);
73
83
 
74
84
  this.appearances = definition.bodyElement.appearances;
75
85
 
76
- const sharedStateOptions = {
77
- clientStateFactory: this.engineConfig.stateFactory,
78
- };
79
-
80
86
  const state = createSharedNodeState(
81
87
  this.scope,
82
88
  {
@@ -92,7 +98,7 @@ export class RangeControl<V extends RangeValueType = RangeValueType>
92
98
  value: this.valueState,
93
99
  instanceValue: this.getInstanceValue,
94
100
  },
95
- sharedStateOptions
101
+ this.instanceConfig
96
102
  );
97
103
 
98
104
  this.state = state;