@getodk/xforms-engine 0.1.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 (208) hide show
  1. package/README.md +44 -0
  2. package/dist/.vite/manifest.json +7 -0
  3. package/dist/XFormDOM.d.ts +31 -0
  4. package/dist/XFormDataType.d.ts +26 -0
  5. package/dist/XFormDefinition.d.ts +14 -0
  6. package/dist/body/BodyDefinition.d.ts +52 -0
  7. package/dist/body/BodyElementDefinition.d.ts +32 -0
  8. package/dist/body/RepeatDefinition.d.ts +15 -0
  9. package/dist/body/UnsupportedBodyElementDefinition.d.ts +10 -0
  10. package/dist/body/control/ControlDefinition.d.ts +16 -0
  11. package/dist/body/control/InputDefinition.d.ts +5 -0
  12. package/dist/body/control/select/ItemDefinition.d.ts +13 -0
  13. package/dist/body/control/select/ItemsetDefinition.d.ts +16 -0
  14. package/dist/body/control/select/ItemsetNodesetContext.d.ts +11 -0
  15. package/dist/body/control/select/ItemsetNodesetExpression.d.ts +5 -0
  16. package/dist/body/control/select/ItemsetValueExpression.d.ts +6 -0
  17. package/dist/body/control/select/SelectDefinition.d.ts +23 -0
  18. package/dist/body/group/BaseGroupDefinition.d.ts +46 -0
  19. package/dist/body/group/LogicalGroupDefinition.d.ts +6 -0
  20. package/dist/body/group/PresentationGroupDefinition.d.ts +11 -0
  21. package/dist/body/group/RepeatGroupDefinition.d.ts +12 -0
  22. package/dist/body/group/StructuralGroupDefinition.d.ts +6 -0
  23. package/dist/body/text/HintDefinition.d.ts +11 -0
  24. package/dist/body/text/LabelDefinition.d.ts +20 -0
  25. package/dist/body/text/TextElementDefinition.d.ts +32 -0
  26. package/dist/body/text/TextElementOutputPart.d.ts +12 -0
  27. package/dist/body/text/TextElementPart.d.ts +12 -0
  28. package/dist/body/text/TextElementReferencePart.d.ts +6 -0
  29. package/dist/body/text/TextElementStaticPart.d.ts +6 -0
  30. package/dist/client/BaseNode.d.ts +138 -0
  31. package/dist/client/EngineConfig.d.ts +78 -0
  32. package/dist/client/FormLanguage.d.ts +63 -0
  33. package/dist/client/GroupNode.d.ts +24 -0
  34. package/dist/client/OpaqueReactiveObjectFactory.d.ts +70 -0
  35. package/dist/client/RepeatInstanceNode.d.ts +28 -0
  36. package/dist/client/RepeatRangeNode.d.ts +94 -0
  37. package/dist/client/RootNode.d.ts +31 -0
  38. package/dist/client/SelectNode.d.ts +60 -0
  39. package/dist/client/StringNode.d.ts +41 -0
  40. package/dist/client/SubtreeNode.d.ts +52 -0
  41. package/dist/client/TextRange.d.ts +55 -0
  42. package/dist/client/hierarchy.d.ts +48 -0
  43. package/dist/client/index.d.ts +11 -0
  44. package/dist/client/node-types.d.ts +1 -0
  45. package/dist/expression/DependencyContext.d.ts +12 -0
  46. package/dist/expression/DependentExpression.d.ts +43 -0
  47. package/dist/index.d.ts +16 -0
  48. package/dist/index.js +37622 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/instance/Group.d.ts +31 -0
  51. package/dist/instance/RepeatInstance.d.ts +60 -0
  52. package/dist/instance/RepeatRange.d.ts +81 -0
  53. package/dist/instance/Root.d.ts +70 -0
  54. package/dist/instance/SelectField.d.ts +45 -0
  55. package/dist/instance/StringField.d.ts +39 -0
  56. package/dist/instance/Subtree.d.ts +30 -0
  57. package/dist/instance/abstract/DescendantNode.d.ts +76 -0
  58. package/dist/instance/abstract/InstanceNode.d.ts +107 -0
  59. package/dist/instance/children.d.ts +2 -0
  60. package/dist/instance/hierarchy.d.ts +12 -0
  61. package/dist/instance/identity.d.ts +7 -0
  62. package/dist/instance/index.d.ts +8 -0
  63. package/dist/instance/internal-api/EvaluationContext.d.ts +34 -0
  64. package/dist/instance/internal-api/InstanceConfig.d.ts +8 -0
  65. package/dist/instance/internal-api/SubscribableDependency.d.ts +59 -0
  66. package/dist/instance/internal-api/TranslationContext.d.ts +4 -0
  67. package/dist/instance/internal-api/ValueContext.d.ts +22 -0
  68. package/dist/instance/resource.d.ts +10 -0
  69. package/dist/instance/text/FormattedTextStub.d.ts +1 -0
  70. package/dist/instance/text/TextChunk.d.ts +11 -0
  71. package/dist/instance/text/TextRange.d.ts +10 -0
  72. package/dist/lib/dom/query.d.ts +20 -0
  73. package/dist/lib/reactivity/createChildrenState.d.ts +36 -0
  74. package/dist/lib/reactivity/createComputedExpression.d.ts +12 -0
  75. package/dist/lib/reactivity/createSelectItems.d.ts +16 -0
  76. package/dist/lib/reactivity/createValueState.d.ts +44 -0
  77. package/dist/lib/reactivity/materializeCurrentStateChildren.d.ts +18 -0
  78. package/dist/lib/reactivity/node-state/createClientState.d.ts +9 -0
  79. package/dist/lib/reactivity/node-state/createCurrentState.d.ts +6 -0
  80. package/dist/lib/reactivity/node-state/createEngineState.d.ts +5 -0
  81. package/dist/lib/reactivity/node-state/createSharedNodeState.d.ts +22 -0
  82. package/dist/lib/reactivity/node-state/createSpecifiedPropertyDescriptor.d.ts +6 -0
  83. package/dist/lib/reactivity/node-state/createSpecifiedState.d.ts +139 -0
  84. package/dist/lib/reactivity/node-state/representations.d.ts +25 -0
  85. package/dist/lib/reactivity/scope.d.ts +23 -0
  86. package/dist/lib/reactivity/text/createFieldHint.d.ts +5 -0
  87. package/dist/lib/reactivity/text/createNodeLabel.d.ts +5 -0
  88. package/dist/lib/reactivity/text/createTextRange.d.ts +19 -0
  89. package/dist/lib/reactivity/types.d.ts +21 -0
  90. package/dist/lib/unique-id.d.ts +27 -0
  91. package/dist/lib/xpath/analysis.d.ts +22 -0
  92. package/dist/model/BindComputation.d.ts +30 -0
  93. package/dist/model/BindDefinition.d.ts +31 -0
  94. package/dist/model/BindElement.d.ts +6 -0
  95. package/dist/model/DescendentNodeDefinition.d.ts +25 -0
  96. package/dist/model/ModelBindMap.d.ts +15 -0
  97. package/dist/model/ModelDefinition.d.ts +10 -0
  98. package/dist/model/NodeDefinition.d.ts +74 -0
  99. package/dist/model/RepeatInstanceDefinition.d.ts +15 -0
  100. package/dist/model/RepeatSequenceDefinition.d.ts +19 -0
  101. package/dist/model/RepeatTemplateDefinition.d.ts +29 -0
  102. package/dist/model/RootDefinition.d.ts +24 -0
  103. package/dist/model/SubtreeDefinition.d.ts +14 -0
  104. package/dist/model/ValueNodeDefinition.d.ts +15 -0
  105. package/dist/solid.js +37273 -0
  106. package/dist/solid.js.map +1 -0
  107. package/package.json +87 -0
  108. package/src/XFormDOM.ts +224 -0
  109. package/src/XFormDataType.ts +64 -0
  110. package/src/XFormDefinition.ts +40 -0
  111. package/src/body/BodyDefinition.ts +202 -0
  112. package/src/body/BodyElementDefinition.ts +62 -0
  113. package/src/body/RepeatDefinition.ts +54 -0
  114. package/src/body/UnsupportedBodyElementDefinition.ts +17 -0
  115. package/src/body/control/ControlDefinition.ts +42 -0
  116. package/src/body/control/InputDefinition.ts +9 -0
  117. package/src/body/control/select/ItemDefinition.ts +31 -0
  118. package/src/body/control/select/ItemsetDefinition.ts +36 -0
  119. package/src/body/control/select/ItemsetNodesetContext.ts +26 -0
  120. package/src/body/control/select/ItemsetNodesetExpression.ts +8 -0
  121. package/src/body/control/select/ItemsetValueExpression.ts +11 -0
  122. package/src/body/control/select/SelectDefinition.ts +74 -0
  123. package/src/body/group/BaseGroupDefinition.ts +137 -0
  124. package/src/body/group/LogicalGroupDefinition.ts +11 -0
  125. package/src/body/group/PresentationGroupDefinition.ts +28 -0
  126. package/src/body/group/RepeatGroupDefinition.ts +91 -0
  127. package/src/body/group/StructuralGroupDefinition.ts +11 -0
  128. package/src/body/text/HintDefinition.ts +26 -0
  129. package/src/body/text/LabelDefinition.ts +54 -0
  130. package/src/body/text/TextElementDefinition.ts +97 -0
  131. package/src/body/text/TextElementOutputPart.ts +27 -0
  132. package/src/body/text/TextElementPart.ts +31 -0
  133. package/src/body/text/TextElementReferencePart.ts +21 -0
  134. package/src/body/text/TextElementStaticPart.ts +26 -0
  135. package/src/client/BaseNode.ts +180 -0
  136. package/src/client/EngineConfig.ts +83 -0
  137. package/src/client/FormLanguage.ts +77 -0
  138. package/src/client/GroupNode.ts +33 -0
  139. package/src/client/OpaqueReactiveObjectFactory.ts +100 -0
  140. package/src/client/README.md +39 -0
  141. package/src/client/RepeatInstanceNode.ts +41 -0
  142. package/src/client/RepeatRangeNode.ts +100 -0
  143. package/src/client/RootNode.ts +36 -0
  144. package/src/client/SelectNode.ts +69 -0
  145. package/src/client/StringNode.ts +46 -0
  146. package/src/client/SubtreeNode.ts +57 -0
  147. package/src/client/TextRange.ts +63 -0
  148. package/src/client/hierarchy.ts +63 -0
  149. package/src/client/index.ts +29 -0
  150. package/src/client/node-types.ts +10 -0
  151. package/src/expression/DependencyContext.ts +53 -0
  152. package/src/expression/DependentExpression.ts +102 -0
  153. package/src/index.ts +35 -0
  154. package/src/instance/Group.ts +82 -0
  155. package/src/instance/RepeatInstance.ts +164 -0
  156. package/src/instance/RepeatRange.ts +214 -0
  157. package/src/instance/Root.ts +264 -0
  158. package/src/instance/SelectField.ts +204 -0
  159. package/src/instance/StringField.ts +93 -0
  160. package/src/instance/Subtree.ts +79 -0
  161. package/src/instance/abstract/DescendantNode.ts +182 -0
  162. package/src/instance/abstract/InstanceNode.ts +257 -0
  163. package/src/instance/children.ts +52 -0
  164. package/src/instance/hierarchy.ts +54 -0
  165. package/src/instance/identity.ts +11 -0
  166. package/src/instance/index.ts +37 -0
  167. package/src/instance/internal-api/EvaluationContext.ts +41 -0
  168. package/src/instance/internal-api/InstanceConfig.ts +9 -0
  169. package/src/instance/internal-api/SubscribableDependency.ts +61 -0
  170. package/src/instance/internal-api/TranslationContext.ts +5 -0
  171. package/src/instance/internal-api/ValueContext.ts +27 -0
  172. package/src/instance/resource.ts +75 -0
  173. package/src/instance/text/FormattedTextStub.ts +8 -0
  174. package/src/instance/text/TextChunk.ts +20 -0
  175. package/src/instance/text/TextRange.ts +23 -0
  176. package/src/lib/dom/query.ts +49 -0
  177. package/src/lib/reactivity/createChildrenState.ts +60 -0
  178. package/src/lib/reactivity/createComputedExpression.ts +114 -0
  179. package/src/lib/reactivity/createSelectItems.ts +163 -0
  180. package/src/lib/reactivity/createValueState.ts +258 -0
  181. package/src/lib/reactivity/materializeCurrentStateChildren.ts +121 -0
  182. package/src/lib/reactivity/node-state/createClientState.ts +51 -0
  183. package/src/lib/reactivity/node-state/createCurrentState.ts +27 -0
  184. package/src/lib/reactivity/node-state/createEngineState.ts +18 -0
  185. package/src/lib/reactivity/node-state/createSharedNodeState.ts +79 -0
  186. package/src/lib/reactivity/node-state/createSpecifiedPropertyDescriptor.ts +85 -0
  187. package/src/lib/reactivity/node-state/createSpecifiedState.ts +229 -0
  188. package/src/lib/reactivity/node-state/representations.ts +64 -0
  189. package/src/lib/reactivity/scope.ts +106 -0
  190. package/src/lib/reactivity/text/createFieldHint.ts +16 -0
  191. package/src/lib/reactivity/text/createNodeLabel.ts +16 -0
  192. package/src/lib/reactivity/text/createTextRange.ts +155 -0
  193. package/src/lib/reactivity/types.ts +27 -0
  194. package/src/lib/unique-id.ts +34 -0
  195. package/src/lib/xpath/analysis.ts +241 -0
  196. package/src/model/BindComputation.ts +88 -0
  197. package/src/model/BindDefinition.ts +104 -0
  198. package/src/model/BindElement.ts +8 -0
  199. package/src/model/DescendentNodeDefinition.ts +56 -0
  200. package/src/model/ModelBindMap.ts +71 -0
  201. package/src/model/ModelDefinition.ts +19 -0
  202. package/src/model/NodeDefinition.ts +146 -0
  203. package/src/model/RepeatInstanceDefinition.ts +39 -0
  204. package/src/model/RepeatSequenceDefinition.ts +53 -0
  205. package/src/model/RepeatTemplateDefinition.ts +150 -0
  206. package/src/model/RootDefinition.ts +121 -0
  207. package/src/model/SubtreeDefinition.ts +50 -0
  208. package/src/model/ValueNodeDefinition.ts +39 -0
