@getodk/xforms-engine 0.14.0 → 0.16.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 (125) hide show
  1. package/dist/client/AttributeNode.d.ts +50 -0
  2. package/dist/client/BaseNode.d.ts +5 -0
  3. package/dist/client/form/FormInstanceConfig.d.ts +15 -0
  4. package/dist/client/index.d.ts +1 -0
  5. package/dist/client/node-types.d.ts +1 -1
  6. package/dist/client/validation.d.ts +7 -1
  7. package/dist/index.js +730 -294
  8. package/dist/index.js.map +1 -1
  9. package/dist/instance/Attribute.d.ts +64 -0
  10. package/dist/instance/Group.d.ts +2 -0
  11. package/dist/instance/InputControl.d.ts +2 -0
  12. package/dist/instance/PrimaryInstance.d.ts +2 -0
  13. package/dist/instance/Root.d.ts +2 -0
  14. package/dist/instance/UploadControl.d.ts +2 -0
  15. package/dist/instance/abstract/InstanceNode.d.ts +5 -2
  16. package/dist/instance/abstract/ValueNode.d.ts +2 -0
  17. package/dist/instance/attachments/buildAttributes.d.ts +7 -0
  18. package/dist/instance/internal-api/AttributeContext.d.ts +35 -0
  19. package/dist/instance/internal-api/InstanceConfig.d.ts +2 -0
  20. package/dist/instance/internal-api/InstanceValueContext.d.ts +6 -0
  21. package/dist/instance/internal-api/serialization/ClientReactiveSerializableAttributeNode.d.ts +15 -0
  22. package/dist/instance/internal-api/serialization/ClientReactiveSerializableParentNode.d.ts +2 -0
  23. package/dist/instance/internal-api/serialization/ClientReactiveSerializableTemplatedNode.d.ts +2 -2
  24. package/dist/instance/internal-api/serialization/ClientReactiveSerializableValueNode.d.ts +4 -0
  25. package/dist/instance/repeat/BaseRepeatRange.d.ts +5 -0
  26. package/dist/instance/repeat/RepeatInstance.d.ts +2 -2
  27. package/dist/integration/xpath/adapter/XFormsXPathNode.d.ts +2 -2
  28. package/dist/lib/client-reactivity/instance-state/createAttributeNodeInstanceState.d.ts +3 -0
  29. package/dist/lib/client-reactivity/instance-state/createTemplatedNodeInstanceState.d.ts +0 -3
  30. package/dist/lib/codecs/items/SingleValueItemCodec.d.ts +1 -1
  31. package/dist/lib/names/NamespaceDeclarationMap.d.ts +1 -1
  32. package/dist/lib/reactivity/createAttributeState.d.ts +16 -0
  33. package/dist/lib/reactivity/createInstanceValueState.d.ts +4 -1
  34. package/dist/lib/reactivity/node-state/createSharedNodeState.d.ts +2 -2
  35. package/dist/lib/xml-serialization.d.ts +5 -9
  36. package/dist/parse/XFormDOM.d.ts +4 -1
  37. package/dist/parse/expression/ActionComputationExpression.d.ts +4 -0
  38. package/dist/parse/model/ActionDefinition.d.ts +15 -0
  39. package/dist/parse/model/AttributeDefinition.d.ts +24 -0
  40. package/dist/parse/model/{RootAttributeMap.d.ts → AttributeDefinitionMap.d.ts} +4 -10
  41. package/dist/parse/model/BindPreloadDefinition.d.ts +6 -10
  42. package/dist/parse/model/Event.d.ts +8 -0
  43. package/dist/parse/model/GroupDefinition.d.ts +4 -1
  44. package/dist/parse/model/LeafNodeDefinition.d.ts +5 -1
  45. package/dist/parse/model/ModelActionMap.d.ts +9 -0
  46. package/dist/parse/model/ModelDefinition.d.ts +8 -1
  47. package/dist/parse/model/NodeDefinition.d.ts +8 -3
  48. package/dist/parse/model/NoteNodeDefinition.d.ts +3 -2
  49. package/dist/parse/model/RangeNodeDefinition.d.ts +2 -1
  50. package/dist/parse/model/RepeatDefinition.d.ts +4 -1
  51. package/dist/parse/model/RootDefinition.d.ts +3 -2
  52. package/dist/solid.js +730 -294
  53. package/dist/solid.js.map +1 -1
  54. package/package.json +21 -17
  55. package/src/client/AttributeNode.ts +59 -0
  56. package/src/client/BaseNode.ts +6 -0
  57. package/src/client/form/FormInstanceConfig.ts +17 -0
  58. package/src/client/index.ts +1 -0
  59. package/src/client/node-types.ts +1 -0
  60. package/src/client/validation.ts +9 -1
  61. package/src/entrypoints/FormInstance.ts +1 -0
  62. package/src/instance/Attribute.ts +164 -0
  63. package/src/instance/Group.ts +7 -0
  64. package/src/instance/InputControl.ts +8 -0
  65. package/src/instance/ModelValue.ts +7 -0
  66. package/src/instance/Note.ts +6 -0
  67. package/src/instance/PrimaryInstance.ts +7 -0
  68. package/src/instance/RangeControl.ts +6 -0
  69. package/src/instance/RankControl.ts +7 -0
  70. package/src/instance/Root.ts +7 -0
  71. package/src/instance/SelectControl.ts +6 -0
  72. package/src/instance/TriggerControl.ts +6 -0
  73. package/src/instance/UploadControl.ts +5 -0
  74. package/src/instance/abstract/DescendantNode.ts +0 -1
  75. package/src/instance/abstract/InstanceNode.ts +4 -1
  76. package/src/instance/abstract/ValueNode.ts +2 -0
  77. package/src/instance/attachments/buildAttributes.ts +15 -0
  78. package/src/instance/children/normalizeChildInitOptions.ts +1 -1
  79. package/src/instance/internal-api/AttributeContext.ts +40 -0
  80. package/src/instance/internal-api/InstanceConfig.ts +6 -1
  81. package/src/instance/internal-api/InstanceValueContext.ts +6 -0
  82. package/src/instance/internal-api/serialization/ClientReactiveSerializableAttributeNode.ts +18 -0
  83. package/src/instance/internal-api/serialization/ClientReactiveSerializableParentNode.ts +2 -0
  84. package/src/instance/internal-api/serialization/ClientReactiveSerializableTemplatedNode.ts +2 -3
  85. package/src/instance/internal-api/serialization/ClientReactiveSerializableValueNode.ts +4 -0
  86. package/src/instance/repeat/BaseRepeatRange.ts +14 -0
  87. package/src/instance/repeat/RepeatInstance.ts +5 -5
  88. package/src/integration/xpath/adapter/XFormsXPathNode.ts +3 -1
  89. package/src/lib/client-reactivity/instance-state/createAttributeNodeInstanceState.ts +16 -0
  90. package/src/lib/client-reactivity/instance-state/createParentNodeInstanceState.ts +5 -5
  91. package/src/lib/client-reactivity/instance-state/createRootInstanceState.ts +6 -9
  92. package/src/lib/client-reactivity/instance-state/createTemplatedNodeInstanceState.ts +5 -15
  93. package/src/lib/client-reactivity/instance-state/createValueNodeInstanceState.ts +2 -1
  94. package/src/lib/client-reactivity/instance-state/prepareInstancePayload.ts +1 -0
  95. package/src/lib/codecs/NoteCodec.ts +1 -1
  96. package/src/lib/codecs/items/SingleValueItemCodec.ts +1 -3
  97. package/src/lib/names/NamespaceDeclarationMap.ts +1 -1
  98. package/src/lib/reactivity/createAttributeState.ts +51 -0
  99. package/src/lib/reactivity/createInstanceValueState.ts +152 -53
  100. package/src/lib/reactivity/node-state/createSharedNodeState.ts +2 -2
  101. package/src/lib/xml-serialization.ts +38 -34
  102. package/src/parse/XFormDOM.ts +9 -0
  103. package/src/parse/body/GroupElementDefinition.ts +1 -1
  104. package/src/parse/body/control/InputControlDefinition.ts +1 -1
  105. package/src/parse/expression/ActionComputationExpression.ts +12 -0
  106. package/src/parse/model/ActionDefinition.ts +70 -0
  107. package/src/parse/model/AttributeDefinition.ts +59 -0
  108. package/src/parse/model/{RootAttributeMap.ts → AttributeDefinitionMap.ts} +7 -13
  109. package/src/parse/model/BindDefinition.ts +1 -6
  110. package/src/parse/model/BindPreloadDefinition.ts +44 -12
  111. package/src/parse/model/Event.ts +9 -0
  112. package/src/parse/model/GroupDefinition.ts +6 -0
  113. package/src/parse/model/LeafNodeDefinition.ts +5 -0
  114. package/src/parse/model/ModelActionMap.ts +37 -0
  115. package/src/parse/model/ModelDefinition.ts +18 -3
  116. package/src/parse/model/NodeDefinition.ts +11 -3
  117. package/src/parse/model/NoteNodeDefinition.ts +5 -2
  118. package/src/parse/model/RangeNodeDefinition.ts +5 -2
  119. package/src/parse/model/RepeatDefinition.ts +8 -1
  120. package/src/parse/model/RootDefinition.ts +27 -9
  121. package/src/parse/model/nodeDefinitionMap.ts +1 -1
  122. package/dist/error/TemplatedNodeAttributeSerializationError.d.ts +0 -22
  123. package/dist/parse/model/RootAttributeDefinition.d.ts +0 -21
  124. package/src/error/TemplatedNodeAttributeSerializationError.ts +0 -24
  125. package/src/parse/model/RootAttributeDefinition.ts +0 -44
