@getodk/xforms-engine 0.13.0 → 0.15.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 (138) hide show
  1. package/dist/client/AttributeNode.d.ts +53 -0
  2. package/dist/client/BaseItem.d.ts +6 -0
  3. package/dist/client/GroupNode.d.ts +4 -4
  4. package/dist/client/MarkdownNode.d.ts +33 -0
  5. package/dist/client/RankNode.d.ts +2 -4
  6. package/dist/client/SelectNode.d.ts +2 -5
  7. package/dist/client/TextRange.d.ts +2 -2
  8. package/dist/client/hierarchy.d.ts +1 -2
  9. package/dist/client/index.d.ts +2 -1
  10. package/dist/client/node-types.d.ts +2 -2
  11. package/dist/client/validation.d.ts +7 -1
  12. package/dist/index.js +10758 -402
  13. package/dist/index.js.map +1 -1
  14. package/dist/instance/Attribute.d.ts +58 -0
  15. package/dist/instance/Group.d.ts +4 -0
  16. package/dist/instance/PrimaryInstance.d.ts +4 -0
  17. package/dist/instance/Root.d.ts +4 -0
  18. package/dist/instance/UploadControl.d.ts +4 -0
  19. package/dist/instance/abstract/InstanceNode.d.ts +7 -4
  20. package/dist/instance/abstract/ValueNode.d.ts +1 -0
  21. package/dist/instance/attachments/buildAttributes.d.ts +3 -0
  22. package/dist/instance/hierarchy.d.ts +6 -6
  23. package/dist/instance/internal-api/AttributeContext.d.ts +29 -0
  24. package/dist/instance/internal-api/serialization/ClientReactiveSerializableAttributeNode.d.ts +16 -0
  25. package/dist/instance/internal-api/serialization/ClientReactiveSerializableParentNode.d.ts +2 -0
  26. package/dist/instance/internal-api/serialization/ClientReactiveSerializableTemplatedNode.d.ts +2 -2
  27. package/dist/instance/markdown/MarkdownNode.d.ts +75 -0
  28. package/dist/instance/repeat/BaseRepeatRange.d.ts +5 -0
  29. package/dist/instance/repeat/RepeatInstance.d.ts +4 -2
  30. package/dist/instance/text/TextChunk.d.ts +0 -1
  31. package/dist/instance/text/TextRange.d.ts +2 -1
  32. package/dist/instance/text/markdownFormat.d.ts +3 -0
  33. package/dist/integration/xpath/adapter/XFormsXPathNode.d.ts +2 -2
  34. package/dist/lib/client-reactivity/instance-state/createAttributeNodeInstanceState.d.ts +3 -0
  35. package/dist/lib/client-reactivity/instance-state/createTemplatedNodeInstanceState.d.ts +0 -3
  36. package/dist/lib/names/NamespaceDeclarationMap.d.ts +1 -1
  37. package/dist/lib/reactivity/createAttributeState.d.ts +16 -0
  38. package/dist/lib/reactivity/createAttributeValueState.d.ts +15 -0
  39. package/dist/lib/reactivity/createItemCollection.d.ts +5 -7
  40. package/dist/lib/xml-serialization.d.ts +5 -9
  41. package/dist/parse/XFormDOM.d.ts +1 -1
  42. package/dist/parse/body/BodyDefinition.d.ts +2 -8
  43. package/dist/parse/body/GroupElementDefinition.d.ts +22 -0
  44. package/dist/parse/body/control/ItemsetDefinition.d.ts +3 -0
  45. package/dist/parse/expression/ItemPropertyExpression.d.ts +6 -0
  46. package/dist/parse/model/AttributeDefinition.d.ts +22 -0
  47. package/dist/parse/model/{RootAttributeMap.d.ts → AttributeDefinitionMap.d.ts} +4 -10
  48. package/dist/parse/model/{SubtreeDefinition.d.ts → GroupDefinition.d.ts} +8 -4
  49. package/dist/parse/model/LeafNodeDefinition.d.ts +1 -0
  50. package/dist/parse/model/NodeDefinition.d.ts +13 -9
  51. package/dist/parse/model/RepeatDefinition.d.ts +5 -2
  52. package/dist/parse/model/RootDefinition.d.ts +3 -3
  53. package/dist/parse/text/LabelDefinition.d.ts +4 -5
  54. package/dist/solid.js +10758 -402
  55. package/dist/solid.js.map +1 -1
  56. package/package.json +6 -5
  57. package/src/client/AttributeNode.ts +62 -0
  58. package/src/client/BaseItem.ts +7 -0
  59. package/src/client/GroupNode.ts +4 -10
  60. package/src/client/MarkdownNode.ts +53 -0
  61. package/src/client/RankNode.ts +2 -5
  62. package/src/client/SelectNode.ts +2 -6
  63. package/src/client/TextRange.ts +2 -2
  64. package/src/client/hierarchy.ts +0 -2
  65. package/src/client/index.ts +2 -1
  66. package/src/client/node-types.ts +1 -1
  67. package/src/client/validation.ts +9 -1
  68. package/src/instance/Attribute.ts +164 -0
  69. package/src/instance/Group.ts +17 -1
  70. package/src/instance/InputControl.ts +1 -0
  71. package/src/instance/ModelValue.ts +1 -0
  72. package/src/instance/Note.ts +1 -0
  73. package/src/instance/PrimaryInstance.ts +17 -0
  74. package/src/instance/RangeControl.ts +1 -0
  75. package/src/instance/RankControl.ts +1 -0
  76. package/src/instance/Root.ts +16 -0
  77. package/src/instance/SelectControl.ts +1 -0
  78. package/src/instance/TriggerControl.ts +1 -0
  79. package/src/instance/UploadControl.ts +14 -0
  80. package/src/instance/abstract/DescendantNode.ts +5 -1
  81. package/src/instance/abstract/InstanceNode.ts +6 -3
  82. package/src/instance/abstract/ValueNode.ts +1 -0
  83. package/src/instance/attachments/buildAttributes.ts +8 -0
  84. package/src/instance/children/buildChildren.ts +1 -17
  85. package/src/instance/children/normalizeChildInitOptions.ts +44 -59
  86. package/src/instance/hierarchy.ts +3 -7
  87. package/src/instance/internal-api/AttributeContext.ts +34 -0
  88. package/src/instance/internal-api/serialization/ClientReactiveSerializableAttributeNode.ts +19 -0
  89. package/src/instance/internal-api/serialization/ClientReactiveSerializableParentNode.ts +2 -0
  90. package/src/instance/internal-api/serialization/ClientReactiveSerializableTemplatedNode.ts +2 -3
  91. package/src/instance/markdown/MarkdownNode.ts +115 -0
  92. package/src/instance/repeat/BaseRepeatRange.ts +14 -0
  93. package/src/instance/repeat/RepeatInstance.ts +14 -5
  94. package/src/instance/text/TextChunk.ts +0 -5
  95. package/src/instance/text/TextRange.ts +5 -3
  96. package/src/instance/text/markdownFormat.ts +214 -0
  97. package/src/integration/xpath/adapter/XFormsXPathNode.ts +3 -1
  98. package/src/integration/xpath/adapter/names.ts +0 -1
  99. package/src/lib/client-reactivity/instance-state/createAttributeNodeInstanceState.ts +16 -0
  100. package/src/lib/client-reactivity/instance-state/createParentNodeInstanceState.ts +5 -5
  101. package/src/lib/client-reactivity/instance-state/createRootInstanceState.ts +6 -9
  102. package/src/lib/client-reactivity/instance-state/createTemplatedNodeInstanceState.ts +5 -15
  103. package/src/lib/names/NamespaceDeclarationMap.ts +1 -1
  104. package/src/lib/reactivity/createAttributeState.ts +51 -0
  105. package/src/lib/reactivity/createAttributeValueState.ts +189 -0
  106. package/src/lib/reactivity/createItemCollection.ts +25 -9
  107. package/src/lib/xml-serialization.ts +30 -34
  108. package/src/parse/body/BodyDefinition.ts +7 -34
  109. package/src/parse/body/GroupElementDefinition.ts +47 -0
  110. package/src/parse/body/control/ItemsetDefinition.ts +7 -0
  111. package/src/parse/expression/ItemPropertyExpression.ts +12 -0
  112. package/src/parse/model/AttributeDefinition.ts +58 -0
  113. package/src/parse/model/{RootAttributeMap.ts → AttributeDefinitionMap.ts} +7 -13
  114. package/src/parse/model/{SubtreeDefinition.ts → GroupDefinition.ts} +12 -8
  115. package/src/parse/model/LeafNodeDefinition.ts +1 -0
  116. package/src/parse/model/NodeDefinition.ts +19 -12
  117. package/src/parse/model/RepeatDefinition.ts +10 -3
  118. package/src/parse/model/RootDefinition.ts +6 -6
  119. package/src/parse/model/nodeDefinitionMap.ts +1 -1
  120. package/src/parse/text/LabelDefinition.ts +4 -9
  121. package/dist/client/SubtreeNode.d.ts +0 -56
  122. package/dist/error/TemplatedNodeAttributeSerializationError.d.ts +0 -22
  123. package/dist/instance/Subtree.d.ts +0 -38
  124. package/dist/instance/text/FormattedTextStub.d.ts +0 -1
  125. package/dist/parse/body/group/BaseGroupDefinition.d.ts +0 -40
  126. package/dist/parse/body/group/LogicalGroupDefinition.d.ts +0 -6
  127. package/dist/parse/body/group/PresentationGroupDefinition.d.ts +0 -11
  128. package/dist/parse/body/group/StructuralGroupDefinition.d.ts +0 -6
  129. package/dist/parse/model/RootAttributeDefinition.d.ts +0 -21
  130. package/src/client/SubtreeNode.ts +0 -61
  131. package/src/error/TemplatedNodeAttributeSerializationError.ts +0 -24
  132. package/src/instance/Subtree.ts +0 -102
  133. package/src/instance/text/FormattedTextStub.ts +0 -8
  134. package/src/parse/body/group/BaseGroupDefinition.ts +0 -89
  135. package/src/parse/body/group/LogicalGroupDefinition.ts +0 -11
  136. package/src/parse/body/group/PresentationGroupDefinition.ts +0 -28
  137. package/src/parse/body/group/StructuralGroupDefinition.ts +0 -11
  138. package/src/parse/model/RootAttributeDefinition.ts +0 -44
