@getodk/xforms-engine 0.3.0 → 0.5.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 (429) hide show
  1. package/dist/client/BaseNode.d.ts +15 -5
  2. package/dist/client/BaseValueNode.d.ts +32 -0
  3. package/dist/client/EngineConfig.d.ts +49 -49
  4. package/dist/client/GroupNode.d.ts +2 -3
  5. package/dist/client/InputNode.d.ts +53 -0
  6. package/dist/client/ModelValueNode.d.ts +13 -9
  7. package/dist/client/NodeAppearances.d.ts +1 -2
  8. package/dist/client/NoteNode.d.ts +3 -4
  9. package/dist/client/RootNode.d.ts +36 -10
  10. package/dist/client/SelectNode.d.ts +4 -5
  11. package/dist/client/SubtreeNode.d.ts +1 -2
  12. package/dist/client/TextRange.d.ts +3 -4
  13. package/dist/client/TriggerNode.d.ts +25 -0
  14. package/dist/client/ValueType.d.ts +3 -0
  15. package/dist/client/constants.d.ts +50 -1
  16. package/dist/client/hierarchy.d.ts +9 -5
  17. package/dist/client/identity.d.ts +14 -0
  18. package/dist/client/index.d.ts +0 -1
  19. package/dist/client/node-types.d.ts +3 -1
  20. package/dist/client/repeat/BaseRepeatRangeNode.d.ts +1 -2
  21. package/dist/client/repeat/RepeatInstanceNode.d.ts +2 -3
  22. package/dist/client/repeat/RepeatRangeControlledNode.d.ts +1 -2
  23. package/dist/client/repeat/RepeatRangeUncontrolledNode.d.ts +1 -2
  24. package/dist/client/resources.d.ts +93 -0
  25. package/dist/client/submission/SubmissionData.d.ts +7 -0
  26. package/dist/client/submission/SubmissionDefinition.d.ts +14 -0
  27. package/dist/client/submission/SubmissionInstanceFile.d.ts +6 -0
  28. package/dist/client/submission/SubmissionOptions.d.ts +23 -0
  29. package/dist/client/submission/SubmissionResult.d.ts +91 -0
  30. package/dist/client/submission/SubmissionState.d.ts +12 -0
  31. package/dist/client/unsupported/RangeNode.d.ts +9 -0
  32. package/dist/client/unsupported/RankNode.d.ts +9 -0
  33. package/dist/client/unsupported/UnsupportedControlNode.d.ts +32 -0
  34. package/dist/client/unsupported/UploadNode.d.ts +9 -0
  35. package/dist/client/validation.d.ts +2 -3
  36. package/dist/error/ErrorProductionDesignPendingError.d.ts +7 -0
  37. package/dist/error/ValueTypeInvariantError.d.ts +17 -0
  38. package/dist/error/XPathFunctionalityError.d.ts +14 -0
  39. package/dist/error/XPathFunctionalityNotSupportedError.d.ts +7 -0
  40. package/dist/error/XPathFunctionalityPendingError.d.ts +7 -0
  41. package/dist/index.d.ts +16 -4
  42. package/dist/index.js +8559 -4700
  43. package/dist/index.js.map +1 -1
  44. package/dist/instance/Group.d.ts +9 -5
  45. package/dist/instance/InputControl.d.ts +36 -0
  46. package/dist/instance/ModelValue.d.ts +16 -27
  47. package/dist/instance/Note.d.ts +11 -5
  48. package/dist/instance/PrimaryInstance.d.ts +84 -0
  49. package/dist/instance/Root.d.ts +31 -28
  50. package/dist/instance/SelectField.d.ts +13 -6
  51. package/dist/instance/Subtree.d.ts +10 -6
  52. package/dist/instance/TriggerControl.d.ts +47 -0
  53. package/dist/instance/abstract/DescendantNode.d.ts +33 -26
  54. package/dist/instance/abstract/InstanceNode.d.ts +50 -31
  55. package/dist/instance/abstract/UnsupportedControl.d.ts +53 -0
  56. package/dist/instance/abstract/ValueNode.d.ts +48 -0
  57. package/dist/instance/children.d.ts +0 -1
  58. package/dist/instance/hierarchy.d.ts +13 -8
  59. package/dist/instance/identity.d.ts +2 -7
  60. package/dist/instance/index.d.ts +0 -1
  61. package/dist/instance/internal-api/EvaluationContext.d.ts +53 -13
  62. package/dist/instance/internal-api/InstanceConfig.d.ts +8 -3
  63. package/dist/instance/internal-api/InstanceValueContext.d.ts +20 -0
  64. package/dist/instance/internal-api/PrimaryInstanceDocument.d.ts +36 -0
  65. package/dist/instance/internal-api/TranslationContext.d.ts +3 -3
  66. package/dist/instance/internal-api/ValidationContext.d.ts +12 -6
  67. package/dist/instance/internal-api/ValueContext.d.ts +5 -5
  68. package/dist/instance/internal-api/submission/ClientReactiveSubmittableInstance.d.ts +14 -0
  69. package/dist/instance/internal-api/submission/ClientReactiveSubmittableLeafNode.d.ts +31 -0
  70. package/dist/instance/internal-api/submission/ClientReactiveSubmittableParentNode.d.ts +18 -0
  71. package/dist/instance/internal-api/submission/ClientReactiveSubmittableValueNode.d.ts +17 -0
  72. package/dist/instance/repeat/BaseRepeatRange.d.ts +40 -85
  73. package/dist/instance/repeat/RepeatInstance.d.ts +11 -30
  74. package/dist/instance/repeat/RepeatRangeControlled.d.ts +3 -4
  75. package/dist/instance/repeat/RepeatRangeUncontrolled.d.ts +3 -4
  76. package/dist/instance/resource.d.ts +1 -2
  77. package/dist/instance/text/TextChunk.d.ts +0 -1
  78. package/dist/instance/text/TextRange.d.ts +1 -2
  79. package/dist/instance/unsupported/RangeControl.d.ts +6 -0
  80. package/dist/instance/unsupported/RankControl.d.ts +6 -0
  81. package/dist/instance/unsupported/UploadControl.d.ts +6 -0
  82. package/dist/integration/xpath/EngineXPathEvaluator.d.ts +14 -0
  83. package/dist/integration/xpath/adapter/XFormsXPathNode.d.ts +71 -0
  84. package/dist/integration/xpath/adapter/engineDOMAdapter.d.ts +5 -0
  85. package/dist/integration/xpath/adapter/kind.d.ts +32 -0
  86. package/dist/integration/xpath/adapter/names.d.ts +16 -0
  87. package/dist/integration/xpath/adapter/traversal.d.ts +25 -0
  88. package/dist/integration/xpath/adapter/values.d.ts +2 -0
  89. package/dist/integration/xpath/static-dom/StaticAttribute.d.ts +19 -0
  90. package/dist/integration/xpath/static-dom/StaticDocument.d.ts +16 -0
  91. package/dist/integration/xpath/static-dom/StaticElement.d.ts +40 -0
  92. package/dist/integration/xpath/static-dom/StaticNamedNode.d.ts +17 -0
  93. package/dist/integration/xpath/static-dom/StaticNode.d.ts +33 -0
  94. package/dist/integration/xpath/static-dom/StaticText.d.ts +16 -0
  95. package/dist/lib/TokenListParser.d.ts +3 -3
  96. package/dist/lib/client-reactivity/submission/createInstanceSubmissionState.d.ts +3 -0
  97. package/dist/lib/client-reactivity/submission/createLeafNodeSubmissionState.d.ts +3 -0
  98. package/dist/lib/client-reactivity/submission/createNodeRangeSubmissionState.d.ts +4 -0
  99. package/dist/lib/client-reactivity/submission/createParentNodeSubmissionState.d.ts +4 -0
  100. package/dist/lib/client-reactivity/submission/createValueNodeSubmissionState.d.ts +3 -0
  101. package/dist/lib/client-reactivity/submission/prepareSubmission.d.ts +8 -0
  102. package/dist/lib/codecs/DecimalValueCodec.d.ts +6 -0
  103. package/dist/lib/codecs/IntValueCodec.d.ts +6 -0
  104. package/dist/lib/codecs/StringValueCodec.d.ts +4 -0
  105. package/dist/lib/codecs/ValueCodec.d.ts +30 -0
  106. package/dist/lib/codecs/ValueTypePlaceholderCodec.d.ts +12 -0
  107. package/dist/lib/codecs/getSharedValueCodec.d.ts +47 -0
  108. package/dist/lib/dom/query.d.ts +4 -2
  109. package/dist/lib/reactivity/createChildrenState.d.ts +7 -6
  110. package/dist/lib/reactivity/createComputedExpression.d.ts +19 -7
  111. package/dist/lib/reactivity/createInstanceValueState.d.ts +40 -0
  112. package/dist/lib/reactivity/createNoteReadonlyThunk.d.ts +2 -3
  113. package/dist/lib/reactivity/createSelectItems.d.ts +0 -1
  114. package/dist/lib/reactivity/createTranslationState.d.ts +19 -0
  115. package/dist/lib/reactivity/createValueState.d.ts +6 -11
  116. package/dist/lib/reactivity/materializeCurrentStateChildren.d.ts +4 -5
  117. package/dist/lib/reactivity/node-state/createClientState.d.ts +0 -1
  118. package/dist/lib/reactivity/node-state/createCurrentState.d.ts +0 -1
  119. package/dist/lib/reactivity/node-state/createEngineState.d.ts +0 -1
  120. package/dist/lib/reactivity/node-state/createSharedNodeState.d.ts +0 -1
  121. package/dist/lib/reactivity/node-state/createSpecifiedPropertyDescriptor.d.ts +0 -1
  122. package/dist/lib/reactivity/node-state/createSpecifiedState.d.ts +0 -1
  123. package/dist/lib/reactivity/node-state/representations.d.ts +0 -1
  124. package/dist/lib/reactivity/scope.d.ts +0 -1
  125. package/dist/lib/reactivity/text/createFieldHint.d.ts +1 -2
  126. package/dist/lib/reactivity/text/createNodeLabel.d.ts +1 -2
  127. package/dist/lib/reactivity/text/createNoteText.d.ts +1 -2
  128. package/dist/lib/reactivity/text/createTextRange.d.ts +0 -1
  129. package/dist/lib/reactivity/types.d.ts +0 -1
  130. package/dist/lib/reactivity/validation/createAggregatedViolations.d.ts +0 -1
  131. package/dist/lib/reactivity/validation/createValidation.d.ts +0 -1
  132. package/dist/lib/xml-serialization.d.ts +41 -0
  133. package/dist/parse/XFormDOM.d.ts +42 -0
  134. package/dist/{XFormDefinition.d.ts → parse/XFormDefinition.d.ts} +3 -5
  135. package/dist/parse/attachments/FormAttachmentResource.d.ts +27 -0
  136. package/dist/{body → parse/body}/BodyDefinition.d.ts +16 -11
  137. package/dist/{body → parse/body}/BodyElementDefinition.d.ts +7 -7
  138. package/dist/{body → parse/body}/RepeatElementDefinition.d.ts +3 -4
  139. package/dist/{body → parse/body}/UnsupportedBodyElementDefinition.d.ts +0 -1
  140. package/dist/parse/body/appearance/inputAppearanceParser.d.ts +3 -0
  141. package/dist/{body → parse/body}/appearance/selectAppearanceParser.d.ts +1 -2
  142. package/dist/{body → parse/body}/appearance/structureElementAppearanceParser.d.ts +1 -2
  143. package/dist/parse/body/appearance/unknownAppearanceParser.d.ts +3 -0
  144. package/dist/{body → parse/body}/control/ControlDefinition.d.ts +3 -4
  145. package/dist/{body/control/InputDefinition.d.ts → parse/body/control/InputControlDefinition.d.ts} +2 -3
  146. package/dist/parse/body/control/RangeControlDefinition.d.ts +11 -0
  147. package/dist/parse/body/control/RankControlDefinition.d.ts +11 -0
  148. package/dist/parse/body/control/TriggerControlDefinition.d.ts +11 -0
  149. package/dist/parse/body/control/UploadControlDefinition.d.ts +11 -0
  150. package/dist/{body → parse/body}/control/select/ItemDefinition.d.ts +2 -3
  151. package/dist/{body → parse/body}/control/select/ItemsetDefinition.d.ts +4 -5
  152. package/dist/{body → parse/body}/control/select/ItemsetNodesetContext.d.ts +1 -4
  153. package/dist/{body → parse/body}/control/select/SelectDefinition.d.ts +3 -12
  154. package/dist/{body → parse/body}/group/BaseGroupDefinition.d.ts +3 -5
  155. package/dist/{body → parse/body}/group/LogicalGroupDefinition.d.ts +0 -1
  156. package/dist/{body → parse/body}/group/PresentationGroupDefinition.d.ts +1 -2
  157. package/dist/{body → parse/body}/group/StructuralGroupDefinition.d.ts +0 -1
  158. package/dist/{model/BindComputation.d.ts → parse/expression/BindComputationExpression.d.ts} +5 -6
  159. package/dist/{body/control/select → parse/expression}/ItemsetNodesetExpression.d.ts +2 -3
  160. package/dist/{body/control/select → parse/expression}/ItemsetValueExpression.d.ts +2 -3
  161. package/dist/parse/expression/RepeatCountControlExpression.d.ts +2 -3
  162. package/dist/parse/expression/TextLiteralExpression.d.ts +9 -0
  163. package/dist/parse/expression/TextOutputExpression.d.ts +7 -0
  164. package/dist/parse/expression/TextReferenceExpression.d.ts +7 -0
  165. package/dist/parse/expression/TextTranslationExpression.d.ts +8 -0
  166. package/dist/parse/expression/abstract/DependencyContext.d.ts +7 -0
  167. package/dist/{expression → parse/expression/abstract}/DependentExpression.d.ts +4 -6
  168. package/dist/parse/expression/abstract/TextChunkExpression.d.ts +17 -0
  169. package/dist/parse/model/BindDefinition.d.ts +38 -0
  170. package/dist/parse/model/BindTypeDefinition.d.ts +20 -0
  171. package/dist/{model → parse/model}/DescendentNodeDefinition.d.ts +0 -2
  172. package/dist/parse/model/FormSubmissionDefinition.d.ts +8 -0
  173. package/dist/parse/model/ItextTranslation/ItextTranslationDefinition.d.ts +4 -0
  174. package/dist/parse/model/ItextTranslation/ItextTranslationRootDefinition.d.ts +8 -0
  175. package/dist/parse/model/ItextTranslation/ItextTranslationsDefinition.d.ts +8 -0
  176. package/dist/{model → parse/model}/LeafNodeDefinition.d.ts +4 -3
  177. package/dist/{model → parse/model}/ModelBindMap.d.ts +1 -2
  178. package/dist/{model → parse/model}/ModelDefinition.d.ts +3 -2
  179. package/dist/{model → parse/model}/NodeDefinition.d.ts +0 -2
  180. package/dist/parse/{NoteNodeDefinition.d.ts → model/NoteNodeDefinition.d.ts} +12 -13
  181. package/dist/{model → parse/model}/RepeatInstanceDefinition.d.ts +1 -2
  182. package/dist/{model → parse/model}/RepeatRangeDefinition.d.ts +2 -3
  183. package/dist/{model → parse/model}/RepeatTemplateDefinition.d.ts +2 -3
  184. package/dist/{model → parse/model}/RootDefinition.d.ts +5 -5
  185. package/dist/parse/model/SecondaryInstance/SecondaryInstanceDefinition.d.ts +4 -0
  186. package/dist/parse/model/SecondaryInstance/SecondaryInstanceRootDefinition.d.ts +7 -0
  187. package/dist/parse/model/SecondaryInstance/SecondaryInstancesDefinition.d.ts +13 -0
  188. package/dist/parse/model/SecondaryInstance/sources/BlankSecondaryInstanceSource.d.ts +14 -0
  189. package/dist/parse/model/SecondaryInstance/sources/CSVExternalSecondaryInstance.d.ts +22 -0
  190. package/dist/parse/model/SecondaryInstance/sources/ExternalSecondaryInstanceResource.d.ts +23 -0
  191. package/dist/parse/model/SecondaryInstance/sources/ExternalSecondaryInstanceSource.d.ts +9 -0
  192. package/dist/parse/model/SecondaryInstance/sources/GeoJSONExternalSecondaryInstance.d.ts +5 -0
  193. package/dist/parse/model/SecondaryInstance/sources/InternalSecondaryInstanceSource.d.ts +7 -0
  194. package/dist/parse/model/SecondaryInstance/sources/SecondaryInstanceSource.d.ts +13 -0
  195. package/dist/parse/model/SecondaryInstance/sources/XMLExternalSecondaryInstanceSource.d.ts +12 -0
  196. package/dist/{model → parse/model}/SubtreeDefinition.d.ts +1 -2
  197. package/dist/parse/shared/parseStaticDocumentFromDOMSubtree.d.ts +24 -0
  198. package/dist/parse/text/HintDefinition.d.ts +2 -3
  199. package/dist/parse/text/ItemLabelDefinition.d.ts +2 -3
  200. package/dist/parse/text/ItemsetLabelDefinition.d.ts +3 -4
  201. package/dist/parse/text/LabelDefinition.d.ts +5 -6
  202. package/dist/parse/text/MessageDefinition.d.ts +4 -5
  203. package/dist/parse/text/abstract/TextElementDefinition.d.ts +8 -9
  204. package/dist/parse/text/abstract/TextRangeDefinition.d.ts +4 -7
  205. package/dist/parse/xpath/path-resolution.d.ts +0 -1
  206. package/dist/parse/xpath/predicate-analysis.d.ts +0 -1
  207. package/dist/parse/xpath/reference-parsing.d.ts +0 -1
  208. package/dist/parse/xpath/semantic-analysis.d.ts +5 -1
  209. package/dist/parse/xpath/syntax-traversal.d.ts +0 -1
  210. package/dist/solid.js +8398 -4543
  211. package/dist/solid.js.map +1 -1
  212. package/package.json +14 -12
  213. package/src/client/BaseNode.ts +17 -7
  214. package/src/client/BaseValueNode.ts +35 -0
  215. package/src/client/EngineConfig.ts +52 -51
  216. package/src/client/GroupNode.ts +2 -2
  217. package/src/client/InputNode.ts +77 -0
  218. package/src/client/ModelValueNode.ts +31 -8
  219. package/src/client/NodeAppearances.ts +1 -1
  220. package/src/client/NoteNode.ts +3 -3
  221. package/src/client/RootNode.ts +39 -9
  222. package/src/client/SelectNode.ts +5 -5
  223. package/src/client/SubtreeNode.ts +1 -1
  224. package/src/client/TextRange.ts +4 -5
  225. package/src/client/TriggerNode.ts +29 -0
  226. package/src/client/ValueType.ts +4 -0
  227. package/src/client/constants.ts +67 -0
  228. package/src/client/hierarchy.ts +16 -4
  229. package/src/client/identity.ts +16 -0
  230. package/src/client/node-types.ts +19 -5
  231. package/src/client/repeat/BaseRepeatRangeNode.ts +1 -1
  232. package/src/client/repeat/RepeatInstanceNode.ts +2 -2
  233. package/src/client/repeat/RepeatRangeControlledNode.ts +1 -1
  234. package/src/client/repeat/RepeatRangeUncontrolledNode.ts +1 -1
  235. package/src/client/resources.ts +118 -0
  236. package/src/client/submission/SubmissionData.ts +12 -0
  237. package/src/client/submission/SubmissionDefinition.ts +16 -0
  238. package/src/client/submission/SubmissionInstanceFile.ts +9 -0
  239. package/src/client/submission/SubmissionOptions.ts +28 -0
  240. package/src/client/submission/SubmissionResult.ts +124 -0
  241. package/src/client/submission/SubmissionState.ts +14 -0
  242. package/src/client/unsupported/RangeNode.ts +14 -0
  243. package/src/client/unsupported/RankNode.ts +14 -0
  244. package/src/client/unsupported/UnsupportedControlNode.ts +40 -0
  245. package/src/client/unsupported/UploadNode.ts +14 -0
  246. package/src/client/validation.ts +2 -2
  247. package/src/error/ErrorProductionDesignPendingError.ts +6 -0
  248. package/src/error/ValueTypeInvariantError.ts +22 -0
  249. package/src/error/XPathFunctionalityError.ts +26 -0
  250. package/src/error/XPathFunctionalityNotSupportedError.ts +18 -0
  251. package/src/error/XPathFunctionalityPendingError.ts +18 -0
  252. package/src/index.ts +16 -2
  253. package/src/instance/Group.ts +17 -5
  254. package/src/instance/InputControl.ts +119 -0
  255. package/src/instance/ModelValue.ts +47 -54
  256. package/src/instance/Note.ts +26 -10
  257. package/src/instance/PrimaryInstance.ts +244 -0
  258. package/src/instance/Root.ts +64 -132
  259. package/src/instance/SelectField.ts +62 -25
  260. package/src/instance/Subtree.ts +19 -7
  261. package/src/instance/{StringField.ts → TriggerControl.ts} +61 -30
  262. package/src/instance/abstract/DescendantNode.ts +92 -47
  263. package/src/instance/abstract/InstanceNode.ts +104 -98
  264. package/src/instance/abstract/UnsupportedControl.ts +174 -0
  265. package/src/instance/abstract/ValueNode.ts +127 -0
  266. package/src/instance/children.ts +83 -14
  267. package/src/instance/hierarchy.ts +36 -14
  268. package/src/instance/identity.ts +3 -9
  269. package/src/instance/index.ts +26 -8
  270. package/src/instance/internal-api/EvaluationContext.ts +61 -14
  271. package/src/instance/internal-api/InstanceConfig.ts +9 -2
  272. package/src/instance/internal-api/InstanceValueContext.ts +24 -0
  273. package/src/instance/internal-api/PrimaryInstanceDocument.ts +53 -0
  274. package/src/instance/internal-api/TranslationContext.ts +3 -2
  275. package/src/instance/internal-api/ValidationContext.ts +13 -5
  276. package/src/instance/internal-api/ValueContext.ts +5 -4
  277. package/src/instance/internal-api/submission/ClientReactiveSubmittableInstance.ts +20 -0
  278. package/src/instance/internal-api/submission/ClientReactiveSubmittableLeafNode.ts +42 -0
  279. package/src/instance/internal-api/submission/ClientReactiveSubmittableParentNode.ts +25 -0
  280. package/src/instance/internal-api/submission/ClientReactiveSubmittableValueNode.ts +23 -0
  281. package/src/instance/repeat/BaseRepeatRange.ts +51 -132
  282. package/src/instance/repeat/RepeatInstance.ts +20 -46
  283. package/src/instance/repeat/RepeatRangeControlled.ts +6 -6
  284. package/src/instance/repeat/RepeatRangeUncontrolled.ts +3 -5
  285. package/src/instance/resource.ts +1 -1
  286. package/src/instance/text/TextChunk.ts +1 -1
  287. package/src/instance/unsupported/RangeControl.ts +9 -0
  288. package/src/instance/unsupported/RankControl.ts +9 -0
  289. package/src/instance/unsupported/UploadControl.ts +9 -0
  290. package/src/integration/xpath/EngineXPathEvaluator.ts +22 -0
  291. package/src/integration/xpath/adapter/XFormsXPathNode.ts +126 -0
  292. package/src/integration/xpath/adapter/engineDOMAdapter.ts +57 -0
  293. package/src/integration/xpath/adapter/kind.ts +114 -0
  294. package/src/integration/xpath/adapter/names.ts +99 -0
  295. package/src/integration/xpath/adapter/traversal.ts +228 -0
  296. package/src/integration/xpath/adapter/values.ts +5 -0
  297. package/src/integration/xpath/static-dom/StaticAttribute.ts +33 -0
  298. package/src/integration/xpath/static-dom/StaticDocument.ts +38 -0
  299. package/src/integration/xpath/static-dom/StaticElement.ts +106 -0
  300. package/src/integration/xpath/static-dom/StaticNamedNode.ts +45 -0
  301. package/src/integration/xpath/static-dom/StaticNode.ts +68 -0
  302. package/src/integration/xpath/static-dom/StaticText.ts +28 -0
  303. package/src/lib/TokenListParser.ts +11 -7
  304. package/src/lib/client-reactivity/README.md +0 -0
  305. package/src/lib/client-reactivity/submission/createInstanceSubmissionState.ts +12 -0
  306. package/src/lib/client-reactivity/submission/createLeafNodeSubmissionState.ts +20 -0
  307. package/src/lib/client-reactivity/submission/createNodeRangeSubmissionState.ts +17 -0
  308. package/src/lib/client-reactivity/submission/createParentNodeSubmissionState.ts +22 -0
  309. package/src/lib/client-reactivity/submission/createValueNodeSubmissionState.ts +21 -0
  310. package/src/lib/client-reactivity/submission/prepareSubmission.ts +172 -0
  311. package/src/lib/codecs/DecimalValueCodec.ts +46 -0
  312. package/src/lib/codecs/IntValueCodec.ts +100 -0
  313. package/src/lib/codecs/StringValueCodec.ts +11 -0
  314. package/src/lib/codecs/ValueCodec.ts +106 -0
  315. package/src/lib/codecs/ValueTypePlaceholderCodec.ts +19 -0
  316. package/src/lib/codecs/getSharedValueCodec.ts +77 -0
  317. package/src/lib/dom/query.ts +8 -1
  318. package/src/lib/reactivity/createChildrenState.ts +8 -6
  319. package/src/lib/reactivity/createComputedExpression.ts +59 -36
  320. package/src/lib/reactivity/createInstanceValueState.ts +166 -0
  321. package/src/lib/reactivity/createNoteReadonlyThunk.ts +12 -7
  322. package/src/lib/reactivity/createSelectItems.ts +23 -23
  323. package/src/lib/reactivity/createTranslationState.ts +61 -0
  324. package/src/lib/reactivity/createValueState.ts +64 -122
  325. package/src/lib/reactivity/materializeCurrentStateChildren.ts +7 -7
  326. package/src/lib/reactivity/node-state/createSpecifiedState.ts +1 -1
  327. package/src/lib/reactivity/text/createFieldHint.ts +1 -1
  328. package/src/lib/reactivity/text/createNodeLabel.ts +1 -1
  329. package/src/lib/reactivity/text/createNoteText.ts +1 -1
  330. package/src/lib/reactivity/text/createTextRange.ts +8 -7
  331. package/src/lib/reactivity/validation/createAggregatedViolations.ts +9 -4
  332. package/src/lib/reactivity/validation/createValidation.ts +2 -3
  333. package/src/lib/xml-serialization.ts +96 -0
  334. package/src/{XFormDOM.ts → parse/XFormDOM.ts} +110 -75
  335. package/src/{XFormDefinition.ts → parse/XFormDefinition.ts} +3 -8
  336. package/src/parse/attachments/FormAttachmentResource.ts +40 -0
  337. package/src/{body → parse/body}/BodyDefinition.ts +46 -29
  338. package/src/{body → parse/body}/BodyElementDefinition.ts +12 -6
  339. package/src/{body → parse/body}/RepeatElementDefinition.ts +7 -5
  340. package/src/{body → parse/body}/appearance/inputAppearanceParser.ts +2 -2
  341. package/src/{body → parse/body}/appearance/selectAppearanceParser.ts +1 -1
  342. package/src/{body → parse/body}/appearance/structureElementAppearanceParser.ts +1 -1
  343. package/src/parse/body/appearance/unknownAppearanceParser.ts +5 -0
  344. package/src/{body → parse/body}/control/ControlDefinition.ts +4 -4
  345. package/src/{body/control/InputDefinition.ts → parse/body/control/InputControlDefinition.ts} +3 -5
  346. package/src/parse/body/control/RangeControlDefinition.ts +26 -0
  347. package/src/parse/body/control/RankControlDefinition.ts +27 -0
  348. package/src/parse/body/control/TriggerControlDefinition.ts +26 -0
  349. package/src/parse/body/control/UploadControlDefinition.ts +26 -0
  350. package/src/{body → parse/body}/control/select/ItemDefinition.ts +2 -2
  351. package/src/{body → parse/body}/control/select/ItemsetDefinition.ts +5 -5
  352. package/src/{body → parse/body}/control/select/ItemsetNodesetContext.ts +1 -6
  353. package/src/{body → parse/body}/control/select/SelectDefinition.ts +3 -11
  354. package/src/{body → parse/body}/group/BaseGroupDefinition.ts +11 -22
  355. package/src/{body → parse/body}/group/PresentationGroupDefinition.ts +1 -1
  356. package/src/{model/BindComputation.ts → parse/expression/BindComputationExpression.ts} +8 -8
  357. package/src/{body/control/select → parse/expression}/ItemsetNodesetExpression.ts +2 -2
  358. package/src/{body/control/select → parse/expression}/ItemsetValueExpression.ts +2 -2
  359. package/src/parse/expression/RepeatCountControlExpression.ts +2 -2
  360. package/src/parse/expression/TextLiteralExpression.ts +19 -0
  361. package/src/parse/{text/OutputChunkDefinition.ts → expression/TextOutputExpression.ts} +4 -4
  362. package/src/parse/{text/ReferenceChunkDefinition.ts → expression/TextReferenceExpression.ts} +4 -4
  363. package/src/parse/{text/TranslationChunkDefinition.ts → expression/TextTranslationExpression.ts} +4 -4
  364. package/src/{expression → parse/expression/abstract}/DependencyContext.ts +0 -26
  365. package/src/{expression → parse/expression/abstract}/DependentExpression.ts +5 -16
  366. package/src/parse/expression/abstract/TextChunkExpression.ts +38 -0
  367. package/src/parse/model/BindDefinition.ts +104 -0
  368. package/src/parse/model/BindTypeDefinition.ts +175 -0
  369. package/src/{model → parse/model}/DescendentNodeDefinition.ts +0 -6
  370. package/src/parse/model/FormSubmissionDefinition.ts +44 -0
  371. package/src/parse/model/ItextTranslation/ItextTranslationDefinition.ts +4 -0
  372. package/src/parse/model/ItextTranslation/ItextTranslationRootDefinition.ts +41 -0
  373. package/src/parse/model/ItextTranslation/ItextTranslationsDefinition.ts +31 -0
  374. package/src/{model → parse/model}/LeafNodeDefinition.ts +4 -1
  375. package/src/{model → parse/model}/ModelBindMap.ts +6 -8
  376. package/src/parse/model/ModelDefinition.ts +24 -0
  377. package/src/{model → parse/model}/NodeDefinition.ts +0 -3
  378. package/src/parse/{NoteNodeDefinition.ts → model/NoteNodeDefinition.ts} +12 -12
  379. package/src/{model → parse/model}/RepeatRangeDefinition.ts +1 -1
  380. package/src/{model → parse/model}/RootDefinition.ts +4 -3
  381. package/src/parse/model/SecondaryInstance/SecondaryInstanceDefinition.ts +4 -0
  382. package/src/parse/model/SecondaryInstance/SecondaryInstanceRootDefinition.ts +12 -0
  383. package/src/parse/model/SecondaryInstance/SecondaryInstancesDefinition.ts +102 -0
  384. package/src/parse/model/SecondaryInstance/sources/BlankSecondaryInstanceSource.ts +40 -0
  385. package/src/parse/model/SecondaryInstance/sources/CSVExternalSecondaryInstance.ts +288 -0
  386. package/src/parse/model/SecondaryInstance/sources/ExternalSecondaryInstanceResource.ts +222 -0
  387. package/src/parse/model/SecondaryInstance/sources/ExternalSecondaryInstanceSource.ts +22 -0
  388. package/src/parse/model/SecondaryInstance/sources/GeoJSONExternalSecondaryInstance.ts +414 -0
  389. package/src/parse/model/SecondaryInstance/sources/InternalSecondaryInstanceSource.ts +19 -0
  390. package/src/parse/model/SecondaryInstance/sources/SecondaryInstanceSource.ts +29 -0
  391. package/src/parse/model/SecondaryInstance/sources/XMLExternalSecondaryInstanceSource.ts +32 -0
  392. package/src/parse/shared/parseStaticDocumentFromDOMSubtree.ts +149 -0
  393. package/src/parse/text/HintDefinition.ts +2 -2
  394. package/src/parse/text/ItemLabelDefinition.ts +2 -2
  395. package/src/parse/text/ItemsetLabelDefinition.ts +7 -7
  396. package/src/parse/text/LabelDefinition.ts +5 -5
  397. package/src/parse/text/MessageDefinition.ts +7 -7
  398. package/src/parse/text/abstract/TextElementDefinition.ts +14 -14
  399. package/src/parse/text/abstract/TextRangeDefinition.ts +4 -10
  400. package/src/parse/xpath/semantic-analysis.ts +29 -0
  401. package/dist/XFormDOM.d.ts +0 -32
  402. package/dist/XFormDataType.d.ts +0 -27
  403. package/dist/body/appearance/inputAppearanceParser.d.ts +0 -4
  404. package/dist/client/StringNode.d.ts +0 -47
  405. package/dist/expression/DependencyContext.d.ts +0 -13
  406. package/dist/instance/StringField.d.ts +0 -45
  407. package/dist/instance/internal-api/SubscribableDependency.d.ts +0 -60
  408. package/dist/model/BindDefinition.d.ts +0 -34
  409. package/dist/parse/text/OutputChunkDefinition.d.ts +0 -8
  410. package/dist/parse/text/ReferenceChunkDefinition.d.ts +0 -8
  411. package/dist/parse/text/StaticTextChunkDefinition.d.ts +0 -10
  412. package/dist/parse/text/TranslationChunkDefinition.d.ts +0 -9
  413. package/dist/parse/text/abstract/TextChunkDefinition.d.ts +0 -18
  414. package/src/XFormDataType.ts +0 -64
  415. package/src/client/StringNode.ts +0 -52
  416. package/src/instance/internal-api/SubscribableDependency.ts +0 -61
  417. package/src/model/BindDefinition.ts +0 -106
  418. package/src/model/ModelDefinition.ts +0 -19
  419. package/src/parse/TODO.md +0 -3
  420. package/src/parse/text/StaticTextChunkDefinition.ts +0 -19
  421. package/src/parse/text/abstract/TextChunkDefinition.ts +0 -38
  422. /package/dist/{model → parse/model}/BindElement.d.ts +0 -0
  423. /package/src/{body → parse/body}/UnsupportedBodyElementDefinition.ts +0 -0
  424. /package/src/{body → parse/body}/group/LogicalGroupDefinition.ts +0 -0
  425. /package/src/{body → parse/body}/group/StructuralGroupDefinition.ts +0 -0
  426. /package/src/{model → parse/model}/BindElement.ts +0 -0
  427. /package/src/{model → parse/model}/RepeatInstanceDefinition.ts +0 -0
  428. /package/src/{model → parse/model}/RepeatTemplateDefinition.ts +0 -0
  429. /package/src/{model → parse/model}/SubtreeDefinition.ts +0 -0
