@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,82 +1,78 @@
|
|
|
1
|
+
import type { StaticElement } from '../../integration/xpath/static-dom/StaticElement.ts';
|
|
2
|
+
import { NamespaceDeclarationMap } from '../../lib/names/NamespaceDeclarationMap.ts';
|
|
3
|
+
import { QualifiedName } from '../../lib/names/QualifiedName.ts';
|
|
1
4
|
import type { BodyClassList } from '../body/BodyDefinition.ts';
|
|
2
5
|
import type { XFormDefinition } from '../XFormDefinition.ts';
|
|
3
|
-
import type { BindDefinition } from './BindDefinition.ts';
|
|
4
|
-
import type { FormSubmissionDefinition } from './FormSubmissionDefinition.ts';
|
|
5
6
|
import { LeafNodeDefinition } from './LeafNodeDefinition.ts';
|
|
6
7
|
import type { ModelDefinition } from './ModelDefinition.ts';
|
|
7
|
-
import type {
|
|
8
|
-
|
|
9
|
-
NodeDefinition,
|
|
10
|
-
ParentNodeDefinition,
|
|
11
|
-
} from './NodeDefinition.ts';
|
|
8
|
+
import type { ChildNodeDefinition, ParentNodeDefinition } from './NodeDefinition.ts';
|
|
9
|
+
import { NodeDefinition } from './NodeDefinition.ts';
|
|
12
10
|
import { NoteNodeDefinition } from './NoteNodeDefinition.ts';
|
|
13
|
-
import {
|
|
11
|
+
import { RangeNodeDefinition } from './RangeNodeDefinition.ts';
|
|
12
|
+
import { RepeatDefinition } from './RepeatDefinition.ts';
|
|
13
|
+
import { RootAttributeMap } from './RootAttributeMap.ts';
|
|
14
|
+
import type { SubmissionDefinition } from './SubmissionDefinition.ts';
|
|
14
15
|
import { SubtreeDefinition } from './SubtreeDefinition.ts';
|
|
15
16
|
|
|
16
|
-
export class RootDefinition
|
|
17
|
+
export class RootDefinition extends NodeDefinition<'root'> {
|
|
17
18
|
readonly type = 'root';
|
|
18
|
-
readonly
|
|
19
|
-
readonly nodeset: string;
|
|
20
|
-
readonly nodeName: string;
|
|
19
|
+
readonly qualifiedName: QualifiedName;
|
|
21
20
|
readonly bodyElement = null;
|
|
22
21
|
readonly root = this;
|
|
23
22
|
readonly parent = null;
|
|
23
|
+
readonly template: StaticElement;
|
|
24
|
+
readonly namespaceDeclarations: NamespaceDeclarationMap;
|
|
25
|
+
readonly attributes: RootAttributeMap;
|
|
24
26
|
readonly children: readonly ChildNodeDefinition[];
|
|
25
|
-
readonly instances = null;
|
|
26
|
-
readonly node: Element;
|
|
27
|
-
readonly defaultValue = null;
|
|
28
27
|
|
|
29
28
|
readonly isTranslated = false;
|
|
30
29
|
|
|
31
30
|
constructor(
|
|
32
31
|
protected readonly form: XFormDefinition,
|
|
33
32
|
protected readonly model: ModelDefinition,
|
|
34
|
-
readonly submission:
|
|
33
|
+
readonly submission: SubmissionDefinition,
|
|
35
34
|
readonly classes: BodyClassList
|
|
36
35
|
) {
|
|
36
|
+
const template = model.instance.root;
|
|
37
|
+
const qualifiedName = template.qualifiedName;
|
|
38
|
+
const nodeName = qualifiedName.getPrefixedName();
|
|
39
|
+
|
|
37
40
|
// TODO: theoretically the pertinent step in the bind's `nodeset` *could* be
|
|
38
41
|
// namespaced. It also may make more sense to determine the root nodeset
|
|
39
42
|
// earlier (i.e. in the appropriate definition class).
|
|
40
|
-
|
|
41
|
-
// TODO: while it's unlikely a form actually defines a <bind> for the root,
|
|
42
|
-
// if it did, bind nodesets are not yet normalized, so `/root` may currently
|
|
43
|
-
// be defined as `/ root` (or even `/ *` or any other valid expression
|
|
44
|
-
// resolving to the root).
|
|
45
|
-
const { primaryInstanceRoot } = form.xformDOM;
|
|
46
|
-
const { localName: rootNodeName } = primaryInstanceRoot;
|
|
47
|
-
|
|
48
|
-
this.nodeName = rootNodeName;
|
|
49
|
-
|
|
50
|
-
const nodeset = `/${rootNodeName}`;
|
|
43
|
+
const nodeset = `/${nodeName}`;
|
|
51
44
|
const bind = model.binds.get(nodeset);
|
|
52
45
|
|
|
53
46
|
if (bind == null) {
|
|
54
47
|
throw new Error('Missing root node bind definition');
|
|
55
48
|
}
|
|
56
49
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
this.
|
|
60
|
-
this.
|
|
50
|
+
super(bind);
|
|
51
|
+
|
|
52
|
+
this.qualifiedName = qualifiedName;
|
|
53
|
+
this.template = template;
|
|
54
|
+
this.attributes = RootAttributeMap.from(this, template);
|
|
55
|
+
this.namespaceDeclarations = new NamespaceDeclarationMap(this);
|
|
56
|
+
this.children = this.buildSubtree(this, template);
|
|
61
57
|
}
|
|
62
58
|
|
|
63
|
-
buildSubtree(parent: ParentNodeDefinition): readonly ChildNodeDefinition[] {
|
|
59
|
+
buildSubtree(parent: ParentNodeDefinition, node: StaticElement): readonly ChildNodeDefinition[] {
|
|
64
60
|
const { form, model } = this;
|
|
65
61
|
const { body } = form;
|
|
66
62
|
const { binds } = model;
|
|
67
|
-
const { bind: parentBind
|
|
63
|
+
const { bind: parentBind } = parent;
|
|
68
64
|
const { nodeset: parentNodeset } = parentBind;
|
|
69
65
|
|
|
70
|
-
const childrenByName = new Map<string, [
|
|
66
|
+
const childrenByName = new Map<string, [StaticElement, ...StaticElement[]]>();
|
|
71
67
|
|
|
72
|
-
for (const child of node.
|
|
73
|
-
const
|
|
68
|
+
for (const child of node.childElements) {
|
|
69
|
+
const nodeName = child.qualifiedName.getPrefixedName();
|
|
74
70
|
|
|
75
|
-
let elements = childrenByName.get(
|
|
71
|
+
let elements = childrenByName.get(nodeName);
|
|
76
72
|
|
|
77
73
|
if (elements == null) {
|
|
78
74
|
elements = [child];
|
|
79
|
-
childrenByName.set(
|
|
75
|
+
childrenByName.set(nodeName, elements);
|
|
80
76
|
} else {
|
|
81
77
|
// TODO: check if previous element exists, was it previous element
|
|
82
78
|
// sibling. Highly likely this should otherwise fail!
|
|
@@ -84,14 +80,14 @@ export class RootDefinition implements NodeDefinition<'root'> {
|
|
|
84
80
|
}
|
|
85
81
|
}
|
|
86
82
|
|
|
87
|
-
return Array.from(childrenByName).map(([
|
|
88
|
-
const nodeset = `${parentNodeset}/${
|
|
83
|
+
return Array.from(childrenByName).map(([nodeName, children]) => {
|
|
84
|
+
const nodeset = `${parentNodeset}/${nodeName}`;
|
|
89
85
|
const bind = binds.getOrCreateBindDefinition(nodeset);
|
|
90
86
|
const bodyElement = body.getBodyElement(nodeset);
|
|
91
87
|
const [firstChild, ...restChildren] = children;
|
|
92
88
|
|
|
93
89
|
if (bodyElement?.type === 'repeat') {
|
|
94
|
-
return
|
|
90
|
+
return RepeatDefinition.from(parent, bind, bodyElement, children);
|
|
95
91
|
}
|
|
96
92
|
|
|
97
93
|
if (restChildren.length) {
|
|
@@ -99,9 +95,12 @@ export class RootDefinition implements NodeDefinition<'root'> {
|
|
|
99
95
|
}
|
|
100
96
|
|
|
101
97
|
const element = firstChild;
|
|
102
|
-
const isLeafNode = element.childElementCount === 0;
|
|
103
98
|
|
|
104
|
-
if (
|
|
99
|
+
if (element.isLeafElement()) {
|
|
100
|
+
if (bodyElement?.type === 'range') {
|
|
101
|
+
return RangeNodeDefinition.from(parent, bind, bodyElement, element);
|
|
102
|
+
}
|
|
103
|
+
|
|
105
104
|
return (
|
|
106
105
|
NoteNodeDefinition.from(parent, bind, bodyElement, element) ??
|
|
107
106
|
new LeafNodeDefinition(parent, bind, bodyElement, element)
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import { JRResourceURL } from '@getodk/common/jr-resources/JRResourceURL.ts';
|
|
2
2
|
import { UnreachableError } from '@getodk/common/lib/error/UnreachableError.ts';
|
|
3
|
-
import type {
|
|
3
|
+
import type {
|
|
4
|
+
XFORMS_KNOWN_ATTRIBUTE,
|
|
5
|
+
XFORMS_LOCAL_NAME,
|
|
6
|
+
XFormsSecondaryInstanceMap,
|
|
7
|
+
} from '@getodk/xpath';
|
|
4
8
|
import { ErrorProductionDesignPendingError } from '../../../error/ErrorProductionDesignPendingError.ts';
|
|
5
9
|
import type { EngineXPathNode } from '../../../integration/xpath/adapter/kind.ts';
|
|
10
|
+
import type { StaticDocument } from '../../../integration/xpath/static-dom/StaticDocument.ts';
|
|
11
|
+
import type { StaticElement } from '../../../integration/xpath/static-dom/StaticElement.ts';
|
|
6
12
|
import type { XFormDOM } from '../../XFormDOM.ts';
|
|
7
|
-
import { SecondaryInstanceRootDefinition } from './SecondaryInstanceRootDefinition.ts';
|
|
8
13
|
import { BlankSecondaryInstanceSource } from './sources/BlankSecondaryInstanceSource.ts';
|
|
9
14
|
import { CSVExternalSecondaryInstanceSource } from './sources/CSVExternalSecondaryInstance.ts';
|
|
10
15
|
import type { ExternalSecondaryInstanceResourceLoadOptions } from './sources/ExternalSecondaryInstanceResource.ts';
|
|
@@ -14,6 +19,22 @@ import { InternalSecondaryInstanceSource } from './sources/InternalSecondaryInst
|
|
|
14
19
|
import type { SecondaryInstanceSource } from './sources/SecondaryInstanceSource.ts';
|
|
15
20
|
import { XMLExternalSecondaryInstanceSource } from './sources/XMLExternalSecondaryInstanceSource.ts';
|
|
16
21
|
|
|
22
|
+
export interface SecondaryInstanceDefinition extends StaticDocument {
|
|
23
|
+
readonly rootDocument: SecondaryInstanceDefinition;
|
|
24
|
+
readonly root: SecondaryInstanceRootDefinition;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface SecondaryInstanceRootDefinition extends StaticElement {
|
|
28
|
+
readonly [XFORMS_LOCAL_NAME]: 'instance';
|
|
29
|
+
readonly [XFORMS_KNOWN_ATTRIBUTE]: 'id';
|
|
30
|
+
|
|
31
|
+
readonly rootDocument: SecondaryInstanceDefinition;
|
|
32
|
+
readonly root: SecondaryInstanceRootDefinition;
|
|
33
|
+
|
|
34
|
+
getAttributeValue(localName: 'id'): string;
|
|
35
|
+
getAttributeValue(localName: string): string | null;
|
|
36
|
+
}
|
|
37
|
+
|
|
17
38
|
export class SecondaryInstancesDefinition
|
|
18
39
|
extends Map<string, SecondaryInstanceRootDefinition>
|
|
19
40
|
implements XFormsSecondaryInstanceMap<EngineXPathNode>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { StaticDocument } from '../../../integration/xpath/static-dom/StaticDocument.ts';
|
|
2
|
+
import type { SecondaryInstanceDefinition } from './SecondaryInstancesDefinition.ts';
|
|
3
|
+
|
|
4
|
+
type AssertSecondaryInstanceDefinition = (
|
|
5
|
+
doc: StaticDocument
|
|
6
|
+
) => asserts doc is SecondaryInstanceDefinition;
|
|
7
|
+
|
|
8
|
+
export const assertSecondaryInstanceDefinition: AssertSecondaryInstanceDefinition = ({ root }) => {
|
|
9
|
+
const id = root.getAttributeValue('id');
|
|
10
|
+
|
|
11
|
+
if (id == null) {
|
|
12
|
+
throw new Error();
|
|
13
|
+
}
|
|
14
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { StaticDocument } from '../../../integration/xpath/static-dom/StaticDocument.ts';
|
|
2
|
+
import type { StaticElementOptions } from '../../../integration/xpath/static-dom/StaticElement.ts';
|
|
3
|
+
import { assertSecondaryInstanceDefinition } from './assertSecondaryInstanceDefinition.ts';
|
|
4
|
+
import type { SecondaryInstanceDefinition } from './SecondaryInstancesDefinition.ts';
|
|
5
|
+
|
|
6
|
+
// prettier-ignore
|
|
7
|
+
type SecondaryInstanceRoot =
|
|
8
|
+
| StaticElementOptions
|
|
9
|
+
| '';
|
|
10
|
+
|
|
11
|
+
export const defineSecondaryInstance = (
|
|
12
|
+
instanceId: string,
|
|
13
|
+
secondaryInstanceRoot: SecondaryInstanceRoot
|
|
14
|
+
): SecondaryInstanceDefinition => {
|
|
15
|
+
const doc = new StaticDocument({
|
|
16
|
+
documentRoot: {
|
|
17
|
+
name: 'instance',
|
|
18
|
+
attributes: [
|
|
19
|
+
{
|
|
20
|
+
name: 'id',
|
|
21
|
+
value: instanceId,
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
children: [secondaryInstanceRoot],
|
|
25
|
+
},
|
|
26
|
+
nodesetPrefix: `instance('${instanceId}')`,
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
assertSecondaryInstanceDefinition(doc);
|
|
30
|
+
|
|
31
|
+
return doc;
|
|
32
|
+
};
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
import { XFORMS_NAMESPACE_URI } from '@getodk/common/constants/xmlns.ts';
|
|
2
1
|
import type { JRResourceURL } from '@getodk/common/jr-resources/JRResourceURL.ts';
|
|
3
|
-
import type { StaticNode } from '../../../../integration/xpath/static-dom/StaticNode.ts';
|
|
4
|
-
import { parseStaticDocumentFromDOMSubtree } from '../../../shared/parseStaticDocumentFromDOMSubtree.ts';
|
|
5
2
|
import type { DOMSecondaryInstanceElement } from '../../../XFormDOM.ts';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
3
|
+
import { defineSecondaryInstance } from '../defineSecondaryInstance.ts';
|
|
4
|
+
import type { SecondaryInstanceDefinition } from '../SecondaryInstancesDefinition.ts';
|
|
8
5
|
import { SecondaryInstanceSource } from './SecondaryInstanceSource.ts';
|
|
9
6
|
|
|
10
7
|
export class BlankSecondaryInstanceSource extends SecondaryInstanceSource<'blank'> {
|
|
@@ -16,25 +13,7 @@ export class BlankSecondaryInstanceSource extends SecondaryInstanceSource<'blank
|
|
|
16
13
|
super('blank', instanceId, resourceURL, domElement);
|
|
17
14
|
}
|
|
18
15
|
|
|
19
|
-
/**
|
|
20
|
-
* @todo there is really no sense in using the DOM for this, other than it was
|
|
21
|
-
* quicker/more ergonomic than constructing the requisite {@link StaticNode}
|
|
22
|
-
* structures directly. Pretty good sign those constructor signatures could
|
|
23
|
-
* use some TLC!
|
|
24
|
-
*/
|
|
25
16
|
parseDefinition(): SecondaryInstanceDefinition {
|
|
26
|
-
|
|
27
|
-
XFORMS_NAMESPACE_URI,
|
|
28
|
-
'instance'
|
|
29
|
-
);
|
|
30
|
-
const instanceElement = xmlDocument.documentElement;
|
|
31
|
-
|
|
32
|
-
instanceElement.setAttribute('id', this.instanceId);
|
|
33
|
-
|
|
34
|
-
return parseStaticDocumentFromDOMSubtree(
|
|
35
|
-
SecondaryInstanceDefinition,
|
|
36
|
-
SecondaryInstanceRootDefinition,
|
|
37
|
-
instanceElement
|
|
38
|
-
);
|
|
17
|
+
return defineSecondaryInstance(this.instanceId, '');
|
|
39
18
|
}
|
|
40
19
|
}
|
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
import { XFORMS_NAMESPACE_URI } from '@getodk/common/constants/xmlns.ts';
|
|
2
1
|
import type { JRResourceURL } from '@getodk/common/jr-resources/JRResourceURL.ts';
|
|
3
2
|
import * as papa from 'papaparse';
|
|
4
3
|
import { ErrorProductionDesignPendingError } from '../../../../error/ErrorProductionDesignPendingError.ts';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { SecondaryInstanceDefinition } from '../SecondaryInstanceDefinition.ts';
|
|
9
|
-
import { SecondaryInstanceRootDefinition } from '../SecondaryInstanceRootDefinition.ts';
|
|
4
|
+
import type { StaticElementOptions } from '../../../../integration/xpath/static-dom/StaticElement.ts';
|
|
5
|
+
import { defineSecondaryInstance } from '../defineSecondaryInstance.ts';
|
|
6
|
+
import type { SecondaryInstanceDefinition } from '../SecondaryInstancesDefinition.ts';
|
|
10
7
|
import { ExternalSecondaryInstanceSource } from './ExternalSecondaryInstanceSource.ts';
|
|
11
8
|
|
|
12
9
|
type CSVColumn = string;
|
|
@@ -88,89 +85,39 @@ interface CSVExternalSecondaryInstanceItemColumn {
|
|
|
88
85
|
|
|
89
86
|
type CSVExternalSecondaryInstanceItem = readonly CSVExternalSecondaryInstanceItemColumn[];
|
|
90
87
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
super(
|
|
96
|
-
parent,
|
|
97
|
-
() => [],
|
|
98
|
-
(self) => [new StaticText(self, cellValue)],
|
|
99
|
-
{
|
|
100
|
-
namespaceURI: XFORMS_NAMESPACE_URI,
|
|
101
|
-
localName: columnName,
|
|
102
|
-
}
|
|
103
|
-
);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
88
|
+
const columnChildOption = (
|
|
89
|
+
column: CSVExternalSecondaryInstanceItemColumn
|
|
90
|
+
): StaticElementOptions => {
|
|
91
|
+
const { columnName, cellValue } = column;
|
|
106
92
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
(self) => {
|
|
113
|
-
return item.map((column) => {
|
|
114
|
-
return new CSVExternalSecondaryInstanceColumnElement(self, column);
|
|
115
|
-
});
|
|
116
|
-
},
|
|
117
|
-
{
|
|
118
|
-
namespaceURI: XFORMS_NAMESPACE_URI,
|
|
119
|
-
localName: 'item',
|
|
120
|
-
}
|
|
121
|
-
);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
93
|
+
return {
|
|
94
|
+
name: columnName,
|
|
95
|
+
children: [cellValue],
|
|
96
|
+
};
|
|
97
|
+
};
|
|
124
98
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
return items.map((item) => {
|
|
132
|
-
return new CSVExternalSecondaryInstanceItemElement(self, item);
|
|
133
|
-
});
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
namespaceURI: XFORMS_NAMESPACE_URI,
|
|
137
|
-
localName: 'root',
|
|
138
|
-
}
|
|
139
|
-
);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
99
|
+
const itemChildOption = (item: CSVExternalSecondaryInstanceItem): StaticElementOptions => {
|
|
100
|
+
return {
|
|
101
|
+
name: 'item',
|
|
102
|
+
children: item.map(columnChildOption),
|
|
103
|
+
};
|
|
104
|
+
};
|
|
142
105
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
(self) => [
|
|
152
|
-
new StaticAttribute(self, {
|
|
153
|
-
namespaceURI: XFORMS_NAMESPACE_URI,
|
|
154
|
-
localName: 'id',
|
|
155
|
-
value: instanceId,
|
|
156
|
-
}),
|
|
157
|
-
],
|
|
158
|
-
(self) => [new CSVExternalSecondaryInstanceRootElement(self, items)],
|
|
159
|
-
{
|
|
160
|
-
namespaceURI: XFORMS_NAMESPACE_URI,
|
|
161
|
-
localName: 'instance',
|
|
162
|
-
}
|
|
163
|
-
);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
106
|
+
const rootChildOption = (
|
|
107
|
+
items: readonly CSVExternalSecondaryInstanceItem[]
|
|
108
|
+
): StaticElementOptions => {
|
|
109
|
+
return {
|
|
110
|
+
name: 'root',
|
|
111
|
+
children: items.map(itemChildOption),
|
|
112
|
+
};
|
|
113
|
+
};
|
|
166
114
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
}
|
|
115
|
+
const csvExternalSecondaryInstanceDefinition = (
|
|
116
|
+
instanceId: string,
|
|
117
|
+
items: readonly CSVExternalSecondaryInstanceItem[]
|
|
118
|
+
): SecondaryInstanceDefinition => {
|
|
119
|
+
return defineSecondaryInstance(instanceId, rootChildOption(items));
|
|
120
|
+
};
|
|
174
121
|
|
|
175
122
|
export class CSVExternalSecondaryInstanceSource extends ExternalSecondaryInstanceSource<'csv'> {
|
|
176
123
|
/**
|
|
@@ -283,6 +230,6 @@ export class CSVExternalSecondaryInstanceSource extends ExternalSecondaryInstanc
|
|
|
283
230
|
});
|
|
284
231
|
const items = this.toItems(columns, rows);
|
|
285
232
|
|
|
286
|
-
return
|
|
233
|
+
return csvExternalSecondaryInstanceDefinition(this.instanceId, items);
|
|
287
234
|
}
|
|
288
235
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { XFORMS_NAMESPACE_URI } from '@getodk/common/constants/xmlns.ts';
|
|
2
1
|
import { UnreachableError } from '@getodk/common/lib/error/UnreachableError.ts';
|
|
3
2
|
import { assertUnknownArray } from '@getodk/common/lib/type-assertions/assertUnknownArray.ts';
|
|
4
3
|
import type { UnknownObject } from '@getodk/common/lib/type-assertions/assertUnknownObject.ts';
|
|
@@ -12,11 +11,9 @@ import type {
|
|
|
12
11
|
FeatureCollection as GeoJSONFeatureCollection,
|
|
13
12
|
} from 'geojson';
|
|
14
13
|
import { ErrorProductionDesignPendingError } from '../../../../error/ErrorProductionDesignPendingError.ts';
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import { SecondaryInstanceDefinition } from '../SecondaryInstanceDefinition.ts';
|
|
19
|
-
import { SecondaryInstanceRootDefinition } from '../SecondaryInstanceRootDefinition.ts';
|
|
14
|
+
import type { StaticElementOptions } from '../../../../integration/xpath/static-dom/StaticElement.ts';
|
|
15
|
+
import { defineSecondaryInstance } from '../defineSecondaryInstance.ts';
|
|
16
|
+
import type { SecondaryInstanceDefinition } from '../SecondaryInstancesDefinition.ts';
|
|
20
17
|
import { ExternalSecondaryInstanceSource } from './ExternalSecondaryInstanceSource.ts';
|
|
21
18
|
|
|
22
19
|
const FEATURE_COLLECTION = 'FeatureCollection';
|
|
@@ -252,155 +249,86 @@ const serializeCoordinates = (coordinates: LongLatCoordinates): SerializedCoordi
|
|
|
252
249
|
return `${latitude} ${longitude} 0 0`;
|
|
253
250
|
};
|
|
254
251
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
): GeoJSONSecondaryInstanceFeatureGeometryElement {
|
|
260
|
-
const { geometry } = feature;
|
|
252
|
+
const geometryValues = (geometry: SupportedGeometry): readonly string[] => {
|
|
253
|
+
switch (geometry.type) {
|
|
254
|
+
case 'LineString':
|
|
255
|
+
return geometry.coordinates.map(serializeCoordinates);
|
|
261
256
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
return new this(parent, geometry.coordinates);
|
|
257
|
+
case 'Point':
|
|
258
|
+
return [serializeCoordinates(geometry.coordinates)];
|
|
265
259
|
|
|
266
|
-
|
|
267
|
-
|
|
260
|
+
case 'Polygon': {
|
|
261
|
+
const [coordinates = []] = geometry.coordinates;
|
|
268
262
|
|
|
269
|
-
|
|
270
|
-
return new this(parent, geometry.coordinates[0] ?? []);
|
|
271
|
-
|
|
272
|
-
default:
|
|
273
|
-
throw new UnreachableError(geometry);
|
|
263
|
+
return coordinates.map(serializeCoordinates);
|
|
274
264
|
}
|
|
275
|
-
}
|
|
276
265
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
const value = values.join('; ');
|
|
280
|
-
|
|
281
|
-
super(
|
|
282
|
-
parent,
|
|
283
|
-
() => [],
|
|
284
|
-
(self) => [new StaticText(self, value)],
|
|
285
|
-
{
|
|
286
|
-
namespaceURI: XFORMS_NAMESPACE_URI,
|
|
287
|
-
localName: 'geometry',
|
|
288
|
-
}
|
|
289
|
-
);
|
|
266
|
+
default:
|
|
267
|
+
throw new UnreachableError(geometry);
|
|
290
268
|
}
|
|
291
|
-
}
|
|
269
|
+
};
|
|
292
270
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
): Iterable<GeoJSONSecondaryInstanceFeaturePropertyElement> {
|
|
298
|
-
const { properties } = feature;
|
|
271
|
+
const geometryChildElementOption = (feature: Feature): StaticElementOptions => {
|
|
272
|
+
const { geometry } = feature;
|
|
273
|
+
const values = geometryValues(geometry);
|
|
274
|
+
const value = values.join('; ');
|
|
299
275
|
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
276
|
+
return {
|
|
277
|
+
name: 'geometry',
|
|
278
|
+
children: [value],
|
|
279
|
+
};
|
|
280
|
+
};
|
|
303
281
|
|
|
304
|
-
|
|
305
|
-
|
|
282
|
+
const propertyChildOption = (propertyName: string, propertyValue: string): StaticElementOptions => {
|
|
283
|
+
return {
|
|
284
|
+
name: propertyName,
|
|
285
|
+
children: [propertyValue],
|
|
286
|
+
};
|
|
287
|
+
};
|
|
306
288
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
}
|
|
289
|
+
function* propertyChildOptions(feature: Feature): Iterable<StaticElementOptions> {
|
|
290
|
+
const { properties } = feature;
|
|
310
291
|
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
}
|
|
292
|
+
if (properties == null) {
|
|
293
|
+
return [];
|
|
314
294
|
}
|
|
315
295
|
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
parent,
|
|
319
|
-
() => [],
|
|
320
|
-
(self) => [new StaticText(self, propertyValue)],
|
|
321
|
-
{
|
|
322
|
-
namespaceURI: XFORMS_NAMESPACE_URI,
|
|
323
|
-
localName: propertyName,
|
|
324
|
-
}
|
|
325
|
-
);
|
|
326
|
-
}
|
|
327
|
-
}
|
|
296
|
+
const { id: propertiesId, ...nonIdProperties } = properties;
|
|
297
|
+
const { id = propertiesId } = feature;
|
|
328
298
|
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
parent,
|
|
333
|
-
() => [],
|
|
334
|
-
(self) => {
|
|
335
|
-
const geometry = GeoJSONSecondaryInstanceFeatureGeometryElement.from(self, feature);
|
|
336
|
-
const properties = GeoJSONSecondaryInstanceFeaturePropertyElement.buildPropertyElements(
|
|
337
|
-
self,
|
|
338
|
-
feature
|
|
339
|
-
);
|
|
340
|
-
|
|
341
|
-
return [geometry, ...properties];
|
|
342
|
-
},
|
|
343
|
-
{
|
|
344
|
-
namespaceURI: XFORMS_NAMESPACE_URI,
|
|
345
|
-
localName: 'item',
|
|
346
|
-
}
|
|
347
|
-
);
|
|
299
|
+
if (id !== undefined) {
|
|
300
|
+
// eslint-disable-next-line @typescript-eslint/no-base-to-string -- Intentional fallback, we don't know what this is and it could be any permutation of JSON
|
|
301
|
+
yield propertyChildOption('id', String(id));
|
|
348
302
|
}
|
|
349
|
-
}
|
|
350
303
|
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
super(
|
|
354
|
-
parent,
|
|
355
|
-
() => [],
|
|
356
|
-
(self) => {
|
|
357
|
-
return featureCollection.features.map((feature) => {
|
|
358
|
-
return new GeoJSONSecondaryInstanceFeatureItemElement(self, feature);
|
|
359
|
-
});
|
|
360
|
-
},
|
|
361
|
-
{
|
|
362
|
-
namespaceURI: XFORMS_NAMESPACE_URI,
|
|
363
|
-
localName: 'root',
|
|
364
|
-
}
|
|
365
|
-
);
|
|
304
|
+
for (const [propertyName, propertyValue] of Object.entries(nonIdProperties)) {
|
|
305
|
+
yield propertyChildOption(propertyName, String(propertyValue));
|
|
366
306
|
}
|
|
367
307
|
}
|
|
368
308
|
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
parent: GeoJSONExternalSecondaryInstanceDefinition,
|
|
373
|
-
featureCollection: FeatureCollection
|
|
374
|
-
) {
|
|
375
|
-
super(
|
|
376
|
-
parent,
|
|
377
|
-
(self) => [
|
|
378
|
-
new StaticAttribute(self, {
|
|
379
|
-
namespaceURI: XFORMS_NAMESPACE_URI,
|
|
380
|
-
localName: 'id',
|
|
381
|
-
value: instanceId,
|
|
382
|
-
}),
|
|
383
|
-
],
|
|
384
|
-
(self) => [new GeoJSONSecondaryInstanceRootElement(self, featureCollection)],
|
|
385
|
-
{
|
|
386
|
-
namespaceURI: XFORMS_NAMESPACE_URI,
|
|
387
|
-
localName: 'instance',
|
|
388
|
-
}
|
|
389
|
-
);
|
|
390
|
-
}
|
|
391
|
-
}
|
|
309
|
+
const itemChildOption = (feature: Feature): StaticElementOptions => {
|
|
310
|
+
const geometry = geometryChildElementOption(feature);
|
|
311
|
+
const properties = propertyChildOptions(feature);
|
|
392
312
|
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
}
|
|
313
|
+
return {
|
|
314
|
+
name: 'item',
|
|
315
|
+
children: [geometry, ...properties],
|
|
316
|
+
};
|
|
317
|
+
};
|
|
318
|
+
|
|
319
|
+
const rootChildOption = (featureCollection: FeatureCollection): StaticElementOptions => {
|
|
320
|
+
return {
|
|
321
|
+
name: 'root',
|
|
322
|
+
children: featureCollection.features.map(itemChildOption),
|
|
323
|
+
};
|
|
324
|
+
};
|
|
325
|
+
|
|
326
|
+
const geoJSONExternalSecondaryInstanceDefinition = (
|
|
327
|
+
instanceId: string,
|
|
328
|
+
featureCollection: FeatureCollection
|
|
329
|
+
): SecondaryInstanceDefinition => {
|
|
330
|
+
return defineSecondaryInstance(instanceId, rootChildOption(featureCollection));
|
|
331
|
+
};
|
|
404
332
|
|
|
405
333
|
export class GeoJSONExternalSecondaryInstanceSource extends ExternalSecondaryInstanceSource<'geojson'> {
|
|
406
334
|
parseDefinition(): SecondaryInstanceDefinition {
|
|
@@ -409,6 +337,6 @@ export class GeoJSONExternalSecondaryInstanceSource extends ExternalSecondaryIns
|
|
|
409
337
|
|
|
410
338
|
assertFeatureCollection(value);
|
|
411
339
|
|
|
412
|
-
return
|
|
340
|
+
return geoJSONExternalSecondaryInstanceDefinition(this.instanceId, value);
|
|
413
341
|
}
|
|
414
342
|
}
|