@@ -0,0 +1,50 @@
1
+ import { Root } from '../instance/Root.ts';
2
+ import { AttributeDefinition } from '../parse/model/AttributeDefinition.ts';
3
+ import { InstanceState } from './serialization/InstanceState.ts';
4
+ export interface AttributeNodeState {
5
+ get value(): string;
6
+ get relevant(): boolean;
7
+ }
8
+ /**
9
+ * Base interface for common/shared aspects of attributes.
10
+ */
11
+ export interface AttributeNode {
12
+ /**
13
+ * Specifies the node's general type. This can be useful for narrowing types,
14
+ * e.g. those of children.
15
+ */
16
+ readonly nodeType: 'attribute';
17
+ /**
18
+ * Each node has a definition which specifies aspects of the node defined in
19
+ * the form. These aspects include (but are not limited to) the node's data
20
+ * type, its body presentation constraints (if any), its bound nodeset, and
21
+ * so on...
22
+ */
23
+ readonly definition: AttributeDefinition;
24
+ /**
25
+ * Each node links back to the node representing the root of the form.
26
+ */
27
+ readonly root: Root;
28
+ readonly owner: unknown;
29
+ /**
30
+ * Each node provides a discrete object representing the stateful aspects of
31
+ * that node which will change over time. This includes state which is either
32
+ * client-/user-mutable, or state which is computed based on the core XForms
33
+ * computation model. Each node also exposes {@link validationState}, which
34
+ * reflects the validity of the node, or its descendants.
35
+ *
36
+ * When a client provides a {@link OpaqueReactiveObjectFactory}, the engine
37
+ * will update the properties of this object as their respective states
38
+ * change, so a client can implement reactive updates that respond to changes
39
+ * as they occur.
40
+ */
41
+ readonly currentState: AttributeNodeState;
42
+ /**
43
+ * Represents the current instance state of the node.
44
+ *
45
+ * @see {@link InstanceState.instanceXML} for additional detail.
46
+ */
47
+ readonly instanceState: InstanceState;
48
+ readonly appearances: null;
49
+ readonly nodeOptions: null;
50
+ }
@@ -1,3 +1,4 @@
1
+ import { Attribute } from '../instance/Attribute.ts';
1
2
  import { AnyNodeDefinition } from '../parse/model/NodeDefinition.ts';
