@getodk/xforms-engine 0.5.0 → 0.7.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 (425) hide show
  1. package/README.md +1 -1
  2. package/dist/client/BaseNode.d.ts +8 -4
  3. package/dist/client/BaseValueNode.d.ts +8 -4
  4. package/dist/client/GroupNode.d.ts +1 -0
  5. package/dist/client/InputNode.d.ts +32 -3
  6. package/dist/client/ModelValueNode.d.ts +1 -0
  7. package/dist/client/NoteNode.d.ts +24 -7
  8. package/dist/client/RangeNode.d.ts +36 -0
  9. package/dist/client/RankNode.d.ts +46 -0
  10. package/dist/client/RootNode.d.ts +21 -14
  11. package/dist/client/SelectNode.d.ts +47 -25
  12. package/dist/client/SubtreeNode.d.ts +1 -0
  13. package/dist/client/TriggerNode.d.ts +10 -6
  14. package/dist/client/constants.d.ts +11 -12
  15. package/dist/client/form/CreateFormInstance.d.ts +14 -0
  16. package/dist/client/form/EditFormInstance.d.ts +62 -0
  17. package/dist/client/form/FormInstance.d.ts +104 -0
  18. package/dist/client/form/FormInstanceConfig.d.ts +17 -0
  19. package/dist/client/form/FormResource.d.ts +1 -0
  20. package/dist/client/form/LoadForm.d.ts +79 -0
  21. package/dist/client/form/LoadFormResult.d.ts +67 -0
  22. package/dist/client/form/RestoreFormInstance.d.ts +8 -0
  23. package/dist/client/hierarchy.d.ts +5 -5
  24. package/dist/client/index.d.ts +37 -11
  25. package/dist/client/node-types.d.ts +2 -2
  26. package/dist/client/repeat/BaseRepeatRangeNode.d.ts +3 -4
  27. package/dist/client/repeat/RepeatInstanceNode.d.ts +4 -5
  28. package/dist/client/repeat/RepeatRangeControlledNode.d.ts +2 -2
  29. package/dist/client/repeat/RepeatRangeUncontrolledNode.d.ts +2 -2
  30. package/dist/client/resources.d.ts +1 -1
  31. package/dist/client/serialization/InstanceData.d.ts +12 -0
  32. package/dist/client/serialization/InstanceFile.d.ts +6 -0
  33. package/dist/client/serialization/InstancePayload.d.ts +93 -0
  34. package/dist/client/serialization/InstancePayloadOptions.d.ts +23 -0
  35. package/dist/client/serialization/InstanceState.d.ts +12 -0
  36. package/dist/client/submission/{SubmissionDefinition.d.ts → SubmissionMeta.d.ts} +1 -1
  37. package/dist/client/unsupported/UnsupportedControlNode.d.ts +1 -3
  38. package/dist/entrypoints/FormInstance.d.ts +20 -0
  39. package/dist/entrypoints/FormResult/BaseFormResult.d.ts +22 -0
  40. package/dist/entrypoints/FormResult/BaseInstantiableFormResult.d.ts +25 -0
  41. package/dist/entrypoints/FormResult/FormFailureResult.d.ts +17 -0
  42. package/dist/entrypoints/FormResult/FormSuccessResult.d.ts +15 -0
  43. package/dist/entrypoints/FormResult/FormWarningResult.d.ts +15 -0
  44. package/dist/entrypoints/createInstance.d.ts +9 -0
  45. package/dist/entrypoints/editInstance.d.ts +9 -0
  46. package/dist/entrypoints/index.d.ts +4 -0
  47. package/dist/entrypoints/loadForm.d.ts +4 -0
  48. package/dist/entrypoints/restoreInstance.d.ts +9 -0
  49. package/dist/error/LoadFormFailureError.d.ts +9 -0
  50. package/dist/error/MalformedInstanceDataError.d.ts +3 -0
  51. package/dist/error/RankMissingValueError.d.ts +3 -0
  52. package/dist/error/RankValueTypeError.d.ts +6 -0
  53. package/dist/error/SelectValueTypeError.d.ts +15 -0
  54. package/dist/error/TemplatedNodeAttributeSerializationError.d.ts +22 -0
  55. package/dist/error/XFormsSpecViolationError.d.ts +2 -0
  56. package/dist/index.d.ts +2 -34
  57. package/dist/index.js +7274 -5840
  58. package/dist/index.js.map +1 -1
  59. package/dist/instance/Group.d.ts +7 -5
  60. package/dist/instance/InputControl.d.ts +9 -6
  61. package/dist/instance/ModelValue.d.ts +7 -4
  62. package/dist/instance/Note.d.ts +14 -25
  63. package/dist/instance/PrimaryInstance.d.ts +36 -8
  64. package/dist/instance/RangeControl.d.ts +35 -0
  65. package/dist/instance/RankControl.d.ts +41 -0
  66. package/dist/instance/Root.d.ts +8 -9
  67. package/dist/instance/SelectControl.d.ts +67 -0
  68. package/dist/instance/Subtree.d.ts +7 -5
  69. package/dist/instance/TriggerControl.d.ts +10 -22
  70. package/dist/instance/abstract/DescendantNode.d.ts +11 -3
  71. package/dist/instance/abstract/InstanceNode.d.ts +10 -5
  72. package/dist/instance/abstract/ValueNode.d.ts +7 -6
  73. package/dist/instance/children/DescendantNodeInitOptions.d.ts +32 -0
  74. package/dist/instance/{children.d.ts → children/buildChildren.d.ts} +1 -1
  75. package/dist/instance/children/childrenInitOptions.d.ts +9 -0
  76. package/dist/instance/children/normalizeChildInitOptions.d.ts +2 -0
  77. package/dist/instance/hierarchy.d.ts +9 -9
  78. package/dist/instance/input/InitialInstanceState.d.ts +13 -0
  79. package/dist/instance/input/InstanceAttachmentMap.d.ts +19 -0
  80. package/dist/instance/internal-api/InstanceConfig.d.ts +2 -9
  81. package/dist/instance/internal-api/InstanceValueContext.d.ts +10 -1
  82. package/dist/instance/internal-api/serialization/ClientReactiveSerializableInstance.d.ts +14 -0
  83. package/dist/instance/internal-api/serialization/ClientReactiveSerializableLeafNode.d.ts +32 -0
  84. package/dist/instance/internal-api/serialization/ClientReactiveSerializableParentNode.d.ts +18 -0
  85. package/dist/instance/internal-api/serialization/ClientReactiveSerializableTemplatedNode.d.ts +13 -0
  86. package/dist/instance/internal-api/serialization/ClientReactiveSerializableValueNode.d.ts +21 -0
  87. package/dist/instance/repeat/BaseRepeatRange.d.ts +11 -8
  88. package/dist/instance/repeat/RepeatInstance.d.ts +11 -7
  89. package/dist/instance/repeat/RepeatRangeControlled.d.ts +27 -3
  90. package/dist/instance/repeat/RepeatRangeUncontrolled.d.ts +4 -3
  91. package/dist/instance/resource.d.ts +5 -1
  92. package/dist/instance/unsupported/UploadControl.d.ts +32 -4
  93. package/dist/integration/xpath/EngineXPathEvaluator.d.ts +2 -2
  94. package/dist/integration/xpath/adapter/kind.d.ts +4 -10
  95. package/dist/integration/xpath/adapter/names.d.ts +1 -11
  96. package/dist/integration/xpath/adapter/traversal.d.ts +10 -9
  97. package/dist/integration/xpath/static-dom/StaticAttribute.d.ts +10 -4
  98. package/dist/integration/xpath/static-dom/StaticDocument.d.ts +13 -11
  99. package/dist/integration/xpath/static-dom/StaticElement.d.ts +25 -18
  100. package/dist/integration/xpath/static-dom/StaticNode.d.ts +1 -1
  101. package/dist/integration/xpath/static-dom/StaticParentNode.d.ts +13 -0
  102. package/dist/integration/xpath/static-dom/staticNodeName.d.ts +3 -0
  103. package/dist/lib/client-reactivity/instance-state/createNodeRangeInstanceState.d.ts +4 -0
  104. package/dist/lib/client-reactivity/instance-state/createParentNodeInstanceState.d.ts +4 -0
  105. package/dist/lib/client-reactivity/instance-state/createPrimaryInstanceState.d.ts +3 -0
  106. package/dist/lib/client-reactivity/instance-state/createRootInstanceState.d.ts +3 -0
  107. package/dist/lib/client-reactivity/instance-state/createTemplatedNodeInstanceState.d.ts +6 -0
  108. package/dist/lib/client-reactivity/instance-state/createValueNodeInstanceState.d.ts +3 -0
  109. package/dist/lib/client-reactivity/instance-state/prepareInstancePayload.d.ts +8 -0
  110. package/dist/lib/codecs/Geopoint/Geopoint.d.ts +48 -0
  111. package/dist/lib/codecs/Geopoint/GeopointValueCodec.d.ts +5 -0
  112. package/dist/lib/codecs/NoteCodec.d.ts +8 -0
  113. package/dist/lib/codecs/RangeCodec.d.ts +8 -0
  114. package/dist/lib/codecs/TempUnsupportedControlCodec.d.ts +7 -0
  115. package/dist/lib/codecs/TriggerCodec.d.ts +7 -0
  116. package/dist/lib/codecs/ValueArrayCodec.d.ts +11 -0
  117. package/dist/lib/codecs/ValueCodec.d.ts +2 -2
  118. package/dist/lib/codecs/getNoteCodec.d.ts +3 -0
  119. package/dist/lib/codecs/getSelectCodec.d.ts +5 -0
  120. package/dist/lib/codecs/getSharedValueCodec.d.ts +3 -2
  121. package/dist/lib/codecs/items/BaseItemCodec.d.ts +9 -0
  122. package/dist/lib/codecs/items/MultipleValueItemCodec.d.ts +14 -0
  123. package/dist/lib/codecs/items/SingleValueItemCodec.d.ts +24 -0
  124. package/dist/lib/dom/query.d.ts +1 -2
  125. package/dist/lib/names/NamespaceDeclaration.d.ts +45 -0
  126. package/dist/lib/names/NamespaceDeclarationMap.d.ts +137 -0
  127. package/dist/lib/names/NamespaceURL.d.ts +30 -0
  128. package/dist/lib/names/QualifiedName.d.ts +113 -0
  129. package/dist/lib/names/UnprefixedXFormsName.d.ts +4 -0
  130. package/dist/lib/number-parsers.d.ts +2 -0
  131. package/dist/lib/reactivity/createInstanceValueState.d.ts +2 -27
  132. package/dist/lib/reactivity/createItemCollection.d.ts +21 -0
  133. package/dist/lib/xml-serialization.d.ts +11 -2
  134. package/dist/parse/XFormDOM.d.ts +1 -1
  135. package/dist/parse/body/BodyDefinition.d.ts +2 -2
  136. package/dist/parse/body/appearance/rangeAppearanceParser.d.ts +3 -0
  137. package/dist/parse/body/control/InputControlDefinition.d.ts +3 -0
  138. package/dist/parse/body/control/ItemDefinition.d.ts +14 -0
  139. package/dist/parse/body/control/ItemsetDefinition.d.ts +18 -0
  140. package/dist/parse/body/control/RangeControlDefinition.d.ts +31 -2
  141. package/dist/parse/body/control/RankControlDefinition.d.ts +7 -3
  142. package/dist/parse/body/control/{select/SelectDefinition.d.ts → SelectControlDefinition.d.ts} +9 -9
  143. package/dist/parse/expression/ItemsetNodesetExpression.d.ts +1 -1
  144. package/dist/parse/expression/ItemsetValueExpression.d.ts +1 -1
  145. package/dist/parse/model/BindDefinition.d.ts +3 -1
  146. package/dist/parse/model/BindPreloadDefinition.d.ts +42 -0
  147. package/dist/parse/model/DescendentNodeDefinition.d.ts +4 -13
  148. package/dist/parse/model/ItextTranslationsDefinition.d.ts +18 -0
  149. package/dist/parse/model/LeafNodeDefinition.d.ts +9 -7
  150. package/dist/parse/model/ModelDefinition.d.ts +9 -2
  151. package/dist/parse/model/NodeDefinition.d.ts +30 -45
  152. package/dist/parse/model/NoteNodeDefinition.d.ts +7 -5
  153. package/dist/parse/model/RangeNodeDefinition.d.ts +42 -0
  154. package/dist/parse/model/RepeatDefinition.d.ts +62 -0
  155. package/dist/parse/model/RootAttributeDefinition.d.ts +21 -0
  156. package/dist/parse/model/RootAttributeMap.d.ts +24 -0
  157. package/dist/parse/model/RootDefinition.d.ts +15 -14
  158. package/dist/parse/model/SecondaryInstance/SecondaryInstancesDefinition.d.ts +15 -2
  159. package/dist/parse/model/SecondaryInstance/assertSecondaryInstanceDefinition.d.ts +5 -0
  160. package/dist/parse/model/SecondaryInstance/defineSecondaryInstance.d.ts +5 -0
  161. package/dist/parse/model/SecondaryInstance/sources/BlankSecondaryInstanceSource.d.ts +1 -7
  162. package/dist/parse/model/SecondaryInstance/sources/CSVExternalSecondaryInstance.d.ts +1 -1
  163. package/dist/parse/model/SecondaryInstance/sources/GeoJSONExternalSecondaryInstance.d.ts +1 -1
  164. package/dist/parse/model/SecondaryInstance/sources/InternalSecondaryInstanceSource.d.ts +1 -1
  165. package/dist/parse/model/SecondaryInstance/sources/SecondaryInstanceSource.d.ts +1 -1
  166. package/dist/parse/model/SecondaryInstance/sources/XMLExternalSecondaryInstanceSource.d.ts +1 -1
  167. package/dist/parse/model/{FormSubmissionDefinition.d.ts → SubmissionDefinition.d.ts} +2 -2
  168. package/dist/parse/model/SubtreeDefinition.d.ts +9 -7
  169. package/dist/parse/model/nodeDefinitionMap.d.ts +5 -0
  170. package/dist/parse/shared/parseInstanceXML.d.ts +21 -0
  171. package/dist/parse/shared/parseStaticDocumentFromDOMSubtree.d.ts +4 -22
  172. package/dist/parse/text/ItemLabelDefinition.d.ts +1 -1
  173. package/dist/parse/text/ItemsetLabelDefinition.d.ts +2 -2
  174. package/dist/parse/text/abstract/TextElementDefinition.d.ts +1 -1
  175. package/dist/parse/xpath/semantic-analysis.d.ts +1 -3
  176. package/dist/solid.js +7247 -5813
  177. package/dist/solid.js.map +1 -1
  178. package/package.json +15 -12
  179. package/src/client/BaseNode.ts +9 -4
  180. package/src/client/BaseValueNode.ts +8 -4
  181. package/src/client/GroupNode.ts +1 -0
  182. package/src/client/InputNode.ts +38 -2
  183. package/src/client/ModelValueNode.ts +1 -0
  184. package/src/client/NoteNode.ts +43 -7
  185. package/src/client/RangeNode.ts +51 -0
  186. package/src/client/RankNode.ts +54 -0
  187. package/src/client/RootNode.ts +30 -16
  188. package/src/client/SelectNode.ts +53 -26
  189. package/src/client/SubtreeNode.ts +1 -0
  190. package/src/client/TriggerNode.ts +12 -6
  191. package/src/client/constants.ts +12 -14
  192. package/src/client/form/CreateFormInstance.ts +19 -0
  193. package/src/client/form/EditFormInstance.ts +93 -0
  194. package/src/client/form/FormInstance.ts +114 -0
  195. package/src/client/form/FormInstanceConfig.ts +18 -0
  196. package/src/client/form/FormResource.ts +1 -0
  197. package/src/client/form/LoadForm.ts +92 -0
  198. package/src/client/form/LoadFormResult.ts +103 -0
  199. package/src/client/form/RestoreFormInstance.ts +14 -0
  200. package/src/client/hierarchy.ts +7 -8
  201. package/src/client/index.ts +47 -29
  202. package/src/client/node-types.ts +3 -5
  203. package/src/client/repeat/BaseRepeatRangeNode.ts +3 -4
  204. package/src/client/repeat/RepeatInstanceNode.ts +4 -8
  205. package/src/client/repeat/RepeatRangeControlledNode.ts +2 -2
  206. package/src/client/repeat/RepeatRangeUncontrolledNode.ts +2 -2
  207. package/src/client/resources.ts +2 -2
  208. package/src/client/serialization/InstanceData.ts +16 -0
  209. package/src/client/serialization/InstanceFile.ts +9 -0
  210. package/src/client/serialization/InstancePayload.ts +126 -0
  211. package/src/client/serialization/InstancePayloadOptions.ts +28 -0
  212. package/src/client/serialization/InstanceState.ts +14 -0
  213. package/src/client/submission/{SubmissionDefinition.ts → SubmissionMeta.ts} +1 -1
  214. package/src/client/unsupported/UnsupportedControlNode.ts +2 -6
  215. package/src/entrypoints/FormInstance.ts +55 -0
  216. package/src/entrypoints/FormResult/BaseFormResult.ts +40 -0
  217. package/src/entrypoints/FormResult/BaseInstantiableFormResult.ts +109 -0
  218. package/src/entrypoints/FormResult/FormFailureResult.ts +44 -0
  219. package/src/entrypoints/FormResult/FormSuccessResult.ts +25 -0
  220. package/src/entrypoints/FormResult/FormWarningResult.ts +25 -0
  221. package/src/entrypoints/createInstance.ts +23 -0
  222. package/src/entrypoints/editInstance.ts +24 -0
  223. package/src/entrypoints/index.ts +4 -0
  224. package/src/entrypoints/loadForm.ts +154 -0
  225. package/src/entrypoints/restoreInstance.ts +27 -0
  226. package/src/error/LoadFormFailureError.ts +114 -0
  227. package/src/error/MalformedInstanceDataError.ts +3 -0
  228. package/src/error/RankMissingValueError.ts +5 -0
  229. package/src/error/RankValueTypeError.ts +13 -0
  230. package/src/error/SelectValueTypeError.ts +22 -0
  231. package/src/error/TemplatedNodeAttributeSerializationError.ts +24 -0
  232. package/src/error/XFormsSpecViolationError.ts +1 -0
  233. package/src/index.ts +2 -56
  234. package/src/instance/Group.ts +17 -15
  235. package/src/instance/InputControl.ts +58 -12
  236. package/src/instance/ModelValue.ts +19 -11
  237. package/src/instance/Note.ts +40 -64
  238. package/src/instance/PrimaryInstance.ts +70 -31
  239. package/src/instance/RangeControl.ts +119 -0
  240. package/src/instance/RankControl.ts +208 -0
  241. package/src/instance/Root.ts +21 -31
  242. package/src/instance/SelectControl.ts +228 -0
  243. package/src/instance/Subtree.ts +17 -15
  244. package/src/instance/TriggerControl.ts +50 -80
  245. package/src/instance/abstract/DescendantNode.ts +13 -8
  246. package/src/instance/abstract/InstanceNode.ts +19 -7
  247. package/src/instance/abstract/ValueNode.ts +14 -15
  248. package/src/instance/children/DescendantNodeInitOptions.ts +35 -0
  249. package/src/instance/children/buildChildren.ts +206 -0
  250. package/src/instance/children/childrenInitOptions.ts +117 -0
  251. package/src/instance/children/normalizeChildInitOptions.ts +332 -0
  252. package/src/instance/hierarchy.ts +21 -16
  253. package/src/instance/input/InitialInstanceState.ts +108 -0
  254. package/src/instance/input/InstanceAttachmentMap.ts +142 -0
  255. package/src/instance/internal-api/InstanceConfig.ts +3 -10
  256. package/src/instance/internal-api/InstanceValueContext.ts +11 -1
  257. package/src/instance/internal-api/serialization/ClientReactiveSerializableInstance.ts +20 -0
  258. package/src/instance/internal-api/serialization/ClientReactiveSerializableLeafNode.ts +43 -0
  259. package/src/instance/internal-api/serialization/ClientReactiveSerializableParentNode.ts +26 -0
  260. package/src/instance/internal-api/serialization/ClientReactiveSerializableTemplatedNode.ts +24 -0
  261. package/src/instance/internal-api/serialization/ClientReactiveSerializableValueNode.ts +28 -0
  262. package/src/instance/repeat/BaseRepeatRange.ts +21 -24
  263. package/src/instance/repeat/RepeatInstance.ts +27 -19
  264. package/src/instance/repeat/RepeatRangeControlled.ts +90 -17
  265. package/src/instance/repeat/RepeatRangeUncontrolled.ts +10 -9
  266. package/src/instance/resource.ts +18 -2
  267. package/src/instance/unsupported/UploadControl.ts +116 -5
  268. package/src/integration/xpath/EngineXPathEvaluator.ts +2 -2
  269. package/src/integration/xpath/adapter/kind.ts +1 -28
  270. package/src/integration/xpath/adapter/names.ts +66 -17
  271. package/src/integration/xpath/adapter/traversal.ts +12 -11
  272. package/src/integration/xpath/static-dom/StaticAttribute.ts +16 -7
  273. package/src/integration/xpath/static-dom/StaticDocument.ts +17 -18
  274. package/src/integration/xpath/static-dom/StaticElement.ts +211 -52
  275. package/src/integration/xpath/static-dom/StaticNode.ts +1 -1
  276. package/src/integration/xpath/static-dom/StaticParentNode.ts +22 -0
  277. package/src/integration/xpath/static-dom/staticNodeName.ts +20 -0
  278. package/src/lib/client-reactivity/instance-state/createNodeRangeInstanceState.ts +17 -0
  279. package/src/lib/client-reactivity/instance-state/createParentNodeInstanceState.ts +22 -0
  280. package/src/lib/client-reactivity/instance-state/createPrimaryInstanceState.ts +12 -0
  281. package/src/lib/client-reactivity/instance-state/createRootInstanceState.ts +19 -0
  282. package/src/lib/client-reactivity/instance-state/createTemplatedNodeInstanceState.ts +31 -0
  283. package/src/lib/client-reactivity/instance-state/createValueNodeInstanceState.ts +21 -0
  284. package/src/lib/client-reactivity/instance-state/prepareInstancePayload.ts +173 -0
  285. package/src/lib/codecs/Geopoint/Geopoint.ts +150 -0
  286. package/src/lib/codecs/Geopoint/GeopointValueCodec.ts +20 -0
  287. package/src/lib/codecs/NoteCodec.ts +32 -0
  288. package/src/lib/codecs/RangeCodec.ts +65 -0
  289. package/src/lib/codecs/TempUnsupportedControlCodec.ts +32 -0
  290. package/src/lib/codecs/TriggerCodec.ts +64 -0
  291. package/src/lib/codecs/ValueArrayCodec.ts +42 -0
  292. package/src/lib/codecs/ValueCodec.ts +2 -2
  293. package/src/lib/codecs/getNoteCodec.ts +27 -0
  294. package/src/lib/codecs/getSelectCodec.ts +27 -0
  295. package/src/lib/codecs/getSharedValueCodec.ts +5 -3
  296. package/src/lib/codecs/items/BaseItemCodec.ts +20 -0
  297. package/src/lib/codecs/items/MultipleValueItemCodec.ts +28 -0
  298. package/src/lib/codecs/items/SingleValueItemCodec.ts +67 -0
  299. package/src/lib/dom/query.ts +1 -2
  300. package/src/lib/names/NamespaceDeclaration.ts +106 -0
  301. package/src/lib/names/NamespaceDeclarationMap.ts +228 -0
  302. package/src/lib/names/NamespaceURL.ts +44 -0
  303. package/src/lib/names/QualifiedName.ts +170 -0
  304. package/src/lib/names/UnprefixedXFormsName.ts +12 -0
  305. package/src/lib/number-parsers.ts +25 -0
  306. package/src/lib/reactivity/createInstanceValueState.ts +69 -43
  307. package/src/lib/reactivity/{createSelectItems.ts → createItemCollection.ts} +41 -36
  308. package/src/lib/xml-serialization.ts +76 -9
  309. package/src/parse/XFormDOM.ts +141 -21
  310. package/src/parse/XFormDefinition.ts +1 -4
  311. package/src/parse/body/BodyDefinition.ts +4 -4
  312. package/src/parse/body/appearance/rangeAppearanceParser.ts +11 -0
  313. package/src/parse/body/control/InputControlDefinition.ts +9 -0
  314. package/src/parse/body/control/{select/ItemDefinition.ts → ItemDefinition.ts} +8 -6
  315. package/src/parse/body/control/{select/ItemsetDefinition.ts → ItemsetDefinition.ts} +11 -9
  316. package/src/parse/body/control/RangeControlDefinition.ts +91 -6
  317. package/src/parse/body/control/RankControlDefinition.ts +25 -7
  318. package/src/parse/body/control/{select/SelectDefinition.ts → SelectControlDefinition.ts} +9 -9
  319. package/src/parse/expression/ItemsetNodesetExpression.ts +1 -1
  320. package/src/parse/expression/ItemsetValueExpression.ts +1 -1
  321. package/src/parse/model/BindDefinition.ts +4 -0
  322. package/src/parse/model/BindPreloadDefinition.ts +100 -0
  323. package/src/parse/model/DescendentNodeDefinition.ts +7 -25
  324. package/src/parse/model/ItextTranslationsDefinition.ts +79 -0
  325. package/src/parse/model/LeafNodeDefinition.ts +13 -8
  326. package/src/parse/model/ModelDefinition.ts +36 -3
  327. package/src/parse/model/NodeDefinition.ts +38 -85
  328. package/src/parse/model/NoteNodeDefinition.ts +12 -10
  329. package/src/parse/model/RangeNodeDefinition.ts +119 -0
  330. package/src/parse/model/RepeatDefinition.ts +382 -0
  331. package/src/parse/model/RootAttributeDefinition.ts +44 -0
  332. package/src/parse/model/RootAttributeMap.ts +49 -0
  333. package/src/parse/model/RootDefinition.ts +42 -43
  334. package/src/parse/model/SecondaryInstance/SecondaryInstancesDefinition.ts +23 -2
  335. package/src/parse/model/SecondaryInstance/assertSecondaryInstanceDefinition.ts +14 -0
  336. package/src/parse/model/SecondaryInstance/defineSecondaryInstance.ts +32 -0
  337. package/src/parse/model/SecondaryInstance/sources/BlankSecondaryInstanceSource.ts +3 -24
  338. package/src/parse/model/SecondaryInstance/sources/CSVExternalSecondaryInstance.ts +33 -86
  339. package/src/parse/model/SecondaryInstance/sources/GeoJSONExternalSecondaryInstance.ts +64 -136
  340. package/src/parse/model/SecondaryInstance/sources/InternalSecondaryInstanceSource.ts +9 -7
  341. package/src/parse/model/SecondaryInstance/sources/SecondaryInstanceSource.ts +1 -1
  342. package/src/parse/model/SecondaryInstance/sources/XMLExternalSecondaryInstanceSource.ts +7 -7
  343. package/src/parse/model/{FormSubmissionDefinition.ts → SubmissionDefinition.ts} +2 -2
  344. package/src/parse/model/SubtreeDefinition.ts +15 -16
  345. package/src/parse/model/nodeDefinitionMap.ts +34 -0
  346. package/src/parse/shared/parseInstanceXML.ts +79 -0
  347. package/src/parse/shared/parseStaticDocumentFromDOMSubtree.ts +46 -131
  348. package/src/parse/text/ItemLabelDefinition.ts +1 -1
  349. package/src/parse/text/ItemsetLabelDefinition.ts +2 -2
  350. package/src/parse/text/abstract/TextElementDefinition.ts +1 -1
  351. package/src/parse/xpath/semantic-analysis.ts +4 -3
  352. package/dist/client/EngineConfig.d.ts +0 -79
  353. package/dist/client/submission/SubmissionData.d.ts +0 -7
  354. package/dist/client/submission/SubmissionInstanceFile.d.ts +0 -6
  355. package/dist/client/submission/SubmissionOptions.d.ts +0 -23
  356. package/dist/client/submission/SubmissionResult.d.ts +0 -91
  357. package/dist/client/submission/SubmissionState.d.ts +0 -12
  358. package/dist/client/unsupported/RangeNode.d.ts +0 -9
  359. package/dist/client/unsupported/RankNode.d.ts +0 -9
  360. package/dist/instance/SelectField.d.ts +0 -58
  361. package/dist/instance/abstract/UnsupportedControl.d.ts +0 -53
  362. package/dist/instance/index.d.ts +0 -8
  363. package/dist/instance/internal-api/ValueContext.d.ts +0 -23
  364. package/dist/instance/internal-api/submission/ClientReactiveSubmittableInstance.d.ts +0 -14
  365. package/dist/instance/internal-api/submission/ClientReactiveSubmittableLeafNode.d.ts +0 -31
  366. package/dist/instance/internal-api/submission/ClientReactiveSubmittableParentNode.d.ts +0 -18
  367. package/dist/instance/internal-api/submission/ClientReactiveSubmittableValueNode.d.ts +0 -17
  368. package/dist/instance/unsupported/RangeControl.d.ts +0 -6
  369. package/dist/instance/unsupported/RankControl.d.ts +0 -6
  370. package/dist/integration/xpath/static-dom/StaticNamedNode.d.ts +0 -17
  371. package/dist/lib/client-reactivity/submission/createInstanceSubmissionState.d.ts +0 -3
  372. package/dist/lib/client-reactivity/submission/createLeafNodeSubmissionState.d.ts +0 -3
  373. package/dist/lib/client-reactivity/submission/createNodeRangeSubmissionState.d.ts +0 -4
  374. package/dist/lib/client-reactivity/submission/createParentNodeSubmissionState.d.ts +0 -4
  375. package/dist/lib/client-reactivity/submission/createValueNodeSubmissionState.d.ts +0 -3
  376. package/dist/lib/client-reactivity/submission/prepareSubmission.d.ts +0 -8
  377. package/dist/lib/reactivity/createSelectItems.d.ts +0 -16
  378. package/dist/lib/reactivity/createValueState.d.ts +0 -40
  379. package/dist/parse/body/control/select/ItemDefinition.d.ts +0 -13
  380. package/dist/parse/body/control/select/ItemsetDefinition.d.ts +0 -17
  381. package/dist/parse/body/control/select/ItemsetNodesetContext.d.ts +0 -9
  382. package/dist/parse/model/ItextTranslation/ItextTranslationDefinition.d.ts +0 -4
  383. package/dist/parse/model/ItextTranslation/ItextTranslationRootDefinition.d.ts +0 -8
  384. package/dist/parse/model/ItextTranslation/ItextTranslationsDefinition.d.ts +0 -8
  385. package/dist/parse/model/RepeatInstanceDefinition.d.ts +0 -14
  386. package/dist/parse/model/RepeatRangeDefinition.d.ts +0 -29
  387. package/dist/parse/model/RepeatTemplateDefinition.d.ts +0 -28
  388. package/dist/parse/model/SecondaryInstance/SecondaryInstanceDefinition.d.ts +0 -4
  389. package/dist/parse/model/SecondaryInstance/SecondaryInstanceRootDefinition.d.ts +0 -7
  390. package/src/client/EngineConfig.ts +0 -84
  391. package/src/client/submission/SubmissionData.ts +0 -12
  392. package/src/client/submission/SubmissionInstanceFile.ts +0 -9
  393. package/src/client/submission/SubmissionOptions.ts +0 -28
  394. package/src/client/submission/SubmissionResult.ts +0 -124
  395. package/src/client/submission/SubmissionState.ts +0 -14
  396. package/src/client/unsupported/RangeNode.ts +0 -14
  397. package/src/client/unsupported/RankNode.ts +0 -14
  398. package/src/instance/SelectField.ts +0 -263
  399. package/src/instance/abstract/UnsupportedControl.ts +0 -174
  400. package/src/instance/children.ts +0 -158
  401. package/src/instance/index.ts +0 -55
  402. package/src/instance/internal-api/ValueContext.ts +0 -28
  403. package/src/instance/internal-api/submission/ClientReactiveSubmittableInstance.ts +0 -20
  404. package/src/instance/internal-api/submission/ClientReactiveSubmittableLeafNode.ts +0 -42
  405. package/src/instance/internal-api/submission/ClientReactiveSubmittableParentNode.ts +0 -25
  406. package/src/instance/internal-api/submission/ClientReactiveSubmittableValueNode.ts +0 -23
  407. package/src/instance/unsupported/RangeControl.ts +0 -9
  408. package/src/instance/unsupported/RankControl.ts +0 -9
  409. package/src/integration/xpath/static-dom/StaticNamedNode.ts +0 -45
  410. package/src/lib/client-reactivity/submission/createInstanceSubmissionState.ts +0 -12
  411. package/src/lib/client-reactivity/submission/createLeafNodeSubmissionState.ts +0 -20
  412. package/src/lib/client-reactivity/submission/createNodeRangeSubmissionState.ts +0 -17
  413. package/src/lib/client-reactivity/submission/createParentNodeSubmissionState.ts +0 -22
  414. package/src/lib/client-reactivity/submission/createValueNodeSubmissionState.ts +0 -21
  415. package/src/lib/client-reactivity/submission/prepareSubmission.ts +0 -172
  416. package/src/lib/reactivity/createValueState.ts +0 -200
  417. package/src/parse/body/control/select/ItemsetNodesetContext.ts +0 -21
  418. package/src/parse/model/ItextTranslation/ItextTranslationDefinition.ts +0 -4
  419. package/src/parse/model/ItextTranslation/ItextTranslationRootDefinition.ts +0 -41
  420. package/src/parse/model/ItextTranslation/ItextTranslationsDefinition.ts +0 -31
  421. package/src/parse/model/RepeatInstanceDefinition.ts +0 -34
  422. package/src/parse/model/RepeatRangeDefinition.ts +0 -94
  423. package/src/parse/model/RepeatTemplateDefinition.ts +0 -145
  424. package/src/parse/model/SecondaryInstance/SecondaryInstanceDefinition.ts +0 -4
  425. package/src/parse/model/SecondaryInstance/SecondaryInstanceRootDefinition.ts +0 -12
