@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
@@ -1,10 +1,7 @@
1
- import { XFORMS_NAMESPACE_URI } from '@getodk/common/constants/xmlns.ts';
2
1
  import type { JRResourceURL } from '@getodk/common/jr-resources/JRResourceURL.ts';
3
- import type { StaticNode } from '../../../../integration/xpath/static-dom/StaticNode.ts';
4
- import { parseStaticDocumentFromDOMSubtree } from '../../../shared/parseStaticDocumentFromDOMSubtree.ts';
5
2
  import type { DOMSecondaryInstanceElement } from '../../../XFormDOM.ts';
6
- import { SecondaryInstanceDefinition } from '../SecondaryInstanceDefinition.ts';
7
- import { SecondaryInstanceRootDefinition } from '../SecondaryInstanceRootDefinition.ts';
3
+ import { defineSecondaryInstance } from '../defineSecondaryInstance.ts';
4
+ import type { SecondaryInstanceDefinition } from '../SecondaryInstancesDefinition.ts';
8
5
  import { SecondaryInstanceSource } from './SecondaryInstanceSource.ts';
9
6
 
10
7
  export class BlankSecondaryInstanceSource extends SecondaryInstanceSource<'blank'> {
@@ -16,25 +13,7 @@ export class BlankSecondaryInstanceSource extends SecondaryInstanceSource<'blank
16
13
  super('blank', instanceId, resourceURL, domElement);
17
14
  }
18
15
 
19
- /**
20
- * @todo there is really no sense in using the DOM for this, other than it was
21
- * quicker/more ergonomic than constructing the requisite {@link StaticNode}
22
- * structures directly. Pretty good sign those constructor signatures could
23
- * use some TLC!
24
- */
25
16
  parseDefinition(): SecondaryInstanceDefinition {
26
- const xmlDocument = this.domElement.ownerDocument.implementation.createDocument(
27
- XFORMS_NAMESPACE_URI,
28
- 'instance'
29
- );
30
- const instanceElement = xmlDocument.documentElement;
31
-
32
- instanceElement.setAttribute('id', this.instanceId);
33
-
34
- return parseStaticDocumentFromDOMSubtree(
35
- SecondaryInstanceDefinition,
36
- SecondaryInstanceRootDefinition,
37
- instanceElement
38
- );
17
+ return defineSecondaryInstance(this.instanceId, '');
39
18
  }
40
19
  }
@@ -1,12 +1,9 @@
1
- import { XFORMS_NAMESPACE_URI } from '@getodk/common/constants/xmlns.ts';
2
1
  import type { JRResourceURL } from '@getodk/common/jr-resources/JRResourceURL.ts';
3
2
  import * as papa from 'papaparse';
4
3
  import { ErrorProductionDesignPendingError } from '../../../../error/ErrorProductionDesignPendingError.ts';
5
- import { StaticAttribute } from '../../../../integration/xpath/static-dom/StaticAttribute.ts';
6
- import { StaticElement } from '../../../../integration/xpath/static-dom/StaticElement.ts';
7
- import { StaticText } from '../../../../integration/xpath/static-dom/StaticText.ts';
8
- import { SecondaryInstanceDefinition } from '../SecondaryInstanceDefinition.ts';
9
- import { SecondaryInstanceRootDefinition } from '../SecondaryInstanceRootDefinition.ts';
4
+ import type { StaticElementOptions } from '../../../../integration/xpath/static-dom/StaticElement.ts';
5
+ import { defineSecondaryInstance } from '../defineSecondaryInstance.ts';
6
+ import type { SecondaryInstanceDefinition } from '../SecondaryInstancesDefinition.ts';
10
7
  import { ExternalSecondaryInstanceSource } from './ExternalSecondaryInstanceSource.ts';
11
8
 
12
9
  type CSVColumn = string;
