@getodk/xforms-engine 0.4.0 → 0.6.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.
- package/README.md +1 -1
- package/dist/client/BaseNode.d.ts +18 -3
- package/dist/client/BaseValueNode.d.ts +32 -0
- package/dist/client/EngineConfig.d.ts +49 -48
- package/dist/client/GroupNode.d.ts +1 -0
- package/dist/client/InputNode.d.ts +82 -0
- package/dist/client/ModelValueNode.d.ts +13 -7
- package/dist/client/NoteNode.d.ts +26 -9
- package/dist/client/RangeNode.d.ts +36 -0
- package/dist/client/RankNode.d.ts +46 -0
- package/dist/client/RootNode.d.ts +37 -7
- package/dist/client/SelectNode.d.ts +47 -25
- package/dist/client/SubtreeNode.d.ts +1 -0
- package/dist/client/TriggerNode.d.ts +10 -6
- package/dist/client/ValueType.d.ts +3 -0
- package/dist/client/constants.d.ts +50 -0
- package/dist/client/hierarchy.d.ts +8 -8
- package/dist/client/identity.d.ts +14 -0
- package/dist/client/node-types.d.ts +3 -2
- package/dist/client/resources.d.ts +93 -0
- package/dist/client/submission/SubmissionData.d.ts +7 -0
- package/dist/client/submission/SubmissionDefinition.d.ts +14 -0
- package/dist/client/submission/SubmissionInstanceFile.d.ts +6 -0
- package/dist/client/submission/SubmissionOptions.d.ts +23 -0
- package/dist/client/submission/SubmissionResult.d.ts +91 -0
- package/dist/client/submission/SubmissionState.d.ts +12 -0
- package/dist/client/unsupported/UnsupportedControlNode.d.ts +1 -3
- package/dist/client/validation.d.ts +2 -2
- package/dist/error/ErrorProductionDesignPendingError.d.ts +7 -0
- package/dist/error/RankMissingValueError.d.ts +3 -0
- package/dist/error/RankValueTypeError.d.ts +6 -0
- package/dist/error/SelectValueTypeError.d.ts +15 -0
- package/dist/error/ValueTypeInvariantError.d.ts +17 -0
- package/dist/error/XFormsSpecViolationError.d.ts +2 -0
- package/dist/error/XPathFunctionalityError.d.ts +14 -0
- package/dist/error/XPathFunctionalityNotSupportedError.d.ts +7 -0
- package/dist/error/XPathFunctionalityPendingError.d.ts +7 -0
- package/dist/index.d.ts +12 -4
- package/dist/index.js +17864 -14655
- package/dist/index.js.map +1 -1
- package/dist/instance/Group.d.ts +10 -4
- package/dist/instance/InputControl.d.ts +38 -0
- package/dist/instance/ModelValue.d.ts +17 -25
- package/dist/instance/Note.d.ts +16 -21
- package/dist/instance/PrimaryInstance.d.ts +85 -0
- package/dist/instance/RangeControl.d.ts +34 -0
- package/dist/instance/RankControl.d.ts +40 -0
- package/dist/instance/Root.d.ts +30 -25
- package/dist/instance/SelectControl.d.ts +66 -0
- package/dist/instance/Subtree.d.ts +11 -5
- package/dist/instance/TriggerControl.d.ts +13 -19
- package/dist/instance/abstract/DescendantNode.d.ts +32 -25
- package/dist/instance/abstract/InstanceNode.d.ts +52 -30
- package/dist/instance/abstract/UnsupportedControl.d.ts +11 -3
- package/dist/instance/abstract/ValueNode.d.ts +47 -0
- package/dist/instance/hierarchy.d.ts +13 -12
- package/dist/instance/identity.d.ts +2 -7
- package/dist/instance/internal-api/EvaluationContext.d.ts +53 -12
- package/dist/instance/internal-api/InstanceConfig.d.ts +8 -2
- package/dist/instance/internal-api/InstanceValueContext.d.ts +22 -0
- package/dist/instance/internal-api/PrimaryInstanceDocument.d.ts +36 -0
- package/dist/instance/internal-api/TranslationContext.d.ts +3 -2
- package/dist/instance/internal-api/ValidationContext.d.ts +3 -4
- package/dist/instance/internal-api/ValueContext.d.ts +2 -1
- package/dist/instance/internal-api/submission/ClientReactiveSubmittableInstance.d.ts +14 -0
- package/dist/instance/internal-api/submission/ClientReactiveSubmittableLeafNode.d.ts +32 -0
- package/dist/instance/internal-api/submission/ClientReactiveSubmittableParentNode.d.ts +19 -0
- package/dist/instance/internal-api/submission/ClientReactiveSubmittableValueNode.d.ts +18 -0
- package/dist/instance/repeat/BaseRepeatRange.d.ts +40 -83
- package/dist/instance/repeat/RepeatInstance.d.ts +12 -29
- package/dist/instance/repeat/RepeatRangeControlled.d.ts +2 -2
- package/dist/instance/repeat/RepeatRangeUncontrolled.d.ts +2 -2
- package/dist/instance/resource.d.ts +1 -1
- package/dist/instance/text/TextRange.d.ts +1 -1
- package/dist/instance/unsupported/UploadControl.d.ts +3 -1
- package/dist/integration/xpath/EngineXPathEvaluator.d.ts +14 -0
- package/dist/integration/xpath/adapter/XFormsXPathNode.d.ts +71 -0
- package/dist/integration/xpath/adapter/engineDOMAdapter.d.ts +5 -0
- package/dist/integration/xpath/adapter/kind.d.ts +32 -0
- package/dist/integration/xpath/adapter/names.d.ts +6 -0
- package/dist/integration/xpath/adapter/traversal.d.ts +26 -0
- package/dist/integration/xpath/adapter/values.d.ts +2 -0
- package/dist/integration/xpath/static-dom/StaticAttribute.d.ts +26 -0
- package/dist/integration/xpath/static-dom/StaticDocument.d.ts +15 -0
- package/dist/integration/xpath/static-dom/StaticElement.d.ts +48 -0
- package/dist/integration/xpath/static-dom/StaticNode.d.ts +33 -0
- package/dist/integration/xpath/static-dom/StaticText.d.ts +16 -0
- package/dist/lib/client-reactivity/submission/createInstanceSubmissionState.d.ts +3 -0
- package/dist/lib/client-reactivity/submission/createLeafNodeSubmissionState.d.ts +3 -0
- package/dist/lib/client-reactivity/submission/createNodeRangeSubmissionState.d.ts +4 -0
- package/dist/lib/client-reactivity/submission/createParentNodeSubmissionState.d.ts +4 -0
- package/dist/lib/client-reactivity/submission/createRootSubmissionState.d.ts +3 -0
- package/dist/lib/client-reactivity/submission/createValueNodeSubmissionState.d.ts +3 -0
- package/dist/lib/client-reactivity/submission/prepareSubmission.d.ts +8 -0
- package/dist/lib/codecs/DecimalValueCodec.d.ts +6 -0
- package/dist/lib/codecs/Geopoint/Geopoint.d.ts +48 -0
- package/dist/lib/codecs/Geopoint/GeopointValueCodec.d.ts +5 -0
- package/dist/lib/codecs/IntValueCodec.d.ts +6 -0
- package/dist/lib/codecs/NoteCodec.d.ts +8 -0
- package/dist/lib/codecs/RangeCodec.d.ts +8 -0
- package/dist/lib/codecs/StringValueCodec.d.ts +4 -0
- package/dist/lib/codecs/TriggerCodec.d.ts +7 -0
- package/dist/lib/codecs/ValueArrayCodec.d.ts +11 -0
- package/dist/lib/codecs/ValueCodec.d.ts +30 -0
- package/dist/lib/codecs/ValueTypePlaceholderCodec.d.ts +12 -0
- package/dist/lib/codecs/getNoteCodec.d.ts +3 -0
- package/dist/lib/codecs/getSelectCodec.d.ts +5 -0
- package/dist/lib/codecs/getSharedValueCodec.d.ts +48 -0
- package/dist/lib/codecs/items/BaseItemCodec.d.ts +9 -0
- package/dist/lib/codecs/items/MultipleValueItemCodec.d.ts +14 -0
- package/dist/lib/codecs/items/SingleValueItemCodec.d.ts +24 -0
- package/dist/lib/dom/query.d.ts +4 -2
- package/dist/lib/names/NamespaceDeclaration.d.ts +45 -0
- package/dist/lib/names/NamespaceDeclarationMap.d.ts +137 -0
- package/dist/lib/names/NamespaceURL.d.ts +30 -0
- package/dist/lib/names/QualifiedName.d.ts +113 -0
- package/dist/lib/number-parsers.d.ts +2 -0
- package/dist/lib/reactivity/createChildrenState.d.ts +7 -5
- package/dist/lib/reactivity/createComputedExpression.d.ts +18 -5
- package/dist/lib/reactivity/createInstanceValueState.d.ts +40 -0
- package/dist/lib/reactivity/createItemCollection.d.ts +21 -0
- package/dist/lib/reactivity/createNoteReadonlyThunk.d.ts +2 -2
- package/dist/lib/reactivity/createTranslationState.d.ts +19 -0
- package/dist/lib/reactivity/createValueState.d.ts +6 -10
- package/dist/lib/reactivity/materializeCurrentStateChildren.d.ts +4 -4
- package/dist/lib/xml-serialization.d.ts +50 -0
- package/dist/parse/XFormDOM.d.ts +18 -7
- package/dist/parse/XFormDefinition.d.ts +1 -2
- package/dist/parse/attachments/FormAttachmentResource.d.ts +27 -0
- package/dist/parse/body/BodyDefinition.d.ts +4 -4
- package/dist/parse/body/RepeatElementDefinition.d.ts +1 -1
- package/dist/parse/body/appearance/inputAppearanceParser.d.ts +1 -1
- package/dist/parse/body/appearance/rangeAppearanceParser.d.ts +3 -0
- package/dist/parse/body/control/{InputDefinition.d.ts → InputControlDefinition.d.ts} +4 -1
- package/dist/parse/body/control/ItemDefinition.d.ts +14 -0
- package/dist/parse/body/control/ItemsetDefinition.d.ts +18 -0
- package/dist/parse/body/control/RangeControlDefinition.d.ts +31 -2
- package/dist/parse/body/control/RankControlDefinition.d.ts +7 -3
- package/dist/parse/body/control/{select/SelectDefinition.d.ts → SelectControlDefinition.d.ts} +9 -9
- package/dist/parse/expression/ItemsetNodesetExpression.d.ts +1 -1
- package/dist/parse/expression/ItemsetValueExpression.d.ts +1 -1
- package/dist/parse/expression/abstract/DependencyContext.d.ts +0 -5
- package/dist/parse/expression/abstract/DependentExpression.d.ts +2 -3
- package/dist/parse/model/BindDefinition.d.ts +6 -5
- package/dist/parse/model/BindPreloadDefinition.d.ts +42 -0
- package/dist/parse/model/BindTypeDefinition.d.ts +20 -0
- package/dist/parse/model/DescendentNodeDefinition.d.ts +4 -14
- package/dist/parse/model/FormSubmissionDefinition.d.ts +8 -0
- package/dist/parse/model/ItextTranslation/ItextTranslationDefinition.d.ts +4 -0
- package/dist/parse/model/ItextTranslation/ItextTranslationRootDefinition.d.ts +9 -0
- package/dist/parse/model/ItextTranslation/ItextTranslationsDefinition.d.ts +8 -0
- package/dist/parse/model/LeafNodeDefinition.d.ts +9 -4
- package/dist/parse/model/ModelBindMap.d.ts +1 -1
- package/dist/parse/model/ModelDefinition.d.ts +2 -0
- package/dist/parse/model/NodeDefinition.d.ts +16 -20
- package/dist/parse/model/NoteNodeDefinition.d.ts +9 -8
- package/dist/parse/model/RangeNodeDefinition.d.ts +41 -0
- package/dist/parse/model/RepeatInstanceDefinition.d.ts +7 -4
- package/dist/parse/model/RepeatRangeDefinition.d.ts +7 -4
- package/dist/parse/model/RepeatTemplateDefinition.d.ts +7 -4
- package/dist/parse/model/RootAttributeDefinition.d.ts +24 -0
- package/dist/parse/model/RootAttributeMap.d.ts +23 -0
- package/dist/parse/model/RootDefinition.d.ts +12 -9
- package/dist/parse/model/SecondaryInstance/SecondaryInstanceDefinition.d.ts +4 -0
- package/dist/parse/model/SecondaryInstance/SecondaryInstanceRootDefinition.d.ts +7 -0
- package/dist/parse/model/SecondaryInstance/SecondaryInstancesDefinition.d.ts +13 -0
- package/dist/parse/model/SecondaryInstance/sources/BlankSecondaryInstanceSource.d.ts +14 -0
- package/dist/parse/model/SecondaryInstance/sources/CSVExternalSecondaryInstance.d.ts +22 -0
- package/dist/parse/model/SecondaryInstance/sources/ExternalSecondaryInstanceResource.d.ts +23 -0
- package/dist/parse/model/SecondaryInstance/sources/ExternalSecondaryInstanceSource.d.ts +9 -0
- package/dist/parse/model/SecondaryInstance/sources/GeoJSONExternalSecondaryInstance.d.ts +5 -0
- package/dist/parse/model/SecondaryInstance/sources/InternalSecondaryInstanceSource.d.ts +7 -0
- package/dist/parse/model/SecondaryInstance/sources/SecondaryInstanceSource.d.ts +13 -0
- package/dist/parse/model/SecondaryInstance/sources/XMLExternalSecondaryInstanceSource.d.ts +12 -0
- package/dist/parse/model/SubtreeDefinition.d.ts +7 -4
- package/dist/parse/shared/parseStaticDocumentFromDOMSubtree.d.ts +23 -0
- package/dist/parse/text/ItemLabelDefinition.d.ts +1 -1
- package/dist/parse/text/ItemsetLabelDefinition.d.ts +2 -2
- package/dist/parse/text/abstract/TextElementDefinition.d.ts +1 -1
- package/dist/parse/text/abstract/TextRangeDefinition.d.ts +0 -2
- package/dist/parse/xpath/semantic-analysis.d.ts +6 -3
- package/dist/solid.js +15437 -12246
- package/dist/solid.js.map +1 -1
- package/package.json +18 -13
- package/src/client/BaseNode.ts +21 -6
- package/src/client/BaseValueNode.ts +35 -0
- package/src/client/EngineConfig.ts +52 -51
- package/src/client/GroupNode.ts +1 -0
- package/src/client/InputNode.ts +113 -0
- package/src/client/ModelValueNode.ts +31 -7
- package/src/client/NoteNode.ts +45 -9
- package/src/client/RangeNode.ts +51 -0
- package/src/client/RankNode.ts +54 -0
- package/src/client/RootNode.ts +43 -7
- package/src/client/SelectNode.ts +53 -26
- package/src/client/SubtreeNode.ts +1 -0
- package/src/client/TriggerNode.ts +12 -6
- package/src/client/ValueType.ts +4 -0
- package/src/client/constants.ts +67 -0
- package/src/client/hierarchy.ts +12 -13
- package/src/client/identity.ts +16 -0
- package/src/client/node-types.ts +13 -7
- package/src/client/resources.ts +118 -0
- package/src/client/submission/SubmissionData.ts +12 -0
- package/src/client/submission/SubmissionDefinition.ts +16 -0
- package/src/client/submission/SubmissionInstanceFile.ts +9 -0
- package/src/client/submission/SubmissionOptions.ts +28 -0
- package/src/client/submission/SubmissionResult.ts +124 -0
- package/src/client/submission/SubmissionState.ts +14 -0
- package/src/client/unsupported/UnsupportedControlNode.ts +2 -6
- package/src/client/validation.ts +2 -2
- package/src/error/ErrorProductionDesignPendingError.ts +6 -0
- package/src/error/RankMissingValueError.ts +5 -0
- package/src/error/RankValueTypeError.ts +13 -0
- package/src/error/SelectValueTypeError.ts +22 -0
- package/src/error/ValueTypeInvariantError.ts +22 -0
- package/src/error/XFormsSpecViolationError.ts +1 -0
- package/src/error/XPathFunctionalityError.ts +26 -0
- package/src/error/XPathFunctionalityNotSupportedError.ts +18 -0
- package/src/error/XPathFunctionalityPendingError.ts +18 -0
- package/src/index.ts +12 -13
- package/src/instance/Group.ts +18 -5
- package/src/instance/InputControl.ts +159 -0
- package/src/instance/ModelValue.ts +48 -53
- package/src/instance/Note.ts +40 -49
- package/src/instance/PrimaryInstance.ts +245 -0
- package/src/instance/RangeControl.ts +113 -0
- package/src/instance/RankControl.ts +199 -0
- package/src/instance/Root.ts +63 -134
- package/src/instance/SelectControl.ts +219 -0
- package/src/instance/Subtree.ts +20 -7
- package/src/instance/TriggerControl.ts +44 -66
- package/src/instance/abstract/DescendantNode.ts +91 -51
- package/src/instance/abstract/InstanceNode.ts +113 -107
- package/src/instance/abstract/UnsupportedControl.ts +29 -5
- package/src/instance/abstract/ValueNode.ts +128 -0
- package/src/instance/children.ts +80 -40
- package/src/instance/hierarchy.ts +39 -30
- package/src/instance/identity.ts +3 -9
- package/src/instance/index.ts +25 -7
- package/src/instance/internal-api/EvaluationContext.ts +60 -13
- package/src/instance/internal-api/InstanceConfig.ts +9 -2
- package/src/instance/internal-api/InstanceValueContext.ts +26 -0
- package/src/instance/internal-api/PrimaryInstanceDocument.ts +53 -0
- package/src/instance/internal-api/TranslationContext.ts +3 -2
- package/src/instance/internal-api/ValidationContext.ts +3 -4
- package/src/instance/internal-api/ValueContext.ts +2 -1
- package/src/instance/internal-api/submission/ClientReactiveSubmittableInstance.ts +20 -0
- package/src/instance/internal-api/submission/ClientReactiveSubmittableLeafNode.ts +43 -0
- package/src/instance/internal-api/submission/ClientReactiveSubmittableParentNode.ts +26 -0
- package/src/instance/internal-api/submission/ClientReactiveSubmittableValueNode.ts +24 -0
- package/src/instance/repeat/BaseRepeatRange.ts +52 -131
- package/src/instance/repeat/RepeatInstance.ts +21 -46
- package/src/instance/repeat/RepeatRangeControlled.ts +5 -5
- package/src/instance/repeat/RepeatRangeUncontrolled.ts +2 -4
- package/src/instance/resource.ts +5 -2
- package/src/instance/text/TextChunk.ts +1 -1
- package/src/instance/unsupported/UploadControl.ts +5 -1
- package/src/integration/xpath/EngineXPathEvaluator.ts +22 -0
- package/src/integration/xpath/adapter/XFormsXPathNode.ts +126 -0
- package/src/integration/xpath/adapter/engineDOMAdapter.ts +57 -0
- package/src/integration/xpath/adapter/kind.ts +114 -0
- package/src/integration/xpath/adapter/names.ts +148 -0
- package/src/integration/xpath/adapter/traversal.ts +229 -0
- package/src/integration/xpath/adapter/values.ts +5 -0
- package/src/integration/xpath/static-dom/StaticAttribute.ts +41 -0
- package/src/integration/xpath/static-dom/StaticDocument.ts +36 -0
- package/src/integration/xpath/static-dom/StaticElement.ts +119 -0
- package/src/integration/xpath/static-dom/StaticNode.ts +68 -0
- package/src/integration/xpath/static-dom/StaticText.ts +28 -0
- package/src/lib/client-reactivity/README.md +0 -0
- package/src/lib/client-reactivity/submission/createInstanceSubmissionState.ts +12 -0
- package/src/lib/client-reactivity/submission/createLeafNodeSubmissionState.ts +20 -0
- package/src/lib/client-reactivity/submission/createNodeRangeSubmissionState.ts +17 -0
- package/src/lib/client-reactivity/submission/createParentNodeSubmissionState.ts +22 -0
- package/src/lib/client-reactivity/submission/createRootSubmissionState.ts +19 -0
- package/src/lib/client-reactivity/submission/createValueNodeSubmissionState.ts +21 -0
- package/src/lib/client-reactivity/submission/prepareSubmission.ts +172 -0
- package/src/lib/codecs/DecimalValueCodec.ts +46 -0
- package/src/lib/codecs/Geopoint/Geopoint.ts +150 -0
- package/src/lib/codecs/Geopoint/GeopointValueCodec.ts +20 -0
- package/src/lib/codecs/IntValueCodec.ts +100 -0
- package/src/lib/codecs/NoteCodec.ts +32 -0
- package/src/lib/codecs/RangeCodec.ts +65 -0
- package/src/lib/codecs/StringValueCodec.ts +11 -0
- package/src/lib/codecs/TriggerCodec.ts +64 -0
- package/src/lib/codecs/ValueArrayCodec.ts +42 -0
- package/src/lib/codecs/ValueCodec.ts +106 -0
- package/src/lib/codecs/ValueTypePlaceholderCodec.ts +19 -0
- package/src/lib/codecs/getNoteCodec.ts +27 -0
- package/src/lib/codecs/getSelectCodec.ts +27 -0
- package/src/lib/codecs/getSharedValueCodec.ts +79 -0
- package/src/lib/codecs/items/BaseItemCodec.ts +20 -0
- package/src/lib/codecs/items/MultipleValueItemCodec.ts +28 -0
- package/src/lib/codecs/items/SingleValueItemCodec.ts +67 -0
- package/src/lib/dom/query.ts +8 -2
- package/src/lib/names/NamespaceDeclaration.ts +106 -0
- package/src/lib/names/NamespaceDeclarationMap.ts +228 -0
- package/src/lib/names/NamespaceURL.ts +44 -0
- package/src/lib/names/QualifiedName.ts +170 -0
- package/src/lib/number-parsers.ts +25 -0
- package/src/lib/reactivity/createChildrenState.ts +8 -6
- package/src/lib/reactivity/createComputedExpression.ts +57 -34
- package/src/lib/reactivity/createInstanceValueState.ts +216 -0
- package/src/lib/reactivity/createItemCollection.ts +173 -0
- package/src/lib/reactivity/createNoteReadonlyThunk.ts +12 -7
- package/src/lib/reactivity/createTranslationState.ts +61 -0
- package/src/lib/reactivity/createValueState.ts +62 -120
- package/src/lib/reactivity/materializeCurrentStateChildren.ts +7 -7
- package/src/lib/reactivity/text/createTextRange.ts +4 -3
- package/src/lib/reactivity/validation/createAggregatedViolations.ts +1 -1
- package/src/lib/reactivity/validation/createValidation.ts +2 -3
- package/src/lib/xml-serialization.ts +163 -0
- package/src/parse/XFormDOM.ts +231 -76
- package/src/parse/XFormDefinition.ts +2 -10
- package/src/parse/attachments/FormAttachmentResource.ts +40 -0
- package/src/parse/body/BodyDefinition.ts +7 -7
- package/src/parse/body/appearance/inputAppearanceParser.ts +1 -1
- package/src/parse/body/appearance/rangeAppearanceParser.ts +11 -0
- package/src/parse/body/control/InputControlDefinition.ts +29 -0
- package/src/parse/body/control/{select/ItemDefinition.ts → ItemDefinition.ts} +8 -6
- package/src/parse/body/control/{select/ItemsetDefinition.ts → ItemsetDefinition.ts} +11 -9
- package/src/parse/body/control/RangeControlDefinition.ts +91 -6
- package/src/parse/body/control/RankControlDefinition.ts +25 -7
- package/src/parse/body/control/{select/SelectDefinition.ts → SelectControlDefinition.ts} +9 -9
- package/src/parse/expression/ItemsetNodesetExpression.ts +1 -1
- package/src/parse/expression/ItemsetValueExpression.ts +1 -1
- package/src/parse/expression/abstract/DependencyContext.ts +0 -26
- package/src/parse/expression/abstract/DependentExpression.ts +2 -13
- package/src/parse/model/BindDefinition.ts +9 -8
- package/src/parse/model/BindPreloadDefinition.ts +100 -0
- package/src/parse/model/BindTypeDefinition.ts +175 -0
- package/src/parse/model/DescendentNodeDefinition.ts +7 -31
- package/src/parse/model/FormSubmissionDefinition.ts +44 -0
- package/src/parse/model/ItextTranslation/ItextTranslationDefinition.ts +4 -0
- package/src/parse/model/ItextTranslation/ItextTranslationRootDefinition.ts +42 -0
- package/src/parse/model/ItextTranslation/ItextTranslationsDefinition.ts +31 -0
- package/src/parse/model/LeafNodeDefinition.ts +15 -5
- package/src/parse/model/ModelBindMap.ts +6 -8
- package/src/parse/model/ModelDefinition.ts +6 -1
- package/src/parse/model/NodeDefinition.ts +24 -48
- package/src/parse/model/NoteNodeDefinition.ts +11 -10
- package/src/parse/model/RangeNodeDefinition.ts +118 -0
- package/src/parse/model/RepeatInstanceDefinition.ts +11 -7
- package/src/parse/model/RepeatRangeDefinition.ts +11 -7
- package/src/parse/model/RepeatTemplateDefinition.ts +11 -7
- package/src/parse/model/RootAttributeDefinition.ts +45 -0
- package/src/parse/model/RootAttributeMap.ts +44 -0
- package/src/parse/model/RootDefinition.ts +31 -29
- package/src/parse/model/SecondaryInstance/SecondaryInstanceDefinition.ts +4 -0
- package/src/parse/model/SecondaryInstance/SecondaryInstanceRootDefinition.ts +12 -0
- package/src/parse/model/SecondaryInstance/SecondaryInstancesDefinition.ts +102 -0
- package/src/parse/model/SecondaryInstance/sources/BlankSecondaryInstanceSource.ts +40 -0
- package/src/parse/model/SecondaryInstance/sources/CSVExternalSecondaryInstance.ts +288 -0
- package/src/parse/model/SecondaryInstance/sources/ExternalSecondaryInstanceResource.ts +222 -0
- package/src/parse/model/SecondaryInstance/sources/ExternalSecondaryInstanceSource.ts +22 -0
- package/src/parse/model/SecondaryInstance/sources/GeoJSONExternalSecondaryInstance.ts +415 -0
- package/src/parse/model/SecondaryInstance/sources/InternalSecondaryInstanceSource.ts +19 -0
- package/src/parse/model/SecondaryInstance/sources/SecondaryInstanceSource.ts +29 -0
- package/src/parse/model/SecondaryInstance/sources/XMLExternalSecondaryInstanceSource.ts +32 -0
- package/src/parse/model/SubtreeDefinition.ts +12 -12
- package/src/parse/shared/parseStaticDocumentFromDOMSubtree.ts +149 -0
- package/src/parse/text/ItemLabelDefinition.ts +1 -1
- package/src/parse/text/ItemsetLabelDefinition.ts +2 -2
- package/src/parse/text/abstract/TextElementDefinition.ts +1 -1
- package/src/parse/text/abstract/TextRangeDefinition.ts +0 -6
- package/src/parse/xpath/semantic-analysis.ts +33 -3
- package/dist/client/StringNode.d.ts +0 -46
- package/dist/client/unsupported/RangeNode.d.ts +0 -9
- package/dist/client/unsupported/RankNode.d.ts +0 -9
- package/dist/instance/SelectField.d.ts +0 -50
- package/dist/instance/StringField.d.ts +0 -44
- package/dist/instance/internal-api/SubscribableDependency.d.ts +0 -59
- package/dist/instance/unsupported/RangeControl.d.ts +0 -4
- package/dist/instance/unsupported/RankControl.d.ts +0 -4
- package/dist/lib/reactivity/createSelectItems.d.ts +0 -16
- package/dist/parse/XFormDataType.d.ts +0 -25
- package/dist/parse/body/control/select/ItemDefinition.d.ts +0 -13
- package/dist/parse/body/control/select/ItemsetDefinition.d.ts +0 -17
- package/dist/parse/body/control/select/ItemsetNodesetContext.d.ts +0 -11
- package/src/client/StringNode.ts +0 -52
- package/src/client/unsupported/RangeNode.ts +0 -14
- package/src/client/unsupported/RankNode.ts +0 -14
- package/src/instance/SelectField.ts +0 -226
- package/src/instance/StringField.ts +0 -120
- package/src/instance/internal-api/SubscribableDependency.ts +0 -61
- package/src/instance/unsupported/RangeControl.ts +0 -5
- package/src/instance/unsupported/RankControl.ts +0 -5
- package/src/lib/reactivity/createSelectItems.ts +0 -168
- package/src/parse/XFormDataType.ts +0 -62
- package/src/parse/body/control/InputDefinition.ts +0 -22
- package/src/parse/body/control/select/ItemsetNodesetContext.ts +0 -26
|
@@ -1,10 +1,18 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { XPathNodeKindKey } from '@getodk/xpath';
|
|
2
2
|
import type { Accessor, Signal } from 'solid-js';
|
|
3
3
|
import type { BaseNode } from '../../client/BaseNode.ts';
|
|
4
4
|
import type { NodeAppearances } from '../../client/NodeAppearances.ts';
|
|
5
|
-
import type {
|
|
5
|
+
import type { FormNodeID } from '../../client/identity.ts';
|
|
6
|
+
import type { InstanceNodeType as ClientInstanceNodeType } from '../../client/node-types.ts';
|
|
7
|
+
import type { SubmissionState } from '../../client/submission/SubmissionState.ts';
|
|
6
8
|
import type { NodeValidationState } from '../../client/validation.ts';
|
|
7
|
-
import type { TextRange } from '../../index.ts';
|
|
9
|
+
import type { ActiveLanguage, TextRange } from '../../index.ts';
|
|
10
|
+
import type { EngineXPathEvaluator } from '../../integration/xpath/EngineXPathEvaluator.ts';
|
|
11
|
+
import type {
|
|
12
|
+
XFormsXPathPrimaryInstanceNode,
|
|
13
|
+
XFormsXPathPrimaryInstanceNodeKind,
|
|
14
|
+
} from '../../integration/xpath/adapter/XFormsXPathNode.ts';
|
|
15
|
+
import type { PrimaryInstanceXPathNode } from '../../integration/xpath/adapter/kind.ts';
|
|
8
16
|
import type { MaterializedChildren } from '../../lib/reactivity/materializeCurrentStateChildren.ts';
|
|
9
17
|
import type { CurrentState } from '../../lib/reactivity/node-state/createCurrentState.ts';
|
|
10
18
|
import type { EngineState } from '../../lib/reactivity/node-state/createEngineState.ts';
|
|
@@ -13,13 +21,24 @@ import type { ReactiveScope } from '../../lib/reactivity/scope.ts';
|
|
|
13
21
|
import { createReactiveScope } from '../../lib/reactivity/scope.ts';
|
|
14
22
|
import type { SimpleAtomicState } from '../../lib/reactivity/types.ts';
|
|
15
23
|
import type { AnyNodeDefinition } from '../../parse/model/NodeDefinition.ts';
|
|
24
|
+
import type { PrimaryInstance } from '../PrimaryInstance.ts';
|
|
16
25
|
import type { Root } from '../Root.ts';
|
|
17
26
|
import type { AnyChildNode, AnyNode, AnyParentNode } from '../hierarchy.ts';
|
|
18
|
-
import
|
|
19
|
-
import { declareNodeID } from '../identity.ts';
|
|
27
|
+
import { nodeID } from '../identity.ts';
|
|
20
28
|
import type { EvaluationContext } from '../internal-api/EvaluationContext.ts';
|
|
21
29
|
import type { InstanceConfig } from '../internal-api/InstanceConfig.ts';
|
|
22
|
-
|
|
30
|
+
|
|
31
|
+
export type EngineInstanceNodeType = ClientInstanceNodeType | 'primary-instance';
|
|
32
|
+
|
|
33
|
+
export interface BaseEngineNode extends Omit<BaseNode, 'nodeType'> {
|
|
34
|
+
readonly nodeType: EngineInstanceNodeType;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// prettier-ignore
|
|
38
|
+
export type InstanceNodeValueOptionsStateSpec =
|
|
39
|
+
| Accessor<null>
|
|
40
|
+
| Accessor<readonly unknown[]>
|
|
41
|
+
| null
|
|
23
42
|
|
|
24
43
|
export interface InstanceNodeStateSpec<Value = never> {
|
|
25
44
|
readonly reference: Accessor<string> | string;
|
|
@@ -28,8 +47,8 @@ export interface InstanceNodeStateSpec<Value = never> {
|
|
|
28
47
|
readonly required: Accessor<boolean> | boolean;
|
|
29
48
|
readonly label: Accessor<TextRange<'label'> | null> | null;
|
|
30
49
|
readonly hint: Accessor<TextRange<'hint'> | null> | null;
|
|
31
|
-
readonly children: Accessor<readonly
|
|
32
|
-
readonly valueOptions:
|
|
50
|
+
readonly children: Accessor<readonly FormNodeID[]> | null;
|
|
51
|
+
readonly valueOptions: InstanceNodeValueOptionsStateSpec;
|
|
33
52
|
readonly value: Signal<Value> | SimpleAtomicState<Value> | null;
|
|
34
53
|
}
|
|
35
54
|
|
|
@@ -71,19 +90,26 @@ type ComputeInstanceNodeReference = <This extends ComputableReferenceNode>(
|
|
|
71
90
|
|
|
72
91
|
export interface InstanceNodeOptions {
|
|
73
92
|
readonly computeReference?: () => string;
|
|
93
|
+
readonly scope?: ReactiveScope;
|
|
74
94
|
}
|
|
75
95
|
|
|
76
96
|
export abstract class InstanceNode<
|
|
77
97
|
Definition extends AnyNodeDefinition,
|
|
78
98
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
79
99
|
Spec extends InstanceNodeStateSpec<any>,
|
|
100
|
+
Parent extends AnyParentNode | null,
|
|
80
101
|
Child extends AnyChildNode | null = null,
|
|
81
102
|
>
|
|
82
|
-
implements
|
|
103
|
+
implements BaseEngineNode, XFormsXPathPrimaryInstanceNode, EvaluationContext
|
|
83
104
|
{
|
|
84
105
|
protected abstract readonly state: SharedNodeState<Spec>;
|
|
85
106
|
protected abstract readonly engineState: EngineState<Spec>;
|
|
86
107
|
|
|
108
|
+
// XFormsXPathPrimaryInstanceNode
|
|
109
|
+
abstract readonly [XPathNodeKindKey]: XFormsXPathPrimaryInstanceNodeKind;
|
|
110
|
+
readonly rootDocument: PrimaryInstance;
|
|
111
|
+
abstract readonly root: Root;
|
|
112
|
+
|
|
87
113
|
/**
|
|
88
114
|
* @package Exposed on every node type to facilitate inheritance, as well as
|
|
89
115
|
* conditional behavior for value nodes.
|
|
@@ -109,26 +135,28 @@ export abstract class InstanceNode<
|
|
|
109
135
|
abstract readonly isRelevant: Accessor<boolean>;
|
|
110
136
|
|
|
111
137
|
// BaseNode: identity
|
|
112
|
-
readonly nodeId:
|
|
138
|
+
readonly nodeId: FormNodeID;
|
|
113
139
|
|
|
114
140
|
// BaseNode: node types and variants (e.g. for narrowing)
|
|
115
|
-
abstract readonly nodeType:
|
|
141
|
+
abstract readonly nodeType: EngineInstanceNodeType;
|
|
116
142
|
|
|
117
143
|
abstract readonly appearances: NodeAppearances<Definition>;
|
|
118
144
|
|
|
145
|
+
abstract readonly nodeOptions: object | null;
|
|
146
|
+
|
|
119
147
|
abstract readonly currentState: InstanceNodeCurrentState<Spec, Child>;
|
|
120
148
|
|
|
121
149
|
abstract readonly validationState: NodeValidationState;
|
|
122
150
|
|
|
123
|
-
|
|
124
|
-
abstract readonly root: Root;
|
|
151
|
+
abstract readonly submissionState: SubmissionState;
|
|
125
152
|
|
|
126
153
|
// EvaluationContext: instance-global/shared
|
|
127
|
-
abstract readonly evaluator:
|
|
154
|
+
abstract readonly evaluator: EngineXPathEvaluator;
|
|
155
|
+
abstract readonly getActiveLanguage: Accessor<ActiveLanguage>;
|
|
128
156
|
|
|
129
|
-
// EvaluationContext
|
|
157
|
+
// EvaluationContext: node-specific
|
|
158
|
+
abstract readonly isAttached: Accessor<boolean>;
|
|
130
159
|
readonly scope: ReactiveScope;
|
|
131
|
-
|
|
132
160
|
readonly computeReference: ComputeInstanceNodeReference;
|
|
133
161
|
|
|
134
162
|
protected readonly computeChildStepReference: ComputeInstanceNodeReference = (
|
|
@@ -141,7 +169,7 @@ export abstract class InstanceNode<
|
|
|
141
169
|
);
|
|
142
170
|
}
|
|
143
171
|
|
|
144
|
-
return `${parent.contextReference()}/${definition.
|
|
172
|
+
return `${parent.contextReference()}/${definition.qualifiedName.getPrefixedName()}`;
|
|
145
173
|
};
|
|
146
174
|
|
|
147
175
|
// EvaluationContext: node-specific
|
|
@@ -149,114 +177,92 @@ export abstract class InstanceNode<
|
|
|
149
177
|
return this.computeReference(this.parent, this.definition);
|
|
150
178
|
};
|
|
151
179
|
|
|
152
|
-
|
|
180
|
+
/**
|
|
181
|
+
* Note: it is expected that at least some node subclasses will override this
|
|
182
|
+
* to reflect (or in the case of intermediate abstract base classes, to
|
|
183
|
+
* constrain) their more specific `this` type.
|
|
184
|
+
*/
|
|
185
|
+
readonly contextNode: PrimaryInstanceXPathNode =
|
|
186
|
+
this as AnyInstanceNode as PrimaryInstanceXPathNode;
|
|
153
187
|
|
|
154
188
|
constructor(
|
|
155
189
|
readonly engineConfig: InstanceConfig,
|
|
156
|
-
readonly parent:
|
|
190
|
+
readonly parent: Parent,
|
|
157
191
|
readonly definition: Definition,
|
|
158
192
|
options?: InstanceNodeOptions
|
|
159
193
|
) {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
this.scope = createReactiveScope();
|
|
163
|
-
this.engineConfig = engineConfig;
|
|
164
|
-
this.nodeId = declareNodeID(engineConfig.createUniqueId());
|
|
165
|
-
this.definition = definition;
|
|
166
|
-
}
|
|
194
|
+
const self = this as AnyInstanceNode as AnyNode;
|
|
167
195
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
* a client. This return type intentionally deviates from one structural
|
|
174
|
-
* expectation, requiring even leaf nodes to return an array (though for those
|
|
175
|
-
* nodes it will always be empty). This affords consistency and efficiency of
|
|
176
|
-
* interface for those internal uses.
|
|
177
|
-
*/
|
|
178
|
-
abstract getChildren(this: AnyInstanceNode): readonly AnyChildNode[];
|
|
179
|
-
|
|
180
|
-
getNodesByReference(
|
|
181
|
-
this: AnyNode,
|
|
182
|
-
visited: WeakSet<AnyNode>,
|
|
183
|
-
dependencyReference: string
|
|
184
|
-
): readonly SubscribableDependency[] {
|
|
185
|
-
if (visited.has(this)) {
|
|
186
|
-
return [];
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
visited.add(this);
|
|
190
|
-
|
|
191
|
-
const { nodeset } = this.definition;
|
|
192
|
-
|
|
193
|
-
if (dependencyReference === nodeset) {
|
|
194
|
-
if (this.nodeType === 'repeat-instance') {
|
|
195
|
-
return [this.parent];
|
|
196
|
+
if (parent == null) {
|
|
197
|
+
if (!self.isPrimaryInstance()) {
|
|
198
|
+
throw new Error(
|
|
199
|
+
'Failed to construct node: not a primary instance, no parent node specified'
|
|
200
|
+
);
|
|
196
201
|
}
|
|
197
202
|
|
|
198
|
-
|
|
203
|
+
this.rootDocument = self;
|
|
204
|
+
} else {
|
|
205
|
+
this.rootDocument = parent.rootDocument;
|
|
199
206
|
}
|
|
200
207
|
|
|
201
|
-
|
|
202
|
-
dependencyReference.startsWith(`${nodeset}/`) ||
|
|
203
|
-
dependencyReference.startsWith(`${nodeset}[`)
|
|
204
|
-
) {
|
|
205
|
-
return this.getChildren().flatMap((child) => {
|
|
206
|
-
return child.getNodesByReference(visited, dependencyReference);
|
|
207
|
-
});
|
|
208
|
-
}
|
|
208
|
+
this.computeReference = options?.computeReference ?? this.computeChildStepReference;
|
|
209
209
|
|
|
210
|
-
|
|
210
|
+
this.scope = options?.scope ?? createReactiveScope();
|
|
211
|
+
this.engineConfig = engineConfig;
|
|
212
|
+
this.nodeId = nodeID(engineConfig.createUniqueId());
|
|
213
|
+
this.definition = definition;
|
|
211
214
|
}
|
|
212
215
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
this
|
|
216
|
-
|
|
217
|
-
): readonly SubscribableDependency[] {
|
|
218
|
-
if (this.nodeType === 'root') {
|
|
219
|
-
const visited = new WeakSet<AnyNode>();
|
|
220
|
-
|
|
221
|
-
return this.getNodesByReference(visited, reference);
|
|
222
|
-
}
|
|
216
|
+
/** @package */
|
|
217
|
+
isPrimaryInstance(): this is PrimaryInstance {
|
|
218
|
+
return this.parent == null;
|
|
219
|
+
}
|
|
223
220
|
|
|
224
|
-
|
|
221
|
+
/** @package */
|
|
222
|
+
isRoot(): this is Root {
|
|
223
|
+
return this.parent?.nodeType === 'primary-instance';
|
|
225
224
|
}
|
|
226
225
|
|
|
227
|
-
// SubscribableDependency
|
|
228
226
|
/**
|
|
229
|
-
* This
|
|
230
|
-
*
|
|
231
|
-
*
|
|
227
|
+
* @package This presently serves a growing variety of internal use cases,
|
|
228
|
+
* where certain behaviors depend on arbitrary traversal from any point in the
|
|
229
|
+
* instance tree, without particular regard for the visited node type. It
|
|
230
|
+
* isn't intended for external traversal or any other means of consuming
|
|
231
|
+
* children by a client. This return type intentionally deviates from one
|
|
232
|
+
* structural expectation, requiring even leaf nodes to return an array
|
|
233
|
+
* (though for those nodes it will always be empty). This affords consistency
|
|
234
|
+
* and efficiency of interface for those internal uses.
|
|
235
|
+
*/
|
|
236
|
+
abstract getChildren(this: AnyInstanceNode): readonly AnyChildNode[];
|
|
237
|
+
|
|
238
|
+
// XFormsXPathNode
|
|
239
|
+
/**
|
|
240
|
+
* @todo Values as text nodes(?)
|
|
232
241
|
*/
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
engineState.children;
|
|
259
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
260
|
-
engineState.value;
|
|
242
|
+
getXPathChildNodes(): readonly AnyChildNode[] {
|
|
243
|
+
return (this as AnyInstanceNode).getChildren().flatMap((child) => {
|
|
244
|
+
switch (child.nodeType) {
|
|
245
|
+
case 'repeat-range:controlled':
|
|
246
|
+
case 'repeat-range:uncontrolled': {
|
|
247
|
+
const repeatInstances = child.getXPathChildNodes();
|
|
248
|
+
|
|
249
|
+
if (repeatInstances.length > 0) {
|
|
250
|
+
return repeatInstances;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
return child;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
default:
|
|
257
|
+
return child;
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
getXPathValue(): string {
|
|
263
|
+
return (this as AnyInstanceNode as AnyNode)
|
|
264
|
+
.getXPathChildNodes()
|
|
265
|
+
.map((child) => child.getXPathValue())
|
|
266
|
+
.join('');
|
|
261
267
|
}
|
|
262
268
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { identity } from '@getodk/common/lib/identity.ts';
|
|
2
|
+
import { XPathNodeKindKey } from '@getodk/xpath';
|
|
2
3
|
import type { Accessor } from 'solid-js';
|
|
3
4
|
import type { UnsupportedControlNodeType } from '../../client/node-types.ts';
|
|
5
|
+
import type { SubmissionState } from '../../client/submission/SubmissionState.ts';
|
|
4
6
|
import type { TextRange } from '../../client/TextRange.ts';
|
|
5
7
|
import type {
|
|
6
8
|
UnsupportedControlDefinition,
|
|
@@ -8,6 +10,8 @@ import type {
|
|
|
8
10
|
UnsupportedControlNode,
|
|
9
11
|
} from '../../client/unsupported/UnsupportedControlNode.ts';
|
|
10
12
|
import type { AnyViolation, LeafNodeValidationState } from '../../client/validation.ts';
|
|
13
|
+
import type { XFormsXPathElement } from '../../integration/xpath/adapter/XFormsXPathNode.ts';
|
|
14
|
+
import { createLeafNodeSubmissionState } from '../../lib/client-reactivity/submission/createLeafNodeSubmissionState.ts';
|
|
11
15
|
import { createValueState } from '../../lib/reactivity/createValueState.ts';
|
|
12
16
|
import type { CurrentState } from '../../lib/reactivity/node-state/createCurrentState.ts';
|
|
13
17
|
import type { EngineState } from '../../lib/reactivity/node-state/createEngineState.ts';
|
|
@@ -23,9 +27,9 @@ import {
|
|
|
23
27
|
type SharedValidationState,
|
|
24
28
|
} from '../../lib/reactivity/validation/createValidation.ts';
|
|
25
29
|
import type { UnknownAppearanceDefinition } from '../../parse/body/appearance/unknownAppearanceParser.ts';
|
|
26
|
-
import type { GeneralParentNode } from '../hierarchy.ts';
|
|
30
|
+
import type { AnyUnsupportedControl, GeneralParentNode } from '../hierarchy.ts';
|
|
27
31
|
import type { EvaluationContext } from '../internal-api/EvaluationContext.ts';
|
|
28
|
-
import type {
|
|
32
|
+
import type { ClientReactiveSubmittableLeafNode } from '../internal-api/submission/ClientReactiveSubmittableLeafNode.ts';
|
|
29
33
|
import type { ValidationContext } from '../internal-api/ValidationContext.ts';
|
|
30
34
|
import type { ValueContext } from '../internal-api/ValueContext.ts';
|
|
31
35
|
import { DescendantNode, type DescendantNodeStateSpec } from './DescendantNode.ts';
|
|
@@ -61,17 +65,26 @@ class UnsupportedControlWriteError extends Error {
|
|
|
61
65
|
}
|
|
62
66
|
|
|
63
67
|
export abstract class UnsupportedControl<Type extends UnsupportedControlNodeType>
|
|
64
|
-
extends DescendantNode<
|
|
68
|
+
extends DescendantNode<
|
|
69
|
+
TypedUnsupportedControlDefinition<Type>,
|
|
70
|
+
UnsupportedControlStateSpec,
|
|
71
|
+
GeneralParentNode,
|
|
72
|
+
null
|
|
73
|
+
>
|
|
65
74
|
implements
|
|
66
75
|
UnsupportedControlNode,
|
|
76
|
+
XFormsXPathElement,
|
|
67
77
|
EvaluationContext,
|
|
68
|
-
SubscribableDependency,
|
|
69
78
|
ValidationContext,
|
|
70
|
-
ValueContext<unknown
|
|
79
|
+
ValueContext<unknown>,
|
|
80
|
+
ClientReactiveSubmittableLeafNode<unknown>
|
|
71
81
|
{
|
|
72
82
|
private readonly validation: SharedValidationState;
|
|
73
83
|
protected readonly state: SharedNodeState<UnsupportedControlStateSpec>;
|
|
74
84
|
|
|
85
|
+
// XFormsXPathElement
|
|
86
|
+
override readonly [XPathNodeKindKey] = 'element';
|
|
87
|
+
|
|
75
88
|
// InstanceNode
|
|
76
89
|
protected readonly engineState: EngineState<UnsupportedControlStateSpec>;
|
|
77
90
|
|
|
@@ -79,13 +92,18 @@ export abstract class UnsupportedControl<Type extends UnsupportedControlNodeType
|
|
|
79
92
|
abstract override readonly nodeType: Type;
|
|
80
93
|
|
|
81
94
|
readonly appearances: UnknownAppearanceDefinition;
|
|
95
|
+
readonly nodeOptions = null;
|
|
82
96
|
readonly currentState: CurrentState<UnsupportedControlStateSpec>;
|
|
83
97
|
|
|
84
98
|
get validationState(): LeafNodeValidationState {
|
|
85
99
|
return this.validation.currentState;
|
|
86
100
|
}
|
|
87
101
|
|
|
102
|
+
readonly submissionState: SubmissionState;
|
|
103
|
+
|
|
88
104
|
// ValueContext
|
|
105
|
+
abstract override readonly contextNode: AnyUnsupportedControl & this;
|
|
106
|
+
|
|
89
107
|
readonly encodeValue = (instanceValue: unknown): string => {
|
|
90
108
|
const encoded = instanceValue;
|
|
91
109
|
|
|
@@ -128,6 +146,12 @@ export abstract class UnsupportedControl<Type extends UnsupportedControlNodeType
|
|
|
128
146
|
this.engineState = state.engineState;
|
|
129
147
|
this.currentState = state.currentState;
|
|
130
148
|
this.validation = createValidationState(this, sharedStateOptions);
|
|
149
|
+
this.submissionState = createLeafNodeSubmissionState(this);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// XFormsXPathElement
|
|
153
|
+
override getXPathValue(): string {
|
|
154
|
+
return this.encodeValue(this.engineState.value);
|
|
131
155
|
}
|
|
132
156
|
|
|
133
157
|
// ValidationContext
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { XPathNodeKindKey } from '@getodk/xpath';
|
|
2
|
+
import type { Accessor } from 'solid-js';
|
|
3
|
+
import type { BaseValueNode } from '../../client/BaseValueNode.ts';
|
|
4
|
+
import type { LeafNodeType as ValueNodeType } from '../../client/node-types.ts';
|
|
5
|
+
import type { SubmissionState } from '../../client/submission/SubmissionState.ts';
|
|
6
|
+
import type { AnyViolation, LeafNodeValidationState } from '../../client/validation.ts';
|
|
7
|
+
import type { ValueType } from '../../client/ValueType.ts';
|
|
8
|
+
import type { XFormsXPathElement } from '../../integration/xpath/adapter/XFormsXPathNode.ts';
|
|
9
|
+
import { createValueNodeSubmissionState } from '../../lib/client-reactivity/submission/createValueNodeSubmissionState.ts';
|
|
10
|
+
import type {
|
|
11
|
+
RuntimeValueSetter,
|
|
12
|
+
RuntimeValueState,
|
|
13
|
+
ValueCodec,
|
|
14
|
+
} from '../../lib/codecs/ValueCodec.ts';
|
|
15
|
+
import { createInstanceValueState } from '../../lib/reactivity/createInstanceValueState.ts';
|
|
16
|
+
import type { CurrentState } from '../../lib/reactivity/node-state/createCurrentState.ts';
|
|
17
|
+
import type { EngineState } from '../../lib/reactivity/node-state/createEngineState.ts';
|
|
18
|
+
import type { SharedNodeState } from '../../lib/reactivity/node-state/createSharedNodeState.ts';
|
|
19
|
+
import type { SimpleAtomicState } from '../../lib/reactivity/types.ts';
|
|
20
|
+
import type { SharedValidationState } from '../../lib/reactivity/validation/createValidation.ts';
|
|
21
|
+
import { createValidationState } from '../../lib/reactivity/validation/createValidation.ts';
|
|
22
|
+
import { LeafNodeDefinition } from '../../parse/model/LeafNodeDefinition.ts';
|
|
23
|
+
import type { GeneralParentNode } from '../hierarchy.ts';
|
|
24
|
+
import type { EvaluationContext } from '../internal-api/EvaluationContext.ts';
|
|
25
|
+
import type {
|
|
26
|
+
DecodeInstanceValue,
|
|
27
|
+
InstanceValueContext,
|
|
28
|
+
} from '../internal-api/InstanceValueContext.ts';
|
|
29
|
+
import type { ClientReactiveSubmittableValueNode } from '../internal-api/submission/ClientReactiveSubmittableValueNode.ts';
|
|
30
|
+
import type { ValidationContext } from '../internal-api/ValidationContext.ts';
|
|
31
|
+
import type { DescendantNodeStateSpec } from './DescendantNode.ts';
|
|
32
|
+
import { DescendantNode } from './DescendantNode.ts';
|
|
33
|
+
|
|
34
|
+
export type ValueNodeDefinition<V extends ValueType> = LeafNodeDefinition<V>;
|
|
35
|
+
|
|
36
|
+
export interface ValueNodeStateSpec<RuntimeValue> extends DescendantNodeStateSpec<RuntimeValue> {
|
|
37
|
+
readonly children: null;
|
|
38
|
+
readonly value: SimpleAtomicState<RuntimeValue>;
|
|
39
|
+
readonly instanceValue: Accessor<string>;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export abstract class ValueNode<
|
|
43
|
+
V extends ValueType,
|
|
44
|
+
Definition extends ValueNodeDefinition<V>,
|
|
45
|
+
RuntimeValue extends RuntimeInputValue,
|
|
46
|
+
RuntimeInputValue = RuntimeValue,
|
|
47
|
+
>
|
|
48
|
+
extends DescendantNode<Definition, ValueNodeStateSpec<RuntimeValue>, GeneralParentNode, null>
|
|
49
|
+
implements
|
|
50
|
+
BaseValueNode<V, RuntimeValue>,
|
|
51
|
+
XFormsXPathElement,
|
|
52
|
+
EvaluationContext,
|
|
53
|
+
InstanceValueContext,
|
|
54
|
+
ValidationContext,
|
|
55
|
+
ClientReactiveSubmittableValueNode
|
|
56
|
+
{
|
|
57
|
+
protected readonly validation: SharedValidationState;
|
|
58
|
+
protected readonly getInstanceValue: Accessor<string>;
|
|
59
|
+
protected readonly valueState: RuntimeValueState<RuntimeValue>;
|
|
60
|
+
protected readonly setValueState: RuntimeValueSetter<RuntimeInputValue>;
|
|
61
|
+
|
|
62
|
+
// XFormsXPathElement
|
|
63
|
+
override readonly [XPathNodeKindKey] = 'element';
|
|
64
|
+
override readonly getXPathValue: () => string;
|
|
65
|
+
|
|
66
|
+
// InstanceNode
|
|
67
|
+
protected abstract override readonly state: SharedNodeState<ValueNodeStateSpec<RuntimeValue>>;
|
|
68
|
+
protected abstract override readonly engineState: EngineState<ValueNodeStateSpec<RuntimeValue>>;
|
|
69
|
+
|
|
70
|
+
// InstanceValueContext
|
|
71
|
+
readonly decodeInstanceValue: DecodeInstanceValue;
|
|
72
|
+
|
|
73
|
+
// BaseValueNode
|
|
74
|
+
abstract override readonly nodeType: ValueNodeType;
|
|
75
|
+
readonly valueType: V;
|
|
76
|
+
|
|
77
|
+
abstract override readonly currentState: CurrentState<ValueNodeStateSpec<RuntimeValue>>;
|
|
78
|
+
|
|
79
|
+
get validationState(): LeafNodeValidationState {
|
|
80
|
+
return this.validation.currentState;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
readonly submissionState: SubmissionState;
|
|
84
|
+
|
|
85
|
+
constructor(
|
|
86
|
+
parent: GeneralParentNode,
|
|
87
|
+
definition: Definition,
|
|
88
|
+
codec: ValueCodec<V, RuntimeValue, RuntimeInputValue>
|
|
89
|
+
) {
|
|
90
|
+
super(parent, definition);
|
|
91
|
+
|
|
92
|
+
this.valueType = definition.valueType;
|
|
93
|
+
this.decodeInstanceValue = codec.decodeInstanceValue;
|
|
94
|
+
|
|
95
|
+
const instanceValueState = createInstanceValueState(this, {
|
|
96
|
+
initialValueSource: 'FORM_DEFAULT',
|
|
97
|
+
});
|
|
98
|
+
const valueState = codec.createRuntimeValueState(instanceValueState);
|
|
99
|
+
|
|
100
|
+
const [getInstanceValue] = instanceValueState;
|
|
101
|
+
const [, setValueState] = valueState;
|
|
102
|
+
|
|
103
|
+
this.getInstanceValue = getInstanceValue;
|
|
104
|
+
this.setValueState = setValueState;
|
|
105
|
+
this.getXPathValue = () => {
|
|
106
|
+
return this.getInstanceValue();
|
|
107
|
+
};
|
|
108
|
+
this.valueState = valueState;
|
|
109
|
+
this.validation = createValidationState(this, {
|
|
110
|
+
clientStateFactory: this.engineConfig.stateFactory,
|
|
111
|
+
});
|
|
112
|
+
this.submissionState = createValueNodeSubmissionState(this);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// ValidationContext
|
|
116
|
+
getViolation(): AnyViolation | null {
|
|
117
|
+
return this.validation.engineState.violation;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
isBlank(): boolean {
|
|
121
|
+
return this.getInstanceValue() === '';
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// InstanceNode
|
|
125
|
+
getChildren(): readonly [] {
|
|
126
|
+
return [];
|
|
127
|
+
}
|
|
128
|
+
}
|