2
3
  import { NodeAppearances } from './NodeAppearances.ts';
3
4
  import { TextRange } from './TextRange.ts';
@@ -114,6 +115,10 @@ export interface BaseNodeState {
114
115
  * is an internal engine consideration.
115
116
  */
116
117
  get value(): unknown;
118
+ /**
119
+ * Nodes can own attributes, which have a literal or reference value.
120
+ */
121
+ get attributes(): readonly Attribute[];
117
122
  }
118
123
  /**
119
124
  * Base interface for common/shared aspects of any node type.
@@ -1,5 +1,19 @@
1
1
  import { InstanceAttachmentsConfig } from '../attachments/InstanceAttachmentsConfig.ts';
2
2
  import { OpaqueReactiveObjectFactory } from '../OpaqueReactiveObjectFactory.ts';
3
+ /**
4
+ * @see https://getodk.github.io/xforms-spec/#preload-attributes
5
+ */
6
+ export interface PreloadProperties {
7
+ /**
8
+ * The unique identifier for this device. If not provided, then an identifier will be
9
+ * generated during the first page load and stored in localstorage and reused for
10
+ * subsequent form loads.
11
+ */
12
+ readonly deviceID?: string;
13
+ readonly email?: string;
14
+ readonly username?: string;
15
+ readonly phoneNumber?: string;
16
+ }
3
17
  export interface FormInstanceConfig {
4
18
  /**
5
19
  * A client may specify a generic function for constructing stateful objects.
@@ -16,4 +30,5 @@ export interface FormInstanceConfig {
16
30
  */
17
31
  readonly stateFactory?: OpaqueReactiveObjectFactory;
18
32
  readonly instanceAttachments?: InstanceAttachmentsConfig;
33
+ readonly preloadProperties?: PreloadProperties;
19
34
  }
