@getodk/xforms-engine 0.2.0 → 0.4.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 (292) hide show
  1. package/dist/client/BaseNode.d.ts +69 -4
  2. package/dist/client/EngineConfig.d.ts +0 -1
  3. package/dist/client/GroupNode.d.ts +4 -3
  4. package/dist/client/ModelValueNode.d.ts +36 -0
  5. package/dist/client/NodeAppearances.d.ts +1 -2
  6. package/dist/client/NoteNode.d.ts +52 -0
  7. package/dist/client/RootNode.d.ts +4 -3
  8. package/dist/client/SelectNode.d.ts +6 -5
  9. package/dist/client/StringNode.d.ts +6 -5
  10. package/dist/client/SubtreeNode.d.ts +3 -2
  11. package/dist/client/TextRange.d.ts +85 -3
  12. package/dist/client/TriggerNode.d.ts +25 -0
  13. package/dist/client/constants.d.ts +8 -0
  14. package/dist/client/hierarchy.d.ts +19 -10
  15. package/dist/client/index.d.ts +0 -1
  16. package/dist/client/node-types.d.ts +3 -1
  17. package/dist/client/{RepeatRangeNode.d.ts → repeat/BaseRepeatRangeNode.d.ts} +18 -18
  18. package/dist/client/{RepeatInstanceNode.d.ts → repeat/RepeatInstanceNode.d.ts} +9 -9
  19. package/dist/client/repeat/RepeatRangeControlledNode.d.ts +18 -0
  20. package/dist/client/repeat/RepeatRangeUncontrolledNode.d.ts +19 -0
  21. package/dist/client/unsupported/RangeNode.d.ts +9 -0
  22. package/dist/client/unsupported/RankNode.d.ts +9 -0
  23. package/dist/client/unsupported/UnsupportedControlNode.d.ts +32 -0
  24. package/dist/client/unsupported/UploadNode.d.ts +9 -0
  25. package/dist/client/validation.d.ts +162 -0
  26. package/dist/index.d.ts +14 -6
  27. package/dist/index.js +39696 -36151
  28. package/dist/index.js.map +1 -1
  29. package/dist/instance/Group.d.ts +3 -2
  30. package/dist/instance/ModelValue.d.ts +39 -0
  31. package/dist/instance/Note.d.ts +41 -0
  32. package/dist/instance/Root.d.ts +5 -4
  33. package/dist/instance/SelectField.d.ts +11 -6
  34. package/dist/instance/StringField.d.ts +12 -7
  35. package/dist/instance/Subtree.d.ts +2 -1
  36. package/dist/instance/TriggerControl.d.ts +40 -0
  37. package/dist/instance/abstract/DescendantNode.d.ts +8 -10
  38. package/dist/instance/abstract/InstanceNode.d.ts +3 -2
  39. package/dist/instance/abstract/UnsupportedControl.d.ts +46 -0
  40. package/dist/instance/children.d.ts +0 -1
  41. package/dist/instance/hierarchy.d.ts +15 -6
  42. package/dist/instance/index.d.ts +0 -1
  43. package/dist/instance/internal-api/EvaluationContext.d.ts +0 -1
  44. package/dist/instance/internal-api/InstanceConfig.d.ts +0 -1
  45. package/dist/instance/internal-api/SubscribableDependency.d.ts +0 -1
  46. package/dist/instance/internal-api/TranslationContext.d.ts +0 -1
  47. package/dist/instance/internal-api/ValidationContext.d.ts +28 -0
  48. package/dist/instance/internal-api/ValueContext.d.ts +3 -4
  49. package/dist/instance/{RepeatRange.d.ts → repeat/BaseRepeatRange.d.ts} +46 -46
  50. package/dist/instance/{RepeatInstance.d.ts → repeat/RepeatInstance.d.ts} +13 -13
  51. package/dist/instance/repeat/RepeatRangeControlled.d.ts +15 -0
  52. package/dist/instance/repeat/RepeatRangeUncontrolled.d.ts +34 -0
  53. package/dist/instance/resource.d.ts +0 -1
  54. package/dist/instance/text/TextChunk.d.ts +0 -1
  55. package/dist/instance/text/TextRange.d.ts +4 -5
  56. package/dist/instance/unsupported/RangeControl.d.ts +4 -0
  57. package/dist/instance/unsupported/RankControl.d.ts +4 -0
  58. package/dist/instance/unsupported/UploadControl.d.ts +4 -0
  59. package/dist/lib/TokenListParser.d.ts +3 -3
  60. package/dist/lib/dom/query.d.ts +1 -2
  61. package/dist/lib/reactivity/createChildrenState.d.ts +0 -1
  62. package/dist/lib/reactivity/createComputedExpression.d.ts +7 -3
  63. package/dist/lib/reactivity/createNoteReadonlyThunk.d.ts +4 -0
  64. package/dist/lib/reactivity/createSelectItems.d.ts +0 -1
  65. package/dist/lib/reactivity/createValueState.d.ts +0 -1
  66. package/dist/lib/reactivity/materializeCurrentStateChildren.d.ts +0 -1
  67. package/dist/lib/reactivity/node-state/createClientState.d.ts +0 -1
  68. package/dist/lib/reactivity/node-state/createCurrentState.d.ts +0 -1
  69. package/dist/lib/reactivity/node-state/createEngineState.d.ts +0 -1
  70. package/dist/lib/reactivity/node-state/createSharedNodeState.d.ts +1 -2
  71. package/dist/lib/reactivity/node-state/createSpecifiedPropertyDescriptor.d.ts +0 -1
  72. package/dist/lib/reactivity/node-state/createSpecifiedState.d.ts +1 -2
  73. package/dist/lib/reactivity/node-state/representations.d.ts +0 -1
  74. package/dist/lib/reactivity/scope.d.ts +0 -1
  75. package/dist/lib/reactivity/text/createFieldHint.d.ts +3 -4
  76. package/dist/lib/reactivity/text/createNodeLabel.d.ts +3 -4
  77. package/dist/lib/reactivity/text/createNoteText.d.ts +24 -0
  78. package/dist/lib/reactivity/text/createTextRange.d.ts +5 -8
  79. package/dist/lib/reactivity/types.d.ts +0 -1
  80. package/dist/lib/reactivity/validation/createAggregatedViolations.d.ts +8 -0
  81. package/dist/lib/reactivity/validation/createValidation.d.ts +17 -0
  82. package/dist/{XFormDOM.d.ts → parse/XFormDOM.d.ts} +1 -2
  83. package/dist/{XFormDataType.d.ts → parse/XFormDataType.d.ts} +2 -4
  84. package/dist/{XFormDefinition.d.ts → parse/XFormDefinition.d.ts} +2 -3
  85. package/dist/{body → parse/body}/BodyDefinition.d.ts +15 -10
  86. package/dist/{body → parse/body}/BodyElementDefinition.d.ts +8 -7
  87. package/dist/{body → parse/body}/RepeatElementDefinition.d.ts +4 -5
  88. package/dist/{body → parse/body}/UnsupportedBodyElementDefinition.d.ts +0 -1
  89. package/dist/{body → parse/body}/appearance/inputAppearanceParser.d.ts +1 -2
  90. package/dist/{body → parse/body}/appearance/selectAppearanceParser.d.ts +1 -2
  91. package/dist/{body → parse/body}/appearance/structureElementAppearanceParser.d.ts +1 -2
  92. package/dist/parse/body/appearance/unknownAppearanceParser.d.ts +3 -0
  93. package/dist/{body → parse/body}/control/ControlDefinition.d.ts +3 -4
  94. package/dist/{body → parse/body}/control/InputDefinition.d.ts +1 -2
  95. package/dist/parse/body/control/RangeControlDefinition.d.ts +11 -0
  96. package/dist/parse/body/control/RankControlDefinition.d.ts +11 -0
  97. package/dist/parse/body/control/TriggerControlDefinition.d.ts +11 -0
  98. package/dist/parse/body/control/UploadControlDefinition.d.ts +11 -0
  99. package/dist/{body → parse/body}/control/select/ItemDefinition.d.ts +3 -4
  100. package/dist/{body → parse/body}/control/select/ItemsetDefinition.d.ts +7 -7
  101. package/dist/{body → parse/body}/control/select/ItemsetNodesetContext.d.ts +2 -3
  102. package/dist/{body → parse/body}/control/select/SelectDefinition.d.ts +3 -12
  103. package/dist/{body → parse/body}/group/BaseGroupDefinition.d.ts +3 -5
  104. package/dist/{body → parse/body}/group/LogicalGroupDefinition.d.ts +0 -1
  105. package/dist/{body → parse/body}/group/PresentationGroupDefinition.d.ts +1 -2
  106. package/dist/{body → parse/body}/group/StructuralGroupDefinition.d.ts +0 -1
  107. package/dist/{model/BindComputation.d.ts → parse/expression/BindComputationExpression.d.ts} +5 -6
  108. package/dist/{body/control/select → parse/expression}/ItemsetNodesetExpression.d.ts +2 -3
  109. package/dist/{body/control/select → parse/expression}/ItemsetValueExpression.d.ts +2 -3
  110. package/dist/parse/expression/RepeatCountControlExpression.d.ts +18 -0
  111. package/dist/parse/expression/TextLiteralExpression.d.ts +9 -0
  112. package/dist/parse/expression/TextOutputExpression.d.ts +7 -0
  113. package/dist/parse/expression/TextReferenceExpression.d.ts +7 -0
  114. package/dist/parse/expression/TextTranslationExpression.d.ts +8 -0
  115. package/dist/{expression → parse/expression/abstract}/DependencyContext.d.ts +0 -1
  116. package/dist/{expression → parse/expression/abstract}/DependentExpression.d.ts +13 -10
  117. package/dist/parse/expression/abstract/TextChunkExpression.d.ts +17 -0
  118. package/dist/parse/model/BindDefinition.d.ts +39 -0
  119. package/dist/{model → parse/model}/BindElement.d.ts +1 -0
  120. package/dist/{model → parse/model}/DescendentNodeDefinition.d.ts +0 -1
  121. package/dist/{model/ValueNodeDefinition.d.ts → parse/model/LeafNodeDefinition.d.ts} +3 -4
  122. package/dist/{model → parse/model}/ModelBindMap.d.ts +0 -1
  123. package/dist/{model → parse/model}/ModelDefinition.d.ts +1 -2
  124. package/dist/{model → parse/model}/NodeDefinition.d.ts +8 -9
  125. package/dist/parse/model/NoteNodeDefinition.d.ts +30 -0
  126. package/dist/{model → parse/model}/RepeatInstanceDefinition.d.ts +3 -4
  127. package/dist/{model → parse/model}/RepeatRangeDefinition.d.ts +14 -5
  128. package/dist/{model → parse/model}/RepeatTemplateDefinition.d.ts +2 -3
  129. package/dist/{model → parse/model}/RootDefinition.d.ts +2 -3
  130. package/dist/{model → parse/model}/SubtreeDefinition.d.ts +1 -2
  131. package/dist/parse/text/HintDefinition.d.ts +8 -0
  132. package/dist/parse/text/ItemLabelDefinition.d.ts +8 -0
  133. package/dist/parse/text/ItemsetLabelDefinition.d.ts +12 -0
  134. package/dist/parse/text/LabelDefinition.d.ts +14 -0
  135. package/dist/parse/text/MessageDefinition.d.ts +14 -0
  136. package/dist/parse/text/abstract/TextElementDefinition.d.ts +22 -0
  137. package/dist/parse/text/abstract/TextRangeDefinition.d.ts +34 -0
  138. package/dist/parse/xpath/dependency-analysis.d.ts +40 -0
  139. package/dist/parse/xpath/path-resolution.d.ts +69 -0
  140. package/dist/parse/xpath/predicate-analysis.d.ts +29 -0
  141. package/dist/parse/xpath/reference-parsing.d.ts +17 -0
  142. package/dist/parse/xpath/semantic-analysis.d.ts +97 -0
  143. package/dist/parse/xpath/syntax-traversal.d.ts +68 -0
  144. package/dist/solid.js +8745 -5186
  145. package/dist/solid.js.map +1 -1
  146. package/package.json +15 -16
  147. package/src/client/BaseNode.ts +74 -8
  148. package/src/client/GroupNode.ts +4 -2
  149. package/src/client/ModelValueNode.ts +40 -0
  150. package/src/client/NodeAppearances.ts +1 -1
  151. package/src/client/NoteNode.ts +74 -0
  152. package/src/client/README.md +1 -0
  153. package/src/client/RootNode.ts +4 -2
  154. package/src/client/SelectNode.ts +6 -4
  155. package/src/client/StringNode.ts +6 -4
  156. package/src/client/SubtreeNode.ts +3 -1
  157. package/src/client/TextRange.ts +98 -2
  158. package/src/client/TriggerNode.ts +29 -0
  159. package/src/client/constants.ts +10 -0
  160. package/src/client/hierarchy.ts +43 -15
  161. package/src/client/node-types.ts +17 -2
  162. package/src/client/{RepeatRangeNode.ts → repeat/BaseRepeatRangeNode.ts} +18 -19
  163. package/src/client/{RepeatInstanceNode.ts → repeat/RepeatInstanceNode.ts} +10 -8
  164. package/src/client/repeat/RepeatRangeControlledNode.ts +20 -0
  165. package/src/client/repeat/RepeatRangeUncontrolledNode.ts +21 -0
  166. package/src/client/unsupported/RangeNode.ts +14 -0
  167. package/src/client/unsupported/RankNode.ts +14 -0
  168. package/src/client/unsupported/UnsupportedControlNode.ts +40 -0
  169. package/src/client/unsupported/UploadNode.ts +14 -0
  170. package/src/client/validation.ts +199 -0
  171. package/src/index.ts +21 -9
  172. package/src/instance/Group.ts +10 -4
  173. package/src/instance/ModelValue.ts +104 -0
  174. package/src/instance/Note.ts +142 -0
  175. package/src/instance/Root.ts +16 -6
  176. package/src/instance/SelectField.ts +29 -7
  177. package/src/instance/StringField.ts +36 -10
  178. package/src/instance/Subtree.ts +9 -3
  179. package/src/instance/TriggerControl.ts +134 -0
  180. package/src/instance/abstract/DescendantNode.ts +9 -10
  181. package/src/instance/abstract/InstanceNode.ts +29 -7
  182. package/src/instance/abstract/UnsupportedControl.ts +151 -0
  183. package/src/instance/children.ts +113 -16
  184. package/src/instance/hierarchy.ts +42 -5
  185. package/src/instance/index.ts +1 -1
  186. package/src/instance/internal-api/EvaluationContext.ts +1 -1
  187. package/src/instance/internal-api/ValidationContext.ts +32 -0
  188. package/src/instance/internal-api/ValueContext.ts +3 -3
  189. package/src/instance/{RepeatRange.ts → repeat/BaseRepeatRange.ts} +114 -99
  190. package/src/instance/{RepeatInstance.ts → repeat/RepeatInstance.ts} +27 -22
  191. package/src/instance/repeat/RepeatRangeControlled.ts +82 -0
  192. package/src/instance/repeat/RepeatRangeUncontrolled.ts +67 -0
  193. package/src/instance/text/TextRange.ts +10 -4
  194. package/src/instance/unsupported/RangeControl.ts +5 -0
  195. package/src/instance/unsupported/RankControl.ts +5 -0
  196. package/src/instance/unsupported/UploadControl.ts +5 -0
  197. package/src/lib/TokenListParser.ts +11 -7
  198. package/src/lib/dom/query.ts +1 -1
  199. package/src/lib/reactivity/createComputedExpression.ts +25 -27
  200. package/src/lib/reactivity/createNoteReadonlyThunk.ts +33 -0
  201. package/src/lib/reactivity/createSelectItems.ts +23 -16
  202. package/src/lib/reactivity/createValueState.ts +3 -3
  203. package/src/lib/reactivity/node-state/createSharedNodeState.ts +1 -1
  204. package/src/lib/reactivity/node-state/createSpecifiedState.ts +1 -1
  205. package/src/lib/reactivity/text/createFieldHint.ts +9 -7
  206. package/src/lib/reactivity/text/createNodeLabel.ts +8 -6
  207. package/src/lib/reactivity/text/createNoteText.ts +72 -0
  208. package/src/lib/reactivity/text/createTextRange.ts +17 -90
  209. package/src/lib/reactivity/validation/createAggregatedViolations.ts +75 -0
  210. package/src/lib/reactivity/validation/createValidation.ts +196 -0
  211. package/src/{XFormDataType.ts → parse/XFormDataType.ts} +1 -3
  212. package/src/{XFormDefinition.ts → parse/XFormDefinition.ts} +2 -2
  213. package/src/{body → parse/body}/BodyDefinition.ts +44 -27
  214. package/src/{body → parse/body}/BodyElementDefinition.ts +13 -6
  215. package/src/{body → parse/body}/RepeatElementDefinition.ts +10 -20
  216. package/src/{body → parse/body}/appearance/inputAppearanceParser.ts +1 -1
  217. package/src/{body → parse/body}/appearance/selectAppearanceParser.ts +1 -1
  218. package/src/{body → parse/body}/appearance/structureElementAppearanceParser.ts +1 -1
  219. package/src/parse/body/appearance/unknownAppearanceParser.ts +5 -0
  220. package/src/{body → parse/body}/control/ControlDefinition.ts +5 -4
  221. package/src/parse/body/control/RangeControlDefinition.ts +26 -0
  222. package/src/parse/body/control/RankControlDefinition.ts +27 -0
  223. package/src/parse/body/control/TriggerControlDefinition.ts +26 -0
  224. package/src/parse/body/control/UploadControlDefinition.ts +26 -0
  225. package/src/{body → parse/body}/control/select/ItemDefinition.ts +4 -4
  226. package/src/parse/body/control/select/ItemsetDefinition.ts +53 -0
  227. package/src/{body → parse/body}/control/select/ItemsetNodesetContext.ts +2 -2
  228. package/src/{body → parse/body}/control/select/SelectDefinition.ts +3 -11
  229. package/src/{body → parse/body}/group/BaseGroupDefinition.ts +11 -21
  230. package/src/{body → parse/body}/group/PresentationGroupDefinition.ts +1 -1
  231. package/src/{model/BindComputation.ts → parse/expression/BindComputationExpression.ts} +8 -12
  232. package/src/parse/expression/ItemsetNodesetExpression.ts +8 -0
  233. package/src/{body/control/select → parse/expression}/ItemsetValueExpression.ts +2 -2
  234. package/src/parse/expression/RepeatCountControlExpression.ts +44 -0
  235. package/src/parse/expression/TextLiteralExpression.ts +19 -0
  236. package/src/parse/expression/TextOutputExpression.ts +25 -0
  237. package/src/parse/expression/TextReferenceExpression.ts +14 -0
  238. package/src/parse/expression/TextTranslationExpression.ts +38 -0
  239. package/src/{expression → parse/expression/abstract}/DependentExpression.ts +46 -28
  240. package/src/parse/expression/abstract/TextChunkExpression.ts +38 -0
  241. package/src/{model → parse/model}/BindDefinition.ts +30 -27
  242. package/src/{model → parse/model}/BindElement.ts +1 -0
  243. package/src/{model/ValueNodeDefinition.ts → parse/model/LeafNodeDefinition.ts} +4 -4
  244. package/src/{model → parse/model}/ModelBindMap.ts +4 -0
  245. package/src/{model → parse/model}/NodeDefinition.ts +12 -12
  246. package/src/parse/model/NoteNodeDefinition.ts +70 -0
  247. package/src/{model → parse/model}/RepeatInstanceDefinition.ts +2 -2
  248. package/src/parse/model/RepeatRangeDefinition.ts +94 -0
  249. package/src/{model → parse/model}/RootDefinition.ts +8 -4
  250. package/src/parse/text/HintDefinition.ts +25 -0
  251. package/src/parse/text/ItemLabelDefinition.ts +25 -0
  252. package/src/parse/text/ItemsetLabelDefinition.ts +44 -0
  253. package/src/parse/text/LabelDefinition.ts +61 -0
  254. package/src/parse/text/MessageDefinition.ts +49 -0
  255. package/src/parse/text/abstract/TextElementDefinition.ts +71 -0
  256. package/src/parse/text/abstract/TextRangeDefinition.ts +70 -0
  257. package/src/parse/xpath/dependency-analysis.ts +105 -0
  258. package/src/parse/xpath/path-resolution.ts +475 -0
  259. package/src/parse/xpath/predicate-analysis.ts +61 -0
  260. package/src/parse/xpath/reference-parsing.ts +90 -0
  261. package/src/parse/xpath/semantic-analysis.ts +466 -0
  262. package/src/parse/xpath/syntax-traversal.ts +129 -0
  263. package/dist/body/text/HintDefinition.d.ts +0 -11
  264. package/dist/body/text/LabelDefinition.d.ts +0 -22
  265. package/dist/body/text/TextElementDefinition.d.ts +0 -33
  266. package/dist/body/text/TextElementOutputPart.d.ts +0 -13
  267. package/dist/body/text/TextElementPart.d.ts +0 -13
  268. package/dist/body/text/TextElementReferencePart.d.ts +0 -7
  269. package/dist/body/text/TextElementStaticPart.d.ts +0 -7
  270. package/dist/lib/xpath/analysis.d.ts +0 -23
  271. package/dist/model/BindDefinition.d.ts +0 -32
  272. package/src/body/control/select/ItemsetDefinition.ts +0 -36
  273. package/src/body/control/select/ItemsetNodesetExpression.ts +0 -8
  274. package/src/body/text/HintDefinition.ts +0 -26
  275. package/src/body/text/LabelDefinition.ts +0 -68
  276. package/src/body/text/TextElementDefinition.ts +0 -97
  277. package/src/body/text/TextElementOutputPart.ts +0 -27
  278. package/src/body/text/TextElementPart.ts +0 -31
  279. package/src/body/text/TextElementReferencePart.ts +0 -21
  280. package/src/body/text/TextElementStaticPart.ts +0 -26
  281. package/src/lib/xpath/analysis.ts +0 -241
  282. package/src/model/RepeatRangeDefinition.ts +0 -53
  283. package/src/{XFormDOM.ts → parse/XFormDOM.ts} +0 -0
  284. package/src/{body → parse/body}/UnsupportedBodyElementDefinition.ts +0 -0
  285. package/src/{body → parse/body}/control/InputDefinition.ts +1 -1
  286. /package/src/{body → parse/body}/group/LogicalGroupDefinition.ts +0 -0
  287. /package/src/{body → parse/body}/group/StructuralGroupDefinition.ts +0 -0
  288. /package/src/{expression → parse/expression/abstract}/DependencyContext.ts +0 -0
  289. /package/src/{model → parse/model}/DescendentNodeDefinition.ts +0 -0
  290. /package/src/{model → parse/model}/ModelDefinition.ts +0 -0
  291. /package/src/{model → parse/model}/RepeatTemplateDefinition.ts +0 -0
  292. /package/src/{model → parse/model}/SubtreeDefinition.ts +0 -0
