@getodk/xforms-engine 0.4.0 → 0.6.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 (392) hide show
  1. package/README.md +1 -1
  2. package/dist/client/BaseNode.d.ts +18 -3
  3. package/dist/client/BaseValueNode.d.ts +32 -0
  4. package/dist/client/EngineConfig.d.ts +49 -48
  5. package/dist/client/GroupNode.d.ts +1 -0
  6. package/dist/client/InputNode.d.ts +82 -0
  7. package/dist/client/ModelValueNode.d.ts +13 -7
  8. package/dist/client/NoteNode.d.ts +26 -9
  9. package/dist/client/RangeNode.d.ts +36 -0
  10. package/dist/client/RankNode.d.ts +46 -0
  11. package/dist/client/RootNode.d.ts +37 -7
  12. package/dist/client/SelectNode.d.ts +47 -25
  13. package/dist/client/SubtreeNode.d.ts +1 -0
  14. package/dist/client/TriggerNode.d.ts +10 -6
  15. package/dist/client/ValueType.d.ts +3 -0
  16. package/dist/client/constants.d.ts +50 -0
  17. package/dist/client/hierarchy.d.ts +8 -8
  18. package/dist/client/identity.d.ts +14 -0
  19. package/dist/client/node-types.d.ts +3 -2
  20. package/dist/client/resources.d.ts +93 -0
  21. package/dist/client/submission/SubmissionData.d.ts +7 -0
  22. package/dist/client/submission/SubmissionDefinition.d.ts +14 -0
  23. package/dist/client/submission/SubmissionInstanceFile.d.ts +6 -0
  24. package/dist/client/submission/SubmissionOptions.d.ts +23 -0
  25. package/dist/client/submission/SubmissionResult.d.ts +91 -0
  26. package/dist/client/submission/SubmissionState.d.ts +12 -0
  27. package/dist/client/unsupported/UnsupportedControlNode.d.ts +1 -3
  28. package/dist/client/validation.d.ts +2 -2
  29. package/dist/error/ErrorProductionDesignPendingError.d.ts +7 -0
  30. package/dist/error/RankMissingValueError.d.ts +3 -0
  31. package/dist/error/RankValueTypeError.d.ts +6 -0
  32. package/dist/error/SelectValueTypeError.d.ts +15 -0
  33. package/dist/error/ValueTypeInvariantError.d.ts +17 -0
  34. package/dist/error/XFormsSpecViolationError.d.ts +2 -0
  35. package/dist/error/XPathFunctionalityError.d.ts +14 -0
  36. package/dist/error/XPathFunctionalityNotSupportedError.d.ts +7 -0
  37. package/dist/error/XPathFunctionalityPendingError.d.ts +7 -0
  38. package/dist/index.d.ts +12 -4
  39. package/dist/index.js +17864 -14655
  40. package/dist/index.js.map +1 -1
  41. package/dist/instance/Group.d.ts +10 -4
  42. package/dist/instance/InputControl.d.ts +38 -0
  43. package/dist/instance/ModelValue.d.ts +17 -25
  44. package/dist/instance/Note.d.ts +16 -21
  45. package/dist/instance/PrimaryInstance.d.ts +85 -0
  46. package/dist/instance/RangeControl.d.ts +34 -0
  47. package/dist/instance/RankControl.d.ts +40 -0
  48. package/dist/instance/Root.d.ts +30 -25
  49. package/dist/instance/SelectControl.d.ts +66 -0
  50. package/dist/instance/Subtree.d.ts +11 -5
  51. package/dist/instance/TriggerControl.d.ts +13 -19
  52. package/dist/instance/abstract/DescendantNode.d.ts +32 -25
  53. package/dist/instance/abstract/InstanceNode.d.ts +52 -30
  54. package/dist/instance/abstract/UnsupportedControl.d.ts +11 -3
  55. package/dist/instance/abstract/ValueNode.d.ts +47 -0
  56. package/dist/instance/hierarchy.d.ts +13 -12
  57. package/dist/instance/identity.d.ts +2 -7
  58. package/dist/instance/internal-api/EvaluationContext.d.ts +53 -12
  59. package/dist/instance/internal-api/InstanceConfig.d.ts +8 -2
  60. package/dist/instance/internal-api/InstanceValueContext.d.ts +22 -0
  61. package/dist/instance/internal-api/PrimaryInstanceDocument.d.ts +36 -0
  62. package/dist/instance/internal-api/TranslationContext.d.ts +3 -2
  63. package/dist/instance/internal-api/ValidationContext.d.ts +3 -4
  64. package/dist/instance/internal-api/ValueContext.d.ts +2 -1
  65. package/dist/instance/internal-api/submission/ClientReactiveSubmittableInstance.d.ts +14 -0
  66. package/dist/instance/internal-api/submission/ClientReactiveSubmittableLeafNode.d.ts +32 -0
  67. package/dist/instance/internal-api/submission/ClientReactiveSubmittableParentNode.d.ts +19 -0
  68. package/dist/instance/internal-api/submission/ClientReactiveSubmittableValueNode.d.ts +18 -0
  69. package/dist/instance/repeat/BaseRepeatRange.d.ts +40 -83
  70. package/dist/instance/repeat/RepeatInstance.d.ts +12 -29
  71. package/dist/instance/repeat/RepeatRangeControlled.d.ts +2 -2
  72. package/dist/instance/repeat/RepeatRangeUncontrolled.d.ts +2 -2
  73. package/dist/instance/resource.d.ts +1 -1
  74. package/dist/instance/text/TextRange.d.ts +1 -1
  75. package/dist/instance/unsupported/UploadControl.d.ts +3 -1
  76. package/dist/integration/xpath/EngineXPathEvaluator.d.ts +14 -0
  77. package/dist/integration/xpath/adapter/XFormsXPathNode.d.ts +71 -0
  78. package/dist/integration/xpath/adapter/engineDOMAdapter.d.ts +5 -0
  79. package/dist/integration/xpath/adapter/kind.d.ts +32 -0
  80. package/dist/integration/xpath/adapter/names.d.ts +6 -0
  81. package/dist/integration/xpath/adapter/traversal.d.ts +26 -0
  82. package/dist/integration/xpath/adapter/values.d.ts +2 -0
  83. package/dist/integration/xpath/static-dom/StaticAttribute.d.ts +26 -0
  84. package/dist/integration/xpath/static-dom/StaticDocument.d.ts +15 -0
  85. package/dist/integration/xpath/static-dom/StaticElement.d.ts +48 -0
  86. package/dist/integration/xpath/static-dom/StaticNode.d.ts +33 -0
  87. package/dist/integration/xpath/static-dom/StaticText.d.ts +16 -0
  88. package/dist/lib/client-reactivity/submission/createInstanceSubmissionState.d.ts +3 -0
  89. package/dist/lib/client-reactivity/submission/createLeafNodeSubmissionState.d.ts +3 -0
  90. package/dist/lib/client-reactivity/submission/createNodeRangeSubmissionState.d.ts +4 -0
  91. package/dist/lib/client-reactivity/submission/createParentNodeSubmissionState.d.ts +4 -0
  92. package/dist/lib/client-reactivity/submission/createRootSubmissionState.d.ts +3 -0
  93. package/dist/lib/client-reactivity/submission/createValueNodeSubmissionState.d.ts +3 -0
  94. package/dist/lib/client-reactivity/submission/prepareSubmission.d.ts +8 -0
  95. package/dist/lib/codecs/DecimalValueCodec.d.ts +6 -0
  96. package/dist/lib/codecs/Geopoint/Geopoint.d.ts +48 -0
  97. package/dist/lib/codecs/Geopoint/GeopointValueCodec.d.ts +5 -0
  98. package/dist/lib/codecs/IntValueCodec.d.ts +6 -0
  99. package/dist/lib/codecs/NoteCodec.d.ts +8 -0
  100. package/dist/lib/codecs/RangeCodec.d.ts +8 -0
  101. package/dist/lib/codecs/StringValueCodec.d.ts +4 -0
  102. package/dist/lib/codecs/TriggerCodec.d.ts +7 -0
  103. package/dist/lib/codecs/ValueArrayCodec.d.ts +11 -0
  104. package/dist/lib/codecs/ValueCodec.d.ts +30 -0
  105. package/dist/lib/codecs/ValueTypePlaceholderCodec.d.ts +12 -0
  106. package/dist/lib/codecs/getNoteCodec.d.ts +3 -0
  107. package/dist/lib/codecs/getSelectCodec.d.ts +5 -0
  108. package/dist/lib/codecs/getSharedValueCodec.d.ts +48 -0
  109. package/dist/lib/codecs/items/BaseItemCodec.d.ts +9 -0
  110. package/dist/lib/codecs/items/MultipleValueItemCodec.d.ts +14 -0
  111. package/dist/lib/codecs/items/SingleValueItemCodec.d.ts +24 -0
  112. package/dist/lib/dom/query.d.ts +4 -2
  113. package/dist/lib/names/NamespaceDeclaration.d.ts +45 -0
  114. package/dist/lib/names/NamespaceDeclarationMap.d.ts +137 -0
  115. package/dist/lib/names/NamespaceURL.d.ts +30 -0
  116. package/dist/lib/names/QualifiedName.d.ts +113 -0
  117. package/dist/lib/number-parsers.d.ts +2 -0
  118. package/dist/lib/reactivity/createChildrenState.d.ts +7 -5
  119. package/dist/lib/reactivity/createComputedExpression.d.ts +18 -5
  120. package/dist/lib/reactivity/createInstanceValueState.d.ts +40 -0
  121. package/dist/lib/reactivity/createItemCollection.d.ts +21 -0
  122. package/dist/lib/reactivity/createNoteReadonlyThunk.d.ts +2 -2
  123. package/dist/lib/reactivity/createTranslationState.d.ts +19 -0
  124. package/dist/lib/reactivity/createValueState.d.ts +6 -10
  125. package/dist/lib/reactivity/materializeCurrentStateChildren.d.ts +4 -4
  126. package/dist/lib/xml-serialization.d.ts +50 -0
  127. package/dist/parse/XFormDOM.d.ts +18 -7
  128. package/dist/parse/XFormDefinition.d.ts +1 -2
  129. package/dist/parse/attachments/FormAttachmentResource.d.ts +27 -0
  130. package/dist/parse/body/BodyDefinition.d.ts +4 -4
  131. package/dist/parse/body/RepeatElementDefinition.d.ts +1 -1
  132. package/dist/parse/body/appearance/inputAppearanceParser.d.ts +1 -1
  133. package/dist/parse/body/appearance/rangeAppearanceParser.d.ts +3 -0
  134. package/dist/parse/body/control/{InputDefinition.d.ts → InputControlDefinition.d.ts} +4 -1
  135. package/dist/parse/body/control/ItemDefinition.d.ts +14 -0
  136. package/dist/parse/body/control/ItemsetDefinition.d.ts +18 -0
  137. package/dist/parse/body/control/RangeControlDefinition.d.ts +31 -2
  138. package/dist/parse/body/control/RankControlDefinition.d.ts +7 -3
  139. package/dist/parse/body/control/{select/SelectDefinition.d.ts → SelectControlDefinition.d.ts} +9 -9
  140. package/dist/parse/expression/ItemsetNodesetExpression.d.ts +1 -1
  141. package/dist/parse/expression/ItemsetValueExpression.d.ts +1 -1
  142. package/dist/parse/expression/abstract/DependencyContext.d.ts +0 -5
  143. package/dist/parse/expression/abstract/DependentExpression.d.ts +2 -3
  144. package/dist/parse/model/BindDefinition.d.ts +6 -5
  145. package/dist/parse/model/BindPreloadDefinition.d.ts +42 -0
  146. package/dist/parse/model/BindTypeDefinition.d.ts +20 -0
  147. package/dist/parse/model/DescendentNodeDefinition.d.ts +4 -14
  148. package/dist/parse/model/FormSubmissionDefinition.d.ts +8 -0
  149. package/dist/parse/model/ItextTranslation/ItextTranslationDefinition.d.ts +4 -0
  150. package/dist/parse/model/ItextTranslation/ItextTranslationRootDefinition.d.ts +9 -0
  151. package/dist/parse/model/ItextTranslation/ItextTranslationsDefinition.d.ts +8 -0
  152. package/dist/parse/model/LeafNodeDefinition.d.ts +9 -4
  153. package/dist/parse/model/ModelBindMap.d.ts +1 -1
  154. package/dist/parse/model/ModelDefinition.d.ts +2 -0
  155. package/dist/parse/model/NodeDefinition.d.ts +16 -20
  156. package/dist/parse/model/NoteNodeDefinition.d.ts +9 -8
  157. package/dist/parse/model/RangeNodeDefinition.d.ts +41 -0
  158. package/dist/parse/model/RepeatInstanceDefinition.d.ts +7 -4
  159. package/dist/parse/model/RepeatRangeDefinition.d.ts +7 -4
  160. package/dist/parse/model/RepeatTemplateDefinition.d.ts +7 -4
  161. package/dist/parse/model/RootAttributeDefinition.d.ts +24 -0
  162. package/dist/parse/model/RootAttributeMap.d.ts +23 -0
  163. package/dist/parse/model/RootDefinition.d.ts +12 -9
  164. package/dist/parse/model/SecondaryInstance/SecondaryInstanceDefinition.d.ts +4 -0
  165. package/dist/parse/model/SecondaryInstance/SecondaryInstanceRootDefinition.d.ts +7 -0
  166. package/dist/parse/model/SecondaryInstance/SecondaryInstancesDefinition.d.ts +13 -0
  167. package/dist/parse/model/SecondaryInstance/sources/BlankSecondaryInstanceSource.d.ts +14 -0
  168. package/dist/parse/model/SecondaryInstance/sources/CSVExternalSecondaryInstance.d.ts +22 -0
  169. package/dist/parse/model/SecondaryInstance/sources/ExternalSecondaryInstanceResource.d.ts +23 -0
  170. package/dist/parse/model/SecondaryInstance/sources/ExternalSecondaryInstanceSource.d.ts +9 -0
  171. package/dist/parse/model/SecondaryInstance/sources/GeoJSONExternalSecondaryInstance.d.ts +5 -0
  172. package/dist/parse/model/SecondaryInstance/sources/InternalSecondaryInstanceSource.d.ts +7 -0
  173. package/dist/parse/model/SecondaryInstance/sources/SecondaryInstanceSource.d.ts +13 -0
  174. package/dist/parse/model/SecondaryInstance/sources/XMLExternalSecondaryInstanceSource.d.ts +12 -0
  175. package/dist/parse/model/SubtreeDefinition.d.ts +7 -4
  176. package/dist/parse/shared/parseStaticDocumentFromDOMSubtree.d.ts +23 -0
  177. package/dist/parse/text/ItemLabelDefinition.d.ts +1 -1
  178. package/dist/parse/text/ItemsetLabelDefinition.d.ts +2 -2
  179. package/dist/parse/text/abstract/TextElementDefinition.d.ts +1 -1
  180. package/dist/parse/text/abstract/TextRangeDefinition.d.ts +0 -2
  181. package/dist/parse/xpath/semantic-analysis.d.ts +6 -3
  182. package/dist/solid.js +15437 -12246
  183. package/dist/solid.js.map +1 -1
  184. package/package.json +18 -13
  185. package/src/client/BaseNode.ts +21 -6
  186. package/src/client/BaseValueNode.ts +35 -0
  187. package/src/client/EngineConfig.ts +52 -51
  188. package/src/client/GroupNode.ts +1 -0
  189. package/src/client/InputNode.ts +113 -0
  190. package/src/client/ModelValueNode.ts +31 -7
  191. package/src/client/NoteNode.ts +45 -9
  192. package/src/client/RangeNode.ts +51 -0
  193. package/src/client/RankNode.ts +54 -0
  194. package/src/client/RootNode.ts +43 -7
  195. package/src/client/SelectNode.ts +53 -26
  196. package/src/client/SubtreeNode.ts +1 -0
  197. package/src/client/TriggerNode.ts +12 -6
  198. package/src/client/ValueType.ts +4 -0
  199. package/src/client/constants.ts +67 -0
  200. package/src/client/hierarchy.ts +12 -13
  201. package/src/client/identity.ts +16 -0
  202. package/src/client/node-types.ts +13 -7
  203. package/src/client/resources.ts +118 -0
  204. package/src/client/submission/SubmissionData.ts +12 -0
  205. package/src/client/submission/SubmissionDefinition.ts +16 -0
  206. package/src/client/submission/SubmissionInstanceFile.ts +9 -0
  207. package/src/client/submission/SubmissionOptions.ts +28 -0
  208. package/src/client/submission/SubmissionResult.ts +124 -0
  209. package/src/client/submission/SubmissionState.ts +14 -0
  210. package/src/client/unsupported/UnsupportedControlNode.ts +2 -6
  211. package/src/client/validation.ts +2 -2
  212. package/src/error/ErrorProductionDesignPendingError.ts +6 -0
  213. package/src/error/RankMissingValueError.ts +5 -0
  214. package/src/error/RankValueTypeError.ts +13 -0
  215. package/src/error/SelectValueTypeError.ts +22 -0
  216. package/src/error/ValueTypeInvariantError.ts +22 -0
  217. package/src/error/XFormsSpecViolationError.ts +1 -0
  218. package/src/error/XPathFunctionalityError.ts +26 -0
  219. package/src/error/XPathFunctionalityNotSupportedError.ts +18 -0
  220. package/src/error/XPathFunctionalityPendingError.ts +18 -0
  221. package/src/index.ts +12 -13
  222. package/src/instance/Group.ts +18 -5
  223. package/src/instance/InputControl.ts +159 -0
  224. package/src/instance/ModelValue.ts +48 -53
  225. package/src/instance/Note.ts +40 -49
  226. package/src/instance/PrimaryInstance.ts +245 -0
  227. package/src/instance/RangeControl.ts +113 -0
  228. package/src/instance/RankControl.ts +199 -0
  229. package/src/instance/Root.ts +63 -134
  230. package/src/instance/SelectControl.ts +219 -0
  231. package/src/instance/Subtree.ts +20 -7
  232. package/src/instance/TriggerControl.ts +44 -66
  233. package/src/instance/abstract/DescendantNode.ts +91 -51
  234. package/src/instance/abstract/InstanceNode.ts +113 -107
  235. package/src/instance/abstract/UnsupportedControl.ts +29 -5
  236. package/src/instance/abstract/ValueNode.ts +128 -0
  237. package/src/instance/children.ts +80 -40
  238. package/src/instance/hierarchy.ts +39 -30
  239. package/src/instance/identity.ts +3 -9
  240. package/src/instance/index.ts +25 -7
  241. package/src/instance/internal-api/EvaluationContext.ts +60 -13
  242. package/src/instance/internal-api/InstanceConfig.ts +9 -2
  243. package/src/instance/internal-api/InstanceValueContext.ts +26 -0
  244. package/src/instance/internal-api/PrimaryInstanceDocument.ts +53 -0
  245. package/src/instance/internal-api/TranslationContext.ts +3 -2
  246. package/src/instance/internal-api/ValidationContext.ts +3 -4
  247. package/src/instance/internal-api/ValueContext.ts +2 -1
  248. package/src/instance/internal-api/submission/ClientReactiveSubmittableInstance.ts +20 -0
  249. package/src/instance/internal-api/submission/ClientReactiveSubmittableLeafNode.ts +43 -0
  250. package/src/instance/internal-api/submission/ClientReactiveSubmittableParentNode.ts +26 -0
  251. package/src/instance/internal-api/submission/ClientReactiveSubmittableValueNode.ts +24 -0
  252. package/src/instance/repeat/BaseRepeatRange.ts +52 -131
  253. package/src/instance/repeat/RepeatInstance.ts +21 -46
  254. package/src/instance/repeat/RepeatRangeControlled.ts +5 -5
  255. package/src/instance/repeat/RepeatRangeUncontrolled.ts +2 -4
  256. package/src/instance/resource.ts +5 -2
  257. package/src/instance/text/TextChunk.ts +1 -1
  258. package/src/instance/unsupported/UploadControl.ts +5 -1
  259. package/src/integration/xpath/EngineXPathEvaluator.ts +22 -0
  260. package/src/integration/xpath/adapter/XFormsXPathNode.ts +126 -0
  261. package/src/integration/xpath/adapter/engineDOMAdapter.ts +57 -0
  262. package/src/integration/xpath/adapter/kind.ts +114 -0
  263. package/src/integration/xpath/adapter/names.ts +148 -0
  264. package/src/integration/xpath/adapter/traversal.ts +229 -0
  265. package/src/integration/xpath/adapter/values.ts +5 -0
  266. package/src/integration/xpath/static-dom/StaticAttribute.ts +41 -0
  267. package/src/integration/xpath/static-dom/StaticDocument.ts +36 -0
  268. package/src/integration/xpath/static-dom/StaticElement.ts +119 -0
  269. package/src/integration/xpath/static-dom/StaticNode.ts +68 -0
  270. package/src/integration/xpath/static-dom/StaticText.ts +28 -0
  271. package/src/lib/client-reactivity/README.md +0 -0
  272. package/src/lib/client-reactivity/submission/createInstanceSubmissionState.ts +12 -0
  273. package/src/lib/client-reactivity/submission/createLeafNodeSubmissionState.ts +20 -0
  274. package/src/lib/client-reactivity/submission/createNodeRangeSubmissionState.ts +17 -0
  275. package/src/lib/client-reactivity/submission/createParentNodeSubmissionState.ts +22 -0
  276. package/src/lib/client-reactivity/submission/createRootSubmissionState.ts +19 -0
  277. package/src/lib/client-reactivity/submission/createValueNodeSubmissionState.ts +21 -0
  278. package/src/lib/client-reactivity/submission/prepareSubmission.ts +172 -0
  279. package/src/lib/codecs/DecimalValueCodec.ts +46 -0
  280. package/src/lib/codecs/Geopoint/Geopoint.ts +150 -0
  281. package/src/lib/codecs/Geopoint/GeopointValueCodec.ts +20 -0
  282. package/src/lib/codecs/IntValueCodec.ts +100 -0
  283. package/src/lib/codecs/NoteCodec.ts +32 -0
  284. package/src/lib/codecs/RangeCodec.ts +65 -0
  285. package/src/lib/codecs/StringValueCodec.ts +11 -0
  286. package/src/lib/codecs/TriggerCodec.ts +64 -0
  287. package/src/lib/codecs/ValueArrayCodec.ts +42 -0
  288. package/src/lib/codecs/ValueCodec.ts +106 -0
  289. package/src/lib/codecs/ValueTypePlaceholderCodec.ts +19 -0
  290. package/src/lib/codecs/getNoteCodec.ts +27 -0
  291. package/src/lib/codecs/getSelectCodec.ts +27 -0
  292. package/src/lib/codecs/getSharedValueCodec.ts +79 -0
  293. package/src/lib/codecs/items/BaseItemCodec.ts +20 -0
  294. package/src/lib/codecs/items/MultipleValueItemCodec.ts +28 -0
  295. package/src/lib/codecs/items/SingleValueItemCodec.ts +67 -0
  296. package/src/lib/dom/query.ts +8 -2
  297. package/src/lib/names/NamespaceDeclaration.ts +106 -0
  298. package/src/lib/names/NamespaceDeclarationMap.ts +228 -0
  299. package/src/lib/names/NamespaceURL.ts +44 -0
  300. package/src/lib/names/QualifiedName.ts +170 -0
  301. package/src/lib/number-parsers.ts +25 -0
  302. package/src/lib/reactivity/createChildrenState.ts +8 -6
  303. package/src/lib/reactivity/createComputedExpression.ts +57 -34
  304. package/src/lib/reactivity/createInstanceValueState.ts +216 -0
  305. package/src/lib/reactivity/createItemCollection.ts +173 -0
  306. package/src/lib/reactivity/createNoteReadonlyThunk.ts +12 -7
  307. package/src/lib/reactivity/createTranslationState.ts +61 -0
  308. package/src/lib/reactivity/createValueState.ts +62 -120
  309. package/src/lib/reactivity/materializeCurrentStateChildren.ts +7 -7
  310. package/src/lib/reactivity/text/createTextRange.ts +4 -3
  311. package/src/lib/reactivity/validation/createAggregatedViolations.ts +1 -1
  312. package/src/lib/reactivity/validation/createValidation.ts +2 -3
  313. package/src/lib/xml-serialization.ts +163 -0
  314. package/src/parse/XFormDOM.ts +231 -76
  315. package/src/parse/XFormDefinition.ts +2 -10
  316. package/src/parse/attachments/FormAttachmentResource.ts +40 -0
  317. package/src/parse/body/BodyDefinition.ts +7 -7
  318. package/src/parse/body/appearance/inputAppearanceParser.ts +1 -1
  319. package/src/parse/body/appearance/rangeAppearanceParser.ts +11 -0
  320. package/src/parse/body/control/InputControlDefinition.ts +29 -0
  321. package/src/parse/body/control/{select/ItemDefinition.ts → ItemDefinition.ts} +8 -6
  322. package/src/parse/body/control/{select/ItemsetDefinition.ts → ItemsetDefinition.ts} +11 -9
  323. package/src/parse/body/control/RangeControlDefinition.ts +91 -6
  324. package/src/parse/body/control/RankControlDefinition.ts +25 -7
  325. package/src/parse/body/control/{select/SelectDefinition.ts → SelectControlDefinition.ts} +9 -9
  326. package/src/parse/expression/ItemsetNodesetExpression.ts +1 -1
  327. package/src/parse/expression/ItemsetValueExpression.ts +1 -1
  328. package/src/parse/expression/abstract/DependencyContext.ts +0 -26
  329. package/src/parse/expression/abstract/DependentExpression.ts +2 -13
  330. package/src/parse/model/BindDefinition.ts +9 -8
  331. package/src/parse/model/BindPreloadDefinition.ts +100 -0
  332. package/src/parse/model/BindTypeDefinition.ts +175 -0
  333. package/src/parse/model/DescendentNodeDefinition.ts +7 -31
  334. package/src/parse/model/FormSubmissionDefinition.ts +44 -0
  335. package/src/parse/model/ItextTranslation/ItextTranslationDefinition.ts +4 -0
  336. package/src/parse/model/ItextTranslation/ItextTranslationRootDefinition.ts +42 -0
  337. package/src/parse/model/ItextTranslation/ItextTranslationsDefinition.ts +31 -0
  338. package/src/parse/model/LeafNodeDefinition.ts +15 -5
  339. package/src/parse/model/ModelBindMap.ts +6 -8
  340. package/src/parse/model/ModelDefinition.ts +6 -1
  341. package/src/parse/model/NodeDefinition.ts +24 -48
  342. package/src/parse/model/NoteNodeDefinition.ts +11 -10
  343. package/src/parse/model/RangeNodeDefinition.ts +118 -0
  344. package/src/parse/model/RepeatInstanceDefinition.ts +11 -7
  345. package/src/parse/model/RepeatRangeDefinition.ts +11 -7
  346. package/src/parse/model/RepeatTemplateDefinition.ts +11 -7
  347. package/src/parse/model/RootAttributeDefinition.ts +45 -0
  348. package/src/parse/model/RootAttributeMap.ts +44 -0
  349. package/src/parse/model/RootDefinition.ts +31 -29
  350. package/src/parse/model/SecondaryInstance/SecondaryInstanceDefinition.ts +4 -0
  351. package/src/parse/model/SecondaryInstance/SecondaryInstanceRootDefinition.ts +12 -0
  352. package/src/parse/model/SecondaryInstance/SecondaryInstancesDefinition.ts +102 -0
  353. package/src/parse/model/SecondaryInstance/sources/BlankSecondaryInstanceSource.ts +40 -0
  354. package/src/parse/model/SecondaryInstance/sources/CSVExternalSecondaryInstance.ts +288 -0
  355. package/src/parse/model/SecondaryInstance/sources/ExternalSecondaryInstanceResource.ts +222 -0
  356. package/src/parse/model/SecondaryInstance/sources/ExternalSecondaryInstanceSource.ts +22 -0
  357. package/src/parse/model/SecondaryInstance/sources/GeoJSONExternalSecondaryInstance.ts +415 -0
  358. package/src/parse/model/SecondaryInstance/sources/InternalSecondaryInstanceSource.ts +19 -0
  359. package/src/parse/model/SecondaryInstance/sources/SecondaryInstanceSource.ts +29 -0
  360. package/src/parse/model/SecondaryInstance/sources/XMLExternalSecondaryInstanceSource.ts +32 -0
  361. package/src/parse/model/SubtreeDefinition.ts +12 -12
  362. package/src/parse/shared/parseStaticDocumentFromDOMSubtree.ts +149 -0
  363. package/src/parse/text/ItemLabelDefinition.ts +1 -1
  364. package/src/parse/text/ItemsetLabelDefinition.ts +2 -2
  365. package/src/parse/text/abstract/TextElementDefinition.ts +1 -1
  366. package/src/parse/text/abstract/TextRangeDefinition.ts +0 -6
  367. package/src/parse/xpath/semantic-analysis.ts +33 -3
  368. package/dist/client/StringNode.d.ts +0 -46
  369. package/dist/client/unsupported/RangeNode.d.ts +0 -9
  370. package/dist/client/unsupported/RankNode.d.ts +0 -9
  371. package/dist/instance/SelectField.d.ts +0 -50
  372. package/dist/instance/StringField.d.ts +0 -44
  373. package/dist/instance/internal-api/SubscribableDependency.d.ts +0 -59
  374. package/dist/instance/unsupported/RangeControl.d.ts +0 -4
  375. package/dist/instance/unsupported/RankControl.d.ts +0 -4
  376. package/dist/lib/reactivity/createSelectItems.d.ts +0 -16
  377. package/dist/parse/XFormDataType.d.ts +0 -25
  378. package/dist/parse/body/control/select/ItemDefinition.d.ts +0 -13
  379. package/dist/parse/body/control/select/ItemsetDefinition.d.ts +0 -17
  380. package/dist/parse/body/control/select/ItemsetNodesetContext.d.ts +0 -11
  381. package/src/client/StringNode.ts +0 -52
  382. package/src/client/unsupported/RangeNode.ts +0 -14
  383. package/src/client/unsupported/RankNode.ts +0 -14
  384. package/src/instance/SelectField.ts +0 -226
  385. package/src/instance/StringField.ts +0 -120
  386. package/src/instance/internal-api/SubscribableDependency.ts +0 -61
  387. package/src/instance/unsupported/RangeControl.ts +0 -5
  388. package/src/instance/unsupported/RankControl.ts +0 -5
  389. package/src/lib/reactivity/createSelectItems.ts +0 -168
  390. package/src/parse/XFormDataType.ts +0 -62
  391. package/src/parse/body/control/InputDefinition.ts +0 -22
  392. package/src/parse/body/control/select/ItemsetNodesetContext.ts +0 -26
