@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
@@ -1,13 +1,14 @@
1
- import { XFormsXPathEvaluator } from '@getodk/xpath';
1
+ import { XPathNodeKindKey } from '@getodk/xpath';
2
2
  import { Accessor } from 'solid-js';
3
3
  import { BaseNode } from '../../client/BaseNode.ts';
4
- import { AnyDescendantNodeDefinition } from '../../parse/model/DescendentNodeDefinition.ts';
5
- import { LeafNodeDefinition } from '../../parse/model/LeafNodeDefinition.ts';
4
+ import { ActiveLanguage } from '../../client/FormLanguage.ts';
5
+ import { InstanceNodeType } from '../../client/node-types.ts';
6
+ import { PrimaryInstanceXPathChildNode } from '../../integration/xpath/adapter/kind.ts';
7
+ import { XFormsXPathPrimaryInstanceDescendantNode, XFormsXPathPrimaryInstanceDescendantNodeKind } from '../../integration/xpath/adapter/XFormsXPathNode.ts';
8
+ import { EngineXPathEvaluator } from '../../integration/xpath/EngineXPathEvaluator.ts';
6
9
  import { AnyNodeDefinition } from '../../parse/model/NodeDefinition.ts';
7
- import { RepeatInstanceDefinition } from '../../parse/model/RepeatInstanceDefinition.ts';
8
- import { AnyChildNode, GeneralParentNode, RepeatRange } from '../hierarchy.ts';
10
+ import { AnyChildNode, AnyParentNode } from '../hierarchy.ts';
9
11
  import { EvaluationContext } from '../internal-api/EvaluationContext.ts';
10
- import { SubscribableDependency } from '../internal-api/SubscribableDependency.ts';
11
12
  import { Root } from '../Root.ts';
12
13
  import { InstanceNodeStateSpec, InstanceNode } from './InstanceNode.ts';
