@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
|
@@ -4,9 +4,10 @@ import type { Accessor } from 'solid-js';
|
|
|
4
4
|
import { untrack } from 'solid-js';
|
|
5
5
|
import type { RepeatRangeNode } from '../../client/hierarchy.ts';
|
|
6
6
|
import type { FormNodeID } from '../../client/identity.ts';
|
|
7
|
+
import type { AnyRepeatDefinition } from '../../client/index.ts';
|
|
7
8
|
import type { NodeAppearances } from '../../client/NodeAppearances.ts';
|
|
8
9
|
import type { BaseRepeatRangeNode } from '../../client/repeat/BaseRepeatRangeNode.ts';
|
|
9
|
-
import type {
|
|
10
|
+
import type { InstanceState } from '../../client/serialization/InstanceState.ts';
|
|
10
11
|
import type { TextRange } from '../../client/TextRange.ts';
|
|
11
12
|
import type { AncestorNodeValidationState } from '../../client/validation.ts';
|
|
12
13
|
import type {
|
|
@@ -14,7 +15,8 @@ import type {
|
|
|
14
15
|
XFormsXPathNodeRangeKind,
|
|
15
16
|
} from '../../integration/xpath/adapter/XFormsXPathNode.ts';
|
|
16
17
|
import { XFORMS_XPATH_NODE_RANGE_KIND } from '../../integration/xpath/adapter/XFormsXPathNode.ts';
|
|
17
|
-
import {
|
|
18
|
+
import type { StaticElement } from '../../integration/xpath/static-dom/StaticElement.ts';
|
|
19
|
+
import { createNodeRangeInstanceState } from '../../lib/client-reactivity/instance-state/createNodeRangeInstanceState.ts';
|
|
18
20
|
import type { ChildrenState } from '../../lib/reactivity/createChildrenState.ts';
|
|
19
21
|
import { createChildrenState } from '../../lib/reactivity/createChildrenState.ts';
|
|
20
22
|
import type { MaterializedChildren } from '../../lib/reactivity/materializeCurrentStateChildren.ts';
|
|
@@ -24,10 +26,7 @@ import type { EngineState } from '../../lib/reactivity/node-state/createEngineSt
|
|
|
24
26
|
import type { SharedNodeState } from '../../lib/reactivity/node-state/createSharedNodeState.ts';
|
|
25
27
|
import { createSharedNodeState } from '../../lib/reactivity/node-state/createSharedNodeState.ts';
|
|
26
28
|
import { createNodeLabel } from '../../lib/reactivity/text/createNodeLabel.ts';
|
|
27
|
-
import type {
|
|
28
|
-
AnyRepeatRangeDefinition,
|
|
29
|
-
ControlledRepeatRangeDefinition,
|
|
30
|
-
} from '../../parse/model/RepeatRangeDefinition.ts';
|
|
29
|
+
import type { ControlledRepeatDefinition } from '../../parse/model/RepeatDefinition.ts';
|
|
31
30
|
import type {
|
|
32
31
|
AnyDescendantNode,
|
|
33
32
|
DescendantNodeSharedStateSpec,
|
|
@@ -35,8 +34,8 @@ import type {
|
|
|
35
34
|
import { DescendantNode } from '../abstract/DescendantNode.ts';
|
|
36
35
|
import type { GeneralParentNode, RepeatRange } from '../hierarchy.ts';
|
|
37
36
|
import type { EvaluationContext } from '../internal-api/EvaluationContext.ts';
|
|
38
|
-
import type {
|
|
39
|
-
import { RepeatInstance
|
|
37
|
+
import type { ClientReactiveSerializableParentNode } from '../internal-api/serialization/ClientReactiveSerializableParentNode.ts';
|
|
38
|
+
import { RepeatInstance } from './RepeatInstance.ts';
|
|
40
39
|
|
|
41
40
|
interface RepeatRangeStateSpec extends DescendantNodeSharedStateSpec {
|
|
42
41
|
readonly hint: null;
|
|
@@ -47,18 +46,18 @@ interface RepeatRangeStateSpec extends DescendantNodeSharedStateSpec {
|
|
|
47
46
|
}
|
|
48
47
|
|
|
49
48
|
// prettier-ignore
|
|
50
|
-
type BaseRepeatRangeNodeType<Definition extends
|
|
51
|
-
Definition extends
|
|
49
|
+
type BaseRepeatRangeNodeType<Definition extends AnyRepeatDefinition> =
|
|
50
|
+
Definition extends ControlledRepeatDefinition
|
|
52
51
|
? 'repeat-range:controlled'
|
|
53
52
|
: 'repeat-range:uncontrolled';
|
|
54
53
|
|
|
55
|
-
export abstract class BaseRepeatRange<Definition extends
|
|
54
|
+
export abstract class BaseRepeatRange<Definition extends AnyRepeatDefinition>
|
|
56
55
|
extends DescendantNode<Definition, RepeatRangeStateSpec, GeneralParentNode, RepeatInstance>
|
|
57
56
|
implements
|
|
58
57
|
BaseRepeatRangeNode,
|
|
59
58
|
XFormsXPathNodeRange,
|
|
60
59
|
EvaluationContext,
|
|
61
|
-
|
|
60
|
+
ClientReactiveSerializableParentNode<RepeatInstance>
|
|
62
61
|
{
|
|
63
62
|
protected readonly childrenState: ChildrenState<RepeatInstance>;
|
|
64
63
|
|
|
@@ -143,14 +142,16 @@ export abstract class BaseRepeatRange<Definition extends AnyRepeatRangeDefinitio
|
|
|
143
142
|
*/
|
|
144
143
|
abstract override readonly appearances: NodeAppearances<Definition>;
|
|
145
144
|
|
|
145
|
+
readonly nodeOptions = null;
|
|
146
|
+
|
|
146
147
|
readonly currentState: MaterializedChildren<CurrentState<RepeatRangeStateSpec>, RepeatInstance>;
|
|
147
148
|
|
|
148
149
|
abstract override readonly validationState: AncestorNodeValidationState;
|
|
149
150
|
|
|
150
|
-
readonly
|
|
151
|
+
readonly instanceState: InstanceState;
|
|
151
152
|
|
|
152
153
|
constructor(parent: GeneralParentNode, definition: Definition) {
|
|
153
|
-
super(parent, definition);
|
|
154
|
+
super(parent, definition.template, definition);
|
|
154
155
|
|
|
155
156
|
const repeatRange = this as AnyDescendantNode as RepeatRange;
|
|
156
157
|
|
|
@@ -158,10 +159,6 @@ export abstract class BaseRepeatRange<Definition extends AnyRepeatRangeDefinitio
|
|
|
158
159
|
|
|
159
160
|
this.childrenState = childrenState;
|
|
160
161
|
|
|
161
|
-
const sharedStateOptions = {
|
|
162
|
-
clientStateFactory: this.engineConfig.stateFactory,
|
|
163
|
-
};
|
|
164
|
-
|
|
165
162
|
const state = createSharedNodeState(
|
|
166
163
|
this.scope,
|
|
167
164
|
{
|
|
@@ -176,7 +173,7 @@ export abstract class BaseRepeatRange<Definition extends AnyRepeatRangeDefinitio
|
|
|
176
173
|
valueOptions: null,
|
|
177
174
|
value: null,
|
|
178
175
|
},
|
|
179
|
-
|
|
176
|
+
this.instanceConfig
|
|
180
177
|
);
|
|
181
178
|
|
|
182
179
|
this.state = state;
|
|
@@ -186,7 +183,7 @@ export abstract class BaseRepeatRange<Definition extends AnyRepeatRangeDefinitio
|
|
|
186
183
|
state.currentState,
|
|
187
184
|
childrenState
|
|
188
185
|
);
|
|
189
|
-
this.
|
|
186
|
+
this.instanceState = createNodeRangeInstanceState(this);
|
|
190
187
|
}
|
|
191
188
|
|
|
192
189
|
protected getLastIndex(): number {
|
|
@@ -199,7 +196,7 @@ export abstract class BaseRepeatRange<Definition extends AnyRepeatRangeDefinitio
|
|
|
199
196
|
|
|
200
197
|
private createChildren(
|
|
201
198
|
afterIndex: number,
|
|
202
|
-
|
|
199
|
+
instanceNodes: readonly StaticElement[]
|
|
203
200
|
): readonly RepeatInstance[] {
|
|
204
201
|
return this.scope.runTask(() => {
|
|
205
202
|
let initialPrecedingInstance: RepeatInstance | null;
|
|
@@ -218,7 +215,7 @@ export abstract class BaseRepeatRange<Definition extends AnyRepeatRangeDefinitio
|
|
|
218
215
|
|
|
219
216
|
const repeatRange = this as AnyDescendantNode as RepeatRange;
|
|
220
217
|
|
|
221
|
-
return
|
|
218
|
+
return instanceNodes.reduce<RepeatInstance[]>((acc, definition) => {
|
|
222
219
|
const precedingInstance = acc[acc.length - 1] ?? initialPrecedingInstance;
|
|
223
220
|
const newInstance = new RepeatInstance(repeatRange, definition, {
|
|
224
221
|
precedingInstance,
|
|
@@ -233,11 +230,11 @@ export abstract class BaseRepeatRange<Definition extends AnyRepeatRangeDefinitio
|
|
|
233
230
|
|
|
234
231
|
protected addChildren(
|
|
235
232
|
afterIndex: number,
|
|
236
|
-
|
|
233
|
+
instanceNodes: readonly StaticElement[]
|
|
237
234
|
): readonly RepeatInstance[] {
|
|
238
235
|
return this.scope.runTask(() => {
|
|
239
236
|
const initialIndex = afterIndex + 1;
|
|
240
|
-
const newInstances = this.createChildren(afterIndex,
|
|
237
|
+
const newInstances = this.createChildren(afterIndex, instanceNodes);
|
|
241
238
|
|
|
242
239
|
return this.childrenState.setChildren((currentInstances) => {
|
|
243
240
|
return insertAtIndex(currentInstances, initialIndex, newInstances);
|
|
@@ -3,15 +3,17 @@ import type { Accessor } from 'solid-js';
|
|
|
3
3
|
import { createComputed, createSignal, on } from 'solid-js';
|
|
4
4
|
import type { FormNodeID } from '../../client/identity.ts';
|
|
5
5
|
import type {
|
|
6
|
-
|
|
6
|
+
AnyRepeatDefinition,
|
|
7
7
|
RepeatInstanceNode,
|
|
8
8
|
RepeatInstanceNodeAppearances,
|
|
9
9
|
} from '../../client/repeat/RepeatInstanceNode.ts';
|
|
10
|
-
import type {
|
|
10
|
+
import type { InstanceState } from '../../client/serialization/InstanceState.ts';
|
|
11
11
|
import type { TextRange } from '../../client/TextRange.ts';
|
|
12
12
|
import type { AncestorNodeValidationState } from '../../client/validation.ts';
|
|
13
|
+
import type { TemplatedNodeAttributeSerializationError } from '../../error/TemplatedNodeAttributeSerializationError.ts';
|
|
13
14
|
import type { XFormsXPathElement } from '../../integration/xpath/adapter/XFormsXPathNode.ts';
|
|
14
|
-
import {
|
|
15
|
+
import type { StaticElement } from '../../integration/xpath/static-dom/StaticElement.ts';
|
|
16
|
+
import { createTemplatedNodeInstanceState } from '../../lib/client-reactivity/instance-state/createTemplatedNodeInstanceState.ts';
|
|
15
17
|
import type { ChildrenState } from '../../lib/reactivity/createChildrenState.ts';
|
|
16
18
|
import { createChildrenState } from '../../lib/reactivity/createChildrenState.ts';
|
|
17
19
|
import type { MaterializedChildren } from '../../lib/reactivity/materializeCurrentStateChildren.ts';
|
|
@@ -24,16 +26,18 @@ import { createNodeLabel } from '../../lib/reactivity/text/createNodeLabel.ts';
|
|
|
24
26
|
import { createAggregatedViolations } from '../../lib/reactivity/validation/createAggregatedViolations.ts';
|
|
25
27
|
import type { DescendantNodeSharedStateSpec } from '../abstract/DescendantNode.ts';
|
|
26
28
|
import { DescendantNode } from '../abstract/DescendantNode.ts';
|
|
27
|
-
import { buildChildren } from '../children.ts';
|
|
29
|
+
import { buildChildren } from '../children/buildChildren.ts';
|
|
28
30
|
import type { GeneralChildNode, RepeatRange } from '../hierarchy.ts';
|
|
29
31
|
import type { EvaluationContext } from '../internal-api/EvaluationContext.ts';
|
|
30
|
-
import type {
|
|
31
|
-
|
|
32
|
-
export type { RepeatDefinition };
|
|
32
|
+
import type { ClientReactiveSerializableTemplatedNode } from '../internal-api/serialization/ClientReactiveSerializableTemplatedNode.ts';
|
|
33
33
|
|
|
34
34
|
interface RepeatInstanceStateSpec extends DescendantNodeSharedStateSpec {
|
|
35
35
|
readonly label: Accessor<TextRange<'label'> | null>;
|
|
36
36
|
readonly hint: null;
|
|
37
|
+
|
|
38
|
+
/** @see {@link TemplatedNodeAttributeSerializationError} */
|
|
39
|
+
readonly attributes: null;
|
|
40
|
+
|
|
37
41
|
readonly children: Accessor<readonly FormNodeID[]>;
|
|
38
42
|
readonly valueOptions: null;
|
|
39
43
|
readonly value: null;
|
|
@@ -44,12 +48,17 @@ interface RepeatInstanceOptions {
|
|
|
44
48
|
}
|
|
45
49
|
|
|
46
50
|
export class RepeatInstance
|
|
47
|
-
extends DescendantNode<
|
|
51
|
+
extends DescendantNode<
|
|
52
|
+
AnyRepeatDefinition,
|
|
53
|
+
RepeatInstanceStateSpec,
|
|
54
|
+
RepeatRange,
|
|
55
|
+
GeneralChildNode
|
|
56
|
+
>
|
|
48
57
|
implements
|
|
49
58
|
RepeatInstanceNode,
|
|
50
59
|
XFormsXPathElement,
|
|
51
60
|
EvaluationContext,
|
|
52
|
-
|
|
61
|
+
ClientReactiveSerializableTemplatedNode
|
|
53
62
|
{
|
|
54
63
|
private readonly childrenState: ChildrenState<GeneralChildNode>;
|
|
55
64
|
private readonly currentIndex: Accessor<number>;
|
|
@@ -92,25 +101,27 @@ export class RepeatInstance
|
|
|
92
101
|
* @see {@link RepeatRange.appearances}
|
|
93
102
|
*/
|
|
94
103
|
readonly appearances: RepeatInstanceNodeAppearances;
|
|
104
|
+
readonly nodeOptions = null;
|
|
95
105
|
|
|
96
106
|
readonly currentState: MaterializedChildren<
|
|
97
107
|
CurrentState<RepeatInstanceStateSpec>,
|
|
98
108
|
GeneralChildNode
|
|
99
109
|
>;
|
|
100
110
|
readonly validationState: AncestorNodeValidationState;
|
|
101
|
-
readonly
|
|
111
|
+
readonly instanceState: InstanceState;
|
|
102
112
|
|
|
103
113
|
constructor(
|
|
104
114
|
override readonly parent: RepeatRange,
|
|
105
|
-
|
|
115
|
+
instanceNode: StaticElement | null,
|
|
106
116
|
options: RepeatInstanceOptions
|
|
107
117
|
) {
|
|
118
|
+
const { definition } = parent;
|
|
108
119
|
const { precedingInstance } = options;
|
|
109
120
|
const precedingIndex = precedingInstance?.currentIndex ?? (() => -1);
|
|
110
121
|
const initialIndex = precedingIndex() + 1;
|
|
111
122
|
const [currentIndex, setCurrentIndex] = createSignal(initialIndex);
|
|
112
123
|
|
|
113
|
-
super(parent, definition, {
|
|
124
|
+
super(parent, instanceNode, definition, {
|
|
114
125
|
computeReference: (): string => {
|
|
115
126
|
const currentPosition = currentIndex() + 1;
|
|
116
127
|
|
|
@@ -125,10 +136,6 @@ export class RepeatInstance
|
|
|
125
136
|
this.childrenState = childrenState;
|
|
126
137
|
this.currentIndex = currentIndex;
|
|
127
138
|
|
|
128
|
-
const sharedStateOptions = {
|
|
129
|
-
clientStateFactory: this.engineConfig.stateFactory,
|
|
130
|
-
};
|
|
131
|
-
|
|
132
139
|
const state = createSharedNodeState(
|
|
133
140
|
this.scope,
|
|
134
141
|
{
|
|
@@ -140,11 +147,12 @@ export class RepeatInstance
|
|
|
140
147
|
// TODO: only-child <group><label>
|
|
141
148
|
label: createNodeLabel(this, definition),
|
|
142
149
|
hint: null,
|
|
150
|
+
attributes: null,
|
|
143
151
|
children: childrenState.childIds,
|
|
144
152
|
valueOptions: null,
|
|
145
153
|
value: null,
|
|
146
154
|
},
|
|
147
|
-
|
|
155
|
+
this.instanceConfig
|
|
148
156
|
);
|
|
149
157
|
|
|
150
158
|
this.state = state;
|
|
@@ -177,8 +185,8 @@ export class RepeatInstance
|
|
|
177
185
|
});
|
|
178
186
|
|
|
179
187
|
childrenState.setChildren(buildChildren(this));
|
|
180
|
-
this.validationState = createAggregatedViolations(this,
|
|
181
|
-
this.
|
|
188
|
+
this.validationState = createAggregatedViolations(this, this.instanceConfig);
|
|
189
|
+
this.instanceState = createTemplatedNodeInstanceState(this);
|
|
182
190
|
}
|
|
183
191
|
|
|
184
192
|
getChildren(): readonly GeneralChildNode[] {
|
|
@@ -1,45 +1,69 @@
|
|
|
1
1
|
import { createComputed } from 'solid-js';
|
|
2
|
+
import type { LoadFormWarnings } from '../../client/form/LoadFormResult.ts';
|
|
2
3
|
import type { RepeatRangeNodeAppearances } from '../../client/repeat/BaseRepeatRangeNode.ts';
|
|
3
4
|
import type { RepeatRangeControlledNode } from '../../client/repeat/RepeatRangeControlledNode.ts';
|
|
4
5
|
import type { AncestorNodeValidationState } from '../../client/validation.ts';
|
|
5
6
|
import type { XFormsXPathNodeRange } from '../../integration/xpath/adapter/XFormsXPathNode.ts';
|
|
7
|
+
import type { StaticElement } from '../../integration/xpath/static-dom/StaticElement.ts';
|
|
6
8
|
import { createComputedExpression } from '../../lib/reactivity/createComputedExpression.ts';
|
|
7
9
|
import { createAggregatedViolations } from '../../lib/reactivity/validation/createAggregatedViolations.ts';
|
|
8
|
-
import type {
|
|
10
|
+
import type { ControlledRepeatDefinition } from '../../parse/model/RepeatDefinition.ts';
|
|
9
11
|
import type { GeneralParentNode } from '../hierarchy.ts';
|
|
10
12
|
import type { EvaluationContext } from '../internal-api/EvaluationContext.ts';
|
|
11
13
|
import { BaseRepeatRange } from './BaseRepeatRange.ts';
|
|
12
|
-
|
|
14
|
+
|
|
15
|
+
// prettier-ignore
|
|
16
|
+
type RepeatCountControlType =
|
|
17
|
+
| 'REPEAT_COUNT_CONTROL_DYNAMIC'
|
|
18
|
+
| 'REPEAT_COUNT_CONTROL_FIXED';
|
|
13
19
|
|
|
14
20
|
export class RepeatRangeControlled
|
|
15
|
-
extends BaseRepeatRange<
|
|
21
|
+
extends BaseRepeatRange<ControlledRepeatDefinition>
|
|
16
22
|
implements RepeatRangeControlledNode, XFormsXPathNodeRange, EvaluationContext
|
|
17
23
|
{
|
|
24
|
+
private readonly isInstanceCreation: boolean;
|
|
25
|
+
private readonly countControlType: RepeatCountControlType;
|
|
26
|
+
|
|
18
27
|
// RepeatRangeControlledNode
|
|
19
28
|
readonly nodeType = 'repeat-range:controlled';
|
|
20
29
|
readonly appearances: RepeatRangeNodeAppearances;
|
|
21
30
|
readonly validationState: AncestorNodeValidationState;
|
|
22
31
|
|
|
23
|
-
constructor(
|
|
32
|
+
constructor(
|
|
33
|
+
parent: GeneralParentNode,
|
|
34
|
+
instanceNodes: readonly StaticElement[],
|
|
35
|
+
definition: ControlledRepeatDefinition
|
|
36
|
+
) {
|
|
24
37
|
super(parent, definition);
|
|
25
38
|
|
|
39
|
+
this.isInstanceCreation = parent.rootDocument.initializationMode === 'create';
|
|
26
40
|
this.appearances = definition.bodyElement.appearances;
|
|
27
41
|
|
|
28
|
-
|
|
42
|
+
if (definition.count.isConstantExpression()) {
|
|
43
|
+
this.countControlType = 'REPEAT_COUNT_CONTROL_FIXED';
|
|
44
|
+
} else {
|
|
45
|
+
this.countControlType = 'REPEAT_COUNT_CONTROL_DYNAMIC';
|
|
46
|
+
}
|
|
29
47
|
|
|
30
|
-
this.
|
|
31
|
-
|
|
32
|
-
|
|
48
|
+
this.initializeControlledChildrenState(definition, instanceNodes);
|
|
49
|
+
|
|
50
|
+
this.validationState = createAggregatedViolations(this, this.instanceConfig);
|
|
33
51
|
}
|
|
34
52
|
|
|
35
|
-
private initializeControlledChildrenState(
|
|
53
|
+
private initializeControlledChildrenState(
|
|
54
|
+
definition: ControlledRepeatDefinition,
|
|
55
|
+
instanceNodes: readonly StaticElement[]
|
|
56
|
+
): void {
|
|
36
57
|
this.scope.runTask(() => {
|
|
37
|
-
const { count,
|
|
58
|
+
const { count, template } = definition;
|
|
59
|
+
const repeatInstanceNodes = definition.omitTemplate(instanceNodes);
|
|
38
60
|
const computeCount = createComputedExpression(this, count, {
|
|
39
61
|
defaultValue: 0,
|
|
40
62
|
});
|
|
41
63
|
|
|
42
|
-
createComputed
|
|
64
|
+
createComputed((previousCountComputation: number | null = null): number => {
|
|
65
|
+
const previousCount = previousCountComputation ?? 0;
|
|
66
|
+
|
|
43
67
|
let currentCount = computeCount();
|
|
44
68
|
|
|
45
69
|
if (Number.isFinite(currentCount) && currentCount < 0) {
|
|
@@ -58,17 +82,19 @@ export class RepeatRangeControlled
|
|
|
58
82
|
return previousCount;
|
|
59
83
|
}
|
|
60
84
|
|
|
85
|
+
this.warnDroppedInstanceNodes(repeatInstanceNodes, previousCountComputation, currentCount);
|
|
86
|
+
|
|
61
87
|
if (currentCount > previousCount) {
|
|
62
88
|
const delta = currentCount - previousCount;
|
|
63
|
-
const
|
|
64
|
-
.fill(
|
|
65
|
-
.map((
|
|
89
|
+
const inputNodes = Array(delta)
|
|
90
|
+
.fill(null)
|
|
91
|
+
.map((_, index) => {
|
|
66
92
|
const instanceIndex = previousCount + index;
|
|
67
93
|
|
|
68
|
-
return
|
|
94
|
+
return repeatInstanceNodes[instanceIndex] ?? template;
|
|
69
95
|
});
|
|
70
96
|
|
|
71
|
-
this.addChildren(previousCount - 1,
|
|
97
|
+
this.addChildren(previousCount - 1, inputNodes);
|
|
72
98
|
} else {
|
|
73
99
|
const delta = previousCount - currentCount;
|
|
74
100
|
|
|
@@ -76,7 +102,54 @@ export class RepeatRangeControlled
|
|
|
76
102
|
}
|
|
77
103
|
|
|
78
104
|
return currentCount;
|
|
79
|
-
}
|
|
105
|
+
});
|
|
80
106
|
});
|
|
81
107
|
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Note: we do not warn about dropping "excess" repeat instances...
|
|
111
|
+
*
|
|
112
|
+
* - ... after the instance is fully loaded: dropping repeat instances after
|
|
113
|
+
* that point is an expected behavior of _dynamically-controlled repeats_
|
|
114
|
+
* (i.e. those defined with `jr:count`), and it does not occur for
|
|
115
|
+
* _fixed-controlled repeats_ (i.e. defined with `jr:noAddRemove`);
|
|
116
|
+
*
|
|
117
|
+
* - ... for dynamic (`jr:count`) repeats _in newly created form instances_, i.e. instances whose input instance
|
|
118
|
+
* nodes are derived from the _form definition_: those form-defined repeat
|
|
119
|
+
* instances are not "dropped", instead they're retained in memory to be
|
|
120
|
+
* added as count is recomputed to a larger value.
|
|
121
|
+
*
|
|
122
|
+
* @todo ^ it is pretty likely that retain-in-memory behavior also applies to
|
|
123
|
+
* instance state which has been serialized and restored as well! In this way,
|
|
124
|
+
* it's possible we're not really "dropping" those nodes, only deferring their
|
|
125
|
+
* restoration. Is this what we want?
|
|
126
|
+
*
|
|
127
|
+
* @todo Design and produce {@link LoadFormWarnings | warnings} as values!
|
|
128
|
+
*/
|
|
129
|
+
private warnDroppedInstanceNodes(
|
|
130
|
+
repeatInstanceNodes: readonly StaticElement[],
|
|
131
|
+
previousCountComputation: number | null,
|
|
132
|
+
initialCount: number
|
|
133
|
+
): void {
|
|
134
|
+
// See this method's JSDoc notes for reasoning!
|
|
135
|
+
if (this.isInstanceCreation) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// See this method's JSDoc notes for reasoning!
|
|
140
|
+
const isInstanceLoad = previousCountComputation == null;
|
|
141
|
+
|
|
142
|
+
if (isInstanceLoad && this.countControlType === 'REPEAT_COUNT_CONTROL_DYNAMIC') {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const droppedCount = repeatInstanceNodes.length - initialCount;
|
|
147
|
+
|
|
148
|
+
if (droppedCount > 0) {
|
|
149
|
+
// eslint-disable-next-line no-console
|
|
150
|
+
console.warn(
|
|
151
|
+
`Dropped ${droppedCount} repeat instances for repeat range ${this.contextReference()}`
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
82
155
|
}
|
|
@@ -2,8 +2,9 @@ import type { RepeatRangeNodeAppearances } from '../../client/repeat/BaseRepeatR
|
|
|
2
2
|
import type { RepeatRangeUncontrolledNode } from '../../client/repeat/RepeatRangeUncontrolledNode.ts';
|
|
3
3
|
import type { AncestorNodeValidationState } from '../../client/validation.ts';
|
|
4
4
|
import type { XFormsXPathNodeRange } from '../../integration/xpath/adapter/XFormsXPathNode.ts';
|
|
5
|
+
import type { StaticElement } from '../../integration/xpath/static-dom/StaticElement.ts';
|
|
5
6
|
import { createAggregatedViolations } from '../../lib/reactivity/validation/createAggregatedViolations.ts';
|
|
6
|
-
import type {
|
|
7
|
+
import type { UncontrolledRepeatDefinition } from '../../parse/model/RepeatDefinition.ts';
|
|
7
8
|
import type { GeneralParentNode } from '../hierarchy.ts';
|
|
8
9
|
import type { EvaluationContext } from '../internal-api/EvaluationContext.ts';
|
|
9
10
|
import type { Root } from '../Root.ts';
|
|
@@ -11,7 +12,7 @@ import { BaseRepeatRange } from './BaseRepeatRange.ts';
|
|
|
11
12
|
import { RepeatInstance } from './RepeatInstance.ts';
|
|
12
13
|
|
|
13
14
|
export class RepeatRangeUncontrolled
|
|
14
|
-
extends BaseRepeatRange<
|
|
15
|
+
extends BaseRepeatRange<UncontrolledRepeatDefinition>
|
|
15
16
|
implements RepeatRangeUncontrolledNode, XFormsXPathNodeRange, EvaluationContext
|
|
16
17
|
{
|
|
17
18
|
// RepeatRangeUncontrolledNode
|
|
@@ -19,16 +20,16 @@ export class RepeatRangeUncontrolled
|
|
|
19
20
|
readonly appearances: RepeatRangeNodeAppearances;
|
|
20
21
|
readonly validationState: AncestorNodeValidationState;
|
|
21
22
|
|
|
22
|
-
constructor(
|
|
23
|
+
constructor(
|
|
24
|
+
parent: GeneralParentNode,
|
|
25
|
+
instanceNodes: readonly StaticElement[],
|
|
26
|
+
definition: UncontrolledRepeatDefinition
|
|
27
|
+
) {
|
|
23
28
|
super(parent, definition);
|
|
24
29
|
|
|
25
30
|
this.appearances = definition.bodyElement.appearances;
|
|
26
|
-
|
|
27
|
-
this.
|
|
28
|
-
|
|
29
|
-
this.validationState = createAggregatedViolations(this, {
|
|
30
|
-
clientStateFactory: this.engineConfig.stateFactory,
|
|
31
|
-
});
|
|
31
|
+
this.addChildren(-1, definition.omitTemplate(instanceNodes));
|
|
32
|
+
this.validationState = createAggregatedViolations(this, this.instanceConfig);
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
// RepeatRangeUncontrolledNode
|
package/src/instance/resource.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { UnreachableError } from '@getodk/common/lib/error/UnreachableError.ts';
|
|
2
2
|
import { getBlobText } from '@getodk/common/lib/web-compat/blob.ts';
|
|
3
|
-
import type { FormResource } from '../client/
|
|
3
|
+
import type { FormResource } from '../client/form/FormResource.ts';
|
|
4
4
|
import type { FetchResource, FetchResourceResponse } from '../client/resources.ts';
|
|
5
5
|
|
|
6
6
|
export type { FetchResource, FetchResourceResponse, FormResource };
|
|
@@ -10,7 +10,10 @@ export interface ResourceOptions {
|
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
const fetchTextFromURL = async (resource: URL, options: ResourceOptions): Promise<string> => {
|
|
13
|
-
|
|
13
|
+
// destructuring prevents "Failed to execute 'fetch' on 'Window': Illegal invocation"
|
|
14
|
+
const { fetchResource } = options;
|
|
15
|
+
|
|
16
|
+
const response = await fetchResource(resource);
|
|
14
17
|
|
|
15
18
|
return response.text();
|
|
16
19
|
};
|
|
@@ -73,3 +76,16 @@ export const retrieveSourceXMLResource = async (
|
|
|
73
76
|
|
|
74
77
|
return text;
|
|
75
78
|
};
|
|
79
|
+
|
|
80
|
+
interface RetrieveFormDefinitionOptions {
|
|
81
|
+
readonly fetchFormDefinition: FetchResource;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export const retrieveFormDefinition = async (
|
|
85
|
+
resource: FormResource,
|
|
86
|
+
options: RetrieveFormDefinitionOptions
|
|
87
|
+
): Promise<ResourceXML> => {
|
|
88
|
+
return retrieveSourceXMLResource(resource, {
|
|
89
|
+
fetchResource: options.fetchFormDefinition,
|
|
90
|
+
});
|
|
91
|
+
};
|
|
@@ -1,9 +1,120 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type {
|
|
1
|
+
import { XPathNodeKindKey } from '@getodk/xpath';
|
|
2
|
+
import type { Accessor } from 'solid-js';
|
|
3
|
+
import type { TextRange } from '../../client/TextRange.ts';
|
|
4
|
+
import type { ValueType } from '../../client/ValueType.ts';
|
|
5
|
+
import type { UnsupportedControlNodeType } from '../../client/node-types.ts';
|
|
6
|
+
import type { UploadNode, UploadNodeDefinition } from '../../client/unsupported/UploadNode.ts';
|
|
7
|
+
import type { XFormsXPathElement } from '../../integration/xpath/adapter/XFormsXPathNode.ts';
|
|
8
|
+
import type { StaticLeafElement } from '../../integration/xpath/static-dom/StaticElement.ts';
|
|
9
|
+
import type {
|
|
10
|
+
TempUnsupportedInputValue,
|
|
11
|
+
TempUnsupportedRuntimeValue,
|
|
12
|
+
} from '../../lib/codecs/TempUnsupportedControlCodec.ts';
|
|
13
|
+
import { TempUnsupportedControlCodec } from '../../lib/codecs/TempUnsupportedControlCodec.ts';
|
|
14
|
+
import type { CurrentState } from '../../lib/reactivity/node-state/createCurrentState.ts';
|
|
15
|
+
import type { EngineState } from '../../lib/reactivity/node-state/createEngineState.ts';
|
|
16
|
+
import type { SharedNodeState } from '../../lib/reactivity/node-state/createSharedNodeState.ts';
|
|
17
|
+
import { createSharedNodeState } from '../../lib/reactivity/node-state/createSharedNodeState.ts';
|
|
18
|
+
import { createFieldHint } from '../../lib/reactivity/text/createFieldHint.ts';
|
|
19
|
+
import { createNodeLabel } from '../../lib/reactivity/text/createNodeLabel.ts';
|
|
20
|
+
import type { UnknownAppearanceDefinition } from '../../parse/body/appearance/unknownAppearanceParser.ts';
|
|
21
|
+
import { ValueNode, type ValueNodeStateSpec } from '../abstract/ValueNode.ts';
|
|
22
|
+
import type { GeneralParentNode } from '../hierarchy.ts';
|
|
23
|
+
import type { EvaluationContext } from '../internal-api/EvaluationContext.ts';
|
|
24
|
+
import type { ValidationContext } from '../internal-api/ValidationContext.ts';
|
|
25
|
+
import type { ClientReactiveSerializableValueNode } from '../internal-api/serialization/ClientReactiveSerializableValueNode.ts';
|
|
3
26
|
|
|
4
|
-
|
|
27
|
+
interface UploadControlStateSpec extends ValueNodeStateSpec<TempUnsupportedRuntimeValue> {
|
|
28
|
+
readonly label: Accessor<TextRange<'label'> | null>;
|
|
29
|
+
readonly hint: Accessor<TextRange<'hint'> | null>;
|
|
30
|
+
readonly valueOptions: null;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const codecs = {
|
|
34
|
+
string: new TempUnsupportedControlCodec('string'),
|
|
35
|
+
int: new TempUnsupportedControlCodec('int'),
|
|
36
|
+
decimal: new TempUnsupportedControlCodec('decimal'),
|
|
37
|
+
boolean: new TempUnsupportedControlCodec('boolean'),
|
|
38
|
+
date: new TempUnsupportedControlCodec('date'),
|
|
39
|
+
time: new TempUnsupportedControlCodec('time'),
|
|
40
|
+
dateTime: new TempUnsupportedControlCodec('dateTime'),
|
|
41
|
+
geopoint: new TempUnsupportedControlCodec('geopoint'),
|
|
42
|
+
geotrace: new TempUnsupportedControlCodec('geotrace'),
|
|
43
|
+
geoshape: new TempUnsupportedControlCodec('geoshape'),
|
|
44
|
+
binary: new TempUnsupportedControlCodec('binary'),
|
|
45
|
+
barcode: new TempUnsupportedControlCodec('barcode'),
|
|
46
|
+
intent: new TempUnsupportedControlCodec('intent'),
|
|
47
|
+
} as const;
|
|
48
|
+
|
|
49
|
+
class UnsupportedControlWriteError extends Error {
|
|
50
|
+
constructor(type: UnsupportedControlNodeType) {
|
|
51
|
+
super(`Cannot write state for node (type: ${type}) - not implemented`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export class UploadControl
|
|
56
|
+
extends ValueNode<
|
|
57
|
+
ValueType,
|
|
58
|
+
UploadNodeDefinition,
|
|
59
|
+
TempUnsupportedRuntimeValue,
|
|
60
|
+
TempUnsupportedInputValue
|
|
61
|
+
>
|
|
62
|
+
implements
|
|
63
|
+
UploadNode,
|
|
64
|
+
XFormsXPathElement,
|
|
65
|
+
EvaluationContext,
|
|
66
|
+
ValidationContext,
|
|
67
|
+
ClientReactiveSerializableValueNode
|
|
68
|
+
{
|
|
69
|
+
// XFormsXPathElement
|
|
70
|
+
override readonly [XPathNodeKindKey] = 'element';
|
|
71
|
+
|
|
72
|
+
// InstanceNode
|
|
73
|
+
protected readonly state: SharedNodeState<UploadControlStateSpec>;
|
|
74
|
+
protected readonly engineState: EngineState<UploadControlStateSpec>;
|
|
75
|
+
|
|
76
|
+
// UploadNode
|
|
5
77
|
readonly nodeType = 'upload';
|
|
78
|
+
readonly appearances: UnknownAppearanceDefinition;
|
|
79
|
+
readonly nodeOptions = null;
|
|
80
|
+
readonly currentState: CurrentState<UploadControlStateSpec>;
|
|
81
|
+
|
|
82
|
+
constructor(
|
|
83
|
+
parent: GeneralParentNode,
|
|
84
|
+
instanceNode: StaticLeafElement | null,
|
|
85
|
+
definition: UploadNodeDefinition
|
|
86
|
+
) {
|
|
87
|
+
const codec = codecs[definition.valueType];
|
|
88
|
+
|
|
89
|
+
super(parent, instanceNode, definition, codec);
|
|
90
|
+
|
|
91
|
+
this.appearances = definition.bodyElement.appearances;
|
|
92
|
+
|
|
93
|
+
const state = createSharedNodeState(
|
|
94
|
+
this.scope,
|
|
95
|
+
{
|
|
96
|
+
reference: this.contextReference,
|
|
97
|
+
readonly: this.isReadonly,
|
|
98
|
+
relevant: this.isRelevant,
|
|
99
|
+
required: this.isRequired,
|
|
100
|
+
|
|
101
|
+
label: createNodeLabel(this, definition),
|
|
102
|
+
hint: createFieldHint(this, definition),
|
|
103
|
+
children: null,
|
|
104
|
+
valueOptions: null,
|
|
105
|
+
value: this.valueState,
|
|
106
|
+
instanceValue: this.getInstanceValue,
|
|
107
|
+
},
|
|
108
|
+
this.instanceConfig
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
this.state = state;
|
|
112
|
+
this.engineState = state.engineState;
|
|
113
|
+
this.currentState = state.currentState;
|
|
114
|
+
}
|
|
6
115
|
|
|
7
|
-
//
|
|
8
|
-
|
|
116
|
+
// UnsupportedControlNode
|
|
117
|
+
setValue(_: never): never {
|
|
118
|
+
throw new UnsupportedControlWriteError(this.nodeType);
|
|
119
|
+
}
|
|
9
120
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { XFormsItextTranslationMap, XFormsSecondaryInstanceMap } from '@getodk/xpath';
|
|
2
2
|
import { XFormsXPathEvaluator } from '@getodk/xpath';
|
|
3
3
|
import type { PrimaryInstance } from '../../instance/PrimaryInstance.ts';
|
|
4
|
-
import type { ItextTranslationRootDefinition } from '../../parse/model/
|
|
5
|
-
import type { SecondaryInstanceRootDefinition } from '../../parse/model/SecondaryInstance/
|
|
4
|
+
import type { ItextTranslationRootDefinition } from '../../parse/model/ItextTranslationsDefinition.ts';
|
|
5
|
+
import type { SecondaryInstanceRootDefinition } from '../../parse/model/SecondaryInstance/SecondaryInstancesDefinition.ts';
|
|
6
6
|
import { engineDOMAdapter } from './adapter/engineDOMAdapter.ts';
|
|
7
7
|
import type { EngineXPathNode } from './adapter/kind.ts';
|
|
8
8
|
|