@@ -1,5 +1,6 @@
1
1
  export type * from './attachments/InstanceAttachmentMeta.ts';
2
2
  export type * from './attachments/InstanceAttachmentsConfig.ts';
3
+ export type * from './AttributeNode.ts';
3
4
  export type * from './constants.ts';
4
5
  export * as constants from './constants.ts';
5
6
  export type * from './form/CreateFormInstance.ts';
@@ -1,3 +1,3 @@
1
1
  export type RepeatRangeNodeType = 'repeat-range:controlled' | 'repeat-range:uncontrolled';
2
- export type LeafNodeType = 'model-value' | 'note' | 'select' | 'input' | 'trigger' | 'range' | 'rank' | 'upload';
2
+ export type LeafNodeType = 'model-value' | 'note' | 'select' | 'input' | 'trigger' | 'range' | 'rank' | 'attribute' | 'upload';
3
3
  export type InstanceNodeType = 'root' | RepeatRangeNodeType | 'repeat-instance' | 'group' | LeafNodeType;
@@ -158,5 +158,11 @@ export interface DescendantNodeViolationReference {
158
158
  export interface AncestorNodeValidationState {
159
159
  get violations(): readonly DescendantNodeViolationReference[];
160
160
  }
161
- export type NodeValidationState = AncestorNodeValidationState | LeafNodeValidationState;
161
+ /**
162
+ * Convenience interface for nodes that cannot be invalid.
163
+ */
164
+ export interface NullValidationState {
165
+ get violations(): readonly [];
166
+ }
167
+ export type NodeValidationState = AncestorNodeValidationState | LeafNodeValidationState | NullValidationState;
162
168
  export {};