@@ -0,0 +1,199 @@
1
+ import { XPathNodeKindKey } from '@getodk/xpath';
2
+ import type { Accessor } from 'solid-js';
3
+ import { createMemo } from 'solid-js';
4
+ import type { RankDefinition, RankItem, RankNode, RankValueOptions } from '../client/RankNode.ts';
5
+ import type { TextRange } from '../client/TextRange.ts';
6
+ import type { XFormsXPathElement } from '../integration/xpath/adapter/XFormsXPathNode.ts';
7
+ import type { CurrentState } from '../lib/reactivity/node-state/createCurrentState.ts';
8
+ import type { EngineState } from '../lib/reactivity/node-state/createEngineState.ts';
9
+ import type { SharedNodeState } from '../lib/reactivity/node-state/createSharedNodeState.ts';
10
+ import { createSharedNodeState } from '../lib/reactivity/node-state/createSharedNodeState.ts';
11
+ import { createFieldHint } from '../lib/reactivity/text/createFieldHint.ts';
12
+ import { createNodeLabel } from '../lib/reactivity/text/createNodeLabel.ts';
13
+ import type { SimpleAtomicState } from '../lib/reactivity/types.ts';
14
+ import type { Root } from './Root.ts';
15
+ import type { ValueNodeStateSpec } from './abstract/ValueNode.ts';
16
+ import { ValueNode } from './abstract/ValueNode.ts';
17
+ import type { GeneralParentNode } from './hierarchy.ts';
18
+ import type { EvaluationContext } from './internal-api/EvaluationContext.ts';
19
+ import type { ValidationContext } from './internal-api/ValidationContext.ts';
20
+ import type { ClientReactiveSubmittableValueNode } from './internal-api/submission/ClientReactiveSubmittableValueNode.ts';
21
+ import { MultipleValueItemCodec } from '../lib/codecs/items/MultipleValueItemCodec.ts';
22
+ import { sharedValueCodecs } from '../lib/codecs/getSharedValueCodec.ts';
23
+ import { createItemCollection } from '../lib/reactivity/createItemCollection.ts';
24
+ import type { UnknownAppearanceDefinition } from '../parse/body/appearance/unknownAppearanceParser.ts';
25
+ import type { ValueType } from '../client/ValueType.ts';
26
+ import { RankMissingValueError } from '../error/RankMissingValueError.ts';
27
+ import { RankValueTypeError } from '../error/RankValueTypeError.ts';
28
+
29
+ export type AnyRankDefinition = {
30
+ [V in ValueType]: RankDefinition<V>;
31
+ }[ValueType];
32
+
33
+ type AssertRankNodeDefinition = (
34
+ definition: AnyRankDefinition
35
+ ) => asserts definition is RankDefinition<'string'>;
36
+
37
+ const assertRankNodeDefinition: AssertRankNodeDefinition = (definition) => {
38
+ if (definition.valueType !== 'string') {
39
+ throw new RankValueTypeError(definition);
40
+ }
41
+ };
42
+
43
+ type RankItemMap = ReadonlyMap<string, RankItem>;
44
+
45
+ interface RankControlStateSpec extends ValueNodeStateSpec<readonly string[]> {
46
+ readonly label: Accessor<TextRange<'label'> | null>;
47
+ readonly hint: Accessor<TextRange<'hint'> | null>;
48
+ readonly valueOptions: Accessor<RankValueOptions>;
49
+ }
50
+
51
+ /**
52
+ * @ToDo We currently represent a blank value for `<odk:rank>` as an empty array.
53
+ * This is ambiguous, and likely to change.
54
+ *
55
+ * @see {@link https://github.com/getodk/web-forms/issues/295}
56
+ */
57
+ type TempBlankValueState = readonly [];
58
+ const isBlankValueState = (values: readonly string[]): values is TempBlankValueState => {
59
+ return values.length === 0;
60
+ };
61
+
62
+ export class RankControl
63
+ extends ValueNode<'string', RankDefinition<'string'>, readonly string[], readonly string[]>
64
+ implements
65
+ RankNode,
66
+ XFormsXPathElement,
67
+ EvaluationContext,
68
+ ValidationContext,
69
+ ClientReactiveSubmittableValueNode
70
+ {
71
+ static from(parent: GeneralParentNode, definition: RankDefinition): RankControl;
72
+ static from(parent: GeneralParentNode, definition: AnyRankDefinition): RankControl {
73
+ assertRankNodeDefinition(definition);
74
+ return new this(parent, definition);
75
+ }
76
+
77
+ private readonly mapOptionsByValue: Accessor<RankItemMap>;
78
+
79
+ protected override readonly getInstanceValue: Accessor<string>;
80
+
81
+ // XFormsXPathElement
82
+ override readonly [XPathNodeKindKey] = 'element';
83
+
84
+ // InstanceNode
85
+ protected readonly state: SharedNodeState<RankControlStateSpec>;
86
+ protected readonly engineState: EngineState<RankControlStateSpec>;
87
+
88
+ // RankNode
89
+ readonly nodeType = 'rank';
90
+ readonly appearances: UnknownAppearanceDefinition;
91
+ readonly nodeOptions = null;
92
+ readonly currentState: CurrentState<RankControlStateSpec>;
93
+
94
+ private constructor(parent: GeneralParentNode, definition: RankDefinition<'string'>) {
95
+ const codec = new MultipleValueItemCodec(sharedValueCodecs.string);
96
+ super(parent, definition, codec);
97
+
98
+ this.appearances = definition.bodyElement.appearances;
99
+
100
+ const valueOptions = createItemCollection(this);
101
+ const mapOptionsByValue: Accessor<RankItemMap> = this.scope.runTask(() => {
102
+ return createMemo(() => {
103
+ return new Map(valueOptions().map((item) => [item.value, item]));
104
+ });
105
+ });
106
+
107
+ this.mapOptionsByValue = mapOptionsByValue;
108
+
109
+ const baseValueState = this.valueState;
110
+ const [baseGetValue, setValue] = baseValueState;
111
+
112
+ /**
113
+ * @ToDo As new value options become available, they're not yet in the
114
+ * `currentValues` state. This appends them. We intend to change this
115
+ * behavior, likely clearing the previous state instead.
116
+ *
117
+ * However, there's an open question about what we should do when a filter
118
+ * change **only removes values**.
119
+ */
120
+ const getValue = this.scope.runTask(() => {
121
+ return createMemo(() => {
122
+ const options = valueOptions();
123
+ const values = baseGetValue();
124
+
125
+ if (isBlankValueState(values)) {
126
+ return values;
127
+ }
128
+
129
+ const optionValues = new Set(options.map((option) => option.value));
130
+
131
+ /**
132
+ * @see {@link getValue} ToDo paragraph 2.
133
+ */
134
+ const currentValues = values.filter((value) => optionValues.has(value));
135
+
136
+ return Array.from(
137
+ new Set([
138
+ ...currentValues,
139
+ /**
140
+ * @see {@link getValue} ToDo paragraph 1.
141
+ */
142
+ ...optionValues,
143
+ ])
144
+ );
145
+ });
146
+ });
147
+ const valueState: SimpleAtomicState<readonly string[]> = [getValue, setValue];
148
+
149
+ this.getInstanceValue = this.scope.runTask(() => {
150
+ return createMemo(() => codec.encodeValue(getValue()));
151
+ });
152
+
153
+ const sharedStateOptions = {
154
+ clientStateFactory: this.engineConfig.stateFactory,
155
+ };
156
+
157
+ const state = createSharedNodeState(
158
+ this.scope,
159
+ {
160
+ reference: this.contextReference,
161
+ readonly: this.isReadonly,
162
+ relevant: this.isRelevant,
163
+ required: this.isRequired,
164
+ label: createNodeLabel(this, definition),
165
+ hint: createFieldHint(this, definition),
166
+ children: null,
167
+ valueOptions,
168
+ value: valueState,
169
+ instanceValue: this.getInstanceValue,
170
+ },
171
+ sharedStateOptions
172
+ );
173
+
174
+ this.state = state;
175
+ this.engineState = state.engineState;
176
+ this.currentState = state.currentState;
177
+ }
178
+
179
+ getValueLabel(value: string): TextRange<'item-label'> | null {
180
+ const valueOption = this.currentState.valueOptions.find((item) => item.value === value);
181
+ return valueOption?.label ?? null;
182
+ }
183
+
184
+ setValues(valuesInOrder: readonly string[]): Root {
185
+ if (isBlankValueState(valuesInOrder)) {
186
+ this.setValueState(valuesInOrder);
187
+ return this.root;
188
+ }
189
+
190
+ const sourceValues: string[] = Array.from(this.mapOptionsByValue().keys());
191
+ const hasAllValues = sourceValues.every((sourceValue) => valuesInOrder.includes(sourceValue));
192
+ if (!hasAllValues) {
193
+ throw new RankMissingValueError('There are missing options. Rank should have all options.');
194
+ }
195
+
196
+ this.setValueState(valuesInOrder);
197
+ return this.root;
198
+ }
199
+ }
@@ -1,9 +1,18 @@
1
- import type { XFormsXPathEvaluator } from '@getodk/xpath';
2
- import type { Accessor, Signal } from 'solid-js';
3
- import { createSignal } from 'solid-js';
1
+ import { XPathNodeKindKey } from '@getodk/xpath';
2
+ import type { Accessor } from 'solid-js';
4
3
  import type { ActiveLanguage, FormLanguage, FormLanguages } from '../client/FormLanguage.ts';