13
14
  export interface DescendantNodeSharedStateSpec {
@@ -17,15 +18,19 @@ export interface DescendantNodeSharedStateSpec {
17
18
  readonly required: Accessor<boolean>;
18
19
  }
19
20
  export type DescendantNodeStateSpec<Value = never> = InstanceNodeStateSpec<Value> & DescendantNodeSharedStateSpec;
20
- export type DescendantNodeDefinition = Extract<AnyNodeDefinition, AnyDescendantNodeDefinition>;
21
- export type DescendantNodeParent<Definition extends DescendantNodeDefinition> = Definition extends LeafNodeDefinition ? GeneralParentNode : Definition extends RepeatInstanceDefinition ? RepeatRange : GeneralParentNode;
22
- export type AnyDescendantNode = DescendantNode<DescendantNodeDefinition, DescendantNodeStateSpec<any>, any>;
21
+ export type DescendantNodeDefinition = AnyNodeDefinition;
22
+ export type AnyDescendantNode = DescendantNode<DescendantNodeDefinition, DescendantNodeStateSpec<any>, any, any>;
23
23
  interface DescendantNodeOptions {
24
24
  readonly computeReference?: Accessor<string>;
25
25
  }
26
- export declare abstract class DescendantNode<Definition extends DescendantNodeDefinition, Spec extends DescendantNodeStateSpec<any>, Child extends AnyChildNode | null = null> extends InstanceNode<Definition, Spec, Child> implements BaseNode, EvaluationContext, SubscribableDependency {
27
- readonly parent: DescendantNodeParent<Definition>;
26
+ export declare abstract class DescendantNode<Definition extends DescendantNodeDefinition, Spec extends DescendantNodeStateSpec<any>, Parent extends AnyParentNode, Child extends AnyChildNode | null = null> extends InstanceNode<Definition, Spec, Parent, Child> implements BaseNode, XFormsXPathPrimaryInstanceDescendantNode, EvaluationContext {
27
+ readonly parent: Parent;
28
28
  readonly definition: Definition;
29
+ /**
30
+ * Partial implementation of {@link isAttached}, used to check whether `this`
31
+ * is present in {@link parent}'s children state.
32
+ */
33
+ protected readonly isAttachedDescendant: Accessor<boolean>;
29
34
  readonly hasReadonlyAncestor: Accessor<boolean>;
30
35
  readonly isSelfReadonly: Accessor<boolean>;
31
36
  readonly isReadonly: Accessor<boolean>;
@@ -33,23 +38,25 @@ export declare abstract class DescendantNode<Definition extends DescendantNodeDe
33
38
  readonly isSelfRelevant: Accessor<boolean>;
34
39
  readonly isRelevant: Accessor<boolean>;
35
40
  readonly isRequired: Accessor<boolean>;
36
- readonly root: Root;
37
- readonly evaluator: XFormsXPathEvaluator;
38
- readonly contextNode: Element;
39
- constructor(parent: DescendantNodeParent<Definition>, definition: Definition, options?: DescendantNodeOptions);
40
- protected createContextNode(parentContextNode: Element, nodeName: string): Element;
41
41
  /**
42
- * Currently expected to be overridden by...
42
+ * WARNING! Ideally, this would be an abstract property, defined by each
43
+ * concrete subclass (or other intermediate abstract classes, where
44
+ * appropriate). Unfortunately it must be assigned here, so it will be present
45
+ * for certain XPath DOM adapter functionality **during** each concrete node's
46
+ * construction.
43
47
  *
44
- * - Repeat range: returns its parent's context node, because it doesn't have
45
- * a node in the primary instance tree.
46
- *
47
- * - Repeat instance: returns its created context node, but overrides handles
48
- * appending behavior separately (for inserting at the end of its parent
49
- * range, or even at an arbitrary index within the range, after instance
50
- * creation is has completed).
48
+ * Those subclasses nevertheless override this same property, assigning the
49
+ * same value, for the purposes of narrowing the XPath node kind semantics
50
+ * appropriate for each node type.
51
51
  */
52
- protected initializeContextNode(parentContextNode: Element, nodeName: string): Element;
52
+ readonly [XPathNodeKindKey]: XFormsXPathPrimaryInstanceDescendantNodeKind;
53
+ readonly root: Root;
54
+ abstract readonly nodeType: InstanceNodeType;
55
+ readonly isAttached: Accessor<boolean>;
56
+ readonly evaluator: EngineXPathEvaluator;
57
+ readonly contextNode: PrimaryInstanceXPathChildNode;
58
+ readonly getActiveLanguage: Accessor<ActiveLanguage>;
59
+ constructor(parent: Parent, definition: Definition, options?: DescendantNodeOptions);
53
60
  /**
54
61
  * @package
55
62
  *
@@ -1,22 +1,31 @@
1
- import { XFormsXPathEvaluator } from '@getodk/xpath';
1
+ import { XPathNodeKindKey } from '@getodk/xpath';
2
2
  import { Accessor, Signal } from 'solid-js';
3
3
  import { BaseNode } from '../../client/BaseNode.ts';
4
4
  import { NodeAppearances } from '../../client/NodeAppearances.ts';
5
- import { InstanceNodeType } from '../../client/node-types.ts';
5
+ import { FormNodeID } from '../../client/identity.ts';
6
+ import { InstanceNodeType as ClientInstanceNodeType } from '../../client/node-types.ts';
7
+ import { SubmissionState } from '../../client/submission/SubmissionState.ts';
6
8
  import { NodeValidationState } from '../../client/validation.ts';
7
- import { TextRange } from '../../index.ts';
9
+ import { ActiveLanguage, TextRange } from '../../index.ts';
10
+ import { EngineXPathEvaluator } from '../../integration/xpath/EngineXPathEvaluator.ts';
11
+ import { XFormsXPathPrimaryInstanceNode, XFormsXPathPrimaryInstanceNodeKind } from '../../integration/xpath/adapter/XFormsXPathNode.ts';
12
+ import { PrimaryInstanceXPathNode } from '../../integration/xpath/adapter/kind.ts';
8
13
  import { CurrentState } from '../../lib/reactivity/node-state/createCurrentState.ts';
9
14
  import { EngineState } from '../../lib/reactivity/node-state/createEngineState.ts';
10
15
  import { SharedNodeState } from '../../lib/reactivity/node-state/createSharedNodeState.ts';
11
16
  import { ReactiveScope } from '../../lib/reactivity/scope.ts';
12
17
  import { SimpleAtomicState } from '../../lib/reactivity/types.ts';
13
18
  import { AnyNodeDefinition } from '../../parse/model/NodeDefinition.ts';
19
+ import { PrimaryInstance } from '../PrimaryInstance.ts';
14
20
  import { Root } from '../Root.ts';
15
- import { AnyChildNode, AnyNode, AnyParentNode } from '../hierarchy.ts';
16
- import { NodeID } from '../identity.ts';
21
+ import { AnyChildNode, AnyParentNode } from '../hierarchy.ts';
17
22
  import { EvaluationContext } from '../internal-api/EvaluationContext.ts';
18
23
  import { InstanceConfig } from '../internal-api/InstanceConfig.ts';
19
- import { SubscribableDependency } from '../internal-api/SubscribableDependency.ts';
24
+ export type EngineInstanceNodeType = ClientInstanceNodeType | 'primary-instance';
25
+ export interface BaseEngineNode extends Omit<BaseNode, 'nodeType'> {
26
+ readonly nodeType: EngineInstanceNodeType;
27
+ }
28
+ export type InstanceNodeValueOptionsStateSpec = Accessor<null> | Accessor<readonly unknown[]> | null;
20
29
  export interface InstanceNodeStateSpec<Value = never> {
21
30
  readonly reference: Accessor<string> | string;
22
31
  readonly readonly: Accessor<boolean> | boolean;
@@ -24,8 +33,8 @@ export interface InstanceNodeStateSpec<Value = never> {
24
33
  readonly required: Accessor<boolean> | boolean;
25
34
  readonly label: Accessor<TextRange<'label'> | null> | null;
26
35
  readonly hint: Accessor<TextRange<'hint'> | null> | null;
27
- readonly children: Accessor<readonly NodeID[]> | null;
28
- readonly valueOptions: Accessor<null> | Accessor<readonly unknown[]> | null;
36
+ readonly children: Accessor<readonly FormNodeID[]> | null;
37
+ readonly valueOptions: InstanceNodeValueOptionsStateSpec;
29
38
  readonly value: Signal<Value> | SimpleAtomicState<Value> | null;
30
39
  }
31
40
  type AnyInstanceNode = InstanceNode<AnyNodeDefinition, InstanceNodeStateSpec<any>, any>;
@@ -43,13 +52,17 @@ interface ComputableReferenceNode {
43
52
  type ComputeInstanceNodeReference = <This extends ComputableReferenceNode>(this: This, parent: This['parent'], definition: This['definition']) => string;
44
53
  export interface InstanceNodeOptions {
45
54
  readonly computeReference?: () => string;
55
+ readonly scope?: ReactiveScope;
46
56
  }
47
- export declare abstract class InstanceNode<Definition extends AnyNodeDefinition, Spec extends InstanceNodeStateSpec<any>, Child extends AnyChildNode | null = null> implements BaseNode, EvaluationContext, SubscribableDependency {
57
+ export declare abstract class InstanceNode<Definition extends AnyNodeDefinition, Spec extends InstanceNodeStateSpec<any>, Parent extends AnyParentNode | null, Child extends AnyChildNode | null = null> implements BaseEngineNode, XFormsXPathPrimaryInstanceNode, EvaluationContext {
48
58
  readonly engineConfig: InstanceConfig;
49
- readonly parent: AnyParentNode | null;
59
+ readonly parent: Parent;
50
60
  readonly definition: Definition;
51
61
  protected abstract readonly state: SharedNodeState<Spec>;
52
62
  protected abstract readonly engineState: EngineState<Spec>;
63
+ abstract readonly [XPathNodeKindKey]: XFormsXPathPrimaryInstanceNodeKind;
64
+ readonly rootDocument: PrimaryInstance;
65
+ abstract readonly root: Root;
53
66
  /**
54
67
  * @package Exposed on every node type to facilitate inheritance, as well as
55
68
  * conditional behavior for value nodes.
@@ -70,37 +83,46 @@ export declare abstract class InstanceNode<Definition extends AnyNodeDefinition,
70
83
  * conditional behavior for value nodes.
71
84
  */
72
85
  abstract readonly isRelevant: Accessor<boolean>;
73
- readonly nodeId: NodeID;
74
- abstract readonly nodeType: InstanceNodeType;
86
+ readonly nodeId: FormNodeID;
87
+ abstract readonly nodeType: EngineInstanceNodeType;
75
88
  abstract readonly appearances: NodeAppearances<Definition>;
89
+ abstract readonly nodeOptions: object | null;
76
90
  abstract readonly currentState: InstanceNodeCurrentState<Spec, Child>;
77
91
  abstract readonly validationState: NodeValidationState;
78
- abstract readonly root: Root;
79
- abstract readonly evaluator: XFormsXPathEvaluator;
92
+ abstract readonly submissionState: SubmissionState;
93
+ abstract readonly evaluator: EngineXPathEvaluator;
94
+ abstract readonly getActiveLanguage: Accessor<ActiveLanguage>;
95
+ abstract readonly isAttached: Accessor<boolean>;
80
96
  readonly scope: ReactiveScope;
81
97
  readonly computeReference: ComputeInstanceNodeReference;
82
98
  protected readonly computeChildStepReference: ComputeInstanceNodeReference;
83
99
  readonly contextReference: () => string;
84
- abstract readonly contextNode: Element;
85
- constructor(engineConfig: InstanceConfig, parent: AnyParentNode | null, definition: Definition, options?: InstanceNodeOptions);
86
100
  /**
87
- * @package This presently serves a few internal use cases, where certain
88
- * behaviors depend on arbitrary traversal from any point in the instance
89
- * tree, without particular regard for the visited node type. It isn't
90
- * intended for external traversal or any other means of consuming children by
91
- * a client. This return type intentionally deviates from one structural
92
- * expectation, requiring even leaf nodes to return an array (though for those
93
- * nodes it will always be empty). This affords consistency and efficiency of
94
- * interface for those internal uses.
101
+ * Note: it is expected that at least some node subclasses will override this
102
+ * to reflect (or in the case of intermediate abstract base classes, to
103
+ * constrain) their more specific `this` type.
104
+ */
105
+ readonly contextNode: PrimaryInstanceXPathNode;
106
+ constructor(engineConfig: InstanceConfig, parent: Parent, definition: Definition, options?: InstanceNodeOptions);
107
+ /** @package */
108
+ isPrimaryInstance(): this is PrimaryInstance;
109
+ /** @package */
110
+ isRoot(): this is Root;
111
+ /**
112
+ * @package This presently serves a growing variety of internal use cases,
113
+ * where certain behaviors depend on arbitrary traversal from any point in the
114
+ * instance tree, without particular regard for the visited node type. It
115
+ * isn't intended for external traversal or any other means of consuming
116
+ * children by a client. This return type intentionally deviates from one
117
+ * structural expectation, requiring even leaf nodes to return an array
118
+ * (though for those nodes it will always be empty). This affords consistency
119
+ * and efficiency of interface for those internal uses.
95
120
  */
96
121
  abstract getChildren(this: AnyInstanceNode): readonly AnyChildNode[];
97
- getNodesByReference(this: AnyNode, visited: WeakSet<AnyNode>, dependencyReference: string): readonly SubscribableDependency[];
98
- getSubscribableDependenciesByReference(this: AnyNode, reference: string): readonly SubscribableDependency[];
99
122
  /**
100
- * This is a default implementation suitable for most node types. The rest
101
- * (currently: `Root`, `RepeatRange`, `RepeatInstance`) should likely extend
102
- * this behavior, rather than simply overriding it.
123
+ * @todo Values as text nodes(?)
103
124
  */
104
- subscribe(): void;
125
+ getXPathChildNodes(): readonly AnyChildNode[];
126
+ getXPathValue(): string;
105
127
  }
106
128
  export {};
@@ -1,16 +1,19 @@
1
+ import { XPathNodeKindKey } from '@getodk/xpath';
1
2
  import { Accessor } from 'solid-js';
2
3
  import { UnsupportedControlNodeType } from '../../client/node-types.ts';
4
+ import { SubmissionState } from '../../client/submission/SubmissionState.ts';
3
5
  import { TextRange } from '../../client/TextRange.ts';
4
6
  import { UnsupportedControlDefinition, UnsupportedControlElementDefinition, UnsupportedControlNode } from '../../client/unsupported/UnsupportedControlNode.ts';
5
7
  import { AnyViolation, LeafNodeValidationState } from '../../client/validation.ts';
8
+ import { XFormsXPathElement } from '../../integration/xpath/adapter/XFormsXPathNode.ts';
6
9
  import { CurrentState } from '../../lib/reactivity/node-state/createCurrentState.ts';
7
10
  import { EngineState } from '../../lib/reactivity/node-state/createEngineState.ts';
8
11
  import { SharedNodeState } from '../../lib/reactivity/node-state/createSharedNodeState.ts';
9
12
  import { SimpleAtomicState } from '../../lib/reactivity/types.ts';
10
13
  import { UnknownAppearanceDefinition } from '../../parse/body/appearance/unknownAppearanceParser.ts';
11
- import { GeneralParentNode } from '../hierarchy.ts';
14
+ import { AnyUnsupportedControl, GeneralParentNode } from '../hierarchy.ts';
12
15
  import { EvaluationContext } from '../internal-api/EvaluationContext.ts';
13
- import { SubscribableDependency } from '../internal-api/SubscribableDependency.ts';
16
+ import { ClientReactiveSubmittableLeafNode } from '../internal-api/submission/ClientReactiveSubmittableLeafNode.ts';
14
17
  import { ValidationContext } from '../internal-api/ValidationContext.ts';
15
18
  import { ValueContext } from '../internal-api/ValueContext.ts';
16
19
  import { DescendantNode, DescendantNodeStateSpec } from './DescendantNode.ts';
@@ -27,17 +30,22 @@ interface UnsupportedControlStateSpec extends DescendantNodeStateSpec<unknown> {
27
30
  readonly value: SimpleAtomicState<unknown>;
28
31
  readonly valueOptions: never;
29
32
  }
30
- export declare abstract class UnsupportedControl<Type extends UnsupportedControlNodeType> extends DescendantNode<TypedUnsupportedControlDefinition<Type>, UnsupportedControlStateSpec, null> implements UnsupportedControlNode, EvaluationContext, SubscribableDependency, ValidationContext, ValueContext<unknown> {
33
+ export declare abstract class UnsupportedControl<Type extends UnsupportedControlNodeType> extends DescendantNode<TypedUnsupportedControlDefinition<Type>, UnsupportedControlStateSpec, GeneralParentNode, null> implements UnsupportedControlNode, XFormsXPathElement, EvaluationContext, ValidationContext, ValueContext<unknown>, ClientReactiveSubmittableLeafNode<unknown> {
31
34
  private readonly validation;
32
35
  protected readonly state: SharedNodeState<UnsupportedControlStateSpec>;
36
+ readonly [XPathNodeKindKey] = "element";
33
37
  protected readonly engineState: EngineState<UnsupportedControlStateSpec>;
34
38
  abstract readonly nodeType: Type;
35
39
  readonly appearances: UnknownAppearanceDefinition;
40
+ readonly nodeOptions: null;
36
41
  readonly currentState: CurrentState<UnsupportedControlStateSpec>;
37
42
  get validationState(): LeafNodeValidationState;
43
+ readonly submissionState: SubmissionState;
44
+ abstract readonly contextNode: AnyUnsupportedControl & this;
38
45
  readonly encodeValue: (instanceValue: unknown) => string;
39
46
  readonly decodeValue: (instanceValue: unknown) => unknown;
40
47
  constructor(parent: GeneralParentNode, definition: TypedUnsupportedControlDefinition<Type>);
48
+ getXPathValue(): string;
41
49
  getViolation(): AnyViolation | null;
42
50
  isBlank(): boolean;
43
51
  getChildren(): readonly [];
@@ -0,0 +1,47 @@
1
+ import { XPathNodeKindKey } from '@getodk/xpath';
2
+ import { Accessor } from 'solid-js';
3
+ import { BaseValueNode } from '../../client/BaseValueNode.ts';
4
+ import { LeafNodeType as ValueNodeType } from '../../client/node-types.ts';
5
+ import { SubmissionState } from '../../client/submission/SubmissionState.ts';
6
+ import { AnyViolation, LeafNodeValidationState } from '../../client/validation.ts';
7
+ import { ValueType } from '../../client/ValueType.ts';
8
+ import { XFormsXPathElement } from '../../integration/xpath/adapter/XFormsXPathNode.ts';
9
+ import { RuntimeValueSetter, RuntimeValueState, ValueCodec } from '../../lib/codecs/ValueCodec.ts';
10
+ import { CurrentState } from '../../lib/reactivity/node-state/createCurrentState.ts';
11
+ import { EngineState } from '../../lib/reactivity/node-state/createEngineState.ts';
12
+ import { SharedNodeState } from '../../lib/reactivity/node-state/createSharedNodeState.ts';
13
+ import { SimpleAtomicState } from '../../lib/reactivity/types.ts';
14
+ import { SharedValidationState } from '../../lib/reactivity/validation/createValidation.ts';
15
+ import { LeafNodeDefinition } from '../../parse/model/LeafNodeDefinition.ts';
16
+ import { GeneralParentNode } from '../hierarchy.ts';
17
+ import { EvaluationContext } from '../internal-api/EvaluationContext.ts';
18
+ import { DecodeInstanceValue, InstanceValueContext } from '../internal-api/InstanceValueContext.ts';
19
+ import { ClientReactiveSubmittableValueNode } from '../internal-api/submission/ClientReactiveSubmittableValueNode.ts';
20
+ import { ValidationContext } from '../internal-api/ValidationContext.ts';
21
+ import { DescendantNodeStateSpec, DescendantNode } from './DescendantNode.ts';
22
+ export type ValueNodeDefinition<V extends ValueType> = LeafNodeDefinition<V>;
23
+ export interface ValueNodeStateSpec<RuntimeValue> extends DescendantNodeStateSpec<RuntimeValue> {
24
+ readonly children: null;
25
+ readonly value: SimpleAtomicState<RuntimeValue>;
26
+ readonly instanceValue: Accessor<string>;
27
+ }
28
+ export declare abstract class ValueNode<V extends ValueType, Definition extends ValueNodeDefinition<V>, RuntimeValue extends RuntimeInputValue, RuntimeInputValue = RuntimeValue> extends DescendantNode<Definition, ValueNodeStateSpec<RuntimeValue>, GeneralParentNode, null> implements BaseValueNode<V, RuntimeValue>, XFormsXPathElement, EvaluationContext, InstanceValueContext, ValidationContext, ClientReactiveSubmittableValueNode {
29
+ protected readonly validation: SharedValidationState;
30
+ protected readonly getInstanceValue: Accessor<string>;
31
+ protected readonly valueState: RuntimeValueState<RuntimeValue>;
32
+ protected readonly setValueState: RuntimeValueSetter<RuntimeInputValue>;
33
+ readonly [XPathNodeKindKey] = "element";
34
+ readonly getXPathValue: () => string;
35
+ protected abstract readonly state: SharedNodeState<ValueNodeStateSpec<RuntimeValue>>;
36
+ protected abstract readonly engineState: EngineState<ValueNodeStateSpec<RuntimeValue>>;
37
+ readonly decodeInstanceValue: DecodeInstanceValue;
38
+ abstract readonly nodeType: ValueNodeType;
39
+ readonly valueType: V;
40
+ abstract readonly currentState: CurrentState<ValueNodeStateSpec<RuntimeValue>>;
41
+ get validationState(): LeafNodeValidationState;
42
+ readonly submissionState: SubmissionState;
43
+ constructor(parent: GeneralParentNode, definition: Definition, codec: ValueCodec<V, RuntimeValue, RuntimeInputValue>);
44
+ getViolation(): AnyViolation | null;
45
+ isBlank(): boolean;
46
+ getChildren(): readonly [];
47
+ }
@@ -1,22 +1,23 @@
1
1
  import { Group } from './Group.ts';
2
- import { ModelValue } from './ModelValue.ts';
3
- import { Note } from './Note.ts';
2
+ import { AnyInputControl } from './InputControl.ts';
3
+ import { AnyModelValue } from './ModelValue.ts';
4
+ import { AnyNote } from './Note.ts';
5
+ import { PrimaryInstance } from './PrimaryInstance.ts';
6
+ import { AnyRangeControl } from './RangeControl.ts';
4
7
  import { RepeatInstance } from './repeat/RepeatInstance.ts';
5
8
  import { RepeatRangeControlled } from './repeat/RepeatRangeControlled.ts';
6
9
  import { RepeatRangeUncontrolled } from './repeat/RepeatRangeUncontrolled.ts';
7
10
  import { Root } from './Root.ts';
8
- import { SelectField } from './SelectField.ts';
9
- import { StringField } from './StringField.ts';
11
+ import { SelectControl } from './SelectControl.ts';
10
12
  import { Subtree } from './Subtree.ts';
11
13
  import { TriggerControl } from './TriggerControl.ts';
12
- import { RangeControl } from './unsupported/RangeControl.ts';
13
- import { RankControl } from './unsupported/RankControl.ts';
14
+ import { RankControl } from './RankControl.ts';
14
15
  import { UploadControl } from './unsupported/UploadControl.ts';
15
16
  export type RepeatRange = RepeatRangeControlled | RepeatRangeUncontrolled;
16
- export type UnsupportedControl = RangeControl | RankControl | UploadControl;
17
- export type AnyNode = Root | Group | Subtree | RepeatRange | RepeatInstance | Note | ModelValue | StringField | SelectField | TriggerControl | UnsupportedControl;
18
- export type AnyParentNode = Root | Group | Subtree | RepeatRange | RepeatInstance;
17
+ export type AnyUnsupportedControl = UploadControl;
18
+ export type AnyNode = PrimaryInstance | Root | Group | Subtree | RepeatRange | RepeatInstance | AnyNote | AnyModelValue | AnyInputControl | AnyRangeControl | RankControl | SelectControl | TriggerControl | AnyUnsupportedControl;
19
+ export type AnyParentNode = PrimaryInstance | Root | Group | Subtree | RepeatRange | RepeatInstance;
19
20
  export type GeneralParentNode = Root | Group | Subtree | RepeatInstance;
20
- export type AnyChildNode = Group | Subtree | RepeatRange | RepeatInstance | ModelValue | Note | StringField | SelectField | TriggerControl | UnsupportedControl;
21
- export type GeneralChildNode = Group | Subtree | RepeatRange | ModelValue | Note | StringField | SelectField | TriggerControl | UnsupportedControl;
22
- export type AnyValueNode = ModelValue | Note | StringField | SelectField | TriggerControl | UnsupportedControl;
21
+ export type AnyChildNode = Root | Group | Subtree | RepeatRange | RepeatInstance | AnyModelValue | AnyNote | AnyInputControl | AnyRangeControl | RankControl | SelectControl | TriggerControl | AnyUnsupportedControl;
22
+ export type GeneralChildNode = Group | Subtree | RepeatRange | AnyModelValue | AnyNote | AnyInputControl | AnyRangeControl | RankControl | SelectControl | TriggerControl | AnyUnsupportedControl;
23
+ export type AnyValueNode = AnyModelValue | AnyNote | AnyInputControl | AnyRangeControl | RankControl | SelectControl | TriggerControl | AnyUnsupportedControl;
@@ -1,7 +1,2 @@
1
- declare const NODE_ID_BRAND: unique symbol;
2
- type NODE_ID_BRAND = typeof NODE_ID_BRAND;
3
- export type NodeID = string & {
4
- readonly [NODE_ID_BRAND]: true;
5
- };
6
- export declare const declareNodeID: (id: string) => NodeID;
7
- export {};
1
+ import { FormNodeID } from '../client/identity.ts';
2
+ export declare const nodeID: (id: string) => FormNodeID;
@@ -1,10 +1,8 @@
1
- import { XFormsXPathEvaluator } from '@getodk/xpath';
2
1
  import { Accessor } from 'solid-js';
2
+ import { EngineXPathNode } from '../../integration/xpath/adapter/kind.ts';
3
+ import { EngineXPathEvaluator } from '../../integration/xpath/EngineXPathEvaluator.ts';
3
4
  import { ReactiveScope } from '../../lib/reactivity/scope.ts';
4
- import { SubscribableDependency } from './SubscribableDependency.ts';
5
5
  import { TranslationContext } from './TranslationContext.ts';
6
- export interface EvaluationContextRoot extends SubscribableDependency, TranslationContext {
7
- }
8
6
  /**
9
7
  * Provides a common interface to establish context for XPath-based
10
8
  * computations, i.e. to evaluate {@link DependentExpression}s where:
@@ -16,20 +14,63 @@ export interface EvaluationContextRoot extends SubscribableDependency, Translati
16
14
  * - the expression may be dependent on the form's currently active language
17
15
  * (e.g. `jr:itext`)
18
16
  * - any dynamic case is expected to be internally reactive
17
+ *
18
+ * Historical note: we previously utilized static analysis and a related
19
+ * abstraction to set up reactive subscriptions to node references, values, and
20
+ * other pertinent state changes warranting an expression's recomputation. Those
21
+ * are still described above because they provide useful insight for the
22
+ * **effect** of evaluating a given {@link DependentExpression}, with a given
23
+ * {@link EvaluationContext}.
24
+ *
25
+ * The reactive subscription mechanism has since been largely replaced, with the
26
+ * engine's implementation of {@link EngineXPathEvaluator} and its corresponding
27
+ * {@link engineDOMAdapter | XPath DOM adapter implementation}.
28
+ *
29
+ * @todo There is still one notable exception: translation expressions (i.e.
30
+ * expressions calling {@link https://getodk.github.io/xforms-spec/#fn:jr:itext}
31
+ * | `jr:itext`). We still perform analysis to identify such calls, and when
32
+ * evaluating those expressions we still explicitly subscribe to the form's
33
+ * active language state. A further refactor, moving more of the responsibility
34
+ * for translation state up out of `@getodk/xpath` into the engine, would likely
35
+ * allow us to further simplify the engine's reactive XPath recomputation
36
+ * approach.
37
+ *
38
+ * @see {@link createTranslationState} for additional context.
19
39
  */
20
- export interface EvaluationContext {
40
+ export interface EvaluationContext extends TranslationContext {
41
+ /**
42
+ * Used to determine whether {@link contextNode} is attached to its
43
+ * {@link EngineXPathNode} document hierarchy.
44
+ *
45
+ * - If this function returns `true`: expressions are evaluated as defined.
46
+ * - If this function returns `false`: expressions are evaluated to either an
47
+ * explicit default value (if provided) or an implicit default value
48
+ * appropriate for the requested result type.
49
+ *
50
+ * @see {@link createComputedExpression} for further detail on the latter.
51
+ */
52
+ readonly isAttached: Accessor<boolean>;
21
53
  readonly scope: ReactiveScope;
22
- readonly evaluator: XFormsXPathEvaluator;
23
- readonly root: EvaluationContextRoot;
54
+ readonly evaluator: EngineXPathEvaluator;
24
55
  /**
25
56
  * Produces the current absolute reference to the {@link contextNode}, where
26
- * the absolute `/` resolves to the active form state's primary instance root.
57
+ * the AbsoluteLocationPath expression `/` resolves to the active
58
+ * {@link PrimaryInstance}, and each Step and/or position Predicate from there
59
+ * corresponds to the node hierarchy descending from there.
27
60
  */
28
61
  readonly contextReference: Accessor<string>;
29
- readonly contextNode: Node;
30
62
  /**
31
- * Resolves nodes corresponding to the provided node-set reference, possibly
32
- * relative to the {@link EvaluationContext.contextNode}.
63
+ * Note: in most cases, implementations of {@link EvaluationContext} will
64
+ * **also** be an implementation of {@link EngineXPathNode} (as concrete
65
+ * implementations of {@link InstanceNode}). This property is an intentional
66
+ * indirection which:
67
+ *
68
+ * - Expresses only the much more limited set of properties which must be
69
+ * present to initialize computations during those nodes' construction.
70
+ *
71
+ * - Allows for a handful of cases where an {@link InstanceNode} provides the
72
+ * requisite facilities for evaluating expressions in a {@link StaticNode}'s
73
+ * context (itemsets being a prominent example).
33
74
  */
34
- getSubscribableDependenciesByReference(reference: string): readonly SubscribableDependency[];
75
+ readonly contextNode: EngineXPathNode;
35
76
  }
@@ -1,6 +1,12 @@
1
- import { EngineConfig } from '../../client/EngineConfig.ts';
1
+ import { MissingResourceBehavior } from '../../client/constants.ts';
2
+ import { OpaqueReactiveObjectFactory } from '../../client/OpaqueReactiveObjectFactory.ts';
3
+ import { FetchFormAttachment, FetchResource } from '../../client/resources.ts';
2
4
  import { CreateUniqueId } from '../../lib/unique-id.ts';
3
- export interface InstanceConfig extends Required<EngineConfig> {
5
+ export interface InstanceConfig {
6
+ readonly stateFactory: OpaqueReactiveObjectFactory;
7
+ readonly fetchFormDefinition: FetchResource;
8
+ readonly fetchFormAttachment: FetchFormAttachment;
9
+ readonly missingResourceBehavior: MissingResourceBehavior;
4
10
  /**
5
11
  * Uniqueness per form instance session (so e.g. persistence isn't necessary).
6
12
  */
@@ -0,0 +1,22 @@
1
+ import { ReactiveScope } from '../../lib/reactivity/scope.ts';
2
+ import { BindComputationExpression } from '../../parse/expression/BindComputationExpression.ts';
3
+ import { AnyBindPreloadDefinition } from '../../parse/model/BindPreloadDefinition.ts';
4
+ import { EvaluationContext } from './EvaluationContext.ts';
5
+ export type DecodeInstanceValue = (value: string) => string;
6
+ interface InstanceValueContextDefinitionBind {
7
+ readonly preload: AnyBindPreloadDefinition | null;
8
+ readonly calculate: BindComputationExpression<'calculate'> | null;
9
+ readonly readonly: BindComputationExpression<'readonly'>;
10
+ }
11
+ export interface InstanceValueContextDefinition {
12
+ readonly bind: InstanceValueContextDefinitionBind;
13
+ readonly defaultValue: string;
14
+ }
15
+ export interface InstanceValueContext extends EvaluationContext {
16
+ readonly scope: ReactiveScope;
17
+ readonly definition: InstanceValueContextDefinition;
18
+ readonly decodeInstanceValue: DecodeInstanceValue;
19
+ isReadonly(): boolean;
20
+ isRelevant(): boolean;
21
+ }
22
+ export {};
@@ -0,0 +1,36 @@
1
+ import { FormLanguage } from '../../client/FormLanguage.ts';
2
+ import { RootNode, RootNodeState } from '../../client/RootNode.ts';
3
+ export interface PrimaryInstanceDocumentState extends Omit<RootNodeState, 'children'> {
4
+ /**
5
+ * @todo while this is an internal interface, this feels like maybe an
6
+ * unnecessary indirection? It would probably be fine for it to reference
7
+ * `Root` directly? We do get some minor benefit from making sure the client
8
+ * and internal types are aligned, but we also already enforce that by
9
+ * ensuring `Root implements RootNode`...
10
+ */
11
+ get children(): readonly RootNode[];
12
+ }
13
+ /**
14
+ * Provides an interface most similar to what we would expose at the
15
+ * `@getodk/xforms-engine` package boundary, if we were to document the primary
16
+ * instance document's types for a client.
17
+ *
18
+ * Note: this interface (as well as {@link currentState}'s {@link PrimaryInstanceDocumentState}) is derived from {@link RootNode} to help avoid drift if that underlying interface (or its shared {@link BaseNode} interface) is updated.
19
+ *
20
+ */
21
+ export interface PrimaryInstanceDocument extends Omit<RootNode, 'nodeType' | 'currentState' | 'setLanguage'> {
22
+ readonly nodeType: 'primary-instance';
23
+ readonly currentState: PrimaryInstanceDocumentState;
24
+ /**
25
+ * @todo This intentionally returns `unknown` as a hint that we will likely
26
+ * want to move away from returning {@link RootNode} (i.e. "all of the state",
27
+ * as it was conceived in that design effort) on every state change.
28
+ *
29
+ * In this case, it may be sensible to return any of:
30
+ *
31
+ * - Just the state set directly (i.e. the input {@link FormLanguage})
32
+ * - That effective state, and some representation of all affected nodes
33
+ * - Something less obvious, but potentially more useful to clients?
34
+ */
35
+ setLanguage(language: FormLanguage): unknown;
36
+ }
@@ -1,4 +1,5 @@
1
- import { ActiveLanguage } from '../../index.ts';
1
+ import { Accessor } from 'solid-js';
2
+ import { ActiveLanguage } from '../../client/FormLanguage.ts';
2
3
  export interface TranslationContext {
3
- get activeLanguage(): ActiveLanguage;
4
+ readonly getActiveLanguage: Accessor<ActiveLanguage>;
4
5
  }
@@ -1,9 +1,8 @@
1
+ import { FormNodeID } from '../../client/identity.ts';
1
2
  import { AnyViolation } from '../../client/validation.ts';
2
3
  import { BindComputationExpression } from '../../parse/expression/BindComputationExpression.ts';
3
4
  import { MessageDefinition } from '../../parse/text/MessageDefinition.ts';
4
- import { NodeID } from '../identity.ts';
5
5
  import { EvaluationContext } from './EvaluationContext.ts';
6
- import { SubscribableDependency } from './SubscribableDependency.ts';
7
6
  interface ValidationContextCurrentState {
8
7
  get reference(): string;
9
8
  }
@@ -16,8 +15,8 @@ interface ValidationContextDefinitionBind {
16
15
  interface ValidationContextDefinition {
17
16
  readonly bind: ValidationContextDefinitionBind;
18
17
  }
19
- export interface ValidationContext extends EvaluationContext, SubscribableDependency {
20
- readonly nodeId: NodeID;
18
+ export interface ValidationContext extends EvaluationContext {
19
+ readonly nodeId: FormNodeID;
21
20
  readonly definition: ValidationContextDefinition;
22
21
  readonly currentState: ValidationContextCurrentState;
23
22
  getViolation(): AnyViolation | null;
@@ -1,3 +1,4 @@
1
+ import { EngineXPathNode } from '../../integration/xpath/adapter/kind.ts';
1
2
  import { ReactiveScope } from '../../lib/reactivity/scope.ts';
2
3
  import { BindComputationExpression } from '../../parse/expression/BindComputationExpression.ts';
3
4
  import { EvaluationContext } from './EvaluationContext.ts';
@@ -13,7 +14,7 @@ export interface ValueContextDefinition {
13
14
  export interface ValueContext<RuntimeValue> extends EvaluationContext {
14
15
  readonly scope: ReactiveScope;
15
16
  readonly definition: ValueContextDefinition;
16
- readonly contextNode: Element;
17
+ readonly contextNode: EngineXPathNode & this;
17
18
  isReadonly(): boolean;
18
19
  isRelevant(): boolean;
19
20
  readonly encodeValue: (this: unknown, runtimeValue: RuntimeValue) => InstanceValue;
@@ -0,0 +1,14 @@
1
+ import { SubmissionDefinition } from '../../../client/submission/SubmissionDefinition.ts';
2
+ import { AncestorNodeValidationState } from '../../../client/validation.ts';
3
+ import { Root } from '../../Root.ts';
4
+ import { ClientReactiveSubmittableParentNode, ClientReactiveSubmittableParentNodeDefinition } from './ClientReactiveSubmittableParentNode.ts';
5
+ interface ClientReactiveSubmittableInstanceDefinition extends ClientReactiveSubmittableParentNodeDefinition {
6
+ readonly submission: SubmissionDefinition;
7
+ }
8
+ export interface ClientReactiveSubmittableInstance extends ClientReactiveSubmittableParentNode<Root> {
9
+ readonly definition: ClientReactiveSubmittableInstanceDefinition;
10
+ readonly root: Root;
11
+ readonly parent: null;
12
+ readonly validationState: AncestorNodeValidationState;
13
+ }
14
+ export {};
@@ -0,0 +1,32 @@
1
+ import { SubmissionState } from '../../../client/submission/SubmissionState.ts';
2
+ import { QualifiedName } from '../../../lib/names/QualifiedName.ts';
3
+ import { EscapedXMLText } from '../../../lib/xml-serialization.ts';
4
+ import { ClientReactiveSubmittableChildNode, ClientReactiveSubmittableParentNode } from './ClientReactiveSubmittableParentNode.ts';
5
+ interface ClientReactiveSubmittableLeafNodeCurrentState<RuntimeValue> {
6
+ get relevant(): boolean;
7
+ get value(): RuntimeValue;
8
+ }
9
+ export type SerializedSubmissionValue = string;
10
+ interface ClientReactiveSubmittableLeafNodeDefinition {
11
+ readonly qualifiedName: QualifiedName;
12
+ }
13
+ export interface ClientReactiveSubmittableLeafNode<RuntimeValue> {
14
+ readonly definition: ClientReactiveSubmittableLeafNodeDefinition;
15
+ readonly parent: ClientReactiveSubmittableParentNode<ClientReactiveSubmittableChildNode>;
16
+ readonly currentState: ClientReactiveSubmittableLeafNodeCurrentState<RuntimeValue>;
17
+ /**
18
+ * A client-reactive submittable leaf node is responsible for producing a
19
+ * string representation of its value state, suitable for serialization for
20
+ * submission. It **MUST NOT** perform any further submission-specific
21
+ * serialization duties: in particular, the value **MUST NOT** be escaped for
22
+ * XML. This responsibility is delegated up the stack, to avoid repeat
23
+ * escaping.
24
+ *
25
+ * Note: excluding {@link EscapedXMLText} here does not have an effect on the
26
+ * type system, it is a documentation-only hint, to help guard against future
27
+ * double-escaping mistakes.
28
+ */
29
+ readonly encodeValue: (this: unknown, runtimeValue: RuntimeValue) => Exclude<string, EscapedXMLText>;
30
+ readonly submissionState: SubmissionState;
31
+ }
32
+ export {};