@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
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { XPathNodeKindKey } from '@getodk/xpath';
|
|
2
|
+
import type { Accessor } from 'solid-js';
|
|
3
|
+
import { createMemo } from 'solid-js';
|
|
4
|
+
import type { RankDefinition, RankItem, RankNode, RankValueOptions } from '../client/RankNode.ts';
|
|
5
|
+
import type { TextRange } from '../client/TextRange.ts';
|
|
6
|
+
import type { XFormsXPathElement } from '../integration/xpath/adapter/XFormsXPathNode.ts';
|
|
7
|
+
import type { CurrentState } from '../lib/reactivity/node-state/createCurrentState.ts';
|
|
8
|
+
import type { EngineState } from '../lib/reactivity/node-state/createEngineState.ts';
|
|
9
|
+
import type { SharedNodeState } from '../lib/reactivity/node-state/createSharedNodeState.ts';
|
|
10
|
+
import { createSharedNodeState } from '../lib/reactivity/node-state/createSharedNodeState.ts';
|
|
11
|
+
import { createFieldHint } from '../lib/reactivity/text/createFieldHint.ts';
|
|
12
|
+
import { createNodeLabel } from '../lib/reactivity/text/createNodeLabel.ts';
|
|
13
|
+
import type { SimpleAtomicState } from '../lib/reactivity/types.ts';
|
|
14
|
+
import type { Root } from './Root.ts';
|
|
15
|
+
import type { ValueNodeStateSpec } from './abstract/ValueNode.ts';
|
|
16
|
+
import { ValueNode } from './abstract/ValueNode.ts';
|
|
17
|
+
import type { GeneralParentNode } from './hierarchy.ts';
|
|
18
|
+
import type { EvaluationContext } from './internal-api/EvaluationContext.ts';
|
|
19
|
+
import type { ValidationContext } from './internal-api/ValidationContext.ts';
|
|
20
|
+
import type { ClientReactiveSubmittableValueNode } from './internal-api/submission/ClientReactiveSubmittableValueNode.ts';
|
|
21
|
+
import { MultipleValueItemCodec } from '../lib/codecs/items/MultipleValueItemCodec.ts';
|
|
22
|
+
import { sharedValueCodecs } from '../lib/codecs/getSharedValueCodec.ts';
|
|
23
|
+
import { createItemCollection } from '../lib/reactivity/createItemCollection.ts';
|
|
24
|
+
import type { UnknownAppearanceDefinition } from '../parse/body/appearance/unknownAppearanceParser.ts';
|
|
25
|
+
import type { ValueType } from '../client/ValueType.ts';
|
|
26
|
+
import { RankMissingValueError } from '../error/RankMissingValueError.ts';
|
|
27
|
+
import { RankValueTypeError } from '../error/RankValueTypeError.ts';
|
|
28
|
+
|
|
29
|
+
export type AnyRankDefinition = {
|
|
30
|
+
[V in ValueType]: RankDefinition<V>;
|
|
31
|
+
}[ValueType];
|
|
32
|
+
|
|
33
|
+
type AssertRankNodeDefinition = (
|
|
34
|
+
definition: AnyRankDefinition
|
|
35
|
+
) => asserts definition is RankDefinition<'string'>;
|
|
36
|
+
|
|
37
|
+
const assertRankNodeDefinition: AssertRankNodeDefinition = (definition) => {
|
|
38
|
+
if (definition.valueType !== 'string') {
|
|
39
|
+
throw new RankValueTypeError(definition);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
type RankItemMap = ReadonlyMap<string, RankItem>;
|
|
44
|
+
|
|
45
|
+
interface RankControlStateSpec extends ValueNodeStateSpec<readonly string[]> {
|
|
46
|
+
readonly label: Accessor<TextRange<'label'> | null>;
|
|
47
|
+
readonly hint: Accessor<TextRange<'hint'> | null>;
|
|
48
|
+
readonly valueOptions: Accessor<RankValueOptions>;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @ToDo We currently represent a blank value for `<odk:rank>` as an empty array.
|
|
53
|
+
* This is ambiguous, and likely to change.
|
|
54
|
+
*
|
|
55
|
+
* @see {@link https://github.com/getodk/web-forms/issues/295}
|
|
56
|
+
*/
|
|
57
|
+
type TempBlankValueState = readonly [];
|
|
58
|
+
const isBlankValueState = (values: readonly string[]): values is TempBlankValueState => {
|
|
59
|
+
return values.length === 0;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export class RankControl
|
|
63
|
+
extends ValueNode<'string', RankDefinition<'string'>, readonly string[], readonly string[]>
|
|
64
|
+
implements
|
|
65
|
+
RankNode,
|
|
66
|
+
XFormsXPathElement,
|
|
67
|
+
EvaluationContext,
|
|
68
|
+
ValidationContext,
|
|
69
|
+
ClientReactiveSubmittableValueNode
|
|
70
|
+
{
|
|
71
|
+
static from(parent: GeneralParentNode, definition: RankDefinition): RankControl;
|
|
72
|
+
static from(parent: GeneralParentNode, definition: AnyRankDefinition): RankControl {
|
|
73
|
+
assertRankNodeDefinition(definition);
|
|
74
|
+
return new this(parent, definition);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
private readonly mapOptionsByValue: Accessor<RankItemMap>;
|
|
78
|
+
|
|
79
|
+
protected override readonly getInstanceValue: Accessor<string>;
|
|
80
|
+
|
|
81
|
+
// XFormsXPathElement
|
|
82
|
+
override readonly [XPathNodeKindKey] = 'element';
|
|
83
|
+
|
|
84
|
+
// InstanceNode
|
|
85
|
+
protected readonly state: SharedNodeState<RankControlStateSpec>;
|
|
86
|
+
protected readonly engineState: EngineState<RankControlStateSpec>;
|
|
87
|
+
|
|
88
|
+
// RankNode
|
|
89
|
+
readonly nodeType = 'rank';
|
|
90
|
+
readonly appearances: UnknownAppearanceDefinition;
|
|
91
|
+
readonly nodeOptions = null;
|
|
92
|
+
readonly currentState: CurrentState<RankControlStateSpec>;
|
|
93
|
+
|
|
94
|
+
private constructor(parent: GeneralParentNode, definition: RankDefinition<'string'>) {
|
|
95
|
+
const codec = new MultipleValueItemCodec(sharedValueCodecs.string);
|
|
96
|
+
super(parent, definition, codec);
|
|
97
|
+
|
|
98
|
+
this.appearances = definition.bodyElement.appearances;
|
|
99
|
+
|
|
100
|
+
const valueOptions = createItemCollection(this);
|
|
101
|
+
const mapOptionsByValue: Accessor<RankItemMap> = this.scope.runTask(() => {
|
|
102
|
+
return createMemo(() => {
|
|
103
|
+
return new Map(valueOptions().map((item) => [item.value, item]));
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
this.mapOptionsByValue = mapOptionsByValue;
|
|
108
|
+
|
|
109
|
+
const baseValueState = this.valueState;
|
|
110
|
+
const [baseGetValue, setValue] = baseValueState;
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* @ToDo As new value options become available, they're not yet in the
|
|
114
|
+
* `currentValues` state. This appends them. We intend to change this
|
|
115
|
+
* behavior, likely clearing the previous state instead.
|
|
116
|
+
*
|
|
117
|
+
* However, there's an open question about what we should do when a filter
|
|
118
|
+
* change **only removes values**.
|
|
119
|
+
*/
|
|
120
|
+
const getValue = this.scope.runTask(() => {
|
|
121
|
+
return createMemo(() => {
|
|
122
|
+
const options = valueOptions();
|
|
123
|
+
const values = baseGetValue();
|
|
124
|
+
|
|
125
|
+
if (isBlankValueState(values)) {
|
|
126
|
+
return values;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const optionValues = new Set(options.map((option) => option.value));
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* @see {@link getValue} ToDo paragraph 2.
|
|
133
|
+
*/
|
|
134
|
+
const currentValues = values.filter((value) => optionValues.has(value));
|
|
135
|
+
|
|
136
|
+
return Array.from(
|
|
137
|
+
new Set([
|
|
138
|
+
...currentValues,
|
|
139
|
+
/**
|
|
140
|
+
* @see {@link getValue} ToDo paragraph 1.
|
|
141
|
+
*/
|
|
142
|
+
...optionValues,
|
|
143
|
+
])
|
|
144
|
+
);
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
const valueState: SimpleAtomicState<readonly string[]> = [getValue, setValue];
|
|
148
|
+
|
|
149
|
+
this.getInstanceValue = this.scope.runTask(() => {
|
|
150
|
+
return createMemo(() => codec.encodeValue(getValue()));
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
const sharedStateOptions = {
|
|
154
|
+
clientStateFactory: this.engineConfig.stateFactory,
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
const state = createSharedNodeState(
|
|
158
|
+
this.scope,
|
|
159
|
+
{
|
|
160
|
+
reference: this.contextReference,
|
|
161
|
+
readonly: this.isReadonly,
|
|
162
|
+
relevant: this.isRelevant,
|
|
163
|
+
required: this.isRequired,
|
|
164
|
+
label: createNodeLabel(this, definition),
|
|
165
|
+
hint: createFieldHint(this, definition),
|
|
166
|
+
children: null,
|
|
167
|
+
valueOptions,
|
|
168
|
+
value: valueState,
|
|
169
|
+
instanceValue: this.getInstanceValue,
|
|
170
|
+
},
|
|
171
|
+
sharedStateOptions
|
|
172
|
+
);
|
|
173
|
+
|
|
174
|
+
this.state = state;
|
|
175
|
+
this.engineState = state.engineState;
|
|
176
|
+
this.currentState = state.currentState;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
getValueLabel(value: string): TextRange<'item-label'> | null {
|
|
180
|
+
const valueOption = this.currentState.valueOptions.find((item) => item.value === value);
|
|
181
|
+
return valueOption?.label ?? null;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
setValues(valuesInOrder: readonly string[]): Root {
|
|
185
|
+
if (isBlankValueState(valuesInOrder)) {
|
|
186
|
+
this.setValueState(valuesInOrder);
|
|
187
|
+
return this.root;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
const sourceValues: string[] = Array.from(this.mapOptionsByValue().keys());
|
|
191
|
+
const hasAllValues = sourceValues.every((sourceValue) => valuesInOrder.includes(sourceValue));
|
|
192
|
+
if (!hasAllValues) {
|
|
193
|
+
throw new RankMissingValueError('There are missing options. Rank should have all options.');
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
this.setValueState(valuesInOrder);
|
|
197
|
+
return this.root;
|
|
198
|
+
}
|
|
199
|
+
}
|
package/src/instance/Root.ts
CHANGED
|
@@ -1,9 +1,18 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type { Accessor
|
|
3
|
-
import { createSignal } from 'solid-js';
|
|
1
|
+
import { XPathNodeKindKey } from '@getodk/xpath';
|
|
2
|
+
import type { Accessor } from 'solid-js';
|
|
4
3
|
import type { ActiveLanguage, FormLanguage, FormLanguages } from '../client/FormLanguage.ts';
|
|
4
|
+
import type { FormNodeID } from '../client/identity.ts';
|
|
5
5
|
import type { RootNode } from '../client/RootNode.ts';
|
|
6
|
+
import type { SubmissionDefinition } from '../client/submission/SubmissionDefinition.ts';
|
|
7
|
+
import type {
|
|
8
|
+
SubmissionChunkedType,
|
|
9
|
+
SubmissionOptions,
|
|
10
|
+
} from '../client/submission/SubmissionOptions.ts';
|
|
11
|
+
import type { SubmissionResult } from '../client/submission/SubmissionResult.ts';
|
|
12
|
+
import type { SubmissionState } from '../client/submission/SubmissionState.ts';
|
|
6
13
|
import type { AncestorNodeValidationState } from '../client/validation.ts';
|
|
14
|
+
import type { XFormsXPathElement } from '../integration/xpath/adapter/XFormsXPathNode.ts';
|
|
15
|
+
import { createRootSubmissionState } from '../lib/client-reactivity/submission/createRootSubmissionState.ts';
|
|
7
16
|
import type { ChildrenState } from '../lib/reactivity/createChildrenState.ts';
|
|
8
17
|
import { createChildrenState } from '../lib/reactivity/createChildrenState.ts';
|
|
9
18
|
import type { MaterializedChildren } from '../lib/reactivity/materializeCurrentStateChildren.ts';
|
|
@@ -15,146 +24,88 @@ import { createSharedNodeState } from '../lib/reactivity/node-state/createShared
|
|
|
15
24
|
import { createAggregatedViolations } from '../lib/reactivity/validation/createAggregatedViolations.ts';
|
|
16
25
|
import type { BodyClassList } from '../parse/body/BodyDefinition.ts';
|
|
17
26
|
import type { RootDefinition } from '../parse/model/RootDefinition.ts';
|
|
18
|
-
import
|
|
19
|
-
import { InstanceNode } from './abstract/InstanceNode.ts';
|
|
27
|
+
import { DescendantNode } from './abstract/DescendantNode.ts';
|
|
20
28
|
import { buildChildren } from './children.ts';
|
|
21
29
|
import type { GeneralChildNode } from './hierarchy.ts';
|
|
22
|
-
import type {
|
|
23
|
-
import type {
|
|
24
|
-
import type { InstanceConfig } from './internal-api/InstanceConfig.ts';
|
|
25
|
-
import type { SubscribableDependency } from './internal-api/SubscribableDependency.ts';
|
|
30
|
+
import type { EvaluationContext } from './internal-api/EvaluationContext.ts';
|
|
31
|
+
import type { ClientReactiveSubmittableParentNode } from './internal-api/submission/ClientReactiveSubmittableParentNode.ts';
|
|
26
32
|
import type { TranslationContext } from './internal-api/TranslationContext.ts';
|
|
33
|
+
import type { PrimaryInstance } from './PrimaryInstance.ts';
|
|
27
34
|
|
|
28
35
|
interface RootStateSpec {
|
|
29
|
-
readonly reference: string
|
|
30
|
-
readonly readonly: boolean
|
|
31
|
-
readonly relevant: boolean
|
|
32
|
-
readonly required: boolean
|
|
36
|
+
readonly reference: Accessor<string>;
|
|
37
|
+
readonly readonly: Accessor<boolean>;
|
|
38
|
+
readonly relevant: Accessor<boolean>;
|
|
39
|
+
readonly required: Accessor<boolean>;
|
|
33
40
|
readonly label: null;
|
|
34
41
|
readonly hint: null;
|
|
35
|
-
readonly children: Accessor<readonly
|
|
42
|
+
readonly children: Accessor<readonly FormNodeID[]>;
|
|
36
43
|
readonly valueOptions: null;
|
|
37
44
|
readonly value: null;
|
|
38
45
|
|
|
39
46
|
// Root-specific
|
|
40
|
-
readonly activeLanguage:
|
|
47
|
+
readonly activeLanguage: Accessor<ActiveLanguage>;
|
|
41
48
|
}
|
|
42
49
|
|
|
43
|
-
// Subset of types expected from evaluator
|
|
44
|
-
interface ItextTranslations {
|
|
45
|
-
getActiveLanguage(): string | null;
|
|
46
|
-
getLanguages(): readonly string[];
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
interface InitialLanguageState {
|
|
50
|
-
readonly defaultLanguage: ActiveLanguage;
|
|
51
|
-
readonly languages: FormLanguages;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// TODO: it's really very silly that the XPath evaluator is the current
|
|
55
|
-
// definitional source of truth for translation stuff... even though it currently makes sense that that's where it's first derived.
|
|
56
|
-
const getInitialLanguageState = (translations: ItextTranslations): InitialLanguageState => {
|
|
57
|
-
const activeLanguageName = translations.getActiveLanguage();
|
|
58
|
-
|
|
59
|
-
if (activeLanguageName == null) {
|
|
60
|
-
const defaultLanguage: ActiveLanguage = {
|
|
61
|
-
isSyntheticDefault: true,
|
|
62
|
-
language: '',
|
|
63
|
-
};
|
|
64
|
-
const languages = [defaultLanguage] satisfies FormLanguages;
|
|
65
|
-
|
|
66
|
-
return {
|
|
67
|
-
defaultLanguage,
|
|
68
|
-
languages,
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
const languageNames = translations.getLanguages();
|
|
73
|
-
|
|
74
|
-
const inactiveLanguages = languageNames
|
|
75
|
-
.filter((languageName) => {
|
|
76
|
-
return languageName !== activeLanguageName;
|
|
77
|
-
})
|
|
78
|
-
.map((language): FormLanguage => {
|
|
79
|
-
return { language };
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
const languages = [
|
|
83
|
-
{ language: activeLanguageName } satisfies FormLanguage,
|
|
84
|
-
|
|
85
|
-
...inactiveLanguages,
|
|
86
|
-
] satisfies FormLanguages;
|
|
87
|
-
const [defaultLanguage] = languages;
|
|
88
|
-
|
|
89
|
-
return {
|
|
90
|
-
defaultLanguage,
|
|
91
|
-
languages,
|
|
92
|
-
};
|
|
93
|
-
};
|
|
94
|
-
|
|
95
50
|
export class Root
|
|
96
|
-
extends
|
|
51
|
+
extends DescendantNode<RootDefinition, RootStateSpec, PrimaryInstance, GeneralChildNode>
|
|
97
52
|
implements
|
|
98
53
|
RootNode,
|
|
54
|
+
XFormsXPathElement,
|
|
99
55
|
EvaluationContext,
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
TranslationContext
|
|
56
|
+
TranslationContext,
|
|
57
|
+
ClientReactiveSubmittableParentNode<GeneralChildNode>
|
|
103
58
|
{
|
|
104
59
|
private readonly childrenState: ChildrenState<GeneralChildNode>;
|
|
105
60
|
|
|
106
|
-
//
|
|
107
|
-
readonly
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
readonly isRelevant = () => true;
|
|
61
|
+
// XFormsXPathElement
|
|
62
|
+
override readonly [XPathNodeKindKey] = 'element';
|
|
63
|
+
|
|
64
|
+
// DescendantNode
|
|
111
65
|
protected readonly state: SharedNodeState<RootStateSpec>;
|
|
112
66
|
protected readonly engineState: EngineState<RootStateSpec>;
|
|
113
67
|
|
|
68
|
+
override readonly hasReadonlyAncestor = () => false;
|
|
69
|
+
override readonly isSelfReadonly = () => false;
|
|
70
|
+
override readonly isReadonly = () => false;
|
|
71
|
+
override readonly hasNonRelevantAncestor = () => false;
|
|
72
|
+
override readonly isSelfRelevant = () => true;
|
|
73
|
+
override readonly isRelevant = () => true;
|
|
74
|
+
override readonly isRequired = () => false;
|
|
75
|
+
|
|
114
76
|
// RootNode
|
|
115
77
|
readonly nodeType = 'root';
|
|
116
78
|
readonly appearances = null;
|
|
79
|
+
readonly nodeOptions = null;
|
|
117
80
|
readonly classes: BodyClassList;
|
|
118
81
|
readonly currentState: MaterializedChildren<CurrentState<RootStateSpec>, GeneralChildNode>;
|
|
119
82
|
readonly validationState: AncestorNodeValidationState;
|
|
83
|
+
readonly submissionState: SubmissionState;
|
|
120
84
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
// EvaluationContext
|
|
127
|
-
readonly evaluator: XFormsXPathEvaluator;
|
|
128
|
-
|
|
129
|
-
readonly contextNode: Element;
|
|
85
|
+
// ClientReactiveSubmittableInstance
|
|
86
|
+
get submissionDefinition(): SubmissionDefinition {
|
|
87
|
+
return this.definition.submission;
|
|
88
|
+
}
|
|
130
89
|
|
|
131
90
|
// RootNode
|
|
132
|
-
override readonly parent = null;
|
|
133
|
-
|
|
134
91
|
readonly languages: FormLanguages;
|
|
135
92
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
constructor(xformDOM: XFormDOM, definition: RootDefinition, engineConfig: InstanceConfig) {
|
|
142
|
-
const reference = definition.nodeset;
|
|
93
|
+
constructor(parent: PrimaryInstance) {
|
|
94
|
+
const { definition } = parent;
|
|
95
|
+
const { nodeset: reference } = definition;
|
|
96
|
+
const computeReference: Accessor<string> = () => reference;
|
|
143
97
|
|
|
144
|
-
super(
|
|
145
|
-
computeReference
|
|
98
|
+
super(parent, definition, {
|
|
99
|
+
computeReference,
|
|
146
100
|
});
|
|
147
101
|
|
|
148
|
-
this.classes =
|
|
102
|
+
this.classes = parent.classes;
|
|
149
103
|
|
|
150
104
|
const childrenState = createChildrenState<Root, GeneralChildNode>(this);
|
|
151
105
|
|
|
152
106
|
this.childrenState = childrenState;
|
|
107
|
+
this.languages = parent.languages;
|
|
153
108
|
|
|
154
|
-
const instanceDOM = xformDOM.createInstance();
|
|
155
|
-
const evaluator = instanceDOM.primaryInstanceEvaluator;
|
|
156
|
-
const { translations } = evaluator;
|
|
157
|
-
const { defaultLanguage, languages } = getInitialLanguageState(translations);
|
|
158
109
|
const sharedStateOptions = {
|
|
159
110
|
clientStateFactory: this.engineConfig.stateFactory,
|
|
160
111
|
};
|
|
@@ -162,13 +113,13 @@ export class Root
|
|
|
162
113
|
const state = createSharedNodeState(
|
|
163
114
|
this.scope,
|
|
164
115
|
{
|
|
165
|
-
activeLanguage:
|
|
166
|
-
reference,
|
|
116
|
+
activeLanguage: parent.getActiveLanguage,
|
|
117
|
+
reference: computeReference,
|
|
167
118
|
label: null,
|
|
168
119
|
hint: null,
|
|
169
|
-
readonly: false,
|
|
170
|
-
relevant: true,
|
|
171
|
-
required: false,
|
|
120
|
+
readonly: () => false,
|
|
121
|
+
relevant: () => true,
|
|
122
|
+
required: () => false,
|
|
172
123
|
valueOptions: null,
|
|
173
124
|
value: null,
|
|
174
125
|
children: childrenState.childIds,
|
|
@@ -184,17 +135,9 @@ export class Root
|
|
|
184
135
|
childrenState
|
|
185
136
|
);
|
|
186
137
|
|
|
187
|
-
const contextNode = instanceDOM.xformDocument.createElement(definition.nodeName);
|
|
188
|
-
|
|
189
|
-
instanceDOM.primaryInstanceRoot.replaceWith(contextNode);
|
|
190
|
-
|
|
191
|
-
this.evaluator = evaluator;
|
|
192
|
-
this.contextNode = contextNode;
|
|
193
|
-
this.instanceDOM = instanceDOM;
|
|
194
|
-
this.languages = languages;
|
|
195
|
-
|
|
196
138
|
childrenState.setChildren(buildChildren(this));
|
|
197
139
|
this.validationState = createAggregatedViolations(this, sharedStateOptions);
|
|
140
|
+
this.submissionState = createRootSubmissionState(this);
|
|
198
141
|
}
|
|
199
142
|
|
|
200
143
|
getChildren(): readonly GeneralChildNode[] {
|
|
@@ -203,28 +146,14 @@ export class Root
|
|
|
203
146
|
|
|
204
147
|
// RootNode
|
|
205
148
|
setLanguage(language: FormLanguage): Root {
|
|
206
|
-
|
|
207
|
-
return formLanguage.language === language.language;
|
|
208
|
-
});
|
|
209
|
-
|
|
210
|
-
if (activeLanguage == null) {
|
|
211
|
-
throw new Error(`Language "${language.language}" not available`);
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
this.evaluator.translations.setActiveLanguage(activeLanguage.language);
|
|
215
|
-
this.state.setProperty('activeLanguage', activeLanguage);
|
|
149
|
+
this.rootDocument.setLanguage(language);
|
|
216
150
|
|
|
217
151
|
return this;
|
|
218
152
|
}
|
|
219
153
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
// TODO: typescript-eslint is right to object to this! We should _at least_
|
|
225
|
-
// make internal reactive reads obvious, i.e. function calls.
|
|
226
|
-
//
|
|
227
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-expressions -- read == subscribe
|
|
228
|
-
this.engineState.activeLanguage;
|
|
154
|
+
prepareSubmission<ChunkedType extends SubmissionChunkedType = 'monolithic'>(
|
|
155
|
+
options?: SubmissionOptions<ChunkedType>
|
|
156
|
+
): Promise<SubmissionResult<ChunkedType>> {
|
|
157
|
+
return this.rootDocument.prepareSubmission(options);
|
|
229
158
|
}
|
|
230
159
|
}
|