4
+ import type { FormNodeID } from '../client/identity.ts';
5
5
  import type { RootNode } from '../client/RootNode.ts';
6
+ import type { SubmissionDefinition } from '../client/submission/SubmissionDefinition.ts';
7
+ 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';
6
13
  import type { AncestorNodeValidationState } from '../client/validation.ts';
14
+ import type { XFormsXPathElement } from '../integration/xpath/adapter/XFormsXPathNode.ts';
15
+ import { createRootSubmissionState } from '../lib/client-reactivity/submission/createRootSubmissionState.ts';
7
16
  import type { ChildrenState } from '../lib/reactivity/createChildrenState.ts';
8
17
  import { createChildrenState } from '../lib/reactivity/createChildrenState.ts';
9
18
  import type { MaterializedChildren } from '../lib/reactivity/materializeCurrentStateChildren.ts';
@@ -15,146 +24,88 @@ import { createSharedNodeState } from '../lib/reactivity/node-state/createShared
15
24
  import { createAggregatedViolations } from '../lib/reactivity/validation/createAggregatedViolations.ts';
16
25
  import type { BodyClassList } from '../parse/body/BodyDefinition.ts';
17
26
  import type { RootDefinition } from '../parse/model/RootDefinition.ts';
18
- import type { XFormDOM } from '../parse/XFormDOM.ts';
19
- import { InstanceNode } from './abstract/InstanceNode.ts';
27
+ import { DescendantNode } from './abstract/DescendantNode.ts';
20
28
  import { buildChildren } from './children.ts';
