@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,19 @@
1
+ import { SubmissionState } from '../../../client/submission/SubmissionState.ts';
2
+ import { QualifiedName } from '../../../lib/names/QualifiedName.ts';
3
+ export interface ClientReactiveSubmittableChildNode {
4
+ readonly submissionState: SubmissionState;
5
+ }
6
+ interface ClientReactiveSubmittableParentNodeCurrentState<Child extends ClientReactiveSubmittableChildNode> {
7
+ get relevant(): boolean;
8
+ get children(): readonly Child[];
9
+ }
10
+ export interface ClientReactiveSubmittableParentNodeDefinition {
11
+ readonly qualifiedName: QualifiedName;
12
+ }
13
+ export interface ClientReactiveSubmittableParentNode<Child extends ClientReactiveSubmittableChildNode> {
14
+ readonly definition: ClientReactiveSubmittableParentNodeDefinition;
15
+ readonly parent: ClientReactiveSubmittableParentNode<ClientReactiveSubmittableChildNode> | null;
16
+ readonly currentState: ClientReactiveSubmittableParentNodeCurrentState<Child>;
17
+ readonly submissionState: SubmissionState;
18
+ }
19
+ export {};
@@ -0,0 +1,18 @@
1
+ import { SubmissionState } from '../../../client/submission/SubmissionState.ts';
2
+ import { QualifiedName } from '../../../lib/names/QualifiedName.ts';
3
+ import { ClientReactiveSubmittableChildNode, ClientReactiveSubmittableParentNode } from './ClientReactiveSubmittableParentNode.ts';
4
+ interface ClientReactiveSubmittableValueNodeCurrentState {
5
+ get relevant(): boolean;
6
+ get instanceValue(): string;
7
+ }
8
+ export type SerializedSubmissionValue = string;
9
+ interface ClientReactiveSubmittableValueNodeDefinition {
10
+ readonly qualifiedName: QualifiedName;
11
+ }
12
+ export interface ClientReactiveSubmittableValueNode {
13
+ readonly definition: ClientReactiveSubmittableValueNodeDefinition;
14
+ readonly parent: ClientReactiveSubmittableParentNode<ClientReactiveSubmittableChildNode>;
15
+ readonly currentState: ClientReactiveSubmittableValueNodeCurrentState;
16
+ readonly submissionState: SubmissionState;
17
+ }
18
+ export {};
@@ -1,73 +1,64 @@
1
+ import { XPathNodeKindKey } from '@getodk/xpath';
1
2
  import { Accessor } from 'solid-js';
3
+ import { FormNodeID } from '../../client/identity.ts';
2
4
  import { NodeAppearances } from '../../client/NodeAppearances.ts';
3
5
  import { BaseRepeatRangeNode } from '../../client/repeat/BaseRepeatRangeNode.ts';
6
+ import { SubmissionState } from '../../client/submission/SubmissionState.ts';
4
7
  import { TextRange } from '../../client/TextRange.ts';
5
8
  import { AncestorNodeValidationState } from '../../client/validation.ts';
9
+ import { XFormsXPathNodeRange, XFormsXPathNodeRangeKind } from '../../integration/xpath/adapter/XFormsXPathNode.ts';
6
10
  import { ChildrenState } from '../../lib/reactivity/createChildrenState.ts';
7
11
  import { MaterializedChildren } from '../../lib/reactivity/materializeCurrentStateChildren.ts';
8
12
  import { CurrentState } from '../../lib/reactivity/node-state/createCurrentState.ts';
9
13
  import { EngineState } from '../../lib/reactivity/node-state/createEngineState.ts';
10
14
  import { SharedNodeState } from '../../lib/reactivity/node-state/createSharedNodeState.ts';
11
15
  import { AnyRepeatRangeDefinition, ControlledRepeatRangeDefinition } from '../../parse/model/RepeatRangeDefinition.ts';
12
- import { DescendantNodeParent, DescendantNodeSharedStateSpec, DescendantNode } from '../abstract/DescendantNode.ts';
13
- import { NodeID } from '../identity.ts';
16
+ import { DescendantNodeSharedStateSpec, DescendantNode } from '../abstract/DescendantNode.ts';
17
+ import { GeneralParentNode } from '../hierarchy.ts';
14
18
  import { EvaluationContext } from '../internal-api/EvaluationContext.ts';
15
- import { SubscribableDependency } from '../internal-api/SubscribableDependency.ts';
19
+ import { ClientReactiveSubmittableParentNode } from '../internal-api/submission/ClientReactiveSubmittableParentNode.ts';
16
20
  import { RepeatInstance, RepeatDefinition } from './RepeatInstance.ts';
17
21
  interface RepeatRangeStateSpec extends DescendantNodeSharedStateSpec {
18
22
  readonly hint: null;
19
23
  readonly label: Accessor<TextRange<'label'> | null>;
20
- readonly children: Accessor<readonly NodeID[]>;
24
+ readonly children: Accessor<readonly FormNodeID[]>;
21
25
  readonly valueOptions: null;
22
26
  readonly value: null;
23
27
  }
24
28
  type BaseRepeatRangeNodeType<Definition extends AnyRepeatRangeDefinition> = Definition extends ControlledRepeatRangeDefinition ? 'repeat-range:controlled' : 'repeat-range:uncontrolled';
