@fluidframework/tree 2.4.0-297385 → 2.4.0-299374
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/.dependency-cruiser-known-violations.json +0 -14
- package/.vscode/settings.json +9 -1
- package/api-report/tree.alpha.api.md +178 -21
- package/api-report/tree.beta.api.md +46 -21
- package/api-report/tree.legacy.alpha.api.md +46 -21
- package/api-report/tree.legacy.public.api.md +46 -21
- package/api-report/tree.public.api.md +46 -21
- package/dist/alpha.d.ts +29 -1
- package/dist/beta.d.ts +2 -0
- package/dist/codec/codec.d.ts +4 -4
- package/dist/codec/codec.js.map +1 -1
- package/dist/codec/noopValidator.d.ts +1 -1
- package/dist/codec/noopValidator.js +1 -1
- package/dist/codec/noopValidator.js.map +1 -1
- package/dist/core/tree/anchorSet.d.ts +159 -2
- package/dist/core/tree/anchorSet.d.ts.map +1 -1
- package/dist/core/tree/anchorSet.js +54 -12
- package/dist/core/tree/anchorSet.js.map +1 -1
- package/dist/external-utilities/typeboxValidator.d.ts +1 -1
- package/dist/external-utilities/typeboxValidator.js +1 -1
- package/dist/external-utilities/typeboxValidator.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.d.ts +4 -0
- package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.js +38 -6
- package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/dist/feature-libraries/index.d.ts +0 -1
- package/dist/feature-libraries/index.d.ts.map +1 -1
- package/dist/feature-libraries/index.js +46 -49
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/treeCompressionUtils.d.ts +1 -1
- package/dist/feature-libraries/treeCompressionUtils.js +1 -1
- package/dist/feature-libraries/treeCompressionUtils.js.map +1 -1
- package/dist/index.d.ts +6 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/internalTypes.d.ts +2 -2
- package/dist/internalTypes.d.ts.map +1 -1
- package/dist/internalTypes.js.map +1 -1
- package/dist/legacy.d.ts +2 -0
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/public.d.ts +2 -0
- package/dist/shared-tree/index.d.ts +2 -1
- package/dist/shared-tree/index.d.ts.map +1 -1
- package/dist/shared-tree/index.js +5 -1
- package/dist/shared-tree/index.js.map +1 -1
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +1 -14
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts +24 -9
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +20 -8
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/treeApi.d.ts +6 -6
- package/dist/shared-tree/treeApi.d.ts.map +1 -1
- package/dist/shared-tree/treeApi.js.map +1 -1
- package/dist/simple-tree/api/conciseTree.d.ts +29 -0
- package/dist/simple-tree/api/conciseTree.d.ts.map +1 -0
- package/dist/simple-tree/api/conciseTree.js +25 -0
- package/dist/simple-tree/api/conciseTree.js.map +1 -0
- package/dist/simple-tree/api/customTree.d.ts +44 -0
- package/dist/simple-tree/api/customTree.d.ts.map +1 -0
- package/dist/simple-tree/api/customTree.js +63 -0
- package/dist/simple-tree/api/customTree.js.map +1 -0
- package/dist/simple-tree/api/index.d.ts +7 -2
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +5 -1
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/schemaCreationUtilities.d.ts +41 -26
- package/dist/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaCreationUtilities.js +43 -15
- package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
- package/dist/simple-tree/api/schemaFactory.d.ts +1 -2
- package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactory.js +8 -8
- package/dist/simple-tree/api/schemaFactory.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +1 -2
- package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
- package/dist/simple-tree/api/storedSchema.d.ts +78 -0
- package/dist/simple-tree/api/storedSchema.d.ts.map +1 -0
- package/dist/simple-tree/api/storedSchema.js +107 -0
- package/dist/simple-tree/api/storedSchema.js.map +1 -0
- package/dist/simple-tree/api/testRecursiveDomain.d.ts +10 -10
- package/dist/simple-tree/api/tree.d.ts +12 -3
- package/dist/simple-tree/api/tree.d.ts.map +1 -1
- package/dist/simple-tree/api/tree.js.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.js +5 -5
- package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
- package/dist/simple-tree/{typesUnsafe.d.ts → api/typesUnsafe.d.ts} +58 -10
- package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -0
- package/dist/simple-tree/api/typesUnsafe.js.map +1 -0
- package/dist/simple-tree/api/verboseTree.d.ts +6 -20
- package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
- package/dist/simple-tree/api/verboseTree.js +10 -48
- package/dist/simple-tree/api/verboseTree.js.map +1 -1
- package/dist/simple-tree/arrayNode.d.ts +14 -3
- package/dist/simple-tree/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/arrayNode.js +1 -2
- package/dist/simple-tree/arrayNode.js.map +1 -1
- package/dist/simple-tree/core/index.d.ts +1 -1
- package/dist/simple-tree/core/index.d.ts.map +1 -1
- package/dist/simple-tree/core/index.js +2 -1
- package/dist/simple-tree/core/index.js.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.d.ts +9 -0
- package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js +14 -1
- package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.d.ts +6 -5
- package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.js +3 -1
- package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
- package/dist/simple-tree/core/withType.d.ts +3 -1
- package/dist/simple-tree/core/withType.d.ts.map +1 -1
- package/dist/simple-tree/core/withType.js.map +1 -1
- package/dist/simple-tree/flexList.d.ts.map +1 -0
- package/dist/simple-tree/flexList.js.map +1 -0
- package/dist/simple-tree/index.d.ts +6 -7
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +5 -3
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/mapNode.d.ts.map +1 -1
- package/dist/simple-tree/mapNode.js +2 -3
- package/dist/simple-tree/mapNode.js.map +1 -1
- package/dist/simple-tree/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/objectNode.js +3 -4
- package/dist/simple-tree/objectNode.js.map +1 -1
- package/dist/simple-tree/schemaTypes.d.ts +60 -7
- package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
- package/dist/simple-tree/schemaTypes.js +11 -6
- package/dist/simple-tree/schemaTypes.js.map +1 -1
- package/dist/simple-tree/toFlexSchema.d.ts.map +1 -1
- package/dist/simple-tree/toFlexSchema.js +13 -15
- package/dist/simple-tree/toFlexSchema.js.map +1 -1
- package/dist/simple-tree/toMapTree.d.ts +4 -2
- package/dist/simple-tree/toMapTree.d.ts.map +1 -1
- package/dist/simple-tree/toMapTree.js +3 -3
- package/dist/simple-tree/toMapTree.js.map +1 -1
- package/dist/simple-tree/treeNodeValid.d.ts.map +1 -1
- package/dist/simple-tree/treeNodeValid.js +2 -1
- package/dist/simple-tree/treeNodeValid.js.map +1 -1
- package/dist/treeFactory.d.ts +1 -0
- package/dist/treeFactory.d.ts.map +1 -1
- package/dist/treeFactory.js +1 -0
- package/dist/treeFactory.js.map +1 -1
- package/dist/util/utils.d.ts +10 -8
- package/dist/util/utils.d.ts.map +1 -1
- package/dist/util/utils.js.map +1 -1
- package/docs/main/detached-trees.md +8 -8
- package/lib/alpha.d.ts +29 -1
- package/lib/beta.d.ts +2 -0
- package/lib/codec/codec.d.ts +4 -4
- package/lib/codec/codec.js.map +1 -1
- package/lib/codec/noopValidator.d.ts +1 -1
- package/lib/codec/noopValidator.js +1 -1
- package/lib/codec/noopValidator.js.map +1 -1
- package/lib/core/tree/anchorSet.d.ts +159 -2
- package/lib/core/tree/anchorSet.d.ts.map +1 -1
- package/lib/core/tree/anchorSet.js +54 -12
- package/lib/core/tree/anchorSet.js.map +1 -1
- package/lib/external-utilities/typeboxValidator.d.ts +1 -1
- package/lib/external-utilities/typeboxValidator.js +1 -1
- package/lib/external-utilities/typeboxValidator.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.d.ts +4 -0
- package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.js +36 -5
- package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/lib/feature-libraries/index.d.ts +0 -1
- package/lib/feature-libraries/index.d.ts.map +1 -1
- package/lib/feature-libraries/index.js +0 -1
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/treeCompressionUtils.d.ts +1 -1
- package/lib/feature-libraries/treeCompressionUtils.js +1 -1
- package/lib/feature-libraries/treeCompressionUtils.js.map +1 -1
- package/lib/index.d.ts +6 -5
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +3 -3
- package/lib/index.js.map +1 -1
- package/lib/internalTypes.d.ts +2 -2
- package/lib/internalTypes.d.ts.map +1 -1
- package/lib/internalTypes.js.map +1 -1
- package/lib/legacy.d.ts +2 -0
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/public.d.ts +2 -0
- package/lib/shared-tree/index.d.ts +2 -1
- package/lib/shared-tree/index.d.ts.map +1 -1
- package/lib/shared-tree/index.js +2 -1
- package/lib/shared-tree/index.js.map +1 -1
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +2 -15
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts +24 -9
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +19 -8
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/treeApi.d.ts +6 -6
- package/lib/shared-tree/treeApi.d.ts.map +1 -1
- package/lib/shared-tree/treeApi.js.map +1 -1
- package/lib/simple-tree/api/conciseTree.d.ts +29 -0
- package/lib/simple-tree/api/conciseTree.d.ts.map +1 -0
- package/lib/simple-tree/api/conciseTree.js +21 -0
- package/lib/simple-tree/api/conciseTree.js.map +1 -0
- package/lib/simple-tree/api/customTree.d.ts +44 -0
- package/lib/simple-tree/api/customTree.d.ts.map +1 -0
- package/lib/simple-tree/api/customTree.js +59 -0
- package/lib/simple-tree/api/customTree.js.map +1 -0
- package/lib/simple-tree/api/index.d.ts +7 -2
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js +1 -0
- package/lib/simple-tree/api/index.js.map +1 -1
- package/lib/simple-tree/api/schemaCreationUtilities.d.ts +41 -26
- package/lib/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaCreationUtilities.js +43 -15
- package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
- package/lib/simple-tree/api/schemaFactory.d.ts +1 -2
- package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactory.js +1 -1
- package/lib/simple-tree/api/schemaFactory.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +1 -2
- package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
- package/lib/simple-tree/api/storedSchema.d.ts +78 -0
- package/lib/simple-tree/api/storedSchema.d.ts.map +1 -0
- package/lib/simple-tree/api/storedSchema.js +101 -0
- package/lib/simple-tree/api/storedSchema.js.map +1 -0
- package/lib/simple-tree/api/testRecursiveDomain.d.ts +10 -10
- package/lib/simple-tree/api/tree.d.ts +12 -3
- package/lib/simple-tree/api/tree.d.ts.map +1 -1
- package/lib/simple-tree/api/tree.js.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.js +3 -3
- package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
- package/lib/simple-tree/{typesUnsafe.d.ts → api/typesUnsafe.d.ts} +58 -10
- package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -0
- package/lib/simple-tree/api/typesUnsafe.js.map +1 -0
- package/lib/simple-tree/api/verboseTree.d.ts +6 -20
- package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
- package/lib/simple-tree/api/verboseTree.js +11 -49
- package/lib/simple-tree/api/verboseTree.js.map +1 -1
- package/lib/simple-tree/arrayNode.d.ts +14 -3
- package/lib/simple-tree/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/arrayNode.js +1 -2
- package/lib/simple-tree/arrayNode.js.map +1 -1
- package/lib/simple-tree/core/index.d.ts +1 -1
- package/lib/simple-tree/core/index.d.ts.map +1 -1
- package/lib/simple-tree/core/index.js +1 -1
- package/lib/simple-tree/core/index.js.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.d.ts +9 -0
- package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js +12 -0
- package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.d.ts +6 -5
- package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.js +3 -1
- package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
- package/lib/simple-tree/core/withType.d.ts +3 -1
- package/lib/simple-tree/core/withType.d.ts.map +1 -1
- package/lib/simple-tree/core/withType.js.map +1 -1
- package/lib/simple-tree/flexList.d.ts.map +1 -0
- package/lib/simple-tree/flexList.js.map +1 -0
- package/lib/simple-tree/index.d.ts +6 -7
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +3 -4
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/mapNode.d.ts.map +1 -1
- package/lib/simple-tree/mapNode.js +1 -2
- package/lib/simple-tree/mapNode.js.map +1 -1
- package/lib/simple-tree/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/objectNode.js +1 -2
- package/lib/simple-tree/objectNode.js.map +1 -1
- package/lib/simple-tree/schemaTypes.d.ts +60 -7
- package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
- package/lib/simple-tree/schemaTypes.js +6 -1
- package/lib/simple-tree/schemaTypes.js.map +1 -1
- package/lib/simple-tree/toFlexSchema.d.ts.map +1 -1
- package/lib/simple-tree/toFlexSchema.js +1 -3
- package/lib/simple-tree/toFlexSchema.js.map +1 -1
- package/lib/simple-tree/toMapTree.d.ts +4 -2
- package/lib/simple-tree/toMapTree.d.ts.map +1 -1
- package/lib/simple-tree/toMapTree.js +3 -3
- package/lib/simple-tree/toMapTree.js.map +1 -1
- package/lib/simple-tree/treeNodeValid.d.ts.map +1 -1
- package/lib/simple-tree/treeNodeValid.js +2 -1
- package/lib/simple-tree/treeNodeValid.js.map +1 -1
- package/lib/treeFactory.d.ts +1 -0
- package/lib/treeFactory.d.ts.map +1 -1
- package/lib/treeFactory.js +1 -0
- package/lib/treeFactory.js.map +1 -1
- package/lib/util/utils.d.ts +10 -8
- package/lib/util/utils.d.ts.map +1 -1
- package/lib/util/utils.js.map +1 -1
- package/package.json +41 -24
- package/src/codec/codec.ts +4 -4
- package/src/codec/noopValidator.ts +1 -1
- package/src/core/tree/anchorSet.ts +63 -13
- package/src/external-utilities/typeboxValidator.ts +1 -1
- package/src/feature-libraries/flex-tree/lazyField.ts +44 -7
- package/src/feature-libraries/index.ts +0 -10
- package/src/feature-libraries/treeCompressionUtils.ts +1 -1
- package/src/index.ts +26 -6
- package/src/internalTypes.ts +4 -1
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/index.ts +5 -0
- package/src/shared-tree/schematizingTreeView.ts +7 -16
- package/src/shared-tree/sharedTree.ts +52 -22
- package/src/shared-tree/treeApi.ts +19 -9
- package/src/simple-tree/api/conciseTree.ts +58 -0
- package/src/simple-tree/api/customTree.ts +119 -0
- package/src/simple-tree/api/index.ts +39 -1
- package/src/simple-tree/api/schemaCreationUtilities.ts +55 -36
- package/src/simple-tree/api/schemaFactory.ts +4 -6
- package/src/simple-tree/api/schemaFactoryRecursive.ts +1 -2
- package/src/simple-tree/api/storedSchema.ts +126 -0
- package/src/simple-tree/api/tree.ts +24 -2
- package/src/simple-tree/api/treeNodeApi.ts +3 -8
- package/src/simple-tree/{typesUnsafe.ts → api/typesUnsafe.ts} +95 -21
- package/src/simple-tree/api/verboseTree.ts +21 -76
- package/src/simple-tree/arrayNode.ts +35 -15
- package/src/simple-tree/core/index.ts +1 -0
- package/src/simple-tree/core/treeNodeKernel.ts +13 -0
- package/src/simple-tree/core/treeNodeSchema.ts +7 -5
- package/src/simple-tree/core/unhydratedFlexTree.ts +6 -1
- package/src/simple-tree/core/withType.ts +10 -1
- package/src/simple-tree/index.ts +41 -21
- package/src/simple-tree/mapNode.ts +1 -1
- package/src/simple-tree/objectNode.ts +1 -1
- package/src/simple-tree/schemaTypes.ts +70 -11
- package/src/simple-tree/toFlexSchema.ts +1 -3
- package/src/simple-tree/toMapTree.ts +7 -4
- package/src/simple-tree/treeNodeValid.ts +2 -1
- package/src/treeFactory.ts +1 -0
- package/src/util/utils.ts +10 -8
- package/dist/feature-libraries/flex-tree/unboxed.d.ts +0 -12
- package/dist/feature-libraries/flex-tree/unboxed.d.ts.map +0 -1
- package/dist/feature-libraries/flex-tree/unboxed.js +0 -20
- package/dist/feature-libraries/flex-tree/unboxed.js.map +0 -1
- package/dist/feature-libraries/typed-schema/flexList.d.ts.map +0 -1
- package/dist/feature-libraries/typed-schema/flexList.js.map +0 -1
- package/dist/feature-libraries/typed-schema/index.d.ts +0 -7
- package/dist/feature-libraries/typed-schema/index.d.ts.map +0 -1
- package/dist/feature-libraries/typed-schema/index.js +0 -12
- package/dist/feature-libraries/typed-schema/index.js.map +0 -1
- package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts +0 -14
- package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +0 -1
- package/dist/feature-libraries/typed-schema/typedTreeSchema.js +0 -7
- package/dist/feature-libraries/typed-schema/typedTreeSchema.js.map +0 -1
- package/dist/simple-tree/proxyBinding.d.ts +0 -15
- package/dist/simple-tree/proxyBinding.d.ts.map +0 -1
- package/dist/simple-tree/proxyBinding.js +0 -22
- package/dist/simple-tree/proxyBinding.js.map +0 -1
- package/dist/simple-tree/typesUnsafe.d.ts.map +0 -1
- package/dist/simple-tree/typesUnsafe.js.map +0 -1
- package/lib/feature-libraries/flex-tree/unboxed.d.ts +0 -12
- package/lib/feature-libraries/flex-tree/unboxed.d.ts.map +0 -1
- package/lib/feature-libraries/flex-tree/unboxed.js +0 -16
- package/lib/feature-libraries/flex-tree/unboxed.js.map +0 -1
- package/lib/feature-libraries/typed-schema/flexList.d.ts.map +0 -1
- package/lib/feature-libraries/typed-schema/flexList.js.map +0 -1
- package/lib/feature-libraries/typed-schema/index.d.ts +0 -7
- package/lib/feature-libraries/typed-schema/index.d.ts.map +0 -1
- package/lib/feature-libraries/typed-schema/index.js +0 -6
- package/lib/feature-libraries/typed-schema/index.js.map +0 -1
- package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts +0 -14
- package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +0 -1
- package/lib/feature-libraries/typed-schema/typedTreeSchema.js +0 -6
- package/lib/feature-libraries/typed-schema/typedTreeSchema.js.map +0 -1
- package/lib/simple-tree/proxyBinding.d.ts +0 -15
- package/lib/simple-tree/proxyBinding.d.ts.map +0 -1
- package/lib/simple-tree/proxyBinding.js +0 -18
- package/lib/simple-tree/proxyBinding.js.map +0 -1
- package/lib/simple-tree/typesUnsafe.d.ts.map +0 -1
- package/lib/simple-tree/typesUnsafe.js.map +0 -1
- package/src/feature-libraries/flex-tree/unboxed.ts +0 -24
- package/src/feature-libraries/typed-schema/README.md +0 -6
- package/src/feature-libraries/typed-schema/index.ts +0 -16
- package/src/feature-libraries/typed-schema/typedTreeSchema.ts +0 -14
- package/src/simple-tree/proxyBinding.ts +0 -20
- /package/dist/simple-tree/{typesUnsafe.js → api/typesUnsafe.js} +0 -0
- /package/dist/{feature-libraries/typed-schema → simple-tree}/flexList.d.ts +0 -0
- /package/dist/{feature-libraries/typed-schema → simple-tree}/flexList.js +0 -0
- /package/lib/simple-tree/{typesUnsafe.js → api/typesUnsafe.js} +0 -0
- /package/lib/{feature-libraries/typed-schema → simple-tree}/flexList.d.ts +0 -0
- /package/lib/{feature-libraries/typed-schema → simple-tree}/flexList.js +0 -0
- /package/src/simple-tree/{ProxyBinding.md → core/TreeNodeBinding.md} +0 -0
- /package/src/{feature-libraries/typed-schema → simple-tree}/flexList.ts +0 -0
|
@@ -14,11 +14,11 @@ import {
|
|
|
14
14
|
isFlexTreeNode,
|
|
15
15
|
} from "../feature-libraries/index.js";
|
|
16
16
|
import { prepareContentForHydration } from "./proxies.js";
|
|
17
|
-
import { getOrCreateInnerNode } from "./proxyBinding.js";
|
|
18
17
|
import {
|
|
19
18
|
normalizeAllowedTypes,
|
|
20
19
|
type ImplicitAllowedTypes,
|
|
21
20
|
type InsertableTreeNodeFromImplicitAllowedTypes,
|
|
21
|
+
type TreeLeafValue,
|
|
22
22
|
type TreeNodeFromImplicitAllowedTypes,
|
|
23
23
|
} from "./schemaTypes.js";
|
|
24
24
|
import {
|
|
@@ -34,6 +34,8 @@ import {
|
|
|
34
34
|
getOrCreateNodeFromInnerNode,
|
|
35
35
|
type TreeNodeSchemaBoth,
|
|
36
36
|
getSimpleNodeSchemaFromInnerNode,
|
|
37
|
+
getOrCreateInnerNode,
|
|
38
|
+
type TreeNodeSchemaClass,
|
|
37
39
|
} from "./core/index.js";
|
|
38
40
|
import { type InsertableContent, mapTreeFromNodeData } from "./toMapTree.js";
|
|
39
41
|
import { fail } from "../util/index.js";
|
|
@@ -45,6 +47,19 @@ import {
|
|
|
45
47
|
import { TreeNodeValid, type MostDerivedData } from "./treeNodeValid.js";
|
|
46
48
|
import { getUnhydratedContext } from "./createContext.js";
|
|
47
49
|
|
|
50
|
+
/**
|
|
51
|
+
* A covariant base type for {@link (TreeArrayNode:interface)}.
|
|
52
|
+
*
|
|
53
|
+
* This provides the readonly subset of TreeArrayNode functionality, and is used as the source interface for moves since that needs to be covariant.
|
|
54
|
+
* @privateRemarks
|
|
55
|
+
* Ideally this would just include `TreeNode, WithType<string, NodeKind.Array>` in the extends list but https://github.com/microsoft/TypeScript/issues/16936 prevents that from compiling.
|
|
56
|
+
* As a workaround around for this TypeScript limitation, the conflicting type intersection is wrapped in `Awaited` (which has no effect on the type in this case) which allows it to compile.
|
|
57
|
+
* @system @sealed @public
|
|
58
|
+
*/
|
|
59
|
+
export interface ReadonlyArrayNode<out T = TreeNode | TreeLeafValue>
|
|
60
|
+
extends ReadonlyArray<T>,
|
|
61
|
+
Awaited<TreeNode & WithType<string, NodeKind.Array>> {}
|
|
62
|
+
|
|
48
63
|
/**
|
|
49
64
|
* A generic array type, used to defined types like {@link (TreeArrayNode:interface)}.
|
|
50
65
|
*
|
|
@@ -53,9 +68,8 @@ import { getUnhydratedContext } from "./createContext.js";
|
|
|
53
68
|
*
|
|
54
69
|
* @system @sealed @public
|
|
55
70
|
*/
|
|
56
|
-
export interface TreeArrayNodeBase<out T, in TNew, in TMoveFrom>
|
|
57
|
-
extends
|
|
58
|
-
TreeNode {
|
|
71
|
+
export interface TreeArrayNodeBase<out T, in TNew, in TMoveFrom = ReadonlyArrayNode>
|
|
72
|
+
extends ReadonlyArrayNode<T> {
|
|
59
73
|
/**
|
|
60
74
|
* Inserts new item(s) at a specified location.
|
|
61
75
|
* @param index - The index at which to insert `value`.
|
|
@@ -366,8 +380,7 @@ export interface TreeArrayNode<
|
|
|
366
380
|
TAllowedTypes extends ImplicitAllowedTypes = ImplicitAllowedTypes,
|
|
367
381
|
> extends TreeArrayNodeBase<
|
|
368
382
|
TreeNodeFromImplicitAllowedTypes<TAllowedTypes>,
|
|
369
|
-
InsertableTreeNodeFromImplicitAllowedTypes<TAllowedTypes
|
|
370
|
-
TreeArrayNode
|
|
383
|
+
InsertableTreeNodeFromImplicitAllowedTypes<TAllowedTypes>
|
|
371
384
|
> {}
|
|
372
385
|
|
|
373
386
|
/**
|
|
@@ -417,9 +430,7 @@ export class IterableTreeArrayContent<T> implements Iterable<T> {
|
|
|
417
430
|
/**
|
|
418
431
|
* Given a array node proxy, returns its underlying LazySequence field.
|
|
419
432
|
*/
|
|
420
|
-
function getSequenceField
|
|
421
|
-
arrayNode: TreeArrayNode<TSimpleType>,
|
|
422
|
-
): FlexTreeSequenceField {
|
|
433
|
+
function getSequenceField(arrayNode: ReadonlyArrayNode): FlexTreeSequenceField {
|
|
423
434
|
return getOrCreateInnerNode(arrayNode).getBoxed(EmptyKey) as FlexTreeSequenceField;
|
|
424
435
|
}
|
|
425
436
|
|
|
@@ -799,6 +810,11 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
|
|
|
799
810
|
protected abstract get simpleSchema(): T;
|
|
800
811
|
protected abstract get allowedTypes(): ReadonlySet<TreeNodeSchema>;
|
|
801
812
|
|
|
813
|
+
public abstract override get [typeSchemaSymbol](): TreeNodeSchemaClass<
|
|
814
|
+
string,
|
|
815
|
+
NodeKind.Array
|
|
816
|
+
>;
|
|
817
|
+
|
|
802
818
|
public constructor(
|
|
803
819
|
input: Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>> | InternalTreeNode,
|
|
804
820
|
) {
|
|
@@ -901,13 +917,13 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
|
|
|
901
917
|
}
|
|
902
918
|
field.editor.remove(removeStart, removeEnd - removeStart);
|
|
903
919
|
}
|
|
904
|
-
public moveToStart(sourceIndex: number, source?:
|
|
920
|
+
public moveToStart(sourceIndex: number, source?: ReadonlyArrayNode): void {
|
|
905
921
|
const sourceArray = source ?? this;
|
|
906
922
|
const sourceField = getSequenceField(sourceArray);
|
|
907
923
|
validateIndex(sourceIndex, sourceField, "moveToStart");
|
|
908
924
|
this.moveRangeToIndex(0, sourceIndex, sourceIndex + 1, source);
|
|
909
925
|
}
|
|
910
|
-
public moveToEnd(sourceIndex: number, source?:
|
|
926
|
+
public moveToEnd(sourceIndex: number, source?: ReadonlyArrayNode): void {
|
|
911
927
|
const sourceArray = source ?? this;
|
|
912
928
|
const sourceField = getSequenceField(sourceArray);
|
|
913
929
|
validateIndex(sourceIndex, sourceField, "moveToEnd");
|
|
@@ -916,7 +932,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
|
|
|
916
932
|
public moveToIndex(
|
|
917
933
|
destinationGap: number,
|
|
918
934
|
sourceIndex: number,
|
|
919
|
-
source?:
|
|
935
|
+
source?: ReadonlyArrayNode,
|
|
920
936
|
): void {
|
|
921
937
|
const sourceArray = source ?? this;
|
|
922
938
|
const sourceField = getSequenceField(sourceArray);
|
|
@@ -928,7 +944,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
|
|
|
928
944
|
public moveRangeToStart(
|
|
929
945
|
sourceStart: number,
|
|
930
946
|
sourceEnd: number,
|
|
931
|
-
source?:
|
|
947
|
+
source?: ReadonlyArrayNode,
|
|
932
948
|
): void {
|
|
933
949
|
validateIndexRange(
|
|
934
950
|
sourceStart,
|
|
@@ -938,7 +954,11 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
|
|
|
938
954
|
);
|
|
939
955
|
this.moveRangeToIndex(0, sourceStart, sourceEnd, source);
|
|
940
956
|
}
|
|
941
|
-
public moveRangeToEnd(
|
|
957
|
+
public moveRangeToEnd(
|
|
958
|
+
sourceStart: number,
|
|
959
|
+
sourceEnd: number,
|
|
960
|
+
source?: ReadonlyArrayNode,
|
|
961
|
+
): void {
|
|
942
962
|
validateIndexRange(
|
|
943
963
|
sourceStart,
|
|
944
964
|
sourceEnd,
|
|
@@ -951,7 +971,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
|
|
|
951
971
|
destinationGap: number,
|
|
952
972
|
sourceStart: number,
|
|
953
973
|
sourceEnd: number,
|
|
954
|
-
source?:
|
|
974
|
+
source?: ReadonlyArrayNode,
|
|
955
975
|
): void {
|
|
956
976
|
const destinationField = getSequenceField(this);
|
|
957
977
|
const destinationSchema = this.allowedTypes;
|
|
@@ -430,3 +430,16 @@ export function getTreeNodeSchemaFromHydratedFlexNode(flexNode: FlexTreeNode): T
|
|
|
430
430
|
|
|
431
431
|
return context.schema.get(flexNode.schema) ?? fail("Missing schema");
|
|
432
432
|
}
|
|
433
|
+
|
|
434
|
+
/**
|
|
435
|
+
* Retrieves the flex node associated with the given target via {@link setInnerNode}.
|
|
436
|
+
* @remarks
|
|
437
|
+
* For {@link Unhydrated} nodes, this returns the MapTreeNode.
|
|
438
|
+
*
|
|
439
|
+
* For hydrated nodes it returns a FlexTreeNode backed by the forest.
|
|
440
|
+
* Note that for "marinated" nodes, this FlexTreeNode exists and returns it: it does not return the MapTreeNode which is the current InnerNode.
|
|
441
|
+
*/
|
|
442
|
+
export function getOrCreateInnerNode(treeNode: TreeNode, allowFreed = false): InnerNode {
|
|
443
|
+
const kernel = getKernel(treeNode);
|
|
444
|
+
return kernel.getOrCreateInnerNode(allowFreed);
|
|
445
|
+
}
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import type {
|
|
6
|
+
import type { TreeLeafValue } from "../schemaTypes.js";
|
|
7
|
+
import type { InternalTreeNode, TreeNode, Unhydrated } from "./types.js";
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* Schema for a tree node.
|
|
@@ -19,7 +20,7 @@ import type { InternalTreeNode, Unhydrated } from "./types.js";
|
|
|
19
20
|
export type TreeNodeSchema<
|
|
20
21
|
Name extends string = string,
|
|
21
22
|
Kind extends NodeKind = NodeKind,
|
|
22
|
-
TNode =
|
|
23
|
+
TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue,
|
|
23
24
|
TBuild = never,
|
|
24
25
|
ImplicitlyConstructable extends boolean = boolean,
|
|
25
26
|
Info = unknown,
|
|
@@ -38,7 +39,7 @@ export type TreeNodeSchema<
|
|
|
38
39
|
export interface TreeNodeSchemaNonClass<
|
|
39
40
|
out Name extends string = string,
|
|
40
41
|
out Kind extends NodeKind = NodeKind,
|
|
41
|
-
out TNode =
|
|
42
|
+
out TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue,
|
|
42
43
|
in TInsertable = never,
|
|
43
44
|
out ImplicitlyConstructable extends boolean = boolean,
|
|
44
45
|
out Info = unknown,
|
|
@@ -94,7 +95,8 @@ export interface TreeNodeSchemaNonClass<
|
|
|
94
95
|
export interface TreeNodeSchemaClass<
|
|
95
96
|
out Name extends string = string,
|
|
96
97
|
out Kind extends NodeKind = NodeKind,
|
|
97
|
-
|
|
98
|
+
// TODO: maybe this can be more specific (exclude leaves)
|
|
99
|
+
out TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue,
|
|
98
100
|
in TInsertable = never,
|
|
99
101
|
out ImplicitlyConstructable extends boolean = boolean,
|
|
100
102
|
out Info = unknown,
|
|
@@ -115,7 +117,7 @@ export interface TreeNodeSchemaClass<
|
|
|
115
117
|
export type TreeNodeSchemaBoth<
|
|
116
118
|
Name extends string = string,
|
|
117
119
|
Kind extends NodeKind = NodeKind,
|
|
118
|
-
TNode =
|
|
120
|
+
TNode extends TreeNode = TreeNode,
|
|
119
121
|
TInsertable = never,
|
|
120
122
|
ImplicitlyConstructable extends boolean = boolean,
|
|
121
123
|
Info = unknown,
|
|
@@ -442,7 +442,12 @@ class EagerMapTreeRequiredField
|
|
|
442
442
|
implements FlexTreeRequiredField
|
|
443
443
|
{
|
|
444
444
|
public override get content(): FlexTreeUnknownUnboxed {
|
|
445
|
-
|
|
445
|
+
// This cannot use ?? since null is a legal value here.
|
|
446
|
+
assert(
|
|
447
|
+
super.content !== undefined,
|
|
448
|
+
"Expected EagerMapTree required field to have a value",
|
|
449
|
+
);
|
|
450
|
+
return super.content;
|
|
446
451
|
}
|
|
447
452
|
}
|
|
448
453
|
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
import type { TreeLeafValue } from "../schemaTypes.js";
|
|
6
7
|
import type { NodeKind, TreeNodeSchemaClass } from "./treeNodeSchema.js";
|
|
8
|
+
import type { TreeNode } from "./types.js";
|
|
7
9
|
|
|
8
10
|
/**
|
|
9
11
|
* The type of a {@link TreeNode}.
|
|
@@ -87,5 +89,12 @@ export interface WithType<
|
|
|
87
89
|
/**
|
|
88
90
|
* Type symbol, marking a type in a way to increase type safety via strong type checking.
|
|
89
91
|
*/
|
|
90
|
-
get [typeSchemaSymbol](): TreeNodeSchemaClass<
|
|
92
|
+
get [typeSchemaSymbol](): TreeNodeSchemaClass<
|
|
93
|
+
TName,
|
|
94
|
+
TKind,
|
|
95
|
+
TreeNode | TreeLeafValue,
|
|
96
|
+
never,
|
|
97
|
+
boolean,
|
|
98
|
+
TInfo
|
|
99
|
+
>;
|
|
91
100
|
}
|
package/src/simple-tree/index.ts
CHANGED
|
@@ -22,6 +22,7 @@ export {
|
|
|
22
22
|
tryDisposeTreeNode,
|
|
23
23
|
HydratedContext,
|
|
24
24
|
SimpleContextSlot,
|
|
25
|
+
getOrCreateInnerNode,
|
|
25
26
|
} from "./core/index.js";
|
|
26
27
|
export {
|
|
27
28
|
type ITree,
|
|
@@ -40,7 +41,6 @@ export {
|
|
|
40
41
|
enumFromStrings,
|
|
41
42
|
singletonSchema,
|
|
42
43
|
typedObjectValues,
|
|
43
|
-
type EmptyObject,
|
|
44
44
|
test_RecursiveObject,
|
|
45
45
|
test_RecursiveObject_base,
|
|
46
46
|
test_RecursiveObjectPojoMode,
|
|
@@ -67,7 +67,36 @@ export {
|
|
|
67
67
|
type JsonLeafSchemaType,
|
|
68
68
|
getJsonSchema,
|
|
69
69
|
getSimpleSchema,
|
|
70
|
+
type VerboseTreeNode,
|
|
71
|
+
type EncodeOptions,
|
|
72
|
+
type ParseOptions,
|
|
73
|
+
type VerboseTree,
|
|
74
|
+
extractPersistedSchema,
|
|
75
|
+
comparePersistedSchema,
|
|
76
|
+
type ConciseTree,
|
|
77
|
+
comparePersistedSchemaInternal,
|
|
70
78
|
ViewSchema,
|
|
79
|
+
type Unenforced,
|
|
80
|
+
type FieldHasDefaultUnsafe,
|
|
81
|
+
type ObjectFromSchemaRecordUnsafe,
|
|
82
|
+
type TreeObjectNodeUnsafe,
|
|
83
|
+
type TreeFieldFromImplicitFieldUnsafe,
|
|
84
|
+
type TreeNodeFromImplicitAllowedTypesUnsafe,
|
|
85
|
+
type FieldSchemaUnsafe,
|
|
86
|
+
type InsertableTreeNodeFromImplicitAllowedTypesUnsafe,
|
|
87
|
+
type TreeArrayNodeUnsafe,
|
|
88
|
+
type TreeMapNodeUnsafe,
|
|
89
|
+
type InsertableObjectFromSchemaRecordUnsafe,
|
|
90
|
+
type InsertableTreeFieldFromImplicitFieldUnsafe,
|
|
91
|
+
type InsertableTypedNodeUnsafe,
|
|
92
|
+
type NodeBuilderDataUnsafe,
|
|
93
|
+
type NodeFromSchemaUnsafe,
|
|
94
|
+
type ReadonlyMapInlined,
|
|
95
|
+
type TreeNodeSchemaClassUnsafe,
|
|
96
|
+
type TreeNodeSchemaUnsafe,
|
|
97
|
+
type AllowedTypesUnsafe,
|
|
98
|
+
type TreeNodeSchemaNonClassUnsafe,
|
|
99
|
+
type TreeViewAlpha,
|
|
71
100
|
} from "./api/index.js";
|
|
72
101
|
export {
|
|
73
102
|
type NodeFromSchema,
|
|
@@ -89,34 +118,19 @@ export {
|
|
|
89
118
|
normalizeFieldSchema,
|
|
90
119
|
type ApplyKind,
|
|
91
120
|
type FieldSchemaMetadata,
|
|
121
|
+
type InsertableField,
|
|
122
|
+
type Insertable,
|
|
123
|
+
type UnsafeUnknownSchema,
|
|
92
124
|
} from "./schemaTypes.js";
|
|
93
|
-
export { getOrCreateInnerNode } from "./proxyBinding.js";
|
|
94
|
-
export type {
|
|
95
|
-
FieldHasDefaultUnsafe,
|
|
96
|
-
ObjectFromSchemaRecordUnsafe,
|
|
97
|
-
TreeObjectNodeUnsafe,
|
|
98
|
-
TreeFieldFromImplicitFieldUnsafe,
|
|
99
|
-
TreeNodeFromImplicitAllowedTypesUnsafe,
|
|
100
|
-
FieldSchemaUnsafe,
|
|
101
|
-
InsertableTreeNodeFromImplicitAllowedTypesUnsafe,
|
|
102
|
-
TreeArrayNodeUnsafe,
|
|
103
|
-
TreeMapNodeUnsafe,
|
|
104
|
-
InsertableObjectFromSchemaRecordUnsafe,
|
|
105
|
-
InsertableTreeFieldFromImplicitFieldUnsafe,
|
|
106
|
-
InsertableTypedNodeUnsafe,
|
|
107
|
-
NodeBuilderDataUnsafe,
|
|
108
|
-
NodeFromSchemaUnsafe,
|
|
109
|
-
ReadonlyMapInlined,
|
|
110
|
-
} from "./typesUnsafe.js";
|
|
111
125
|
export {
|
|
112
126
|
getTreeNodeForField,
|
|
113
127
|
prepareContentForHydration,
|
|
114
128
|
} from "./proxies.js";
|
|
115
|
-
|
|
116
129
|
export {
|
|
117
130
|
TreeArrayNode,
|
|
118
131
|
IterableTreeArrayContent,
|
|
119
132
|
type TreeArrayNodeBase,
|
|
133
|
+
type ReadonlyArrayNode,
|
|
120
134
|
} from "./arrayNode.js";
|
|
121
135
|
export {
|
|
122
136
|
type FieldHasDefault,
|
|
@@ -126,7 +140,12 @@ export {
|
|
|
126
140
|
setField,
|
|
127
141
|
} from "./objectNode.js";
|
|
128
142
|
export type { TreeMapNode, MapNodeInsertableData } from "./mapNode.js";
|
|
129
|
-
export {
|
|
143
|
+
export {
|
|
144
|
+
mapTreeFromNodeData,
|
|
145
|
+
type InsertableContent,
|
|
146
|
+
type FactoryContent,
|
|
147
|
+
type FactoryContentObject,
|
|
148
|
+
} from "./toMapTree.js";
|
|
130
149
|
export { toStoredSchema, getStoredSchema } from "./toFlexSchema.js";
|
|
131
150
|
export {
|
|
132
151
|
numberSchema,
|
|
@@ -135,3 +154,4 @@ export {
|
|
|
135
154
|
handleSchema,
|
|
136
155
|
nullSchema,
|
|
137
156
|
} from "./leafNodeSchema.js";
|
|
157
|
+
export type { LazyItem, FlexList, FlexListToUnion, ExtractItemType } from "./flexList.js";
|
|
@@ -11,7 +11,6 @@ import {
|
|
|
11
11
|
getSchemaAndPolicy,
|
|
12
12
|
} from "../feature-libraries/index.js";
|
|
13
13
|
import { getTreeNodeForField, prepareContentForHydration } from "./proxies.js";
|
|
14
|
-
import { getOrCreateInnerNode } from "./proxyBinding.js";
|
|
15
14
|
import {
|
|
16
15
|
createFieldSchema,
|
|
17
16
|
FieldKind,
|
|
@@ -33,6 +32,7 @@ import {
|
|
|
33
32
|
typeSchemaSymbol,
|
|
34
33
|
type Context,
|
|
35
34
|
UnhydratedFlexTreeNode,
|
|
35
|
+
getOrCreateInnerNode,
|
|
36
36
|
} from "./core/index.js";
|
|
37
37
|
import {
|
|
38
38
|
mapTreeFromNodeData,
|
|
@@ -16,7 +16,6 @@ import {
|
|
|
16
16
|
getSchemaAndPolicy,
|
|
17
17
|
} from "../feature-libraries/index.js";
|
|
18
18
|
import { getTreeNodeForField, prepareContentForHydration } from "./proxies.js";
|
|
19
|
-
import { getOrCreateInnerNode } from "./proxyBinding.js";
|
|
20
19
|
import {
|
|
21
20
|
type ImplicitFieldSchema,
|
|
22
21
|
getStoredKey,
|
|
@@ -39,6 +38,7 @@ import {
|
|
|
39
38
|
type TreeNode,
|
|
40
39
|
type Context,
|
|
41
40
|
UnhydratedFlexTreeNode,
|
|
41
|
+
getOrCreateInnerNode,
|
|
42
42
|
} from "./core/index.js";
|
|
43
43
|
import { mapTreeFromNodeData, type InsertableContent } from "./toMapTree.js";
|
|
44
44
|
import { type RestrictiveStringRecord, fail, type FlattenKeys } from "../util/index.js";
|
|
@@ -7,21 +7,18 @@ import type { ErasedType, IFluidHandle } from "@fluidframework/core-interfaces";
|
|
|
7
7
|
import { Lazy } from "@fluidframework/core-utils/internal";
|
|
8
8
|
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
9
9
|
|
|
10
|
-
import {
|
|
11
|
-
type LazyItem,
|
|
12
|
-
type NodeKeyManager,
|
|
13
|
-
isLazy,
|
|
14
|
-
type FlexListToUnion,
|
|
15
|
-
} from "../feature-libraries/index.js";
|
|
10
|
+
import type { NodeKeyManager } from "../feature-libraries/index.js";
|
|
16
11
|
import { type MakeNominal, brand, isReadonlyArray } from "../util/index.js";
|
|
17
12
|
import type {
|
|
18
13
|
Unhydrated,
|
|
19
14
|
NodeKind,
|
|
20
15
|
TreeNodeSchema,
|
|
21
16
|
TreeNodeSchemaClass,
|
|
17
|
+
TreeNode,
|
|
22
18
|
} from "./core/index.js";
|
|
23
19
|
import type { FieldKey } from "../core/index.js";
|
|
24
20
|
import type { InsertableContent } from "./toMapTree.js";
|
|
21
|
+
import { isLazy, type FlexListToUnion, type LazyItem } from "./flexList.js";
|
|
25
22
|
|
|
26
23
|
/**
|
|
27
24
|
* Returns true if the given schema is a {@link TreeNodeSchemaClass}, or otherwise false if it is a {@link TreeNodeSchemaNonClass}.
|
|
@@ -29,7 +26,7 @@ import type { InsertableContent } from "./toMapTree.js";
|
|
|
29
26
|
export function isTreeNodeSchemaClass<
|
|
30
27
|
Name extends string,
|
|
31
28
|
Kind extends NodeKind,
|
|
32
|
-
TNode,
|
|
29
|
+
TNode extends TreeNode | TreeLeafValue,
|
|
33
30
|
TBuild,
|
|
34
31
|
ImplicitlyConstructable extends boolean,
|
|
35
32
|
Info,
|
|
@@ -385,7 +382,17 @@ export type ImplicitAllowedTypes = AllowedTypes | TreeNodeSchema;
|
|
|
385
382
|
export type ImplicitFieldSchema = FieldSchema | ImplicitAllowedTypes;
|
|
386
383
|
|
|
387
384
|
/**
|
|
388
|
-
* Converts ImplicitFieldSchema to
|
|
385
|
+
* Converts an `ImplicitFieldSchema` to a property type suitable for reading a field with this that schema.
|
|
386
|
+
*
|
|
387
|
+
* @typeparam TSchema - When non-exact schema are provided this errors on the side of returning too general of a type (a conservative union of all possibilities).
|
|
388
|
+
* This is ideal for "output APIs" - i.e. it converts the schema type to the runtime type that a user will _read_ from the tree.
|
|
389
|
+
* Examples of such "non-exact" schema include `ImplicitFieldSchema`, `ImplicitAllowedTypes`, and TypeScript unions of schema types.
|
|
390
|
+
* @privateRemarks
|
|
391
|
+
* TODO:
|
|
392
|
+
* There are two known problematic usages of this type (which produce invalid/unsound results when given non-specific schema):
|
|
393
|
+
* 1. setters for fields (on object nodes the Tree.view.root).
|
|
394
|
+
* 2. Indirectly in InsertableTreeFieldFromImplicitField via InsertableTypedNode including NodeFromSchema.
|
|
395
|
+
* These cases should be mitigated by introducing a way to detect inexact schema and special casing them in these two places.
|
|
389
396
|
* @public
|
|
390
397
|
*/
|
|
391
398
|
export type TreeFieldFromImplicitField<TSchema extends ImplicitFieldSchema = FieldSchema> =
|
|
@@ -393,7 +400,7 @@ export type TreeFieldFromImplicitField<TSchema extends ImplicitFieldSchema = Fie
|
|
|
393
400
|
? ApplyKind<TreeNodeFromImplicitAllowedTypes<Types>, Kind, false>
|
|
394
401
|
: TSchema extends ImplicitAllowedTypes
|
|
395
402
|
? TreeNodeFromImplicitAllowedTypes<TSchema>
|
|
396
|
-
:
|
|
403
|
+
: TreeNode | TreeLeafValue | undefined;
|
|
397
404
|
|
|
398
405
|
/**
|
|
399
406
|
* Type of content that can be inserted into the tree for a field of the given schema.
|
|
@@ -405,7 +412,55 @@ export type InsertableTreeFieldFromImplicitField<
|
|
|
405
412
|
? ApplyKind<InsertableTreeNodeFromImplicitAllowedTypes<Types>, Kind, true>
|
|
406
413
|
: TSchema extends ImplicitAllowedTypes
|
|
407
414
|
? InsertableTreeNodeFromImplicitAllowedTypes<TSchema>
|
|
408
|
-
:
|
|
415
|
+
: never;
|
|
416
|
+
|
|
417
|
+
/**
|
|
418
|
+
* {@inheritdoc (UnsafeUnknownSchema:type)}
|
|
419
|
+
* @alpha
|
|
420
|
+
*/
|
|
421
|
+
export const UnsafeUnknownSchema: unique symbol = Symbol("UnsafeUnknownSchema");
|
|
422
|
+
|
|
423
|
+
/**
|
|
424
|
+
* A special type which can be provided to some APIs as the schema type parameter when schema cannot easily be provided at compile time and an unsafe (instead of disabled) editing API is desired.
|
|
425
|
+
* @remarks
|
|
426
|
+
* When used this means the TypeScript typing should error on the side of completeness (allow all inputs that could be valid).
|
|
427
|
+
* This introduces the risk that out of schema data could be allowed at compile time, and only error at runtime.
|
|
428
|
+
*
|
|
429
|
+
* @privateRemarks
|
|
430
|
+
* This only applies to APIs which input data which is expected to be in schema, since APIs outputting have easy mechanisms to do so in a type safe way even when the schema is unknown.
|
|
431
|
+
* In most cases that amounts to returning `TreeNode | TreeLeafValue`.
|
|
432
|
+
*
|
|
433
|
+
* This can be contrasted with the default behavior of TypeScript, which is to require the intersection of the possible types for input APIs,
|
|
434
|
+
* which for unknown schema defining input trees results in the `never` type.
|
|
435
|
+
*
|
|
436
|
+
* Any APIs which use this must produce UsageErrors when out of schema data is encountered, and never produce unrecoverable errors,
|
|
437
|
+
* or silently accept invalid data.
|
|
438
|
+
* This is currently only type exported from the package: the symbol is just used as a way to get a named type.
|
|
439
|
+
* @alpha
|
|
440
|
+
*/
|
|
441
|
+
export type UnsafeUnknownSchema = typeof UnsafeUnknownSchema;
|
|
442
|
+
|
|
443
|
+
/**
|
|
444
|
+
* Content which could be inserted into a tree.
|
|
445
|
+
* @remarks
|
|
446
|
+
* Extended version of {@link InsertableTreeNodeFromImplicitAllowedTypes} that also allows {@link (UnsafeUnknownSchema:type)}.
|
|
447
|
+
* @alpha
|
|
448
|
+
*/
|
|
449
|
+
export type Insertable<TSchema extends ImplicitAllowedTypes | UnsafeUnknownSchema> =
|
|
450
|
+
TSchema extends ImplicitAllowedTypes
|
|
451
|
+
? InsertableTreeNodeFromImplicitAllowedTypes<TSchema>
|
|
452
|
+
: InsertableContent;
|
|
453
|
+
|
|
454
|
+
/**
|
|
455
|
+
* Content which could be inserted into a field within a tree.
|
|
456
|
+
* @remarks
|
|
457
|
+
* Extended version of {@link InsertableTreeFieldFromImplicitField} that also allows {@link (UnsafeUnknownSchema:type)}.
|
|
458
|
+
* @alpha
|
|
459
|
+
*/
|
|
460
|
+
export type InsertableField<TSchema extends ImplicitFieldSchema | UnsafeUnknownSchema> =
|
|
461
|
+
TSchema extends ImplicitFieldSchema
|
|
462
|
+
? InsertableTreeFieldFromImplicitField<TSchema>
|
|
463
|
+
: InsertableContent | undefined;
|
|
409
464
|
|
|
410
465
|
/**
|
|
411
466
|
* Suitable for output.
|
|
@@ -457,6 +512,10 @@ export type NodeFromSchema<T extends TreeNodeSchema> = T extends TreeNodeSchema<
|
|
|
457
512
|
/**
|
|
458
513
|
* Data which can be used as a node to be inserted.
|
|
459
514
|
* Either an unhydrated node, or content to build a new node.
|
|
515
|
+
* @privateRemarks
|
|
516
|
+
* TODO:
|
|
517
|
+
* This should behave contravariantly, but it uses NodeFromSchema which behaves covariantly.
|
|
518
|
+
* This results in unsoundness where when the schema is less specific, more types are allowed instead of less.
|
|
460
519
|
* @public
|
|
461
520
|
*/
|
|
462
521
|
export type InsertableTypedNode<T extends TreeNodeSchema> =
|
|
@@ -475,7 +534,7 @@ export type InsertableTypedNode<T extends TreeNodeSchema> =
|
|
|
475
534
|
export type NodeBuilderData<T extends TreeNodeSchema> = T extends TreeNodeSchema<
|
|
476
535
|
string,
|
|
477
536
|
NodeKind,
|
|
478
|
-
|
|
537
|
+
TreeNode | TreeLeafValue,
|
|
479
538
|
infer TBuild
|
|
480
539
|
>
|
|
481
540
|
? TBuild
|
|
@@ -20,9 +20,6 @@ import {
|
|
|
20
20
|
type TreeTypeSet,
|
|
21
21
|
} from "../core/index.js";
|
|
22
22
|
import { FieldKinds, type FlexFieldKind } from "../feature-libraries/index.js";
|
|
23
|
-
// TODO: once flex schema is gone, this code can move into simple-tree
|
|
24
|
-
// eslint-disable-next-line import/no-internal-modules
|
|
25
|
-
import { normalizeFlexListEager } from "../feature-libraries/typed-schema/index.js";
|
|
26
23
|
import { brand, fail, isReadonlyArray } from "../util/index.js";
|
|
27
24
|
import { NodeKind, type TreeNodeSchema } from "./core/index.js";
|
|
28
25
|
import {
|
|
@@ -34,6 +31,7 @@ import {
|
|
|
34
31
|
import { walkFieldSchema } from "./walkFieldSchema.js";
|
|
35
32
|
import { LeafNodeSchema } from "./leafNodeSchema.js";
|
|
36
33
|
import { isObjectNodeSchema } from "./objectNodeTypes.js";
|
|
34
|
+
import { normalizeFlexListEager } from "./flexList.js";
|
|
37
35
|
|
|
38
36
|
/**
|
|
39
37
|
* Converts a {@link ImplicitFieldSchema} into a {@link TreeStoredSchema}.
|
|
@@ -262,14 +262,14 @@ function mapValueWithFallbacks(
|
|
|
262
262
|
// Our serialized data format does not support -0.
|
|
263
263
|
// Map such input to +0.
|
|
264
264
|
return 0;
|
|
265
|
-
} else if (
|
|
265
|
+
} else if (!Number.isFinite(value)) {
|
|
266
266
|
// Our serialized data format does not support NaN nor +/-∞.
|
|
267
267
|
// If the schema supports `null`, fall back to that. Otherwise, throw.
|
|
268
268
|
// This is intended to match JSON's behavior for such values.
|
|
269
269
|
if (allowedTypes.has(nullSchema)) {
|
|
270
270
|
return null;
|
|
271
271
|
} else {
|
|
272
|
-
throw new
|
|
272
|
+
throw new UsageError(`Received unsupported numeric value: ${value}.`);
|
|
273
273
|
}
|
|
274
274
|
} else {
|
|
275
275
|
return value;
|
|
@@ -287,7 +287,7 @@ function mapValueWithFallbacks(
|
|
|
287
287
|
}
|
|
288
288
|
}
|
|
289
289
|
default:
|
|
290
|
-
throw new
|
|
290
|
+
throw new UsageError(`Received unsupported leaf value: ${value}.`);
|
|
291
291
|
}
|
|
292
292
|
}
|
|
293
293
|
|
|
@@ -726,6 +726,7 @@ function tryGetInnerNode(target: unknown): InnerNode | undefined {
|
|
|
726
726
|
* Content which can be used to build a node.
|
|
727
727
|
* @remarks
|
|
728
728
|
* Can contain unhydrated nodes, but can not be an unhydrated node at the root.
|
|
729
|
+
* @system @alpha
|
|
729
730
|
*/
|
|
730
731
|
export type FactoryContent =
|
|
731
732
|
| IFluidHandle
|
|
@@ -744,12 +745,14 @@ export type FactoryContent =
|
|
|
744
745
|
* Can contain unhydrated nodes, but can not be an unhydrated node at the root.
|
|
745
746
|
*
|
|
746
747
|
* Supports object and map nodes.
|
|
748
|
+
* @system @alpha
|
|
747
749
|
*/
|
|
748
|
-
type FactoryContentObject = {
|
|
750
|
+
export type FactoryContentObject = {
|
|
749
751
|
readonly [P in string]?: InsertableContent;
|
|
750
752
|
};
|
|
751
753
|
|
|
752
754
|
/**
|
|
753
755
|
* Content which can be inserted into a tree.
|
|
756
|
+
* @system @alpha
|
|
754
757
|
*/
|
|
755
758
|
export type InsertableContent = Unhydrated<TreeNode> | FactoryContent;
|
|
@@ -18,11 +18,12 @@ import {
|
|
|
18
18
|
type Context,
|
|
19
19
|
type UnhydratedFlexTreeNode,
|
|
20
20
|
} from "./core/index.js";
|
|
21
|
-
import { type FlexTreeNode, isFlexTreeNode
|
|
21
|
+
import { type FlexTreeNode, isFlexTreeNode } from "../feature-libraries/index.js";
|
|
22
22
|
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
23
23
|
import { fail } from "../util/index.js";
|
|
24
24
|
|
|
25
25
|
import { getSimpleNodeSchemaFromInnerNode } from "./core/index.js";
|
|
26
|
+
import { markEager } from "./flexList.js";
|
|
26
27
|
|
|
27
28
|
/**
|
|
28
29
|
* Class which all {@link TreeNode}s must extend.
|
package/src/treeFactory.ts
CHANGED
|
@@ -81,6 +81,7 @@ export const SharedTree = configuredSharedTree({});
|
|
|
81
81
|
* });
|
|
82
82
|
* ```
|
|
83
83
|
* @privateRemarks
|
|
84
|
+
* This should be legacy, but has to be internal due to limitations of API tagging preventing it from being both alpha and alpha+legacy.
|
|
84
85
|
* TODO:
|
|
85
86
|
* Expose Ajv validator for better error message quality somehow.
|
|
86
87
|
* Maybe as part of a test utils or dev-tool package?
|
package/src/util/utils.ts
CHANGED
|
@@ -219,9 +219,10 @@ export function count(iterable: Iterable<unknown>): number {
|
|
|
219
219
|
|
|
220
220
|
/**
|
|
221
221
|
* Use for Json compatible data.
|
|
222
|
-
*
|
|
223
|
-
*
|
|
222
|
+
* @remarks
|
|
223
|
+
* This does not robustly forbid non json comparable data via type checking,
|
|
224
224
|
* but instead mostly restricts access to it.
|
|
225
|
+
* @alpha
|
|
225
226
|
*/
|
|
226
227
|
export type JsonCompatible =
|
|
227
228
|
| string
|
|
@@ -234,16 +235,17 @@ export type JsonCompatible =
|
|
|
234
235
|
|
|
235
236
|
/**
|
|
236
237
|
* Use for Json object compatible data.
|
|
237
|
-
*
|
|
238
|
-
*
|
|
238
|
+
* @remarks
|
|
239
|
+
* This does not robustly forbid non json comparable data via type checking,
|
|
239
240
|
* but instead mostly restricts access to it.
|
|
241
|
+
* @alpha
|
|
240
242
|
*/
|
|
241
243
|
export type JsonCompatibleObject = { [P in string]?: JsonCompatible };
|
|
242
244
|
|
|
243
245
|
/**
|
|
244
246
|
* Use for readonly view of Json compatible data.
|
|
245
|
-
*
|
|
246
|
-
*
|
|
247
|
+
* @remarks
|
|
248
|
+
* This does not robustly forbid non json comparable data via type checking,
|
|
247
249
|
* but instead mostly restricts access to it.
|
|
248
250
|
*/
|
|
249
251
|
export type JsonCompatibleReadOnly =
|
|
@@ -257,8 +259,8 @@ export type JsonCompatibleReadOnly =
|
|
|
257
259
|
|
|
258
260
|
/**
|
|
259
261
|
* Use for readonly view of Json compatible data.
|
|
260
|
-
*
|
|
261
|
-
*
|
|
262
|
+
* @remarks
|
|
263
|
+
* This does not robustly forbid non json comparable data via type checking,
|
|
262
264
|
* but instead mostly restricts access to it.
|
|
263
265
|
*/
|
|
264
266
|
export type JsonCompatibleReadOnlyObject = { readonly [P in string]?: JsonCompatibleReadOnly };
|