21
29
  import type { GeneralChildNode } from './hierarchy.ts';
22
- import type { NodeID } from './identity.ts';
23
- import type { EvaluationContext, EvaluationContextRoot } from './internal-api/EvaluationContext.ts';
24
- import type { InstanceConfig } from './internal-api/InstanceConfig.ts';
25
- import type { SubscribableDependency } from './internal-api/SubscribableDependency.ts';
30
+ import type { EvaluationContext } from './internal-api/EvaluationContext.ts';
31
+ import type { ClientReactiveSubmittableParentNode } from './internal-api/submission/ClientReactiveSubmittableParentNode.ts';
26
32
  import type { TranslationContext } from './internal-api/TranslationContext.ts';
33
+ import type { PrimaryInstance } from './PrimaryInstance.ts';
27
34
 
28
35
  interface RootStateSpec {
29
- readonly reference: string;
30
- readonly readonly: boolean;
31
- readonly relevant: boolean;
32
- readonly required: boolean;
36
+ readonly reference: Accessor<string>;
37
+ readonly readonly: Accessor<boolean>;
38
+ readonly relevant: Accessor<boolean>;
39
+ readonly required: Accessor<boolean>;
33
40
  readonly label: null;
34
41
  readonly hint: null;
35
- readonly children: Accessor<readonly NodeID[]>;
42
+ readonly children: Accessor<readonly FormNodeID[]>;
36
43
  readonly valueOptions: null;
37
44
  readonly value: null;
38
45
 
39
46
  // Root-specific
40
- readonly activeLanguage: Signal<ActiveLanguage>;
47
+ readonly activeLanguage: Accessor<ActiveLanguage>;
41
48
  }
