@fluidframework/tree 2.63.0-359734 → 2.63.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/CHANGELOG.md +81 -0
- package/api-report/tree.alpha.api.md +42 -8
- package/dist/alpha.d.ts +7 -0
- package/dist/codec/codec.d.ts +10 -27
- package/dist/codec/codec.d.ts.map +1 -1
- package/dist/codec/codec.js +9 -28
- package/dist/codec/codec.js.map +1 -1
- package/dist/codec/versioned/codec.d.ts +6 -5
- package/dist/codec/versioned/codec.d.ts.map +1 -1
- package/dist/codec/versioned/codec.js +4 -4
- package/dist/codec/versioned/codec.js.map +1 -1
- package/dist/core/tree/detachedFieldIndex.js +1 -1
- package/dist/core/tree/detachedFieldIndex.js.map +1 -1
- package/dist/core/tree/detachedFieldIndexCodecs.js +1 -1
- package/dist/core/tree/detachedFieldIndexCodecs.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkTree.d.ts +67 -13
- package/dist/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkTree.js +70 -35
- package/dist/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts +9 -8
- package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/codecs.js +2 -2
- package/dist/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.d.ts +23 -0
- package/dist/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.d.ts.map +1 -0
- package/dist/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.js +15 -0
- package/dist/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.js.map +1 -0
- package/dist/feature-libraries/chunked-forest/codec/index.d.ts +1 -0
- package/dist/feature-libraries/chunked-forest/codec/index.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/index.js +3 -1
- package/dist/feature-libraries/chunked-forest/codec/index.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +3 -2
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/index.d.ts +1 -1
- package/dist/feature-libraries/chunked-forest/index.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/index.js +2 -1
- package/dist/feature-libraries/chunked-forest/index.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.js +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts +3 -3
- package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.js +3 -3
- package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +4 -11
- package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -1
- package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js +2 -6
- package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -1
- package/dist/feature-libraries/index.d.ts +1 -1
- package/dist/feature-libraries/index.d.ts.map +1 -1
- package/dist/feature-libraries/index.js +2 -1
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/schema-index/codec.d.ts +6 -5
- package/dist/feature-libraries/schema-index/codec.d.ts.map +1 -1
- package/dist/feature-libraries/schema-index/codec.js +3 -3
- package/dist/feature-libraries/schema-index/codec.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.d.ts.map +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/shared-tree/independentView.d.ts.map +1 -1
- package/dist/shared-tree/independentView.js +2 -2
- package/dist/shared-tree/independentView.js.map +1 -1
- package/dist/shared-tree/schematizingTreeView.d.ts +5 -0
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +37 -7
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts +6 -8
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +7 -9
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/sharedTreeChangeCodecs.js +1 -1
- package/dist/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
- package/dist/shared-tree/tree.js +1 -1
- package/dist/shared-tree/tree.js.map +1 -1
- package/dist/shared-tree/treeAlpha.d.ts +1 -1
- package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
- package/dist/shared-tree/treeAlpha.js +3 -3
- package/dist/shared-tree/treeAlpha.js.map +1 -1
- package/dist/shared-tree/treeCheckout.js +1 -1
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
- package/dist/shared-tree-core/defaultResubmitMachine.js +3 -2
- package/dist/shared-tree-core/defaultResubmitMachine.js.map +1 -1
- package/dist/simple-tree/api/index.d.ts +1 -1
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +37 -2
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.js +34 -14
- package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
- package/dist/simple-tree/api/schemaStatics.js +3 -0
- package/dist/simple-tree/api/schemaStatics.js.map +1 -1
- package/dist/simple-tree/api/storedSchema.d.ts +4 -3
- package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/storedSchema.js +3 -3
- package/dist/simple-tree/api/storedSchema.js.map +1 -1
- package/dist/simple-tree/api/treeBeta.js +2 -2
- package/dist/simple-tree/api/treeBeta.js.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.js +3 -3
- package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
- package/dist/simple-tree/api/typesUnsafe.d.ts +60 -1
- package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -1
- package/dist/simple-tree/api/typesUnsafe.js.map +1 -1
- package/dist/simple-tree/core/allowedTypes.d.ts.map +1 -1
- package/dist/simple-tree/core/allowedTypes.js +1 -1
- package/dist/simple-tree/core/allowedTypes.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 -2
- package/dist/simple-tree/core/index.js.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.d.ts +7 -11
- package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js +24 -47
- package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/dist/simple-tree/getTreeNodeForField.js +1 -1
- package/dist/simple-tree/getTreeNodeForField.js.map +1 -1
- package/dist/simple-tree/index.d.ts +2 -2
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +2 -2
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.js +2 -2
- package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.js +2 -2
- package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.js +3 -3
- package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/record/recordNode.js +6 -6
- package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
- package/dist/simple-tree/prepareForInsertion.d.ts +36 -4
- package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
- package/dist/simple-tree/prepareForInsertion.js +43 -15
- package/dist/simple-tree/prepareForInsertion.js.map +1 -1
- package/dist/treeFactory.d.ts.map +1 -1
- package/dist/treeFactory.js +13 -4
- package/dist/treeFactory.js.map +1 -1
- package/lib/alpha.d.ts +7 -0
- package/lib/codec/codec.d.ts +10 -27
- package/lib/codec/codec.d.ts.map +1 -1
- package/lib/codec/codec.js +8 -27
- package/lib/codec/codec.js.map +1 -1
- package/lib/codec/versioned/codec.d.ts +6 -5
- package/lib/codec/versioned/codec.d.ts.map +1 -1
- package/lib/codec/versioned/codec.js +4 -4
- package/lib/codec/versioned/codec.js.map +1 -1
- package/lib/core/tree/detachedFieldIndex.js +1 -1
- package/lib/core/tree/detachedFieldIndex.js.map +1 -1
- package/lib/core/tree/detachedFieldIndexCodecs.js +1 -1
- package/lib/core/tree/detachedFieldIndexCodecs.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkTree.d.ts +67 -13
- package/lib/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkTree.js +68 -32
- package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts +9 -8
- package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/codecs.js +2 -2
- package/lib/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.d.ts +23 -0
- package/lib/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.d.ts.map +1 -0
- package/lib/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.js +11 -0
- package/lib/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.js.map +1 -0
- package/lib/feature-libraries/chunked-forest/codec/index.d.ts +1 -0
- package/lib/feature-libraries/chunked-forest/codec/index.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/index.js +1 -0
- package/lib/feature-libraries/chunked-forest/codec/index.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +3 -2
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/index.d.ts +1 -1
- package/lib/feature-libraries/chunked-forest/index.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/index.js +1 -1
- package/lib/feature-libraries/chunked-forest/index.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.js +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts +3 -3
- package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.js +3 -3
- package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +4 -11
- package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -1
- package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js +2 -6
- package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -1
- package/lib/feature-libraries/index.d.ts +1 -1
- package/lib/feature-libraries/index.d.ts.map +1 -1
- package/lib/feature-libraries/index.js +1 -1
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/schema-index/codec.d.ts +6 -5
- package/lib/feature-libraries/schema-index/codec.d.ts.map +1 -1
- package/lib/feature-libraries/schema-index/codec.js +3 -3
- package/lib/feature-libraries/schema-index/codec.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.d.ts.map +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/shared-tree/independentView.d.ts.map +1 -1
- package/lib/shared-tree/independentView.js +3 -3
- package/lib/shared-tree/independentView.js.map +1 -1
- package/lib/shared-tree/schematizingTreeView.d.ts +5 -0
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +40 -10
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts +6 -8
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +8 -10
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/sharedTreeChangeCodecs.js +1 -1
- package/lib/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
- package/lib/shared-tree/tree.js +2 -2
- package/lib/shared-tree/tree.js.map +1 -1
- package/lib/shared-tree/treeAlpha.d.ts +1 -1
- package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
- package/lib/shared-tree/treeAlpha.js +4 -4
- package/lib/shared-tree/treeAlpha.js.map +1 -1
- package/lib/shared-tree/treeCheckout.js +1 -1
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
- package/lib/shared-tree-core/defaultResubmitMachine.js +3 -2
- package/lib/shared-tree-core/defaultResubmitMachine.js.map +1 -1
- package/lib/simple-tree/api/index.d.ts +1 -1
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +37 -2
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.js +34 -14
- package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
- package/lib/simple-tree/api/schemaStatics.js +3 -0
- package/lib/simple-tree/api/schemaStatics.js.map +1 -1
- package/lib/simple-tree/api/storedSchema.d.ts +4 -3
- package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/storedSchema.js +3 -3
- package/lib/simple-tree/api/storedSchema.js.map +1 -1
- package/lib/simple-tree/api/treeBeta.js +2 -2
- package/lib/simple-tree/api/treeBeta.js.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.js +4 -4
- package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
- package/lib/simple-tree/api/typesUnsafe.d.ts +60 -1
- package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -1
- package/lib/simple-tree/api/typesUnsafe.js.map +1 -1
- package/lib/simple-tree/core/allowedTypes.d.ts.map +1 -1
- package/lib/simple-tree/core/allowedTypes.js +1 -1
- package/lib/simple-tree/core/allowedTypes.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 +7 -11
- package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js +23 -46
- package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/lib/simple-tree/getTreeNodeForField.js +1 -1
- package/lib/simple-tree/getTreeNodeForField.js.map +1 -1
- package/lib/simple-tree/index.d.ts +2 -2
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +1 -1
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.js +3 -3
- package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.js +3 -3
- package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.js +4 -4
- package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/record/recordNode.js +7 -7
- package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
- package/lib/simple-tree/prepareForInsertion.d.ts +36 -4
- package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
- package/lib/simple-tree/prepareForInsertion.js +45 -17
- package/lib/simple-tree/prepareForInsertion.js.map +1 -1
- package/lib/treeFactory.d.ts.map +1 -1
- package/lib/treeFactory.js +13 -4
- package/lib/treeFactory.js.map +1 -1
- package/package.json +21 -20
- package/src/codec/codec.ts +11 -29
- package/src/codec/versioned/codec.ts +6 -6
- package/src/core/tree/detachedFieldIndex.ts +1 -1
- package/src/core/tree/detachedFieldIndexCodecs.ts +1 -1
- package/src/feature-libraries/chunked-forest/chunkTree.ts +112 -45
- package/src/feature-libraries/chunked-forest/codec/codecs.ts +7 -12
- package/src/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.ts +33 -0
- package/src/feature-libraries/chunked-forest/codec/index.ts +4 -0
- package/src/feature-libraries/chunked-forest/codec/schemaBasedEncode.ts +4 -7
- package/src/feature-libraries/chunked-forest/index.ts +2 -0
- package/src/feature-libraries/default-schema/defaultFieldKinds.ts +1 -1
- package/src/feature-libraries/flex-tree/flexTreeTypes.ts +1 -1
- package/src/feature-libraries/forest-summary/forestSummarizer.ts +8 -12
- package/src/feature-libraries/forest-summary/incrementalSummaryBuilder.ts +3 -12
- package/src/feature-libraries/index.ts +2 -0
- package/src/feature-libraries/schema-index/codec.ts +5 -5
- package/src/index.ts +7 -0
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/independentView.ts +3 -0
- package/src/shared-tree/schematizingTreeView.ts +63 -8
- package/src/shared-tree/sharedTree.ts +34 -21
- package/src/shared-tree/sharedTreeChangeCodecs.ts +1 -1
- package/src/shared-tree/tree.ts +2 -2
- package/src/shared-tree/treeAlpha.ts +6 -12
- package/src/shared-tree/treeCheckout.ts +1 -1
- package/src/shared-tree-core/defaultResubmitMachine.ts +3 -2
- package/src/simple-tree/api/index.ts +7 -0
- package/src/simple-tree/api/schemaFactoryAlpha.ts +79 -19
- package/src/simple-tree/api/schemaStatics.ts +3 -0
- package/src/simple-tree/api/storedSchema.ts +5 -4
- package/src/simple-tree/api/treeBeta.ts +2 -2
- package/src/simple-tree/api/treeNodeApi.ts +4 -4
- package/src/simple-tree/api/typesUnsafe.ts +81 -0
- package/src/simple-tree/core/TreeNodeBinding.md +14 -70
- package/src/simple-tree/core/allowedTypes.ts +4 -1
- package/src/simple-tree/core/index.ts +1 -1
- package/src/simple-tree/core/treeNodeKernel.ts +25 -59
- package/src/simple-tree/getTreeNodeForField.ts +1 -1
- package/src/simple-tree/index.ts +8 -1
- package/src/simple-tree/node-kinds/array/arrayNode.ts +3 -3
- package/src/simple-tree/node-kinds/map/mapNode.ts +3 -3
- package/src/simple-tree/node-kinds/object/objectNode.ts +4 -4
- package/src/simple-tree/node-kinds/record/recordNode.ts +7 -7
- package/src/simple-tree/prepareForInsertion.ts +87 -25
- package/src/treeFactory.ts +17 -4
|
@@ -7,7 +7,6 @@ import type {
|
|
|
7
7
|
SchemaAndPolicy,
|
|
8
8
|
IForestSubscription,
|
|
9
9
|
UpPath,
|
|
10
|
-
NodeIndex,
|
|
11
10
|
FieldKey,
|
|
12
11
|
DetachedField,
|
|
13
12
|
TreeFieldStoredSchema,
|
|
@@ -21,6 +20,10 @@ import {
|
|
|
21
20
|
type FlexibleFieldContent,
|
|
22
21
|
type FlexibleNodeContent,
|
|
23
22
|
throwOutOfSchema,
|
|
23
|
+
flexTreeSlot,
|
|
24
|
+
ContextSlot,
|
|
25
|
+
getOrCreateHydratedFlexTreeNode,
|
|
26
|
+
assertFlexTreeEntityNotFreed,
|
|
24
27
|
} from "../feature-libraries/index.js";
|
|
25
28
|
import type { ImplicitFieldSchema } from "./fieldSchema.js";
|
|
26
29
|
import {
|
|
@@ -28,14 +31,14 @@ import {
|
|
|
28
31
|
unhydratedFlexTreeFromInsertable,
|
|
29
32
|
} from "./unhydratedFlexTreeFromInsertable.js";
|
|
30
33
|
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
31
|
-
import { brand } from "../util/index.js";
|
|
34
|
+
import { brand, type Mutable } from "../util/index.js";
|
|
32
35
|
import {
|
|
33
36
|
getKernel,
|
|
34
37
|
type ImplicitAllowedTypes,
|
|
35
38
|
type TreeNode,
|
|
36
39
|
type UnhydratedFlexTreeNode,
|
|
37
40
|
} from "./core/index.js";
|
|
38
|
-
import { debugAssert, oob } from "@fluidframework/core-utils/internal";
|
|
41
|
+
import { debugAssert, fail, oob } from "@fluidframework/core-utils/internal";
|
|
39
42
|
import { isFieldInSchema } from "../feature-libraries/index.js";
|
|
40
43
|
|
|
41
44
|
/**
|
|
@@ -121,11 +124,18 @@ export function prepareForInsertionContextless<TIn extends InsertableContent | u
|
|
|
121
124
|
schemaAndPolicy: SchemaAndPolicy,
|
|
122
125
|
hydratedData: FlexTreeHydratedContextMinimal | undefined,
|
|
123
126
|
destinationSchema: TreeFieldStoredSchema,
|
|
127
|
+
scheduleHydrationOverride?: HydrationScheduler,
|
|
124
128
|
): TIn extends undefined ? undefined : FlexibleNodeContent {
|
|
125
129
|
const mapTree = unhydratedFlexTreeFromInsertable(data, schema);
|
|
126
130
|
|
|
127
131
|
const contentArray = mapTree === undefined ? [] : [mapTree];
|
|
128
|
-
validateAndPrepare(
|
|
132
|
+
validateAndPrepare(
|
|
133
|
+
schemaAndPolicy,
|
|
134
|
+
hydratedData,
|
|
135
|
+
destinationSchema,
|
|
136
|
+
contentArray,
|
|
137
|
+
scheduleHydrationOverride,
|
|
138
|
+
);
|
|
129
139
|
|
|
130
140
|
return mapTree;
|
|
131
141
|
}
|
|
@@ -141,12 +151,19 @@ function validateAndPrepare(
|
|
|
141
151
|
hydratedData: FlexTreeHydratedContextMinimal | undefined,
|
|
142
152
|
fieldSchema: TreeFieldStoredSchema,
|
|
143
153
|
mapTrees: readonly UnhydratedFlexTreeNode[],
|
|
154
|
+
scheduleHydrationOverride?: HydrationScheduler,
|
|
144
155
|
): void {
|
|
145
156
|
if (hydratedData !== undefined) {
|
|
146
157
|
// Run `prepareContentForHydration` before walking the tree in `isFieldInSchema`.
|
|
147
158
|
// This ensures that when `isFieldInSchema` requests identifiers (or any other contextual defaults),
|
|
148
159
|
// they were already creating used the more specific context we have access to from `hydratedData`.
|
|
149
|
-
prepareContentForHydration(
|
|
160
|
+
prepareContentForHydration(
|
|
161
|
+
mapTrees,
|
|
162
|
+
scheduleHydrationOverride ??
|
|
163
|
+
((batch, doHydration) =>
|
|
164
|
+
scheduleHydration(batch, hydratedData.checkout.forest, doHydration)),
|
|
165
|
+
hydratedData,
|
|
166
|
+
);
|
|
150
167
|
// TODO: AB#45723
|
|
151
168
|
// Now that staged schema rely on this validation, its a bit odd we don't do it for insertion into unhydrated contexts.
|
|
152
169
|
// We can't simply enable it for them however due to contextual default fields which would not have been created yet (see comment above).
|
|
@@ -157,15 +174,6 @@ function validateAndPrepare(
|
|
|
157
174
|
}
|
|
158
175
|
}
|
|
159
176
|
|
|
160
|
-
/**
|
|
161
|
-
* An {@link UpPath} that is just index zero in a {@link DetachedField} which can be modified at a later time.
|
|
162
|
-
*/
|
|
163
|
-
interface Root extends UpPath {
|
|
164
|
-
readonly parent: undefined;
|
|
165
|
-
parentField: DetachedField & FieldKey;
|
|
166
|
-
readonly parentIndex: NodeIndex & 0;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
177
|
/**
|
|
170
178
|
* The path from the included node to the root of the content tree it was inserted as part of.
|
|
171
179
|
*/
|
|
@@ -181,7 +189,7 @@ interface LocatedNodesBatch {
|
|
|
181
189
|
/**
|
|
182
190
|
* UpPath shared by all {@link RelativeNodePath}s in this batch corresponding to the root of the inserted content.
|
|
183
191
|
*/
|
|
184
|
-
readonly rootPath:
|
|
192
|
+
readonly rootPath: Mutable<UpPath>;
|
|
185
193
|
readonly paths: RelativeNodePath[];
|
|
186
194
|
}
|
|
187
195
|
|
|
@@ -204,7 +212,7 @@ const placeholderKey: DetachedField & FieldKey = brand("placeholder" as const);
|
|
|
204
212
|
*/
|
|
205
213
|
export function prepareContentForHydration(
|
|
206
214
|
content: readonly UnhydratedFlexTreeNode[],
|
|
207
|
-
|
|
215
|
+
scheduler: HydrationScheduler,
|
|
208
216
|
context: FlexTreeHydratedContextMinimal,
|
|
209
217
|
): void {
|
|
210
218
|
const batches: LocatedNodesBatch[] = [];
|
|
@@ -228,7 +236,8 @@ export function prepareContentForHydration(
|
|
|
228
236
|
);
|
|
229
237
|
}
|
|
230
238
|
|
|
231
|
-
|
|
239
|
+
const doHydration = hydrator(batches, context.checkout.forest);
|
|
240
|
+
scheduler(batches, doHydration);
|
|
232
241
|
}
|
|
233
242
|
|
|
234
243
|
function walkMapTree(
|
|
@@ -270,6 +279,23 @@ function walkMapTree(
|
|
|
270
279
|
}
|
|
271
280
|
}
|
|
272
281
|
|
|
282
|
+
/**
|
|
283
|
+
* A function which can schedule hydration of batches of nodes to occur at a later time (which must be after they have been inserted into the tree).
|
|
284
|
+
*/
|
|
285
|
+
type HydrationScheduler = (
|
|
286
|
+
locatedNodes: readonly LocatedNodesBatch[],
|
|
287
|
+
/**
|
|
288
|
+
* Does the actual hydration. Should be called for each index in `locatedNodes` once the corresponding content has been inserted into the tree.
|
|
289
|
+
*/
|
|
290
|
+
doHydration: Hydrator,
|
|
291
|
+
) => void;
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* Does the actual hydration.
|
|
295
|
+
* The provided `attachPath` is the path the content is currently under (where it was attached in the tree).
|
|
296
|
+
*/
|
|
297
|
+
type Hydrator = (batch: LocatedNodesBatch, attachPath: UpPath) => void;
|
|
298
|
+
|
|
273
299
|
/**
|
|
274
300
|
* Register events which will hydrate batches of nodes when they are inserted.
|
|
275
301
|
* The next edits to forest must be their insertions, in order, or data corruption can occur.
|
|
@@ -280,22 +306,58 @@ function walkMapTree(
|
|
|
280
306
|
function scheduleHydration(
|
|
281
307
|
locatedNodes: readonly LocatedNodesBatch[],
|
|
282
308
|
forest: IForestSubscription,
|
|
309
|
+
doHydration: Hydrator,
|
|
283
310
|
): void {
|
|
284
311
|
// Only subscribe to the event if there is at least one TreeNode tree to hydrate - this is not the case when inserting an empty array [].
|
|
285
312
|
if (locatedNodes.length > 0) {
|
|
286
313
|
// Creating a new array emits one event per element in the array, so listen to the event once for each element
|
|
287
|
-
let
|
|
314
|
+
let index = 0;
|
|
288
315
|
const off = forest.events.on("afterRootFieldCreated", (fieldKey) => {
|
|
289
316
|
// Indexing is safe here because of the length check above. This assumes the array has not been modified which should be the case.
|
|
290
|
-
const batch = locatedNodes[
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
for (const { path, node } of batch.paths) {
|
|
294
|
-
getKernel(node).hydrate(forest.anchors, path);
|
|
295
|
-
}
|
|
296
|
-
if (++i === locatedNodes.length) {
|
|
317
|
+
const batch = locatedNodes[index] ?? oob();
|
|
318
|
+
doHydration(batch, { parent: undefined, parentField: fieldKey, parentIndex: 0 });
|
|
319
|
+
if (++index === locatedNodes.length) {
|
|
297
320
|
off();
|
|
298
321
|
}
|
|
299
322
|
});
|
|
300
323
|
}
|
|
301
324
|
}
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* Implementation of {@link Hydrator}.
|
|
328
|
+
*/
|
|
329
|
+
function hydrator(
|
|
330
|
+
locatedNodes: readonly LocatedNodesBatch[],
|
|
331
|
+
forest: IForestSubscription,
|
|
332
|
+
): (batch: LocatedNodesBatch, attachedPath: UpPath) => void {
|
|
333
|
+
return (batch: LocatedNodesBatch, attachedPath: UpPath) => {
|
|
334
|
+
const context = forest.anchors.slots.get(ContextSlot) ?? fail(0xb41 /* missing context */);
|
|
335
|
+
|
|
336
|
+
// Modify paths in batch to point to correct location:
|
|
337
|
+
debugAssert(() => batch.rootPath.parentField === placeholderKey);
|
|
338
|
+
batch.rootPath.parentField = attachedPath.parentField;
|
|
339
|
+
batch.rootPath.parent = attachedPath.parent;
|
|
340
|
+
batch.rootPath.parentIndex = attachedPath.parentIndex;
|
|
341
|
+
|
|
342
|
+
// To hydrate a TreeNode, it must be associated with a HydratedFlexTreeNode.
|
|
343
|
+
// Find or create one as necessary.
|
|
344
|
+
for (const { path, node } of batch.paths) {
|
|
345
|
+
const anchor = forest.anchors.track(path);
|
|
346
|
+
const anchorNode = forest.anchors.locate(anchor) ?? fail(0xc7b /* missing anchor */);
|
|
347
|
+
|
|
348
|
+
let flexNode = anchorNode.slots.get(flexTreeSlot);
|
|
349
|
+
if (flexNode === undefined) {
|
|
350
|
+
// the flex node must be created
|
|
351
|
+
const cursor = forest.allocateCursor("getFlexNode");
|
|
352
|
+
forest.moveCursorToPath(anchorNode, cursor);
|
|
353
|
+
|
|
354
|
+
flexNode = getOrCreateHydratedFlexTreeNode(context, cursor);
|
|
355
|
+
cursor.free();
|
|
356
|
+
assertFlexTreeEntityNotFreed(flexNode);
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
getKernel(node).hydrate(flexNode);
|
|
360
|
+
forest.anchors.forget(anchor);
|
|
361
|
+
}
|
|
362
|
+
};
|
|
363
|
+
}
|
package/src/treeFactory.ts
CHANGED
|
@@ -49,10 +49,23 @@ function treeKernelFactory(
|
|
|
49
49
|
if (args.idCompressor === undefined) {
|
|
50
50
|
throw new UsageError("IdCompressor must be enabled to use SharedTree");
|
|
51
51
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
adjustedOptions
|
|
52
|
+
|
|
53
|
+
const { minVersionForCollab, ...otherOptions } = options;
|
|
54
|
+
|
|
55
|
+
const adjustedOptions = {
|
|
56
|
+
...otherOptions,
|
|
57
|
+
// Cases:
|
|
58
|
+
// A. If options specifies minVersionForCollab, it takes precedence over args.minVersionForCollab.
|
|
59
|
+
// This value is set when:
|
|
60
|
+
// - A customer using the declarative SharedTree API specifies the setting at the Shared Tree level.
|
|
61
|
+
// There is currently no way to set it via the declarative API, but it could be added in the future.
|
|
62
|
+
// - treeKernelFactory is invoked in a fuzz test with a specific minVersionForCollab
|
|
63
|
+
// B. Otherwise, we use args.minVersionForCollab, which is propagated from the ContainerRuntime.
|
|
64
|
+
// C. If neither specifies it, we fall back to a default value default of 2.0 since that is the oldest version that supports SharedTree.
|
|
65
|
+
minVersionForCollab:
|
|
66
|
+
minVersionForCollab ?? args.minVersionForCollab ?? FluidClientVersion.v2_0,
|
|
67
|
+
};
|
|
68
|
+
|
|
56
69
|
return new SharedTreeKernel(
|
|
57
70
|
new Breakable("SharedTree"),
|
|
58
71
|
args.sharedObject,
|