@@ -1,23 +1,30 @@
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
- import { AnyNodeDefinition } from '../../model/NodeDefinition.ts';
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';
20
-
24
+ export type EngineInstanceNodeType = ClientInstanceNodeType | 'primary-instance';
25
+ export interface BaseEngineNode extends Omit<BaseNode, 'nodeType'> {
26
+ readonly nodeType: EngineInstanceNodeType;
27
+ }
21
28
  export interface InstanceNodeStateSpec<Value = never> {
22
29
  readonly reference: Accessor<string> | string;
23
30
  readonly readonly: Accessor<boolean> | boolean;
@@ -25,7 +32,7 @@ export interface InstanceNodeStateSpec<Value = never> {
25
32
  readonly required: Accessor<boolean> | boolean;
26
33
  readonly label: Accessor<TextRange<'label'> | null> | null;
27
34
  readonly hint: Accessor<TextRange<'hint'> | null> | null;
28
- readonly children: Accessor<readonly NodeID[]> | null;
35
+ readonly children: Accessor<readonly FormNodeID[]> | null;
29
36
  readonly valueOptions: Accessor<null> | Accessor<readonly unknown[]> | null;
30
37
  readonly value: Signal<Value> | SimpleAtomicState<Value> | null;
31
38
  }
@@ -44,13 +51,17 @@ interface ComputableReferenceNode {
44
51
  type ComputeInstanceNodeReference = <This extends ComputableReferenceNode>(this: This, parent: This['parent'], definition: This['definition']) => string;
45
52
  export interface InstanceNodeOptions {
46
53
  readonly computeReference?: () => string;
54
+ readonly scope?: ReactiveScope;
47
55
  }
48
- export declare abstract class InstanceNode<Definition extends AnyNodeDefinition, Spec extends InstanceNodeStateSpec<any>, Child extends AnyChildNode | null = null> implements BaseNode, EvaluationContext, SubscribableDependency {
56
+ 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 {
49
57
  readonly engineConfig: InstanceConfig;
50
- readonly parent: AnyParentNode | null;
58
+ readonly parent: Parent;
51
59
  readonly definition: Definition;
52
60
  protected abstract readonly state: SharedNodeState<Spec>;
53
61
  protected abstract readonly engineState: EngineState<Spec>;
62
+ abstract readonly [XPathNodeKindKey]: XFormsXPathPrimaryInstanceNodeKind;
63
+ readonly rootDocument: PrimaryInstance;
64
+ abstract readonly root: Root;
54
65
  /**
55
66
  * @package Exposed on every node type to facilitate inheritance, as well as
56
67
  * conditional behavior for value nodes.
@@ -71,37 +82,45 @@ export declare abstract class InstanceNode<Definition extends AnyNodeDefinition,
71
82
  * conditional behavior for value nodes.
72
83
  */
73
84
  abstract readonly isRelevant: Accessor<boolean>;
74
- readonly nodeId: NodeID;
75
- abstract readonly nodeType: InstanceNodeType;
85
+ readonly nodeId: FormNodeID;
86
+ abstract readonly nodeType: EngineInstanceNodeType;
76
87
  abstract readonly appearances: NodeAppearances<Definition>;
77
88
  abstract readonly currentState: InstanceNodeCurrentState<Spec, Child>;
78
89
  abstract readonly validationState: NodeValidationState;
79
- abstract readonly root: Root;
80
- abstract readonly evaluator: XFormsXPathEvaluator;
90
+ abstract readonly submissionState: SubmissionState;
91
+ abstract readonly evaluator: EngineXPathEvaluator;
92
+ abstract readonly getActiveLanguage: Accessor<ActiveLanguage>;
93
+ abstract readonly isAttached: Accessor<boolean>;
81
94
  readonly scope: ReactiveScope;
82
95
  readonly computeReference: ComputeInstanceNodeReference;
83
96
  protected readonly computeChildStepReference: ComputeInstanceNodeReference;
84
97
  readonly contextReference: () => string;
85
- abstract readonly contextNode: Element;
86
- constructor(engineConfig: InstanceConfig, parent: AnyParentNode | null, definition: Definition, options?: InstanceNodeOptions);
87
98
  /**
88
- * @package This presently serves a few internal use cases, where certain
89
- * behaviors depend on arbitrary traversal from any point in the instance
90
- * tree, without particular regard for the visited node type. It isn't
91
- * intended for external traversal or any other means of consuming children by
92
- * a client. This return type intentionally deviates from one structural
93
- * expectation, requiring even leaf nodes to return an array (though for those
94
- * nodes it will always be empty). This affords consistency and efficiency of
95
- * interface for those internal uses.
99
+ * Note: it is expected that at least some node subclasses will override this
100
+ * to reflect (or in the case of intermediate abstract base classes, to
101
+ * constrain) their more specific `this` type.
102
+ */
103
+ readonly contextNode: PrimaryInstanceXPathNode;
104
+ constructor(engineConfig: InstanceConfig, parent: Parent, definition: Definition, options?: InstanceNodeOptions);
105
+ /** @package */
106
+ isPrimaryInstance(): this is PrimaryInstance;
107
+ /** @package */
108
+ isRoot(): this is Root;
109
+ /**
110
+ * @package This presently serves a growing variety of internal use cases,
111
+ * where certain behaviors depend on arbitrary traversal from any point in the
112
+ * instance tree, without particular regard for the visited node type. It
113
+ * isn't intended for external traversal or any other means of consuming
114
+ * children by a client. This return type intentionally deviates from one
115
+ * structural expectation, requiring even leaf nodes to return an array
116
+ * (though for those nodes it will always be empty). This affords consistency
117
+ * and efficiency of interface for those internal uses.
96
118
  */
97
119
  abstract getChildren(this: AnyInstanceNode): readonly AnyChildNode[];
98
- getNodesByReference(this: AnyNode, visited: WeakSet<AnyNode>, dependencyReference: string): readonly SubscribableDependency[];
99
- getSubscribableDependenciesByReference(this: AnyNode, reference: string): readonly SubscribableDependency[];
100
120
  /**
101
- * This is a default implementation suitable for most node types. The rest
102
- * (currently: `Root`, `RepeatRange`, `RepeatInstance`) should likely extend
103
- * this behavior, rather than simply overriding it.
121
+ * @todo Values as text nodes(?)
104
122
  */
105
- subscribe(): void;
123
+ getXPathChildNodes(): readonly AnyChildNode[];
124
+ getXPathValue(): string;
106
125
  }
107
126
  export {};
@@ -0,0 +1,53 @@
1
+ import { XPathNodeKindKey } from '@getodk/xpath';
2
+ import { Accessor } from 'solid-js';
3
+ import { UnsupportedControlNodeType } from '../../client/node-types.ts';
4
+ import { SubmissionState } from '../../client/submission/SubmissionState.ts';
5
+ import { TextRange } from '../../client/TextRange.ts';
6
+ import { UnsupportedControlDefinition, UnsupportedControlElementDefinition, UnsupportedControlNode } from '../../client/unsupported/UnsupportedControlNode.ts';
7
+ import { AnyViolation, LeafNodeValidationState } from '../../client/validation.ts';
8
+ import { XFormsXPathElement } from '../../integration/xpath/adapter/XFormsXPathNode.ts';
9
+ import { CurrentState } from '../../lib/reactivity/node-state/createCurrentState.ts';
10
+ import { EngineState } from '../../lib/reactivity/node-state/createEngineState.ts';
11
+ import { SharedNodeState } from '../../lib/reactivity/node-state/createSharedNodeState.ts';
12
+ import { SimpleAtomicState } from '../../lib/reactivity/types.ts';
13
+ import { UnknownAppearanceDefinition } from '../../parse/body/appearance/unknownAppearanceParser.ts';
14
+ import { AnyUnsupportedControl, GeneralParentNode } from '../hierarchy.ts';
15
+ import { EvaluationContext } from '../internal-api/EvaluationContext.ts';
16
+ import { ClientReactiveSubmittableLeafNode } from '../internal-api/submission/ClientReactiveSubmittableLeafNode.ts';
17
+ import { ValidationContext } from '../internal-api/ValidationContext.ts';
18
+ import { ValueContext } from '../internal-api/ValueContext.ts';
19
+ import { DescendantNode, DescendantNodeStateSpec } from './DescendantNode.ts';
20
+ type TypedUnsupportedControlElementDefinition<Type extends UnsupportedControlNodeType> = Extract<UnsupportedControlElementDefinition, {
21
+ readonly type: Type;
22
+ }>;
23
+ interface TypedUnsupportedControlDefinition<Type extends UnsupportedControlNodeType> extends UnsupportedControlDefinition {
24
+ readonly bodyElement: TypedUnsupportedControlElementDefinition<Type>;
25
+ }
26
+ interface UnsupportedControlStateSpec extends DescendantNodeStateSpec<unknown> {
27
+ readonly label: Accessor<TextRange<'label'> | null>;
28
+ readonly hint: Accessor<TextRange<'hint'> | null>;
29
+ readonly children: null;
30
+ readonly value: SimpleAtomicState<unknown>;
31
+ readonly valueOptions: never;
32
+ }
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> {
34
+ private readonly validation;
35
+ protected readonly state: SharedNodeState<UnsupportedControlStateSpec>;
36
+ readonly [XPathNodeKindKey] = "element";
37
+ protected readonly engineState: EngineState<UnsupportedControlStateSpec>;
38
+ abstract readonly nodeType: Type;
39
+ readonly appearances: UnknownAppearanceDefinition;
40
+ readonly currentState: CurrentState<UnsupportedControlStateSpec>;
41
+ get validationState(): LeafNodeValidationState;
42
+ readonly submissionState: SubmissionState;
43
+ abstract readonly contextNode: AnyUnsupportedControl & this;
44
+ readonly encodeValue: (instanceValue: unknown) => string;
45
+ readonly decodeValue: (instanceValue: unknown) => unknown;
46
+ constructor(parent: GeneralParentNode, definition: TypedUnsupportedControlDefinition<Type>);
47
+ getXPathValue(): string;
48
+ getViolation(): AnyViolation | null;
49
+ isBlank(): boolean;
50
+ getChildren(): readonly [];
51
+ setValue(_: never): never;
52
+ }
53
+ export {};
@@ -0,0 +1,48 @@
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 valueOptions: null;
26
+ readonly value: SimpleAtomicState<RuntimeValue>;
27
+ readonly instanceValue: Accessor<string>;
28
+ }
29
+ 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 {
30
+ protected readonly validation: SharedValidationState;
31
+ protected readonly getInstanceValue: Accessor<string>;
32
+ protected readonly valueState: RuntimeValueState<RuntimeValue>;
33
+ protected readonly setValueState: RuntimeValueSetter<RuntimeInputValue>;
34
+ readonly [XPathNodeKindKey] = "element";
35
+ readonly getXPathValue: () => string;
36
+ protected abstract readonly state: SharedNodeState<ValueNodeStateSpec<RuntimeValue>>;
37
+ protected abstract readonly engineState: EngineState<ValueNodeStateSpec<RuntimeValue>>;
38
+ readonly decodeInstanceValue: DecodeInstanceValue;
39
+ abstract readonly nodeType: ValueNodeType;
40
+ readonly valueType: V;
41
+ abstract readonly currentState: CurrentState<ValueNodeStateSpec<RuntimeValue>>;
42
+ get validationState(): LeafNodeValidationState;
43
+ readonly submissionState: SubmissionState;
44
+ constructor(parent: GeneralParentNode, definition: Definition, codec: ValueCodec<V, RuntimeValue, RuntimeInputValue>);
45
+ getViolation(): AnyViolation | null;
46
+ isBlank(): boolean;
47
+ getChildren(): readonly [];
48
+ }
@@ -1,3 +1,2 @@
1
1
  import { GeneralChildNode, GeneralParentNode } from './hierarchy.ts';
2
-
3
2
  export declare const buildChildren: (parent: GeneralParentNode) => GeneralChildNode[];
@@ -1,18 +1,23 @@
1
1
  import { Group } from './Group.ts';
2
- import { ModelValue } from './ModelValue.ts';
2
+ import { AnyInputControl } from './InputControl.ts';
3
+ import { AnyModelValue } from './ModelValue.ts';
3
4
  import { Note } from './Note.ts';
5
+ import { PrimaryInstance } from './PrimaryInstance.ts';
4
6
  import { RepeatInstance } from './repeat/RepeatInstance.ts';
5
7
  import { RepeatRangeControlled } from './repeat/RepeatRangeControlled.ts';
6
8
  import { RepeatRangeUncontrolled } from './repeat/RepeatRangeUncontrolled.ts';
7
9
  import { Root } from './Root.ts';
8
10
  import { SelectField } from './SelectField.ts';
9
- import { StringField } from './StringField.ts';
10
11
  import { Subtree } from './Subtree.ts';
11
-
12
+ import { TriggerControl } from './TriggerControl.ts';
13
+ import { RangeControl } from './unsupported/RangeControl.ts';
14
+ import { RankControl } from './unsupported/RankControl.ts';
15
+ import { UploadControl } from './unsupported/UploadControl.ts';
12
16
  export type RepeatRange = RepeatRangeControlled | RepeatRangeUncontrolled;
13
- export type AnyNode = Root | Group | Subtree | RepeatRange | RepeatInstance | Note | ModelValue | StringField | SelectField;
14
- export type AnyParentNode = Root | Group | Subtree | RepeatRange | RepeatInstance;
17
+ export type AnyUnsupportedControl = RangeControl | RankControl | UploadControl;
18
+ export type AnyNode = PrimaryInstance | Root | Group | Subtree | RepeatRange | RepeatInstance | Note | AnyModelValue | AnyInputControl | SelectField | TriggerControl | AnyUnsupportedControl;
19
+ export type AnyParentNode = PrimaryInstance | Root | Group | Subtree | RepeatRange | RepeatInstance;
15
20
  export type GeneralParentNode = Root | Group | Subtree | RepeatInstance;
16
- export type AnyChildNode = Group | Subtree | RepeatRange | RepeatInstance | ModelValue | Note | StringField | SelectField;
17
- export type GeneralChildNode = Group | Subtree | RepeatRange | ModelValue | Note | StringField | SelectField;
18
- export type AnyValueNode = ModelValue | Note | StringField | SelectField;
21
+ export type AnyChildNode = Root | Group | Subtree | RepeatRange | RepeatInstance | AnyModelValue | Note | AnyInputControl | SelectField | TriggerControl | AnyUnsupportedControl;
22
+ export type GeneralChildNode = Group | Subtree | RepeatRange | AnyModelValue | Note | AnyInputControl | SelectField | TriggerControl | AnyUnsupportedControl;
23
+ export type AnyValueNode = AnyModelValue | Note | AnyInputControl | SelectField | 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,7 +1,6 @@
1
1
  import { RootNode } from '../client/RootNode.ts';
2
2
  import { InitializeFormOptions as BaseInitializeFormOptions, FormResource } from '../client/index.ts';
3
3
  import { InstanceConfig } from './internal-api/InstanceConfig.ts';
4
-
5
4
  interface InitializeFormOptions extends BaseInitializeFormOptions {
6
5
  readonly config: Partial<InstanceConfig>;
7
6
  }
@@ -1,11 +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
-
7
- export interface EvaluationContextRoot extends SubscribableDependency, TranslationContext {
8
- }
9
6
  /**
10
7
  * Provides a common interface to establish context for XPath-based
11
8
  * computations, i.e. to evaluate {@link DependentExpression}s where:
@@ -17,20 +14,63 @@ export interface EvaluationContextRoot extends SubscribableDependency, Translati
17
14
  * - the expression may be dependent on the form's currently active language
18
15
  * (e.g. `jr:itext`)
19
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.
20
39
  */
21
- 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>;
22
53
  readonly scope: ReactiveScope;
23
- readonly evaluator: XFormsXPathEvaluator;
24
- readonly root: EvaluationContextRoot;
54
+ readonly evaluator: EngineXPathEvaluator;
25
55
  /**
26
56
  * Produces the current absolute reference to the {@link contextNode}, where
27
- * 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.
28
60
  */
29
61
  readonly contextReference: Accessor<string>;
30
- readonly contextNode: Node;
31
62
  /**
32
- * Resolves nodes corresponding to the provided node-set reference, possibly
33
- * 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).
34
74
  */
35
- getSubscribableDependenciesByReference(reference: string): readonly SubscribableDependency[];
75
+ readonly contextNode: EngineXPathNode;
36
76
  }
@@ -1,7 +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
-
4
- 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;
5
10
  /**
6
11
  * Uniqueness per form instance session (so e.g. persistence isn't necessary).
7
12
  */
@@ -0,0 +1,20 @@
1
+ import { ReactiveScope } from '../../lib/reactivity/scope.ts';
2
+ import { BindComputationExpression } from '../../parse/expression/BindComputationExpression.ts';
3
+ import { EvaluationContext } from './EvaluationContext.ts';
4
+ export type DecodeInstanceValue = (value: string) => string;
5
+ interface InstanceValueContextDefinitionBind {
6
+ readonly calculate: BindComputationExpression<'calculate'> | null;
7
+ readonly readonly: BindComputationExpression<'readonly'>;
8
+ }
9
+ export interface InstanceValueContextDefinition {
10
+ readonly bind: InstanceValueContextDefinitionBind;
11
+ readonly defaultValue: string;
12
+ }
13
+ export interface InstanceValueContext extends EvaluationContext {
14
+ readonly scope: ReactiveScope;
15
+ readonly definition: InstanceValueContextDefinition;
16
+ readonly decodeInstanceValue: DecodeInstanceValue;
17
+ isReadonly(): boolean;
18
+ isRelevant(): boolean;
19
+ }
20
+ 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,5 +1,5 @@
1
- import { ActiveLanguage } from '../../index.ts';
2
-
1
+ import { Accessor } from 'solid-js';
2
+ import { ActiveLanguage } from '../../client/FormLanguage.ts';
3
3
  export interface TranslationContext {
4
- get activeLanguage(): ActiveLanguage;
4
+ readonly getActiveLanguage: Accessor<ActiveLanguage>;
5
5
  }
@@ -1,19 +1,25 @@
1
- import { BindComputation } from '../../model/BindComputation.ts';
1
+ import { FormNodeID } from '../../client/identity.ts';
2
+ import { AnyViolation } from '../../client/validation.ts';
3
+ import { BindComputationExpression } from '../../parse/expression/BindComputationExpression.ts';
2
4
  import { MessageDefinition } from '../../parse/text/MessageDefinition.ts';
3
5
  import { EvaluationContext } from './EvaluationContext.ts';
4
- import { SubscribableDependency } from './SubscribableDependency.ts';
5
-
6
+ interface ValidationContextCurrentState {
7
+ get reference(): string;
8
+ }
6
9
  interface ValidationContextDefinitionBind {
7
- readonly constraint: BindComputation<'constraint'>;
10
+ readonly constraint: BindComputationExpression<'constraint'>;
8
11
  readonly constraintMsg: MessageDefinition<'constraintMsg'> | null;
9
- readonly required: BindComputation<'required'>;
12
+ readonly required: BindComputationExpression<'required'>;
10
13
  readonly requiredMsg: MessageDefinition<'requiredMsg'> | null;
11
14
  }
12
15
  interface ValidationContextDefinition {
13
16
  readonly bind: ValidationContextDefinitionBind;
14
17
  }
15
- export interface ValidationContext extends EvaluationContext, SubscribableDependency {
18
+ export interface ValidationContext extends EvaluationContext {
19
+ readonly nodeId: FormNodeID;
16
20
  readonly definition: ValidationContextDefinition;
21
+ readonly currentState: ValidationContextCurrentState;
22
+ getViolation(): AnyViolation | null;
17
23
  isRelevant(): boolean;
18
24
  isRequired(): boolean;
19
25
  isBlank(): boolean;
@@ -1,11 +1,11 @@
1
+ import { EngineXPathNode } from '../../integration/xpath/adapter/kind.ts';
1
2
  import { ReactiveScope } from '../../lib/reactivity/scope.ts';
2
- import { BindComputation } from '../../model/BindComputation.ts';
3
+ import { BindComputationExpression } from '../../parse/expression/BindComputationExpression.ts';
3
4
  import { EvaluationContext } from './EvaluationContext.ts';
4
-
5
5
  export type InstanceValue = string;
6
6
  interface ValueContextDefinitionBind {
7
- readonly calculate: BindComputation<'calculate'> | null;
8
- readonly readonly: BindComputation<'readonly'>;
7
+ readonly calculate: BindComputationExpression<'calculate'> | null;
8
+ readonly readonly: BindComputationExpression<'readonly'>;
9
9
  }
10
10
  export interface ValueContextDefinition {
11
11
  readonly bind: ValueContextDefinitionBind;
@@ -14,7 +14,7 @@ export interface ValueContextDefinition {
14
14
  export interface ValueContext<RuntimeValue> extends EvaluationContext {
15
15
  readonly scope: ReactiveScope;
16
16
  readonly definition: ValueContextDefinition;
17
- readonly contextNode: Element;
17
+ readonly contextNode: EngineXPathNode & this;
18
18
  isReadonly(): boolean;
19
19
  isRelevant(): boolean;
20
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,31 @@
1
+ import { SubmissionState } from '../../../client/submission/SubmissionState.ts';
2
+ import { EscapedXMLText } from '../../../lib/xml-serialization.ts';
3
+ import { ClientReactiveSubmittableChildNode, ClientReactiveSubmittableParentNode } from './ClientReactiveSubmittableParentNode.ts';
4
+ interface ClientReactiveSubmittableLeafNodeCurrentState<RuntimeValue> {
5
+ get relevant(): boolean;
6
+ get value(): RuntimeValue;
7
+ }
8
+ export type SerializedSubmissionValue = string;
9
+ interface ClientReactiveSubmittableLeafNodeDefinition {
10
+ readonly nodeName: string;
11
+ }
12
+ export interface ClientReactiveSubmittableLeafNode<RuntimeValue> {
13
+ readonly definition: ClientReactiveSubmittableLeafNodeDefinition;
14
+ readonly parent: ClientReactiveSubmittableParentNode<ClientReactiveSubmittableChildNode>;
15
+ readonly currentState: ClientReactiveSubmittableLeafNodeCurrentState<RuntimeValue>;
16
+ /**
17
+ * A client-reactive submittable leaf node is responsible for producing a
18
+ * string representation of its value state, suitable for serialization for
19
+ * submission. It **MUST NOT** perform any further submission-specific
20
+ * serialization duties: in particular, the value **MUST NOT** be escaped for
21
+ * XML. This responsibility is delegated up the stack, to avoid repeat
22
+ * escaping.
23
+ *
24
+ * Note: excluding {@link EscapedXMLText} here does not have an effect on the
25
+ * type system, it is a documentation-only hint, to help guard against future
26
+ * double-escaping mistakes.
27
+ */
28
+ readonly encodeValue: (this: unknown, runtimeValue: RuntimeValue) => Exclude<string, EscapedXMLText>;
29
+ readonly submissionState: SubmissionState;
30
+ }
31
+ export {};
@@ -0,0 +1,18 @@
1
+ import { SubmissionState } from '../../../client/submission/SubmissionState.ts';
2
+ export interface ClientReactiveSubmittableChildNode {
3
+ readonly submissionState: SubmissionState;
4
+ }
5
+ interface ClientReactiveSubmittableParentNodeCurrentState<Child extends ClientReactiveSubmittableChildNode> {
6
+ get relevant(): boolean;
7
+ get children(): readonly Child[];
8
+ }
9
+ export interface ClientReactiveSubmittableParentNodeDefinition {
10
+ readonly nodeName: string;
11
+ }
12
+ export interface ClientReactiveSubmittableParentNode<Child extends ClientReactiveSubmittableChildNode> {
13
+ readonly definition: ClientReactiveSubmittableParentNodeDefinition;
14
+ readonly parent: ClientReactiveSubmittableParentNode<ClientReactiveSubmittableChildNode> | null;
15
+ readonly currentState: ClientReactiveSubmittableParentNodeCurrentState<Child>;
16
+ readonly submissionState: SubmissionState;
17
+ }
18
+ export {};
@@ -0,0 +1,17 @@
1
+ import { SubmissionState } from '../../../client/submission/SubmissionState.ts';
2
+ import { ClientReactiveSubmittableChildNode, ClientReactiveSubmittableParentNode } from './ClientReactiveSubmittableParentNode.ts';
3
+ interface ClientReactiveSubmittableValueNodeCurrentState {
4
+ get relevant(): boolean;
5
+ get instanceValue(): string;
6
+ }
7
+ export type SerializedSubmissionValue = string;
8
+ interface ClientReactiveSubmittableValueNodeDefinition {
9
+ readonly nodeName: string;
10
+ }
11
+ export interface ClientReactiveSubmittableValueNode {
12
+ readonly definition: ClientReactiveSubmittableValueNodeDefinition;
13
+ readonly parent: ClientReactiveSubmittableParentNode<ClientReactiveSubmittableChildNode>;
14
+ readonly currentState: ClientReactiveSubmittableValueNodeCurrentState;
15
+ readonly submissionState: SubmissionState;
16
+ }
17
+ export {};