@@ -1,3 +1,5 @@
1
+ import { GeneralChildNode } from '../client/hierarchy.ts';
2
+ import { Attribute } from '../instance/Attribute.ts';
1
3
  import { NamespaceDeclarationMap } from './names/NamespaceDeclarationMap.ts';
2
4
  import { QualifiedName } from './names/QualifiedName.ts';
3
5
  declare const ESCAPED_XML_TEXT_BRAND: unique symbol;
@@ -38,13 +40,7 @@ export type EscapedXMLText = string & {
38
40
  * reconsider this assumption.
39
41
  */
40
42
  export declare const escapeXMLText: <Text extends string>(text: Exclude<Text, EscapedXMLText>, attr?: boolean) => EscapedXMLText;
41
- interface SerializableElementAttribute {
42
- serializeAttributeXML(): string;
43
- }
44
- interface ElementXMLSerializationOptions {
45
- readonly namespaceDeclarations?: NamespaceDeclarationMap;
46
- readonly attributes?: readonly SerializableElementAttribute[];
47
- }
48
- export declare const serializeParentElementXML: (qualifiedName: QualifiedName, serializedChildren: readonly string[], options?: ElementXMLSerializationOptions) => string;
49
- export declare const serializeLeafElementXML: (qualifiedName: QualifiedName, xmlValue: EscapedXMLText, options?: ElementXMLSerializationOptions) => string;
43
+ export declare const serializeAttributeXML: (qualifiedName: QualifiedName, xmlValue: EscapedXMLText) => string;
44
+ export declare const serializeParentElementXML: (qualifiedName: QualifiedName, children: readonly GeneralChildNode[], attributes: readonly Attribute[], namespaceDeclarations?: NamespaceDeclarationMap) => string;
45
+ export declare const serializeLeafElementXML: (qualifiedName: QualifiedName, xmlValue: EscapedXMLText, namespaceDeclarations?: NamespaceDeclarationMap) => string;
50
46
  export {};
@@ -29,7 +29,7 @@ export declare class XFormDOM {
29
29
  readonly secondaryInstanceElements: readonly DOMSecondaryInstanceElement[];
30
30
  readonly body: Element;
31
31
  protected constructor(sourceXML: string, options: XFormDOMOptions);
32
- toJSON(): Omit<this, "head" | "html" | "title" | "toJSON" | "model" | "primaryInstance" | "primaryInstanceRoot" | "xformDocument"> & {
32
+ toJSON(): Omit<this, "head" | "html" | "title" | "toJSON" | "primaryInstance" | "model" | "primaryInstanceRoot" | "xformDocument"> & {
33
33
  xformDocument: string;
34
34
  html: string;
35
35
  head: string;
@@ -7,9 +7,7 @@ import { RankControlDefinition } from './control/RankControlDefinition.ts';
7
7
  import { AnySelectControlDefinition } from './control/SelectControlDefinition.ts';
8
8
  import { TriggerControlDefinition } from './control/TriggerControlDefinition.ts';
9
9
  import { UploadControlDefinition } from './control/UploadControlDefinition.ts';
10
- import { LogicalGroupDefinition } from './group/LogicalGroupDefinition.ts';
11
- import { PresentationGroupDefinition } from './group/PresentationGroupDefinition.ts';
12
- import { StructuralGroupDefinition } from './group/StructuralGroupDefinition.ts';
10
+ import { GroupElementDefinition } from './GroupElementDefinition.ts';
13
11
  import { RepeatElementDefinition } from './RepeatElementDefinition.ts';
14
12
  import { UnsupportedBodyElementDefinition } from './UnsupportedBodyElementDefinition.ts';
15
13
  export interface BodyElementParentContext {
@@ -18,14 +16,10 @@ export interface BodyElementParentContext {
18
16
  readonly element: Element;
19
17
  }
20
18
  export type ControlElementDefinition = AnySelectControlDefinition | InputControlDefinition | RangeControlDefinition | RankControlDefinition | TriggerControlDefinition | UploadControlDefinition;
21
- type SupportedBodyElementDefinition = RepeatElementDefinition | LogicalGroupDefinition | PresentationGroupDefinition | StructuralGroupDefinition | ControlElementDefinition;
19
+ type SupportedBodyElementDefinition = ControlElementDefinition | GroupElementDefinition | RepeatElementDefinition;
22
20
  export type AnyBodyElementDefinition = SupportedBodyElementDefinition | UnsupportedBodyElementDefinition;
23
21
  export type BodyElementDefinitionArray = readonly AnyBodyElementDefinition[];
24
22
  export type AnyBodyElementType = AnyBodyElementDefinition['type'];
25
- export type AnyGroupElementDefinition = Extract<AnyBodyElementDefinition, {
26
- readonly type: `${string}-group`;
27
- }>;
28
- export declare const groupElementDefinition: (element: AnyBodyElementDefinition) => AnyGroupElementDefinition | null;
29
23
  export type AnyControlElementDefinition = Extract<AnyBodyElementDefinition, {
30
24
  readonly category: 'control';
31
25
  }>;
@@ -0,0 +1,22 @@
1
+ import { LabelDefinition } from '../text/LabelDefinition.ts';
2
+ import { XFormDefinition } from '../XFormDefinition.ts';
3
+ import { StructureElementAppearanceDefinition } from './appearance/structureElementAppearanceParser.ts';
4
+ import { BodyElementDefinitionArray, BodyElementParentContext } from './BodyDefinition.ts';
5
+ import { BodyElementDefinition } from './BodyElementDefinition.ts';
6
+ /**
7
+ * As per the spec: https://getodk.github.io/xforms-spec/#groups
8
+ *
9
+ * A group combines elements together.
10
+ * The group can have a label, and if so is referred to as a "presentation group".
11
+ * The group can have a ref, and if so is referred to as a "logical group".
12
+ */
13
+ export declare class GroupElementDefinition extends BodyElementDefinition<'group'> {
14
+ readonly category = "structure";
15
+ readonly type = "group";
16
+ readonly children: BodyElementDefinitionArray;
17
+ readonly reference: string | null;
18
+ readonly appearances: StructureElementAppearanceDefinition;
19
+ readonly label: LabelDefinition | null;
20
+ static isCompatible(localName: string): boolean;
21
+ constructor(form: XFormDefinition, parent: BodyElementParentContext, element: Element);
22
+ }
@@ -1,4 +1,6 @@
1
+ import { StaticElement } from '../../../integration/xpath/static-dom/StaticElement.ts';
1
2
  import { ItemsetElement } from '../../../lib/dom/query.ts';
3
+ import { DependentExpression } from '../../expression/abstract/DependentExpression.ts';
2
4
  import { ItemsetNodesetExpression } from '../../expression/ItemsetNodesetExpression.ts';
3
5
  import { ItemsetValueExpression } from '../../expression/ItemsetValueExpression.ts';
4
6
  import { ItemsetLabelDefinition } from '../../text/ItemsetLabelDefinition.ts';
@@ -15,4 +17,5 @@ export declare class ItemsetDefinition extends BodyElementDefinition<'itemset'>
15
17
  readonly nodes: ItemsetNodesetExpression;
16
18
  readonly value: ItemsetValueExpression;
17
19
  constructor(form: XFormDefinition, parent: AnySelectControlDefinition | RankControlDefinition, element: ItemsetElement);
20
+ getPropertiesExpressions(propertiesNodes: StaticElement[]): Array<DependentExpression<'string'>>;
18
21
  }
@@ -0,0 +1,6 @@
1
+ import { StaticElement } from '../../integration/xpath/static-dom/StaticElement.ts';
2
+ import { DependentExpression } from './abstract/DependentExpression.ts';
3
+ export declare class ItemPropertyExpression extends DependentExpression<'string'> {
4
+ static from(propertiesNodes: StaticElement[]): ItemPropertyExpression[];
5
+ constructor(propertyName: string);
6
+ }
@@ -0,0 +1,22 @@
1
+ import { StaticAttribute } from '../../integration/xpath/static-dom/StaticAttribute.ts';
2
+ import { NamespaceDeclarationMap, NamedNodeDefinition } from '../../lib/names/NamespaceDeclarationMap.ts';
3
+ import { QualifiedName } from '../../lib/names/QualifiedName.ts';
4
+ import { BindDefinition } from './BindDefinition.ts';
5
+ import { NodeDefinition } from './NodeDefinition.ts';
6
+ import { RootDefinition } from './RootDefinition.ts';
7
+ export declare class AttributeDefinition extends NodeDefinition<'attribute'> implements NamedNodeDefinition {
8
+ readonly template: StaticAttribute;
9
+ private readonly serializedXML;
10
+ readonly value: string;
11
+ readonly type = "attribute";
12
+ readonly namespaceDeclarations: NamespaceDeclarationMap;
13
+ readonly bodyElement: null;
14
+ readonly root: RootDefinition;
15
+ readonly isTranslated: boolean;
16
+ readonly parent: null;
17
+ readonly children: null;
18
+ readonly attributes: null;
19
+ readonly qualifiedName: QualifiedName;
20
+ constructor(root: RootDefinition, bind: BindDefinition, template: StaticAttribute);
21
+ serializeAttributeXML(): string;
22
+ }
@@ -1,14 +1,8 @@
1
1
  import { StaticElement } from '../../integration/xpath/static-dom/StaticElement.ts';
2
2
  import { QualifiedName } from '../../lib/names/QualifiedName.ts';
3
- import { RootAttributeDefinition } from './RootAttributeDefinition.ts';
4
- import { RootDefinition } from './RootDefinition.ts';
3
+ import { AttributeDefinition } from './AttributeDefinition.ts';
4
+ import { ModelDefinition } from './ModelDefinition.ts';
5
5
  /**
6
- * @todo This can be trivially expanded to a narrowly general case when we
7
- * prioritize work to
8
- * {@link https://github.com/getodk/web-forms/issues/285 | support attributes}
9
- * (as modeled form nodes on par with elements). It's been deferred here to
10
- * avoid expanding scope of an already fairly large yak shave.
11
- *
12
6
  * @todo There's a **much more expansive** general case just waiting for a good
13
7
  * opportuntity to prioritize it. E.g. a `NamedNodeMap<T>`, where T is any
14
8
  * generalized concept of a named node. This expansive generalization would have
@@ -18,7 +12,7 @@ import { RootDefinition } from './RootDefinition.ts';
18
12
  *
19
13
  * @see {@link QualifiedName} for more detail.
20
14
  */
21
- export declare class RootAttributeMap extends Map<QualifiedName, RootAttributeDefinition> {
22
- static from(root: RootDefinition, instanceNode: StaticElement): RootAttributeMap;
15
+ export declare class AttributeDefinitionMap extends Map<QualifiedName, AttributeDefinition> {
16
+ static from(model: ModelDefinition, instanceNode: StaticElement): AttributeDefinitionMap;
23
17
  private constructor();
24
18
  }
@@ -1,16 +1,20 @@
1
1
  import { StaticElement } from '../../integration/xpath/static-dom/StaticElement.ts';
2
2
  import { NamespaceDeclarationMap } from '../../lib/names/NamespaceDeclarationMap.ts';
3
3
  import { QualifiedName } from '../../lib/names/QualifiedName.ts';
4
- import { AnyBodyElementDefinition, AnyGroupElementDefinition } from '../body/BodyDefinition.ts';
4
+ import { AnyBodyElementDefinition } from '../body/BodyDefinition.ts';
5
+ import { GroupElementDefinition } from '../body/GroupElementDefinition.ts';
6
+ import { AttributeDefinitionMap } from './AttributeDefinitionMap.ts';
5
7
  import { BindDefinition } from './BindDefinition.ts';
6
8
  import { DescendentNodeDefinition } from './DescendentNodeDefinition.ts';
9
+ import { ModelDefinition } from './ModelDefinition.ts';
7
10
  import { ChildNodeDefinition, ParentNodeDefinition } from './NodeDefinition.ts';
8
- export declare class SubtreeDefinition extends DescendentNodeDefinition<'subtree', AnyGroupElementDefinition | null> {
11
+ export declare class GroupDefinition extends DescendentNodeDefinition<'group', GroupElementDefinition | null> {
9
12
  readonly template: StaticElement;
10
- readonly type = "subtree";
13
+ readonly type = "group";
11
14
  readonly namespaceDeclarations: NamespaceDeclarationMap;
12
15
  readonly qualifiedName: QualifiedName;
13
16
  readonly children: readonly ChildNodeDefinition[];
14
- constructor(parent: ParentNodeDefinition, bind: BindDefinition, bodyElement: AnyBodyElementDefinition | null, template: StaticElement);
17
+ readonly attributes: AttributeDefinitionMap;
18
+ constructor(model: ModelDefinition, parent: ParentNodeDefinition, bind: BindDefinition, bodyElement: AnyBodyElementDefinition | null, template: StaticElement);
15
19
  toJSON(): Omit<this, "parent" | "toJSON" | "bind" | "root" | "bodyElement">;
16
20
  }
@@ -13,6 +13,7 @@ export declare class LeafNodeDefinition<V extends ValueType = ValueType> extends
13
13
  readonly namespaceDeclarations: NamespaceDeclarationMap;
14
14
  readonly qualifiedName: QualifiedName;
15
15
  readonly children: null;
16
+ readonly attributes: null;
16
17
  constructor(parent: ParentNodeDefinition, bind: BindDefinition, bodyElement: AnyBodyElementDefinition | null, template: StaticLeafElement);
17
18
  toJSON(): Omit<this, "parent" | "toJSON" | "bind" | "root" | "bodyElement">;
18
19
  }
@@ -1,13 +1,16 @@
1
+ import { StaticAttribute } from '../../integration/xpath/static-dom/StaticAttribute.ts';
1
2
  import { StaticElement } from '../../integration/xpath/static-dom/StaticElement.ts';
2
3
  import { NamedSubtreeDefinition, NamespaceDeclarationMap } from '../../lib/names/NamespaceDeclarationMap.ts';
3
4
  import { QualifiedName } from '../../lib/names/QualifiedName.ts';
4
5
  import { AnyBodyElementDefinition } from '../body/BodyDefinition.ts';
5
6
  import { RepeatElementDefinition } from '../body/RepeatElementDefinition.ts';
7
+ import { AttributeDefinition } from './AttributeDefinition.ts';
8
+ import { AttributeDefinitionMap } from './AttributeDefinitionMap.ts';
6
9
  import { BindDefinition } from './BindDefinition.ts';
10
+ import { GroupDefinition } from './GroupDefinition.ts';
7
11
  import { LeafNodeDefinition } from './LeafNodeDefinition.ts';
8
12
  import { AnyRepeatDefinition } from './RepeatDefinition.ts';
9
13
  import { RootDefinition } from './RootDefinition.ts';
10
- import { SubtreeDefinition } from './SubtreeDefinition.ts';
11
14
  /**
12
15
  * Corresponds to a model instance root node, i.e.:
13
16
  *
@@ -27,10 +30,9 @@ export type RootNodeType = 'root';
27
30
  export type RepeatType = 'repeat';
28
31
  /**
29
32
  * Corresponds to a model instance subtree which **does not** correspond to a
30
- * <repeat> in the form definition. This will typically correspond to a <group>,
31
- * but this is not strictly necessary per spec (hence the distinct name).
33
+ * <repeat> in the form definition.
32
34
  */
33
- export type SubtreeNodeType = 'subtree';
35
+ export type GroupNodeType = 'group';
34
36
  /**
35
37
  * Corresponds to a model instance leaf node, i.e. one of:
36
38
  *
@@ -38,9 +40,10 @@ export type SubtreeNodeType = 'subtree';
38
40
  * - Any attribute corresponding to a bind's `nodeset` expression
39
41
  */
40
42
  export type LeafNodeType = 'leaf-node';
41
- export type NodeDefinitionType = RootNodeType | RepeatType | SubtreeNodeType | LeafNodeType;
42
- export type ParentNodeDefinition = RootDefinition | AnyRepeatDefinition | SubtreeDefinition;
43
- export type ChildNodeDefinition = AnyRepeatDefinition | LeafNodeDefinition | SubtreeDefinition;
43
+ export type AttributeNodeType = 'attribute';
44
+ export type NodeDefinitionType = RootNodeType | RepeatType | GroupNodeType | LeafNodeType | AttributeNodeType;
45
+ export type ParentNodeDefinition = RootDefinition | AnyRepeatDefinition | GroupDefinition;
46
+ export type ChildNodeDefinition = AnyRepeatDefinition | GroupDefinition | LeafNodeDefinition;
44
47
  export declare abstract class NodeDefinition<Type extends NodeDefinitionType> implements NamedSubtreeDefinition {
45
48
  readonly bind: BindDefinition;
46
49
  abstract readonly type: Type;
@@ -50,9 +53,10 @@ export declare abstract class NodeDefinition<Type extends NodeDefinitionType> im
50
53
  abstract readonly isTranslated: boolean;
51
54
  abstract readonly root: RootDefinition;
52
55
  abstract readonly parent: ParentNodeDefinition | null;
53
- abstract readonly template: StaticElement;
56
+ abstract readonly template: StaticAttribute | StaticElement;
54
57
  abstract readonly children: readonly ChildNodeDefinition[] | null;
58
+ abstract readonly attributes: AttributeDefinitionMap | null;
55
59
  readonly nodeset: string;
56
60
  constructor(bind: BindDefinition);
57
61
  }
58
- export type AnyNodeDefinition = RootDefinition | AnyRepeatDefinition | SubtreeDefinition | LeafNodeDefinition;
62
+ export type AnyNodeDefinition = RootDefinition | AnyRepeatDefinition | GroupDefinition | LeafNodeDefinition | AttributeDefinition;
@@ -3,8 +3,10 @@ import { NamespaceDeclarationMap } from '../../lib/names/NamespaceDeclarationMap
3
3
  import { QualifiedName } from '../../lib/names/QualifiedName.ts';
4
4
  import { RepeatElementDefinition } from '../body/RepeatElementDefinition.ts';
5
5
  import { RepeatCountControlExpression } from '../expression/RepeatCountControlExpression.ts';
6
+ import { AttributeDefinitionMap } from './AttributeDefinitionMap.ts';
6
7
  import { BindDefinition } from './BindDefinition.ts';
7
8
  import { DescendentNodeDefinition } from './DescendentNodeDefinition.ts';
9
+ import { ModelDefinition } from './ModelDefinition.ts';
8
10
  import { ChildNodeDefinition, ParentNodeDefinition } from './NodeDefinition.ts';
9
11
  export type RepeatInstanceNodes = readonly [StaticElement, ...StaticElement[]];
10
12
  export interface ControlledRepeatDefinition extends RepeatDefinition {
@@ -18,7 +20,7 @@ export interface UncontrolledRepeatDefinition extends RepeatDefinition {
18
20
  * "repeat", as defined by a form, where those concepts include:
19
21
  *
20
22
  * - A {@link RepeatElementDefinition}—corresponding to a `<repeat>` {@link https://getodk.github.io/xforms-spec/#body-elements | body element}—which is associated with the nodeset referencing the "repeat template" and
21
- * all "repeat instances" (see below points describing both concepts in more detail). The presence of such a body element determines whether to produce a repeat definition (rather than e.g. a {@link SubtreeDefinition}).
23
+ * all "repeat instances" (see below points describing both concepts in more detail). The presence of such a body element determines whether to produce a repeat definition (rather than e.g. a {@link GroupDefinition}).
22
24
  *
23
25
  * - A "repeat template", defined by a form either
24
26
  * explicitly,
@@ -46,13 +48,14 @@ export interface UncontrolledRepeatDefinition extends RepeatDefinition {
46
48
  * associated with a defined repeat.
47
49
  */
48
50
  export declare class RepeatDefinition extends DescendentNodeDefinition<'repeat', RepeatElementDefinition> {
49
- static from(parent: ParentNodeDefinition, bind: BindDefinition, bodyElement: RepeatElementDefinition, instanceNodes: RepeatInstanceNodes): AnyRepeatDefinition;
51
+ static from(model: ModelDefinition, parent: ParentNodeDefinition, bind: BindDefinition, bodyElement: RepeatElementDefinition, instanceNodes: RepeatInstanceNodes): AnyRepeatDefinition;
50
52
  readonly type = "repeat";
51
53
  readonly children: readonly ChildNodeDefinition[];
52
54
  readonly count: RepeatCountControlExpression | null;
53
55
  readonly template: StaticElement;
54
56
  readonly namespaceDeclarations: NamespaceDeclarationMap;
55
57
  readonly qualifiedName: QualifiedName;
58
+ readonly attributes: AttributeDefinitionMap;
56
59
  private constructor();
57
60
  isControlled(): this is ControlledRepeatDefinition;
58
61
  isUncontrolled(): this is UncontrolledRepeatDefinition;
@@ -3,9 +3,9 @@ import { NamespaceDeclarationMap } from '../../lib/names/NamespaceDeclarationMap
3
3
  import { QualifiedName } from '../../lib/names/QualifiedName.ts';
4
4
  import { BodyClassList } from '../body/BodyDefinition.ts';
5
5
  import { XFormDefinition } from '../XFormDefinition.ts';
6
+ import { AttributeDefinitionMap } from './AttributeDefinitionMap.ts';
6
7
  import { ModelDefinition } from './ModelDefinition.ts';
7
8
  import { ChildNodeDefinition, ParentNodeDefinition, NodeDefinition } from './NodeDefinition.ts';
8
- import { RootAttributeMap } from './RootAttributeMap.ts';
9
9
  import { SubmissionDefinition } from './SubmissionDefinition.ts';
10
10
  export declare class RootDefinition extends NodeDefinition<'root'> {
11
11
  protected readonly form: XFormDefinition;
@@ -19,10 +19,10 @@ export declare class RootDefinition extends NodeDefinition<'root'> {
19
19
  readonly parent: null;
20
20
  readonly template: StaticElement;
21
21
  readonly namespaceDeclarations: NamespaceDeclarationMap;
22
- readonly attributes: RootAttributeMap;
22
+ readonly attributes: AttributeDefinitionMap;
23
23
  readonly children: readonly ChildNodeDefinition[];
24
24
  readonly isTranslated = false;
25
25
  constructor(form: XFormDefinition, model: ModelDefinition, submission: SubmissionDefinition, classes: BodyClassList);
26
26
  buildSubtree(parent: ParentNodeDefinition, node: StaticElement): readonly ChildNodeDefinition[];
27
- toJSON(): Omit<this, "form" | "toJSON" | "bind" | "root" | "model" | "bodyElement" | "buildSubtree">;
27
+ toJSON(): Omit<this, "form" | "toJSON" | "bind" | "model" | "root" | "bodyElement" | "buildSubtree">;
28
28
  }
@@ -1,14 +1,13 @@
1
1
  import { XFormDefinition } from '../../parse/XFormDefinition.ts';
2
- import { AnyGroupElementDefinition } from '../../parse/body/BodyDefinition.ts';
3
- import { RepeatElementDefinition } from '../body/RepeatElementDefinition.ts';
4
2
  import { AnyControlDefinition } from '../body/control/ControlDefinition.ts';
5
- import { BaseGroupDefinition } from '../body/group/BaseGroupDefinition.ts';
3
+ import { GroupElementDefinition } from '../body/GroupElementDefinition.ts';
4
+ import { RepeatElementDefinition } from '../body/RepeatElementDefinition.ts';
6
5
  import { TextElementDefinition } from './abstract/TextElementDefinition.ts';
7
- export type LabelOwner = AnyControlDefinition | AnyGroupElementDefinition | RepeatElementDefinition;
6
+ export type LabelOwner = AnyControlDefinition | GroupElementDefinition | RepeatElementDefinition;
8
7
  export declare class LabelDefinition extends TextElementDefinition<'label'> {
9
8
  static forControl(form: XFormDefinition, control: AnyControlDefinition): LabelDefinition | null;
10
9
  static forRepeatGroup(form: XFormDefinition, repeat: RepeatElementDefinition): LabelDefinition | null;
11
- static forGroup(form: XFormDefinition, group: BaseGroupDefinition<any>): LabelDefinition | null;
10
+ static forGroup(form: XFormDefinition, group: GroupElementDefinition): LabelDefinition | null;
12
11
  readonly role = "label";
13
12
  private constructor();
14
13
  }