@getodk/xforms-engine 0.5.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/client/BaseNode.d.ts +8 -4
- package/dist/client/BaseValueNode.d.ts +8 -4
- package/dist/client/GroupNode.d.ts +1 -0
- package/dist/client/InputNode.d.ts +32 -3
- package/dist/client/ModelValueNode.d.ts +1 -0
- package/dist/client/NoteNode.d.ts +24 -7
- package/dist/client/RangeNode.d.ts +36 -0
- package/dist/client/RankNode.d.ts +46 -0
- package/dist/client/RootNode.d.ts +21 -14
- package/dist/client/SelectNode.d.ts +47 -25
- package/dist/client/SubtreeNode.d.ts +1 -0
- package/dist/client/TriggerNode.d.ts +10 -6
- package/dist/client/constants.d.ts +11 -12
- package/dist/client/form/CreateFormInstance.d.ts +14 -0
- package/dist/client/form/EditFormInstance.d.ts +62 -0
- package/dist/client/form/FormInstance.d.ts +104 -0
- package/dist/client/form/FormInstanceConfig.d.ts +17 -0
- package/dist/client/form/FormResource.d.ts +1 -0
- package/dist/client/form/LoadForm.d.ts +79 -0
- package/dist/client/form/LoadFormResult.d.ts +67 -0
- package/dist/client/form/RestoreFormInstance.d.ts +8 -0
- package/dist/client/hierarchy.d.ts +5 -5
- package/dist/client/index.d.ts +37 -11
- package/dist/client/node-types.d.ts +2 -2
- package/dist/client/repeat/BaseRepeatRangeNode.d.ts +3 -4
- package/dist/client/repeat/RepeatInstanceNode.d.ts +4 -5
- package/dist/client/repeat/RepeatRangeControlledNode.d.ts +2 -2
- package/dist/client/repeat/RepeatRangeUncontrolledNode.d.ts +2 -2
- package/dist/client/resources.d.ts +1 -1
- package/dist/client/serialization/InstanceData.d.ts +12 -0
- package/dist/client/serialization/InstanceFile.d.ts +6 -0
- package/dist/client/serialization/InstancePayload.d.ts +93 -0
- package/dist/client/serialization/InstancePayloadOptions.d.ts +23 -0
- package/dist/client/serialization/InstanceState.d.ts +12 -0
- package/dist/client/submission/{SubmissionDefinition.d.ts → SubmissionMeta.d.ts} +1 -1
- package/dist/client/unsupported/UnsupportedControlNode.d.ts +1 -3
- package/dist/entrypoints/FormInstance.d.ts +20 -0
- package/dist/entrypoints/FormResult/BaseFormResult.d.ts +22 -0
- package/dist/entrypoints/FormResult/BaseInstantiableFormResult.d.ts +25 -0
- package/dist/entrypoints/FormResult/FormFailureResult.d.ts +17 -0
- package/dist/entrypoints/FormResult/FormSuccessResult.d.ts +15 -0
- package/dist/entrypoints/FormResult/FormWarningResult.d.ts +15 -0
- package/dist/entrypoints/createInstance.d.ts +9 -0
- package/dist/entrypoints/editInstance.d.ts +9 -0
- package/dist/entrypoints/index.d.ts +4 -0
- package/dist/entrypoints/loadForm.d.ts +4 -0
- package/dist/entrypoints/restoreInstance.d.ts +9 -0
- package/dist/error/LoadFormFailureError.d.ts +9 -0
- package/dist/error/MalformedInstanceDataError.d.ts +3 -0
- package/dist/error/RankMissingValueError.d.ts +3 -0
- package/dist/error/RankValueTypeError.d.ts +6 -0
- package/dist/error/SelectValueTypeError.d.ts +15 -0
- package/dist/error/TemplatedNodeAttributeSerializationError.d.ts +22 -0
- package/dist/error/XFormsSpecViolationError.d.ts +2 -0
- package/dist/index.d.ts +2 -34
- package/dist/index.js +7274 -5840
- package/dist/index.js.map +1 -1
- package/dist/instance/Group.d.ts +7 -5
- package/dist/instance/InputControl.d.ts +9 -6
- package/dist/instance/ModelValue.d.ts +7 -4
- package/dist/instance/Note.d.ts +14 -25
- package/dist/instance/PrimaryInstance.d.ts +36 -8
- package/dist/instance/RangeControl.d.ts +35 -0
- package/dist/instance/RankControl.d.ts +41 -0
- package/dist/instance/Root.d.ts +8 -9
- package/dist/instance/SelectControl.d.ts +67 -0
- package/dist/instance/Subtree.d.ts +7 -5
- package/dist/instance/TriggerControl.d.ts +10 -22
- package/dist/instance/abstract/DescendantNode.d.ts +11 -3
- package/dist/instance/abstract/InstanceNode.d.ts +10 -5
- package/dist/instance/abstract/ValueNode.d.ts +7 -6
- package/dist/instance/children/DescendantNodeInitOptions.d.ts +32 -0
- package/dist/instance/{children.d.ts → children/buildChildren.d.ts} +1 -1
- package/dist/instance/children/childrenInitOptions.d.ts +9 -0
- package/dist/instance/children/normalizeChildInitOptions.d.ts +2 -0
- package/dist/instance/hierarchy.d.ts +9 -9
- package/dist/instance/input/InitialInstanceState.d.ts +13 -0
- package/dist/instance/input/InstanceAttachmentMap.d.ts +19 -0
- package/dist/instance/internal-api/InstanceConfig.d.ts +2 -9
- package/dist/instance/internal-api/InstanceValueContext.d.ts +10 -1
- package/dist/instance/internal-api/serialization/ClientReactiveSerializableInstance.d.ts +14 -0
- package/dist/instance/internal-api/serialization/ClientReactiveSerializableLeafNode.d.ts +32 -0
- package/dist/instance/internal-api/serialization/ClientReactiveSerializableParentNode.d.ts +18 -0
- package/dist/instance/internal-api/serialization/ClientReactiveSerializableTemplatedNode.d.ts +13 -0
- package/dist/instance/internal-api/serialization/ClientReactiveSerializableValueNode.d.ts +21 -0
- package/dist/instance/repeat/BaseRepeatRange.d.ts +11 -8
- package/dist/instance/repeat/RepeatInstance.d.ts +11 -7
- package/dist/instance/repeat/RepeatRangeControlled.d.ts +27 -3
- package/dist/instance/repeat/RepeatRangeUncontrolled.d.ts +4 -3
- package/dist/instance/resource.d.ts +5 -1
- package/dist/instance/unsupported/UploadControl.d.ts +32 -4
- package/dist/integration/xpath/EngineXPathEvaluator.d.ts +2 -2
- package/dist/integration/xpath/adapter/kind.d.ts +4 -10
- package/dist/integration/xpath/adapter/names.d.ts +1 -11
- package/dist/integration/xpath/adapter/traversal.d.ts +10 -9
- package/dist/integration/xpath/static-dom/StaticAttribute.d.ts +10 -4
- package/dist/integration/xpath/static-dom/StaticDocument.d.ts +13 -11
- package/dist/integration/xpath/static-dom/StaticElement.d.ts +25 -18
- package/dist/integration/xpath/static-dom/StaticNode.d.ts +1 -1
- package/dist/integration/xpath/static-dom/StaticParentNode.d.ts +13 -0
- package/dist/integration/xpath/static-dom/staticNodeName.d.ts +3 -0
- package/dist/lib/client-reactivity/instance-state/createNodeRangeInstanceState.d.ts +4 -0
- package/dist/lib/client-reactivity/instance-state/createParentNodeInstanceState.d.ts +4 -0
- package/dist/lib/client-reactivity/instance-state/createPrimaryInstanceState.d.ts +3 -0
- package/dist/lib/client-reactivity/instance-state/createRootInstanceState.d.ts +3 -0
- package/dist/lib/client-reactivity/instance-state/createTemplatedNodeInstanceState.d.ts +6 -0
- package/dist/lib/client-reactivity/instance-state/createValueNodeInstanceState.d.ts +3 -0
- package/dist/lib/client-reactivity/instance-state/prepareInstancePayload.d.ts +8 -0
- package/dist/lib/codecs/Geopoint/Geopoint.d.ts +48 -0
- package/dist/lib/codecs/Geopoint/GeopointValueCodec.d.ts +5 -0
- package/dist/lib/codecs/NoteCodec.d.ts +8 -0
- package/dist/lib/codecs/RangeCodec.d.ts +8 -0
- package/dist/lib/codecs/TempUnsupportedControlCodec.d.ts +7 -0
- package/dist/lib/codecs/TriggerCodec.d.ts +7 -0
- package/dist/lib/codecs/ValueArrayCodec.d.ts +11 -0
- package/dist/lib/codecs/ValueCodec.d.ts +2 -2
- package/dist/lib/codecs/getNoteCodec.d.ts +3 -0
- package/dist/lib/codecs/getSelectCodec.d.ts +5 -0
- package/dist/lib/codecs/getSharedValueCodec.d.ts +3 -2
- package/dist/lib/codecs/items/BaseItemCodec.d.ts +9 -0
- package/dist/lib/codecs/items/MultipleValueItemCodec.d.ts +14 -0
- package/dist/lib/codecs/items/SingleValueItemCodec.d.ts +24 -0
- package/dist/lib/dom/query.d.ts +1 -2
- package/dist/lib/names/NamespaceDeclaration.d.ts +45 -0
- package/dist/lib/names/NamespaceDeclarationMap.d.ts +137 -0
- package/dist/lib/names/NamespaceURL.d.ts +30 -0
- package/dist/lib/names/QualifiedName.d.ts +113 -0
- package/dist/lib/names/UnprefixedXFormsName.d.ts +4 -0
- package/dist/lib/number-parsers.d.ts +2 -0
- package/dist/lib/reactivity/createInstanceValueState.d.ts +2 -27
- package/dist/lib/reactivity/createItemCollection.d.ts +21 -0
- package/dist/lib/xml-serialization.d.ts +11 -2
- package/dist/parse/XFormDOM.d.ts +1 -1
- package/dist/parse/body/BodyDefinition.d.ts +2 -2
- package/dist/parse/body/appearance/rangeAppearanceParser.d.ts +3 -0
- package/dist/parse/body/control/InputControlDefinition.d.ts +3 -0
- package/dist/parse/body/control/ItemDefinition.d.ts +14 -0
- package/dist/parse/body/control/ItemsetDefinition.d.ts +18 -0
- package/dist/parse/body/control/RangeControlDefinition.d.ts +31 -2
- package/dist/parse/body/control/RankControlDefinition.d.ts +7 -3
- package/dist/parse/body/control/{select/SelectDefinition.d.ts → SelectControlDefinition.d.ts} +9 -9
- package/dist/parse/expression/ItemsetNodesetExpression.d.ts +1 -1
- package/dist/parse/expression/ItemsetValueExpression.d.ts +1 -1
- package/dist/parse/model/BindDefinition.d.ts +3 -1
- package/dist/parse/model/BindPreloadDefinition.d.ts +42 -0
- package/dist/parse/model/DescendentNodeDefinition.d.ts +4 -13
- package/dist/parse/model/ItextTranslationsDefinition.d.ts +18 -0
- package/dist/parse/model/LeafNodeDefinition.d.ts +9 -7
- package/dist/parse/model/ModelDefinition.d.ts +9 -2
- package/dist/parse/model/NodeDefinition.d.ts +30 -45
- package/dist/parse/model/NoteNodeDefinition.d.ts +7 -5
- package/dist/parse/model/RangeNodeDefinition.d.ts +42 -0
- package/dist/parse/model/RepeatDefinition.d.ts +62 -0
- package/dist/parse/model/RootAttributeDefinition.d.ts +21 -0
- package/dist/parse/model/RootAttributeMap.d.ts +24 -0
- package/dist/parse/model/RootDefinition.d.ts +15 -14
- package/dist/parse/model/SecondaryInstance/SecondaryInstancesDefinition.d.ts +15 -2
- package/dist/parse/model/SecondaryInstance/assertSecondaryInstanceDefinition.d.ts +5 -0
- package/dist/parse/model/SecondaryInstance/defineSecondaryInstance.d.ts +5 -0
- package/dist/parse/model/SecondaryInstance/sources/BlankSecondaryInstanceSource.d.ts +1 -7
- package/dist/parse/model/SecondaryInstance/sources/CSVExternalSecondaryInstance.d.ts +1 -1
- package/dist/parse/model/SecondaryInstance/sources/GeoJSONExternalSecondaryInstance.d.ts +1 -1
- package/dist/parse/model/SecondaryInstance/sources/InternalSecondaryInstanceSource.d.ts +1 -1
- package/dist/parse/model/SecondaryInstance/sources/SecondaryInstanceSource.d.ts +1 -1
- package/dist/parse/model/SecondaryInstance/sources/XMLExternalSecondaryInstanceSource.d.ts +1 -1
- package/dist/parse/model/{FormSubmissionDefinition.d.ts → SubmissionDefinition.d.ts} +2 -2
- package/dist/parse/model/SubtreeDefinition.d.ts +9 -7
- package/dist/parse/model/nodeDefinitionMap.d.ts +5 -0
- package/dist/parse/shared/parseInstanceXML.d.ts +21 -0
- package/dist/parse/shared/parseStaticDocumentFromDOMSubtree.d.ts +4 -22
- package/dist/parse/text/ItemLabelDefinition.d.ts +1 -1
- package/dist/parse/text/ItemsetLabelDefinition.d.ts +2 -2
- package/dist/parse/text/abstract/TextElementDefinition.d.ts +1 -1
- package/dist/parse/xpath/semantic-analysis.d.ts +1 -3
- package/dist/solid.js +7247 -5813
- package/dist/solid.js.map +1 -1
- package/package.json +15 -12
- package/src/client/BaseNode.ts +9 -4
- package/src/client/BaseValueNode.ts +8 -4
- package/src/client/GroupNode.ts +1 -0
- package/src/client/InputNode.ts +38 -2
- package/src/client/ModelValueNode.ts +1 -0
- package/src/client/NoteNode.ts +43 -7
- package/src/client/RangeNode.ts +51 -0
- package/src/client/RankNode.ts +54 -0
- package/src/client/RootNode.ts +30 -16
- package/src/client/SelectNode.ts +53 -26
- package/src/client/SubtreeNode.ts +1 -0
- package/src/client/TriggerNode.ts +12 -6
- package/src/client/constants.ts +12 -14
- package/src/client/form/CreateFormInstance.ts +19 -0
- package/src/client/form/EditFormInstance.ts +93 -0
- package/src/client/form/FormInstance.ts +114 -0
- package/src/client/form/FormInstanceConfig.ts +18 -0
- package/src/client/form/FormResource.ts +1 -0
- package/src/client/form/LoadForm.ts +92 -0
- package/src/client/form/LoadFormResult.ts +103 -0
- package/src/client/form/RestoreFormInstance.ts +14 -0
- package/src/client/hierarchy.ts +7 -8
- package/src/client/index.ts +47 -29
- package/src/client/node-types.ts +3 -5
- package/src/client/repeat/BaseRepeatRangeNode.ts +3 -4
- package/src/client/repeat/RepeatInstanceNode.ts +4 -8
- package/src/client/repeat/RepeatRangeControlledNode.ts +2 -2
- package/src/client/repeat/RepeatRangeUncontrolledNode.ts +2 -2
- package/src/client/resources.ts +2 -2
- package/src/client/serialization/InstanceData.ts +16 -0
- package/src/client/serialization/InstanceFile.ts +9 -0
- package/src/client/serialization/InstancePayload.ts +126 -0
- package/src/client/serialization/InstancePayloadOptions.ts +28 -0
- package/src/client/serialization/InstanceState.ts +14 -0
- package/src/client/submission/{SubmissionDefinition.ts → SubmissionMeta.ts} +1 -1
- package/src/client/unsupported/UnsupportedControlNode.ts +2 -6
- package/src/entrypoints/FormInstance.ts +55 -0
- package/src/entrypoints/FormResult/BaseFormResult.ts +40 -0
- package/src/entrypoints/FormResult/BaseInstantiableFormResult.ts +109 -0
- package/src/entrypoints/FormResult/FormFailureResult.ts +44 -0
- package/src/entrypoints/FormResult/FormSuccessResult.ts +25 -0
- package/src/entrypoints/FormResult/FormWarningResult.ts +25 -0
- package/src/entrypoints/createInstance.ts +23 -0
- package/src/entrypoints/editInstance.ts +24 -0
- package/src/entrypoints/index.ts +4 -0
- package/src/entrypoints/loadForm.ts +154 -0
- package/src/entrypoints/restoreInstance.ts +27 -0
- package/src/error/LoadFormFailureError.ts +114 -0
- package/src/error/MalformedInstanceDataError.ts +3 -0
- package/src/error/RankMissingValueError.ts +5 -0
- package/src/error/RankValueTypeError.ts +13 -0
- package/src/error/SelectValueTypeError.ts +22 -0
- package/src/error/TemplatedNodeAttributeSerializationError.ts +24 -0
- package/src/error/XFormsSpecViolationError.ts +1 -0
- package/src/index.ts +2 -56
- package/src/instance/Group.ts +17 -15
- package/src/instance/InputControl.ts +58 -12
- package/src/instance/ModelValue.ts +19 -11
- package/src/instance/Note.ts +40 -64
- package/src/instance/PrimaryInstance.ts +70 -31
- package/src/instance/RangeControl.ts +119 -0
- package/src/instance/RankControl.ts +208 -0
- package/src/instance/Root.ts +21 -31
- package/src/instance/SelectControl.ts +228 -0
- package/src/instance/Subtree.ts +17 -15
- package/src/instance/TriggerControl.ts +50 -80
- package/src/instance/abstract/DescendantNode.ts +13 -8
- package/src/instance/abstract/InstanceNode.ts +19 -7
- package/src/instance/abstract/ValueNode.ts +14 -15
- package/src/instance/children/DescendantNodeInitOptions.ts +35 -0
- package/src/instance/children/buildChildren.ts +206 -0
- package/src/instance/children/childrenInitOptions.ts +117 -0
- package/src/instance/children/normalizeChildInitOptions.ts +332 -0
- package/src/instance/hierarchy.ts +21 -16
- package/src/instance/input/InitialInstanceState.ts +108 -0
- package/src/instance/input/InstanceAttachmentMap.ts +142 -0
- package/src/instance/internal-api/InstanceConfig.ts +3 -10
- package/src/instance/internal-api/InstanceValueContext.ts +11 -1
- package/src/instance/internal-api/serialization/ClientReactiveSerializableInstance.ts +20 -0
- package/src/instance/internal-api/serialization/ClientReactiveSerializableLeafNode.ts +43 -0
- package/src/instance/internal-api/serialization/ClientReactiveSerializableParentNode.ts +26 -0
- package/src/instance/internal-api/serialization/ClientReactiveSerializableTemplatedNode.ts +24 -0
- package/src/instance/internal-api/serialization/ClientReactiveSerializableValueNode.ts +28 -0
- package/src/instance/repeat/BaseRepeatRange.ts +21 -24
- package/src/instance/repeat/RepeatInstance.ts +27 -19
- package/src/instance/repeat/RepeatRangeControlled.ts +90 -17
- package/src/instance/repeat/RepeatRangeUncontrolled.ts +10 -9
- package/src/instance/resource.ts +18 -2
- package/src/instance/unsupported/UploadControl.ts +116 -5
- package/src/integration/xpath/EngineXPathEvaluator.ts +2 -2
- package/src/integration/xpath/adapter/kind.ts +1 -28
- package/src/integration/xpath/adapter/names.ts +66 -17
- package/src/integration/xpath/adapter/traversal.ts +12 -11
- package/src/integration/xpath/static-dom/StaticAttribute.ts +16 -7
- package/src/integration/xpath/static-dom/StaticDocument.ts +17 -18
- package/src/integration/xpath/static-dom/StaticElement.ts +211 -52
- package/src/integration/xpath/static-dom/StaticNode.ts +1 -1
- package/src/integration/xpath/static-dom/StaticParentNode.ts +22 -0
- package/src/integration/xpath/static-dom/staticNodeName.ts +20 -0
- package/src/lib/client-reactivity/instance-state/createNodeRangeInstanceState.ts +17 -0
- package/src/lib/client-reactivity/instance-state/createParentNodeInstanceState.ts +22 -0
- package/src/lib/client-reactivity/instance-state/createPrimaryInstanceState.ts +12 -0
- package/src/lib/client-reactivity/instance-state/createRootInstanceState.ts +19 -0
- package/src/lib/client-reactivity/instance-state/createTemplatedNodeInstanceState.ts +31 -0
- package/src/lib/client-reactivity/instance-state/createValueNodeInstanceState.ts +21 -0
- package/src/lib/client-reactivity/instance-state/prepareInstancePayload.ts +173 -0
- package/src/lib/codecs/Geopoint/Geopoint.ts +150 -0
- package/src/lib/codecs/Geopoint/GeopointValueCodec.ts +20 -0
- package/src/lib/codecs/NoteCodec.ts +32 -0
- package/src/lib/codecs/RangeCodec.ts +65 -0
- package/src/lib/codecs/TempUnsupportedControlCodec.ts +32 -0
- package/src/lib/codecs/TriggerCodec.ts +64 -0
- package/src/lib/codecs/ValueArrayCodec.ts +42 -0
- package/src/lib/codecs/ValueCodec.ts +2 -2
- package/src/lib/codecs/getNoteCodec.ts +27 -0
- package/src/lib/codecs/getSelectCodec.ts +27 -0
- package/src/lib/codecs/getSharedValueCodec.ts +5 -3
- package/src/lib/codecs/items/BaseItemCodec.ts +20 -0
- package/src/lib/codecs/items/MultipleValueItemCodec.ts +28 -0
- package/src/lib/codecs/items/SingleValueItemCodec.ts +67 -0
- package/src/lib/dom/query.ts +1 -2
- package/src/lib/names/NamespaceDeclaration.ts +106 -0
- package/src/lib/names/NamespaceDeclarationMap.ts +228 -0
- package/src/lib/names/NamespaceURL.ts +44 -0
- package/src/lib/names/QualifiedName.ts +170 -0
- package/src/lib/names/UnprefixedXFormsName.ts +12 -0
- package/src/lib/number-parsers.ts +25 -0
- package/src/lib/reactivity/createInstanceValueState.ts +69 -43
- package/src/lib/reactivity/{createSelectItems.ts → createItemCollection.ts} +41 -36
- package/src/lib/xml-serialization.ts +76 -9
- package/src/parse/XFormDOM.ts +141 -21
- package/src/parse/XFormDefinition.ts +1 -4
- package/src/parse/body/BodyDefinition.ts +4 -4
- package/src/parse/body/appearance/rangeAppearanceParser.ts +11 -0
- package/src/parse/body/control/InputControlDefinition.ts +9 -0
- package/src/parse/body/control/{select/ItemDefinition.ts → ItemDefinition.ts} +8 -6
- package/src/parse/body/control/{select/ItemsetDefinition.ts → ItemsetDefinition.ts} +11 -9
- package/src/parse/body/control/RangeControlDefinition.ts +91 -6
- package/src/parse/body/control/RankControlDefinition.ts +25 -7
- package/src/parse/body/control/{select/SelectDefinition.ts → SelectControlDefinition.ts} +9 -9
- package/src/parse/expression/ItemsetNodesetExpression.ts +1 -1
- package/src/parse/expression/ItemsetValueExpression.ts +1 -1
- package/src/parse/model/BindDefinition.ts +4 -0
- package/src/parse/model/BindPreloadDefinition.ts +100 -0
- package/src/parse/model/DescendentNodeDefinition.ts +7 -25
- package/src/parse/model/ItextTranslationsDefinition.ts +79 -0
- package/src/parse/model/LeafNodeDefinition.ts +13 -8
- package/src/parse/model/ModelDefinition.ts +36 -3
- package/src/parse/model/NodeDefinition.ts +38 -85
- package/src/parse/model/NoteNodeDefinition.ts +12 -10
- package/src/parse/model/RangeNodeDefinition.ts +119 -0
- package/src/parse/model/RepeatDefinition.ts +382 -0
- package/src/parse/model/RootAttributeDefinition.ts +44 -0
- package/src/parse/model/RootAttributeMap.ts +49 -0
- package/src/parse/model/RootDefinition.ts +42 -43
- package/src/parse/model/SecondaryInstance/SecondaryInstancesDefinition.ts +23 -2
- package/src/parse/model/SecondaryInstance/assertSecondaryInstanceDefinition.ts +14 -0
- package/src/parse/model/SecondaryInstance/defineSecondaryInstance.ts +32 -0
- package/src/parse/model/SecondaryInstance/sources/BlankSecondaryInstanceSource.ts +3 -24
- package/src/parse/model/SecondaryInstance/sources/CSVExternalSecondaryInstance.ts +33 -86
- package/src/parse/model/SecondaryInstance/sources/GeoJSONExternalSecondaryInstance.ts +64 -136
- package/src/parse/model/SecondaryInstance/sources/InternalSecondaryInstanceSource.ts +9 -7
- package/src/parse/model/SecondaryInstance/sources/SecondaryInstanceSource.ts +1 -1
- package/src/parse/model/SecondaryInstance/sources/XMLExternalSecondaryInstanceSource.ts +7 -7
- package/src/parse/model/{FormSubmissionDefinition.ts → SubmissionDefinition.ts} +2 -2
- package/src/parse/model/SubtreeDefinition.ts +15 -16
- package/src/parse/model/nodeDefinitionMap.ts +34 -0
- package/src/parse/shared/parseInstanceXML.ts +79 -0
- package/src/parse/shared/parseStaticDocumentFromDOMSubtree.ts +46 -131
- package/src/parse/text/ItemLabelDefinition.ts +1 -1
- package/src/parse/text/ItemsetLabelDefinition.ts +2 -2
- package/src/parse/text/abstract/TextElementDefinition.ts +1 -1
- package/src/parse/xpath/semantic-analysis.ts +4 -3
- package/dist/client/EngineConfig.d.ts +0 -79
- package/dist/client/submission/SubmissionData.d.ts +0 -7
- package/dist/client/submission/SubmissionInstanceFile.d.ts +0 -6
- package/dist/client/submission/SubmissionOptions.d.ts +0 -23
- package/dist/client/submission/SubmissionResult.d.ts +0 -91
- package/dist/client/submission/SubmissionState.d.ts +0 -12
- package/dist/client/unsupported/RangeNode.d.ts +0 -9
- package/dist/client/unsupported/RankNode.d.ts +0 -9
- package/dist/instance/SelectField.d.ts +0 -58
- package/dist/instance/abstract/UnsupportedControl.d.ts +0 -53
- package/dist/instance/index.d.ts +0 -8
- package/dist/instance/internal-api/ValueContext.d.ts +0 -23
- package/dist/instance/internal-api/submission/ClientReactiveSubmittableInstance.d.ts +0 -14
- package/dist/instance/internal-api/submission/ClientReactiveSubmittableLeafNode.d.ts +0 -31
- package/dist/instance/internal-api/submission/ClientReactiveSubmittableParentNode.d.ts +0 -18
- package/dist/instance/internal-api/submission/ClientReactiveSubmittableValueNode.d.ts +0 -17
- package/dist/instance/unsupported/RangeControl.d.ts +0 -6
- package/dist/instance/unsupported/RankControl.d.ts +0 -6
- package/dist/integration/xpath/static-dom/StaticNamedNode.d.ts +0 -17
- package/dist/lib/client-reactivity/submission/createInstanceSubmissionState.d.ts +0 -3
- package/dist/lib/client-reactivity/submission/createLeafNodeSubmissionState.d.ts +0 -3
- package/dist/lib/client-reactivity/submission/createNodeRangeSubmissionState.d.ts +0 -4
- package/dist/lib/client-reactivity/submission/createParentNodeSubmissionState.d.ts +0 -4
- package/dist/lib/client-reactivity/submission/createValueNodeSubmissionState.d.ts +0 -3
- package/dist/lib/client-reactivity/submission/prepareSubmission.d.ts +0 -8
- package/dist/lib/reactivity/createSelectItems.d.ts +0 -16
- package/dist/lib/reactivity/createValueState.d.ts +0 -40
- package/dist/parse/body/control/select/ItemDefinition.d.ts +0 -13
- package/dist/parse/body/control/select/ItemsetDefinition.d.ts +0 -17
- package/dist/parse/body/control/select/ItemsetNodesetContext.d.ts +0 -9
- package/dist/parse/model/ItextTranslation/ItextTranslationDefinition.d.ts +0 -4
- package/dist/parse/model/ItextTranslation/ItextTranslationRootDefinition.d.ts +0 -8
- package/dist/parse/model/ItextTranslation/ItextTranslationsDefinition.d.ts +0 -8
- package/dist/parse/model/RepeatInstanceDefinition.d.ts +0 -14
- package/dist/parse/model/RepeatRangeDefinition.d.ts +0 -29
- package/dist/parse/model/RepeatTemplateDefinition.d.ts +0 -28
- package/dist/parse/model/SecondaryInstance/SecondaryInstanceDefinition.d.ts +0 -4
- package/dist/parse/model/SecondaryInstance/SecondaryInstanceRootDefinition.d.ts +0 -7
- package/src/client/EngineConfig.ts +0 -84
- package/src/client/submission/SubmissionData.ts +0 -12
- package/src/client/submission/SubmissionInstanceFile.ts +0 -9
- package/src/client/submission/SubmissionOptions.ts +0 -28
- package/src/client/submission/SubmissionResult.ts +0 -124
- package/src/client/submission/SubmissionState.ts +0 -14
- package/src/client/unsupported/RangeNode.ts +0 -14
- package/src/client/unsupported/RankNode.ts +0 -14
- package/src/instance/SelectField.ts +0 -263
- package/src/instance/abstract/UnsupportedControl.ts +0 -174
- package/src/instance/children.ts +0 -158
- package/src/instance/index.ts +0 -55
- package/src/instance/internal-api/ValueContext.ts +0 -28
- package/src/instance/internal-api/submission/ClientReactiveSubmittableInstance.ts +0 -20
- package/src/instance/internal-api/submission/ClientReactiveSubmittableLeafNode.ts +0 -42
- package/src/instance/internal-api/submission/ClientReactiveSubmittableParentNode.ts +0 -25
- package/src/instance/internal-api/submission/ClientReactiveSubmittableValueNode.ts +0 -23
- package/src/instance/unsupported/RangeControl.ts +0 -9
- package/src/instance/unsupported/RankControl.ts +0 -9
- package/src/integration/xpath/static-dom/StaticNamedNode.ts +0 -45
- package/src/lib/client-reactivity/submission/createInstanceSubmissionState.ts +0 -12
- package/src/lib/client-reactivity/submission/createLeafNodeSubmissionState.ts +0 -20
- package/src/lib/client-reactivity/submission/createNodeRangeSubmissionState.ts +0 -17
- package/src/lib/client-reactivity/submission/createParentNodeSubmissionState.ts +0 -22
- package/src/lib/client-reactivity/submission/createValueNodeSubmissionState.ts +0 -21
- package/src/lib/client-reactivity/submission/prepareSubmission.ts +0 -172
- package/src/lib/reactivity/createValueState.ts +0 -200
- package/src/parse/body/control/select/ItemsetNodesetContext.ts +0 -21
- package/src/parse/model/ItextTranslation/ItextTranslationDefinition.ts +0 -4
- package/src/parse/model/ItextTranslation/ItextTranslationRootDefinition.ts +0 -41
- package/src/parse/model/ItextTranslation/ItextTranslationsDefinition.ts +0 -31
- package/src/parse/model/RepeatInstanceDefinition.ts +0 -34
- package/src/parse/model/RepeatRangeDefinition.ts +0 -94
- package/src/parse/model/RepeatTemplateDefinition.ts +0 -145
- package/src/parse/model/SecondaryInstance/SecondaryInstanceDefinition.ts +0 -4
- package/src/parse/model/SecondaryInstance/SecondaryInstanceRootDefinition.ts +0 -12
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import type { SubmissionState } from '../../../client/submission/SubmissionState.ts';
|
|
2
|
-
import type { ClientReactiveSubmittableValueNode } from '../../../instance/internal-api/submission/ClientReactiveSubmittableValueNode.ts';
|
|
3
|
-
import { escapeXMLText, serializeLeafElementXML } from '../../xml-serialization.ts';
|
|
4
|
-
|
|
5
|
-
export const createValueNodeSubmissionState = (
|
|
6
|
-
node: ClientReactiveSubmittableValueNode
|
|
7
|
-
): SubmissionState => {
|
|
8
|
-
const { nodeName } = node.definition;
|
|
9
|
-
|
|
10
|
-
return {
|
|
11
|
-
get submissionXML() {
|
|
12
|
-
if (!node.currentState.relevant) {
|
|
13
|
-
return '';
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
const xmlValue = escapeXMLText(node.currentState.instanceValue);
|
|
17
|
-
|
|
18
|
-
return serializeLeafElementXML(nodeName, xmlValue);
|
|
19
|
-
},
|
|
20
|
-
};
|
|
21
|
-
};
|
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
import { UnreachableError } from '@getodk/common/lib/error/UnreachableError.ts';
|
|
2
|
-
import {
|
|
3
|
-
SUBMISSION_INSTANCE_FILE_NAME,
|
|
4
|
-
SUBMISSION_INSTANCE_FILE_TYPE,
|
|
5
|
-
} from '../../../client/constants.ts';
|
|
6
|
-
import type { SubmissionData } from '../../../client/submission/SubmissionData.ts';
|
|
7
|
-
import type { SubmissionDefinition } from '../../../client/submission/SubmissionDefinition.ts';
|
|
8
|
-
import type { SubmissionInstanceFile } from '../../../client/submission/SubmissionInstanceFile.ts';
|
|
9
|
-
import type { SubmissionChunkedType } from '../../../client/submission/SubmissionOptions.ts';
|
|
10
|
-
import type { SubmissionResult } from '../../../client/submission/SubmissionResult.ts';
|
|
11
|
-
import type { DescendantNodeViolationReference } from '../../../client/validation.ts';
|
|
12
|
-
import type { ClientReactiveSubmittableInstance } from '../../../instance/internal-api/submission/ClientReactiveSubmittableInstance.ts';
|
|
13
|
-
|
|
14
|
-
class InstanceFile extends File implements SubmissionInstanceFile {
|
|
15
|
-
override readonly name = SUBMISSION_INSTANCE_FILE_NAME;
|
|
16
|
-
override readonly type = SUBMISSION_INSTANCE_FILE_TYPE;
|
|
17
|
-
|
|
18
|
-
constructor(instanceRoot: ClientReactiveSubmittableInstance) {
|
|
19
|
-
const { submissionXML } = instanceRoot.submissionState;
|
|
20
|
-
|
|
21
|
-
super([submissionXML], SUBMISSION_INSTANCE_FILE_NAME, {
|
|
22
|
-
type: SUBMISSION_INSTANCE_FILE_TYPE,
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
type AssertSubmissionData = (data: FormData) => asserts data is SubmissionData;
|
|
28
|
-
|
|
29
|
-
const assertSubmissionData: AssertSubmissionData = (data) => {
|
|
30
|
-
const instanceFile = data.get(SUBMISSION_INSTANCE_FILE_NAME);
|
|
31
|
-
|
|
32
|
-
if (!(instanceFile instanceof InstanceFile)) {
|
|
33
|
-
throw new Error(`Invalid SubmissionData`);
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
class InstanceSubmissionData extends FormData {
|
|
38
|
-
static from(instanceFile: InstanceFile, attachments: readonly File[]): SubmissionData {
|
|
39
|
-
const data = new this(instanceFile, attachments);
|
|
40
|
-
|
|
41
|
-
assertSubmissionData(data);
|
|
42
|
-
|
|
43
|
-
return data;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
private constructor(
|
|
47
|
-
readonly instanceFile: InstanceFile,
|
|
48
|
-
readonly attachments: readonly File[]
|
|
49
|
-
) {
|
|
50
|
-
super();
|
|
51
|
-
|
|
52
|
-
this.set(SUBMISSION_INSTANCE_FILE_NAME, instanceFile);
|
|
53
|
-
|
|
54
|
-
attachments.forEach((attachment) => {
|
|
55
|
-
const { name } = attachment;
|
|
56
|
-
|
|
57
|
-
if (name === SUBMISSION_INSTANCE_FILE_NAME && attachment !== instanceFile) {
|
|
58
|
-
throw new Error(
|
|
59
|
-
`Failed to add conflicting attachment with name ${SUBMISSION_INSTANCE_FILE_NAME}`
|
|
60
|
-
);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
this.set(name, attachment);
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
interface PendingValidation {
|
|
69
|
-
readonly status: 'pending';
|
|
70
|
-
readonly violations: readonly DescendantNodeViolationReference[];
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
interface ReadyValidation {
|
|
74
|
-
readonly status: 'ready';
|
|
75
|
-
readonly violations: null;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
type SubmissionInstanceStateValidation = PendingValidation | ReadyValidation;
|
|
79
|
-
|
|
80
|
-
const validateSubmission = (
|
|
81
|
-
instanceRoot: ClientReactiveSubmittableInstance
|
|
82
|
-
): SubmissionInstanceStateValidation => {
|
|
83
|
-
const { violations } = instanceRoot.validationState;
|
|
84
|
-
|
|
85
|
-
if (violations.length === 0) {
|
|
86
|
-
return {
|
|
87
|
-
status: 'ready',
|
|
88
|
-
violations: null,
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
return {
|
|
93
|
-
status: 'pending',
|
|
94
|
-
violations,
|
|
95
|
-
};
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
const monolithicSubmissionResult = (
|
|
99
|
-
validation: SubmissionInstanceStateValidation,
|
|
100
|
-
definition: SubmissionDefinition,
|
|
101
|
-
instanceFile: InstanceFile,
|
|
102
|
-
attachments: readonly File[]
|
|
103
|
-
): SubmissionResult<'monolithic'> => {
|
|
104
|
-
const data = InstanceSubmissionData.from(instanceFile, attachments);
|
|
105
|
-
|
|
106
|
-
return {
|
|
107
|
-
...validation,
|
|
108
|
-
definition,
|
|
109
|
-
data,
|
|
110
|
-
};
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
interface ChunkedSubmissionResultOptions {
|
|
114
|
-
readonly maxSize: number;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
const chunkedSubmissionResult = (
|
|
118
|
-
validation: SubmissionInstanceStateValidation,
|
|
119
|
-
definition: SubmissionDefinition,
|
|
120
|
-
instanceFile: InstanceFile,
|
|
121
|
-
attachments: readonly File[],
|
|
122
|
-
options: ChunkedSubmissionResultOptions
|
|
123
|
-
): SubmissionResult<'chunked'> => {
|
|
124
|
-
if (attachments.length > 0 || options.maxSize !== Infinity) {
|
|
125
|
-
throw new Error('Submission chunking pending implementation');
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
const data = InstanceSubmissionData.from(instanceFile, attachments);
|
|
129
|
-
|
|
130
|
-
return {
|
|
131
|
-
...validation,
|
|
132
|
-
definition,
|
|
133
|
-
data: [data],
|
|
134
|
-
};
|
|
135
|
-
};
|
|
136
|
-
|
|
137
|
-
export interface PrepeareSubmissionOptions<ChunkedType extends SubmissionChunkedType> {
|
|
138
|
-
readonly chunked: ChunkedType;
|
|
139
|
-
readonly maxSize: number;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
export const prepareSubmission = <ChunkedType extends SubmissionChunkedType>(
|
|
143
|
-
instanceRoot: ClientReactiveSubmittableInstance,
|
|
144
|
-
options: PrepeareSubmissionOptions<ChunkedType>
|
|
145
|
-
): SubmissionResult<ChunkedType> => {
|
|
146
|
-
const validation = validateSubmission(instanceRoot);
|
|
147
|
-
const definition = instanceRoot.definition.submission;
|
|
148
|
-
const instanceFile = new InstanceFile(instanceRoot);
|
|
149
|
-
const attachments: readonly File[] = [];
|
|
150
|
-
|
|
151
|
-
switch (options.chunked) {
|
|
152
|
-
case 'chunked':
|
|
153
|
-
return chunkedSubmissionResult(
|
|
154
|
-
validation,
|
|
155
|
-
definition,
|
|
156
|
-
instanceFile,
|
|
157
|
-
attachments,
|
|
158
|
-
options
|
|
159
|
-
) satisfies SubmissionResult<'chunked'> as SubmissionResult<ChunkedType>;
|
|
160
|
-
|
|
161
|
-
case 'monolithic':
|
|
162
|
-
return monolithicSubmissionResult(
|
|
163
|
-
validation,
|
|
164
|
-
definition,
|
|
165
|
-
instanceFile,
|
|
166
|
-
attachments
|
|
167
|
-
) satisfies SubmissionResult<'monolithic'> as SubmissionResult<ChunkedType>;
|
|
168
|
-
|
|
169
|
-
default:
|
|
170
|
-
throw new UnreachableError(options.chunked);
|
|
171
|
-
}
|
|
172
|
-
};
|
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
import { createComputed, createMemo, createSignal, untrack, type Signal } from 'solid-js';
|
|
2
|
-
import { ErrorProductionDesignPendingError } from '../../error/ErrorProductionDesignPendingError.ts';
|
|
3
|
-
import type { ValueContext } from '../../instance/internal-api/ValueContext.ts';
|
|
4
|
-
import type { BindComputationExpression } from '../../parse/expression/BindComputationExpression.ts';
|
|
5
|
-
import { createComputedExpression } from './createComputedExpression.ts';
|
|
6
|
-
import type { SimpleAtomicState, SimpleAtomicStateSetter } from './types.ts';
|
|
7
|
-
|
|
8
|
-
type InitialValueSource = 'FORM_DEFAULT' | 'PRIMARY_INSTANCE';
|
|
9
|
-
|
|
10
|
-
export interface ValueStateOptions {
|
|
11
|
-
/**
|
|
12
|
-
* Specifies the source of a {@link createValueState} signal's initial
|
|
13
|
-
* value state, where:
|
|
14
|
-
*
|
|
15
|
-
* - 'FORM_DEFAULT': Derives the initial state from the form's
|
|
16
|
-
* definition of the node itself. This is the default option, appropriate
|
|
17
|
-
* when initializing a form without additional primary instance data. In
|
|
18
|
-
* other words, this value should not be used for edits.
|
|
19
|
-
*
|
|
20
|
-
* - 'PRIMARY_INSTANCE': Derives the initial state from the current text
|
|
21
|
-
* content of the {@link ValueNode.contextNode}. This option
|
|
22
|
-
* should be specified when initializing a form with existing primary
|
|
23
|
-
* instance data, such as when editing a previous submission.
|
|
24
|
-
*
|
|
25
|
-
* @default 'FORM_DEFAULT'
|
|
26
|
-
*
|
|
27
|
-
* Specifies whether a {@link createV} signal's initial state
|
|
28
|
-
* should be derived from the current text content of the
|
|
29
|
-
* {@link ValueNode.contextNode | primary instance DOM state}.
|
|
30
|
-
*/
|
|
31
|
-
readonly initialValueSource?: InitialValueSource;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const getInitialValue = <RuntimeValue>(
|
|
35
|
-
context: ValueContext<RuntimeValue>,
|
|
36
|
-
options: ValueStateOptions
|
|
37
|
-
): string => {
|
|
38
|
-
const { initialValueSource = 'FORM_DEFAULT' } = options;
|
|
39
|
-
|
|
40
|
-
if (initialValueSource === 'FORM_DEFAULT') {
|
|
41
|
-
return context.definition.defaultValue;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
throw new ErrorProductionDesignPendingError('Edit implementation pending');
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
type BaseValueState = Signal<string>;
|
|
48
|
-
|
|
49
|
-
type RelevantValueState = SimpleAtomicState<string>;
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Wraps {@link baseValueState} in a signal-like interface which:
|
|
53
|
-
*
|
|
54
|
-
* - produces a blank value for nodes ({@link context}) in a non-relevant state
|
|
55
|
-
* - persists, and restores, the most recent non-blank value state when a
|
|
56
|
-
* node/context's relevance is restored
|
|
57
|
-
*/
|
|
58
|
-
const createRelevantValueState = <RuntimeValue>(
|
|
59
|
-
context: ValueContext<RuntimeValue>,
|
|
60
|
-
baseValueState: BaseValueState
|
|
61
|
-
): RelevantValueState => {
|
|
62
|
-
return context.scope.runTask(() => {
|
|
63
|
-
const [getRelevantValue, setValue] = baseValueState;
|
|
64
|
-
|
|
65
|
-
const getValue = createMemo(() => {
|
|
66
|
-
if (context.isRelevant()) {
|
|
67
|
-
return getRelevantValue();
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
return '';
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
return [getValue, setValue];
|
|
74
|
-
});
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
type RuntimeValueState<RuntimeValue> = SimpleAtomicState<RuntimeValue>;
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Wraps {@link relevantValueState} in a signal-like interface which
|
|
81
|
-
* automatically encodes and decodes a node's runtime value representation:
|
|
82
|
-
*
|
|
83
|
-
* - Values read by a node will be read from the current state as persisted in
|
|
84
|
-
* the primary instance, then {@link ValueContext.decodeValue | decoded} (as
|
|
85
|
-
* implemented by that node) into a format suitable for the rest of the
|
|
86
|
-
* functionality provided by that node.
|
|
87
|
-
*
|
|
88
|
-
* - Values written by a node will be {@link ValueContext.encodeValue | encoded}
|
|
89
|
-
* (also as implemented by that node) into a string value appropriate for
|
|
90
|
-
* serialization in an instance submission.
|
|
91
|
-
*/
|
|
92
|
-
const createRuntimeValueState = <RuntimeValue>(
|
|
93
|
-
context: ValueContext<RuntimeValue>,
|
|
94
|
-
relevantValueState: RelevantValueState
|
|
95
|
-
): RuntimeValueState<RuntimeValue> => {
|
|
96
|
-
const { decodeValue, encodeValue } = context;
|
|
97
|
-
|
|
98
|
-
return context.scope.runTask(() => {
|
|
99
|
-
const [primaryInstanceValue, setPrimaryInstanceValue] = relevantValueState;
|
|
100
|
-
const getRuntimeValue = createMemo(() => {
|
|
101
|
-
return decodeValue(primaryInstanceValue());
|
|
102
|
-
});
|
|
103
|
-
const setRuntimeValue: SimpleAtomicStateSetter<RuntimeValue> = (value) => {
|
|
104
|
-
const encodedValue = encodeValue(value);
|
|
105
|
-
|
|
106
|
-
return decodeValue(setPrimaryInstanceValue(encodedValue));
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
return [getRuntimeValue, setRuntimeValue];
|
|
110
|
-
});
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* For fields with a `readonly` bind expression, prevent downstream
|
|
115
|
-
* (client/user) writes when the field is in a `readonly` state.
|
|
116
|
-
*/
|
|
117
|
-
const guardDownstreamReadonlyWrites = <RuntimeValue>(
|
|
118
|
-
context: ValueContext<RuntimeValue>,
|
|
119
|
-
baseState: SimpleAtomicState<RuntimeValue>
|
|
120
|
-
): SimpleAtomicState<RuntimeValue> => {
|
|
121
|
-
const { readonly } = context.definition.bind;
|
|
122
|
-
|
|
123
|
-
if (readonly.isDefaultExpression) {
|
|
124
|
-
return baseState;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
const [getValue, baseSetValue] = baseState;
|
|
128
|
-
|
|
129
|
-
const setValue: SimpleAtomicStateSetter<RuntimeValue> = (value) => {
|
|
130
|
-
if (context.isReadonly()) {
|
|
131
|
-
const reference = untrack(() => context.contextReference());
|
|
132
|
-
|
|
133
|
-
throw new Error(`Cannot write to readonly field: ${reference}`);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
return baseSetValue(value);
|
|
137
|
-
};
|
|
138
|
-
|
|
139
|
-
return [getValue, setValue];
|
|
140
|
-
};
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* Defines a reactive effect which writes the result of `calculate` bind
|
|
144
|
-
* computations to the provided value setter, on initialization and any
|
|
145
|
-
* subsequent reactive update.
|
|
146
|
-
*/
|
|
147
|
-
const createCalculation = <RuntimeValue>(
|
|
148
|
-
context: ValueContext<RuntimeValue>,
|
|
149
|
-
setValue: SimpleAtomicStateSetter<RuntimeValue>,
|
|
150
|
-
calculateDefinition: BindComputationExpression<'calculate'>
|
|
151
|
-
): void => {
|
|
152
|
-
context.scope.runTask(() => {
|
|
153
|
-
const calculate = createComputedExpression(context, calculateDefinition, {
|
|
154
|
-
defaultValue: '',
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
createComputed(() => {
|
|
158
|
-
if (context.isAttached() && context.isRelevant()) {
|
|
159
|
-
const calculated = calculate();
|
|
160
|
-
const value = context.decodeValue(calculated);
|
|
161
|
-
|
|
162
|
-
setValue(value);
|
|
163
|
-
}
|
|
164
|
-
});
|
|
165
|
-
});
|
|
166
|
-
};
|
|
167
|
-
|
|
168
|
-
type ValueState<RuntimeValue> = SimpleAtomicState<RuntimeValue>;
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* Provides a consistent interface for value nodes of any type which:
|
|
172
|
-
*
|
|
173
|
-
* - derives initial state from either an existing instance (e.g. for edits) or
|
|
174
|
-
* the node's definition (e.g. initializing a new submission)
|
|
175
|
-
* - decodes current primary instance state into the value node's runtime type
|
|
176
|
-
* - encodes updated runtime values to store updated instance state
|
|
177
|
-
* - initializes reactive computation of `calculate` bind expressions for those
|
|
178
|
-
* nodes defined with one
|
|
179
|
-
* - prevents downstream writes to nodes in a readonly state
|
|
180
|
-
*/
|
|
181
|
-
export const createValueState = <RuntimeValue>(
|
|
182
|
-
context: ValueContext<RuntimeValue>,
|
|
183
|
-
options: ValueStateOptions = {}
|
|
184
|
-
): ValueState<RuntimeValue> => {
|
|
185
|
-
return context.scope.runTask(() => {
|
|
186
|
-
const initialValue = getInitialValue(context, options);
|
|
187
|
-
const baseValueState = createSignal(initialValue);
|
|
188
|
-
const valueState = createRelevantValueState(context, baseValueState);
|
|
189
|
-
const runtimeState = createRuntimeValueState(context, valueState);
|
|
190
|
-
const { calculate } = context.definition.bind;
|
|
191
|
-
|
|
192
|
-
if (calculate != null) {
|
|
193
|
-
const [, setValue] = runtimeState;
|
|
194
|
-
|
|
195
|
-
createCalculation(context, setValue, calculate);
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
return guardDownstreamReadonlyWrites(context, runtimeState);
|
|
199
|
-
});
|
|
200
|
-
};
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { DependencyContext } from '../../../expression/abstract/DependencyContext.ts';
|
|
2
|
-
import type { ItemsetDefinition } from './ItemsetDefinition.ts';
|
|
3
|
-
|
|
4
|
-
export class ItemsetNodesetContext extends DependencyContext {
|
|
5
|
-
override readonly parentReference = null;
|
|
6
|
-
override readonly reference: string;
|
|
7
|
-
|
|
8
|
-
constructor(
|
|
9
|
-
protected readonly itemset: ItemsetDefinition,
|
|
10
|
-
nodesetExpression: string
|
|
11
|
-
) {
|
|
12
|
-
super();
|
|
13
|
-
|
|
14
|
-
this.reference = nodesetExpression;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
override set isTranslated(value: true) {
|
|
18
|
-
super.isTranslated = value;
|
|
19
|
-
this.itemset.isTranslated = value;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { StaticDocument } from '../../../integration/xpath/static-dom/StaticDocument.ts';
|
|
2
|
-
import { ItextTranslationRootDefinition } from './ItextTranslationRootDefinition.ts';
|
|
3
|
-
|
|
4
|
-
export class ItextTranslationDefinition extends StaticDocument<ItextTranslationRootDefinition> {}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import type { XFormsItextTranslationElement } from '@getodk/xpath';
|
|
2
|
-
import { XFORMS_KNOWN_ATTRIBUTE, XFORMS_LOCAL_NAME } from '@getodk/xpath';
|
|
3
|
-
import { StaticElement } from '../../../integration/xpath/static-dom/StaticElement.ts';
|
|
4
|
-
|
|
5
|
-
// prettier-ignore
|
|
6
|
-
type ItextTranslationRootKnownAttributeValue<LocalName extends string> =
|
|
7
|
-
LocalName extends 'lang'
|
|
8
|
-
? string
|
|
9
|
-
: string | null;
|
|
10
|
-
|
|
11
|
-
type AssertItextTranslationRootKnownAttributeValue = <LocalName extends string>(
|
|
12
|
-
localName: LocalName,
|
|
13
|
-
value: string | null
|
|
14
|
-
) => asserts value is ItextTranslationRootKnownAttributeValue<LocalName>;
|
|
15
|
-
|
|
16
|
-
const assertItextTranslationRootKnownAttributeValue: AssertItextTranslationRootKnownAttributeValue =
|
|
17
|
-
(localName, value) => {
|
|
18
|
-
if (localName === 'lang' && value == null) {
|
|
19
|
-
throw new Error('Invalid itext <translation> element: missing `lang` attribute');
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
export class ItextTranslationRootDefinition
|
|
24
|
-
extends StaticElement
|
|
25
|
-
implements XFormsItextTranslationElement<ItextTranslationRootDefinition>
|
|
26
|
-
{
|
|
27
|
-
override readonly [XFORMS_LOCAL_NAME] = 'translation';
|
|
28
|
-
override readonly [XFORMS_KNOWN_ATTRIBUTE] = 'lang';
|
|
29
|
-
|
|
30
|
-
override getAttributeValue(localName: 'lang'): string;
|
|
31
|
-
override getAttributeValue(localName: string): string | null;
|
|
32
|
-
override getAttributeValue<LocalName extends string>(
|
|
33
|
-
localName: LocalName
|
|
34
|
-
): ItextTranslationRootKnownAttributeValue<LocalName> {
|
|
35
|
-
const value = super.getAttributeValue(localName);
|
|
36
|
-
|
|
37
|
-
assertItextTranslationRootKnownAttributeValue(localName, value);
|
|
38
|
-
|
|
39
|
-
return value;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import type { XFormsItextTranslationMap } from '@getodk/xpath';
|
|
2
|
-
import type { EngineXPathNode } from '../../../integration/xpath/adapter/kind.ts';
|
|
3
|
-
import { parseStaticDocumentFromDOMSubtree } from '../../shared/parseStaticDocumentFromDOMSubtree.ts';
|
|
4
|
-
import type { XFormDOM } from '../../XFormDOM.ts';
|
|
5
|
-
import { ItextTranslationDefinition } from './ItextTranslationDefinition.ts';
|
|
6
|
-
import { ItextTranslationRootDefinition } from './ItextTranslationRootDefinition.ts';
|
|
7
|
-
|
|
8
|
-
export class ItextTranslationsDefinition
|
|
9
|
-
extends Map<string, ItextTranslationRootDefinition>
|
|
10
|
-
implements XFormsItextTranslationMap<EngineXPathNode>
|
|
11
|
-
{
|
|
12
|
-
static from(xformDOM: XFormDOM): ItextTranslationsDefinition {
|
|
13
|
-
const translationDefinitions = xformDOM.itextTranslationElements.map((element) => {
|
|
14
|
-
return parseStaticDocumentFromDOMSubtree(
|
|
15
|
-
ItextTranslationDefinition,
|
|
16
|
-
ItextTranslationRootDefinition,
|
|
17
|
-
element
|
|
18
|
-
);
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
return new this(translationDefinitions);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
private constructor(translations: readonly ItextTranslationDefinition[]) {
|
|
25
|
-
super(
|
|
26
|
-
translations.map(({ root }) => {
|
|
27
|
-
return [root.getAttributeValue('lang'), root];
|
|
28
|
-
})
|
|
29
|
-
);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { RepeatElementDefinition } from '../body/RepeatElementDefinition.ts';
|
|
2
|
-
import { DescendentNodeDefinition } from './DescendentNodeDefinition.ts';
|
|
3
|
-
import type { ChildNodeDefinition, NodeDefinition } from './NodeDefinition.ts';
|
|
4
|
-
import type { AnyRepeatRangeDefinition } from './RepeatRangeDefinition.ts';
|
|
5
|
-
|
|
6
|
-
export class RepeatInstanceDefinition
|
|
7
|
-
extends DescendentNodeDefinition<'repeat-instance', RepeatElementDefinition>
|
|
8
|
-
implements NodeDefinition<'repeat-instance'>
|
|
9
|
-
{
|
|
10
|
-
readonly type = 'repeat-instance';
|
|
11
|
-
|
|
12
|
-
readonly nodeName: string;
|
|
13
|
-
readonly children: readonly ChildNodeDefinition[];
|
|
14
|
-
readonly instances = null;
|
|
15
|
-
readonly defaultValue = null;
|
|
16
|
-
|
|
17
|
-
constructor(
|
|
18
|
-
range: AnyRepeatRangeDefinition,
|
|
19
|
-
readonly node: Element
|
|
20
|
-
) {
|
|
21
|
-
const { bind, bodyElement, parent, root } = range;
|
|
22
|
-
|
|
23
|
-
super(parent, bind, bodyElement);
|
|
24
|
-
|
|
25
|
-
this.nodeName = range.nodeName;
|
|
26
|
-
this.children = root.buildSubtree(this);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
toJSON() {
|
|
30
|
-
const { bind, bodyElement, parent, root, ...rest } = this;
|
|
31
|
-
|
|
32
|
-
return rest;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import type { RepeatElementDefinition } from '../body/RepeatElementDefinition.ts';
|
|
2
|
-
import { RepeatCountControlExpression } from '../expression/RepeatCountControlExpression.ts';
|
|
3
|
-
import type { BindDefinition } from './BindDefinition.ts';
|
|
4
|
-
import { DescendentNodeDefinition } from './DescendentNodeDefinition.ts';
|
|
5
|
-
import type { NodeDefinition, ParentNodeDefinition } from './NodeDefinition.ts';
|
|
6
|
-
import { RepeatInstanceDefinition } from './RepeatInstanceDefinition.ts';
|
|
7
|
-
import { RepeatTemplateDefinition } from './RepeatTemplateDefinition.ts';
|
|
8
|
-
|
|
9
|
-
export interface ControlledRepeatRangeDefinition extends RepeatRangeDefinition {
|
|
10
|
-
readonly count: RepeatCountControlExpression;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export interface UncontrolledRepeatRangeDefinition extends RepeatRangeDefinition {
|
|
14
|
-
readonly count: null;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
// prettier-ignore
|
|
18
|
-
export type AnyRepeatRangeDefinition =
|
|
19
|
-
| ControlledRepeatRangeDefinition
|
|
20
|
-
| UncontrolledRepeatRangeDefinition;
|
|
21
|
-
|
|
22
|
-
type AssertRepeatRangeDefinitionUnion = (
|
|
23
|
-
definition: RepeatRangeDefinition
|
|
24
|
-
) => asserts definition is AnyRepeatRangeDefinition;
|
|
25
|
-
|
|
26
|
-
const assertRepeatRangeDefinitionUnion: AssertRepeatRangeDefinitionUnion = (_definition) => {
|
|
27
|
-
// Intentional no-op, used to guide the type checker. Implementation would
|
|
28
|
-
// check _definition.count == null || _definition.count != null, which is
|
|
29
|
-
// tautologically true!
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
export class RepeatRangeDefinition
|
|
33
|
-
extends DescendentNodeDefinition<'repeat-range', RepeatElementDefinition>
|
|
34
|
-
implements NodeDefinition<'repeat-range'>
|
|
35
|
-
{
|
|
36
|
-
static from(
|
|
37
|
-
parent: ParentNodeDefinition,
|
|
38
|
-
bind: BindDefinition,
|
|
39
|
-
bodyElement: RepeatElementDefinition,
|
|
40
|
-
modelNodes: readonly [Element, ...Element[]]
|
|
41
|
-
): AnyRepeatRangeDefinition {
|
|
42
|
-
const definition = new this(parent, bind, bodyElement, modelNodes);
|
|
43
|
-
|
|
44
|
-
assertRepeatRangeDefinitionUnion(definition);
|
|
45
|
-
|
|
46
|
-
return definition;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
readonly type = 'repeat-range';
|
|
50
|
-
|
|
51
|
-
readonly template: RepeatTemplateDefinition;
|
|
52
|
-
readonly children = null;
|
|
53
|
-
readonly instances: RepeatInstanceDefinition[];
|
|
54
|
-
readonly count: RepeatCountControlExpression | null;
|
|
55
|
-
|
|
56
|
-
readonly node = null;
|
|
57
|
-
readonly nodeName: string;
|
|
58
|
-
readonly defaultValue = null;
|
|
59
|
-
|
|
60
|
-
private constructor(
|
|
61
|
-
parent: ParentNodeDefinition,
|
|
62
|
-
bind: BindDefinition,
|
|
63
|
-
bodyElement: RepeatElementDefinition,
|
|
64
|
-
modelNodes: readonly [Element, ...Element[]]
|
|
65
|
-
) {
|
|
66
|
-
super(parent, bind, bodyElement);
|
|
67
|
-
|
|
68
|
-
const { template, instanceNodes } = RepeatTemplateDefinition.parseModelNodes(this, modelNodes);
|
|
69
|
-
|
|
70
|
-
this.template = template;
|
|
71
|
-
this.nodeName = template.nodeName;
|
|
72
|
-
this.count = RepeatCountControlExpression.from(bodyElement, instanceNodes.length);
|
|
73
|
-
|
|
74
|
-
assertRepeatRangeDefinitionUnion(this);
|
|
75
|
-
|
|
76
|
-
this.instances = instanceNodes.map((element) => {
|
|
77
|
-
return new RepeatInstanceDefinition(this, element);
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
isControlled(): this is ControlledRepeatRangeDefinition {
|
|
82
|
-
return this.count != null;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
isUncontrolled(): this is UncontrolledRepeatRangeDefinition {
|
|
86
|
-
return this.count == null;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
toJSON() {
|
|
90
|
-
const { bind, bodyElement: groupDefinition, parent, root, ...rest } = this;
|
|
91
|
-
|
|
92
|
-
return rest;
|
|
93
|
-
}
|
|
94
|
-
}
|