@getodk/xforms-engine 0.3.0 → 0.5.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/dist/client/BaseNode.d.ts +15 -5
- package/dist/client/BaseValueNode.d.ts +32 -0
- package/dist/client/EngineConfig.d.ts +49 -49
- package/dist/client/GroupNode.d.ts +2 -3
- package/dist/client/InputNode.d.ts +53 -0
- package/dist/client/ModelValueNode.d.ts +13 -9
- package/dist/client/NodeAppearances.d.ts +1 -2
- package/dist/client/NoteNode.d.ts +3 -4
- package/dist/client/RootNode.d.ts +36 -10
- package/dist/client/SelectNode.d.ts +4 -5
- package/dist/client/SubtreeNode.d.ts +1 -2
- package/dist/client/TextRange.d.ts +3 -4
- package/dist/client/TriggerNode.d.ts +25 -0
- package/dist/client/ValueType.d.ts +3 -0
- package/dist/client/constants.d.ts +50 -1
- package/dist/client/hierarchy.d.ts +9 -5
- package/dist/client/identity.d.ts +14 -0
- package/dist/client/index.d.ts +0 -1
- package/dist/client/node-types.d.ts +3 -1
- package/dist/client/repeat/BaseRepeatRangeNode.d.ts +1 -2
- package/dist/client/repeat/RepeatInstanceNode.d.ts +2 -3
- package/dist/client/repeat/RepeatRangeControlledNode.d.ts +1 -2
- package/dist/client/repeat/RepeatRangeUncontrolledNode.d.ts +1 -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/RangeNode.d.ts +9 -0
- package/dist/client/unsupported/RankNode.d.ts +9 -0
- package/dist/client/unsupported/UnsupportedControlNode.d.ts +32 -0
- package/dist/client/unsupported/UploadNode.d.ts +9 -0
- package/dist/client/validation.d.ts +2 -3
- package/dist/error/ErrorProductionDesignPendingError.d.ts +7 -0
- package/dist/error/ValueTypeInvariantError.d.ts +17 -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 +16 -4
- package/dist/index.js +8559 -4700
- package/dist/index.js.map +1 -1
- package/dist/instance/Group.d.ts +9 -5
- package/dist/instance/InputControl.d.ts +36 -0
- package/dist/instance/ModelValue.d.ts +16 -27
- package/dist/instance/Note.d.ts +11 -5
- package/dist/instance/PrimaryInstance.d.ts +84 -0
- package/dist/instance/Root.d.ts +31 -28
- package/dist/instance/SelectField.d.ts +13 -6
- package/dist/instance/Subtree.d.ts +10 -6
- package/dist/instance/TriggerControl.d.ts +47 -0
- package/dist/instance/abstract/DescendantNode.d.ts +33 -26
- package/dist/instance/abstract/InstanceNode.d.ts +50 -31
- package/dist/instance/abstract/UnsupportedControl.d.ts +53 -0
- package/dist/instance/abstract/ValueNode.d.ts +48 -0
- package/dist/instance/children.d.ts +0 -1
- package/dist/instance/hierarchy.d.ts +13 -8
- package/dist/instance/identity.d.ts +2 -7
- package/dist/instance/index.d.ts +0 -1
- package/dist/instance/internal-api/EvaluationContext.d.ts +53 -13
- package/dist/instance/internal-api/InstanceConfig.d.ts +8 -3
- package/dist/instance/internal-api/InstanceValueContext.d.ts +20 -0
- package/dist/instance/internal-api/PrimaryInstanceDocument.d.ts +36 -0
- package/dist/instance/internal-api/TranslationContext.d.ts +3 -3
- package/dist/instance/internal-api/ValidationContext.d.ts +12 -6
- package/dist/instance/internal-api/ValueContext.d.ts +5 -5
- package/dist/instance/internal-api/submission/ClientReactiveSubmittableInstance.d.ts +14 -0
- package/dist/instance/internal-api/submission/ClientReactiveSubmittableLeafNode.d.ts +31 -0
- package/dist/instance/internal-api/submission/ClientReactiveSubmittableParentNode.d.ts +18 -0
- package/dist/instance/internal-api/submission/ClientReactiveSubmittableValueNode.d.ts +17 -0
- package/dist/instance/repeat/BaseRepeatRange.d.ts +40 -85
- package/dist/instance/repeat/RepeatInstance.d.ts +11 -30
- package/dist/instance/repeat/RepeatRangeControlled.d.ts +3 -4
- package/dist/instance/repeat/RepeatRangeUncontrolled.d.ts +3 -4
- package/dist/instance/resource.d.ts +1 -2
- package/dist/instance/text/TextChunk.d.ts +0 -1
- package/dist/instance/text/TextRange.d.ts +1 -2
- package/dist/instance/unsupported/RangeControl.d.ts +6 -0
- package/dist/instance/unsupported/RankControl.d.ts +6 -0
- package/dist/instance/unsupported/UploadControl.d.ts +6 -0
- 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 +16 -0
- package/dist/integration/xpath/adapter/traversal.d.ts +25 -0
- package/dist/integration/xpath/adapter/values.d.ts +2 -0
- package/dist/integration/xpath/static-dom/StaticAttribute.d.ts +19 -0
- package/dist/integration/xpath/static-dom/StaticDocument.d.ts +16 -0
- package/dist/integration/xpath/static-dom/StaticElement.d.ts +40 -0
- package/dist/integration/xpath/static-dom/StaticNamedNode.d.ts +17 -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/TokenListParser.d.ts +3 -3
- 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/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/IntValueCodec.d.ts +6 -0
- package/dist/lib/codecs/StringValueCodec.d.ts +4 -0
- package/dist/lib/codecs/ValueCodec.d.ts +30 -0
- package/dist/lib/codecs/ValueTypePlaceholderCodec.d.ts +12 -0
- package/dist/lib/codecs/getSharedValueCodec.d.ts +47 -0
- package/dist/lib/dom/query.d.ts +4 -2
- package/dist/lib/reactivity/createChildrenState.d.ts +7 -6
- package/dist/lib/reactivity/createComputedExpression.d.ts +19 -7
- package/dist/lib/reactivity/createInstanceValueState.d.ts +40 -0
- package/dist/lib/reactivity/createNoteReadonlyThunk.d.ts +2 -3
- package/dist/lib/reactivity/createSelectItems.d.ts +0 -1
- package/dist/lib/reactivity/createTranslationState.d.ts +19 -0
- package/dist/lib/reactivity/createValueState.d.ts +6 -11
- package/dist/lib/reactivity/materializeCurrentStateChildren.d.ts +4 -5
- package/dist/lib/reactivity/node-state/createClientState.d.ts +0 -1
- package/dist/lib/reactivity/node-state/createCurrentState.d.ts +0 -1
- package/dist/lib/reactivity/node-state/createEngineState.d.ts +0 -1
- package/dist/lib/reactivity/node-state/createSharedNodeState.d.ts +0 -1
- package/dist/lib/reactivity/node-state/createSpecifiedPropertyDescriptor.d.ts +0 -1
- package/dist/lib/reactivity/node-state/createSpecifiedState.d.ts +0 -1
- package/dist/lib/reactivity/node-state/representations.d.ts +0 -1
- package/dist/lib/reactivity/scope.d.ts +0 -1
- package/dist/lib/reactivity/text/createFieldHint.d.ts +1 -2
- package/dist/lib/reactivity/text/createNodeLabel.d.ts +1 -2
- package/dist/lib/reactivity/text/createNoteText.d.ts +1 -2
- package/dist/lib/reactivity/text/createTextRange.d.ts +0 -1
- package/dist/lib/reactivity/types.d.ts +0 -1
- package/dist/lib/reactivity/validation/createAggregatedViolations.d.ts +0 -1
- package/dist/lib/reactivity/validation/createValidation.d.ts +0 -1
- package/dist/lib/xml-serialization.d.ts +41 -0
- package/dist/parse/XFormDOM.d.ts +42 -0
- package/dist/{XFormDefinition.d.ts → parse/XFormDefinition.d.ts} +3 -5
- package/dist/parse/attachments/FormAttachmentResource.d.ts +27 -0
- package/dist/{body → parse/body}/BodyDefinition.d.ts +16 -11
- package/dist/{body → parse/body}/BodyElementDefinition.d.ts +7 -7
- package/dist/{body → parse/body}/RepeatElementDefinition.d.ts +3 -4
- package/dist/{body → parse/body}/UnsupportedBodyElementDefinition.d.ts +0 -1
- package/dist/parse/body/appearance/inputAppearanceParser.d.ts +3 -0
- package/dist/{body → parse/body}/appearance/selectAppearanceParser.d.ts +1 -2
- package/dist/{body → parse/body}/appearance/structureElementAppearanceParser.d.ts +1 -2
- package/dist/parse/body/appearance/unknownAppearanceParser.d.ts +3 -0
- package/dist/{body → parse/body}/control/ControlDefinition.d.ts +3 -4
- package/dist/{body/control/InputDefinition.d.ts → parse/body/control/InputControlDefinition.d.ts} +2 -3
- package/dist/parse/body/control/RangeControlDefinition.d.ts +11 -0
- package/dist/parse/body/control/RankControlDefinition.d.ts +11 -0
- package/dist/parse/body/control/TriggerControlDefinition.d.ts +11 -0
- package/dist/parse/body/control/UploadControlDefinition.d.ts +11 -0
- package/dist/{body → parse/body}/control/select/ItemDefinition.d.ts +2 -3
- package/dist/{body → parse/body}/control/select/ItemsetDefinition.d.ts +4 -5
- package/dist/{body → parse/body}/control/select/ItemsetNodesetContext.d.ts +1 -4
- package/dist/{body → parse/body}/control/select/SelectDefinition.d.ts +3 -12
- package/dist/{body → parse/body}/group/BaseGroupDefinition.d.ts +3 -5
- package/dist/{body → parse/body}/group/LogicalGroupDefinition.d.ts +0 -1
- package/dist/{body → parse/body}/group/PresentationGroupDefinition.d.ts +1 -2
- package/dist/{body → parse/body}/group/StructuralGroupDefinition.d.ts +0 -1
- package/dist/{model/BindComputation.d.ts → parse/expression/BindComputationExpression.d.ts} +5 -6
- package/dist/{body/control/select → parse/expression}/ItemsetNodesetExpression.d.ts +2 -3
- package/dist/{body/control/select → parse/expression}/ItemsetValueExpression.d.ts +2 -3
- package/dist/parse/expression/RepeatCountControlExpression.d.ts +2 -3
- package/dist/parse/expression/TextLiteralExpression.d.ts +9 -0
- package/dist/parse/expression/TextOutputExpression.d.ts +7 -0
- package/dist/parse/expression/TextReferenceExpression.d.ts +7 -0
- package/dist/parse/expression/TextTranslationExpression.d.ts +8 -0
- package/dist/parse/expression/abstract/DependencyContext.d.ts +7 -0
- package/dist/{expression → parse/expression/abstract}/DependentExpression.d.ts +4 -6
- package/dist/parse/expression/abstract/TextChunkExpression.d.ts +17 -0
- package/dist/parse/model/BindDefinition.d.ts +38 -0
- package/dist/parse/model/BindTypeDefinition.d.ts +20 -0
- package/dist/{model → parse/model}/DescendentNodeDefinition.d.ts +0 -2
- 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 +8 -0
- package/dist/parse/model/ItextTranslation/ItextTranslationsDefinition.d.ts +8 -0
- package/dist/{model → parse/model}/LeafNodeDefinition.d.ts +4 -3
- package/dist/{model → parse/model}/ModelBindMap.d.ts +1 -2
- package/dist/{model → parse/model}/ModelDefinition.d.ts +3 -2
- package/dist/{model → parse/model}/NodeDefinition.d.ts +0 -2
- package/dist/parse/{NoteNodeDefinition.d.ts → model/NoteNodeDefinition.d.ts} +12 -13
- package/dist/{model → parse/model}/RepeatInstanceDefinition.d.ts +1 -2
- package/dist/{model → parse/model}/RepeatRangeDefinition.d.ts +2 -3
- package/dist/{model → parse/model}/RepeatTemplateDefinition.d.ts +2 -3
- package/dist/{model → parse/model}/RootDefinition.d.ts +5 -5
- 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/{model → parse/model}/SubtreeDefinition.d.ts +1 -2
- package/dist/parse/shared/parseStaticDocumentFromDOMSubtree.d.ts +24 -0
- package/dist/parse/text/HintDefinition.d.ts +2 -3
- package/dist/parse/text/ItemLabelDefinition.d.ts +2 -3
- package/dist/parse/text/ItemsetLabelDefinition.d.ts +3 -4
- package/dist/parse/text/LabelDefinition.d.ts +5 -6
- package/dist/parse/text/MessageDefinition.d.ts +4 -5
- package/dist/parse/text/abstract/TextElementDefinition.d.ts +8 -9
- package/dist/parse/text/abstract/TextRangeDefinition.d.ts +4 -7
- package/dist/parse/xpath/path-resolution.d.ts +0 -1
- package/dist/parse/xpath/predicate-analysis.d.ts +0 -1
- package/dist/parse/xpath/reference-parsing.d.ts +0 -1
- package/dist/parse/xpath/semantic-analysis.d.ts +5 -1
- package/dist/parse/xpath/syntax-traversal.d.ts +0 -1
- package/dist/solid.js +8398 -4543
- package/dist/solid.js.map +1 -1
- package/package.json +14 -12
- package/src/client/BaseNode.ts +17 -7
- package/src/client/BaseValueNode.ts +35 -0
- package/src/client/EngineConfig.ts +52 -51
- package/src/client/GroupNode.ts +2 -2
- package/src/client/InputNode.ts +77 -0
- package/src/client/ModelValueNode.ts +31 -8
- package/src/client/NodeAppearances.ts +1 -1
- package/src/client/NoteNode.ts +3 -3
- package/src/client/RootNode.ts +39 -9
- package/src/client/SelectNode.ts +5 -5
- package/src/client/SubtreeNode.ts +1 -1
- package/src/client/TextRange.ts +4 -5
- package/src/client/TriggerNode.ts +29 -0
- package/src/client/ValueType.ts +4 -0
- package/src/client/constants.ts +67 -0
- package/src/client/hierarchy.ts +16 -4
- package/src/client/identity.ts +16 -0
- package/src/client/node-types.ts +19 -5
- package/src/client/repeat/BaseRepeatRangeNode.ts +1 -1
- package/src/client/repeat/RepeatInstanceNode.ts +2 -2
- package/src/client/repeat/RepeatRangeControlledNode.ts +1 -1
- package/src/client/repeat/RepeatRangeUncontrolledNode.ts +1 -1
- 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/RangeNode.ts +14 -0
- package/src/client/unsupported/RankNode.ts +14 -0
- package/src/client/unsupported/UnsupportedControlNode.ts +40 -0
- package/src/client/unsupported/UploadNode.ts +14 -0
- package/src/client/validation.ts +2 -2
- package/src/error/ErrorProductionDesignPendingError.ts +6 -0
- package/src/error/ValueTypeInvariantError.ts +22 -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 +16 -2
- package/src/instance/Group.ts +17 -5
- package/src/instance/InputControl.ts +119 -0
- package/src/instance/ModelValue.ts +47 -54
- package/src/instance/Note.ts +26 -10
- package/src/instance/PrimaryInstance.ts +244 -0
- package/src/instance/Root.ts +64 -132
- package/src/instance/SelectField.ts +62 -25
- package/src/instance/Subtree.ts +19 -7
- package/src/instance/{StringField.ts → TriggerControl.ts} +61 -30
- package/src/instance/abstract/DescendantNode.ts +92 -47
- package/src/instance/abstract/InstanceNode.ts +104 -98
- package/src/instance/abstract/UnsupportedControl.ts +174 -0
- package/src/instance/abstract/ValueNode.ts +127 -0
- package/src/instance/children.ts +83 -14
- package/src/instance/hierarchy.ts +36 -14
- package/src/instance/identity.ts +3 -9
- package/src/instance/index.ts +26 -8
- package/src/instance/internal-api/EvaluationContext.ts +61 -14
- package/src/instance/internal-api/InstanceConfig.ts +9 -2
- package/src/instance/internal-api/InstanceValueContext.ts +24 -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 +13 -5
- package/src/instance/internal-api/ValueContext.ts +5 -4
- package/src/instance/internal-api/submission/ClientReactiveSubmittableInstance.ts +20 -0
- package/src/instance/internal-api/submission/ClientReactiveSubmittableLeafNode.ts +42 -0
- package/src/instance/internal-api/submission/ClientReactiveSubmittableParentNode.ts +25 -0
- package/src/instance/internal-api/submission/ClientReactiveSubmittableValueNode.ts +23 -0
- package/src/instance/repeat/BaseRepeatRange.ts +51 -132
- package/src/instance/repeat/RepeatInstance.ts +20 -46
- package/src/instance/repeat/RepeatRangeControlled.ts +6 -6
- package/src/instance/repeat/RepeatRangeUncontrolled.ts +3 -5
- package/src/instance/resource.ts +1 -1
- package/src/instance/text/TextChunk.ts +1 -1
- package/src/instance/unsupported/RangeControl.ts +9 -0
- package/src/instance/unsupported/RankControl.ts +9 -0
- package/src/instance/unsupported/UploadControl.ts +9 -0
- 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 +99 -0
- package/src/integration/xpath/adapter/traversal.ts +228 -0
- package/src/integration/xpath/adapter/values.ts +5 -0
- package/src/integration/xpath/static-dom/StaticAttribute.ts +33 -0
- package/src/integration/xpath/static-dom/StaticDocument.ts +38 -0
- package/src/integration/xpath/static-dom/StaticElement.ts +106 -0
- package/src/integration/xpath/static-dom/StaticNamedNode.ts +45 -0
- package/src/integration/xpath/static-dom/StaticNode.ts +68 -0
- package/src/integration/xpath/static-dom/StaticText.ts +28 -0
- package/src/lib/TokenListParser.ts +11 -7
- 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/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/IntValueCodec.ts +100 -0
- package/src/lib/codecs/StringValueCodec.ts +11 -0
- package/src/lib/codecs/ValueCodec.ts +106 -0
- package/src/lib/codecs/ValueTypePlaceholderCodec.ts +19 -0
- package/src/lib/codecs/getSharedValueCodec.ts +77 -0
- package/src/lib/dom/query.ts +8 -1
- package/src/lib/reactivity/createChildrenState.ts +8 -6
- package/src/lib/reactivity/createComputedExpression.ts +59 -36
- package/src/lib/reactivity/createInstanceValueState.ts +166 -0
- package/src/lib/reactivity/createNoteReadonlyThunk.ts +12 -7
- package/src/lib/reactivity/createSelectItems.ts +23 -23
- package/src/lib/reactivity/createTranslationState.ts +61 -0
- package/src/lib/reactivity/createValueState.ts +64 -122
- package/src/lib/reactivity/materializeCurrentStateChildren.ts +7 -7
- package/src/lib/reactivity/node-state/createSpecifiedState.ts +1 -1
- package/src/lib/reactivity/text/createFieldHint.ts +1 -1
- package/src/lib/reactivity/text/createNodeLabel.ts +1 -1
- package/src/lib/reactivity/text/createNoteText.ts +1 -1
- package/src/lib/reactivity/text/createTextRange.ts +8 -7
- package/src/lib/reactivity/validation/createAggregatedViolations.ts +9 -4
- package/src/lib/reactivity/validation/createValidation.ts +2 -3
- package/src/lib/xml-serialization.ts +96 -0
- package/src/{XFormDOM.ts → parse/XFormDOM.ts} +110 -75
- package/src/{XFormDefinition.ts → parse/XFormDefinition.ts} +3 -8
- package/src/parse/attachments/FormAttachmentResource.ts +40 -0
- package/src/{body → parse/body}/BodyDefinition.ts +46 -29
- package/src/{body → parse/body}/BodyElementDefinition.ts +12 -6
- package/src/{body → parse/body}/RepeatElementDefinition.ts +7 -5
- package/src/{body → parse/body}/appearance/inputAppearanceParser.ts +2 -2
- package/src/{body → parse/body}/appearance/selectAppearanceParser.ts +1 -1
- package/src/{body → parse/body}/appearance/structureElementAppearanceParser.ts +1 -1
- package/src/parse/body/appearance/unknownAppearanceParser.ts +5 -0
- package/src/{body → parse/body}/control/ControlDefinition.ts +4 -4
- package/src/{body/control/InputDefinition.ts → parse/body/control/InputControlDefinition.ts} +3 -5
- package/src/parse/body/control/RangeControlDefinition.ts +26 -0
- package/src/parse/body/control/RankControlDefinition.ts +27 -0
- package/src/parse/body/control/TriggerControlDefinition.ts +26 -0
- package/src/parse/body/control/UploadControlDefinition.ts +26 -0
- package/src/{body → parse/body}/control/select/ItemDefinition.ts +2 -2
- package/src/{body → parse/body}/control/select/ItemsetDefinition.ts +5 -5
- package/src/{body → parse/body}/control/select/ItemsetNodesetContext.ts +1 -6
- package/src/{body → parse/body}/control/select/SelectDefinition.ts +3 -11
- package/src/{body → parse/body}/group/BaseGroupDefinition.ts +11 -22
- package/src/{body → parse/body}/group/PresentationGroupDefinition.ts +1 -1
- package/src/{model/BindComputation.ts → parse/expression/BindComputationExpression.ts} +8 -8
- package/src/{body/control/select → parse/expression}/ItemsetNodesetExpression.ts +2 -2
- package/src/{body/control/select → parse/expression}/ItemsetValueExpression.ts +2 -2
- package/src/parse/expression/RepeatCountControlExpression.ts +2 -2
- package/src/parse/expression/TextLiteralExpression.ts +19 -0
- package/src/parse/{text/OutputChunkDefinition.ts → expression/TextOutputExpression.ts} +4 -4
- package/src/parse/{text/ReferenceChunkDefinition.ts → expression/TextReferenceExpression.ts} +4 -4
- package/src/parse/{text/TranslationChunkDefinition.ts → expression/TextTranslationExpression.ts} +4 -4
- package/src/{expression → parse/expression/abstract}/DependencyContext.ts +0 -26
- package/src/{expression → parse/expression/abstract}/DependentExpression.ts +5 -16
- package/src/parse/expression/abstract/TextChunkExpression.ts +38 -0
- package/src/parse/model/BindDefinition.ts +104 -0
- package/src/parse/model/BindTypeDefinition.ts +175 -0
- package/src/{model → parse/model}/DescendentNodeDefinition.ts +0 -6
- package/src/parse/model/FormSubmissionDefinition.ts +44 -0
- package/src/parse/model/ItextTranslation/ItextTranslationDefinition.ts +4 -0
- package/src/parse/model/ItextTranslation/ItextTranslationRootDefinition.ts +41 -0
- package/src/parse/model/ItextTranslation/ItextTranslationsDefinition.ts +31 -0
- package/src/{model → parse/model}/LeafNodeDefinition.ts +4 -1
- package/src/{model → parse/model}/ModelBindMap.ts +6 -8
- package/src/parse/model/ModelDefinition.ts +24 -0
- package/src/{model → parse/model}/NodeDefinition.ts +0 -3
- package/src/parse/{NoteNodeDefinition.ts → model/NoteNodeDefinition.ts} +12 -12
- package/src/{model → parse/model}/RepeatRangeDefinition.ts +1 -1
- package/src/{model → parse/model}/RootDefinition.ts +4 -3
- 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 +414 -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/shared/parseStaticDocumentFromDOMSubtree.ts +149 -0
- package/src/parse/text/HintDefinition.ts +2 -2
- package/src/parse/text/ItemLabelDefinition.ts +2 -2
- package/src/parse/text/ItemsetLabelDefinition.ts +7 -7
- package/src/parse/text/LabelDefinition.ts +5 -5
- package/src/parse/text/MessageDefinition.ts +7 -7
- package/src/parse/text/abstract/TextElementDefinition.ts +14 -14
- package/src/parse/text/abstract/TextRangeDefinition.ts +4 -10
- package/src/parse/xpath/semantic-analysis.ts +29 -0
- package/dist/XFormDOM.d.ts +0 -32
- package/dist/XFormDataType.d.ts +0 -27
- package/dist/body/appearance/inputAppearanceParser.d.ts +0 -4
- package/dist/client/StringNode.d.ts +0 -47
- package/dist/expression/DependencyContext.d.ts +0 -13
- package/dist/instance/StringField.d.ts +0 -45
- package/dist/instance/internal-api/SubscribableDependency.d.ts +0 -60
- package/dist/model/BindDefinition.d.ts +0 -34
- package/dist/parse/text/OutputChunkDefinition.d.ts +0 -8
- package/dist/parse/text/ReferenceChunkDefinition.d.ts +0 -8
- package/dist/parse/text/StaticTextChunkDefinition.d.ts +0 -10
- package/dist/parse/text/TranslationChunkDefinition.d.ts +0 -9
- package/dist/parse/text/abstract/TextChunkDefinition.d.ts +0 -18
- package/src/XFormDataType.ts +0 -64
- package/src/client/StringNode.ts +0 -52
- package/src/instance/internal-api/SubscribableDependency.ts +0 -61
- package/src/model/BindDefinition.ts +0 -106
- package/src/model/ModelDefinition.ts +0 -19
- package/src/parse/TODO.md +0 -3
- package/src/parse/text/StaticTextChunkDefinition.ts +0 -19
- package/src/parse/text/abstract/TextChunkDefinition.ts +0 -38
- /package/dist/{model → parse/model}/BindElement.d.ts +0 -0
- /package/src/{body → parse/body}/UnsupportedBodyElementDefinition.ts +0 -0
- /package/src/{body → parse/body}/group/LogicalGroupDefinition.ts +0 -0
- /package/src/{body → parse/body}/group/StructuralGroupDefinition.ts +0 -0
- /package/src/{model → parse/model}/BindElement.ts +0 -0
- /package/src/{model → parse/model}/RepeatInstanceDefinition.ts +0 -0
- /package/src/{model → parse/model}/RepeatTemplateDefinition.ts +0 -0
- /package/src/{model → parse/model}/SubtreeDefinition.ts +0 -0
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { XPathNodeKindKey } from '@getodk/xpath';
|
|
2
|
+
import type { Accessor } from 'solid-js';
|
|
3
|
+
import { createSignal } from 'solid-js';
|
|
4
|
+
import type { ActiveLanguage, FormLanguage, FormLanguages } from '../client/FormLanguage.ts';
|
|
5
|
+
import type { FormNodeID } from '../client/identity.ts';
|
|
6
|
+
import type { RootNode } from '../client/RootNode.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';
|
|
13
|
+
import type { AncestorNodeValidationState } from '../client/validation.ts';
|
|
14
|
+
import type { XFormsXPathDocument } from '../integration/xpath/adapter/XFormsXPathNode.ts';
|
|
15
|
+
import { EngineXPathEvaluator } from '../integration/xpath/EngineXPathEvaluator.ts';
|
|
16
|
+
import { createInstanceSubmissionState } from '../lib/client-reactivity/submission/createInstanceSubmissionState.ts';
|
|
17
|
+
import { prepareSubmission } from '../lib/client-reactivity/submission/prepareSubmission.ts';
|
|
18
|
+
import { createChildrenState } from '../lib/reactivity/createChildrenState.ts';
|
|
19
|
+
import { createTranslationState } from '../lib/reactivity/createTranslationState.ts';
|
|
20
|
+
import type { MaterializedChildren } from '../lib/reactivity/materializeCurrentStateChildren.ts';
|
|
21
|
+
import { materializeCurrentStateChildren } from '../lib/reactivity/materializeCurrentStateChildren.ts';
|
|
22
|
+
import type { CurrentState } from '../lib/reactivity/node-state/createCurrentState.ts';
|
|
23
|
+
import type { EngineState } from '../lib/reactivity/node-state/createEngineState.ts';
|
|
24
|
+
import type { SharedNodeState } from '../lib/reactivity/node-state/createSharedNodeState.ts';
|
|
25
|
+
import { createSharedNodeState } from '../lib/reactivity/node-state/createSharedNodeState.ts';
|
|
26
|
+
import type { ReactiveScope } from '../lib/reactivity/scope.ts';
|
|
27
|
+
import type { SimpleAtomicStateSetter } from '../lib/reactivity/types.ts';
|
|
28
|
+
import type { BodyClassList } from '../parse/body/BodyDefinition.ts';
|
|
29
|
+
import type { ModelDefinition } from '../parse/model/ModelDefinition.ts';
|
|
30
|
+
import type { RootDefinition } from '../parse/model/RootDefinition.ts';
|
|
31
|
+
import type { SecondaryInstancesDefinition } from '../parse/model/SecondaryInstance/SecondaryInstancesDefinition.ts';
|
|
32
|
+
import { InstanceNode } from './abstract/InstanceNode.ts';
|
|
33
|
+
import type { EvaluationContext } from './internal-api/EvaluationContext.ts';
|
|
34
|
+
import type { InstanceConfig } from './internal-api/InstanceConfig.ts';
|
|
35
|
+
import type { PrimaryInstanceDocument } from './internal-api/PrimaryInstanceDocument.ts';
|
|
36
|
+
import type { ClientReactiveSubmittableInstance } from './internal-api/submission/ClientReactiveSubmittableInstance.ts';
|
|
37
|
+
import type { TranslationContext } from './internal-api/TranslationContext.ts';
|
|
38
|
+
import { Root } from './Root.ts';
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* As specified by {@link | XPath 1.0}:
|
|
42
|
+
*
|
|
43
|
+
* > A `/` by itself selects the root node of the document containing the
|
|
44
|
+
* > context node.
|
|
45
|
+
*
|
|
46
|
+
* Important note: "root node" here references the same semantics currently
|
|
47
|
+
* represented by `@getodk/xpath` as {@link XPathDocument}. It is an infortunate
|
|
48
|
+
* historical mistake that our internal representation of a primary instance has
|
|
49
|
+
* conflated the same "root" term to represent the "document element" with the
|
|
50
|
+
* same semantic name.
|
|
51
|
+
*
|
|
52
|
+
* {@link PrimaryInstance} exists specifically to provide XPath document
|
|
53
|
+
* semantics. At time of writing, it is expected that every XPath evaluation
|
|
54
|
+
* will be performed with a context node either:
|
|
55
|
+
*
|
|
56
|
+
* - somewhere in this primary instance document's hierarchy; or
|
|
57
|
+
* - in a related subtree where the primary instance document is still
|
|
58
|
+
* semantically represented as the context root node
|
|
59
|
+
*/
|
|
60
|
+
const PRIMARY_INSTANCE_REFERENCE = '/';
|
|
61
|
+
|
|
62
|
+
interface PrimaryInstanceStateSpec {
|
|
63
|
+
readonly reference: string;
|
|
64
|
+
readonly readonly: boolean;
|
|
65
|
+
readonly relevant: boolean;
|
|
66
|
+
readonly required: boolean;
|
|
67
|
+
readonly label: null;
|
|
68
|
+
readonly hint: null;
|
|
69
|
+
readonly children: Accessor<readonly FormNodeID[]>;
|
|
70
|
+
readonly valueOptions: null;
|
|
71
|
+
readonly value: null;
|
|
72
|
+
|
|
73
|
+
// Root-specific
|
|
74
|
+
readonly activeLanguage: Accessor<ActiveLanguage>;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export class PrimaryInstance
|
|
78
|
+
extends InstanceNode<RootDefinition, PrimaryInstanceStateSpec, null, Root>
|
|
79
|
+
implements
|
|
80
|
+
PrimaryInstanceDocument,
|
|
81
|
+
XFormsXPathDocument,
|
|
82
|
+
TranslationContext,
|
|
83
|
+
EvaluationContext,
|
|
84
|
+
ClientReactiveSubmittableInstance
|
|
85
|
+
{
|
|
86
|
+
// InstanceNode
|
|
87
|
+
protected readonly state: SharedNodeState<PrimaryInstanceStateSpec>;
|
|
88
|
+
protected readonly engineState: EngineState<PrimaryInstanceStateSpec>;
|
|
89
|
+
readonly getChildren: Accessor<readonly Root[]>;
|
|
90
|
+
|
|
91
|
+
readonly hasReadonlyAncestor = () => false;
|
|
92
|
+
readonly isReadonly = () => false;
|
|
93
|
+
readonly hasNonRelevantAncestor = () => false;
|
|
94
|
+
readonly isRelevant = () => true;
|
|
95
|
+
|
|
96
|
+
// TranslationContext (support)
|
|
97
|
+
private readonly setActiveLanguage: SimpleAtomicStateSetter<FormLanguage>;
|
|
98
|
+
|
|
99
|
+
// XFormsXPathDocument
|
|
100
|
+
readonly [XPathNodeKindKey] = 'document';
|
|
101
|
+
|
|
102
|
+
// PrimaryInstanceDocument, ClientReactiveSubmittableInstance
|
|
103
|
+
readonly nodeType = 'primary-instance';
|
|
104
|
+
readonly appearances = null;
|
|
105
|
+
readonly classes: BodyClassList;
|
|
106
|
+
readonly root: Root;
|
|
107
|
+
readonly currentState: MaterializedChildren<CurrentState<PrimaryInstanceStateSpec>, Root>;
|
|
108
|
+
readonly validationState: AncestorNodeValidationState;
|
|
109
|
+
readonly submissionState: SubmissionState;
|
|
110
|
+
readonly languages: FormLanguages;
|
|
111
|
+
|
|
112
|
+
// TranslationContext (+ EvaluationContext)
|
|
113
|
+
readonly getActiveLanguage: Accessor<ActiveLanguage>;
|
|
114
|
+
|
|
115
|
+
// EvaluationContext
|
|
116
|
+
readonly isAttached: Accessor<boolean>;
|
|
117
|
+
readonly evaluator: EngineXPathEvaluator;
|
|
118
|
+
override readonly contextNode = this;
|
|
119
|
+
|
|
120
|
+
constructor(
|
|
121
|
+
scope: ReactiveScope,
|
|
122
|
+
model: ModelDefinition,
|
|
123
|
+
secondaryInstances: SecondaryInstancesDefinition,
|
|
124
|
+
engineConfig: InstanceConfig
|
|
125
|
+
) {
|
|
126
|
+
const { root: definition } = model;
|
|
127
|
+
|
|
128
|
+
super(engineConfig, null, definition, {
|
|
129
|
+
scope,
|
|
130
|
+
computeReference: () => PRIMARY_INSTANCE_REFERENCE,
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
const [isAttached, setIsAttached] = createSignal(false);
|
|
134
|
+
|
|
135
|
+
this.isAttached = isAttached;
|
|
136
|
+
|
|
137
|
+
const evaluator = new EngineXPathEvaluator({
|
|
138
|
+
rootNode: this,
|
|
139
|
+
itextTranslationsByLanguage: model.itextTranslations,
|
|
140
|
+
secondaryInstancesById: secondaryInstances,
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
const { languages, getActiveLanguage, setActiveLanguage } = createTranslationState(
|
|
144
|
+
scope,
|
|
145
|
+
evaluator
|
|
146
|
+
);
|
|
147
|
+
|
|
148
|
+
this.languages = languages;
|
|
149
|
+
this.getActiveLanguage = getActiveLanguage;
|
|
150
|
+
this.setActiveLanguage = setActiveLanguage;
|
|
151
|
+
|
|
152
|
+
this.evaluator = evaluator;
|
|
153
|
+
this.classes = definition.classes;
|
|
154
|
+
|
|
155
|
+
const childrenState = createChildrenState<this, Root>(this);
|
|
156
|
+
|
|
157
|
+
this.getChildren = childrenState.getChildren;
|
|
158
|
+
|
|
159
|
+
const stateSpec: PrimaryInstanceStateSpec = {
|
|
160
|
+
activeLanguage: getActiveLanguage,
|
|
161
|
+
reference: PRIMARY_INSTANCE_REFERENCE,
|
|
162
|
+
label: null,
|
|
163
|
+
hint: null,
|
|
164
|
+
readonly: false,
|
|
165
|
+
relevant: true,
|
|
166
|
+
required: false,
|
|
167
|
+
valueOptions: null,
|
|
168
|
+
value: null,
|
|
169
|
+
children: childrenState.childIds,
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
const state = createSharedNodeState(scope, stateSpec, {
|
|
173
|
+
clientStateFactory: engineConfig.stateFactory,
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
this.state = state;
|
|
177
|
+
this.engineState = state.engineState;
|
|
178
|
+
this.currentState = materializeCurrentStateChildren(scope, state.currentState, childrenState);
|
|
179
|
+
|
|
180
|
+
const root = new Root(this);
|
|
181
|
+
|
|
182
|
+
this.root = root;
|
|
183
|
+
|
|
184
|
+
this.validationState = {
|
|
185
|
+
get violations() {
|
|
186
|
+
return root.validationState.violations;
|
|
187
|
+
},
|
|
188
|
+
};
|
|
189
|
+
this.submissionState = createInstanceSubmissionState(this);
|
|
190
|
+
|
|
191
|
+
childrenState.setChildren([root]);
|
|
192
|
+
setIsAttached(true);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// PrimaryInstanceDocument
|
|
196
|
+
/**
|
|
197
|
+
* @todo Note that this method's signature is intentionally derived from
|
|
198
|
+
* {@link RootNode.setLanguage}, but its return type differs! The design
|
|
199
|
+
* intent of returning {@link RootNode} from all of the client-facing state
|
|
200
|
+
* setter methods has proven… interesting philosophically. But nothing
|
|
201
|
+
* downstream has availed itself of that philosophy, and otherwise it's not
|
|
202
|
+
* particularly pragmatic or ergonomic (internally or for clients alike).
|
|
203
|
+
*
|
|
204
|
+
* Since this class is (currently) engine-internal, this seems like an
|
|
205
|
+
* excellent place to start a discussion around what we want longer term for
|
|
206
|
+
* state setter signatures in _client-facing_ APIs. As a first pass, it seems
|
|
207
|
+
* reasonable to borrow the idiomatic convention of returning the effective
|
|
208
|
+
* value assigned by the setter.
|
|
209
|
+
*
|
|
210
|
+
* @see
|
|
211
|
+
* {@link https://github.com/getodk/web-forms/issues/45#issuecomment-1967932261 | Initial read interface design between engine and UI - design summary comment}
|
|
212
|
+
* (and some of the comments leading up to it) for background on the
|
|
213
|
+
* philosophical reasoning behind the existing signature convention.
|
|
214
|
+
*/
|
|
215
|
+
setLanguage(language: FormLanguage): FormLanguage {
|
|
216
|
+
const availableFormLanguage = this.languages.find(
|
|
217
|
+
(formLanguage): formLanguage is FormLanguage => {
|
|
218
|
+
return (
|
|
219
|
+
formLanguage.isSyntheticDefault == null && formLanguage.language === language.language
|
|
220
|
+
);
|
|
221
|
+
}
|
|
222
|
+
);
|
|
223
|
+
|
|
224
|
+
if (availableFormLanguage == null) {
|
|
225
|
+
throw new Error(`Language "${language.language}" not available`);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
this.evaluator.setActiveLanguage(availableFormLanguage.language);
|
|
229
|
+
|
|
230
|
+
return this.setActiveLanguage(availableFormLanguage);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// PrimaryInstanceDocument, ClientReactiveSubmittableInstance
|
|
234
|
+
prepareSubmission<ChunkedType extends SubmissionChunkedType = 'monolithic'>(
|
|
235
|
+
options?: SubmissionOptions<ChunkedType>
|
|
236
|
+
): Promise<SubmissionResult<ChunkedType>> {
|
|
237
|
+
const result = prepareSubmission(this, {
|
|
238
|
+
chunked: (options?.chunked ?? 'monolithic') as ChunkedType,
|
|
239
|
+
maxSize: options?.maxSize ?? Infinity,
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
return Promise.resolve(result);
|
|
243
|
+
}
|
|
244
|
+
}
|
package/src/instance/Root.ts
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type { Accessor
|
|
3
|
-
import { createSignal } from 'solid-js';
|
|
4
|
-
import type { XFormDOM } from '../XFormDOM.ts';
|
|
5
|
-
import type { BodyClassList } from '../body/BodyDefinition.ts';
|
|
1
|
+
import { XPathNodeKindKey } from '@getodk/xpath';
|
|
2
|
+
import type { Accessor } from 'solid-js';
|
|
6
3
|
import type { ActiveLanguage, FormLanguage, FormLanguages } from '../client/FormLanguage.ts';
|
|
4
|
+
import type { FormNodeID } from '../client/identity.ts';
|
|
7
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';
|
|
8
13
|
import type { AncestorNodeValidationState } from '../client/validation.ts';
|
|
14
|
+
import type { XFormsXPathElement } from '../integration/xpath/adapter/XFormsXPathNode.ts';
|
|
15
|
+
import { createParentNodeSubmissionState } from '../lib/client-reactivity/submission/createParentNodeSubmissionState.ts';
|
|
9
16
|
import type { ChildrenState } from '../lib/reactivity/createChildrenState.ts';
|
|
10
17
|
import { createChildrenState } from '../lib/reactivity/createChildrenState.ts';
|
|
11
18
|
import type { MaterializedChildren } from '../lib/reactivity/materializeCurrentStateChildren.ts';
|
|
@@ -15,146 +22,89 @@ import type { EngineState } from '../lib/reactivity/node-state/createEngineState
|
|
|
15
22
|
import type { SharedNodeState } from '../lib/reactivity/node-state/createSharedNodeState.ts';
|
|
16
23
|
import { createSharedNodeState } from '../lib/reactivity/node-state/createSharedNodeState.ts';
|
|
17
24
|
import { createAggregatedViolations } from '../lib/reactivity/validation/createAggregatedViolations.ts';
|
|
18
|
-
import type {
|
|
19
|
-
import {
|
|
25
|
+
import type { BodyClassList } from '../parse/body/BodyDefinition.ts';
|
|
26
|
+
import type { RootDefinition } from '../parse/model/RootDefinition.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;
|
|
117
79
|
readonly classes: BodyClassList;
|
|
118
80
|
readonly currentState: MaterializedChildren<CurrentState<RootStateSpec>, GeneralChildNode>;
|
|
119
81
|
readonly validationState: AncestorNodeValidationState;
|
|
82
|
+
readonly submissionState: SubmissionState;
|
|
120
83
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
// EvaluationContext
|
|
127
|
-
readonly evaluator: XFormsXPathEvaluator;
|
|
128
|
-
|
|
129
|
-
readonly contextNode: Element;
|
|
84
|
+
// ClientReactiveSubmittableInstance
|
|
85
|
+
get submissionDefinition(): SubmissionDefinition {
|
|
86
|
+
return this.definition.submission;
|
|
87
|
+
}
|
|
130
88
|
|
|
131
89
|
// RootNode
|
|
132
|
-
override readonly parent = null;
|
|
133
|
-
|
|
134
90
|
readonly languages: FormLanguages;
|
|
135
91
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
constructor(xformDOM: XFormDOM, definition: RootDefinition, engineConfig: InstanceConfig) {
|
|
142
|
-
const reference = definition.nodeset;
|
|
92
|
+
constructor(parent: PrimaryInstance) {
|
|
93
|
+
const { definition } = parent;
|
|
94
|
+
const { nodeset: reference } = definition;
|
|
95
|
+
const computeReference: Accessor<string> = () => reference;
|
|
143
96
|
|
|
144
|
-
super(
|
|
145
|
-
computeReference
|
|
97
|
+
super(parent, definition, {
|
|
98
|
+
computeReference,
|
|
146
99
|
});
|
|
147
100
|
|
|
148
|
-
this.classes =
|
|
101
|
+
this.classes = parent.classes;
|
|
149
102
|
|
|
150
103
|
const childrenState = createChildrenState<Root, GeneralChildNode>(this);
|
|
151
104
|
|
|
152
105
|
this.childrenState = childrenState;
|
|
106
|
+
this.languages = parent.languages;
|
|
153
107
|
|
|
154
|
-
const instanceDOM = xformDOM.createInstance();
|
|
155
|
-
const evaluator = instanceDOM.primaryInstanceEvaluator;
|
|
156
|
-
const { translations } = evaluator;
|
|
157
|
-
const { defaultLanguage, languages } = getInitialLanguageState(translations);
|
|
158
108
|
const sharedStateOptions = {
|
|
159
109
|
clientStateFactory: this.engineConfig.stateFactory,
|
|
160
110
|
};
|
|
@@ -162,13 +112,13 @@ export class Root
|
|
|
162
112
|
const state = createSharedNodeState(
|
|
163
113
|
this.scope,
|
|
164
114
|
{
|
|
165
|
-
activeLanguage:
|
|
166
|
-
reference,
|
|
115
|
+
activeLanguage: parent.getActiveLanguage,
|
|
116
|
+
reference: computeReference,
|
|
167
117
|
label: null,
|
|
168
118
|
hint: null,
|
|
169
|
-
readonly: false,
|
|
170
|
-
relevant: true,
|
|
171
|
-
required: false,
|
|
119
|
+
readonly: () => false,
|
|
120
|
+
relevant: () => true,
|
|
121
|
+
required: () => false,
|
|
172
122
|
valueOptions: null,
|
|
173
123
|
value: null,
|
|
174
124
|
children: childrenState.childIds,
|
|
@@ -184,17 +134,9 @@ export class Root
|
|
|
184
134
|
childrenState
|
|
185
135
|
);
|
|
186
136
|
|
|
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
137
|
childrenState.setChildren(buildChildren(this));
|
|
197
138
|
this.validationState = createAggregatedViolations(this, sharedStateOptions);
|
|
139
|
+
this.submissionState = createParentNodeSubmissionState(this);
|
|
198
140
|
}
|
|
199
141
|
|
|
200
142
|
getChildren(): readonly GeneralChildNode[] {
|
|
@@ -203,24 +145,14 @@ export class Root
|
|
|
203
145
|
|
|
204
146
|
// RootNode
|
|
205
147
|
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);
|
|
148
|
+
this.rootDocument.setLanguage(language);
|
|
216
149
|
|
|
217
150
|
return this;
|
|
218
151
|
}
|
|
219
152
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
this.engineState.activeLanguage;
|
|
153
|
+
prepareSubmission<ChunkedType extends SubmissionChunkedType = 'monolithic'>(
|
|
154
|
+
options?: SubmissionOptions<ChunkedType>
|
|
155
|
+
): Promise<SubmissionResult<ChunkedType>> {
|
|
156
|
+
return this.rootDocument.prepareSubmission(options);
|
|
225
157
|
}
|
|
226
158
|
}
|