@@ -0,0 +1,18 @@
1
+ import { ControlledRepeatRangeDefinition } from '../../parse/model/RepeatRangeDefinition.ts';
2
+ import { BaseRepeatRangeNode, BaseRepeatRangeNodeState } from './BaseRepeatRangeNode.ts';
3
+ /**
4
+ * {@inheritDoc BaseRepeatRangeNodeState}
5
+ * @see {@link BaseRepeatRangeNodeState}
6
+ */
7
+ export interface RepeatRangeControlledState extends BaseRepeatRangeNodeState {
8
+ }
9
+ /**
10
+ * Represents a repeat range whose repeat instances are controlled by the
11
+ * engine, and cannot be added or removed by a client. Functionality and
12
+ * semantics are otherwise consistent with an [uncontrolled]
13
+ * {@link RepeatRangeUncontrolledNode}.
14
+ */
15
+ export interface RepeatRangeControlledNode extends BaseRepeatRangeNode {
16
+ readonly nodeType: 'repeat-range:controlled';
17
+ readonly definition: ControlledRepeatRangeDefinition;
18
+ }
@@ -0,0 +1,19 @@
1
+ import { UncontrolledRepeatRangeDefinition } from '../../parse/model/RepeatRangeDefinition.ts';
2
+ import { RootNode } from '../RootNode.ts';
3
+ import { BaseRepeatRangeNode, BaseRepeatRangeNodeState } from './BaseRepeatRangeNode.ts';
4
+ /**
5
+ * {@inheritDoc BaseRepeatRangeNodeState}
6
+ * @see {@link BaseRepeatRangeNodeState}
7
+ */
8
+ export interface RepeatRangeUncontrolledState extends BaseRepeatRangeNodeState {
9
+ }
10
+ /**
11
+ * {@inheritDoc BaseRepeatRangeNode}
12
+ * @see {@link BaseRepeatRangeNode}
13
+ */
14
+ export interface RepeatRangeUncontrolledNode extends BaseRepeatRangeNode {
15
+ readonly nodeType: 'repeat-range:uncontrolled';
16
+ readonly definition: UncontrolledRepeatRangeDefinition;
17
+ addInstances(afterIndex?: number, count?: number): RootNode;
18
+ removeInstances(startIndex: number, count?: number): RootNode;
19
+ }
@@ -0,0 +1,9 @@
1
+ import { RangeControlDefinition } from '../../parse/body/control/RangeControlDefinition.ts';
2
+ import { UnsupportedControlDefinition, UnsupportedControlNode } from './UnsupportedControlNode.ts';
3
+ export interface RangeNodeDefinition extends UnsupportedControlDefinition {
4
+ readonly bodyElement: RangeControlDefinition;
5
+ }
6
+ export interface RangeNode extends UnsupportedControlNode {
7
+ readonly nodeType: 'range';
8
+ readonly definition: RangeNodeDefinition;
9
+ }
@@ -0,0 +1,9 @@
1
+ import { RankControlDefinition } from '../../parse/body/control/RankControlDefinition.ts';
2
+ import { UnsupportedControlDefinition, UnsupportedControlNode } from './UnsupportedControlNode.ts';
3
+ export interface RankNodeDefinition extends UnsupportedControlDefinition {
4
+ readonly bodyElement: RankControlDefinition;
5
+ }
6
+ export interface RankNode extends UnsupportedControlNode {
7
+ readonly nodeType: 'rank';
8
+ readonly definition: RankNodeDefinition;
9
+ }
@@ -0,0 +1,32 @@
1
+ import { UnknownAppearanceDefinition } from '../../parse/body/appearance/unknownAppearanceParser.ts';
2
+ import { RangeControlDefinition } from '../../parse/body/control/RangeControlDefinition.ts';
3
+ import { RankControlDefinition } from '../../parse/body/control/RankControlDefinition.ts';
4
+ import { UploadControlDefinition } from '../../parse/body/control/UploadControlDefinition.ts';
5
+ import { LeafNodeDefinition } from '../../parse/model/LeafNodeDefinition.ts';
6
+ import { BaseNode, BaseNodeState } from '../BaseNode.ts';
7
+ import { RootNode } from '../RootNode.ts';
8
+ import { GeneralParentNode } from '../hierarchy.ts';
9
+ import { UnsupportedControlNodeType } from '../node-types.ts';
10
+ import { LeafNodeValidationState } from '../validation.ts';
11
+ export interface UnsupportedControlNodeState extends BaseNodeState {
12
+ get children(): null;
13
+ get valueOptions(): unknown;
14
+ get value(): unknown;
15
+ }
16
+ export type UnsupportedControlElementDefinition = RangeControlDefinition | RankControlDefinition | UploadControlDefinition;
17
+ export interface UnsupportedControlDefinition extends LeafNodeDefinition {
18
+ readonly bodyElement: UnsupportedControlElementDefinition;
19
+ }
20
+ /**
21
+ * Stub node, for form controls pending further engine support.
22
+ */
23
+ export interface UnsupportedControlNode extends BaseNode {
24
+ readonly nodeType: UnsupportedControlNodeType;
25
+ readonly appearances: UnknownAppearanceDefinition;
26
+ readonly definition: UnsupportedControlDefinition;
27
+ readonly root: RootNode;
28
+ readonly parent: GeneralParentNode;
29
+ readonly currentState: UnsupportedControlNodeState;
30
+ readonly validationState: LeafNodeValidationState;
31
+ setValue?(value: never): never;
32
+ }
@@ -0,0 +1,9 @@
1
+ import { UploadControlDefinition } from '../../parse/body/control/UploadControlDefinition.ts';
2
+ import { UnsupportedControlDefinition, UnsupportedControlNode } from './UnsupportedControlNode.ts';
3
+ export interface UploadNodeDefinition extends UnsupportedControlDefinition {
4
+ readonly bodyElement: UploadControlDefinition;
5
+ }
6
+ export interface UploadNode extends UnsupportedControlNode {
7
+ readonly nodeType: 'upload';
8
+ readonly definition: UploadNodeDefinition;
9
+ }
@@ -0,0 +1,162 @@
1
+ import { NodeID } from '../instance/identity.ts';
2
+ import { TextRange } from './TextRange.ts';
3
+ interface BaseValidity {
4
+ /**
5
+ * Specifies the unambiguous validity state for each validity condition of a
6
+ * given node, or for the derived validity of any parent node whose descendants
7
+ * are validated.
8
+ *
9
+ * For {@link ValidationCondition | form-defined conditions}, validity is
10
+ * determined as follows:
11
+ *
12
+ *
13
+ * expression | state | blank | non-blank
14
+ * ------------:|:----------|:-------:|:---------:
15
+ * `constraint` | `true`\* | ✅ | ✅
16
+ * `constraint` | `false` | ✅ | ❌
17
+ * `required` | `false`\* | ✅ | ✅
18
+ * `required` | `true` | ❌ | ✅
19
+ *
20
+ * - \* = default (expression not defined)
21
+ * - ✅ = `valid: true`
22
+ * - ❌ = `valid: false`
23
+ */
24
+ readonly valid: boolean;
25
+ }
26
+ /**
27
+ * Form-defined conditions which determine node validity.
28
+ *
29
+ * @see {@link https://getodk.github.io/xforms-spec/#bind-attributes | `constraint` and `required` bind attributes}
30
+ */
31
+ export type ValidationCondition = 'constraint' | 'required';
32
+ interface ValidationConditionMessageRoles {
33
+ readonly constraint: 'constraintMsg';
34
+ readonly required: 'requiredMsg';
35
+ }
36
+ export type ValidationConditionMessageRole<Condition extends ValidationCondition> = ValidationConditionMessageRoles[Condition];
37
+ /**
38
+ * Source of a condition's violation message.
39
+ *
40
+ * - Form-defined messages (specified by the
41
+ * {@link https://getodk.github.io/xforms-spec/#bind-attributes | `jr:constraintMsg` and `jr:requiredMsg`}
42
+ * attributes) will be favored when provided by the form, and will be
43
+ * translated according to the form's active language (where applicable).
44
+ *
45
+ * - Otherwise, an engine-defined message will be provided as a fallback. This
46
+ * fallback is provided mainly for API consistency, and may be referenced for
47
+ * testing purposes; user-facing clients are expected to provide fallback
48
+ * messaging language most appropriate for their user neeeds. Engine-defined
49
+ * fallback messages **are not translated**. They are intended to be used, if
50
+ * at all, as sentinel values when a form-defined message is not available.
51
+ */
52
+ export type ViolationMessageSource = 'form' | 'engine';
53
+ /**
54
+ * @see {@link ViolationMessage.asString}
55
+ */
56
+ type ViolationMessageAsString<Source extends ViolationMessageSource, Condition extends ValidationCondition> = Source extends 'form' ? string : `Condition not satisfied: ${Condition}`;
57
+ /**
58
+ * A violation message is provided for every violation of a form-defined
59
+ * {@link ValidationCondition}.
60
+ */
61
+ export interface ViolationMessage<Condition extends ValidationCondition, Source extends ViolationMessageSource = ViolationMessageSource> extends TextRange<ValidationConditionMessageRole<Condition>> {
62
+ /**
63
+ * - Form-defined violation messages may produce arbitrary text. This text may
64
+ * be translated
65
+ * ({@link https://getodk.github.io/xforms-spec/#fn:jr:itext | `jr:itext`}),
66
+ * and it may be dynamic (translations may reference form state with
67
+ * {@link https://getodk.github.io/xforms-spec/#body-elements | `<output>`}).
68
+ *
69
+ * - When a form-defined violation message is not available, an engine-defined
70
+ * message will be provided in its place. Engine-defined violation messages
71
+ * are statically defined (and therefore not presently translated by the
72
+ * engine). Their static value can also be referenced as a static type, by
73
+ * checking {@link isFallbackMessage}.
74
+ */
75
+ get asString(): ViolationMessageAsString<Source, Condition>;
76
+ }
77
+ export interface ConditionSatisfied<Condition extends ValidationCondition> extends BaseValidity {
78
+ readonly condition: Condition;
79
+ readonly valid: true;
80
+ readonly message: null;
81
+ }
82
+ export interface ConditionViolation<Condition extends ValidationCondition> extends BaseValidity {
83
+ readonly condition: Condition;
84
+ readonly valid: false;
85
+ readonly message: ViolationMessage<Condition>;
86
+ }
87
+ export type ConditionValidation<Condition extends ValidationCondition> = ConditionSatisfied<Condition> | ConditionViolation<Condition>;
88
+ export type AnyViolation = ConditionViolation<ValidationCondition>;
89
+ /**
90
+ * Represents the validation state of a leaf (or value) node.
91
+ *
92
+ * Validity is computed for two conditions:
93
+ *
94
+ * - {@link constraint}: arbitrary form-defined condition which specifies
95
+ * whether a (non-blank) value is considered valid
96
+ *
97
+ * - {@link required}: when a node is required, the node must have a non-blank
98
+ * value to be considered valid
99
+ *
100
+ * Only one of these conditions can be violated (applicability is mutually
101
+ * exclusive). As such, {@link violation} provides a convenient way to determine
102
+ * whether a leaf/value node is valid with a single (null) check.
103
+ *
104
+ * @see {@link BaseValidity.valid} for additional details on how these
105
+ * conditions are evaluated (and how they interact with one another).
106
+ */
107
+ export interface LeafNodeValidationState {
108
+ get constraint(): ConditionValidation<'constraint'>;
109
+ get required(): ConditionValidation<'required'>;
110
+ /**
111
+ * Violations are mutually exclusive:
112
+ *
113
+ * - {@link constraint} can only be violated by a non-blank value
114
+ * - {@link required} can only be violated by a blank value
115
+ *
116
+ * As such, at most one violation can be present. If none is present,
117
+ * the node is considered valid.
118
+ */
119
+ get violation(): AnyViolation | null;
120
+ }
121
+ /**
122
+ * Provides a reference to any leaf/value node which currently violates either
123
+ * of its validity conditions.
124
+ *
125
+ * Any client can safely assume:
126
+ *
127
+ * - {@link nodeId} will be a stable reference to a node with the same
128
+ * {@link BaseNode.nodeId | `nodeId`}.
129
+ *
130
+ * - {@link node} will have reference equality to the same node object, within
131
+ * the active form instance's {@link RootNode} tree
132
+ *
133
+ * - {@link reference} will be a **current** reference to the same node object's
134
+ * **computed** {@link BaseNodeState.reference | `currentState.reference`}
135
+ *
136
+ * Any client utilizing the engine's reactive APIs (having provided an
137
+ * {@link OpaqueReactiveObjectFactory}) can safely assume that {@link reference}
138
+ * will be recomputed and updated in tandem with the affected node's own
139
+ * computed `currentState.reference` as well.
140
+ *
141
+ * @todo this type currently exposes multiple ways to reference the affected
142
+ * node. This is intended to maximize flexibility: it's not yet clear how
143
+ * clients will be best served by which reference mechanism. It is expected that
144
+ * each property will be directly computed from the affected node.
145
+ */
146
+ export interface DescendantNodeViolationReference {
147
+ readonly nodeId: NodeID;
148
+ get reference(): string;
149
+ get violation(): AnyViolation;
150
+ }
151
+ /**
152
+ * Provides access from any ancestor/parent node, to identify any validity
153
+ * violations present on any of its leaf/value node descendants.
154
+ *
155
+ * @see {@link DescendantNodeViolationReference} for details on how descendants
156
+ * may be referenced when such a violation is present.
157
+ */
158
+ export interface AncestorNodeValidationState {
159
+ get violations(): readonly DescendantNodeViolationReference[];
160
+ }
161
+ export type NodeValidationState = AncestorNodeValidationState | LeafNodeValidationState;
162
+ export {};
package/dist/index.d.ts CHANGED
@@ -1,17 +1,25 @@
1
1
  import { InitializeForm } from './index.ts';