@@ -88,89 +85,39 @@ interface CSVExternalSecondaryInstanceItemColumn {
88
85
 
89
86
  type CSVExternalSecondaryInstanceItem = readonly CSVExternalSecondaryInstanceItemColumn[];
90
87
 
91
- class CSVExternalSecondaryInstanceColumnElement extends StaticElement {
92
- constructor(parent: StaticElement, column: CSVExternalSecondaryInstanceItemColumn) {
93
- const { columnName, cellValue } = column;
94
-
95
- super(
96
- parent,
97
- () => [],
98
- (self) => [new StaticText(self, cellValue)],
99
- {
100
- namespaceURI: XFORMS_NAMESPACE_URI,
101
- localName: columnName,
102
- }
103
- );
104
- }
105
- }
88
+ const columnChildOption = (
89
+ column: CSVExternalSecondaryInstanceItemColumn
90
+ ): StaticElementOptions => {
91
+ const { columnName, cellValue } = column;
106
92
 
107
- class CSVExternalSecondaryInstanceItemElement extends StaticElement {
108
- constructor(parent: StaticElement, item: CSVExternalSecondaryInstanceItem) {
109
- super(
110
- parent,
111
- () => [],
112
- (self) => {
113
- return item.map((column) => {
114
- return new CSVExternalSecondaryInstanceColumnElement(self, column);
115
- });
116
- },
117
- {
118
- namespaceURI: XFORMS_NAMESPACE_URI,
119
- localName: 'item',
120
- }
121
- );
122
- }
123
- }
93
+ return {
94
+ name: columnName,
95
+ children: [cellValue],
96
+ };
97
+ };
124
98
 
125
- class CSVExternalSecondaryInstanceRootElement extends StaticElement {
126
- constructor(parent: StaticElement, items: readonly CSVExternalSecondaryInstanceItem[]) {
127
- super(
128
- parent,
129
- () => [],
130
- (self) => {
131
- return items.map((item) => {
132
- return new CSVExternalSecondaryInstanceItemElement(self, item);
133
- });
134
- },
135
- {
136
- namespaceURI: XFORMS_NAMESPACE_URI,
137
- localName: 'root',
138
- }
139
- );
140
- }
141
- }
99
+ const itemChildOption = (item: CSVExternalSecondaryInstanceItem): StaticElementOptions => {
100
+ return {
101
+ name: 'item',
102
+ children: item.map(columnChildOption),
103
+ };
104
+ };
142
105
 
143
- class CSVExternalSecondaryInstanceDocumentElement extends SecondaryInstanceRootDefinition {
144
- constructor(
145
- instanceId: string,
146
- parent: CSVExternalSecondaryInstanceDefinition,
147
- items: readonly CSVExternalSecondaryInstanceItem[]
148
- ) {
149
- super(
150
- parent,
151
- (self) => [
152
- new StaticAttribute(self, {
153
- namespaceURI: XFORMS_NAMESPACE_URI,
154
- localName: 'id',
155
- value: instanceId,
156
- }),
157
- ],
158
- (self) => [new CSVExternalSecondaryInstanceRootElement(self, items)],
159
- {
160
- namespaceURI: XFORMS_NAMESPACE_URI,
161
- localName: 'instance',
162
- }
163
- );
164
- }
165
- }
106
+ const rootChildOption = (
107
+ items: readonly CSVExternalSecondaryInstanceItem[]
108
+ ): StaticElementOptions => {
109
+ return {
110
+ name: 'root',
111
+ children: items.map(itemChildOption),
112
+ };
113
+ };
166
114
 
167
- class CSVExternalSecondaryInstanceDefinition extends SecondaryInstanceDefinition {
168
- constructor(instanceId: string, items: readonly CSVExternalSecondaryInstanceItem[]) {
169
- super((self) => {
170
- return new CSVExternalSecondaryInstanceDocumentElement(instanceId, self, items);
171
- });
172
- }
173
- }
115
+ const csvExternalSecondaryInstanceDefinition = (
116
+ instanceId: string,
117
+ items: readonly CSVExternalSecondaryInstanceItem[]
118
+ ): SecondaryInstanceDefinition => {
119
+ return defineSecondaryInstance(instanceId, rootChildOption(items));
120
+ };
174
121
 
175
122
  export class CSVExternalSecondaryInstanceSource extends ExternalSecondaryInstanceSource<'csv'> {
176
123
  /**
@@ -283,6 +230,6 @@ export class CSVExternalSecondaryInstanceSource extends ExternalSecondaryInstanc
283
230
  });
284
231
  const items = this.toItems(columns, rows);
285
232
 
286
- return new CSVExternalSecondaryInstanceDefinition(this.instanceId, items);
233
+ return csvExternalSecondaryInstanceDefinition(this.instanceId, items);
287
234
  }
288
235
  }
@@ -2,6 +2,7 @@ import type { JRResourceURL } from '@getodk/common/jr-resources/JRResourceURL.ts
2
2
  import type { MissingResourceBehavior } from '../../../../client/constants.ts';
3
3
  import type { FetchResource, FetchResourceResponse } from '../../../../client/resources.ts';
4
4
  import { ErrorProductionDesignPendingError } from '../../../../error/ErrorProductionDesignPendingError.ts';
5
+ import { getResponseContentType } from '../../../../lib/resource-helpers.ts';
5
6
  import { FormAttachmentResource } from '../../../attachments/FormAttachmentResource.ts';
6
7
  import type { ExternalSecondaryInstanceSourceFormat } from './SecondaryInstanceSource.ts';
7
8
 
@@ -13,36 +14,6 @@ const assertResponseSuccess = (resourceURL: JRResourceURL, response: FetchResour
13
14
  }
14
15
  };
15
16
 
16
- const stripContentTypeCharset = (contentType: string): string => {
17
- return contentType.replace(/;charset=.*$/, '');
18
- };
19
-
20
- const getResponseContentType = (response: FetchResourceResponse): string | null => {
21
- const { headers } = response;
22
-
23
- if (headers == null) {
24
- return null;
25
- }
26
-
27
- const contentType = headers.get('content-type');
28
-
29
- if (contentType != null) {
30
- return stripContentTypeCharset(contentType);
31
- }
32
-
33
- if (headers instanceof Headers) {
34
- return contentType;
35
- }
36
-
37
- for (const [header, value] of headers) {
38
- if (header.toLowerCase() === 'content-type') {
39
- return stripContentTypeCharset(value);
40
- }
41
- }
42
-
43
- return null;
44
- };
45
-
46
17
  interface ExternalSecondaryInstanceResourceMetadata<
47
18
  Format extends ExternalSecondaryInstanceSourceFormat = ExternalSecondaryInstanceSourceFormat,
48
19
  > {
@@ -1,4 +1,3 @@
1
- import { XFORMS_NAMESPACE_URI } from '@getodk/common/constants/xmlns.ts';
2
1
  import { UnreachableError } from '@getodk/common/lib/error/UnreachableError.ts';
3
2
  import { assertUnknownArray } from '@getodk/common/lib/type-assertions/assertUnknownArray.ts';
4
3
  import type { UnknownObject } from '@getodk/common/lib/type-assertions/assertUnknownObject.ts';
@@ -12,11 +11,9 @@ import type {
12
11
  FeatureCollection as GeoJSONFeatureCollection,
13
12
  } from 'geojson';
14
13
  import { ErrorProductionDesignPendingError } from '../../../../error/ErrorProductionDesignPendingError.ts';
15
- import { StaticAttribute } from '../../../../integration/xpath/static-dom/StaticAttribute.ts';
16
- import { StaticElement } from '../../../../integration/xpath/static-dom/StaticElement.ts';
17
- import { StaticText } from '../../../../integration/xpath/static-dom/StaticText.ts';
18
- import { SecondaryInstanceDefinition } from '../SecondaryInstanceDefinition.ts';
19
- import { SecondaryInstanceRootDefinition } from '../SecondaryInstanceRootDefinition.ts';
14
+ import type { StaticElementOptions } from '../../../../integration/xpath/static-dom/StaticElement.ts';
15
+ import { defineSecondaryInstance } from '../defineSecondaryInstance.ts';
16
+ import type { SecondaryInstanceDefinition } from '../SecondaryInstancesDefinition.ts';
20
17
  import { ExternalSecondaryInstanceSource } from './ExternalSecondaryInstanceSource.ts';
21
18
 
22
19
  const FEATURE_COLLECTION = 'FeatureCollection';
@@ -252,156 +249,86 @@ const serializeCoordinates = (coordinates: LongLatCoordinates): SerializedCoordi
252
249
  return `${latitude} ${longitude} 0 0`;
253
250
  };
254
251
 
255
- class GeoJSONSecondaryInstanceFeatureGeometryElement extends StaticElement {
256
- static from(
257
- parent: StaticElement,
258
- feature: Feature
259
- ): GeoJSONSecondaryInstanceFeatureGeometryElement {
260
- const { geometry } = feature;
252
+ const geometryValues = (geometry: SupportedGeometry): readonly string[] => {
253
+ switch (geometry.type) {
254
+ case 'LineString':
255
+ return geometry.coordinates.map(serializeCoordinates);
261
256
 
262
- switch (geometry.type) {
263
- case 'LineString':
264
- return new this(parent, geometry.coordinates);
257
+ case 'Point':
258
+ return [serializeCoordinates(geometry.coordinates)];
265
259
 
266
- case 'Point':
267
- return new this(parent, [geometry.coordinates]);
260
+ case 'Polygon': {
261
+ const [coordinates = []] = geometry.coordinates;
268
262
 
269
- case 'Polygon':
270
- return new this(parent, geometry.coordinates[0] ?? []);
271
-
272
- default:
273
- throw new UnreachableError(geometry);
263
+ return coordinates.map(serializeCoordinates);
274
264
  }
275
- }
276
265
 
277
- constructor(parent: StaticElement, points: readonly LongLatCoordinates[]) {
278
- const values = points.map(serializeCoordinates);
279
- const value = values.join('; ');
280
-
281
- super(
282
- parent,
283
- () => [],
284
- (self) => [new StaticText(self, value)],
285
- {
286
- namespaceURI: XFORMS_NAMESPACE_URI,
287
- localName: 'geometry',
288
- }
289
- );
266
+ default:
267
+ throw new UnreachableError(geometry);
290
268
  }
291
- }
269
+ };
292
270
 
293
- class GeoJSONSecondaryInstanceFeaturePropertyElement extends StaticElement {
294
- static *buildPropertyElements(
295
- parent: StaticElement,
296
- feature: Feature
297
- ): Iterable<GeoJSONSecondaryInstanceFeaturePropertyElement> {
298
- const { properties } = feature;
271
+ const geometryChildElementOption = (feature: Feature): StaticElementOptions => {
272
+ const { geometry } = feature;
273
+ const values = geometryValues(geometry);
274
+ const value = values.join('; ');
299
275
 
300
- if (properties == null) {
301
- return [];
302
- }
276
+ return {
277
+ name: 'geometry',
278
+ children: [value],
279
+ };
280
+ };
303
281
 
304
- const { id: propertiesId, ...nonIdProperties } = properties;
305
- const { id = propertiesId } = feature;
282
+ const propertyChildOption = (propertyName: string, propertyValue: string): StaticElementOptions => {
283
+ return {
284
+ name: propertyName,
285
+ children: [propertyValue],
286
+ };
287
+ };
306
288
 
307
- if (id !== undefined) {
308
- // eslint-disable-next-line @typescript-eslint/no-base-to-string -- Intentional fallback, we don't know what this is and it could be any permutation of JSON
309
- yield new this(parent, 'id', String(id));
310
- }
289
+ function* propertyChildOptions(feature: Feature): Iterable<StaticElementOptions> {
290
+ const { properties } = feature;
311
291
 
312
- for (const [propertyName, propertyValue] of Object.entries(nonIdProperties)) {
313
- yield new this(parent, propertyName, String(propertyValue));
314
- }
292
+ if (properties == null) {
293
+ return [];
315
294
  }
316
295
 
317
- constructor(parent: StaticElement, propertyName: string, propertyValue: string) {
318
- super(
319
- parent,
320
- () => [],
321
- (self) => [new StaticText(self, propertyValue)],
322
- {
323
- namespaceURI: XFORMS_NAMESPACE_URI,
324
- localName: propertyName,
325
- }
326
- );
327
- }
328
- }
296
+ const { id: propertiesId, ...nonIdProperties } = properties;
297
+ const { id = propertiesId } = feature;
329
298
 
330
- class GeoJSONSecondaryInstanceFeatureItemElement extends StaticElement {
331
- constructor(parent: StaticElement, feature: Feature) {
332
- super(
333
- parent,
334
- () => [],
335
- (self) => {
336
- const geometry = GeoJSONSecondaryInstanceFeatureGeometryElement.from(self, feature);
337
- const properties = GeoJSONSecondaryInstanceFeaturePropertyElement.buildPropertyElements(
338
- self,
339
- feature
340
- );
341
-
342
- return [geometry, ...properties];
343
- },
344
- {
345
- namespaceURI: XFORMS_NAMESPACE_URI,
346
- localName: 'item',
347
- }
348
- );
299
+ if (id !== undefined) {
300
+ // eslint-disable-next-line @typescript-eslint/no-base-to-string -- Intentional fallback, we don't know what this is and it could be any permutation of JSON
301
+ yield propertyChildOption('id', String(id));
349
302
  }
350
- }
351
303
 
352
- class GeoJSONSecondaryInstanceRootElement extends StaticElement {
353
- constructor(parent: StaticElement, featureCollection: FeatureCollection) {
354
- super(
355
- parent,
356
- () => [],
357
- (self) => {
358
- return featureCollection.features.map((feature) => {
359
- return new GeoJSONSecondaryInstanceFeatureItemElement(self, feature);
360
- });
361
- },
362
- {
363
- namespaceURI: XFORMS_NAMESPACE_URI,
364
- localName: 'root',
365
- }
366
- );
304
+ for (const [propertyName, propertyValue] of Object.entries(nonIdProperties)) {
305
+ yield propertyChildOption(propertyName, String(propertyValue));
367
306
  }
368
307
  }
369
308
 
370
- class GeoJSONExternalSecondaryInstanceDocumentElement extends SecondaryInstanceRootDefinition {
371
- constructor(
372
- instanceId: string,
373
- parent: GeoJSONExternalSecondaryInstanceDefinition,
374
- featureCollection: FeatureCollection
375
- ) {
376
- super(
377
- parent,
378
- (self) => [
379
- new StaticAttribute(self, {
380
- namespaceURI: XFORMS_NAMESPACE_URI,
381
- localName: 'id',
382
- value: instanceId,
383
- }),
384
- ],
385
- (self) => [new GeoJSONSecondaryInstanceRootElement(self, featureCollection)],
386
- {
387
- namespaceURI: XFORMS_NAMESPACE_URI,
388
- localName: 'instance',
389
- }
390
- );
391
- }
392
- }
309
+ const itemChildOption = (feature: Feature): StaticElementOptions => {
310
+ const geometry = geometryChildElementOption(feature);
311
+ const properties = propertyChildOptions(feature);
393
312
 
394
- class GeoJSONExternalSecondaryInstanceDefinition extends SecondaryInstanceDefinition {
395
- constructor(instanceId: string, featureCollection: FeatureCollection) {
396
- super((self) => {
397
- return new GeoJSONExternalSecondaryInstanceDocumentElement(
398
- instanceId,
399
- self,
400
- featureCollection
401
- );
402
- });
403
- }
404
- }
313
+ return {
314
+ name: 'item',
315
+ children: [geometry, ...properties],
316
+ };
317
+ };
318
+
319
+ const rootChildOption = (featureCollection: FeatureCollection): StaticElementOptions => {
320
+ return {
321
+ name: 'root',
322
+ children: featureCollection.features.map(itemChildOption),
323
+ };
324
+ };
325
+
326
+ const geoJSONExternalSecondaryInstanceDefinition = (
327
+ instanceId: string,
328
+ featureCollection: FeatureCollection
329
+ ): SecondaryInstanceDefinition => {
330
+ return defineSecondaryInstance(instanceId, rootChildOption(featureCollection));
331
+ };
405
332
 
406
333
  export class GeoJSONExternalSecondaryInstanceSource extends ExternalSecondaryInstanceSource<'geojson'> {
407
334
  parseDefinition(): SecondaryInstanceDefinition {
@@ -410,6 +337,6 @@ export class GeoJSONExternalSecondaryInstanceSource extends ExternalSecondaryIns
410
337
 
411
338
  assertFeatureCollection(value);
412
339
 
413
- return new GeoJSONExternalSecondaryInstanceDefinition(this.instanceId, value);
340
+ return geoJSONExternalSecondaryInstanceDefinition(this.instanceId, value);
414
341
  }
415
342
  }
@@ -1,7 +1,7 @@
1
1
  import { parseStaticDocumentFromDOMSubtree } from '../../../shared/parseStaticDocumentFromDOMSubtree.ts';
2
2
  import type { DOMSecondaryInstanceElement } from '../../../XFormDOM.ts';
3
- import { SecondaryInstanceDefinition } from '../SecondaryInstanceDefinition.ts';
4
- import { SecondaryInstanceRootDefinition } from '../SecondaryInstanceRootDefinition.ts';
3
+ import { assertSecondaryInstanceDefinition } from '../assertSecondaryInstanceDefinition.ts';
4
+ import type { SecondaryInstanceDefinition } from '../SecondaryInstancesDefinition.ts';
5
5
  import { SecondaryInstanceSource } from './SecondaryInstanceSource.ts';
6
6
 
7
7
  export class InternalSecondaryInstanceSource extends SecondaryInstanceSource<'internal'> {
@@ -10,10 +10,12 @@ export class InternalSecondaryInstanceSource extends SecondaryInstanceSource<'in
10
10
  }
11
11
 
12
12
  parseDefinition(): SecondaryInstanceDefinition {
13
- return parseStaticDocumentFromDOMSubtree(
14
- SecondaryInstanceDefinition,
15
- SecondaryInstanceRootDefinition,
16
- this.domElement
17
- );
13
+ const doc = parseStaticDocumentFromDOMSubtree(this.domElement, {
14
+ nodesetPrefix: `instance('${this.instanceId}')`,
15
+ });
16
+
17
+ assertSecondaryInstanceDefinition(doc);
18
+
19
+ return doc;
18
20
  }
19
21
  }
@@ -1,6 +1,6 @@
1
1
  import type { JRResourceURL } from '@getodk/common/jr-resources/JRResourceURL.ts';
2
2
  import type { DOMSecondaryInstanceElement } from '../../../XFormDOM.ts';
3
- import type { SecondaryInstanceDefinition } from '../SecondaryInstanceDefinition.ts';
3
+ import type { SecondaryInstanceDefinition } from '../SecondaryInstancesDefinition.ts';
4
4
 
5
5
  // prettier-ignore
6
6
  export type ExternalSecondaryInstanceSourceFormat =
@@ -1,7 +1,7 @@
1
1
  import { XFORMS_NAMESPACE_URI } from '@getodk/common/constants/xmlns.ts';
2
2
  import { parseStaticDocumentFromDOMSubtree } from '../../../shared/parseStaticDocumentFromDOMSubtree.ts';
3
- import { SecondaryInstanceDefinition } from '../SecondaryInstanceDefinition.ts';
4
- import { SecondaryInstanceRootDefinition } from '../SecondaryInstanceRootDefinition.ts';
3
+ import { assertSecondaryInstanceDefinition } from '../assertSecondaryInstanceDefinition.ts';
4
+ import type { SecondaryInstanceDefinition } from '../SecondaryInstancesDefinition.ts';
5
5
  import { ExternalSecondaryInstanceSource } from './ExternalSecondaryInstanceSource.ts';
6
6
  import type { InternalSecondaryInstanceSource } from './InternalSecondaryInstanceSource.ts';
7
7
 
@@ -23,10 +23,10 @@ export class XMLExternalSecondaryInstanceSource extends ExternalSecondaryInstanc
23
23
  instanceElement.setAttribute('id', this.instanceId);
24
24
  instanceElement.innerHTML = this.resource.data;
25
25
 
26
- return parseStaticDocumentFromDOMSubtree(
27
- SecondaryInstanceDefinition,
28
- SecondaryInstanceRootDefinition,
29
- instanceElement
30
- );
26
+ const doc = parseStaticDocumentFromDOMSubtree(instanceElement);
27
+
28
+ assertSecondaryInstanceDefinition(doc);
29
+
30
+ return doc;
31
31
  }
32
32
  }
@@ -1,8 +1,8 @@
1
- import type { SubmissionDefinition } from '../../client/submission/SubmissionDefinition.ts';
1
+ import type { SubmissionMeta } from '../../client/submission/SubmissionMeta.ts';
2
2
  import { getSubmissionElement } from '../../lib/dom/query.ts';
3
3
  import type { XFormDOM } from '../XFormDOM.ts';
4
4
 
5
- export class FormSubmissionDefinition implements SubmissionDefinition {
5
+ export class SubmissionDefinition implements SubmissionMeta {
6
6
  readonly submissionAction!: URL | null;
7
7
  readonly submissionMethod = 'post';
8
8
  readonly encryptionKey!: string | null;
@@ -1,3 +1,4 @@
1
+ import type { StaticElement } from '../../integration/xpath/static-dom/StaticElement.ts';
1
2
  import { NamespaceDeclarationMap } from '../../lib/names/NamespaceDeclarationMap.ts';
2
3
  import { QualifiedName } from '../../lib/names/QualifiedName.ts';
3
4
  import type {
@@ -17,14 +18,12 @@ export class SubtreeDefinition extends DescendentNodeDefinition<
17
18
  readonly namespaceDeclarations: NamespaceDeclarationMap;
18
19
  readonly qualifiedName: QualifiedName;
19
20
  readonly children: readonly ChildNodeDefinition[];
20
- readonly instances = null;
21
- readonly defaultValue = null;
22
21
 
23
22
  constructor(
24
23
  parent: ParentNodeDefinition,
25
24
  bind: BindDefinition,
26
25
  bodyElement: AnyBodyElementDefinition | null,
27
- readonly node: Element
26
+ readonly template: StaticElement
28
27
  ) {
29
28
  if (
30
29
  bodyElement != null &&
@@ -37,9 +36,9 @@ export class SubtreeDefinition extends DescendentNodeDefinition<
37
36
 
38
37
  const { root } = parent;
39
38
 
40
- this.qualifiedName = new QualifiedName(node);
39
+ this.qualifiedName = template.qualifiedName;
41
40
  this.namespaceDeclarations = new NamespaceDeclarationMap(this);
42
- this.children = root.buildSubtree(this);
41
+ this.children = root.buildSubtree(this, template);
43
42
  }
44
43
 
45
44
  toJSON() {
@@ -0,0 +1,34 @@
1
+ import { ErrorProductionDesignPendingError } from '../../error/ErrorProductionDesignPendingError.ts';
2
+ import type { AnyNodeDefinition } from './NodeDefinition.ts';
3
+ import type { RootDefinition } from './RootDefinition.ts';
4
+
5
+ export type NodesetReference = string;
6
+
7
+ const collectDefinitions = (
8
+ result: Map<NodesetReference, AnyNodeDefinition>,
9
+ definition: AnyNodeDefinition
10
+ ): Map<NodesetReference, AnyNodeDefinition> => {
11
+ const { nodeset } = definition;
12
+
13
+ if (result.has(nodeset)) {
14
+ throw new ErrorProductionDesignPendingError();
15
+ }
16
+
17
+ result.set(nodeset, definition);
18
+
19
+ if (definition.type === 'leaf-node') {
20
+ return result;
21
+ }
22
+
23
+ for (const child of definition.children) {
24
+ collectDefinitions(result, child);
25
+ }
26
+
27
+ return result;
28
+ };
29
+
30
+ export type NodeDefinitionMap = ReadonlyMap<NodesetReference, AnyNodeDefinition>;
31
+
32
+ export const nodeDefinitionMap = (root: RootDefinition): NodeDefinitionMap => {
33
+ return collectDefinitions(new Map(), root);
34
+ };