@@ -1,21 +0,0 @@
1
- import type { SubmissionState } from '../../../client/submission/SubmissionState.ts';
2
- import type { ClientReactiveSubmittableValueNode } from '../../../instance/internal-api/submission/ClientReactiveSubmittableValueNode.ts';
3
- import { escapeXMLText, serializeLeafElementXML } from '../../xml-serialization.ts';
4
-
5
- export const createValueNodeSubmissionState = (
6
- node: ClientReactiveSubmittableValueNode
7
- ): SubmissionState => {
8
- const { nodeName } = node.definition;
9
-
10
- return {
11
- get submissionXML() {
12
- if (!node.currentState.relevant) {
13
- return '';
14
- }
15
-
16
- const xmlValue = escapeXMLText(node.currentState.instanceValue);
17
-
18
- return serializeLeafElementXML(nodeName, xmlValue);
19
- },
20
- };
21
- };
@@ -1,172 +0,0 @@
1
- import { UnreachableError } from '@getodk/common/lib/error/UnreachableError.ts';
2
- import {
3
- SUBMISSION_INSTANCE_FILE_NAME,
4
- SUBMISSION_INSTANCE_FILE_TYPE,
5
- } from '../../../client/constants.ts';
6
- import type { SubmissionData } from '../../../client/submission/SubmissionData.ts';
7
- import type { SubmissionDefinition } from '../../../client/submission/SubmissionDefinition.ts';
8
- import type { SubmissionInstanceFile } from '../../../client/submission/SubmissionInstanceFile.ts';
9
- import type { SubmissionChunkedType } from '../../../client/submission/SubmissionOptions.ts';
10
- import type { SubmissionResult } from '../../../client/submission/SubmissionResult.ts';
11
- import type { DescendantNodeViolationReference } from '../../../client/validation.ts';
12
- import type { ClientReactiveSubmittableInstance } from '../../../instance/internal-api/submission/ClientReactiveSubmittableInstance.ts';
13
-
14
- class InstanceFile extends File implements SubmissionInstanceFile {
15
- override readonly name = SUBMISSION_INSTANCE_FILE_NAME;
16
- override readonly type = SUBMISSION_INSTANCE_FILE_TYPE;
17
-
18
- constructor(instanceRoot: ClientReactiveSubmittableInstance) {
19
- const { submissionXML } = instanceRoot.submissionState;
20
-
21
- super([submissionXML], SUBMISSION_INSTANCE_FILE_NAME, {
22
- type: SUBMISSION_INSTANCE_FILE_TYPE,
23
- });
24
- }
25
- }
26
-
27
- type AssertSubmissionData = (data: FormData) => asserts data is SubmissionData;
28
-
29
- const assertSubmissionData: AssertSubmissionData = (data) => {
30
- const instanceFile = data.get(SUBMISSION_INSTANCE_FILE_NAME);
31
-
32
- if (!(instanceFile instanceof InstanceFile)) {
33
- throw new Error(`Invalid SubmissionData`);
34
- }
35
- };
36
-
37
- class InstanceSubmissionData extends FormData {
38
- static from(instanceFile: InstanceFile, attachments: readonly File[]): SubmissionData {
39
- const data = new this(instanceFile, attachments);
40
-
41
- assertSubmissionData(data);
42
-
43
- return data;
44
- }
45
-
46
- private constructor(
47
- readonly instanceFile: InstanceFile,
48
- readonly attachments: readonly File[]
49
- ) {
50
- super();
51
-
52
- this.set(SUBMISSION_INSTANCE_FILE_NAME, instanceFile);
53
-
54
- attachments.forEach((attachment) => {
55
- const { name } = attachment;
56
-
57
- if (name === SUBMISSION_INSTANCE_FILE_NAME && attachment !== instanceFile) {
58
- throw new Error(
59
- `Failed to add conflicting attachment with name ${SUBMISSION_INSTANCE_FILE_NAME}`
60
- );
61
- }
62
-
63
- this.set(name, attachment);
64
- });
65
- }
66
- }
67
-
68
- interface PendingValidation {
69
- readonly status: 'pending';
70
- readonly violations: readonly DescendantNodeViolationReference[];
71
- }
72
-
73
- interface ReadyValidation {
74
- readonly status: 'ready';
75
- readonly violations: null;
76
- }
77
-
78
- type SubmissionInstanceStateValidation = PendingValidation | ReadyValidation;
79
-
80
- const validateSubmission = (
81
- instanceRoot: ClientReactiveSubmittableInstance
82
- ): SubmissionInstanceStateValidation => {
83
- const { violations } = instanceRoot.validationState;
84
-
85
- if (violations.length === 0) {
86
- return {
87
- status: 'ready',
88
- violations: null,
89
- };
90
- }
91
-
92
- return {
93
- status: 'pending',
94
- violations,
95
- };
96
- };
97
-
98
- const monolithicSubmissionResult = (
99
- validation: SubmissionInstanceStateValidation,
100
- definition: SubmissionDefinition,
101
- instanceFile: InstanceFile,
102
- attachments: readonly File[]
103
- ): SubmissionResult<'monolithic'> => {
104
- const data = InstanceSubmissionData.from(instanceFile, attachments);
105
-
106
- return {
107
- ...validation,
108
- definition,
109
- data,
110
- };
111
- };
112
-
113
- interface ChunkedSubmissionResultOptions {
114
- readonly maxSize: number;
115
- }
116
-
117
- const chunkedSubmissionResult = (
118
- validation: SubmissionInstanceStateValidation,
119
- definition: SubmissionDefinition,
120
- instanceFile: InstanceFile,
121
- attachments: readonly File[],
122
- options: ChunkedSubmissionResultOptions
123
- ): SubmissionResult<'chunked'> => {
124
- if (attachments.length > 0 || options.maxSize !== Infinity) {
125
- throw new Error('Submission chunking pending implementation');
126
- }
127
-
128
- const data = InstanceSubmissionData.from(instanceFile, attachments);
129
-
130
- return {
131
- ...validation,
132
- definition,
133
- data: [data],
134
- };
135
- };
136
-
137
- export interface PrepeareSubmissionOptions<ChunkedType extends SubmissionChunkedType> {
138
- readonly chunked: ChunkedType;
139
- readonly maxSize: number;
140
- }
141
-
142
- export const prepareSubmission = <ChunkedType extends SubmissionChunkedType>(
143
- instanceRoot: ClientReactiveSubmittableInstance,
144
- options: PrepeareSubmissionOptions<ChunkedType>
145
- ): SubmissionResult<ChunkedType> => {
146
- const validation = validateSubmission(instanceRoot);
147
- const definition = instanceRoot.definition.submission;
148
- const instanceFile = new InstanceFile(instanceRoot);
149
- const attachments: readonly File[] = [];
150
-
151
- switch (options.chunked) {
152
- case 'chunked':
153
- return chunkedSubmissionResult(
154
- validation,
155
- definition,
156
- instanceFile,
157
- attachments,
158
- options
159
- ) satisfies SubmissionResult<'chunked'> as SubmissionResult<ChunkedType>;
160
-
161
- case 'monolithic':
162
- return monolithicSubmissionResult(
163
- validation,
164
- definition,
165
- instanceFile,
166
- attachments
167
- ) satisfies SubmissionResult<'monolithic'> as SubmissionResult<ChunkedType>;
168
-
169
- default:
170
- throw new UnreachableError(options.chunked);
171
- }
172
- };
@@ -1,200 +0,0 @@
1
- import { createComputed, createMemo, createSignal, untrack, type Signal } from 'solid-js';
2
- import { ErrorProductionDesignPendingError } from '../../error/ErrorProductionDesignPendingError.ts';
3
- import type { ValueContext } from '../../instance/internal-api/ValueContext.ts';
4
- import type { BindComputationExpression } from '../../parse/expression/BindComputationExpression.ts';
5
- import { createComputedExpression } from './createComputedExpression.ts';
6
- import type { SimpleAtomicState, SimpleAtomicStateSetter } from './types.ts';
7
-
8
- type InitialValueSource = 'FORM_DEFAULT' | 'PRIMARY_INSTANCE';
9
-
10
- export interface ValueStateOptions {
11
- /**
12
- * Specifies the source of a {@link createValueState} signal's initial
13
- * value state, where:
14
- *
15
- * - 'FORM_DEFAULT': Derives the initial state from the form's
16
- * definition of the node itself. This is the default option, appropriate
17
- * when initializing a form without additional primary instance data. In
18
- * other words, this value should not be used for edits.
19
- *
20
- * - 'PRIMARY_INSTANCE': Derives the initial state from the current text
21
- * content of the {@link ValueNode.contextNode}. This option
22
- * should be specified when initializing a form with existing primary
23
- * instance data, such as when editing a previous submission.
24
- *
25
- * @default 'FORM_DEFAULT'
26
- *
27
- * Specifies whether a {@link createV} signal's initial state
28
- * should be derived from the current text content of the
29
- * {@link ValueNode.contextNode | primary instance DOM state}.
30
- */
31
- readonly initialValueSource?: InitialValueSource;
32
- }
33
-
34
- const getInitialValue = <RuntimeValue>(
35
- context: ValueContext<RuntimeValue>,
36
- options: ValueStateOptions
37
- ): string => {
38
- const { initialValueSource = 'FORM_DEFAULT' } = options;
39
-
40
- if (initialValueSource === 'FORM_DEFAULT') {
41
- return context.definition.defaultValue;
42
- }
43
-
44
- throw new ErrorProductionDesignPendingError('Edit implementation pending');
45
- };
46
-
47
- type BaseValueState = Signal<string>;
48
-
49
- type RelevantValueState = SimpleAtomicState<string>;
50
-
51
- /**
52
- * Wraps {@link baseValueState} in a signal-like interface which:
53
- *
54
- * - produces a blank value for nodes ({@link context}) in a non-relevant state
55
- * - persists, and restores, the most recent non-blank value state when a
56
- * node/context's relevance is restored
57
- */
58
- const createRelevantValueState = <RuntimeValue>(
59
- context: ValueContext<RuntimeValue>,
60
- baseValueState: BaseValueState
61
- ): RelevantValueState => {
62
- return context.scope.runTask(() => {
63
- const [getRelevantValue, setValue] = baseValueState;
64
-
65
- const getValue = createMemo(() => {
66
- if (context.isRelevant()) {
67
- return getRelevantValue();
68
- }
69
-
70
- return '';
71
- });
72
-
73
- return [getValue, setValue];
74
- });
75
- };
76
-
77
- type RuntimeValueState<RuntimeValue> = SimpleAtomicState<RuntimeValue>;
78
-
79
- /**
80
- * Wraps {@link relevantValueState} in a signal-like interface which
81
- * automatically encodes and decodes a node's runtime value representation:
82
- *
83
- * - Values read by a node will be read from the current state as persisted in
84
- * the primary instance, then {@link ValueContext.decodeValue | decoded} (as
85
- * implemented by that node) into a format suitable for the rest of the
86
- * functionality provided by that node.
87
- *
88
- * - Values written by a node will be {@link ValueContext.encodeValue | encoded}
89
- * (also as implemented by that node) into a string value appropriate for
90
- * serialization in an instance submission.
91
- */
92
- const createRuntimeValueState = <RuntimeValue>(
93
- context: ValueContext<RuntimeValue>,
94
- relevantValueState: RelevantValueState
95
- ): RuntimeValueState<RuntimeValue> => {
96
- const { decodeValue, encodeValue } = context;
97
-
98
- return context.scope.runTask(() => {
99
- const [primaryInstanceValue, setPrimaryInstanceValue] = relevantValueState;
100
- const getRuntimeValue = createMemo(() => {
101
- return decodeValue(primaryInstanceValue());
102
- });
103
- const setRuntimeValue: SimpleAtomicStateSetter<RuntimeValue> = (value) => {
104
- const encodedValue = encodeValue(value);
105
-
106
- return decodeValue(setPrimaryInstanceValue(encodedValue));
107
- };
108
-
109
- return [getRuntimeValue, setRuntimeValue];
110
- });
111
- };
112
-
113
- /**
114
- * For fields with a `readonly` bind expression, prevent downstream
115
- * (client/user) writes when the field is in a `readonly` state.
116
- */
117
- const guardDownstreamReadonlyWrites = <RuntimeValue>(
118
- context: ValueContext<RuntimeValue>,
119
- baseState: SimpleAtomicState<RuntimeValue>
120
- ): SimpleAtomicState<RuntimeValue> => {
121
- const { readonly } = context.definition.bind;
122
-
123
- if (readonly.isDefaultExpression) {
124
- return baseState;
125
- }
126
-
127
- const [getValue, baseSetValue] = baseState;
128
-
129
- const setValue: SimpleAtomicStateSetter<RuntimeValue> = (value) => {
130
- if (context.isReadonly()) {
131
- const reference = untrack(() => context.contextReference());
132
-
133
- throw new Error(`Cannot write to readonly field: ${reference}`);
134
- }
135
-
136
- return baseSetValue(value);
137
- };
138
-
139
- return [getValue, setValue];
140
- };
141
-
142
- /**
143
- * Defines a reactive effect which writes the result of `calculate` bind
144
- * computations to the provided value setter, on initialization and any
145
- * subsequent reactive update.
146
- */
147
- const createCalculation = <RuntimeValue>(
148
- context: ValueContext<RuntimeValue>,
149
- setValue: SimpleAtomicStateSetter<RuntimeValue>,
150
- calculateDefinition: BindComputationExpression<'calculate'>
151
- ): void => {
152
- context.scope.runTask(() => {
153
- const calculate = createComputedExpression(context, calculateDefinition, {
154
- defaultValue: '',
155
- });
156
-
157
- createComputed(() => {
158
- if (context.isAttached() && context.isRelevant()) {
159
- const calculated = calculate();
160
- const value = context.decodeValue(calculated);
161
-
162
- setValue(value);
163
- }
164
- });
165
- });
166
- };
167
-
168
- type ValueState<RuntimeValue> = SimpleAtomicState<RuntimeValue>;
169
-
170
- /**
171
- * Provides a consistent interface for value nodes of any type which:
172
- *
173
- * - derives initial state from either an existing instance (e.g. for edits) or
174
- * the node's definition (e.g. initializing a new submission)
175
- * - decodes current primary instance state into the value node's runtime type
176
- * - encodes updated runtime values to store updated instance state
177
- * - initializes reactive computation of `calculate` bind expressions for those
178
- * nodes defined with one
179
- * - prevents downstream writes to nodes in a readonly state
180
- */
181
- export const createValueState = <RuntimeValue>(
182
- context: ValueContext<RuntimeValue>,
183
- options: ValueStateOptions = {}
184
- ): ValueState<RuntimeValue> => {
185
- return context.scope.runTask(() => {
186
- const initialValue = getInitialValue(context, options);
187
- const baseValueState = createSignal(initialValue);
188
- const valueState = createRelevantValueState(context, baseValueState);
189
- const runtimeState = createRuntimeValueState(context, valueState);
190
- const { calculate } = context.definition.bind;
191
-
192
- if (calculate != null) {
193
- const [, setValue] = runtimeState;
194
-
195
- createCalculation(context, setValue, calculate);
196
- }
197
-
198
- return guardDownstreamReadonlyWrites(context, runtimeState);
199
- });
200
- };
@@ -1,21 +0,0 @@
1
- import { DependencyContext } from '../../../expression/abstract/DependencyContext.ts';
2
- import type { ItemsetDefinition } from './ItemsetDefinition.ts';
3
-
4
- export class ItemsetNodesetContext extends DependencyContext {
5
- override readonly parentReference = null;
6
- override readonly reference: string;
7
-
8
- constructor(
9
- protected readonly itemset: ItemsetDefinition,
10
- nodesetExpression: string
11
- ) {
12
- super();
13
-
14
- this.reference = nodesetExpression;
15
- }
16
-
17
- override set isTranslated(value: true) {
18
- super.isTranslated = value;
19
- this.itemset.isTranslated = value;
20
- }
21
- }
@@ -1,4 +0,0 @@
1
- import { StaticDocument } from '../../../integration/xpath/static-dom/StaticDocument.ts';
2
- import { ItextTranslationRootDefinition } from './ItextTranslationRootDefinition.ts';
3
-
4
- export class ItextTranslationDefinition extends StaticDocument<ItextTranslationRootDefinition> {}
@@ -1,41 +0,0 @@
1
- import type { XFormsItextTranslationElement } from '@getodk/xpath';
2
- import { XFORMS_KNOWN_ATTRIBUTE, XFORMS_LOCAL_NAME } from '@getodk/xpath';
3
- import { StaticElement } from '../../../integration/xpath/static-dom/StaticElement.ts';
4
-
5
- // prettier-ignore
6
- type ItextTranslationRootKnownAttributeValue<LocalName extends string> =
7
- LocalName extends 'lang'
8
- ? string
9
- : string | null;
10
-
11
- type AssertItextTranslationRootKnownAttributeValue = <LocalName extends string>(
12
- localName: LocalName,
13
- value: string | null
14
- ) => asserts value is ItextTranslationRootKnownAttributeValue<LocalName>;
15
-
16
- const assertItextTranslationRootKnownAttributeValue: AssertItextTranslationRootKnownAttributeValue =
17
- (localName, value) => {
18
- if (localName === 'lang' && value == null) {
19
- throw new Error('Invalid itext <translation> element: missing `lang` attribute');
20
- }
21
- };
22
-
23
- export class ItextTranslationRootDefinition
24
- extends StaticElement
25
- implements XFormsItextTranslationElement<ItextTranslationRootDefinition>
26
- {
27
- override readonly [XFORMS_LOCAL_NAME] = 'translation';
28
- override readonly [XFORMS_KNOWN_ATTRIBUTE] = 'lang';
29
-
30
- override getAttributeValue(localName: 'lang'): string;
31
- override getAttributeValue(localName: string): string | null;
32
- override getAttributeValue<LocalName extends string>(
33
- localName: LocalName
34
- ): ItextTranslationRootKnownAttributeValue<LocalName> {
35
- const value = super.getAttributeValue(localName);
36
-
37
- assertItextTranslationRootKnownAttributeValue(localName, value);
38
-
39
- return value;
40
- }
41
- }
@@ -1,31 +0,0 @@
1
- import type { XFormsItextTranslationMap } from '@getodk/xpath';
2
- import type { EngineXPathNode } from '../../../integration/xpath/adapter/kind.ts';
3
- import { parseStaticDocumentFromDOMSubtree } from '../../shared/parseStaticDocumentFromDOMSubtree.ts';
4
- import type { XFormDOM } from '../../XFormDOM.ts';
5
- import { ItextTranslationDefinition } from './ItextTranslationDefinition.ts';
6
- import { ItextTranslationRootDefinition } from './ItextTranslationRootDefinition.ts';
7
-
8
- export class ItextTranslationsDefinition
9
- extends Map<string, ItextTranslationRootDefinition>
10
- implements XFormsItextTranslationMap<EngineXPathNode>
11
- {
12
- static from(xformDOM: XFormDOM): ItextTranslationsDefinition {
13
- const translationDefinitions = xformDOM.itextTranslationElements.map((element) => {
14
- return parseStaticDocumentFromDOMSubtree(
15
- ItextTranslationDefinition,
16
- ItextTranslationRootDefinition,
17
- element
18
- );
19
- });
20
-
21
- return new this(translationDefinitions);
22
- }
23
-
24
- private constructor(translations: readonly ItextTranslationDefinition[]) {
25
- super(
26
- translations.map(({ root }) => {
27
- return [root.getAttributeValue('lang'), root];
28
- })
29
- );
30
- }
31
- }
@@ -1,34 +0,0 @@
1
- import { RepeatElementDefinition } from '../body/RepeatElementDefinition.ts';
2
- import { DescendentNodeDefinition } from './DescendentNodeDefinition.ts';
3
- import type { ChildNodeDefinition, NodeDefinition } from './NodeDefinition.ts';
4
- import type { AnyRepeatRangeDefinition } from './RepeatRangeDefinition.ts';
5
-
6
- export class RepeatInstanceDefinition
7
- extends DescendentNodeDefinition<'repeat-instance', RepeatElementDefinition>
8
- implements NodeDefinition<'repeat-instance'>
9
- {
10
- readonly type = 'repeat-instance';
11
-
12
- readonly nodeName: string;
13
- readonly children: readonly ChildNodeDefinition[];
14
- readonly instances = null;
15
- readonly defaultValue = null;
16
-
17
- constructor(
18
- range: AnyRepeatRangeDefinition,
19
- readonly node: Element
20
- ) {
21
- const { bind, bodyElement, parent, root } = range;
22
-
23
- super(parent, bind, bodyElement);
24
-
25
- this.nodeName = range.nodeName;
26
- this.children = root.buildSubtree(this);
27
- }
28
-
29
- toJSON() {
30
- const { bind, bodyElement, parent, root, ...rest } = this;
31
-
32
- return rest;
33
- }
34
- }
@@ -1,94 +0,0 @@
1
- import type { RepeatElementDefinition } from '../body/RepeatElementDefinition.ts';
2
- import { RepeatCountControlExpression } from '../expression/RepeatCountControlExpression.ts';
3
- import type { BindDefinition } from './BindDefinition.ts';
4
- import { DescendentNodeDefinition } from './DescendentNodeDefinition.ts';
5
- import type { NodeDefinition, ParentNodeDefinition } from './NodeDefinition.ts';
6
- import { RepeatInstanceDefinition } from './RepeatInstanceDefinition.ts';
7
- import { RepeatTemplateDefinition } from './RepeatTemplateDefinition.ts';
8
-
9
- export interface ControlledRepeatRangeDefinition extends RepeatRangeDefinition {
10
- readonly count: RepeatCountControlExpression;
11
- }
12
-
13
- export interface UncontrolledRepeatRangeDefinition extends RepeatRangeDefinition {
14
- readonly count: null;
15
- }
16
-
17
- // prettier-ignore
18
- export type AnyRepeatRangeDefinition =
19
- | ControlledRepeatRangeDefinition
20
- | UncontrolledRepeatRangeDefinition;
21
-
22
- type AssertRepeatRangeDefinitionUnion = (
23
- definition: RepeatRangeDefinition
24
- ) => asserts definition is AnyRepeatRangeDefinition;
25
-
26
- const assertRepeatRangeDefinitionUnion: AssertRepeatRangeDefinitionUnion = (_definition) => {
27
- // Intentional no-op, used to guide the type checker. Implementation would
28
- // check _definition.count == null || _definition.count != null, which is
29
- // tautologically true!
30
- };
31
-
32
- export class RepeatRangeDefinition
33
- extends DescendentNodeDefinition<'repeat-range', RepeatElementDefinition>
34
- implements NodeDefinition<'repeat-range'>
35
- {
36
- static from(
37
- parent: ParentNodeDefinition,
38
- bind: BindDefinition,
39
- bodyElement: RepeatElementDefinition,
40
- modelNodes: readonly [Element, ...Element[]]
41
- ): AnyRepeatRangeDefinition {
42
- const definition = new this(parent, bind, bodyElement, modelNodes);
43
-
44
- assertRepeatRangeDefinitionUnion(definition);
45
-
46
- return definition;
47
- }
48
-
49
- readonly type = 'repeat-range';
50
-
51
- readonly template: RepeatTemplateDefinition;
52
- readonly children = null;
53
- readonly instances: RepeatInstanceDefinition[];
54
- readonly count: RepeatCountControlExpression | null;
55
-
56
- readonly node = null;
57
- readonly nodeName: string;
58
- readonly defaultValue = null;
59
-
60
- private constructor(
61
- parent: ParentNodeDefinition,
62
- bind: BindDefinition,
63
- bodyElement: RepeatElementDefinition,
64
- modelNodes: readonly [Element, ...Element[]]
65
- ) {
66
- super(parent, bind, bodyElement);
67
-
68
- const { template, instanceNodes } = RepeatTemplateDefinition.parseModelNodes(this, modelNodes);
69
-
70
- this.template = template;
71
- this.nodeName = template.nodeName;
72
- this.count = RepeatCountControlExpression.from(bodyElement, instanceNodes.length);
73
-
74
- assertRepeatRangeDefinitionUnion(this);
75
-
76
- this.instances = instanceNodes.map((element) => {
77
- return new RepeatInstanceDefinition(this, element);
78
- });
79
- }
80
-
81
- isControlled(): this is ControlledRepeatRangeDefinition {
82
- return this.count != null;
83
- }
84
-
85
- isUncontrolled(): this is UncontrolledRepeatRangeDefinition {
86
- return this.count == null;
87
- }
88
-
89
- toJSON() {
90
- const { bind, bodyElement: groupDefinition, parent, root, ...rest } = this;
91
-
92
- return rest;
93
- }
94
- }