25
- export declare abstract class BaseRepeatRange<Definition extends AnyRepeatRangeDefinition> extends DescendantNode<Definition, RepeatRangeStateSpec, RepeatInstance> implements BaseRepeatRangeNode, EvaluationContext, SubscribableDependency {
26
- /**
27
- * A repeat range doesn't have a corresponding primary instance element of its
28
- * own, and its instances are appended to the range's parent element. During
29
- * creation of the initial primary instance state and DOM trees, we _could_
30
- * reliably append all of the range's instances in order as the definition
31
- * tree is recursed. But that would fail to handle some instance addition
32
- * cases afterwards.
33
- *
34
- * Most notably, we need to know where in the primary instance tree to append
35
- * instances created for a range which is currently empty. As a lucky
36
- * coincidence, this need coincides with the ability to add instances at any
37
- * arbitrary index within the range. In each case, we can reference a primary
38
- * instance DOM node which will become the new instance's preceding sibling.
39
- * Where the range is empty, we use this {@link Comment} node (itself created
40
- * and appended during range initialization) in lieu of a nonexistent
41
- * preceding instance's {@link contextNode}.
42
- *
43
- * @todo We likely want to remove these during submission serialization.
44
- * @todo Can we use a
45
- * {@link https://developer.mozilla.org/en-US/docs/Web/API/Range | DOM Range}
46
- * instead?
47
- */
48
- protected readonly anchorNode: Comment;
29
+ export declare abstract class BaseRepeatRange<Definition extends AnyRepeatRangeDefinition> extends DescendantNode<Definition, RepeatRangeStateSpec, GeneralParentNode, RepeatInstance> implements BaseRepeatRangeNode, XFormsXPathNodeRange, EvaluationContext, ClientReactiveSubmittableParentNode<RepeatInstance> {
49
30
  protected readonly childrenState: ChildrenState<RepeatInstance>;
50
31
  /**
51
- * Provides an {@link EvaluationContext} from which to evaluate expressions
52
- * where some LocationPath sub-expressions may be **relative to the repeat
53
- * range itself**. This is useful for evaluation of expressions where:
54
- *
55
- * - the expression is typically contextualized to any of its
56
- * {@link RepeatInstance} children, but it presently has none (i.e.
57
- * `relevant`)
58
- *
59
- * - the expression is conceptually intended to be evaluated in the context of
60
- * the repeat range itself (i.e. `jr:count`)
61
- */
62
- protected readonly selfEvaluationContext: EvaluationContext & {
63
- readonly contextNode: Comment;
64
- };
65
- /**
66
- * @see {@link isSelfRelevant}
32
+ * A repeat range doesn't have a corresponding primary instance element of its
33
+ * own. It is represented in the following ways:
34
+ *
35
+ * - As a comment node (in terms of XPath semantics), immediately preceding
36
+ * the repeat range's {@link RepeatInstance | repeat instances} (if it
37
+ * presently has any; as a placeholder where they may be appended
38
+ * otherwise). This is necessary to support certain ODK XForms functionality
39
+ * where an expression is expected to be evaluated against "repeats" as a
40
+ * conceptual unit. Most typically, this includes:
41
+ *
42
+ * - `jr:count` expressions associated with the repeat's body element
43
+ * - `relevant` bind computations associated with the repeat's nodeset
44
+ *
45
+ * - As a subtree with {@link RepeatInstance | repeat instance} **children**,
46
+ * in service of the client-facing {@link RepeatRangeNode} API (and with the
47
+ * same structural semantics internally)
48
+ *
49
+ * Ultimately, this means there is a fundamental impedance mismatch between
50
+ * two representations which are either necessary (XPath) or high value
51
+ * (providing a coherent mental model for clients and the engine
52
+ * implementation servicing that client-facing model).
53
+ *
54
+ * In recognition that this is a truly odd mix of inherent and incidental
55
+ * complexity, here we use the special {@link XFormsXPathNodeRangeKind}
56
+ * branded type as a dedicated point of (internal) documentation where the two
57
+ * models diverge.
67
58
  */
68
- protected readonly isEmptyRangeSelfRelevant: Accessor<boolean>;
59
+ readonly [XPathNodeKindKey]: XFormsXPathNodeRangeKind;
69
60
  protected readonly state: SharedNodeState<RepeatRangeStateSpec>;
70
- protected engineState: EngineState<RepeatRangeStateSpec>;
61
+ protected readonly engineState: EngineState<RepeatRangeStateSpec>;
71
62
  /**
72
63
  * @todo Should we special case repeat `readonly` state the same way
73
64
  * we do for `relevant`?
@@ -75,40 +66,6 @@ export declare abstract class BaseRepeatRange<Definition extends AnyRepeatRangeD
75
66
  * @see {@link isSelfRelevant}
76
67
  */
77
68
  isSelfReadonly: Accessor<boolean>;
78
- /**
79
- * A repeat range does not exist in the primary instance tree. A `relevant`
80
- * expression applies to each {@link RepeatInstance} child of the repeat
81
- * range. Determining whether a repeat range itself "is relevant" isn't a
82
- * concept the spec addresses, but it may be used by clients to determine
83
- * whether to allow interaction with the range (e.g. by adding a repeat
84
- * instance, or presenting the range's label when empty).
85
- *
86
- * As a naive first pass, it seems like the heuristic for this should be:
87
- *
88
- * 1. Does the repeat range have any repeat instance children?
89
- *
90
- * - If yes, go to 2.
91
- * - If no, go to 3.
92
- *
93
- * 2. Does one or more of those children return `true` for the node's
94
- * `relevant` expression (i.e. is the repeat instance "self relevant")?
95
- *
96
- * 3. Does the relevant expression return `true` for the repeat range itself
97
- * (where, at least for now, the context of that evaluation would be the
98
- * repeat range's {@link anchorNode} to ensure correct relative expressions
99
- * resolve correctly)?
100
- *
101
- * @todo While (3) is proactively implemented, there isn't presently a test
102
- * exercising it. It felt best for now to surface this for discussion in
103
- * review to validate that it's going in the right direction.
104
- *
105
- * @todo While (2) **is actually tested**, the tests currently in place behave
106
- * the same way with only the logic for (3), regardless of whether the repeat
107
- * range actually has any repeat instance children. It's unclear (a) if that's
108
- * a preferable simplification and (b) how that might affect performance (in
109
- * theory it could vary depending on form structure and runtime state).
110
- */
111
- readonly isSelfRelevant: Accessor<boolean>;
112
69
  abstract readonly nodeType: BaseRepeatRangeNodeType<Definition>;
113
70
  /**
114
71
  * @todo RepeatRange*, RepeatInstance* (and RepeatTemplate*) all share the
@@ -144,16 +101,16 @@ export declare abstract class BaseRepeatRange<Definition extends AnyRepeatRangeD
144
101
  * appearances" should apply, under which circumstances.
145
102
  */
146
103
  abstract readonly appearances: NodeAppearances<Definition>;
104
+ readonly nodeOptions: null;
147
105
  readonly currentState: MaterializedChildren<CurrentState<RepeatRangeStateSpec>, RepeatInstance>;
148
106
  abstract readonly validationState: AncestorNodeValidationState;
149
- constructor(parent: DescendantNodeParent<Definition>, definition: Definition);
107
+ readonly submissionState: SubmissionState;
108
+ constructor(parent: GeneralParentNode, definition: Definition);
150
109
  protected getLastIndex(): number;
151
- protected initializeContextNode(parentContextNode: Element): Element;
152
110
  getInstanceIndex(instance: RepeatInstance): number;
153
111
  private createChildren;
154
112
  protected addChildren(afterIndex: number, definitions: readonly RepeatDefinition[]): readonly RepeatInstance[];
155
113
  protected removeChildren(startIndex: number, count: number): readonly RepeatInstance[];
156
- subscribe(): void;
157
114
  getChildren(): readonly RepeatInstance[];
158
115
  }
159
116
  export {};
@@ -1,34 +1,37 @@
1
+ import { XPathNodeKindKey } from '@getodk/xpath';
1
2
  import { Accessor } from 'solid-js';
3
+ import { FormNodeID } from '../../client/identity.ts';
2
4
  import { RepeatDefinition, RepeatInstanceNode, RepeatInstanceNodeAppearances } from '../../client/repeat/RepeatInstanceNode.ts';
5
+ import { SubmissionState } from '../../client/submission/SubmissionState.ts';
3
6
  import { TextRange } from '../../client/TextRange.ts';
4
7
  import { AncestorNodeValidationState } from '../../client/validation.ts';
8
+ import { XFormsXPathElement } from '../../integration/xpath/adapter/XFormsXPathNode.ts';
5
9
  import { MaterializedChildren } from '../../lib/reactivity/materializeCurrentStateChildren.ts';
6
10
  import { CurrentState } from '../../lib/reactivity/node-state/createCurrentState.ts';
7
11
  import { EngineState } from '../../lib/reactivity/node-state/createEngineState.ts';
8
12
  import { SharedNodeState } from '../../lib/reactivity/node-state/createSharedNodeState.ts';
9
13
  import { DescendantNodeSharedStateSpec, DescendantNode } from '../abstract/DescendantNode.ts';
10
- import { AnyChildNode, GeneralChildNode, RepeatRange } from '../hierarchy.ts';
11
- import { NodeID } from '../identity.ts';
14
+ import { GeneralChildNode, RepeatRange } from '../hierarchy.ts';
12
15
  import { EvaluationContext } from '../internal-api/EvaluationContext.ts';
13
- import { SubscribableDependency } from '../internal-api/SubscribableDependency.ts';
16
+ import { ClientReactiveSubmittableParentNode } from '../internal-api/submission/ClientReactiveSubmittableParentNode.ts';
14
17
  export type { RepeatDefinition };
15
18
  interface RepeatInstanceStateSpec extends DescendantNodeSharedStateSpec {
16
19
  readonly label: Accessor<TextRange<'label'> | null>;
17
20
  readonly hint: null;
18
- readonly children: Accessor<readonly NodeID[]>;
21
+ readonly children: Accessor<readonly FormNodeID[]>;
19
22
  readonly valueOptions: null;
20
23
  readonly value: null;
21
24
  }
22
25
  interface RepeatInstanceOptions {
23
- readonly precedingPrimaryInstanceNode: Comment | Element;
24
26
  readonly precedingInstance: RepeatInstance | null;
25
27
  }
26
- export declare class RepeatInstance extends DescendantNode<RepeatDefinition, RepeatInstanceStateSpec, GeneralChildNode> implements RepeatInstanceNode, EvaluationContext, SubscribableDependency {
28
+ export declare class RepeatInstance extends DescendantNode<RepeatDefinition, RepeatInstanceStateSpec, RepeatRange, GeneralChildNode> implements RepeatInstanceNode, XFormsXPathElement, EvaluationContext, ClientReactiveSubmittableParentNode<GeneralChildNode> {
27
29
  readonly parent: RepeatRange;
28
30
  private readonly childrenState;
29
31
  private readonly currentIndex;
32
+ readonly [XPathNodeKindKey] = "element";
30
33
  protected readonly state: SharedNodeState<RepeatInstanceStateSpec>;
31
- protected engineState: EngineState<RepeatInstanceStateSpec>;
34
+ protected readonly engineState: EngineState<RepeatInstanceStateSpec>;
32
35
  /**
33
36
  * @todo Should we special case repeat `readonly` inheritance the same way
34
37
  * we do for `relevant`?
@@ -55,30 +58,10 @@ export declare class RepeatInstance extends DescendantNode<RepeatDefinition, Rep
55
58
  * @see {@link RepeatRange.appearances}
56
59
  */
57
60
  readonly appearances: RepeatInstanceNodeAppearances;
61
+ readonly nodeOptions: null;
58
62
  readonly currentState: MaterializedChildren<CurrentState<RepeatInstanceStateSpec>, GeneralChildNode>;
59
63
  readonly validationState: AncestorNodeValidationState;
64
+ readonly submissionState: SubmissionState;
60
65
  constructor(parent: RepeatRange, definition: RepeatDefinition, options: RepeatInstanceOptions);
61
- protected initializeContextNode(parentContextNode: Element, nodeName: string): Element;
62
- subscribe(): void;
63
66
  getChildren(): readonly GeneralChildNode[];
64
- /**
65
- * Performs repeat instance node-specific removal logic, then general node
66
- * removal logic, in that order:
67
- *
68
- * 1. At present, before any reactive state change is performed, the repeat
69
- * instance's {@link contextNode} is removed from the primary instance's
70
- * XML DOM backing store (which also removes any descendant nodes from that
71
- * store, as a side effect). This behavior may become unnecessary if/when
72
- * we phase out use of this XML DOM backing store. This should be peformed
73
- * first, so that any following reactive logic which evaluates affected
74
- * XPath expressions will be performed against a state consistent with the
75
- * repeat instance's removal (and that of its XML DOM descendants).
76
- *
77
- * 2. Performs any remaining removal logic as defined in
78
- * {@link DescendantNode.remove}.
79
- *
80
- * These removal steps **must also** occur before any update to the parent
81
- * {@link RepeatRange}'s reactive children state.
82
- */
83
- remove(this: AnyChildNode): void;
84
67
  }
@@ -1,12 +1,12 @@
1
1
  import { RepeatRangeNodeAppearances } from '../../client/repeat/BaseRepeatRangeNode.ts';
2
2
  import { RepeatRangeControlledNode } from '../../client/repeat/RepeatRangeControlledNode.ts';
3
3
  import { AncestorNodeValidationState } from '../../client/validation.ts';
4
+ import { XFormsXPathNodeRange } from '../../integration/xpath/adapter/XFormsXPathNode.ts';
4
5
  import { ControlledRepeatRangeDefinition } from '../../parse/model/RepeatRangeDefinition.ts';
5
6
  import { GeneralParentNode } from '../hierarchy.ts';
6
7
  import { EvaluationContext } from '../internal-api/EvaluationContext.ts';
7
- import { SubscribableDependency } from '../internal-api/SubscribableDependency.ts';
8
8
  import { BaseRepeatRange } from './BaseRepeatRange.ts';
9
- export declare class RepeatRangeControlled extends BaseRepeatRange<ControlledRepeatRangeDefinition> implements RepeatRangeControlledNode, EvaluationContext, SubscribableDependency {
9
+ export declare class RepeatRangeControlled extends BaseRepeatRange<ControlledRepeatRangeDefinition> implements RepeatRangeControlledNode, XFormsXPathNodeRange, EvaluationContext {
10
10
  readonly nodeType = "repeat-range:controlled";
11
11
  readonly appearances: RepeatRangeNodeAppearances;
12
12
  readonly validationState: AncestorNodeValidationState;
@@ -1,13 +1,13 @@
1
1
  import { RepeatRangeNodeAppearances } from '../../client/repeat/BaseRepeatRangeNode.ts';
2
2
  import { RepeatRangeUncontrolledNode } from '../../client/repeat/RepeatRangeUncontrolledNode.ts';
3
3
  import { AncestorNodeValidationState } from '../../client/validation.ts';
4
+ import { XFormsXPathNodeRange } from '../../integration/xpath/adapter/XFormsXPathNode.ts';
4
5
  import { UncontrolledRepeatRangeDefinition } from '../../parse/model/RepeatRangeDefinition.ts';
5
6
  import { GeneralParentNode } from '../hierarchy.ts';
6
7
  import { EvaluationContext } from '../internal-api/EvaluationContext.ts';
7
- import { SubscribableDependency } from '../internal-api/SubscribableDependency.ts';
8
8
  import { Root } from '../Root.ts';
9
9
  import { BaseRepeatRange } from './BaseRepeatRange.ts';
10
- export declare class RepeatRangeUncontrolled extends BaseRepeatRange<UncontrolledRepeatRangeDefinition> implements RepeatRangeUncontrolledNode, EvaluationContext, SubscribableDependency {
10
+ export declare class RepeatRangeUncontrolled extends BaseRepeatRange<UncontrolledRepeatRangeDefinition> implements RepeatRangeUncontrolledNode, XFormsXPathNodeRange, EvaluationContext {
11
11
  readonly nodeType = "repeat-range:uncontrolled";
12
12
  readonly appearances: RepeatRangeNodeAppearances;
13
13
  readonly validationState: AncestorNodeValidationState;
@@ -1,5 +1,5 @@
1
- import { FetchResource, FetchResourceResponse } from '../client/EngineConfig.ts';
2
1
  import { FormResource } from '../client/index.ts';
2
+ import { FetchResource, FetchResourceResponse } from '../client/resources.ts';
3
3
  export type { FetchResource, FetchResourceResponse, FormResource };
4
4
  export interface ResourceOptions {
5
5
  readonly fetchResource: FetchResource;
@@ -3,7 +3,7 @@ export declare class TextRange<Role extends TextRole, Origin extends TextOrigin>
3
3
  readonly origin: Origin;
4
4
  readonly role: Role;
5
5
  protected readonly chunks: readonly TextChunk[];
6
- [Symbol.iterator](): Generator<TextChunk, void, undefined>;
6
+ [Symbol.iterator](): Generator<TextChunk, void, unknown>;
7
7
  get formatted(): Record<PropertyKey, unknown>;
8
8
  get asString(): string;
9
9
  constructor(origin: Origin, role: Role, chunks: readonly TextChunk[]);
@@ -1,4 +1,6 @@
1
1
  import { UnsupportedControl } from '../abstract/UnsupportedControl.ts';
2
- export declare class UploadControl extends UnsupportedControl<'upload'> {
2
+ import { ValueContext } from '../internal-api/ValueContext.ts';
3
+ export declare class UploadControl extends UnsupportedControl<'upload'> implements ValueContext<unknown> {
3
4
  readonly nodeType = "upload";
5
+ readonly contextNode: this;
4
6
  }
@@ -0,0 +1,14 @@
1
+ import { XFormsItextTranslationMap, XFormsSecondaryInstanceMap, XFormsXPathEvaluator } from '@getodk/xpath';
2
+ import { PrimaryInstance } from '../../instance/PrimaryInstance.ts';
3
+ import { ItextTranslationRootDefinition } from '../../parse/model/ItextTranslation/ItextTranslationRootDefinition.ts';
4
+ import { SecondaryInstanceRootDefinition } from '../../parse/model/SecondaryInstance/SecondaryInstanceRootDefinition.ts';
5
+ import { EngineXPathNode } from './adapter/kind.ts';
6
+ interface EngineXPathEvaluatorOptions {
7
+ readonly rootNode: PrimaryInstance;
8
+ readonly itextTranslationsByLanguage: XFormsItextTranslationMap<ItextTranslationRootDefinition>;
9
+ readonly secondaryInstancesById: XFormsSecondaryInstanceMap<SecondaryInstanceRootDefinition>;
10
+ }
11
+ export declare class EngineXPathEvaluator extends XFormsXPathEvaluator<EngineXPathNode> {
12
+ constructor(options: EngineXPathEvaluatorOptions);
13
+ }
14
+ export {};
@@ -0,0 +1,71 @@
1
+ import { XPathAttributeKind, XPathCommentKind, XPathDocumentKind, XPathElementKind, XPathTextKind, XPathNodeKindKey } from '@getodk/xpath';
2
+ declare const XFORMS_XPATH_NODE_RANGE_BRAND: unique symbol;
3
+ /**
4
+ * To be used with any engine representation of a "range" of contiguous child
5
+ * nodes (also somewhat analogous to a DOM "fragment"). This mapping is
6
+ * conceptually disjoint, but serves an important purpose:
7
+ *
8
+ * - While such a "range" may increase the hierarchical depth of an
9
+ * engine-internal representation, it **DOES NOT** contribute the same
10
+ * hierarchy in XPath evaluation semantics.
11
+ * - Such a "range" may be treated as a distinct context node for evaluating an
12
+ * expression. This most cleanly maps to XPath's comment semantics in that it
13
+ * allows the "range" to have a clear document position (hierarchically a
14
+ * child of its parent element; sequentially a sibling to that parent's other
15
+ * child nodes).
16
+ *
17
+ * (Note: while this is phrased as an abstract concept, it is intended to
18
+ * correspond directly to the engine's "repeat range" concept. The specific type
19
+ * is not referenced here because they have an inverse relationship in the
20
+ * module/type graph.)
21
+ */
22
+ export type XFormsXPathNodeRangeKind = 'comment' & {
23
+ readonly [XFORMS_XPATH_NODE_RANGE_BRAND]: true;
24
+ };
25
+ export declare const XFORMS_XPATH_NODE_RANGE_KIND: XFormsXPathNodeRangeKind;
26
+ export type XFormsXPathNodeKind = XPathDocumentKind | XFormsXPathNodeRangeKind | XPathElementKind | XPathAttributeKind | XPathTextKind | XPathCommentKind;
27
+ export interface XFormsXPathNode {
28
+ readonly [XPathNodeKindKey]: XFormsXPathNodeKind;
29
+ readonly rootDocument: XFormsXPathDocument;
30
+ readonly root: XFormsXPathElement;
31
+ getXPathChildNodes(this: XFormsXPathNode): readonly XFormsXPathDescendantNode[];
32
+ getXPathValue(this: XFormsXPathNode): string;
33
+ }
34
+ export interface XFormsXPathDocument extends XFormsXPathNode {
35
+ readonly [XPathNodeKindKey]: XPathDocumentKind;
36
+ }
37
+ export interface XFormsXPathElement extends XFormsXPathNode {
38
+ readonly [XPathNodeKindKey]: XPathElementKind;
39
+ }
40
+ /**
41
+ * @see {@link XFormsXPathNodeRangeKind}
42
+ */
43
+ export interface XFormsXPathNodeRange extends XFormsXPathNode {
44
+ readonly [XPathNodeKindKey]: XFormsXPathNodeRangeKind;
45
+ }
46
+ export interface XFormsXPathAttribute extends XFormsXPathNode {
47
+ readonly [XPathNodeKindKey]: XPathAttributeKind;
48
+ }
49
+ export interface XFormsXPathText extends XFormsXPathNode {
50
+ readonly [XPathNodeKindKey]: XPathTextKind;
51
+ }
52
+ export interface XFormsXPathComment extends XFormsXPathNode {
53
+ readonly [XPathNodeKindKey]: XPathCommentKind;
54
+ }
55
+ export type XPathNamedNodeKind = XPathElementKind | XPathAttributeKind;
56
+ export interface XFormsXPathNamedNode extends XFormsXPathNode {
57
+ readonly [XPathNodeKindKey]: XPathNamedNodeKind;
58
+ }
59
+ export type XFormsXPathDescendantNodeKind = XFormsXPathNodeRangeKind | XPathElementKind | XPathTextKind | XPathCommentKind;
60
+ export interface XFormsXPathDescendantNode extends XFormsXPathNode {
61
+ readonly [XPathNodeKindKey]: XFormsXPathDescendantNodeKind;
62
+ }
63
+ export type XFormsXPathPrimaryInstanceNodeKind = XPathDocumentKind | XFormsXPathNodeRangeKind | XPathElementKind | XPathTextKind;
64
+ export interface XFormsXPathPrimaryInstanceNode extends XFormsXPathNode {
65
+ readonly [XPathNodeKindKey]: XFormsXPathPrimaryInstanceNodeKind;
66
+ }
67
+ export type XFormsXPathPrimaryInstanceDescendantNodeKind = XFormsXPathNodeRangeKind | XPathElementKind | XPathTextKind;
68
+ export interface XFormsXPathPrimaryInstanceDescendantNode extends XFormsXPathNode {
69
+ readonly [XPathNodeKindKey]: XFormsXPathPrimaryInstanceDescendantNodeKind;
70
+ }
71
+ export {};
@@ -0,0 +1,5 @@
1
+ import { XPathDOMAdapter } from '@getodk/xpath';
2
+ import { EngineXPathNode } from './kind.ts';
3
+ export interface EngineDOMAdapter extends XPathDOMAdapter<EngineXPathNode> {
4
+ }
5
+ export declare const engineDOMAdapter: EngineDOMAdapter;
@@ -0,0 +1,32 @@
1
+ import { XPathNodeKind } from '@getodk/xpath';
2
+ import { AnyChildNode, AnyNode, AnyParentNode, AnyValueNode } from '../../../instance/hierarchy.ts';
3
+ import { ValueContext } from '../../../instance/internal-api/ValueContext.ts';
4
+ import { PrimaryInstance } from '../../../instance/PrimaryInstance.ts';
5
+ import { ItextTranslationDefinition } from '../../../parse/model/ItextTranslation/ItextTranslationDefinition.ts';
6
+ import { ItextTranslationRootDefinition } from '../../../parse/model/ItextTranslation/ItextTranslationRootDefinition.ts';
7
+ import { SecondaryInstanceDefinition } from '../../../parse/model/SecondaryInstance/SecondaryInstanceDefinition.ts';
8
+ import { SecondaryInstanceRootDefinition } from '../../../parse/model/SecondaryInstance/SecondaryInstanceRootDefinition.ts';
9
+ import { StaticAttribute } from '../static-dom/StaticAttribute.ts';
10
+ import { StaticDocument } from '../static-dom/StaticDocument.ts';
11
+ import { StaticElement } from '../static-dom/StaticElement.ts';
12
+ import { StaticText } from '../static-dom/StaticText.ts';
13
+ import { XFormsXPathComment, XFormsXPathDocument, XFormsXPathElement, XFormsXPathPrimaryInstanceNode } from './XFormsXPathNode.ts';
14
+ export type PrimaryInstanceXPathNode = Extract<AnyNode, XFormsXPathPrimaryInstanceNode>;
15
+ export type PrimaryInstanceXPathElement = Extract<AnyChildNode, XFormsXPathElement>;
16
+ export type PrimaryInstanceXPathComment = Extract<AnyChildNode, XFormsXPathComment>;
17
+ export type PrimaryInstanceXPathChildNode = PrimaryInstanceXPathElement | PrimaryInstanceXPathComment;
18
+ export type PrimaryInstanceXPathValueElement<Value> = AnyValueNode & ValueContext<Value> & XFormsXPathElement;
19
+ export type EngineXPathDocument = PrimaryInstance | ItextTranslationDefinition | SecondaryInstanceDefinition | StaticDocument;
20
+ export type EngineXPathElement = PrimaryInstanceXPathElement | ItextTranslationRootDefinition | SecondaryInstanceRootDefinition | StaticElement;
21
+ export type EngineXPathComment = PrimaryInstanceXPathComment;
22
+ export type EngineXPathAttribute = StaticAttribute;
23
+ export type EngineXPathText = StaticText;
24
+ export type XFormsXPathChildNode = EngineXPathElement | EngineXPathText | EngineXPathComment;
25
+ type XPathAdapterParentNode = XFormsXPathDocument | XFormsXPathElement;
26
+ type PrimaryInstanceXPathParentNode = Extract<AnyParentNode, XPathAdapterParentNode>;
27
+ export type EngineXPathParentNode = PrimaryInstanceXPathParentNode | ItextTranslationDefinition | SecondaryInstanceDefinition | ItextTranslationRootDefinition | SecondaryInstanceRootDefinition | StaticDocument | StaticElement;
28
+ export type EngineXPathNode = EngineXPathDocument | EngineXPathElement | EngineXPathAttribute | EngineXPathText | EngineXPathComment;
29
+ export declare const isEngineXPathNode: (value: unknown) => value is EngineXPathNode;
30
+ export declare const getEngineXPathNodeKind: (node: EngineXPathNode) => XPathNodeKind;
31
+ export declare const isEngineXPathElement: (node: EngineXPathNode) => node is EngineXPathElement;
32
+ export {};
@@ -0,0 +1,6 @@
1
+ import { EngineXPathNode } from './kind.ts';
2
+ export declare const getEngineXPathNodeNamespaceURI: (node: EngineXPathNode) => string | null;
3
+ export declare const getEngineXPathNodeQualifiedName: (node: EngineXPathNode) => string;
4
+ export declare const getEngineXPathNodeLocalName: (node: EngineXPathNode) => string;
5
+ export declare const getEngineProcessingInstructionName: () => never;
6
+ export declare const resolveEngineXPathNodeNamespaceURI: (node: EngineXPathNode, prefix: string | null) => string | null;
@@ -0,0 +1,26 @@
1
+ import { EngineXPathAttribute, EngineXPathDocument, EngineXPathElement, EngineXPathNode, EngineXPathParentNode, XFormsXPathChildNode } from './kind.ts';
2
+ export declare const getContainingEngineXPathDocument: (node: EngineXPathNode) => EngineXPathDocument;
3
+ export declare const getEngineXPathAttributes: (node: EngineXPathNode) => Iterable<EngineXPathAttribute>;
4
+ /**
5
+ * @todo We've now laid most of the groundwork necessary to implement this
6
+ * properly. At time of writing it has still been deferred because:
7
+ *
8
+ * 1. The scope of changes enabling it is already a fairly large yak shave.
9
+ * 2. It is only used to support XPath LocationPath Steps whose AxisName is
10
+ * `namespace`. If we _ever_ support this, it would probably be for extremely
11
+ * niche use cases!
12
+ *
13
+ * @todo Since we've consciously deferred implementing this (twice now!), should
14
+ * it throw? It might be nice to be alerted if the assumptions in point 2 above
15
+ * are somehow wrong (or become wrong).
16
+ */
17
+ export declare const getNamespaceDeclarations: () => Iterable<never>;
18
+ export declare const getParentNode: (node: EngineXPathNode) => EngineXPathParentNode | null;
19
+ export declare const getChildNodes: (node: EngineXPathNode) => readonly XFormsXPathChildNode[];
20
+ export declare const getChildElements: (node: EngineXPathNode) => readonly EngineXPathElement[];
21
+ export declare const getPreviousSiblingNode: (node: EngineXPathNode) => XFormsXPathChildNode | null;
22
+ export declare const getPreviousSiblingElement: (node: EngineXPathNode) => EngineXPathElement | null;
23
+ export declare const getNextSiblingNode: (node: EngineXPathNode) => XFormsXPathChildNode | null;
24
+ export declare const getNextSiblingElement: (node: EngineXPathNode) => EngineXPathElement | null;
25
+ export declare const isDescendantNode: (ancestor: EngineXPathNode, other: EngineXPathNode) => boolean;
26
+ export declare const compareDocumentOrder: () => never;
@@ -0,0 +1,2 @@
1
+ import { EngineXPathNode } from './kind.ts';
2
+ export declare const getEngineXPathNodeValue: (node: EngineXPathNode) => string;
@@ -0,0 +1,26 @@
1
+ import { XPathNodeKindKey } from '@getodk/xpath';
2
+ import { QualifiedName } from '../../../lib/names/QualifiedName.ts';
3
+ import { XFormsXPathAttribute } from '../adapter/XFormsXPathNode.ts';
4
+ import { StaticDocument } from './StaticDocument.ts';
5
+ import { StaticElement } from './StaticElement.ts';
6
+ import { StaticNode } from './StaticNode.ts';
7
+ interface StaticAttributeOptions {
8
+ readonly namespaceURI: string | null;
9
+ readonly prefix?: string | null;
10
+ readonly localName: string;
11
+ readonly value: string;
12
+ }
13
+ export declare class StaticAttribute extends StaticNode<'attribute'> implements XFormsXPathAttribute {
14
+ readonly parent: StaticElement;
15
+ readonly [XPathNodeKindKey] = "attribute";
16
+ readonly nodeType = "static-attribute";
17
+ readonly rootDocument: StaticDocument;
18
+ readonly root: StaticElement;
19
+ readonly qualifiedName: QualifiedName;
20
+ readonly attributes: readonly [];
21
+ readonly children: null;
22
+ readonly value: string;
23
+ constructor(parent: StaticElement, options: StaticAttributeOptions);
24
+ getXPathValue(): string;
25
+ }
26
+ export {};
@@ -0,0 +1,15 @@
1
+ import { XPathNodeKindKey } from '@getodk/xpath';
2
+ import { XFormsXPathDocument } from '../adapter/XFormsXPathNode.ts';
3
+ import { StaticElement } from './StaticElement.ts';
4
+ import { StaticNode } from './StaticNode.ts';
5
+ export type StaticDocumentRootFactory<T extends StaticDocument, Root extends StaticElement> = (staticDocument: T) => Root;
6
+ export declare abstract class StaticDocument<DocumentRoot extends StaticElement = StaticElement> extends StaticNode<'document'> implements XFormsXPathDocument {
7
+ readonly [XPathNodeKindKey] = "document";
8
+ readonly nodeType = "static-document";
9
+ readonly rootDocument: StaticDocument;
10
+ readonly root: DocumentRoot;
11
+ readonly parent: null;
12
+ readonly children: readonly [root: DocumentRoot];
13
+ constructor(rootFactory: StaticDocumentRootFactory<StaticDocument<DocumentRoot>, DocumentRoot>);
14
+ getXPathValue(): string;
15
+ }
@@ -0,0 +1,48 @@
1
+ import { XFORMS_KNOWN_ATTRIBUTE, XFORMS_LOCAL_NAME, XPathNodeKindKey } from '@getodk/xpath';
2
+ import { QualifiedName } from '../../../lib/names/QualifiedName.ts';
3
+ import { XFormsXPathElement } from '../adapter/XFormsXPathNode.ts';
4
+ import { StaticAttribute } from './StaticAttribute.ts';
5
+ import { StaticDocument } from './StaticDocument.ts';
6
+ import { StaticChildNode, StaticParentNode, StaticNode } from './StaticNode.ts';
7
+ export type StaticElementAttributesFactory = (element: StaticElement) => readonly StaticAttribute[];
8
+ export type StaticElementChildNodesFactory = (element: StaticElement) => readonly StaticChildNode[];
9
+ export interface StaticElementOptions {
10
+ readonly namespaceURI: string | null;
11
+ readonly prefix?: string | null;
12
+ readonly localName: string;
13
+ }
14
+ type StaticElementKnownAttributeValue<T extends StaticElement, LocalName extends string> = T extends {
15
+ readonly [XFORMS_KNOWN_ATTRIBUTE]: LocalName;
16
+ } ? string : string | null;
17
+ export declare class StaticElement<Parent extends StaticParentNode = StaticParentNode> extends StaticNode<'element'> implements XFormsXPathElement {
18
+ readonly parent: Parent;
19
+ readonly [XFORMS_LOCAL_NAME]?: string;
20
+ readonly [XFORMS_KNOWN_ATTRIBUTE]?: string;
21
+ readonly [XPathNodeKindKey] = "element";
22
+ readonly nodeType = "static-element";
23
+ readonly rootDocument: StaticDocument;
24
+ readonly root: StaticElement;
25
+ readonly qualifiedName: QualifiedName;
26
+ readonly attributes: readonly StaticAttribute[];
27
+ readonly children: readonly StaticChildNode[];
28
+ readonly value: null;
29
+ constructor(parent: Parent, attributesFactory: StaticElementAttributesFactory, childNodesFactory: StaticElementChildNodesFactory, options: StaticElementOptions);
30
+ /**
31
+ * @todo Generalize this, incorporate into {@link EngineDOMAdapter}
32
+ * @todo Namespaced lookup
33
+ * @todo Optimize: lookup from map and/or caching
34
+ */
35
+ protected getAttributeNode(localName: string): StaticAttribute | null;
36
+ /**
37
+ * @todo Generalize this, incorporate into {@link EngineDOMAdapter}
38
+ * @todo Namespaced lookup
39
+ * @todo Optimize: lookup from map and/or caching (especially asserting known
40
+ * attributes!)
41
+ * @todo As long as this depends on {@link getAttributeNode}, push assertion
42
+ * up. (This was put off because the types are already plenty complex as it
43
+ * is.)
44
+ */
45
+ getAttributeValue<This extends StaticElement, LocalName extends string>(this: This, localName: LocalName): StaticElementKnownAttributeValue<This, LocalName>;
46
+ getXPathValue(): string;
47
+ }
48
+ export {};