@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
|
@@ -1,18 +1,23 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import {
|
|
3
|
-
import type {
|
|
4
|
-
import {
|
|
5
|
-
import { RepeatElementDefinition } from './RepeatElementDefinition.ts';
|
|
6
|
-
import { UnsupportedBodyElementDefinition } from './UnsupportedBodyElementDefinition.ts';
|
|
1
|
+
import type { ParsedTokenList } from '../../lib/TokenListParser.ts';
|
|
2
|
+
import { TokenListParser } from '../../lib/TokenListParser.ts';
|
|
3
|
+
import type { XFormDefinition } from '../../parse/XFormDefinition.ts';
|
|
4
|
+
import { DependencyContext } from '../expression/abstract/DependencyContext.ts';
|
|
7
5
|
import { ControlDefinition } from './control/ControlDefinition.ts';
|
|
8
|
-
import {
|
|
6
|
+
import { InputControlDefinition } from './control/InputControlDefinition.ts';
|
|
7
|
+
import { RangeControlDefinition } from './control/RangeControlDefinition.ts';
|
|
8
|
+
import { RankControlDefinition } from './control/RankControlDefinition.ts';
|
|
9
9
|
import type { AnySelectDefinition } from './control/select/SelectDefinition.ts';
|
|
10
10
|
import { SelectDefinition } from './control/select/SelectDefinition.ts';
|
|
11
|
+
import { TriggerControlDefinition } from './control/TriggerControlDefinition.ts';
|
|
12
|
+
import { UploadControlDefinition } from './control/UploadControlDefinition.ts';
|
|
11
13
|
import { LogicalGroupDefinition } from './group/LogicalGroupDefinition.ts';
|
|
12
14
|
import { PresentationGroupDefinition } from './group/PresentationGroupDefinition.ts';
|
|
13
15
|
import { StructuralGroupDefinition } from './group/StructuralGroupDefinition.ts';
|
|
16
|
+
import { RepeatElementDefinition } from './RepeatElementDefinition.ts';
|
|
17
|
+
import { UnsupportedBodyElementDefinition } from './UnsupportedBodyElementDefinition.ts';
|
|
14
18
|
|
|
15
19
|
export interface BodyElementParentContext {
|
|
20
|
+
readonly body: BodyDefinition;
|
|
16
21
|
readonly reference: string | null;
|
|
17
22
|
readonly element: Element;
|
|
18
23
|
}
|
|
@@ -20,7 +25,11 @@ export interface BodyElementParentContext {
|
|
|
20
25
|
// prettier-ignore
|
|
21
26
|
export type ControlElementDefinition =
|
|
22
27
|
| AnySelectDefinition
|
|
23
|
-
|
|
|
28
|
+
| InputControlDefinition
|
|
29
|
+
| RangeControlDefinition
|
|
30
|
+
| RankControlDefinition
|
|
31
|
+
| TriggerControlDefinition
|
|
32
|
+
| UploadControlDefinition;
|
|
24
33
|
|
|
25
34
|
type SupportedBodyElementDefinition =
|
|
26
35
|
// eslint-disable-next-line @typescript-eslint/sort-type-constituents
|
|
@@ -38,8 +47,12 @@ const BodyElementDefinitionConstructors = [
|
|
|
38
47
|
LogicalGroupDefinition,
|
|
39
48
|
PresentationGroupDefinition,
|
|
40
49
|
StructuralGroupDefinition,
|
|
41
|
-
|
|
50
|
+
InputControlDefinition,
|
|
42
51
|
SelectDefinition,
|
|
52
|
+
RangeControlDefinition,
|
|
53
|
+
RankControlDefinition,
|
|
54
|
+
TriggerControlDefinition,
|
|
55
|
+
UploadControlDefinition,
|
|
43
56
|
] as const satisfies readonly BodyElementDefinitionConstructor[];
|
|
44
57
|
|
|
45
58
|
export type AnyBodyElementDefinition =
|
|
@@ -145,25 +158,8 @@ const bodyClassParser = new TokenListParser(['pages' /*, 'theme-grid' */]);
|
|
|
145
158
|
|
|
146
159
|
export type BodyClassList = ParsedTokenList<typeof bodyClassParser>;
|
|
147
160
|
|
|
148
|
-
export class BodyDefinition extends DependencyContext {
|
|
149
|
-
|
|
150
|
-
form: XFormDefinition,
|
|
151
|
-
parent: BodyElementParentContext,
|
|
152
|
-
parentElement: Element,
|
|
153
|
-
children: readonly Element[] = Array.from(parentElement.children)
|
|
154
|
-
): readonly AnyBodyElementDefinition[] {
|
|
155
|
-
return Array.from(children).map((element) => {
|
|
156
|
-
const { localName } = element;
|
|
157
|
-
|
|
158
|
-
for (const Constructor of BodyElementDefinitionConstructors) {
|
|
159
|
-
if (Constructor.isCompatible(localName, element)) {
|
|
160
|
-
return new Constructor(form, parent, element);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
return new UnsupportedBodyElementDefinition(form, parent, element);
|
|
165
|
-
});
|
|
166
|
-
}
|
|
161
|
+
export class BodyDefinition extends DependencyContext implements BodyElementParentContext {
|
|
162
|
+
readonly body: BodyDefinition;
|
|
167
163
|
|
|
168
164
|
readonly element: Element;
|
|
169
165
|
|
|
@@ -196,12 +192,14 @@ export class BodyDefinition extends DependencyContext {
|
|
|
196
192
|
constructor(protected readonly form: XFormDefinition) {
|
|
197
193
|
super();
|
|
198
194
|
|
|
195
|
+
this.body = this;
|
|
196
|
+
|
|
199
197
|
const { body: element } = form.xformDOM;
|
|
200
198
|
|
|
201
199
|
this.reference = form.rootReference;
|
|
202
200
|
this.element = element;
|
|
203
201
|
this.classes = bodyClassParser.parseFrom(element, 'class');
|
|
204
|
-
this.elements =
|
|
202
|
+
this.elements = this.getChildElementDefinitions(form, this, element);
|
|
205
203
|
this.elementsByReference = new BodyElementMap(this.elements);
|
|
206
204
|
}
|
|
207
205
|
|
|
@@ -209,6 +207,25 @@ export class BodyDefinition extends DependencyContext {
|
|
|
209
207
|
return this.elementsByReference.get(reference) ?? null;
|
|
210
208
|
}
|
|
211
209
|
|
|
210
|
+
getChildElementDefinitions(
|
|
211
|
+
form: XFormDefinition,
|
|
212
|
+
parent: BodyElementParentContext,
|
|
213
|
+
parentElement: Element,
|
|
214
|
+
children: readonly Element[] = Array.from(parentElement.children)
|
|
215
|
+
): readonly AnyBodyElementDefinition[] {
|
|
216
|
+
return Array.from(children).map((element) => {
|
|
217
|
+
const { localName } = element;
|
|
218
|
+
|
|
219
|
+
for (const Constructor of BodyElementDefinitionConstructors) {
|
|
220
|
+
if (Constructor.isCompatible(localName, element)) {
|
|
221
|
+
return new Constructor(form, parent, element);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
return new UnsupportedBodyElementDefinition(form, parent, element);
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
|
|
212
229
|
toJSON() {
|
|
213
230
|
const { form, ...rest } = this;
|
|
214
231
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { DependencyContext } from '../expression/abstract/DependencyContext.ts';
|
|
2
|
+
import type { HintDefinition } from '../text/HintDefinition.ts';
|
|
3
|
+
import type { ItemLabelDefinition } from '../text/ItemLabelDefinition.ts';
|
|
4
|
+
import type { LabelDefinition } from '../text/LabelDefinition.ts';
|
|
1
5
|
import type { XFormDefinition } from '../XFormDefinition.ts';
|
|
2
|
-
import {
|
|
3
|
-
import type { HintDefinition } from '../parse/text/HintDefinition.ts';
|
|
4
|
-
import type { ItemLabelDefinition } from '../parse/text/ItemLabelDefinition.ts';
|
|
5
|
-
import type { LabelDefinition } from '../parse/text/LabelDefinition.ts';
|
|
6
|
-
import type { BodyElementParentContext } from './BodyDefinition.ts';
|
|
6
|
+
import type { BodyDefinition, BodyElementParentContext } from './BodyDefinition.ts';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* These category names roughly correspond to each of the ODK XForms spec's
|
|
@@ -12,7 +12,10 @@ import type { BodyElementParentContext } from './BodyDefinition.ts';
|
|
|
12
12
|
*/
|
|
13
13
|
type BodyElementCategory = 'control' | 'structure' | 'support' | 'UNSUPPORTED';
|
|
14
14
|
|
|
15
|
-
export abstract class BodyElementDefinition<Type extends string>
|
|
15
|
+
export abstract class BodyElementDefinition<Type extends string>
|
|
16
|
+
extends DependencyContext
|
|
17
|
+
implements BodyElementParentContext
|
|
18
|
+
{
|
|
16
19
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
17
20
|
// @ts-ignore
|
|
18
21
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -20,6 +23,8 @@ export abstract class BodyElementDefinition<Type extends string> extends Depende
|
|
|
20
23
|
throw new Error('Must be overridden by BodyElementDefinition subclass');
|
|
21
24
|
}
|
|
22
25
|
|
|
26
|
+
readonly body: BodyDefinition;
|
|
27
|
+
|
|
23
28
|
abstract readonly category: BodyElementCategory;
|
|
24
29
|
abstract readonly type: Type;
|
|
25
30
|
readonly hint: HintDefinition | null = null;
|
|
@@ -34,6 +39,7 @@ export abstract class BodyElementDefinition<Type extends string> extends Depende
|
|
|
34
39
|
readonly element: Element
|
|
35
40
|
) {
|
|
36
41
|
super();
|
|
42
|
+
this.body = parent.body;
|
|
37
43
|
this.parentReference = parent.reference;
|
|
38
44
|
}
|
|
39
45
|
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { JAVAROSA_NAMESPACE_URI } from '@getodk/common/constants/xmlns.ts';
|
|
2
2
|
import type { XFormDefinition } from '../XFormDefinition.ts';
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
import type {
|
|
4
|
+
BodyElementDefinitionArray,
|
|
5
|
+
BodyElementParentContext,
|
|
6
|
+
} from '../body/BodyDefinition.ts';
|
|
7
|
+
import { LabelDefinition } from '../text/LabelDefinition.ts';
|
|
8
|
+
import { parseNodesetReference } from '../xpath/reference-parsing.ts';
|
|
7
9
|
import { BodyElementDefinition } from './BodyElementDefinition.ts';
|
|
8
10
|
import type { StructureElementAppearanceDefinition } from './appearance/structureElementAppearanceParser.ts';
|
|
9
11
|
import { structureElementAppearanceParser } from './appearance/structureElementAppearanceParser.ts';
|
|
@@ -45,7 +47,7 @@ export class RepeatElementDefinition extends BodyElementDefinition<'repeat'> {
|
|
|
45
47
|
|
|
46
48
|
return localName !== 'label' && localName !== 'group-label';
|
|
47
49
|
});
|
|
48
|
-
const children =
|
|
50
|
+
const children = this.body.getChildElementDefinitions(form, this, element, childElements);
|
|
49
51
|
|
|
50
52
|
this.children = children;
|
|
51
53
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { TokenListParser, type ParsedTokenList } from '
|
|
1
|
+
import { TokenListParser, type ParsedTokenList } from '../../../lib/TokenListParser.ts';
|
|
2
2
|
|
|
3
3
|
export const inputAppearanceParser = new TokenListParser([
|
|
4
4
|
'multiline',
|
|
5
5
|
'numbers',
|
|
6
6
|
'url',
|
|
7
|
-
'
|
|
7
|
+
'thousands-sep',
|
|
8
8
|
|
|
9
9
|
// date (TODO: data types)
|
|
10
10
|
'no-calendar',
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TokenListParser, type ParsedTokenList } from '
|
|
1
|
+
import { TokenListParser, type ParsedTokenList } from '../../../lib/TokenListParser.ts';
|
|
2
2
|
|
|
3
3
|
export const structureElementAppearanceParser = new TokenListParser(['field-list', 'table-list']);
|
|
4
4
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import type { ParsedTokenList } from '../../../lib/TokenListParser.ts';
|
|
2
|
+
import { HintDefinition } from '../../text/HintDefinition.ts';
|
|
3
|
+
import { LabelDefinition } from '../../text/LabelDefinition.ts';
|
|
1
4
|
import type { XFormDefinition } from '../../XFormDefinition.ts';
|
|
2
|
-
import
|
|
3
|
-
import { HintDefinition } from '../../parse/text/HintDefinition.ts';
|
|
4
|
-
import { LabelDefinition } from '../../parse/text/LabelDefinition.ts';
|
|
5
|
-
import { parseNodesetReference } from '../../parse/xpath/reference-parsing.ts';
|
|
5
|
+
import { parseNodesetReference } from '../../xpath/reference-parsing.ts';
|
|
6
6
|
import type { BodyElementParentContext } from '../BodyDefinition.ts';
|
|
7
7
|
import { BodyElementDefinition } from '../BodyElementDefinition.ts';
|
|
8
8
|
|
package/src/{body/control/InputDefinition.ts → parse/body/control/InputControlDefinition.ts}
RENAMED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import type { XFormDefinition } from '../../XFormDefinition.ts';
|
|
2
|
+
import type { InputAppearanceDefinition } from '../appearance/inputAppearanceParser.ts';
|
|
3
|
+
import { inputAppearanceParser } from '../appearance/inputAppearanceParser.ts';
|
|
2
4
|
import type { BodyElementParentContext } from '../BodyDefinition.ts';
|
|
3
|
-
import {
|
|
4
|
-
inputAppearanceParser,
|
|
5
|
-
type InputAppearanceDefinition,
|
|
6
|
-
} from '../appearance/inputAppearanceParser.ts';
|
|
7
5
|
import { ControlDefinition } from './ControlDefinition.ts';
|
|
8
6
|
|
|
9
|
-
export class
|
|
7
|
+
export class InputControlDefinition extends ControlDefinition<'input'> {
|
|
10
8
|
static override isCompatible(localName: string): boolean {
|
|
11
9
|
return localName === 'input';
|
|
12
10
|
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { XFormDefinition } from '../../XFormDefinition.ts';
|
|
2
|
+
import {
|
|
3
|
+
unknownAppearanceParser,
|
|
4
|
+
type UnknownAppearanceDefinition,
|
|
5
|
+
} from '../appearance/unknownAppearanceParser.ts';
|
|
6
|
+
import type { BodyElementParentContext } from '../BodyDefinition.ts';
|
|
7
|
+
import { ControlDefinition } from './ControlDefinition.ts';
|
|
8
|
+
|
|
9
|
+
export class RangeControlDefinition extends ControlDefinition<'range'> {
|
|
10
|
+
static override isCompatible(localName: string): boolean {
|
|
11
|
+
return localName === 'range';
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
readonly type = 'range';
|
|
15
|
+
readonly appearances: UnknownAppearanceDefinition;
|
|
16
|
+
|
|
17
|
+
constructor(form: XFormDefinition, parent: BodyElementParentContext, element: Element) {
|
|
18
|
+
super(form, parent, element);
|
|
19
|
+
|
|
20
|
+
this.appearances = unknownAppearanceParser.parseFrom(element, 'appearance');
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
override toJSON(): object {
|
|
24
|
+
return {};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { ODK_NAMESPACE_URI } from '@getodk/common/constants/xmlns.ts';
|
|
2
|
+
import type { XFormDefinition } from '../../XFormDefinition.ts';
|
|
3
|
+
import {
|
|
4
|
+
unknownAppearanceParser,
|
|
5
|
+
type UnknownAppearanceDefinition,
|
|
6
|
+
} from '../appearance/unknownAppearanceParser.ts';
|
|
7
|
+
import type { BodyElementParentContext } from '../BodyDefinition.ts';
|
|
8
|
+
import { ControlDefinition } from './ControlDefinition.ts';
|
|
9
|
+
|
|
10
|
+
export class RankControlDefinition extends ControlDefinition<'rank'> {
|
|
11
|
+
static override isCompatible(localName: string, element: Element): boolean {
|
|
12
|
+
return localName === 'rank' && element.namespaceURI === ODK_NAMESPACE_URI;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
readonly type = 'rank';
|
|
16
|
+
readonly appearances: UnknownAppearanceDefinition;
|
|
17
|
+
|
|
18
|
+
constructor(form: XFormDefinition, parent: BodyElementParentContext, element: Element) {
|
|
19
|
+
super(form, parent, element);
|
|
20
|
+
|
|
21
|
+
this.appearances = unknownAppearanceParser.parseFrom(element, 'appearance');
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
override toJSON(): object {
|
|
25
|
+
return {};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { XFormDefinition } from '../../XFormDefinition.ts';
|
|
2
|
+
import {
|
|
3
|
+
unknownAppearanceParser,
|
|
4
|
+
type UnknownAppearanceDefinition,
|
|
5
|
+
} from '../appearance/unknownAppearanceParser.ts';
|
|
6
|
+
import type { BodyElementParentContext } from '../BodyDefinition.ts';
|
|
7
|
+
import { ControlDefinition } from './ControlDefinition.ts';
|
|
8
|
+
|
|
9
|
+
export class TriggerControlDefinition extends ControlDefinition<'trigger'> {
|
|
10
|
+
static override isCompatible(localName: string): boolean {
|
|
11
|
+
return localName === 'trigger';
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
readonly type = 'trigger';
|
|
15
|
+
readonly appearances: UnknownAppearanceDefinition;
|
|
16
|
+
|
|
17
|
+
constructor(form: XFormDefinition, parent: BodyElementParentContext, element: Element) {
|
|
18
|
+
super(form, parent, element);
|
|
19
|
+
|
|
20
|
+
this.appearances = unknownAppearanceParser.parseFrom(element, 'appearance');
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
override toJSON(): object {
|
|
24
|
+
return {};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { XFormDefinition } from '../../XFormDefinition.ts';
|
|
2
|
+
import {
|
|
3
|
+
unknownAppearanceParser,
|
|
4
|
+
type UnknownAppearanceDefinition,
|
|
5
|
+
} from '../appearance/unknownAppearanceParser.ts';
|
|
6
|
+
import type { BodyElementParentContext } from '../BodyDefinition.ts';
|
|
7
|
+
import { ControlDefinition } from './ControlDefinition.ts';
|
|
8
|
+
|
|
9
|
+
export class UploadControlDefinition extends ControlDefinition<'upload'> {
|
|
10
|
+
static override isCompatible(localName: string): boolean {
|
|
11
|
+
return localName === 'upload';
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
readonly type = 'upload';
|
|
15
|
+
readonly appearances: UnknownAppearanceDefinition;
|
|
16
|
+
|
|
17
|
+
constructor(form: XFormDefinition, parent: BodyElementParentContext, element: Element) {
|
|
18
|
+
super(form, parent, element);
|
|
19
|
+
|
|
20
|
+
this.appearances = unknownAppearanceParser.parseFrom(element, 'appearance');
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
override toJSON(): object {
|
|
24
|
+
return {};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { getValueElement, type ItemElement } from '
|
|
2
|
-
import { ItemLabelDefinition } from '../../../
|
|
1
|
+
import { getValueElement, type ItemElement } from '../../../../lib/dom/query.ts';
|
|
2
|
+
import { ItemLabelDefinition } from '../../../text/ItemLabelDefinition.ts';
|
|
3
3
|
import type { XFormDefinition } from '../../../XFormDefinition.ts';
|
|
4
4
|
import { BodyElementDefinition } from '../../BodyElementDefinition.ts';
|
|
5
5
|
import type { AnySelectDefinition } from './SelectDefinition.ts';
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
import { getValueElement, type ItemsetElement } from '../../../../lib/dom/query.ts';
|
|
2
|
+
import { ItemsetNodesetExpression } from '../../../expression/ItemsetNodesetExpression.ts';
|
|
3
|
+
import { ItemsetValueExpression } from '../../../expression/ItemsetValueExpression.ts';
|
|
4
|
+
import { ItemsetLabelDefinition } from '../../../text/ItemsetLabelDefinition.ts';
|
|
1
5
|
import type { XFormDefinition } from '../../../XFormDefinition.ts';
|
|
2
|
-
import {
|
|
3
|
-
import { ItemsetLabelDefinition } from '../../../parse/text/ItemsetLabelDefinition.ts';
|
|
4
|
-
import { parseNodesetReference } from '../../../parse/xpath/reference-parsing.ts';
|
|
6
|
+
import { parseNodesetReference } from '../../../xpath/reference-parsing.ts';
|
|
5
7
|
import { BodyElementDefinition } from '../../BodyElementDefinition.ts';
|
|
6
|
-
import { ItemsetNodesetExpression } from './ItemsetNodesetExpression.ts';
|
|
7
|
-
import { ItemsetValueExpression } from './ItemsetValueExpression.ts';
|
|
8
8
|
import type { AnySelectDefinition } from './SelectDefinition.ts';
|
|
9
9
|
|
|
10
10
|
export class ItemsetDefinition extends BodyElementDefinition<'itemset'> {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { DependencyContext } from '../../../expression/DependencyContext.ts';
|
|
2
|
-
import type { AnyDependentExpression } from '../../../expression/DependentExpression.ts';
|
|
1
|
+
import { DependencyContext } from '../../../expression/abstract/DependencyContext.ts';
|
|
3
2
|
import type { ItemsetDefinition } from './ItemsetDefinition.ts';
|
|
4
3
|
|
|
5
4
|
export class ItemsetNodesetContext extends DependencyContext {
|
|
@@ -19,8 +18,4 @@ export class ItemsetNodesetContext extends DependencyContext {
|
|
|
19
18
|
super.isTranslated = value;
|
|
20
19
|
this.itemset.isTranslated = value;
|
|
21
20
|
}
|
|
22
|
-
|
|
23
|
-
override registerDependentExpression(expression: AnyDependentExpression): void {
|
|
24
|
-
this.itemset.registerDependentExpression(expression);
|
|
25
|
-
}
|
|
26
21
|
}
|
|
@@ -1,23 +1,15 @@
|
|
|
1
1
|
import type { CollectionValues } from '@getodk/common/types/collections/CollectionValues.ts';
|
|
2
2
|
import type { LocalNamedElement } from '@getodk/common/types/dom.ts';
|
|
3
|
+
import { getItemElements, getItemsetElement } from '../../../../lib/dom/query.ts';
|
|
3
4
|
import type { XFormDefinition } from '../../../XFormDefinition.ts';
|
|
4
|
-
import { getItemElements, getItemsetElement } from '../../../lib/dom/query.ts';
|
|
5
|
-
import type { AnyBodyElementDefinition, BodyElementParentContext } from '../../BodyDefinition.ts';
|
|
6
5
|
import type { SelectAppearanceDefinition } from '../../appearance/selectAppearanceParser.ts';
|
|
7
6
|
import { selectAppearanceParser } from '../../appearance/selectAppearanceParser.ts';
|
|
7
|
+
import type { AnyBodyElementDefinition, BodyElementParentContext } from '../../BodyDefinition.ts';
|
|
8
8
|
import { ControlDefinition } from '../ControlDefinition.ts';
|
|
9
9
|
import { ItemDefinition } from './ItemDefinition.ts';
|
|
10
10
|
import { ItemsetDefinition } from './ItemsetDefinition.ts';
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
* @todo We were previously a bit overzealous about introducing `<rank>` support
|
|
14
|
-
* here. It'll likely still fit, but we should approach it with more intention.
|
|
15
|
-
*
|
|
16
|
-
* @todo `<trigger>` is *almost* reasonable to support here too. The main
|
|
17
|
-
* hesitation is that its single, implicit "item" does not have a distinct
|
|
18
|
-
* <label>, and presumably has different UX **and translation** considerations.
|
|
19
|
-
*/
|
|
20
|
-
const selectLocalNames = new Set([/* 'rank', */ 'select', 'select1'] as const);
|
|
12
|
+
const selectLocalNames = new Set(['select', 'select1'] as const);
|
|
21
13
|
|
|
22
14
|
export type SelectType = CollectionValues<typeof selectLocalNames>;
|
|
23
15
|
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import { UpsertableMap } from '@getodk/common/lib/collections/UpsertableMap.ts';
|
|
2
|
+
import { getLabelElement } from '../../../lib/dom/query.ts';
|
|
3
|
+
import { LabelDefinition } from '../../text/LabelDefinition.ts';
|
|
2
4
|
import type { XFormDefinition } from '../../XFormDefinition.ts';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
5
|
+
import { parseNodesetReference } from '../../xpath/reference-parsing.ts';
|
|
6
|
+
import type { StructureElementAppearanceDefinition } from '../appearance/structureElementAppearanceParser.ts';
|
|
7
|
+
import { structureElementAppearanceParser } from '../appearance/structureElementAppearanceParser.ts';
|
|
6
8
|
import {
|
|
7
|
-
BodyDefinition,
|
|
8
9
|
type BodyElementDefinitionArray,
|
|
9
10
|
type BodyElementParentContext,
|
|
10
11
|
} from '../BodyDefinition.ts';
|
|
11
12
|
import { BodyElementDefinition } from '../BodyElementDefinition.ts';
|
|
12
|
-
import type { StructureElementAppearanceDefinition } from '../appearance/structureElementAppearanceParser.ts';
|
|
13
|
-
import { structureElementAppearanceParser } from '../appearance/structureElementAppearanceParser.ts';
|
|
14
13
|
|
|
15
14
|
/**
|
|
16
15
|
* These type names are derived from **and expand upon** the language used in
|
|
@@ -73,28 +72,18 @@ export abstract class BaseGroupDefinition<
|
|
|
73
72
|
readonly appearances: StructureElementAppearanceDefinition;
|
|
74
73
|
override readonly label: LabelDefinition | null;
|
|
75
74
|
|
|
76
|
-
constructor(
|
|
77
|
-
form: XFormDefinition,
|
|
78
|
-
parent: BodyElementParentContext,
|
|
79
|
-
element: Element,
|
|
80
|
-
children?: BodyElementDefinitionArray
|
|
81
|
-
) {
|
|
75
|
+
constructor(form: XFormDefinition, parent: BodyElementParentContext, element: Element) {
|
|
82
76
|
super(form, parent, element);
|
|
83
77
|
|
|
84
|
-
|
|
85
|
-
this.reference = parseNodesetReference(parent, element, 'ref');
|
|
86
|
-
this.appearances = structureElementAppearanceParser.parseFrom(element, 'appearance');
|
|
87
|
-
this.label = LabelDefinition.forGroup(form, this);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
getChildren(element: Element): BodyElementDefinitionArray {
|
|
91
|
-
const { form } = this;
|
|
92
|
-
const children = Array.from(element.children).filter((child) => {
|
|
78
|
+
const childElements = Array.from(element.children).filter((child) => {
|
|
93
79
|
const childName = child.localName;
|
|
94
80
|
|
|
95
81
|
return childName !== 'label';
|
|
96
82
|
});
|
|
97
83
|
|
|
98
|
-
|
|
84
|
+
this.children = this.body.getChildElementDefinitions(form, this, element, childElements);
|
|
85
|
+
this.reference = parseNodesetReference(parent, element, 'ref');
|
|
86
|
+
this.appearances = structureElementAppearanceParser.parseFrom(element, 'appearance');
|
|
87
|
+
this.label = LabelDefinition.forGroup(form, this);
|
|
99
88
|
}
|
|
100
89
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { LabelDefinition } from '../../text/LabelDefinition.ts';
|
|
1
2
|
import type { XFormDefinition } from '../../XFormDefinition.ts';
|
|
2
|
-
import { LabelDefinition } from '../../parse/text/LabelDefinition.ts';
|
|
3
3
|
import type { BodyElementParentContext } from '../BodyDefinition.ts';
|
|
4
4
|
import { BaseGroupDefinition } from './BaseGroupDefinition.ts';
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import type { BindDefinition } from '../model/BindDefinition.ts';
|
|
2
|
+
import { DependentExpression } from './abstract/DependentExpression.ts';
|
|
3
3
|
|
|
4
4
|
const defaultBindComputationExpressions = {
|
|
5
5
|
calculate: null,
|
|
@@ -16,8 +16,8 @@ export type BindComputationType = keyof DefaultBindComputationExpressions;
|
|
|
16
16
|
|
|
17
17
|
type BindComputationFactoryResult<Type extends BindComputationType> =
|
|
18
18
|
DefaultBindComputationExpressions[Type] extends null
|
|
19
|
-
?
|
|
20
|
-
:
|
|
19
|
+
? BindComputationExpression<Type> | null
|
|
20
|
+
: BindComputationExpression<Type>;
|
|
21
21
|
|
|
22
22
|
const bindComputationResultTypes = {
|
|
23
23
|
calculate: 'string',
|
|
@@ -33,10 +33,10 @@ type BindComputationResultTypes = typeof bindComputationResultTypes;
|
|
|
33
33
|
export type BindComputationResultType<Computation extends BindComputationType> =
|
|
34
34
|
BindComputationResultTypes[Computation];
|
|
35
35
|
|
|
36
|
-
export class
|
|
37
|
-
|
|
38
|
-
> {
|
|
39
|
-
static
|
|
36
|
+
export class BindComputationExpression<
|
|
37
|
+
Computation extends BindComputationType,
|
|
38
|
+
> extends DependentExpression<BindComputationResultType<Computation>> {
|
|
39
|
+
static forComputation<Type extends BindComputationType>(
|
|
40
40
|
bind: BindDefinition,
|
|
41
41
|
computation: Type
|
|
42
42
|
): BindComputationFactoryResult<Type> {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import type { ItemsetDefinition } from '../body/control/select/ItemsetDefinition.ts';
|
|
2
|
+
import { DependentExpression } from './abstract/DependentExpression.ts';
|
|
3
3
|
|
|
4
4
|
export class ItemsetNodesetExpression extends DependentExpression<'nodes'> {
|
|
5
5
|
constructor(itemset: ItemsetDefinition, nodesetExpression: string) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import type { ItemsetDefinition } from '../body/control/select/ItemsetDefinition.ts';
|
|
2
|
+
import { DependentExpression } from './abstract/DependentExpression.ts';
|
|
3
3
|
|
|
4
4
|
export class ItemsetValueExpression extends DependentExpression<'string'> {
|
|
5
5
|
constructor(
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { RepeatElementDefinition } from '../../body/RepeatElementDefinition.ts';
|
|
2
1
|
import type { RepeatRangeControlledNode } from '../../client/repeat/RepeatRangeControlledNode.ts';
|
|
3
|
-
import {
|
|
2
|
+
import { RepeatElementDefinition } from '../body/RepeatElementDefinition.ts';
|
|
4
3
|
import { isConstantTruthyExpression } from '../xpath/semantic-analysis.ts';
|
|
4
|
+
import { DependentExpression } from './abstract/DependentExpression.ts';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Represents either of these
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { AnyTextRangeDefinition } from '../text/abstract/TextRangeDefinition.ts';
|
|
2
|
+
import { TextChunkExpression } from './abstract/TextChunkExpression.ts';
|
|
3
|
+
|
|
4
|
+
export type TextLiteralSourceNode = Attr | Text;
|
|
5
|
+
|
|
6
|
+
export class TextLiteralExpression extends TextChunkExpression<'literal'> {
|
|
7
|
+
static from(context: AnyTextRangeDefinition, stringValue: string): TextLiteralExpression {
|
|
8
|
+
return new this(context, stringValue);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
readonly source = 'literal';
|
|
12
|
+
|
|
13
|
+
private constructor(
|
|
14
|
+
context: AnyTextRangeDefinition,
|
|
15
|
+
override readonly stringValue: string
|
|
16
|
+
) {
|
|
17
|
+
super(context, 'null');
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { KnownAttributeLocalNamedElement } from '@getodk/common/types/dom.ts';
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
2
|
+
import type { AnyTextRangeDefinition } from '../text/abstract/TextRangeDefinition.ts';
|
|
3
|
+
import { TextChunkExpression } from './abstract/TextChunkExpression.ts';
|
|
4
4
|
|
|
5
5
|
interface OutputElement extends KnownAttributeLocalNamedElement<'output', 'value'> {}
|
|
6
6
|
|
|
@@ -8,8 +8,8 @@ const isOutputElement = (element: Element): element is OutputElement => {
|
|
|
8
8
|
return element.localName === 'output' && element.hasAttribute('value');
|
|
9
9
|
};
|
|
10
10
|
|
|
11
|
-
export class
|
|
12
|
-
static from(context: AnyTextRangeDefinition, element: Element):
|
|
11
|
+
export class TextOutputExpression extends TextChunkExpression<'output'> {
|
|
12
|
+
static from(context: AnyTextRangeDefinition, element: Element): TextOutputExpression | null {
|
|
13
13
|
if (isOutputElement(element)) {
|
|
14
14
|
return new this(context, element);
|
|
15
15
|
}
|
package/src/parse/{text/ReferenceChunkDefinition.ts → expression/TextReferenceExpression.ts}
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import type { AnyTextRangeDefinition } from '../text/abstract/TextRangeDefinition.ts';
|
|
2
|
+
import { TextChunkExpression } from './abstract/TextChunkExpression.ts';
|
|
3
3
|
|
|
4
|
-
export class
|
|
5
|
-
static from(context: AnyTextRangeDefinition, refExpression: string):
|
|
4
|
+
export class TextReferenceExpression extends TextChunkExpression<'reference'> {
|
|
5
|
+
static from(context: AnyTextRangeDefinition, refExpression: string): TextReferenceExpression {
|
|
6
6
|
return new this(context, refExpression);
|
|
7
7
|
}
|
|
8
8
|
|