@getodk/xforms-engine 0.6.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 (296) hide show
  1. package/dist/client/BaseNode.d.ts +4 -4
  2. package/dist/client/BaseValueNode.d.ts +7 -3
  3. package/dist/client/RootNode.d.ts +20 -16
  4. package/dist/client/constants.d.ts +11 -12
  5. package/dist/client/form/CreateFormInstance.d.ts +14 -0
  6. package/dist/client/form/EditFormInstance.d.ts +62 -0
  7. package/dist/client/form/FormInstance.d.ts +104 -0
  8. package/dist/client/form/FormInstanceConfig.d.ts +17 -0
  9. package/dist/client/form/FormResource.d.ts +1 -0
  10. package/dist/client/form/LoadForm.d.ts +79 -0
  11. package/dist/client/form/LoadFormResult.d.ts +67 -0
  12. package/dist/client/form/RestoreFormInstance.d.ts +8 -0
  13. package/dist/client/index.d.ts +37 -11
  14. package/dist/client/node-types.d.ts +2 -2
  15. package/dist/client/repeat/BaseRepeatRangeNode.d.ts +3 -4
  16. package/dist/client/repeat/RepeatInstanceNode.d.ts +4 -5
  17. package/dist/client/repeat/RepeatRangeControlledNode.d.ts +2 -2
  18. package/dist/client/repeat/RepeatRangeUncontrolledNode.d.ts +2 -2
  19. package/dist/client/resources.d.ts +1 -1
  20. package/dist/client/serialization/InstanceData.d.ts +12 -0
  21. package/dist/client/serialization/InstanceFile.d.ts +6 -0
  22. package/dist/client/serialization/InstancePayload.d.ts +93 -0
  23. package/dist/client/serialization/InstancePayloadOptions.d.ts +23 -0
  24. package/dist/client/serialization/InstanceState.d.ts +12 -0
  25. package/dist/client/submission/{SubmissionDefinition.d.ts → SubmissionMeta.d.ts} +1 -1
  26. package/dist/entrypoints/FormInstance.d.ts +20 -0
  27. package/dist/entrypoints/FormResult/BaseFormResult.d.ts +22 -0
  28. package/dist/entrypoints/FormResult/BaseInstantiableFormResult.d.ts +25 -0
  29. package/dist/entrypoints/FormResult/FormFailureResult.d.ts +17 -0
  30. package/dist/entrypoints/FormResult/FormSuccessResult.d.ts +15 -0
  31. package/dist/entrypoints/FormResult/FormWarningResult.d.ts +15 -0
  32. package/dist/entrypoints/createInstance.d.ts +9 -0
  33. package/dist/entrypoints/editInstance.d.ts +9 -0
  34. package/dist/entrypoints/index.d.ts +4 -0
  35. package/dist/entrypoints/loadForm.d.ts +4 -0
  36. package/dist/entrypoints/restoreInstance.d.ts +9 -0
  37. package/dist/error/LoadFormFailureError.d.ts +9 -0
  38. package/dist/error/MalformedInstanceDataError.d.ts +3 -0
  39. package/dist/error/TemplatedNodeAttributeSerializationError.d.ts +22 -0
  40. package/dist/index.d.ts +2 -33
  41. package/dist/index.js +1915 -1419
  42. package/dist/index.js.map +1 -1
  43. package/dist/instance/Group.d.ts +6 -5
  44. package/dist/instance/InputControl.d.ts +5 -4
  45. package/dist/instance/ModelValue.d.ts +5 -4
  46. package/dist/instance/Note.d.ts +4 -3
  47. package/dist/instance/PrimaryInstance.d.ts +35 -8
  48. package/dist/instance/RangeControl.d.ts +5 -4
  49. package/dist/instance/RankControl.d.ts +6 -5
  50. package/dist/instance/Root.d.ts +7 -9
  51. package/dist/instance/SelectControl.d.ts +4 -3
  52. package/dist/instance/Subtree.d.ts +6 -5
  53. package/dist/instance/TriggerControl.d.ts +4 -3
  54. package/dist/instance/abstract/DescendantNode.d.ts +10 -1
  55. package/dist/instance/abstract/InstanceNode.d.ts +7 -4
  56. package/dist/instance/abstract/ValueNode.d.ts +7 -5
  57. package/dist/instance/children/DescendantNodeInitOptions.d.ts +32 -0
  58. package/dist/instance/{children.d.ts → children/buildChildren.d.ts} +1 -1
  59. package/dist/instance/children/childrenInitOptions.d.ts +9 -0
  60. package/dist/instance/children/normalizeChildInitOptions.d.ts +2 -0
  61. package/dist/instance/input/InitialInstanceState.d.ts +13 -0
  62. package/dist/instance/input/InstanceAttachmentMap.d.ts +19 -0
  63. package/dist/instance/internal-api/InstanceConfig.d.ts +2 -9
  64. package/dist/instance/internal-api/InstanceValueContext.d.ts +8 -1
  65. package/dist/instance/internal-api/serialization/ClientReactiveSerializableInstance.d.ts +14 -0
  66. package/dist/instance/internal-api/serialization/ClientReactiveSerializableLeafNode.d.ts +32 -0
  67. package/dist/instance/internal-api/serialization/ClientReactiveSerializableParentNode.d.ts +18 -0
  68. package/dist/instance/internal-api/serialization/ClientReactiveSerializableTemplatedNode.d.ts +13 -0
  69. package/dist/instance/internal-api/serialization/ClientReactiveSerializableValueNode.d.ts +21 -0
  70. package/dist/instance/repeat/BaseRepeatRange.d.ts +10 -8
  71. package/dist/instance/repeat/RepeatInstance.d.ts +10 -7
  72. package/dist/instance/repeat/RepeatRangeControlled.d.ts +27 -3
  73. package/dist/instance/repeat/RepeatRangeUncontrolled.d.ts +4 -3
  74. package/dist/instance/resource.d.ts +5 -1
  75. package/dist/instance/unsupported/UploadControl.d.ts +32 -4
  76. package/dist/integration/xpath/EngineXPathEvaluator.d.ts +2 -2
  77. package/dist/integration/xpath/adapter/kind.d.ts +4 -10
  78. package/dist/integration/xpath/static-dom/StaticAttribute.d.ts +4 -5
  79. package/dist/integration/xpath/static-dom/StaticDocument.d.ts +13 -10
  80. package/dist/integration/xpath/static-dom/StaticElement.d.ts +21 -22
  81. package/dist/integration/xpath/static-dom/StaticNode.d.ts +1 -1
  82. package/dist/integration/xpath/static-dom/StaticParentNode.d.ts +13 -0
  83. package/dist/integration/xpath/static-dom/staticNodeName.d.ts +3 -0
  84. package/dist/lib/client-reactivity/instance-state/createNodeRangeInstanceState.d.ts +4 -0
  85. package/dist/lib/client-reactivity/instance-state/createParentNodeInstanceState.d.ts +4 -0
  86. package/dist/lib/client-reactivity/instance-state/createPrimaryInstanceState.d.ts +3 -0
  87. package/dist/lib/client-reactivity/instance-state/createRootInstanceState.d.ts +3 -0
  88. package/dist/lib/client-reactivity/instance-state/createTemplatedNodeInstanceState.d.ts +6 -0
  89. package/dist/lib/client-reactivity/instance-state/createValueNodeInstanceState.d.ts +3 -0
  90. package/dist/lib/client-reactivity/instance-state/prepareInstancePayload.d.ts +8 -0
  91. package/dist/lib/codecs/TempUnsupportedControlCodec.d.ts +7 -0
  92. package/dist/lib/names/UnprefixedXFormsName.d.ts +4 -0
  93. package/dist/lib/reactivity/createInstanceValueState.d.ts +2 -27
  94. package/dist/parse/XFormDOM.d.ts +1 -1
  95. package/dist/parse/model/BindDefinition.d.ts +1 -1
  96. package/dist/parse/model/ItextTranslationsDefinition.d.ts +18 -0
  97. package/dist/parse/model/LeafNodeDefinition.d.ts +4 -5
  98. package/dist/parse/model/ModelBindMap.d.ts +1 -1
  99. package/dist/parse/model/ModelDefinition.d.ts +9 -2
  100. package/dist/parse/model/NodeDefinition.d.ts +18 -30
  101. package/dist/parse/model/NoteNodeDefinition.d.ts +3 -2
  102. package/dist/parse/model/RangeNodeDefinition.d.ts +2 -1
  103. package/dist/parse/model/RepeatDefinition.d.ts +62 -0
  104. package/dist/parse/model/RootAttributeDefinition.d.ts +1 -4
  105. package/dist/parse/model/RootAttributeMap.d.ts +2 -1
  106. package/dist/parse/model/RootDefinition.d.ts +7 -8
  107. package/dist/parse/model/SecondaryInstance/SecondaryInstancesDefinition.d.ts +15 -2
  108. package/dist/parse/model/SecondaryInstance/assertSecondaryInstanceDefinition.d.ts +5 -0
  109. package/dist/parse/model/SecondaryInstance/defineSecondaryInstance.d.ts +5 -0
  110. package/dist/parse/model/SecondaryInstance/sources/BlankSecondaryInstanceSource.d.ts +1 -7
  111. package/dist/parse/model/SecondaryInstance/sources/CSVExternalSecondaryInstance.d.ts +1 -1
  112. package/dist/parse/model/SecondaryInstance/sources/GeoJSONExternalSecondaryInstance.d.ts +1 -1
  113. package/dist/parse/model/SecondaryInstance/sources/InternalSecondaryInstanceSource.d.ts +1 -1
  114. package/dist/parse/model/SecondaryInstance/sources/SecondaryInstanceSource.d.ts +1 -1
  115. package/dist/parse/model/SecondaryInstance/sources/XMLExternalSecondaryInstanceSource.d.ts +1 -1
  116. package/dist/parse/model/{FormSubmissionDefinition.d.ts → SubmissionDefinition.d.ts} +2 -2
  117. package/dist/parse/model/SubtreeDefinition.d.ts +4 -5
  118. package/dist/parse/model/nodeDefinitionMap.d.ts +5 -0
  119. package/dist/parse/shared/parseInstanceXML.d.ts +21 -0
  120. package/dist/parse/shared/parseStaticDocumentFromDOMSubtree.d.ts +4 -21
  121. package/dist/solid.js +1709 -1213
  122. package/dist/solid.js.map +1 -1
  123. package/package.json +1 -1
  124. package/src/client/BaseNode.ts +4 -4
  125. package/src/client/BaseValueNode.ts +7 -3
  126. package/src/client/RootNode.ts +27 -19
  127. package/src/client/constants.ts +12 -14
  128. package/src/client/form/CreateFormInstance.ts +19 -0
  129. package/src/client/form/EditFormInstance.ts +93 -0
  130. package/src/client/form/FormInstance.ts +114 -0
  131. package/src/client/form/FormInstanceConfig.ts +18 -0
  132. package/src/client/form/FormResource.ts +1 -0
  133. package/src/client/form/LoadForm.ts +92 -0
  134. package/src/client/form/LoadFormResult.ts +103 -0
  135. package/src/client/form/RestoreFormInstance.ts +14 -0
  136. package/src/client/index.ts +47 -29
  137. package/src/client/node-types.ts +2 -4
  138. package/src/client/repeat/BaseRepeatRangeNode.ts +3 -4
  139. package/src/client/repeat/RepeatInstanceNode.ts +4 -8
  140. package/src/client/repeat/RepeatRangeControlledNode.ts +2 -2
  141. package/src/client/repeat/RepeatRangeUncontrolledNode.ts +2 -2
  142. package/src/client/resources.ts +2 -2
  143. package/src/client/serialization/InstanceData.ts +16 -0
  144. package/src/client/serialization/InstanceFile.ts +9 -0
  145. package/src/client/serialization/InstancePayload.ts +126 -0
  146. package/src/client/serialization/InstancePayloadOptions.ts +28 -0
  147. package/src/client/serialization/InstanceState.ts +14 -0
  148. package/src/client/submission/{SubmissionDefinition.ts → SubmissionMeta.ts} +1 -1
  149. package/src/entrypoints/FormInstance.ts +55 -0
  150. package/src/entrypoints/FormResult/BaseFormResult.ts +40 -0
  151. package/src/entrypoints/FormResult/BaseInstantiableFormResult.ts +109 -0
  152. package/src/entrypoints/FormResult/FormFailureResult.ts +44 -0
  153. package/src/entrypoints/FormResult/FormSuccessResult.ts +25 -0
  154. package/src/entrypoints/FormResult/FormWarningResult.ts +25 -0
  155. package/src/entrypoints/createInstance.ts +23 -0
  156. package/src/entrypoints/editInstance.ts +24 -0
  157. package/src/entrypoints/index.ts +4 -0
  158. package/src/entrypoints/loadForm.ts +154 -0
  159. package/src/entrypoints/restoreInstance.ts +27 -0
  160. package/src/error/LoadFormFailureError.ts +114 -0
  161. package/src/error/MalformedInstanceDataError.ts +3 -0
  162. package/src/error/TemplatedNodeAttributeSerializationError.ts +24 -0
  163. package/src/index.ts +2 -46
  164. package/src/instance/Group.ts +16 -15
  165. package/src/instance/InputControl.ts +17 -11
  166. package/src/instance/ModelValue.ts +17 -11
  167. package/src/instance/Note.ts +10 -9
  168. package/src/instance/PrimaryInstance.ts +69 -31
  169. package/src/instance/RangeControl.ts +17 -11
  170. package/src/instance/RankControl.ts +28 -19
  171. package/src/instance/Root.ts +20 -31
  172. package/src/instance/SelectControl.ts +21 -12
  173. package/src/instance/Subtree.ts +16 -15
  174. package/src/instance/TriggerControl.ts +21 -12
  175. package/src/instance/abstract/DescendantNode.ts +12 -2
  176. package/src/instance/abstract/InstanceNode.ts +9 -5
  177. package/src/instance/abstract/ValueNode.ts +11 -13
  178. package/src/instance/children/DescendantNodeInitOptions.ts +35 -0
  179. package/src/instance/{children.ts → children/buildChildren.ts} +55 -48
  180. package/src/instance/children/childrenInitOptions.ts +117 -0
  181. package/src/instance/children/normalizeChildInitOptions.ts +332 -0
  182. package/src/instance/input/InitialInstanceState.ts +108 -0
  183. package/src/instance/input/InstanceAttachmentMap.ts +142 -0
  184. package/src/instance/internal-api/InstanceConfig.ts +3 -10
  185. package/src/instance/internal-api/InstanceValueContext.ts +9 -1
  186. package/src/instance/internal-api/serialization/ClientReactiveSerializableInstance.ts +20 -0
  187. package/src/instance/internal-api/serialization/ClientReactiveSerializableLeafNode.ts +43 -0
  188. package/src/instance/internal-api/serialization/ClientReactiveSerializableParentNode.ts +26 -0
  189. package/src/instance/internal-api/serialization/ClientReactiveSerializableTemplatedNode.ts +24 -0
  190. package/src/instance/internal-api/serialization/ClientReactiveSerializableValueNode.ts +28 -0
  191. package/src/instance/repeat/BaseRepeatRange.ts +19 -24
  192. package/src/instance/repeat/RepeatInstance.ts +26 -19
  193. package/src/instance/repeat/RepeatRangeControlled.ts +90 -17
  194. package/src/instance/repeat/RepeatRangeUncontrolled.ts +10 -9
  195. package/src/instance/resource.ts +14 -1
  196. package/src/instance/unsupported/UploadControl.ts +116 -5
  197. package/src/integration/xpath/EngineXPathEvaluator.ts +2 -2
  198. package/src/integration/xpath/adapter/kind.ts +1 -28
  199. package/src/integration/xpath/adapter/traversal.ts +2 -2
  200. package/src/integration/xpath/static-dom/StaticAttribute.ts +6 -5
  201. package/src/integration/xpath/static-dom/StaticDocument.ts +17 -16
  202. package/src/integration/xpath/static-dom/StaticElement.ts +196 -50
  203. package/src/integration/xpath/static-dom/StaticNode.ts +1 -1
  204. package/src/integration/xpath/static-dom/StaticParentNode.ts +22 -0
  205. package/src/integration/xpath/static-dom/staticNodeName.ts +20 -0
  206. package/src/lib/client-reactivity/instance-state/createNodeRangeInstanceState.ts +17 -0
  207. package/src/lib/client-reactivity/instance-state/createParentNodeInstanceState.ts +22 -0
  208. package/src/lib/client-reactivity/instance-state/createPrimaryInstanceState.ts +12 -0
  209. package/src/lib/client-reactivity/{submission/createRootSubmissionState.ts → instance-state/createRootInstanceState.ts} +4 -4
  210. package/src/lib/client-reactivity/instance-state/createTemplatedNodeInstanceState.ts +31 -0
  211. package/src/lib/client-reactivity/instance-state/createValueNodeInstanceState.ts +21 -0
  212. package/src/lib/client-reactivity/instance-state/prepareInstancePayload.ts +173 -0
  213. package/src/lib/codecs/TempUnsupportedControlCodec.ts +32 -0
  214. package/src/lib/names/UnprefixedXFormsName.ts +12 -0
  215. package/src/lib/reactivity/createInstanceValueState.ts +27 -51
  216. package/src/parse/model/ItextTranslationsDefinition.ts +79 -0
  217. package/src/parse/model/LeafNodeDefinition.ts +3 -5
  218. package/src/parse/model/ModelDefinition.ts +36 -3
  219. package/src/parse/model/NodeDefinition.ts +19 -45
  220. package/src/parse/model/NoteNodeDefinition.ts +4 -3
  221. package/src/parse/model/RangeNodeDefinition.ts +3 -2
  222. package/src/parse/model/RepeatDefinition.ts +382 -0
  223. package/src/parse/model/RootAttributeDefinition.ts +6 -7
  224. package/src/parse/model/RootAttributeMap.ts +15 -10
  225. package/src/parse/model/RootDefinition.ts +17 -19
  226. package/src/parse/model/SecondaryInstance/SecondaryInstancesDefinition.ts +23 -2
  227. package/src/parse/model/SecondaryInstance/assertSecondaryInstanceDefinition.ts +14 -0
  228. package/src/parse/model/SecondaryInstance/defineSecondaryInstance.ts +32 -0
  229. package/src/parse/model/SecondaryInstance/sources/BlankSecondaryInstanceSource.ts +3 -24
  230. package/src/parse/model/SecondaryInstance/sources/CSVExternalSecondaryInstance.ts +33 -86
  231. package/src/parse/model/SecondaryInstance/sources/GeoJSONExternalSecondaryInstance.ts +64 -137
  232. package/src/parse/model/SecondaryInstance/sources/InternalSecondaryInstanceSource.ts +9 -7
  233. package/src/parse/model/SecondaryInstance/sources/SecondaryInstanceSource.ts +1 -1
  234. package/src/parse/model/SecondaryInstance/sources/XMLExternalSecondaryInstanceSource.ts +7 -7
  235. package/src/parse/model/{FormSubmissionDefinition.ts → SubmissionDefinition.ts} +2 -2
  236. package/src/parse/model/SubtreeDefinition.ts +4 -5
  237. package/src/parse/model/nodeDefinitionMap.ts +34 -0
  238. package/src/parse/shared/parseInstanceXML.ts +79 -0
  239. package/src/parse/shared/parseStaticDocumentFromDOMSubtree.ts +45 -130
  240. package/dist/client/EngineConfig.d.ts +0 -79
  241. package/dist/client/submission/SubmissionData.d.ts +0 -7
  242. package/dist/client/submission/SubmissionInstanceFile.d.ts +0 -6
  243. package/dist/client/submission/SubmissionOptions.d.ts +0 -23
  244. package/dist/client/submission/SubmissionResult.d.ts +0 -91
  245. package/dist/client/submission/SubmissionState.d.ts +0 -12
  246. package/dist/instance/abstract/UnsupportedControl.d.ts +0 -54
  247. package/dist/instance/index.d.ts +0 -8
  248. package/dist/instance/internal-api/ValueContext.d.ts +0 -23
  249. package/dist/instance/internal-api/submission/ClientReactiveSubmittableInstance.d.ts +0 -14
  250. package/dist/instance/internal-api/submission/ClientReactiveSubmittableLeafNode.d.ts +0 -32
  251. package/dist/instance/internal-api/submission/ClientReactiveSubmittableParentNode.d.ts +0 -19
  252. package/dist/instance/internal-api/submission/ClientReactiveSubmittableValueNode.d.ts +0 -18
  253. package/dist/lib/client-reactivity/submission/createInstanceSubmissionState.d.ts +0 -3
  254. package/dist/lib/client-reactivity/submission/createLeafNodeSubmissionState.d.ts +0 -3
  255. package/dist/lib/client-reactivity/submission/createNodeRangeSubmissionState.d.ts +0 -4
  256. package/dist/lib/client-reactivity/submission/createParentNodeSubmissionState.d.ts +0 -4
  257. package/dist/lib/client-reactivity/submission/createRootSubmissionState.d.ts +0 -3
  258. package/dist/lib/client-reactivity/submission/createValueNodeSubmissionState.d.ts +0 -3
  259. package/dist/lib/client-reactivity/submission/prepareSubmission.d.ts +0 -8
  260. package/dist/lib/reactivity/createValueState.d.ts +0 -40
  261. package/dist/parse/model/ItextTranslation/ItextTranslationDefinition.d.ts +0 -4
  262. package/dist/parse/model/ItextTranslation/ItextTranslationRootDefinition.d.ts +0 -9
  263. package/dist/parse/model/ItextTranslation/ItextTranslationsDefinition.d.ts +0 -8
  264. package/dist/parse/model/RepeatInstanceDefinition.d.ts +0 -17
  265. package/dist/parse/model/RepeatRangeDefinition.d.ts +0 -32
  266. package/dist/parse/model/RepeatTemplateDefinition.d.ts +0 -31
  267. package/dist/parse/model/SecondaryInstance/SecondaryInstanceDefinition.d.ts +0 -4
  268. package/dist/parse/model/SecondaryInstance/SecondaryInstanceRootDefinition.d.ts +0 -7
  269. package/src/client/EngineConfig.ts +0 -84
  270. package/src/client/submission/SubmissionData.ts +0 -12
  271. package/src/client/submission/SubmissionInstanceFile.ts +0 -9
  272. package/src/client/submission/SubmissionOptions.ts +0 -28
  273. package/src/client/submission/SubmissionResult.ts +0 -124
  274. package/src/client/submission/SubmissionState.ts +0 -14
  275. package/src/instance/abstract/UnsupportedControl.ts +0 -175
  276. package/src/instance/index.ts +0 -55
  277. package/src/instance/internal-api/ValueContext.ts +0 -28
  278. package/src/instance/internal-api/submission/ClientReactiveSubmittableInstance.ts +0 -20
  279. package/src/instance/internal-api/submission/ClientReactiveSubmittableLeafNode.ts +0 -43
  280. package/src/instance/internal-api/submission/ClientReactiveSubmittableParentNode.ts +0 -26
  281. package/src/instance/internal-api/submission/ClientReactiveSubmittableValueNode.ts +0 -24
  282. package/src/lib/client-reactivity/submission/createInstanceSubmissionState.ts +0 -12
  283. package/src/lib/client-reactivity/submission/createLeafNodeSubmissionState.ts +0 -20
  284. package/src/lib/client-reactivity/submission/createNodeRangeSubmissionState.ts +0 -17
  285. package/src/lib/client-reactivity/submission/createParentNodeSubmissionState.ts +0 -22
  286. package/src/lib/client-reactivity/submission/createValueNodeSubmissionState.ts +0 -21
  287. package/src/lib/client-reactivity/submission/prepareSubmission.ts +0 -172
  288. package/src/lib/reactivity/createValueState.ts +0 -200
  289. package/src/parse/model/ItextTranslation/ItextTranslationDefinition.ts +0 -4
  290. package/src/parse/model/ItextTranslation/ItextTranslationRootDefinition.ts +0 -42
  291. package/src/parse/model/ItextTranslation/ItextTranslationsDefinition.ts +0 -31
  292. package/src/parse/model/RepeatInstanceDefinition.ts +0 -38
  293. package/src/parse/model/RepeatRangeDefinition.ts +0 -98
  294. package/src/parse/model/RepeatTemplateDefinition.ts +0 -149
  295. package/src/parse/model/SecondaryInstance/SecondaryInstanceDefinition.ts +0 -4
  296. package/src/parse/model/SecondaryInstance/SecondaryInstanceRootDefinition.ts +0 -12