2
-
3
2
  export declare const initializeForm: InitializeForm;
3
+ export * as constants from './client/constants.ts';
4
4
  export type * from './client/EngineConfig.ts';
5
5
  export type * from './client/FormLanguage.ts';
6
6
  export type * from './client/GroupNode.ts';
7
+ export type { AnyChildNode, AnyControlNode, AnyLeafNode, AnyNode, AnyParentNode, AnyUnsupportedControlNode, GeneralChildNode, GeneralParentNode, RepeatRangeNode, } from './client/hierarchy.ts';
8
+ export type * from './client/index.ts';
9
+ export type * from './client/ModelValueNode.ts';
10
+ export type * from './client/NoteNode.ts';
7
11
  export type * from './client/OpaqueReactiveObjectFactory.ts';
8
- export type * from './client/RepeatInstanceNode.ts';
9
- export type * from './client/RepeatRangeNode.ts';
12
+ export type * from './client/repeat/RepeatInstanceNode.ts';
13
+ export type * from './client/repeat/RepeatRangeControlledNode.ts';
14
+ export type * from './client/repeat/RepeatRangeUncontrolledNode.ts';
10
15
  export type * from './client/RootNode.ts';
11
16
  export type * from './client/SelectNode.ts';
12
17
  export type * from './client/StringNode.ts';
13
18
  export type * from './client/SubtreeNode.ts';
14
19
  export type * from './client/TextRange.ts';
15
- export type { AnyChildNode, AnyLeafNode, AnyNode, AnyParentNode, GeneralChildNode, GeneralParentNode, } from './client/hierarchy.ts';
16
- export type * from './client/index.ts';
17
- export type { AnySelectDefinition, SelectDefinition, } from './body/control/select/SelectDefinition.ts';
20
+ export type * from './client/TriggerNode.ts';
21
+ export type * from './client/unsupported/RangeNode.ts';
22
+ export type * from './client/unsupported/RankNode.ts';
23
+ export type * from './client/unsupported/UploadNode.ts';
24
+ export type * from './client/validation.ts';
25
+ export type { AnySelectDefinition, SelectDefinition, } from './parse/body/control/select/SelectDefinition.ts';