@fluidframework/tree 2.51.0 → 2.52.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/.vscode/settings.json +0 -1
- package/CHANGELOG.md +43 -0
- package/api-report/tree.alpha.api.md +3 -2
- package/dist/codec/codec.d.ts +2 -1
- package/dist/codec/codec.d.ts.map +1 -1
- package/dist/codec/codec.js +4 -3
- package/dist/codec/codec.js.map +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +3 -2
- package/dist/core/index.js.map +1 -1
- package/dist/core/rebase/index.d.ts +1 -1
- package/dist/core/rebase/index.d.ts.map +1 -1
- package/dist/core/rebase/index.js +2 -1
- package/dist/core/rebase/index.js.map +1 -1
- package/dist/core/rebase/types.d.ts +3 -1
- package/dist/core/rebase/types.d.ts.map +1 -1
- package/dist/core/rebase/types.js +2 -1
- package/dist/core/rebase/types.js.map +1 -1
- package/dist/core/schema-stored/schema.d.ts +1 -23
- package/dist/core/schema-stored/schema.d.ts.map +1 -1
- package/dist/core/schema-stored/schema.js +2 -2
- package/dist/core/schema-stored/schema.js.map +1 -1
- package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndex.js +2 -3
- package/dist/core/tree/detachedFieldIndex.js.map +1 -1
- package/dist/core/tree/detachedFieldIndexCodecCommon.d.ts +17 -0
- package/dist/core/tree/detachedFieldIndexCodecCommon.d.ts.map +1 -0
- package/dist/core/tree/detachedFieldIndexCodecCommon.js +68 -0
- package/dist/core/tree/detachedFieldIndexCodecCommon.js.map +1 -0
- package/dist/core/tree/detachedFieldIndexCodecV1.d.ts +11 -0
- package/dist/core/tree/detachedFieldIndexCodecV1.d.ts.map +1 -0
- package/dist/core/tree/detachedFieldIndexCodecV1.js +55 -0
- package/dist/core/tree/detachedFieldIndexCodecV1.js.map +1 -0
- package/dist/core/tree/detachedFieldIndexCodecV2.d.ts +11 -0
- package/dist/core/tree/detachedFieldIndexCodecV2.d.ts.map +1 -0
- package/dist/core/tree/detachedFieldIndexCodecV2.js +49 -0
- package/dist/core/tree/detachedFieldIndexCodecV2.js.map +1 -0
- package/dist/core/tree/detachedFieldIndexCodecs.d.ts +11 -0
- package/dist/core/tree/detachedFieldIndexCodecs.d.ts.map +1 -0
- package/dist/core/tree/detachedFieldIndexCodecs.js +26 -0
- package/dist/core/tree/detachedFieldIndexCodecs.js.map +1 -0
- package/dist/core/tree/detachedFieldIndexFormatCommon.d.ts +37 -0
- package/dist/core/tree/detachedFieldIndexFormatCommon.d.ts.map +1 -0
- package/dist/core/tree/{detachedFieldIndexFormat.js → detachedFieldIndexFormatCommon.js} +18 -13
- package/dist/core/tree/detachedFieldIndexFormatCommon.js.map +1 -0
- package/dist/core/tree/detachedFieldIndexFormatV1.d.ts +13 -0
- package/dist/core/tree/detachedFieldIndexFormatV1.d.ts.map +1 -0
- package/dist/core/tree/detachedFieldIndexFormatV1.js +12 -0
- package/dist/core/tree/detachedFieldIndexFormatV1.js.map +1 -0
- package/dist/core/tree/detachedFieldIndexFormatV2.d.ts +14 -0
- package/dist/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -0
- package/dist/core/tree/detachedFieldIndexFormatV2.js +14 -0
- package/dist/core/tree/detachedFieldIndexFormatV2.js.map +1 -0
- package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +9 -9
- package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js +21 -21
- package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +4 -2
- package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js +4 -4
- package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +50 -31
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +74 -61
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/format.d.ts +20 -14
- package/dist/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/format.js +18 -12
- package/dist/feature-libraries/chunked-forest/codec/format.js.map +1 -1
- package/{lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts → dist/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts} +20 -14
- package/dist/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts.map +1 -0
- package/dist/feature-libraries/chunked-forest/codec/{nodeShape.js → nodeEncoder.js} +23 -17
- package/dist/feature-libraries/chunked-forest/codec/nodeEncoder.js.map +1 -0
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +7 -7
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +22 -22
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/uncompressedEncode.js +2 -2
- package/dist/feature-libraries/chunked-forest/codec/uncompressedEncode.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +5 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.js +14 -2
- package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultSchema.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultSchema.js +0 -2
- package/dist/feature-libraries/default-schema/defaultSchema.js.map +1 -1
- package/dist/feature-libraries/default-schema/index.d.ts +1 -1
- package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/index.js +2 -2
- package/dist/feature-libraries/default-schema/index.js.map +1 -1
- package/dist/feature-libraries/default-schema/schemaChecker.d.ts +14 -4
- package/dist/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/schemaChecker.js +31 -26
- package/dist/feature-libraries/default-schema/schemaChecker.js.map +1 -1
- package/dist/feature-libraries/index.d.ts +1 -2
- package/dist/feature-libraries/index.d.ts.map +1 -1
- package/dist/feature-libraries/index.js +2 -4
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/modular-schema/comparison.d.ts +5 -6
- package/dist/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/comparison.js +15 -16
- package/dist/feature-libraries/modular-schema/comparison.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts +9 -3
- package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
- package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
- package/dist/feature-libraries/object-forest/objectForest.js +2 -3
- package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/shared-tree/independentView.d.ts +8 -0
- package/dist/shared-tree/independentView.d.ts.map +1 -1
- package/dist/shared-tree/independentView.js +23 -11
- package/dist/shared-tree/independentView.js.map +1 -1
- package/dist/shared-tree/schematizeTree.js +1 -1
- package/dist/shared-tree/schematizeTree.js.map +1 -1
- package/dist/shared-tree/schematizingTreeView.d.ts +0 -1
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +7 -10
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +1 -29
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/treeAlpha.d.ts +20 -6
- package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
- package/dist/shared-tree/treeAlpha.js +9 -4
- package/dist/shared-tree/treeAlpha.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts +2 -1
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +32 -0
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree-core/branch.d.ts.map +1 -1
- package/dist/shared-tree-core/branch.js +1 -1
- package/dist/shared-tree-core/branch.js.map +1 -1
- package/dist/simple-tree/api/conciseTree.d.ts +2 -2
- package/dist/simple-tree/api/conciseTree.d.ts.map +1 -1
- package/dist/simple-tree/api/conciseTree.js +6 -6
- package/dist/simple-tree/api/conciseTree.js.map +1 -1
- package/dist/simple-tree/api/configuration.d.ts +8 -2
- package/dist/simple-tree/api/configuration.d.ts.map +1 -1
- package/dist/simple-tree/api/configuration.js.map +1 -1
- package/dist/simple-tree/api/create.d.ts +8 -7
- package/dist/simple-tree/api/create.d.ts.map +1 -1
- package/dist/simple-tree/api/create.js +35 -22
- package/dist/simple-tree/api/create.js.map +1 -1
- package/dist/simple-tree/api/customTree.d.ts +25 -4
- package/dist/simple-tree/api/customTree.d.ts.map +1 -1
- package/dist/simple-tree/api/customTree.js +42 -16
- package/dist/simple-tree/api/customTree.js.map +1 -1
- package/dist/simple-tree/api/discrepancies.d.ts +98 -0
- package/dist/simple-tree/api/discrepancies.d.ts.map +1 -0
- package/dist/simple-tree/api/discrepancies.js +255 -0
- package/dist/simple-tree/api/discrepancies.js.map +1 -0
- package/dist/simple-tree/api/schemaCompatibilityTester.d.ts +9 -7
- package/dist/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaCompatibilityTester.js +18 -117
- package/dist/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
- package/dist/simple-tree/api/schemaFactory.d.ts +7 -4
- package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactory.js.map +1 -1
- package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/storedSchema.js +5 -1
- package/dist/simple-tree/api/storedSchema.js.map +1 -1
- package/dist/simple-tree/api/treeBeta.d.ts +2 -2
- package/dist/simple-tree/api/treeBeta.d.ts.map +1 -1
- package/dist/simple-tree/api/treeBeta.js +10 -4
- package/dist/simple-tree/api/treeBeta.js.map +1 -1
- package/dist/simple-tree/api/verboseTree.d.ts +2 -2
- package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
- package/dist/simple-tree/api/verboseTree.js +15 -15
- package/dist/simple-tree/api/verboseTree.js.map +1 -1
- package/dist/simple-tree/core/allowedTypes.d.ts +20 -4
- package/dist/simple-tree/core/allowedTypes.d.ts.map +1 -1
- package/dist/simple-tree/core/allowedTypes.js +45 -13
- package/dist/simple-tree/core/allowedTypes.js.map +1 -1
- package/dist/simple-tree/core/context.d.ts +13 -2
- package/dist/simple-tree/core/context.d.ts.map +1 -1
- package/dist/simple-tree/core/context.js +22 -9
- package/dist/simple-tree/core/context.js.map +1 -1
- package/dist/simple-tree/core/index.d.ts +2 -2
- package/dist/simple-tree/core/index.d.ts.map +1 -1
- package/dist/simple-tree/core/index.js +3 -1
- package/dist/simple-tree/core/index.js.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.d.ts +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/dist/simple-tree/core/treeNodeValid.d.ts +1 -1
- package/dist/simple-tree/core/treeNodeValid.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeValid.js +8 -1
- package/dist/simple-tree/core/treeNodeValid.js.map +1 -1
- package/dist/simple-tree/core/walkSchema.d.ts +3 -0
- package/dist/simple-tree/core/walkSchema.d.ts.map +1 -1
- package/dist/simple-tree/core/walkSchema.js +2 -0
- package/dist/simple-tree/core/walkSchema.js.map +1 -1
- package/dist/simple-tree/createContext.d.ts +2 -0
- package/dist/simple-tree/createContext.d.ts.map +1 -1
- package/dist/simple-tree/createContext.js +3 -1
- package/dist/simple-tree/createContext.js.map +1 -1
- package/dist/simple-tree/fieldSchema.d.ts +1 -0
- package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
- package/dist/simple-tree/fieldSchema.js +1 -0
- package/dist/simple-tree/fieldSchema.js.map +1 -1
- package/dist/simple-tree/index.d.ts +4 -4
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +7 -8
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.js +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/index.d.ts +1 -1
- package/dist/simple-tree/node-kinds/index.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/index.js +1 -2
- package/dist/simple-tree/node-kinds/index.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/index.d.ts +1 -1
- package/dist/simple-tree/node-kinds/object/index.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/index.js +1 -2
- package/dist/simple-tree/node-kinds/object/index.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.d.ts +2 -7
- package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.js +4 -18
- package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/dist/simple-tree/prepareForInsertion.d.ts +5 -5
- package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
- package/dist/simple-tree/prepareForInsertion.js +9 -3
- package/dist/simple-tree/prepareForInsertion.js.map +1 -1
- package/dist/simple-tree/toStoredSchema.d.ts +3 -0
- package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/dist/simple-tree/toStoredSchema.js +3 -0
- package/dist/simple-tree/toStoredSchema.js.map +1 -1
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +2 -2
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
- package/dist/simple-tree/walkFieldSchema.d.ts +1 -0
- package/dist/simple-tree/walkFieldSchema.d.ts.map +1 -1
- package/dist/simple-tree/walkFieldSchema.js +1 -0
- package/dist/simple-tree/walkFieldSchema.js.map +1 -1
- package/lib/codec/codec.d.ts +2 -1
- package/lib/codec/codec.d.ts.map +1 -1
- package/lib/codec/codec.js +4 -3
- package/lib/codec/codec.js.map +1 -1
- package/lib/core/index.d.ts +1 -1
- package/lib/core/index.d.ts.map +1 -1
- package/lib/core/index.js +1 -1
- package/lib/core/index.js.map +1 -1
- package/lib/core/rebase/index.d.ts +1 -1
- package/lib/core/rebase/index.d.ts.map +1 -1
- package/lib/core/rebase/index.js +1 -1
- package/lib/core/rebase/index.js.map +1 -1
- package/lib/core/rebase/types.d.ts +3 -1
- package/lib/core/rebase/types.d.ts.map +1 -1
- package/lib/core/rebase/types.js +1 -0
- package/lib/core/rebase/types.js.map +1 -1
- package/lib/core/schema-stored/schema.d.ts +1 -23
- package/lib/core/schema-stored/schema.d.ts.map +1 -1
- package/lib/core/schema-stored/schema.js +2 -2
- package/lib/core/schema-stored/schema.js.map +1 -1
- package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndex.js +2 -3
- package/lib/core/tree/detachedFieldIndex.js.map +1 -1
- package/lib/core/tree/detachedFieldIndexCodecCommon.d.ts +17 -0
- package/lib/core/tree/detachedFieldIndexCodecCommon.d.ts.map +1 -0
- package/lib/core/tree/detachedFieldIndexCodecCommon.js +64 -0
- package/lib/core/tree/detachedFieldIndexCodecCommon.js.map +1 -0
- package/lib/core/tree/detachedFieldIndexCodecV1.d.ts +11 -0
- package/lib/core/tree/detachedFieldIndexCodecV1.d.ts.map +1 -0
- package/lib/core/tree/detachedFieldIndexCodecV1.js +51 -0
- package/lib/core/tree/detachedFieldIndexCodecV1.js.map +1 -0
- package/lib/core/tree/detachedFieldIndexCodecV2.d.ts +11 -0
- package/lib/core/tree/detachedFieldIndexCodecV2.d.ts.map +1 -0
- package/lib/core/tree/detachedFieldIndexCodecV2.js +45 -0
- package/lib/core/tree/detachedFieldIndexCodecV2.js.map +1 -0
- package/lib/core/tree/detachedFieldIndexCodecs.d.ts +11 -0
- package/lib/core/tree/detachedFieldIndexCodecs.d.ts.map +1 -0
- package/lib/core/tree/detachedFieldIndexCodecs.js +21 -0
- package/lib/core/tree/detachedFieldIndexCodecs.js.map +1 -0
- package/lib/core/tree/detachedFieldIndexFormatCommon.d.ts +37 -0
- package/lib/core/tree/detachedFieldIndexFormatCommon.d.ts.map +1 -0
- package/lib/core/tree/{detachedFieldIndexFormat.js → detachedFieldIndexFormatCommon.js} +13 -10
- package/lib/core/tree/detachedFieldIndexFormatCommon.js.map +1 -0
- package/lib/core/tree/detachedFieldIndexFormatV1.d.ts +13 -0
- package/lib/core/tree/detachedFieldIndexFormatV1.d.ts.map +1 -0
- package/lib/core/tree/detachedFieldIndexFormatV1.js +9 -0
- package/lib/core/tree/detachedFieldIndexFormatV1.js.map +1 -0
- package/lib/core/tree/detachedFieldIndexFormatV2.d.ts +14 -0
- package/lib/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -0
- package/lib/core/tree/detachedFieldIndexFormatV2.js +11 -0
- package/lib/core/tree/detachedFieldIndexFormatV2.js.map +1 -0
- package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +9 -9
- package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js +19 -19
- package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +4 -2
- package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js +4 -4
- package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +50 -31
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +70 -57
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format.d.ts +20 -14
- package/lib/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format.js +17 -11
- package/lib/feature-libraries/chunked-forest/codec/format.js.map +1 -1
- package/{dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts → lib/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts} +20 -14
- package/lib/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts.map +1 -0
- package/lib/feature-libraries/chunked-forest/codec/{nodeShape.js → nodeEncoder.js} +21 -15
- package/lib/feature-libraries/chunked-forest/codec/nodeEncoder.js.map +1 -0
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +7 -7
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +19 -19
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/uncompressedEncode.js +2 -2
- package/lib/feature-libraries/chunked-forest/codec/uncompressedEncode.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +5 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.js +14 -2
- package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultSchema.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultSchema.js +0 -2
- package/lib/feature-libraries/default-schema/defaultSchema.js.map +1 -1
- package/lib/feature-libraries/default-schema/index.d.ts +1 -1
- package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/index.js +1 -1
- package/lib/feature-libraries/default-schema/index.js.map +1 -1
- package/lib/feature-libraries/default-schema/schemaChecker.d.ts +14 -4
- package/lib/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/schemaChecker.js +29 -24
- package/lib/feature-libraries/default-schema/schemaChecker.js.map +1 -1
- package/lib/feature-libraries/index.d.ts +1 -2
- package/lib/feature-libraries/index.d.ts.map +1 -1
- package/lib/feature-libraries/index.js +1 -2
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/modular-schema/comparison.d.ts +5 -6
- package/lib/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/comparison.js +14 -14
- package/lib/feature-libraries/modular-schema/comparison.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts +9 -3
- package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
- package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
- package/lib/feature-libraries/object-forest/objectForest.js +3 -4
- package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/shared-tree/independentView.d.ts +8 -0
- package/lib/shared-tree/independentView.d.ts.map +1 -1
- package/lib/shared-tree/independentView.js +21 -10
- package/lib/shared-tree/independentView.js.map +1 -1
- package/lib/shared-tree/schematizeTree.js +1 -1
- package/lib/shared-tree/schematizeTree.js.map +1 -1
- package/lib/shared-tree/schematizingTreeView.d.ts +0 -1
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +8 -11
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +2 -30
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/treeAlpha.d.ts +20 -6
- package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
- package/lib/shared-tree/treeAlpha.js +10 -5
- package/lib/shared-tree/treeAlpha.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts +2 -1
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +33 -1
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree-core/branch.d.ts.map +1 -1
- package/lib/shared-tree-core/branch.js +1 -1
- package/lib/shared-tree-core/branch.js.map +1 -1
- package/lib/simple-tree/api/conciseTree.d.ts +2 -2
- package/lib/simple-tree/api/conciseTree.d.ts.map +1 -1
- package/lib/simple-tree/api/conciseTree.js +6 -6
- package/lib/simple-tree/api/conciseTree.js.map +1 -1
- package/lib/simple-tree/api/configuration.d.ts +8 -2
- package/lib/simple-tree/api/configuration.d.ts.map +1 -1
- package/lib/simple-tree/api/configuration.js.map +1 -1
- package/lib/simple-tree/api/create.d.ts +8 -7
- package/lib/simple-tree/api/create.d.ts.map +1 -1
- package/lib/simple-tree/api/create.js +38 -25
- package/lib/simple-tree/api/create.js.map +1 -1
- package/lib/simple-tree/api/customTree.d.ts +25 -4
- package/lib/simple-tree/api/customTree.d.ts.map +1 -1
- package/lib/simple-tree/api/customTree.js +43 -17
- package/lib/simple-tree/api/customTree.js.map +1 -1
- package/lib/simple-tree/api/discrepancies.d.ts +98 -0
- package/lib/simple-tree/api/discrepancies.d.ts.map +1 -0
- package/lib/simple-tree/{discrepancies.js → api/discrepancies.js} +80 -206
- package/lib/simple-tree/api/discrepancies.js.map +1 -0
- package/lib/simple-tree/api/schemaCompatibilityTester.d.ts +9 -7
- package/lib/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaCompatibilityTester.js +19 -118
- package/lib/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
- package/lib/simple-tree/api/schemaFactory.d.ts +7 -4
- package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactory.js.map +1 -1
- package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/storedSchema.js +6 -2
- package/lib/simple-tree/api/storedSchema.js.map +1 -1
- package/lib/simple-tree/api/treeBeta.d.ts +2 -2
- package/lib/simple-tree/api/treeBeta.d.ts.map +1 -1
- package/lib/simple-tree/api/treeBeta.js +8 -2
- package/lib/simple-tree/api/treeBeta.js.map +1 -1
- package/lib/simple-tree/api/verboseTree.d.ts +2 -2
- package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
- package/lib/simple-tree/api/verboseTree.js +9 -9
- package/lib/simple-tree/api/verboseTree.js.map +1 -1
- package/lib/simple-tree/core/allowedTypes.d.ts +20 -4
- package/lib/simple-tree/core/allowedTypes.d.ts.map +1 -1
- package/lib/simple-tree/core/allowedTypes.js +42 -12
- package/lib/simple-tree/core/allowedTypes.js.map +1 -1
- package/lib/simple-tree/core/context.d.ts +13 -2
- package/lib/simple-tree/core/context.d.ts.map +1 -1
- package/lib/simple-tree/core/context.js +22 -9
- package/lib/simple-tree/core/context.js.map +1 -1
- package/lib/simple-tree/core/index.d.ts +2 -2
- package/lib/simple-tree/core/index.d.ts.map +1 -1
- package/lib/simple-tree/core/index.js +2 -2
- package/lib/simple-tree/core/index.js.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.d.ts +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/lib/simple-tree/core/treeNodeValid.d.ts +1 -1
- package/lib/simple-tree/core/treeNodeValid.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeValid.js +8 -1
- package/lib/simple-tree/core/treeNodeValid.js.map +1 -1
- package/lib/simple-tree/core/walkSchema.d.ts +3 -0
- package/lib/simple-tree/core/walkSchema.d.ts.map +1 -1
- package/lib/simple-tree/core/walkSchema.js +2 -0
- package/lib/simple-tree/core/walkSchema.js.map +1 -1
- package/lib/simple-tree/createContext.d.ts +2 -0
- package/lib/simple-tree/createContext.d.ts.map +1 -1
- package/lib/simple-tree/createContext.js +3 -1
- package/lib/simple-tree/createContext.js.map +1 -1
- package/lib/simple-tree/fieldSchema.d.ts +1 -0
- package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
- package/lib/simple-tree/fieldSchema.js +1 -0
- package/lib/simple-tree/fieldSchema.js.map +1 -1
- package/lib/simple-tree/index.d.ts +4 -4
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +4 -4
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.js +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/index.d.ts +1 -1
- package/lib/simple-tree/node-kinds/index.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/index.js +1 -1
- package/lib/simple-tree/node-kinds/index.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/index.d.ts +1 -1
- package/lib/simple-tree/node-kinds/object/index.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/index.js +1 -1
- package/lib/simple-tree/node-kinds/object/index.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.d.ts +2 -7
- package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.js +3 -16
- package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/lib/simple-tree/prepareForInsertion.d.ts +5 -5
- package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
- package/lib/simple-tree/prepareForInsertion.js +11 -5
- package/lib/simple-tree/prepareForInsertion.js.map +1 -1
- package/lib/simple-tree/toStoredSchema.d.ts +3 -0
- package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/lib/simple-tree/toStoredSchema.js +3 -0
- package/lib/simple-tree/toStoredSchema.js.map +1 -1
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +2 -2
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +1 -1
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
- package/lib/simple-tree/walkFieldSchema.d.ts +1 -0
- package/lib/simple-tree/walkFieldSchema.d.ts.map +1 -1
- package/lib/simple-tree/walkFieldSchema.js +1 -0
- package/lib/simple-tree/walkFieldSchema.js.map +1 -1
- package/package.json +23 -23
- package/src/codec/codec.ts +4 -3
- package/src/core/index.ts +2 -0
- package/src/core/rebase/index.ts +2 -0
- package/src/core/rebase/types.ts +4 -0
- package/src/core/schema-stored/schema.ts +2 -26
- package/src/core/tree/detachedFieldIndex.ts +4 -6
- package/src/core/tree/detachedFieldIndexCodecCommon.ts +87 -0
- package/src/core/tree/{detachedFieldIndexCodec.ts → detachedFieldIndexCodecV1.ts} +22 -68
- package/src/core/tree/detachedFieldIndexCodecV2.ts +72 -0
- package/src/core/tree/detachedFieldIndexCodecs.ts +44 -0
- package/src/core/tree/{detachedFieldIndexFormat.ts → detachedFieldIndexFormatCommon.ts} +32 -23
- package/src/core/tree/detachedFieldIndexFormatV1.ts +15 -0
- package/src/core/tree/detachedFieldIndexFormatV2.ts +17 -0
- package/src/feature-libraries/chunked-forest/codec/README.md +1 -1
- package/src/feature-libraries/chunked-forest/codec/chunkDecoding.ts +25 -25
- package/src/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.ts +10 -6
- package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +96 -73
- package/src/feature-libraries/chunked-forest/codec/format.ts +20 -14
- package/src/feature-libraries/chunked-forest/codec/{nodeShape.ts → nodeEncoder.ts} +23 -17
- package/src/feature-libraries/chunked-forest/codec/schemaBasedEncode.ts +34 -34
- package/src/feature-libraries/chunked-forest/codec/uncompressedEncode.ts +5 -5
- package/src/feature-libraries/default-schema/defaultFieldKinds.ts +10 -0
- package/src/feature-libraries/default-schema/defaultSchema.ts +0 -2
- package/src/feature-libraries/default-schema/index.ts +1 -1
- package/src/feature-libraries/default-schema/schemaChecker.ts +47 -30
- package/src/feature-libraries/index.ts +1 -3
- package/src/feature-libraries/modular-schema/comparison.ts +14 -29
- package/src/feature-libraries/object-forest/objectForest.ts +10 -6
- package/src/index.ts +5 -0
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/independentView.ts +45 -19
- package/src/shared-tree/schematizeTree.ts +1 -1
- package/src/shared-tree/schematizingTreeView.ts +16 -13
- package/src/shared-tree/sharedTree.ts +2 -42
- package/src/shared-tree/treeAlpha.ts +30 -18
- package/src/shared-tree/treeCheckout.ts +54 -10
- package/src/shared-tree-core/branch.ts +1 -6
- package/src/simple-tree/api/conciseTree.ts +9 -7
- package/src/simple-tree/api/configuration.ts +8 -2
- package/src/simple-tree/api/create.ts +49 -36
- package/src/simple-tree/api/customTree.ts +59 -20
- package/src/simple-tree/{discrepancies.ts → api/discrepancies.ts} +128 -303
- package/src/simple-tree/api/schemaCompatibilityTester.ts +27 -151
- package/src/simple-tree/api/schemaFactory.ts +7 -4
- package/src/simple-tree/api/storedSchema.ts +6 -9
- package/src/simple-tree/api/treeBeta.ts +17 -4
- package/src/simple-tree/api/verboseTree.ts +17 -8
- package/src/simple-tree/core/allowedTypes.ts +54 -21
- package/src/simple-tree/core/context.ts +24 -22
- package/src/simple-tree/core/index.ts +2 -1
- package/src/simple-tree/core/treeNodeKernel.ts +1 -1
- package/src/simple-tree/core/treeNodeValid.ts +9 -2
- package/src/simple-tree/core/walkSchema.ts +3 -0
- package/src/simple-tree/createContext.ts +6 -1
- package/src/simple-tree/fieldSchema.ts +1 -0
- package/src/simple-tree/index.ts +5 -10
- package/src/simple-tree/node-kinds/array/arrayNode.ts +32 -19
- package/src/simple-tree/node-kinds/index.ts +0 -1
- package/src/simple-tree/node-kinds/object/index.ts +0 -1
- package/src/simple-tree/node-kinds/object/objectNode.ts +9 -27
- package/src/simple-tree/prepareForInsertion.ts +17 -9
- package/src/simple-tree/toStoredSchema.ts +3 -0
- package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +6 -2
- package/src/simple-tree/walkFieldSchema.ts +1 -0
- package/dist/core/tree/detachedFieldIndexCodec.d.ts +0 -11
- package/dist/core/tree/detachedFieldIndexCodec.d.ts.map +0 -1
- package/dist/core/tree/detachedFieldIndexCodec.js +0 -100
- package/dist/core/tree/detachedFieldIndexCodec.js.map +0 -1
- package/dist/core/tree/detachedFieldIndexFormat.d.ts +0 -33
- package/dist/core/tree/detachedFieldIndexFormat.d.ts.map +0 -1
- package/dist/core/tree/detachedFieldIndexFormat.js.map +0 -1
- package/dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +0 -1
- package/dist/feature-libraries/chunked-forest/codec/nodeShape.js.map +0 -1
- package/dist/feature-libraries/initializeForest.d.ts +0 -18
- package/dist/feature-libraries/initializeForest.d.ts.map +0 -1
- package/dist/feature-libraries/initializeForest.js +0 -35
- package/dist/feature-libraries/initializeForest.js.map +0 -1
- package/dist/simple-tree/discrepancies.d.ts +0 -167
- package/dist/simple-tree/discrepancies.d.ts.map +0 -1
- package/dist/simple-tree/discrepancies.js +0 -382
- package/dist/simple-tree/discrepancies.js.map +0 -1
- package/lib/core/tree/detachedFieldIndexCodec.d.ts +0 -11
- package/lib/core/tree/detachedFieldIndexCodec.d.ts.map +0 -1
- package/lib/core/tree/detachedFieldIndexCodec.js +0 -96
- package/lib/core/tree/detachedFieldIndexCodec.js.map +0 -1
- package/lib/core/tree/detachedFieldIndexFormat.d.ts +0 -33
- package/lib/core/tree/detachedFieldIndexFormat.d.ts.map +0 -1
- package/lib/core/tree/detachedFieldIndexFormat.js.map +0 -1
- package/lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +0 -1
- package/lib/feature-libraries/chunked-forest/codec/nodeShape.js.map +0 -1
- package/lib/feature-libraries/initializeForest.d.ts +0 -18
- package/lib/feature-libraries/initializeForest.d.ts.map +0 -1
- package/lib/feature-libraries/initializeForest.js +0 -31
- package/lib/feature-libraries/initializeForest.js.map +0 -1
- package/lib/simple-tree/discrepancies.d.ts +0 -167
- package/lib/simple-tree/discrepancies.d.ts.map +0 -1
- package/lib/simple-tree/discrepancies.js.map +0 -1
- package/src/feature-libraries/initializeForest.ts +0 -55
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluidframework/tree",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.52.0",
|
|
4
4
|
"description": "Distributed tree",
|
|
5
5
|
"homepage": "https://fluidframework.com",
|
|
6
6
|
"repository": {
|
|
@@ -101,17 +101,17 @@
|
|
|
101
101
|
"temp-directory": "nyc/.nyc_output"
|
|
102
102
|
},
|
|
103
103
|
"dependencies": {
|
|
104
|
-
"@fluid-internal/client-utils": "~2.
|
|
105
|
-
"@fluidframework/container-runtime": "~2.
|
|
106
|
-
"@fluidframework/core-interfaces": "~2.
|
|
107
|
-
"@fluidframework/core-utils": "~2.
|
|
108
|
-
"@fluidframework/datastore-definitions": "~2.
|
|
109
|
-
"@fluidframework/driver-definitions": "~2.
|
|
110
|
-
"@fluidframework/id-compressor": "~2.
|
|
111
|
-
"@fluidframework/runtime-definitions": "~2.
|
|
112
|
-
"@fluidframework/runtime-utils": "~2.
|
|
113
|
-
"@fluidframework/shared-object-base": "~2.
|
|
114
|
-
"@fluidframework/telemetry-utils": "~2.
|
|
104
|
+
"@fluid-internal/client-utils": "~2.52.0",
|
|
105
|
+
"@fluidframework/container-runtime": "~2.52.0",
|
|
106
|
+
"@fluidframework/core-interfaces": "~2.52.0",
|
|
107
|
+
"@fluidframework/core-utils": "~2.52.0",
|
|
108
|
+
"@fluidframework/datastore-definitions": "~2.52.0",
|
|
109
|
+
"@fluidframework/driver-definitions": "~2.52.0",
|
|
110
|
+
"@fluidframework/id-compressor": "~2.52.0",
|
|
111
|
+
"@fluidframework/runtime-definitions": "~2.52.0",
|
|
112
|
+
"@fluidframework/runtime-utils": "~2.52.0",
|
|
113
|
+
"@fluidframework/shared-object-base": "~2.52.0",
|
|
114
|
+
"@fluidframework/telemetry-utils": "~2.52.0",
|
|
115
115
|
"@sinclair/typebox": "^0.34.13",
|
|
116
116
|
"@tylerbu/sorted-btree-es6": "^1.8.0",
|
|
117
117
|
"@types/ungap__structured-clone": "^1.2.0",
|
|
@@ -121,20 +121,20 @@
|
|
|
121
121
|
"devDependencies": {
|
|
122
122
|
"@arethetypeswrong/cli": "^0.17.1",
|
|
123
123
|
"@biomejs/biome": "~1.9.3",
|
|
124
|
-
"@fluid-internal/mocha-test-setup": "~2.
|
|
125
|
-
"@fluid-private/stochastic-test-utils": "~2.
|
|
126
|
-
"@fluid-private/test-dds-utils": "~2.
|
|
127
|
-
"@fluid-private/test-drivers": "~2.
|
|
124
|
+
"@fluid-internal/mocha-test-setup": "~2.52.0",
|
|
125
|
+
"@fluid-private/stochastic-test-utils": "~2.52.0",
|
|
126
|
+
"@fluid-private/test-dds-utils": "~2.52.0",
|
|
127
|
+
"@fluid-private/test-drivers": "~2.52.0",
|
|
128
128
|
"@fluid-tools/benchmark": "^0.51.0",
|
|
129
|
-
"@fluid-tools/build-cli": "^0.
|
|
129
|
+
"@fluid-tools/build-cli": "^0.57.0",
|
|
130
130
|
"@fluidframework/build-common": "^2.0.3",
|
|
131
|
-
"@fluidframework/build-tools": "^0.
|
|
132
|
-
"@fluidframework/container-definitions": "~2.
|
|
133
|
-
"@fluidframework/container-loader": "~2.
|
|
131
|
+
"@fluidframework/build-tools": "^0.57.0",
|
|
132
|
+
"@fluidframework/container-definitions": "~2.52.0",
|
|
133
|
+
"@fluidframework/container-loader": "~2.52.0",
|
|
134
134
|
"@fluidframework/eslint-config-fluid": "^5.7.4",
|
|
135
|
-
"@fluidframework/test-runtime-utils": "~2.
|
|
136
|
-
"@fluidframework/test-utils": "~2.
|
|
137
|
-
"@fluidframework/tree-previous": "npm:@fluidframework/tree@2.
|
|
135
|
+
"@fluidframework/test-runtime-utils": "~2.52.0",
|
|
136
|
+
"@fluidframework/test-utils": "~2.52.0",
|
|
137
|
+
"@fluidframework/tree-previous": "npm:@fluidframework/tree@2.51.0",
|
|
138
138
|
"@microsoft/api-extractor": "7.52.8",
|
|
139
139
|
"@types/diff": "^3.5.1",
|
|
140
140
|
"@types/easy-table": "^0.0.32",
|
package/src/codec/codec.ts
CHANGED
|
@@ -409,9 +409,10 @@ export enum FluidClientVersion {
|
|
|
409
409
|
// then update it to "2.001" once we actually have the opt in working.
|
|
410
410
|
// v2_1 = v2_0,
|
|
411
411
|
|
|
412
|
-
/** Fluid Framework Client 2.
|
|
413
|
-
//
|
|
414
|
-
//
|
|
412
|
+
/** Fluid Framework Client 2.52 and newer. */
|
|
413
|
+
// New formats introduced in 2.52:
|
|
414
|
+
// - DetachedFieldIndex FormatV2
|
|
415
|
+
v2_52 = 2.052,
|
|
415
416
|
|
|
416
417
|
/**
|
|
417
418
|
* Enable unreleased and unfinished features.
|
package/src/core/index.ts
CHANGED
|
@@ -192,10 +192,12 @@ export {
|
|
|
192
192
|
revisionMetadataSourceFromInfo,
|
|
193
193
|
type RevisionInfo,
|
|
194
194
|
type EncodedRevisionTag,
|
|
195
|
+
type EncodedStableId,
|
|
195
196
|
type EncodedChangeAtomId,
|
|
196
197
|
taggedAtomId,
|
|
197
198
|
taggedOptAtomId,
|
|
198
199
|
offsetChangeAtomId,
|
|
200
|
+
StableIdSchema,
|
|
199
201
|
subtractChangeAtomIds,
|
|
200
202
|
replaceAtomRevisions,
|
|
201
203
|
replaceChange,
|
package/src/core/rebase/index.ts
CHANGED
|
@@ -16,6 +16,7 @@ export {
|
|
|
16
16
|
RevisionTagSchema,
|
|
17
17
|
type EncodedRevisionTag,
|
|
18
18
|
type EncodedChangeAtomId,
|
|
19
|
+
type EncodedStableId,
|
|
19
20
|
type ChangesetLocalId,
|
|
20
21
|
type ChangeAtomId,
|
|
21
22
|
type ChangeAtomIdMap,
|
|
@@ -23,6 +24,7 @@ export {
|
|
|
23
24
|
taggedAtomId,
|
|
24
25
|
taggedOptAtomId,
|
|
25
26
|
offsetChangeAtomId,
|
|
27
|
+
StableIdSchema,
|
|
26
28
|
subtractChangeAtomIds,
|
|
27
29
|
replaceAtomRevisions,
|
|
28
30
|
type ChangeAtomIdRangeMap,
|
package/src/core/rebase/types.ts
CHANGED
|
@@ -7,6 +7,7 @@ import type {
|
|
|
7
7
|
OpSpaceCompressedId,
|
|
8
8
|
SessionId,
|
|
9
9
|
SessionSpaceCompressedId,
|
|
10
|
+
StableId,
|
|
10
11
|
} from "@fluidframework/id-compressor";
|
|
11
12
|
import { Type } from "@sinclair/typebox";
|
|
12
13
|
|
|
@@ -38,6 +39,9 @@ export const RevisionTagSchema = Type.Union([
|
|
|
38
39
|
brandedNumberType<Exclude<EncodedRevisionTag, string>>(),
|
|
39
40
|
]);
|
|
40
41
|
|
|
42
|
+
export type EncodedStableId = Brand<StableId, "EncodedStableId">;
|
|
43
|
+
export const StableIdSchema = Type.String();
|
|
44
|
+
|
|
41
45
|
/**
|
|
42
46
|
* An ID which is unique within a revision of a `ModularChangeset`.
|
|
43
47
|
* A `ModularChangeset` which is a composition of multiple revisions may contain duplicate `ChangesetLocalId`s,
|
|
@@ -110,9 +110,6 @@ export interface SchemaAndPolicy {
|
|
|
110
110
|
* This contains information that describes the semantics of things which can be referenced in stored schema.
|
|
111
111
|
* For example, field kind identifiers refer to specific field kinds, which imply specific rules around what is valid in a given field (the multiplicity).
|
|
112
112
|
* This structure provides such information, allowing it to be possible to determine if a given tree complies with a particular stored schema.
|
|
113
|
-
*
|
|
114
|
-
* TODO: AB#43546
|
|
115
|
-
* Some additional data which is not needed to define compatibility with a given stored schema is currently included here, and should be removed.
|
|
116
113
|
*/
|
|
117
114
|
export interface SchemaPolicy {
|
|
118
115
|
/**
|
|
@@ -123,27 +120,6 @@ export interface SchemaPolicy {
|
|
|
123
120
|
* and will be unable to process any changes that use those FieldKinds.
|
|
124
121
|
*/
|
|
125
122
|
readonly fieldKinds: ReadonlyMap<FieldKindIdentifier, FieldKindData>;
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* If true, new content inserted into the tree should be validated against the stored schema.
|
|
129
|
-
* @remarks
|
|
130
|
-
* TODO: AB#43546: This is not information used to interpret the stored schema: this configuration should be moved elsewhere.
|
|
131
|
-
*/
|
|
132
|
-
readonly validateSchema: boolean;
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* Whether to allow a document to be opened when a particular stored schema (identified by `identifier`)
|
|
136
|
-
* contains optional fields that are not known to the view schema.
|
|
137
|
-
*
|
|
138
|
-
* @privateRemarks
|
|
139
|
-
* Plumbing this in via `SchemaPolicy` avoids needing to walk the view schema representation repeatedly in places
|
|
140
|
-
* that need it (schema validation, view vs stored compatibility checks).
|
|
141
|
-
*
|
|
142
|
-
* TODO: AB#43546
|
|
143
|
-
* This is not information used to interpret the stored schema: it is instead about view schema, and how compatible they are with a stored schema.
|
|
144
|
-
* SchemaCompatibilityTester should be updated to not store this table in here, and then this field should be removed.
|
|
145
|
-
*/
|
|
146
|
-
allowUnknownOptionalFields(identifier: TreeNodeSchemaIdentifier): boolean;
|
|
147
123
|
}
|
|
148
124
|
|
|
149
125
|
/**
|
|
@@ -179,7 +155,7 @@ export interface TreeFieldStoredSchema {
|
|
|
179
155
|
*
|
|
180
156
|
* 2. The schema used for out of schema fields (which thus must be empty/not exist) on object and leaf nodes.
|
|
181
157
|
*/
|
|
182
|
-
export const forbiddenFieldKindIdentifier = "Forbidden";
|
|
158
|
+
export const forbiddenFieldKindIdentifier: FieldKindIdentifier = brand("Forbidden");
|
|
183
159
|
|
|
184
160
|
/**
|
|
185
161
|
* A schema for empty fields (fields which must always be empty).
|
|
@@ -187,7 +163,7 @@ export const forbiddenFieldKindIdentifier = "Forbidden";
|
|
|
187
163
|
*/
|
|
188
164
|
export const storedEmptyFieldSchema: TreeFieldStoredSchema = {
|
|
189
165
|
// This kind requires the field to be empty.
|
|
190
|
-
kind:
|
|
166
|
+
kind: forbiddenFieldKindIdentifier,
|
|
191
167
|
// This type set also forces the field to be empty not not allowing any types as all.
|
|
192
168
|
types: new Set(),
|
|
193
169
|
persistedMetadata: undefined,
|
|
@@ -28,8 +28,6 @@ import type { RevisionTag, RevisionTagCodec } from "../rebase/index.js";
|
|
|
28
28
|
import type { FieldKey } from "../schema-stored/index.js";
|
|
29
29
|
|
|
30
30
|
import type * as Delta from "./delta.js";
|
|
31
|
-
import { makeDetachedNodeToFieldCodec } from "./detachedFieldIndexCodec.js";
|
|
32
|
-
import type { Format } from "./detachedFieldIndexFormat.js";
|
|
33
31
|
import type {
|
|
34
32
|
DetachedField,
|
|
35
33
|
DetachedFieldSummaryData,
|
|
@@ -37,6 +35,7 @@ import type {
|
|
|
37
35
|
Major,
|
|
38
36
|
Minor,
|
|
39
37
|
} from "./detachedFieldIndexTypes.js";
|
|
38
|
+
import { makeDetachedFieldIndexCodec } from "./detachedFieldIndexCodecs.js";
|
|
40
39
|
|
|
41
40
|
/**
|
|
42
41
|
* The tree index records detached field IDs and associates them with a change atom ID.
|
|
@@ -59,7 +58,7 @@ export class DetachedFieldIndex {
|
|
|
59
58
|
Delta.DetachedNodeId
|
|
60
59
|
> = new Map();
|
|
61
60
|
|
|
62
|
-
private readonly codec: IJsonCodec<DetachedFieldSummaryData
|
|
61
|
+
private readonly codec: IJsonCodec<DetachedFieldSummaryData>;
|
|
63
62
|
private readonly options: CodecWriteOptions;
|
|
64
63
|
|
|
65
64
|
/**
|
|
@@ -87,8 +86,7 @@ export class DetachedFieldIndex {
|
|
|
87
86
|
jsonValidator: noopValidator,
|
|
88
87
|
oldestCompatibleClient: FluidClientVersion.v2_0,
|
|
89
88
|
};
|
|
90
|
-
|
|
91
|
-
this.codec = makeDetachedNodeToFieldCodec(revisionTagCodec, this.options, idCompressor);
|
|
89
|
+
this.codec = makeDetachedFieldIndexCodec(revisionTagCodec, this.options, idCompressor);
|
|
92
90
|
}
|
|
93
91
|
|
|
94
92
|
public clone(): DetachedFieldIndex {
|
|
@@ -337,7 +335,7 @@ export class DetachedFieldIndex {
|
|
|
337
335
|
* Loads the tree index from the given string, this overrides any existing data.
|
|
338
336
|
*/
|
|
339
337
|
public loadData(data: JsonCompatibleReadOnly): void {
|
|
340
|
-
const detachedFieldIndex: DetachedFieldSummaryData = this.codec.decode(data
|
|
338
|
+
const detachedFieldIndex: DetachedFieldSummaryData = this.codec.decode(data);
|
|
341
339
|
|
|
342
340
|
this.rootIdAllocator = idAllocatorFromMaxId(
|
|
343
341
|
detachedFieldIndex.maxId,
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import {
|
|
7
|
+
type ICodecOptions,
|
|
8
|
+
type IJsonCodec,
|
|
9
|
+
makeVersionedValidatedCodec,
|
|
10
|
+
} from "../../codec/index.js";
|
|
11
|
+
import { hasSingle } from "../../util/index.js";
|
|
12
|
+
|
|
13
|
+
import {
|
|
14
|
+
Format,
|
|
15
|
+
type EncodedRootsForRevision,
|
|
16
|
+
type RootRanges,
|
|
17
|
+
} from "./detachedFieldIndexFormatCommon.js";
|
|
18
|
+
import type {
|
|
19
|
+
DetachedField,
|
|
20
|
+
DetachedFieldSummaryData,
|
|
21
|
+
Major,
|
|
22
|
+
} from "./detachedFieldIndexTypes.js";
|
|
23
|
+
import type { Static, TSchema } from "@sinclair/typebox";
|
|
24
|
+
|
|
25
|
+
// Return type is intentionally derived.
|
|
26
|
+
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
|
27
|
+
export function makeDetachedFieldIndexCodecFromMajorCodec<
|
|
28
|
+
TEncodedRevisionTag,
|
|
29
|
+
TEncodedRevisionTagSchema extends TSchema,
|
|
30
|
+
TVersion extends number,
|
|
31
|
+
>(
|
|
32
|
+
options: ICodecOptions,
|
|
33
|
+
majorCodec: IJsonCodec<Major, TEncodedRevisionTag>,
|
|
34
|
+
version: TVersion,
|
|
35
|
+
encodedRevisionTagSchema: TEncodedRevisionTagSchema,
|
|
36
|
+
) {
|
|
37
|
+
const formatSchema = Format(version, encodedRevisionTagSchema);
|
|
38
|
+
return makeVersionedValidatedCodec(options, new Set([version]), formatSchema, {
|
|
39
|
+
encode: (data: DetachedFieldSummaryData): Static<typeof formatSchema> => {
|
|
40
|
+
const rootsForRevisions: EncodedRootsForRevision[] = [];
|
|
41
|
+
for (const [major, innerMap] of data.data) {
|
|
42
|
+
const encodedRevision = majorCodec.encode(major);
|
|
43
|
+
const rootRanges: RootRanges = [];
|
|
44
|
+
for (const [minor, detachedField] of innerMap) {
|
|
45
|
+
rootRanges.push([minor, detachedField.root]);
|
|
46
|
+
}
|
|
47
|
+
if (hasSingle(rootRanges)) {
|
|
48
|
+
const firstRootRange = rootRanges[0];
|
|
49
|
+
const rootsForRevision: EncodedRootsForRevision = [
|
|
50
|
+
encodedRevision,
|
|
51
|
+
firstRootRange[0],
|
|
52
|
+
firstRootRange[1],
|
|
53
|
+
];
|
|
54
|
+
rootsForRevisions.push(rootsForRevision);
|
|
55
|
+
} else {
|
|
56
|
+
const rootsForRevision: EncodedRootsForRevision = [encodedRevision, rootRanges];
|
|
57
|
+
rootsForRevisions.push(rootsForRevision);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const encoded: Static<typeof formatSchema> = {
|
|
61
|
+
version,
|
|
62
|
+
data: rootsForRevisions,
|
|
63
|
+
maxId: data.maxId,
|
|
64
|
+
};
|
|
65
|
+
return encoded;
|
|
66
|
+
},
|
|
67
|
+
decode: (parsed: Static<typeof formatSchema>): DetachedFieldSummaryData => {
|
|
68
|
+
const map = new Map();
|
|
69
|
+
for (const rootsForRevision of parsed.data) {
|
|
70
|
+
const innerMap = new Map<number, DetachedField>();
|
|
71
|
+
if (rootsForRevision.length === 2) {
|
|
72
|
+
for (const [minor, root] of rootsForRevision[1]) {
|
|
73
|
+
innerMap.set(minor, { root });
|
|
74
|
+
}
|
|
75
|
+
} else {
|
|
76
|
+
innerMap.set(rootsForRevision[1], { root: rootsForRevision[2] });
|
|
77
|
+
}
|
|
78
|
+
const revision = rootsForRevision[0] as TEncodedRevisionTag;
|
|
79
|
+
map.set(majorCodec.decode(revision), innerMap);
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
data: map,
|
|
83
|
+
maxId: parsed.maxId,
|
|
84
|
+
};
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
}
|
|
@@ -6,27 +6,19 @@
|
|
|
6
6
|
import { assert } from "@fluidframework/core-utils/internal";
|
|
7
7
|
import type { IIdCompressor } from "@fluidframework/id-compressor";
|
|
8
8
|
|
|
9
|
+
import type { ICodecOptions, IJsonCodec } from "../../codec/index.js";
|
|
9
10
|
import {
|
|
10
|
-
type
|
|
11
|
-
type
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
import type { EncodedRevisionTag, RevisionTagCodec, RevisionTag } from "../rebase/index.js";
|
|
11
|
+
type EncodedRevisionTag,
|
|
12
|
+
type RevisionTagCodec,
|
|
13
|
+
type RevisionTag,
|
|
14
|
+
RevisionTagSchema,
|
|
15
|
+
} from "../rebase/index.js";
|
|
16
16
|
|
|
17
|
-
import {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
type RootRanges,
|
|
21
|
-
version,
|
|
22
|
-
} from "./detachedFieldIndexFormat.js";
|
|
23
|
-
import type {
|
|
24
|
-
DetachedField,
|
|
25
|
-
DetachedFieldSummaryData,
|
|
26
|
-
Major,
|
|
27
|
-
} from "./detachedFieldIndexTypes.js";
|
|
17
|
+
import { type FormatV1, version1 } from "./detachedFieldIndexFormatV1.js";
|
|
18
|
+
import type { DetachedFieldSummaryData, Major } from "./detachedFieldIndexTypes.js";
|
|
19
|
+
import { makeDetachedFieldIndexCodecFromMajorCodec } from "./detachedFieldIndexCodecCommon.js";
|
|
28
20
|
|
|
29
|
-
class MajorCodec implements IJsonCodec<Major> {
|
|
21
|
+
class MajorCodec implements IJsonCodec<Major, EncodedRevisionTag> {
|
|
30
22
|
public constructor(
|
|
31
23
|
private readonly revisionTagCodec: RevisionTagCodec,
|
|
32
24
|
private readonly options: ICodecOptions,
|
|
@@ -48,6 +40,10 @@ class MajorCodec implements IJsonCodec<Major> {
|
|
|
48
40
|
* This assert is valid because the revision for an acked edit will have already been finalized, and a revision
|
|
49
41
|
* for a local-only edit will be finalizable at summarization time (local edits can only occur on a summarizing client
|
|
50
42
|
* if they're created while detached, and local ids made while detached are finalized before generating the attach summary).
|
|
43
|
+
*
|
|
44
|
+
* WARNING: the above is true when the whole container transitions from detached to attached,
|
|
45
|
+
* but not when the container is already attached and it's just the shared-tree that is attaching.
|
|
46
|
+
* The assert below will fail in such a scenario. This is addressed in the v2 codec.
|
|
51
47
|
*/
|
|
52
48
|
assert(
|
|
53
49
|
id === "root" || id >= 0,
|
|
@@ -69,58 +65,16 @@ class MajorCodec implements IJsonCodec<Major> {
|
|
|
69
65
|
}
|
|
70
66
|
}
|
|
71
67
|
|
|
72
|
-
export function
|
|
68
|
+
export function makeDetachedNodeToFieldCodecV1(
|
|
73
69
|
revisionTagCodec: RevisionTagCodec,
|
|
74
70
|
options: ICodecOptions,
|
|
75
71
|
idCompressor: IIdCompressor,
|
|
76
|
-
): IJsonCodec<DetachedFieldSummaryData,
|
|
72
|
+
): IJsonCodec<DetachedFieldSummaryData, FormatV1> {
|
|
77
73
|
const majorCodec = new MajorCodec(revisionTagCodec, options, idCompressor);
|
|
78
|
-
return
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
for (const [minor, detachedField] of innerMap) {
|
|
85
|
-
rootRanges.push([minor, detachedField.root]);
|
|
86
|
-
}
|
|
87
|
-
if (hasSingle(rootRanges)) {
|
|
88
|
-
const firstRootRange = rootRanges[0];
|
|
89
|
-
const rootsForRevision: EncodedRootsForRevision = [
|
|
90
|
-
encodedRevision,
|
|
91
|
-
firstRootRange[0],
|
|
92
|
-
firstRootRange[1],
|
|
93
|
-
];
|
|
94
|
-
rootsForRevisions.push(rootsForRevision);
|
|
95
|
-
} else {
|
|
96
|
-
const rootsForRevision: EncodedRootsForRevision = [encodedRevision, rootRanges];
|
|
97
|
-
rootsForRevisions.push(rootsForRevision);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
const encoded: Format = {
|
|
101
|
-
version,
|
|
102
|
-
data: rootsForRevisions,
|
|
103
|
-
maxId: data.maxId,
|
|
104
|
-
};
|
|
105
|
-
return encoded;
|
|
106
|
-
},
|
|
107
|
-
decode: (parsed: Format): DetachedFieldSummaryData => {
|
|
108
|
-
const map = new Map();
|
|
109
|
-
for (const rootsForRevision of parsed.data) {
|
|
110
|
-
const innerMap = new Map<number, DetachedField>();
|
|
111
|
-
if (rootsForRevision.length === 2) {
|
|
112
|
-
for (const [minor, root] of rootsForRevision[1]) {
|
|
113
|
-
innerMap.set(minor, { root });
|
|
114
|
-
}
|
|
115
|
-
} else {
|
|
116
|
-
innerMap.set(rootsForRevision[1], { root: rootsForRevision[2] });
|
|
117
|
-
}
|
|
118
|
-
map.set(majorCodec.decode(rootsForRevision[0]), innerMap);
|
|
119
|
-
}
|
|
120
|
-
return {
|
|
121
|
-
data: map,
|
|
122
|
-
maxId: parsed.maxId,
|
|
123
|
-
};
|
|
124
|
-
},
|
|
125
|
-
});
|
|
74
|
+
return makeDetachedFieldIndexCodecFromMajorCodec(
|
|
75
|
+
options,
|
|
76
|
+
majorCodec,
|
|
77
|
+
version1,
|
|
78
|
+
RevisionTagSchema,
|
|
79
|
+
);
|
|
126
80
|
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { assert } from "@fluidframework/core-utils/internal";
|
|
7
|
+
import type { IIdCompressor, StableId } from "@fluidframework/id-compressor";
|
|
8
|
+
|
|
9
|
+
import type { ICodecOptions, IJsonCodec } from "../../codec/index.js";
|
|
10
|
+
import type { EncodedRevisionTag, RevisionTagCodec, RevisionTag } from "../rebase/index.js";
|
|
11
|
+
|
|
12
|
+
import {
|
|
13
|
+
type FormatV2,
|
|
14
|
+
StableOrFinalRevisionTag,
|
|
15
|
+
version2,
|
|
16
|
+
} from "./detachedFieldIndexFormatV2.js";
|
|
17
|
+
import type { DetachedFieldSummaryData, Major } from "./detachedFieldIndexTypes.js";
|
|
18
|
+
import { makeDetachedFieldIndexCodecFromMajorCodec } from "./detachedFieldIndexCodecCommon.js";
|
|
19
|
+
import { isStableId } from "@fluidframework/id-compressor/internal";
|
|
20
|
+
|
|
21
|
+
class MajorCodec implements IJsonCodec<Major> {
|
|
22
|
+
public constructor(
|
|
23
|
+
private readonly revisionTagCodec: RevisionTagCodec,
|
|
24
|
+
private readonly options: ICodecOptions,
|
|
25
|
+
private readonly idCompressor: IIdCompressor,
|
|
26
|
+
) {}
|
|
27
|
+
|
|
28
|
+
public encode(major: Major): EncodedRevisionTag | StableId {
|
|
29
|
+
assert(major !== undefined, 0xbfb /* Unexpected undefined revision */);
|
|
30
|
+
const id = this.revisionTagCodec.encode(major);
|
|
31
|
+
|
|
32
|
+
if (id !== "root" && id < 0) {
|
|
33
|
+
/**
|
|
34
|
+
* This code path handles the case where the major revision is not finalized.
|
|
35
|
+
* This can happen the SharedTree is being attached to an already attached container.
|
|
36
|
+
*/
|
|
37
|
+
assert(major !== "root", 0xbfc /* Major revision cannot be 'root' */);
|
|
38
|
+
const long = this.idCompressor.decompress(major);
|
|
39
|
+
return long;
|
|
40
|
+
}
|
|
41
|
+
return id;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public decode(major: EncodedRevisionTag | StableId): RevisionTag {
|
|
45
|
+
assert(
|
|
46
|
+
major === "root" || (typeof major === "string" && isStableId(major)) || major >= 0,
|
|
47
|
+
0xbfd /* Expected root, stable, or final compressed id */,
|
|
48
|
+
);
|
|
49
|
+
if (typeof major === "string" && isStableId(major)) {
|
|
50
|
+
return this.idCompressor.recompress(major);
|
|
51
|
+
}
|
|
52
|
+
return this.revisionTagCodec.decode(major, {
|
|
53
|
+
originatorId: this.revisionTagCodec.localSessionId,
|
|
54
|
+
idCompressor: this.idCompressor,
|
|
55
|
+
revision: undefined,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function makeDetachedNodeToFieldCodecV2(
|
|
61
|
+
revisionTagCodec: RevisionTagCodec,
|
|
62
|
+
options: ICodecOptions,
|
|
63
|
+
idCompressor: IIdCompressor,
|
|
64
|
+
): IJsonCodec<DetachedFieldSummaryData, FormatV2> {
|
|
65
|
+
const majorCodec = new MajorCodec(revisionTagCodec, options, idCompressor);
|
|
66
|
+
return makeDetachedFieldIndexCodecFromMajorCodec(
|
|
67
|
+
options,
|
|
68
|
+
majorCodec,
|
|
69
|
+
version2,
|
|
70
|
+
StableOrFinalRevisionTag,
|
|
71
|
+
);
|
|
72
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { IIdCompressor } from "@fluidframework/id-compressor";
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
type CodecWriteOptions,
|
|
10
|
+
FluidClientVersion,
|
|
11
|
+
type ICodecFamily,
|
|
12
|
+
type IJsonCodec,
|
|
13
|
+
makeCodecFamily,
|
|
14
|
+
makeVersionDispatchingCodec,
|
|
15
|
+
} from "../../codec/index.js";
|
|
16
|
+
import type { RevisionTagCodec } from "../rebase/index.js";
|
|
17
|
+
|
|
18
|
+
import { version1 } from "./detachedFieldIndexFormatV1.js";
|
|
19
|
+
import { version2 } from "./detachedFieldIndexFormatV2.js";
|
|
20
|
+
import { makeDetachedNodeToFieldCodecV1 } from "./detachedFieldIndexCodecV1.js";
|
|
21
|
+
import { makeDetachedNodeToFieldCodecV2 } from "./detachedFieldIndexCodecV2.js";
|
|
22
|
+
import type { DetachedFieldSummaryData } from "./detachedFieldIndexTypes.js";
|
|
23
|
+
|
|
24
|
+
export function makeDetachedFieldIndexCodec(
|
|
25
|
+
revisionTagCodec: RevisionTagCodec,
|
|
26
|
+
options: CodecWriteOptions,
|
|
27
|
+
idCompressor: IIdCompressor,
|
|
28
|
+
): IJsonCodec<DetachedFieldSummaryData> {
|
|
29
|
+
const family = makeDetachedFieldIndexCodecFamily(revisionTagCodec, options, idCompressor);
|
|
30
|
+
const writeVersion =
|
|
31
|
+
options.oldestCompatibleClient < FluidClientVersion.v2_52 ? version1 : version2;
|
|
32
|
+
return makeVersionDispatchingCodec(family, { ...options, writeVersion });
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function makeDetachedFieldIndexCodecFamily(
|
|
36
|
+
revisionTagCodec: RevisionTagCodec,
|
|
37
|
+
options: CodecWriteOptions,
|
|
38
|
+
idCompressor: IIdCompressor,
|
|
39
|
+
): ICodecFamily<DetachedFieldSummaryData> {
|
|
40
|
+
return makeCodecFamily([
|
|
41
|
+
[version1, makeDetachedNodeToFieldCodecV1(revisionTagCodec, options, idCompressor)],
|
|
42
|
+
[version2, makeDetachedNodeToFieldCodecV2(revisionTagCodec, options, idCompressor)],
|
|
43
|
+
]);
|
|
44
|
+
}
|
|
@@ -3,15 +3,12 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { type Static, Type } from "@sinclair/typebox";
|
|
6
|
+
import { type Static, type TSchema, Type } from "@sinclair/typebox";
|
|
7
7
|
|
|
8
8
|
import { brandedNumberType } from "../../util/index.js";
|
|
9
|
-
import { RevisionTagSchema } from "../rebase/index.js";
|
|
10
9
|
|
|
11
10
|
import type { ForestRootId } from "./detachedFieldIndexTypes.js";
|
|
12
11
|
|
|
13
|
-
export const version = 1.0;
|
|
14
|
-
|
|
15
12
|
/**
|
|
16
13
|
* The ID of a detached node. Is not globally unique on.
|
|
17
14
|
* A `RevisionTag` + `DetachId` pair is globally unique and eventually consistent across clients.
|
|
@@ -22,7 +19,10 @@ export const DetachId = Type.Number({ multipleOf: 1 });
|
|
|
22
19
|
* The ID of a root node in the forest associated with the owning checkout. Is unique for that forest.
|
|
23
20
|
* Is not consistent across clients.
|
|
24
21
|
*/
|
|
25
|
-
const ForestRootIdSchema = brandedNumberType<ForestRootId>({
|
|
22
|
+
export const ForestRootIdSchema = brandedNumberType<ForestRootId>({
|
|
23
|
+
minimum: -1,
|
|
24
|
+
multipleOf: 1,
|
|
25
|
+
});
|
|
26
26
|
|
|
27
27
|
/**
|
|
28
28
|
* A mapping from a range of the detached node IDs the corresponding range root IDs.
|
|
@@ -43,21 +43,30 @@ export type RootRanges = Static<typeof RootRanges>;
|
|
|
43
43
|
/**
|
|
44
44
|
* For all the roots detached in a revision, represents a mapping from the detached node ID to corresponding root ID.
|
|
45
45
|
*/
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
])
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
46
|
+
// Return type is intentionally derived.
|
|
47
|
+
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
|
48
|
+
export const EncodedRootsForRevision = <Schema extends TSchema>(tRevisionTag: Schema) =>
|
|
49
|
+
Type.Union([
|
|
50
|
+
// Used to represent a revision in which more than one node were detached
|
|
51
|
+
Type.Tuple([tRevisionTag, RootRanges]),
|
|
52
|
+
// Used to represent a revision in which a single node was detached
|
|
53
|
+
Type.Tuple([tRevisionTag, DetachId, ForestRootIdSchema]),
|
|
54
|
+
]);
|
|
55
|
+
export type EncodedRootsForRevision = Static<ReturnType<typeof EncodedRootsForRevision>>;
|
|
56
|
+
|
|
57
|
+
export const Format = <TVersion extends number, TRevisionTagSchema extends TSchema>(
|
|
58
|
+
tVersion: TVersion,
|
|
59
|
+
tRevisionTag: TRevisionTagSchema,
|
|
60
|
+
// Return type is intentionally derived.
|
|
61
|
+
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
|
62
|
+
) =>
|
|
63
|
+
Type.Object(
|
|
64
|
+
{
|
|
65
|
+
version: Type.Literal(tVersion),
|
|
66
|
+
data: Type.Array(EncodedRootsForRevision(tRevisionTag)),
|
|
67
|
+
maxId: ForestRootIdSchema,
|
|
68
|
+
},
|
|
69
|
+
{ additionalProperties: false },
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
export type Format = Static<ReturnType<typeof Format>>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { Static } from "@sinclair/typebox";
|
|
7
|
+
|
|
8
|
+
import { Format } from "./detachedFieldIndexFormatCommon.js";
|
|
9
|
+
import { RevisionTagSchema } from "../rebase/index.js";
|
|
10
|
+
|
|
11
|
+
export const version1 = 1.0;
|
|
12
|
+
|
|
13
|
+
export const FormatV1 = Format(version1, RevisionTagSchema);
|
|
14
|
+
|
|
15
|
+
export type FormatV1 = Static<typeof FormatV1>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { Type, type Static } from "@sinclair/typebox";
|
|
7
|
+
|
|
8
|
+
import { Format } from "./detachedFieldIndexFormatCommon.js";
|
|
9
|
+
import { RevisionTagSchema, StableIdSchema } from "../rebase/index.js";
|
|
10
|
+
|
|
11
|
+
export const version2 = 2.0;
|
|
12
|
+
|
|
13
|
+
export const StableOrFinalRevisionTag = Type.Union([RevisionTagSchema, StableIdSchema]);
|
|
14
|
+
|
|
15
|
+
export const FormatV2 = Format(version2, StableOrFinalRevisionTag);
|
|
16
|
+
|
|
17
|
+
export type FormatV2 = Static<typeof FormatV2>;
|