@@ -1,124 +0,0 @@
1
- import type { AnyViolation, DescendantNodeViolationReference } from '../validation.ts';
2
- import type { SubmissionData } from './SubmissionData.ts';
3
- import type { SubmissionDefinition } from './SubmissionDefinition.ts';
4
- import type { SubmissionChunkedType, SubmissionOptions } from './SubmissionOptions.ts';
5
-
6
- // prettier-ignore
7
- export type SubmissionResultStatus =
8
- // eslint-disable-next-line @typescript-eslint/sort-type-constituents
9
- | 'pending'
10
- | 'max-size-exceeded'
11
- | 'ready';
12
-
13
- // prettier-ignore
14
- type SubmissionResultData<ChunkedType extends SubmissionChunkedType> = {
15
- chunked: readonly [SubmissionData, ...SubmissionData[]];
16
- monolithic: SubmissionData;
17
- }[ChunkedType];
18
-
19
- /**
20
- * Provides detail about an individual submission attachment {@link File}s which
21
- * exceeds the client-specified {@link maxSize} for a
22
- * {@link SubmissionResult<'chunked'> | chunked submission result}. Clients may
23
- * use this value to provide guidance to users.
24
- *
25
- * @todo We may want to consider (a) making {@link maxSize} a configuration the
26
- * client can provide when initializing a form instance, rather than only on
27
- * submission; and then (b) treating a maximum size violation as another kind of
28
- * node-level violation. This would go beyond the kinds of validation specified
29
- * by ODK XForms, but it would make a lot of _conceptual sense_.
30
- *
31
- * It would almost certainly be helpful to alert users to violations as the
32
- * occur, rather than only at submission time (where they have likely already
33
- * moved on). This is something clients can do without engine support, but it
34
- * would likely promote good usability patterns if the engine makes it an
35
- * obvious and uniform option at the main engine/client entrypoint.
36
- *
37
- * @todo If we consider the above, we'd want to reframe _this interface_ to
38
- * match the shape of other {@link AnyViolation | violations} (adding it as a
39
- * member of that union). We'd also likely eliminate
40
- * {@link MaxSizeExceededResult} in the process, since
41
- * {@link PendingSubmissionResult} would then cover the case.
42
- */
43
- interface MaxSizeViolation {
44
- /**
45
- * Specifies the index of
46
- * {@link SubmissionResultData<'chunked'> | chunked submission data} where a
47
- * submission attachment {@link File} exceeds the client-specified
48
- * {@link maxSize}.
49
- */
50
- readonly dataIndex: number;
51
-
52
- /**
53
- * Specifies the name of the file which exceeds the client-specified
54
- * {@link maxSize}. This name can also be used as a key to access the
55
- * violating {@link File}/submission attachment, in the {@link SubmissionData}
56
- * at the specified {@link dataIndex}.
57
- */
58
- readonly fileName: string;
59
-
60
- /**
61
- * Reflects the client-specified maximum size for each chunk of a
62
- * {@link SubmissionResult<'chunked'> | chunked submission result}.
63
- */
64
- readonly maxSize: number;
65
-
66
- /**
67
- * Details the actual size of the violating {@link File}/submission
68
- * attachment. Along with {@link maxSize}. Clients may use the delta between
69
- * this value and {@link maxSize} to provide detailed guidance to users.
70
- */
71
- readonly actualSize: number;
72
- }
73
-
74
- // prettier-ignore
75
- type SubmissionResultViolation =
76
- | DescendantNodeViolationReference
77
- | MaxSizeViolation;
78
-
79
- interface BaseSubmissionResult<ChunkedType extends SubmissionChunkedType> {
80
- readonly status: SubmissionResultStatus;
81
- readonly definition: SubmissionDefinition;
82
- get violations(): readonly SubmissionResultViolation[] | null;
83
-
84
- /**
85
- * Submission data may be chunked according to the
86
- * {@link SubmissionOptions.maxSize | maxSize submission option}
87
- */
88
- readonly data: SubmissionResultData<ChunkedType>;
89
- }
90
-
91
- interface PendingSubmissionResult<ChunkedType extends SubmissionChunkedType>
92
- extends BaseSubmissionResult<ChunkedType> {
93
- readonly status: 'pending';
94
- get violations(): readonly DescendantNodeViolationReference[];
95
- }
96
-
97
- interface MaxSizeExceededResult extends BaseSubmissionResult<'chunked'> {
98
- readonly status: 'max-size-exceeded';
99
- get violations(): readonly MaxSizeViolation[];
100
- }
101
-
102
- interface ReadySubmissionResult<ChunkedType extends SubmissionChunkedType>
103
- extends BaseSubmissionResult<ChunkedType> {
104
- readonly status: 'ready';
105
- get violations(): null;
106
- }
107
-
108
- // prettier-ignore
109
- type CommonSubmissionResult<ChunkedType extends SubmissionChunkedType> =
110
- | PendingSubmissionResult<ChunkedType>
111
- | ReadySubmissionResult<ChunkedType>;
112
-
113
- // prettier-ignore
114
- export type ChunkedSubmissionResult =
115
- | CommonSubmissionResult<'chunked'>
116
- | MaxSizeExceededResult;
117
-
118
- export type MonolithicSubmissionResult = CommonSubmissionResult<'monolithic'>;
119
-
120
- // prettier-ignore
121
- export type SubmissionResult<ChunkedType extends SubmissionChunkedType> = {
122
- chunked: ChunkedSubmissionResult;
123
- monolithic: MonolithicSubmissionResult;
124
- }[ChunkedType];
@@ -1,14 +0,0 @@
1
- import type { RootNode } from '../RootNode.ts';
2
-
3
- export interface SubmissionState {
4
- /**
5
- * Represents the serialized XML state of a given node, as it will be prepared
6
- * for submission. The value produced in {@link RootNode.submissionState} is
7
- * the same serialization which will be produced for the complete submission.
8
- *
9
- * @todo Note that this particular aspect of the design doesn't yet address
10
- * production of unique file names. As such, this may change as we introduce
11
- * affected data types (and their supporting nodes).
12
- */
13
- get submissionXML(): string;
14
- }
@@ -1,175 +0,0 @@
1
- import { identity } from '@getodk/common/lib/identity.ts';
2
- import { XPathNodeKindKey } from '@getodk/xpath';
3
- import type { Accessor } from 'solid-js';
4
- import type { UnsupportedControlNodeType } from '../../client/node-types.ts';
5
- import type { SubmissionState } from '../../client/submission/SubmissionState.ts';
6
- import type { TextRange } from '../../client/TextRange.ts';
7
- import type {
8
- UnsupportedControlDefinition,
9
- UnsupportedControlElementDefinition,
10
- UnsupportedControlNode,
11
- } from '../../client/unsupported/UnsupportedControlNode.ts';
12
- import type { AnyViolation, LeafNodeValidationState } from '../../client/validation.ts';
13
- import type { XFormsXPathElement } from '../../integration/xpath/adapter/XFormsXPathNode.ts';
14
- import { createLeafNodeSubmissionState } from '../../lib/client-reactivity/submission/createLeafNodeSubmissionState.ts';
15
- import { createValueState } from '../../lib/reactivity/createValueState.ts';
16
- import type { CurrentState } from '../../lib/reactivity/node-state/createCurrentState.ts';
17
- import type { EngineState } from '../../lib/reactivity/node-state/createEngineState.ts';
18
- import {
19
- createSharedNodeState,
20
- type SharedNodeState,
21
- } from '../../lib/reactivity/node-state/createSharedNodeState.ts';
22
- import { createFieldHint } from '../../lib/reactivity/text/createFieldHint.ts';
23
- import { createNodeLabel } from '../../lib/reactivity/text/createNodeLabel.ts';
24
- import type { SimpleAtomicState } from '../../lib/reactivity/types.ts';
25
- import {
26
- createValidationState,
27
- type SharedValidationState,
28
- } from '../../lib/reactivity/validation/createValidation.ts';
29
- import type { UnknownAppearanceDefinition } from '../../parse/body/appearance/unknownAppearanceParser.ts';
30
- import type { AnyUnsupportedControl, GeneralParentNode } from '../hierarchy.ts';
31
- import type { EvaluationContext } from '../internal-api/EvaluationContext.ts';
32
- import type { ClientReactiveSubmittableLeafNode } from '../internal-api/submission/ClientReactiveSubmittableLeafNode.ts';
33
- import type { ValidationContext } from '../internal-api/ValidationContext.ts';
34
- import type { ValueContext } from '../internal-api/ValueContext.ts';
35
- import { DescendantNode, type DescendantNodeStateSpec } from './DescendantNode.ts';
36
-
37
- type TypedUnsupportedControlElementDefinition<Type extends UnsupportedControlNodeType> = Extract<
38
- UnsupportedControlElementDefinition,
39
- { readonly type: Type }
40
- >;
41
-
42
- interface TypedUnsupportedControlDefinition<Type extends UnsupportedControlNodeType>
43
- extends UnsupportedControlDefinition {
44
- readonly bodyElement: TypedUnsupportedControlElementDefinition<Type>;
45
- }
46
-
47
- interface UnsupportedControlStateSpec extends DescendantNodeStateSpec<unknown> {
48
- readonly label: Accessor<TextRange<'label'> | null>;
49
- readonly hint: Accessor<TextRange<'hint'> | null>;
50
- readonly children: null;
51
- readonly value: SimpleAtomicState<unknown>;
52
- readonly valueOptions: never;
53
- }
54
-
55
- class UnsupportedControlValueEncodeError extends Error {
56
- constructor(type: UnsupportedControlNodeType) {
57
- super(`Cannot encode state for node (type: ${type}) - not implemented`);
58
- }
59
- }
60
-
61
- class UnsupportedControlWriteError extends Error {
62
- constructor(type: UnsupportedControlNodeType) {
63
- super(`Cannot write state for node (type: ${type}) - not implemented`);
64
- }
65
- }
66
-
67
- export abstract class UnsupportedControl<Type extends UnsupportedControlNodeType>
68
- extends DescendantNode<
69
- TypedUnsupportedControlDefinition<Type>,
70
- UnsupportedControlStateSpec,
71
- GeneralParentNode,
72
- null
73
- >
74
- implements
75
- UnsupportedControlNode,
76
- XFormsXPathElement,
77
- EvaluationContext,
78
- ValidationContext,
79
- ValueContext<unknown>,
80
- ClientReactiveSubmittableLeafNode<unknown>
81
- {
82
- private readonly validation: SharedValidationState;
83
- protected readonly state: SharedNodeState<UnsupportedControlStateSpec>;
84
-
85
- // XFormsXPathElement
86
- override readonly [XPathNodeKindKey] = 'element';
87
-
88
- // InstanceNode
89
- protected readonly engineState: EngineState<UnsupportedControlStateSpec>;
90
-
91
- // UnsupportedControlNode
92
- abstract override readonly nodeType: Type;
93
-
94
- readonly appearances: UnknownAppearanceDefinition;
95
- readonly nodeOptions = null;
96
- readonly currentState: CurrentState<UnsupportedControlStateSpec>;
97
-
98
- get validationState(): LeafNodeValidationState {
99
- return this.validation.currentState;
100
- }
101
-
102
- readonly submissionState: SubmissionState;
103
-
104
- // ValueContext
105
- abstract override readonly contextNode: AnyUnsupportedControl & this;
106
-
107
- readonly encodeValue = (instanceValue: unknown): string => {
108
- const encoded = instanceValue;
109
-
110
- if (typeof encoded === 'string') {
111
- return encoded;
112
- }
113
-
114
- throw new UnsupportedControlValueEncodeError(this.nodeType);
115
- };
116
-
117
- readonly decodeValue = (instanceValue: unknown): unknown => {
118
- return identity(instanceValue);
119
- };
120
-
121
- constructor(parent: GeneralParentNode, definition: TypedUnsupportedControlDefinition<Type>) {
122
- super(parent, definition);
123
-
124
- this.appearances = definition.bodyElement.appearances;
125
-
126
- const sharedStateOptions = {
127
- clientStateFactory: this.engineConfig.stateFactory,
128
- };
129
-
130
- const stateSpec: UnsupportedControlStateSpec = {
131
- reference: this.contextReference,
132
- readonly: this.isReadonly,
133
- relevant: this.isRelevant,
134
- required: this.isRequired,
135
-
136
- label: createNodeLabel(this, definition),
137
- hint: createFieldHint(this, definition),
138
- children: null,
139
- valueOptions: null as never,
140
- value: createValueState<unknown>(this),
141
- };
142
-
143
- const state = createSharedNodeState(this.scope, stateSpec, sharedStateOptions);
144
-
145
- this.state = state;
146
- this.engineState = state.engineState;
147
- this.currentState = state.currentState;
148
- this.validation = createValidationState(this, sharedStateOptions);
149
- this.submissionState = createLeafNodeSubmissionState(this);
150
- }
151
-
152
- // XFormsXPathElement
153
- override getXPathValue(): string {
154
- return this.encodeValue(this.engineState.value);
155
- }
156
-
157
- // ValidationContext
158
- getViolation(): AnyViolation | null {
159
- return this.validation.engineState.violation;
160
- }
161
-
162
- isBlank(): boolean {
163
- return this.engineState.value === '';
164
- }
165
-
166
- // InstanceNode
167
- getChildren(): readonly [] {
168
- return [];
169
- }
170
-
171
- // UnsupportedControlNode
172
- setValue(_: never): never {
173
- throw new UnsupportedControlWriteError(this.nodeType);
174
- }
175
- }
@@ -1,55 +0,0 @@
1
- import { identity } from '@getodk/common/lib/identity.ts';
2
- import { getOwner } from 'solid-js';
3
- import type { EngineConfig } from '../client/EngineConfig.ts';
4
- import type { RootNode } from '../client/RootNode.ts';
5
- import { MISSING_RESOURCE_BEHAVIOR } from '../client/constants.ts';
6
- import type {
7
- InitializeFormOptions as BaseInitializeFormOptions,
8
- FormResource,
9
- InitializeForm,
10
- } from '../client/index.ts';
11
- import { retrieveSourceXMLResource } from '../instance/resource.ts';
12
- import { createReactiveScope } from '../lib/reactivity/scope.ts';
13
- import { createUniqueId } from '../lib/unique-id.ts';
14
- import { XFormDOM } from '../parse/XFormDOM.ts';
15
- import { XFormDefinition } from '../parse/XFormDefinition.ts';
16
- import { SecondaryInstancesDefinition } from '../parse/model/SecondaryInstance/SecondaryInstancesDefinition.ts';
17
- import { PrimaryInstance } from './PrimaryInstance.ts';
18
- import type { InstanceConfig } from './internal-api/InstanceConfig.ts';
19
-
20
- interface InitializeFormOptions extends BaseInitializeFormOptions {
21
- readonly config: Partial<InstanceConfig>;
22
- }
23
-
24
- const buildInstanceConfig = (options: EngineConfig = {}): InstanceConfig => {
25
- return {
26
- createUniqueId,
27
- fetchFormDefinition: options.fetchFormDefinition ?? fetch,
28
- fetchFormAttachment: options.fetchFormAttachment ?? fetch,
29
- missingResourceBehavior: options.missingResourceBehavior ?? MISSING_RESOURCE_BEHAVIOR.DEFAULT,
30
- stateFactory: options.stateFactory ?? identity,
31
- };
32
- };
33
-
34
- export const initializeForm = async (
35
- input: FormResource,
36
- options: Partial<InitializeFormOptions> = {}
37
- ): Promise<RootNode> => {
38
- const owner = getOwner();
39
- const scope = createReactiveScope({ owner });
40
- const engineConfig = buildInstanceConfig(options.config);
41
- const sourceXML = await retrieveSourceXMLResource(input, {
42
- fetchResource: engineConfig.fetchFormDefinition,
43
- });
44
- const xformDOM = XFormDOM.from(sourceXML);
45
- const secondaryInstances = await SecondaryInstancesDefinition.load(xformDOM, {
46
- fetchResource: engineConfig.fetchFormAttachment,
47
- missingResourceBehavior: engineConfig.missingResourceBehavior,
48
- });
49
- const form = new XFormDefinition(xformDOM);
50
- const primaryInstance = new PrimaryInstance(scope, form.model, secondaryInstances, engineConfig);
51
-
52
- return primaryInstance.root;
53
- };
54
-
55
- initializeForm satisfies InitializeForm;
@@ -1,28 +0,0 @@
1
- import type { EngineXPathNode } from '../../integration/xpath/adapter/kind.ts';
2
- import type { ReactiveScope } from '../../lib/reactivity/scope.ts';
3
- import type { BindComputationExpression } from '../../parse/expression/BindComputationExpression.ts';
4
- import type { EvaluationContext } from './EvaluationContext.ts';
5
-
6
- export type InstanceValue = string;
7
-
8
- interface ValueContextDefinitionBind {
9
- readonly calculate: BindComputationExpression<'calculate'> | null;
10
- readonly readonly: BindComputationExpression<'readonly'>;
11
- }
12
-
13
- export interface ValueContextDefinition {
14
- readonly bind: ValueContextDefinitionBind;
15
- readonly defaultValue: InstanceValue;
16
- }
17
-
18
- export interface ValueContext<RuntimeValue> extends EvaluationContext {
19
- readonly scope: ReactiveScope;
20
- readonly definition: ValueContextDefinition;
21
- readonly contextNode: EngineXPathNode & this;
22
-
23
- isReadonly(): boolean;
24
- isRelevant(): boolean;
25
-
26
- readonly encodeValue: (this: unknown, runtimeValue: RuntimeValue) => InstanceValue;
27
- readonly decodeValue: (this: unknown, instanceValue: InstanceValue) => RuntimeValue;
28
- }
@@ -1,20 +0,0 @@
1
- import type { SubmissionDefinition } from '../../../client/submission/SubmissionDefinition.ts';
2
- import type { AncestorNodeValidationState } from '../../../client/validation.ts';
3
- import type { Root } from '../../Root.ts';
4
- import type {
5
- ClientReactiveSubmittableParentNode,
6
- ClientReactiveSubmittableParentNodeDefinition,
7
- } from './ClientReactiveSubmittableParentNode.ts';
8
-
9
- interface ClientReactiveSubmittableInstanceDefinition
10
- extends ClientReactiveSubmittableParentNodeDefinition {
11
- readonly submission: SubmissionDefinition;
12
- }
13
-
14
- export interface ClientReactiveSubmittableInstance
15
- extends ClientReactiveSubmittableParentNode<Root> {
16
- readonly definition: ClientReactiveSubmittableInstanceDefinition;
17
- readonly root: Root;
18
- readonly parent: null;
19
- readonly validationState: AncestorNodeValidationState;
20
- }
@@ -1,43 +0,0 @@
1
- import type { SubmissionState } from '../../../client/submission/SubmissionState.ts';
2
- import type { QualifiedName } from '../../../lib/names/QualifiedName.ts';
3
- import type { EscapedXMLText } from '../../../lib/xml-serialization.ts';
4
- import type {
5
- ClientReactiveSubmittableChildNode,
6
- ClientReactiveSubmittableParentNode,
7
- } from './ClientReactiveSubmittableParentNode.ts';
8
-
9
- interface ClientReactiveSubmittableLeafNodeCurrentState<RuntimeValue> {
10
- get relevant(): boolean;
11
- get value(): RuntimeValue;
12
- }
13
-
14
- export type SerializedSubmissionValue = string;
15
-
16
- interface ClientReactiveSubmittableLeafNodeDefinition {
17
- readonly qualifiedName: QualifiedName;
18
- }
19
-
20
- export interface ClientReactiveSubmittableLeafNode<RuntimeValue> {
21
- readonly definition: ClientReactiveSubmittableLeafNodeDefinition;
22
- readonly parent: ClientReactiveSubmittableParentNode<ClientReactiveSubmittableChildNode>;
23
- readonly currentState: ClientReactiveSubmittableLeafNodeCurrentState<RuntimeValue>;
24
-
25
- /**
26
- * A client-reactive submittable leaf node is responsible for producing a
27
- * string representation of its value state, suitable for serialization for
28
- * submission. It **MUST NOT** perform any further submission-specific
29
- * serialization duties: in particular, the value **MUST NOT** be escaped for
30
- * XML. This responsibility is delegated up the stack, to avoid repeat
31
- * escaping.
32
- *
33
- * Note: excluding {@link EscapedXMLText} here does not have an effect on the
34
- * type system, it is a documentation-only hint, to help guard against future
35
- * double-escaping mistakes.
36
- */
37
- readonly encodeValue: (
38
- this: unknown,
39
- runtimeValue: RuntimeValue
40
- ) => Exclude<string, EscapedXMLText>;
41
-
42
- readonly submissionState: SubmissionState;
43
- }
@@ -1,26 +0,0 @@
1
- import type { SubmissionState } from '../../../client/submission/SubmissionState.ts';
2
- import type { QualifiedName } from '../../../lib/names/QualifiedName.ts';
3
-
4
- export interface ClientReactiveSubmittableChildNode {
5
- readonly submissionState: SubmissionState;
6
- }
7
-
8
- interface ClientReactiveSubmittableParentNodeCurrentState<
9
- Child extends ClientReactiveSubmittableChildNode,
10
- > {
11
- get relevant(): boolean;
12
- get children(): readonly Child[];
13
- }
14
-
15
- export interface ClientReactiveSubmittableParentNodeDefinition {
16
- readonly qualifiedName: QualifiedName;
17
- }
18
-
19
- export interface ClientReactiveSubmittableParentNode<
20
- Child extends ClientReactiveSubmittableChildNode,
21
- > {
22
- readonly definition: ClientReactiveSubmittableParentNodeDefinition;
23
- readonly parent: ClientReactiveSubmittableParentNode<ClientReactiveSubmittableChildNode> | null;
24
- readonly currentState: ClientReactiveSubmittableParentNodeCurrentState<Child>;
25
- readonly submissionState: SubmissionState;
26
- }
@@ -1,24 +0,0 @@
1
- import type { SubmissionState } from '../../../client/submission/SubmissionState.ts';
2
- import type { QualifiedName } from '../../../lib/names/QualifiedName.ts';
3
- import type {
4
- ClientReactiveSubmittableChildNode,
5
- ClientReactiveSubmittableParentNode,
6
- } from './ClientReactiveSubmittableParentNode.ts';
7
-
8
- interface ClientReactiveSubmittableValueNodeCurrentState {
9
- get relevant(): boolean;
10
- get instanceValue(): string;
11
- }
12
-
13
- export type SerializedSubmissionValue = string;
14
-
15
- interface ClientReactiveSubmittableValueNodeDefinition {
16
- readonly qualifiedName: QualifiedName;
17
- }
18
-
19
- export interface ClientReactiveSubmittableValueNode {
20
- readonly definition: ClientReactiveSubmittableValueNodeDefinition;
21
- readonly parent: ClientReactiveSubmittableParentNode<ClientReactiveSubmittableChildNode>;
22
- readonly currentState: ClientReactiveSubmittableValueNodeCurrentState;
23
- readonly submissionState: SubmissionState;
24
- }
@@ -1,12 +0,0 @@
1
- import type { SubmissionState } from '../../../client/submission/SubmissionState.ts';
2
- import type { ClientReactiveSubmittableInstance } from '../../../instance/internal-api/submission/ClientReactiveSubmittableInstance.ts';
3
-
4
- export const createInstanceSubmissionState = (
5
- node: ClientReactiveSubmittableInstance
6
- ): SubmissionState => {
7
- return {
8
- get submissionXML(): string {
9
- return node.root.submissionState.submissionXML;
10
- },
11
- };
12
- };
@@ -1,20 +0,0 @@
1
- import type { SubmissionState } from '../../../client/submission/SubmissionState.ts';
2
- import type { ClientReactiveSubmittableLeafNode } from '../../../instance/internal-api/submission/ClientReactiveSubmittableLeafNode.ts';
3
- import { escapeXMLText, serializeLeafElementXML } from '../../xml-serialization.ts';
4
-
5
- export const createLeafNodeSubmissionState = <Value>(
6
- node: ClientReactiveSubmittableLeafNode<Value>
7
- ): SubmissionState => {
8
- return {
9
- get submissionXML() {
10
- if (!node.currentState.relevant) {
11
- return '';
12
- }
13
-
14
- const value = node.encodeValue(node.currentState.value);
15
- const xmlValue = escapeXMLText(value);
16
-
17
- return serializeLeafElementXML(node.definition.qualifiedName, xmlValue);
18
- },
19
- };
20
- };
@@ -1,17 +0,0 @@
1
- import type { SubmissionState } from '../../../client/submission/SubmissionState.ts';
2
- import type { ClientReactiveSubmittableParentNode } from '../../../instance/internal-api/submission/ClientReactiveSubmittableParentNode.ts';
3
- import type { RepeatInstance } from '../../../instance/repeat/RepeatInstance.ts';
4
-
5
- export const createNodeRangeSubmissionState = (
6
- node: ClientReactiveSubmittableParentNode<RepeatInstance>
7
- ): SubmissionState => {
8
- return {
9
- get submissionXML() {
10
- const serializedChildren = node.currentState.children.map((child) => {
11
- return child.submissionState.submissionXML;
12
- });
13
-
14
- return serializedChildren.join('');
15
- },
16
- };
17
- };
@@ -1,22 +0,0 @@
1
- import type { SubmissionState } from '../../../client/submission/SubmissionState.ts';
2
- import type { GeneralChildNode } from '../../../instance/hierarchy.ts';
3
- import type { ClientReactiveSubmittableParentNode } from '../../../instance/internal-api/submission/ClientReactiveSubmittableParentNode.ts';
4
- import { serializeParentElementXML } from '../../xml-serialization.ts';
5
-
6
- export const createParentNodeSubmissionState = (
7
- node: ClientReactiveSubmittableParentNode<GeneralChildNode>
8
- ): SubmissionState => {
9
- return {
10
- get submissionXML() {
11
- if (!node.currentState.relevant) {
12
- return '';
13
- }
14
-
15
- const serializedChildren = node.currentState.children.map((child) => {
16
- return child.submissionState.submissionXML;
17
- });
18
-
19
- return serializeParentElementXML(node.definition.qualifiedName, serializedChildren);
20
- },
21
- };
22
- };
@@ -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 { qualifiedName } = 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(qualifiedName, xmlValue);
19
- },
20
- };
21
- };