42
49
 
43
- // Subset of types expected from evaluator
44
- interface ItextTranslations {
45
- getActiveLanguage(): string | null;
46
- getLanguages(): readonly string[];
47
- }
48
-
49
- interface InitialLanguageState {
50
- readonly defaultLanguage: ActiveLanguage;
51
- readonly languages: FormLanguages;
52
- }
53
-
54
- // TODO: it's really very silly that the XPath evaluator is the current
55
- // definitional source of truth for translation stuff... even though it currently makes sense that that's where it's first derived.
56
- const getInitialLanguageState = (translations: ItextTranslations): InitialLanguageState => {
57
- const activeLanguageName = translations.getActiveLanguage();
58
-
59
- if (activeLanguageName == null) {
60
- const defaultLanguage: ActiveLanguage = {
61
- isSyntheticDefault: true,
62
- language: '',
63
- };
64
- const languages = [defaultLanguage] satisfies FormLanguages;
65
-
66
- return {
67
- defaultLanguage,
68
- languages,
69
- };
70
- }
71
-
72
- const languageNames = translations.getLanguages();
73
-
74
- const inactiveLanguages = languageNames
75
- .filter((languageName) => {
76
- return languageName !== activeLanguageName;
77
- })
78
- .map((language): FormLanguage => {
79
- return { language };
80
- });
81
-
82
- const languages = [
83
- { language: activeLanguageName } satisfies FormLanguage,
84
-
85
- ...inactiveLanguages,
86
- ] satisfies FormLanguages;
87
- const [defaultLanguage] = languages;
88
-
89
- return {
90
- defaultLanguage,
91
- languages,
92
- };
93
- };
94
-
95
50
  export class Root