@@ -0,0 +1,30 @@
1
+ import { DependentExpression } from '../expression/DependentExpression.ts';
2
+ import type { BindDefinition } from './BindDefinition.ts';
3
+ declare const defaultBindComputationExpressions: {
4
+ readonly calculate: null;
5
+ readonly constraint: "true()";
6
+ readonly readonly: "false()";
7
+ readonly relevant: "true()";
8
+ readonly required: "false()";
9
+ readonly saveIncomplete: "false()";
10
+ };
11
+ type DefaultBindComputationExpressions = typeof defaultBindComputationExpressions;
12
+ export type BindComputationType = keyof DefaultBindComputationExpressions;
13
+ type BindComputationFactoryResult<Type extends BindComputationType> = DefaultBindComputationExpressions[Type] extends null ? BindComputation<Type> | null : BindComputation<Type>;
14
+ declare const bindComputationResultTypes: {
15
+ readonly calculate: "string";
16
+ readonly constraint: "boolean";
17
+ readonly readonly: "boolean";
18
+ readonly relevant: "boolean";
19
+ readonly required: "boolean";
20
+ readonly saveIncomplete: "boolean";
21
+ };
22
+ type BindComputationResultTypes = typeof bindComputationResultTypes;
23
+ export type BindComputationResultType<Computation extends BindComputationType> = BindComputationResultTypes[Computation];
24
+ export declare class BindComputation<Computation extends BindComputationType> extends DependentExpression<BindComputationResultType<Computation>> {
25
+ readonly computation: Computation;
26
+ static forExpression<Type extends BindComputationType>(bind: BindDefinition, computation: Type): BindComputationFactoryResult<Type>;
27
+ readonly isDefaultExpression: boolean;
28
+ protected constructor(bind: BindDefinition, computation: Computation, expression: string | null);
29
+ }
30
+ export {};
@@ -0,0 +1,31 @@
1
+ import type { XFormDataType } from '../XFormDataType.ts';
2
+ import type { XFormDefinition } from '../XFormDefinition.ts';
3
+ import { DependencyContext } from '../expression/DependencyContext.ts';
4
+ import type { DependentExpression } from '../expression/DependentExpression.ts';
5
+ import { BindComputation } from './BindComputation.ts';
6
+ import type { BindElement } from './BindElement.ts';
7
+ import type { ModelDefinition } from './ModelDefinition.ts';
8
+ export declare class BindDefinition extends DependencyContext {
9
+ readonly form: XFormDefinition;
10
+ protected readonly model: ModelDefinition;
11
+ readonly nodeset: string;
12
+ readonly bindElement: BindElement;
13
+ readonly bindType: string | null;
14
+ readonly dataType: XFormDataType;
15
+ readonly parentNodeset: string | null;
16
+ readonly calculate: BindComputation<'calculate'> | null;
17
+ readonly readonly: BindComputation<'readonly'>;
18
+ readonly relevant: BindComputation<'relevant'>;
19
+ readonly required: BindComputation<'required'>;
20
+ /**
21
+ * Diverges from {@link https://github.com/getodk/javarosa/blob/059321160e6f8dbb3e81d9add61d68dd35b13cc8/dag.md | JavaRosa's}, which excludes `constraint` expressions. We compute `constraint` dependencies like the other <bind> computation expressions, but explicitly ignore self-references (this is currently handled by {@link BindComputation}, via its {@link DependentExpression} parent class).
22
+ */
23
+ readonly constraint: BindComputation<'constraint'> & DependentExpression<'boolean'>;
24
+ readonly saveIncomplete: BindComputation<'saveIncomplete'>;
25
+ protected _parentBind: BindDefinition | null | undefined;
26
+ get parentBind(): BindDefinition | null;
27
+ get reference(): string;
28
+ get parentReference(): string | null;
29
+ constructor(form: XFormDefinition, model: ModelDefinition, nodeset: string, bindElement: BindElement);
30
+ toJSON(): Omit<this, "model" | "toJSON" | "form" | "reference" | "parentReference" | "isTranslated" | "registerDependentExpression" | "dependencyExpressions" | "bindElement" | "parentBind">;
31
+ }
@@ -0,0 +1,6 @@
1
+ export type BindNodeset = string;
2
+ export interface BindElement {
3
+ readonly localName: 'bind';
4
+ getAttribute(name: 'nodeset'): BindNodeset;
5
+ getAttribute(name: string): string | null;
6
+ }
@@ -0,0 +1,25 @@
1
+ import type { AnyBodyElementDefinition } from '../body/BodyDefinition.ts';
2
+ import type { RepeatDefinition } from '../body/RepeatDefinition.ts';
3
+ import type { BindDefinition } from './BindDefinition.ts';
4
+ import type { ModelNode, NodeChildren, NodeDefaultValue, NodeDefinition, NodeDefinitionType, NodeInstances, NodeParent } from './NodeDefinition.ts';
5
+ import type { RootDefinition } from './RootDefinition.ts';
6
+ export type DescendentNodeType = Exclude<NodeDefinitionType, 'root'>;
7
+ type DescendentNodeBodyElement = AnyBodyElementDefinition | RepeatDefinition;
8
+ export declare abstract class DescendentNodeDefinition<Type extends DescendentNodeType, BodyElement extends DescendentNodeBodyElement | null = DescendentNodeBodyElement | null> implements NodeDefinition<Type> {
9
+ readonly parent: NodeParent<Type>;
10
+ readonly bind: BindDefinition;
11
+ readonly bodyElement: BodyElement;
12
+ abstract readonly type: Type;
13
+ abstract readonly children: NodeChildren<Type>;
14
+ abstract readonly instances: NodeInstances<Type>;
15
+ abstract readonly defaultValue: NodeDefaultValue<Type>;
16
+ abstract readonly node: ModelNode<Type>;
17
+ abstract readonly nodeName: string;
18
+ readonly root: RootDefinition;
19
+ readonly nodeset: string;
20
+ readonly dependencyExpressions: ReadonlySet<string>;
21
+ readonly isTranslated: boolean;
22
+ constructor(parent: NodeParent<Type>, bind: BindDefinition, bodyElement: BodyElement);
23
+ }
24
+ export type AnyDescendantNodeDefinition = DescendentNodeDefinition<any, any>;
25
+ export {};
@@ -0,0 +1,15 @@
1
+ import type { XFormDefinition } from '../XFormDefinition.ts';
2
+ import { BindDefinition } from './BindDefinition.ts';
3
+ import type { BindNodeset } from './BindElement.ts';
4
+ import type { ModelDefinition } from './ModelDefinition.ts';
5
+ type TopologicalSortIndex = number;
6
+ export type SortedNodesetIndexes = ReadonlyMap<BindNodeset, TopologicalSortIndex>;
7
+ export declare class ModelBindMap extends Map<BindNodeset, BindDefinition> {
8
+ protected readonly form: XFormDefinition;
9
+ protected readonly model: ModelDefinition;
10
+ static fromModel(model: ModelDefinition): ModelBindMap;
11
+ protected constructor(form: XFormDefinition, model: ModelDefinition);
12
+ getOrCreateBindDefinition(nodeset: string): BindDefinition;
13
+ toJSON(): [string, BindDefinition][];
14
+ }
15
+ export {};
@@ -0,0 +1,10 @@
1
+ import type { XFormDefinition } from '../XFormDefinition.ts';
2
+ import { ModelBindMap } from './ModelBindMap.ts';
3
+ import { RootDefinition } from './RootDefinition.ts';
4
+ export declare class ModelDefinition {
5
+ readonly form: XFormDefinition;
6
+ readonly binds: ModelBindMap;
7
+ readonly root: RootDefinition;
8
+ constructor(form: XFormDefinition);
9
+ toJSON(): Omit<this, "toJSON" | "form">;
10
+ }
@@ -0,0 +1,74 @@
1
+ import type { AnyBodyElementDefinition } from '../body/BodyDefinition.ts';
2
+ import type { RepeatDefinition } from '../body/RepeatDefinition.ts';
3
+ import type { BindDefinition } from './BindDefinition.ts';
4
+ import type { RepeatInstanceDefinition } from './RepeatInstanceDefinition.ts';
5
+ import type { RepeatSequenceDefinition } from './RepeatSequenceDefinition.ts';
6
+ import type { RepeatTemplateDefinition } from './RepeatTemplateDefinition.ts';
7
+ import type { RootDefinition } from './RootDefinition.ts';
8
+ import type { SubtreeDefinition } from './SubtreeDefinition.ts';
9
+ import type { ValueNodeDefinition } from './ValueNodeDefinition.ts';
10
+ /**
11
+ * Corresponds to the model/entry DOM root node, i.e.:
12
+ *
13
+ * - the element matching `/*` in primary instance expressions, a.k.a.
14
+ * - `/h:html/h:head/xf:model/xf:instance[1]/*`
15
+ */
16
+ export type RootNodeType = 'root';
17
+ /**
18
+ * Corresponds to a sequence of model/entry DOM subtrees which in turn
19
+ * corresponds to a <repeat> in the form body definition.
20
+ */
21
+ export type RepeatSequenceType = 'repeat-sequence';
22
+ /**
23
+ * Corresponds to a template definition for a repeat sequence, which either has
24
+ * an explicit `jr:template=""` attribute in the form definition or is inferred
25
+ * as a template from the form's first element matched by a <repeat nodeset>.
26
+ */
27
+ export type RepeatTemplateType = 'repeat-template';
28
+ /**
29
+ * Corresponds to a single instance of a model/entry DOM subtree which
30
+ * in turn corresponds to a <repeat> in the form body definition, and a
31
+ * 'repeat-sequence' definition.
32
+ */
33
+ export type RepeatInstanceType = 'repeat-instance';
34
+ /**
35
+ * Corresponds to a model/entry DOM subtree which **does not** correspond to a
36
+ * <repeat> in the form definition. This will typically correspond to a <group>,
37
+ * but this is not strictly necessary per spec (hence the distinct name).
38
+ */
39
+ export type SubtreeNodeType = 'subtree';
40
+ /**
41
+ * Corresponds to a model/entry DOM leaf node, i.e. one of:
42
+ *
43
+ * - An element with no child elements
44
+ * - Any attribute corresponding to a bind's `nodeset` expression
45
+ */
46
+ export type ValueNodeType = 'value-node';
47
+ export type NodeDefinitionType = RootNodeType | RepeatSequenceType | RepeatTemplateType | RepeatInstanceType | SubtreeNodeType | ValueNodeType;
48
+ export type ParentNodeDefinition = RootDefinition | RepeatTemplateDefinition | RepeatInstanceDefinition | SubtreeDefinition;
49
+ export type ChildNodeDefinition = RepeatSequenceDefinition | SubtreeDefinition | ValueNodeDefinition;
50
+ export type ChildNodeInstanceDefinition = RepeatTemplateDefinition | RepeatInstanceDefinition | SubtreeDefinition | ValueNodeDefinition;
51
+ export type NodeChildren<Type extends NodeDefinitionType> = Type extends ParentNodeDefinition['type'] ? readonly ChildNodeDefinition[] : null;
52
+ export type NodeInstances<Type extends NodeDefinitionType> = Type extends 'repeat-sequence' ? readonly RepeatInstanceDefinition[] : null;
53
+ export type NodeParent<Type extends NodeDefinitionType> = Type extends ChildNodeDefinition['type'] | ChildNodeInstanceDefinition['type'] ? ParentNodeDefinition : null;
54
+ export type ModelNode<Type extends NodeDefinitionType> = Type extends 'repeat-sequence' ? null : Element;
55
+ export type NodeDefaultValue<Type extends NodeDefinitionType> = Type extends 'value-node' ? string : null;
56
+ export interface NodeDefinition<Type extends NodeDefinitionType> {
57
+ readonly type: Type;
58
+ readonly bind: BindDefinition;
59
+ readonly nodeset: string;
60
+ readonly nodeName: string;
61
+ readonly bodyElement: AnyBodyElementDefinition | RepeatDefinition | null;
62
+ readonly isTranslated: boolean;
63
+ readonly dependencyExpressions: ReadonlySet<string>;
64
+ readonly root: RootDefinition;
65
+ readonly parent: NodeParent<Type>;
66
+ readonly children: NodeChildren<Type>;
67
+ readonly instances: NodeInstances<Type>;
68
+ readonly node: ModelNode<Type>;
69
+ readonly defaultValue: NodeDefaultValue<Type>;
70
+ }
71
+ export type AnyNodeDefinition = RootDefinition | RepeatSequenceDefinition | RepeatTemplateDefinition | RepeatInstanceDefinition | SubtreeDefinition | ValueNodeDefinition;
72
+ export type TypedNodeDefinition<Type> = Extract<AnyNodeDefinition, {
73
+ readonly type: Type;
74
+ }>;
@@ -0,0 +1,15 @@
1
+ import { RepeatDefinition } from '../body/RepeatDefinition.ts';
2
+ import { DescendentNodeDefinition } from './DescendentNodeDefinition.ts';
3
+ import type { ChildNodeDefinition, NodeDefinition } from './NodeDefinition.ts';
4
+ import type { RepeatSequenceDefinition } from './RepeatSequenceDefinition.ts';
5
+ export declare class RepeatInstanceDefinition extends DescendentNodeDefinition<'repeat-instance', RepeatDefinition> implements NodeDefinition<'repeat-instance'> {
6
+ protected readonly sequence: RepeatSequenceDefinition;
7
+ readonly node: Element;
8
+ readonly type = "repeat-instance";
9
+ readonly nodeName: string;
10
+ readonly children: readonly ChildNodeDefinition[];
11
+ readonly instances: null;
12
+ readonly defaultValue: null;
13
+ constructor(sequence: RepeatSequenceDefinition, node: Element);
14
+ toJSON(): Omit<this, "toJSON" | "parent" | "bind" | "root" | "bodyElement" | "sequence">;
15
+ }
@@ -0,0 +1,19 @@
1
+ import { RepeatGroupDefinition } from '../body/group/RepeatGroupDefinition.ts';
2
+ import type { BindDefinition } from './BindDefinition.ts';
3
+ import { DescendentNodeDefinition } from './DescendentNodeDefinition.ts';
4
+ import type { NodeDefinition, ParentNodeDefinition } from './NodeDefinition.ts';
5
+ import { RepeatInstanceDefinition } from './RepeatInstanceDefinition.ts';
6
+ import { RepeatTemplateDefinition } from './RepeatTemplateDefinition.ts';
7
+ export declare class RepeatSequenceDefinition extends DescendentNodeDefinition<'repeat-sequence', RepeatGroupDefinition> implements NodeDefinition<'repeat-sequence'> {
8
+ static createTemplateElement(instanceElement: Element): Element;
9
+ static createInstanceElement(templateElement: Element): Element;
10
+ readonly type = "repeat-sequence";
11
+ readonly template: RepeatTemplateDefinition;
12
+ readonly children: null;
13
+ readonly instances: RepeatInstanceDefinition[];
14
+ readonly node: null;
15
+ readonly nodeName: string;
16
+ readonly defaultValue: null;
17
+ constructor(parent: ParentNodeDefinition, bind: BindDefinition, bodyElement: RepeatGroupDefinition, modelNodes: readonly [Element, ...Element[]]);
18
+ toJSON(): Omit<this, "toJSON" | "parent" | "bind" | "root" | "bodyElement">;
19
+ }
@@ -0,0 +1,29 @@
1
+ import { JAVAROSA_NAMESPACE_URI } from '../../../common/src/constants/xmlns.ts';
2
+ import type { RepeatDefinition } from '../body/RepeatDefinition.ts';
3
+ import { DescendentNodeDefinition } from './DescendentNodeDefinition.ts';
4
+ import type { ChildNodeDefinition, NodeDefinition } from './NodeDefinition.ts';
5
+ import type { RepeatSequenceDefinition } from './RepeatSequenceDefinition.ts';
6
+ interface ExplicitRepeatTemplateElement extends Element {
7
+ getAttributeNS(namespaceURI: typeof JAVAROSA_NAMESPACE_URI, name: 'template'): string;
8
+ getAttributeNS(namespaceURI: string | null, name: string): string | null;
9
+ hasAttributeNS(namespaceURI: typeof JAVAROSA_NAMESPACE_URI, name: 'template'): true;
10
+ (namespaceURI: string | null, name: string): boolean;
11
+ }
12
+ interface ParsedRepeatNodes {
13
+ readonly template: RepeatTemplateDefinition;
14
+ readonly instanceNodes: readonly Element[];
15
+ }
16
+ export declare class RepeatTemplateDefinition extends DescendentNodeDefinition<'repeat-template', RepeatDefinition> implements NodeDefinition<'repeat-template'> {
17
+ protected readonly sequence: RepeatSequenceDefinition;
18
+ protected readonly templateNode: ExplicitRepeatTemplateElement;
19
+ static parseModelNodes(sequence: RepeatSequenceDefinition, modelNodes: readonly [Element, ...Element[]]): ParsedRepeatNodes;
20
+ readonly type = "repeat-template";
21
+ readonly node: Element;
22
+ readonly nodeName: string;
23
+ readonly children: readonly ChildNodeDefinition[];
24
+ readonly instances: null;
25
+ readonly defaultValue: null;
26
+ protected constructor(sequence: RepeatSequenceDefinition, templateNode: ExplicitRepeatTemplateElement);
27
+ toJSON(): Omit<this, "toJSON" | "parent" | "bind" | "root" | "bodyElement" | "sequence">;
28
+ }
29
+ export {};
@@ -0,0 +1,24 @@
1
+ import type { XFormDefinition } from '../XFormDefinition.ts';
2
+ import type { BindDefinition } from './BindDefinition.ts';
3
+ import type { ModelDefinition } from './ModelDefinition.ts';
4
+ import type { ChildNodeDefinition, NodeDefinition, ParentNodeDefinition } from './NodeDefinition.ts';
5
+ export declare class RootDefinition implements NodeDefinition<'root'> {
6
+ protected readonly form: XFormDefinition;
7
+ protected readonly model: ModelDefinition;
8
+ readonly type = "root";
9
+ readonly bind: BindDefinition;
10
+ readonly nodeset: string;
11
+ readonly nodeName: string;
12
+ readonly bodyElement: null;
13
+ readonly root: this;
14
+ readonly parent: null;
15
+ readonly children: readonly ChildNodeDefinition[];
16
+ readonly instances: null;
17
+ readonly node: Element;
18
+ readonly defaultValue: null;
19
+ readonly isTranslated = false;
20
+ readonly dependencyExpressions: ReadonlySet<string>;
21
+ constructor(form: XFormDefinition, model: ModelDefinition);
22
+ buildSubtree(parent: ParentNodeDefinition): readonly ChildNodeDefinition[];
23
+ toJSON(): Omit<this, "model" | "toJSON" | "form" | "bind" | "root" | "bodyElement" | "buildSubtree">;
24
+ }
@@ -0,0 +1,14 @@
1
+ import type { AnyBodyElementDefinition, NonRepeatGroupElementDefinition } from '../body/BodyDefinition.ts';
2
+ import type { BindDefinition } from './BindDefinition.ts';
3
+ import { DescendentNodeDefinition } from './DescendentNodeDefinition.ts';
4
+ import type { ChildNodeDefinition, NodeDefinition, ParentNodeDefinition } from './NodeDefinition.ts';
5
+ export declare class SubtreeDefinition extends DescendentNodeDefinition<'subtree', NonRepeatGroupElementDefinition | null> implements NodeDefinition<'subtree'> {
6
+ readonly node: Element;
7
+ readonly type = "subtree";
8
+ readonly nodeName: string;
9
+ readonly children: readonly ChildNodeDefinition[];
10
+ readonly instances: null;
11
+ readonly defaultValue: null;
12
+ constructor(parent: ParentNodeDefinition, bind: BindDefinition, bodyElement: AnyBodyElementDefinition | null, node: Element);
13
+ toJSON(): Omit<this, "toJSON" | "parent" | "bind" | "root" | "bodyElement">;
14
+ }
@@ -0,0 +1,15 @@
1
+ import type { AnyBodyElementDefinition } from '../body/BodyDefinition.ts';
2
+ import type { AnyControlDefinition } from '../body/control/ControlDefinition.ts';
3
+ import type { BindDefinition } from './BindDefinition.ts';
4
+ import { DescendentNodeDefinition } from './DescendentNodeDefinition.ts';
5
+ import type { NodeDefinition, ParentNodeDefinition } from './NodeDefinition.ts';
6
+ export declare class ValueNodeDefinition extends DescendentNodeDefinition<'value-node', AnyControlDefinition | null> implements NodeDefinition<'value-node'> {
7
+ readonly node: Element;
8
+ readonly type = "value-node";
9
+ readonly nodeName: string;
10
+ readonly children: null;
11
+ readonly instances: null;
12
+ readonly defaultValue: string;
13
+ constructor(parent: ParentNodeDefinition, bind: BindDefinition, bodyElement: AnyBodyElementDefinition | null, node: Element);
14
+ toJSON(): Omit<this, "toJSON" | "parent" | "bind" | "root" | "bodyElement">;
15
+ }