96
- extends InstanceNode<RootDefinition, RootStateSpec, GeneralChildNode>
51
+ extends DescendantNode<RootDefinition, RootStateSpec, PrimaryInstance, GeneralChildNode>
97
52
  implements
98
53
  RootNode,
54
+ XFormsXPathElement,
99
55
  EvaluationContext,
100
- EvaluationContextRoot,
101
- SubscribableDependency,
102
- TranslationContext
56
+ TranslationContext,
57
+ ClientReactiveSubmittableParentNode<GeneralChildNode>
103
58
  {
104
59
  private readonly childrenState: ChildrenState<GeneralChildNode>;
105
60
 
106
- // InstanceNode
107
- readonly hasReadonlyAncestor = () => false;
108
- readonly isReadonly = () => false;
109
- readonly hasNonRelevantAncestor = () => false;
110
- readonly isRelevant = () => true;
61
+ // XFormsXPathElement
62
+ override readonly [XPathNodeKindKey] = 'element';
63
+
64
+ // DescendantNode
111
65
  protected readonly state: SharedNodeState<RootStateSpec>;
112
66
  protected readonly engineState: EngineState<RootStateSpec>;
113
67
 
68
+ override readonly hasReadonlyAncestor = () => false;
69
+ override readonly isSelfReadonly = () => false;
70
+ override readonly isReadonly = () => false;
71
+ override readonly hasNonRelevantAncestor = () => false;
72
+ override readonly isSelfRelevant = () => true;
73
+ override readonly isRelevant = () => true;
74
+ override readonly isRequired = () => false;
75
+
114
76
  // RootNode
115
77
  readonly nodeType = 'root';
116
78
  readonly appearances = null;
79
+ readonly nodeOptions = null;
117
80
  readonly classes: BodyClassList;
118
81
  readonly currentState: MaterializedChildren<CurrentState<RootStateSpec>, GeneralChildNode>;
119
82
  readonly validationState: AncestorNodeValidationState;
83
+ readonly submissionState: SubmissionState;
120
84
 
121
- protected readonly instanceDOM: XFormDOM;
122
-
123
- // BaseNode
124
- readonly root = this;
125
-
126
- // EvaluationContext
127
- readonly evaluator: XFormsXPathEvaluator;
128
-
129
- readonly contextNode: Element;
85
+ // ClientReactiveSubmittableInstance
86
+ get submissionDefinition(): SubmissionDefinition {
87
+ return this.definition.submission;
88
+ }
130
89
 
131
90
  // RootNode
132
- override readonly parent = null;
133
-
134
91
  readonly languages: FormLanguages;
135
92
 
136
- // TranslationContext
137
- get activeLanguage(): ActiveLanguage {
138
- return this.engineState.activeLanguage;
139
- }
140
-
141
- constructor(xformDOM: XFormDOM, definition: RootDefinition, engineConfig: InstanceConfig) {
142
- const reference = definition.nodeset;
93
+ constructor(parent: PrimaryInstance) {
94
+ const { definition } = parent;
95
+ const { nodeset: reference } = definition;
96
+ const computeReference: Accessor<string> = () => reference;
143
97
 
144
- super(engineConfig, null, definition, {
145
- computeReference: () => reference,
98
+ super(parent, definition, {
99
+ computeReference,
146
100
  });
147
101
 
148
- this.classes = definition.classes;
102
+ this.classes = parent.classes;
149
103
 
150
104
  const childrenState = createChildrenState<Root, GeneralChildNode>(this);
151
105
 
152
106
  this.childrenState = childrenState;
107
+ this.languages = parent.languages;
153
108
 
154
- const instanceDOM = xformDOM.createInstance();
155
- const evaluator = instanceDOM.primaryInstanceEvaluator;
156
- const { translations } = evaluator;
157
- const { defaultLanguage, languages } = getInitialLanguageState(translations);
158
109
  const sharedStateOptions = {
159
110
  clientStateFactory: this.engineConfig.stateFactory,
160
111
  };
@@ -162,13 +113,13 @@ export class Root
162
113
  const state = createSharedNodeState(
163
114
  this.scope,
164
115
  {
165
- activeLanguage: createSignal<ActiveLanguage>(defaultLanguage),
166
- reference,
116
+ activeLanguage: parent.getActiveLanguage,
117
+ reference: computeReference,
167
118
  label: null,
168
119
  hint: null,
169
- readonly: false,
170
- relevant: true,
171
- required: false,
120
+ readonly: () => false,
121
+ relevant: () => true,
122
+ required: () => false,
172
123
  valueOptions: null,
173
124
  value: null,
174
125
  children: childrenState.childIds,
@@ -184,17 +135,9 @@ export class Root
184
135
  childrenState
185
136
  );
186
137
 
187
- const contextNode = instanceDOM.xformDocument.createElement(definition.nodeName);
188
-
189
- instanceDOM.primaryInstanceRoot.replaceWith(contextNode);
190
-
191
- this.evaluator = evaluator;
192
- this.contextNode = contextNode;
193
- this.instanceDOM = instanceDOM;
194
- this.languages = languages;
195
-
196
138
  childrenState.setChildren(buildChildren(this));
197
139
  this.validationState = createAggregatedViolations(this, sharedStateOptions);
140
+ this.submissionState = createRootSubmissionState(this);
198
141
  }
199
142
 
200
143
  getChildren(): readonly GeneralChildNode[] {
@@ -203,28 +146,14 @@ export class Root
203
146
 
204
147
  // RootNode
205
148
  setLanguage(language: FormLanguage): Root {
206
- const activeLanguage = this.languages.find((formLanguage) => {
207
- return formLanguage.language === language.language;
208
- });
209
-
210
- if (activeLanguage == null) {
211
- throw new Error(`Language "${language.language}" not available`);
212
- }
213
-
214
- this.evaluator.translations.setActiveLanguage(activeLanguage.language);
215
- this.state.setProperty('activeLanguage', activeLanguage);
149
+ this.rootDocument.setLanguage(language);
216
150
 
217
151
  return this;
218
152
  }
219
153
 
220
- // SubscribableDependency
221
- override subscribe(): void {
222
- super.subscribe();
223
-
224
- // TODO: typescript-eslint is right to object to this! We should _at least_
225
- // make internal reactive reads obvious, i.e. function calls.
226
- //
227
- // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- read == subscribe
228
- this.engineState.activeLanguage;
154
+ prepareSubmission<ChunkedType extends SubmissionChunkedType = 'monolithic'>(
155
+ options?: SubmissionOptions<ChunkedType>
156
+ ): Promise<SubmissionResult<ChunkedType>> {
157
+ return this.rootDocument.prepareSubmission(options);
229
158
  }
230
159
  }