@fluidframework/tree 2.111.0 → 2.113.0-411909
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 +145 -0
- package/api-report/tree.alpha.api.md +71 -7
- package/api-report/tree.beta.api.md +1 -1
- package/api-report/tree.legacy.beta.api.md +1 -1
- package/api-report/tree.legacy.public.api.md +1 -1
- package/api-report/tree.public.api.md +1 -1
- package/dist/componentApi.d.ts +198 -0
- package/dist/componentApi.d.ts.map +1 -0
- package/dist/componentApi.js +138 -0
- package/dist/componentApi.js.map +1 -0
- package/dist/entrypoints/alpha.d.ts +1 -1
- package/dist/entrypoints/alpha.d.ts.map +1 -1
- package/dist/entrypoints/alpha.js +5 -2
- package/dist/entrypoints/alpha.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +1 -25
- package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +1 -2
- package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts +6 -18
- package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/codecs.js +9 -16
- package/dist/feature-libraries/chunked-forest/codec/codecs.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/index.d.ts +2 -2
- package/dist/feature-libraries/index.d.ts.map +1 -1
- package/dist/feature-libraries/index.js +3 -2
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +39 -7
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.js +22 -2
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
- package/dist/feature-libraries/modular-schema/genericFieldKind.js +1 -1
- package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
- package/dist/feature-libraries/modular-schema/index.d.ts +2 -1
- package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/index.js +4 -1
- package/dist/feature-libraries/modular-schema/index.js.map +1 -1
- package/dist/feature-libraries/modular-schema/minimizeModularChange.d.ts +25 -0
- package/dist/feature-libraries/modular-schema/minimizeModularChange.d.ts.map +1 -0
- package/dist/feature-libraries/modular-schema/minimizeModularChange.js +29 -0
- package/dist/feature-libraries/modular-schema/minimizeModularChange.js.map +1 -0
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js +8 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
- package/dist/feature-libraries/optional-field/optionalField.js +26 -3
- package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
- package/dist/feature-libraries/schemaChecker.d.ts +22 -3
- package/dist/feature-libraries/schemaChecker.d.ts.map +1 -1
- package/dist/feature-libraries/schemaChecker.js +48 -5
- package/dist/feature-libraries/schemaChecker.js.map +1 -1
- package/dist/feature-libraries/sequence-field/filterEdits.d.ts +12 -0
- package/dist/feature-libraries/sequence-field/filterEdits.d.ts.map +1 -0
- package/dist/feature-libraries/sequence-field/filterEdits.js +111 -0
- package/dist/feature-libraries/sequence-field/filterEdits.js.map +1 -0
- package/dist/feature-libraries/sequence-field/markQueue.d.ts +8 -3
- package/dist/feature-libraries/sequence-field/markQueue.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/markQueue.js +22 -8
- package/dist/feature-libraries/sequence-field/markQueue.js.map +1 -1
- package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts +1 -1
- package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/moveEffectTable.js +2 -6
- package/dist/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts +7 -6
- package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js +2 -4
- package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js.map +1 -1
- package/dist/index.d.ts +3 -2
- 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.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 +17 -4
- package/dist/shared-tree/independentView.d.ts.map +1 -1
- package/dist/shared-tree/independentView.js +11 -5
- package/dist/shared-tree/independentView.js.map +1 -1
- package/dist/shared-tree/index.d.ts +2 -1
- package/dist/shared-tree/index.d.ts.map +1 -1
- package/dist/shared-tree/index.js +3 -1
- package/dist/shared-tree/index.js.map +1 -1
- package/dist/shared-tree/schematizingTreeView.d.ts +9 -0
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +29 -14
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/serializedChange.d.ts +41 -0
- package/dist/shared-tree/serializedChange.d.ts.map +1 -0
- package/dist/shared-tree/serializedChange.js +87 -0
- package/dist/shared-tree/serializedChange.js.map +1 -0
- package/dist/shared-tree/sharedTree.d.ts +13 -0
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +2 -0
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/sharedTreeChangeFamily.d.ts +7 -0
- package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
- package/dist/shared-tree/sharedTreeChangeFamily.js +8 -1
- package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
- package/dist/shared-tree/transactionMinimize.d.ts +35 -0
- package/dist/shared-tree/transactionMinimize.d.ts.map +1 -0
- package/dist/shared-tree/transactionMinimize.js +65 -0
- package/dist/shared-tree/transactionMinimize.js.map +1 -0
- package/dist/shared-tree/treeCheckout.d.ts +3 -1
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +36 -62
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree-core/editManager.d.ts +6 -3
- package/dist/shared-tree-core/editManager.d.ts.map +1 -1
- package/dist/shared-tree-core/editManager.js +35 -14
- package/dist/shared-tree-core/editManager.js.map +1 -1
- package/dist/shared-tree-core/editManagerFormatCommons.d.ts +1 -1
- package/dist/shared-tree-core/editManagerFormatCommons.js +1 -1
- package/dist/shared-tree-core/editManagerFormatCommons.js.map +1 -1
- package/dist/shared-tree-core/editManagerFormatVSharedBranches.d.ts +1 -1
- package/dist/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
- package/dist/shared-tree-core/messageCodecVSharedBranches.js +8 -2
- package/dist/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
- package/dist/shared-tree-core/messageFormat.d.ts +1 -1
- package/dist/shared-tree-core/messageFormat.js +1 -1
- package/dist/shared-tree-core/messageFormat.js.map +1 -1
- package/dist/shared-tree-core/messageFormatVSharedBranches.d.ts +10 -1
- package/dist/shared-tree-core/messageFormatVSharedBranches.d.ts.map +1 -1
- package/dist/shared-tree-core/messageFormatVSharedBranches.js +1 -0
- package/dist/shared-tree-core/messageFormatVSharedBranches.js.map +1 -1
- package/dist/shared-tree-core/messageTypes.d.ts +1 -0
- package/dist/shared-tree-core/messageTypes.d.ts.map +1 -1
- package/dist/shared-tree-core/messageTypes.js.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.d.ts +9 -3
- package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.js +24 -11
- package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/dist/shared-tree-core/transaction.d.ts.map +1 -1
- package/dist/shared-tree-core/transaction.js +16 -2
- package/dist/shared-tree-core/transaction.js.map +1 -1
- package/dist/simple-tree/api/configuration.d.ts +32 -2
- package/dist/simple-tree/api/configuration.d.ts.map +1 -1
- package/dist/simple-tree/api/configuration.js +3 -1
- package/dist/simple-tree/api/configuration.js.map +1 -1
- package/dist/simple-tree/api/index.d.ts +2 -2
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +2 -2
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/schemaCompatibilityTester.d.ts +13 -25
- package/dist/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaCompatibilityTester.js +34 -45
- package/dist/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +56 -15
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryBeta.d.ts +0 -3
- package/dist/simple-tree/api/schemaFactoryBeta.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactoryBeta.js.map +1 -1
- package/dist/simple-tree/api/snapshotCompatibilityChecker.d.ts.map +1 -1
- package/dist/simple-tree/api/snapshotCompatibilityChecker.js +1 -2
- package/dist/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -1
- package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/storedSchema.js +1 -2
- package/dist/simple-tree/api/storedSchema.js.map +1 -1
- package/dist/simple-tree/api/tree.d.ts +80 -3
- package/dist/simple-tree/api/tree.d.ts.map +1 -1
- package/dist/simple-tree/api/tree.js.map +1 -1
- package/dist/simple-tree/api/typesUnsafe.d.ts +2 -2
- 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/index.d.ts +1 -1
- package/dist/simple-tree/core/index.d.ts.map +1 -1
- package/dist/simple-tree/core/index.js +2 -1
- package/dist/simple-tree/core/index.js.map +1 -1
- package/dist/simple-tree/core/toStored.d.ts +72 -6
- package/dist/simple-tree/core/toStored.d.ts.map +1 -1
- package/dist/simple-tree/core/toStored.js +25 -1
- package/dist/simple-tree/core/toStored.js.map +1 -1
- package/dist/simple-tree/index.d.ts +3 -3
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +5 -6
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.d.ts +83 -4
- package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.js +39 -0
- package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
- package/dist/simple-tree/prepareForInsertion.js +9 -0
- package/dist/simple-tree/prepareForInsertion.js.map +1 -1
- package/dist/simple-tree/simpleSchemaFormatV1.js +1 -1
- package/dist/simple-tree/simpleSchemaFormatV1.js.map +1 -1
- package/dist/simple-tree/toStoredSchema.d.ts +11 -27
- package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/dist/simple-tree/toStoredSchema.js +25 -33
- package/dist/simple-tree/toStoredSchema.js.map +1 -1
- package/dist/treeFactory.js +1 -1
- package/dist/treeFactory.js.map +1 -1
- package/dist/util/breakable.d.ts +16 -1
- package/dist/util/breakable.d.ts.map +1 -1
- package/dist/util/breakable.js +9 -1
- package/dist/util/breakable.js.map +1 -1
- package/dist/util/compressedIds.d.ts +69 -2
- package/dist/util/compressedIds.d.ts.map +1 -1
- package/dist/util/compressedIds.js +32 -1
- package/dist/util/compressedIds.js.map +1 -1
- package/dist/util/index.d.ts +2 -2
- package/dist/util/index.d.ts.map +1 -1
- package/dist/util/index.js +2 -2
- package/dist/util/index.js.map +1 -1
- package/dist/util/nestedMap.d.ts.map +1 -1
- package/dist/util/nestedMap.js +16 -3
- package/dist/util/nestedMap.js.map +1 -1
- package/dist/util/nestedSet.d.ts +1 -1
- package/dist/util/nestedSet.d.ts.map +1 -1
- package/dist/util/nestedSet.js.map +1 -1
- package/dist/util/utils.d.ts +0 -6
- package/dist/util/utils.d.ts.map +1 -1
- package/dist/util/utils.js +1 -15
- package/dist/util/utils.js.map +1 -1
- package/docs/main/runtime-schema-upgrade.md +208 -0
- package/lib/componentApi.d.ts +198 -0
- package/lib/componentApi.d.ts.map +1 -0
- package/lib/componentApi.js +135 -0
- package/lib/componentApi.js.map +1 -0
- package/lib/entrypoints/alpha.d.ts +1 -1
- package/lib/entrypoints/alpha.d.ts.map +1 -1
- package/lib/entrypoints/alpha.js +1 -1
- package/lib/entrypoints/alpha.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +1 -25
- package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +1 -2
- package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts +6 -18
- package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/codecs.js +10 -17
- package/lib/feature-libraries/chunked-forest/codec/codecs.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/index.d.ts +2 -2
- 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/modular-schema/fieldChangeHandler.d.ts +39 -7
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.js +21 -1
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
- package/lib/feature-libraries/modular-schema/genericFieldKind.js +1 -1
- package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
- package/lib/feature-libraries/modular-schema/index.d.ts +2 -1
- package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/index.js +2 -1
- package/lib/feature-libraries/modular-schema/index.js.map +1 -1
- package/lib/feature-libraries/modular-schema/minimizeModularChange.d.ts +25 -0
- package/lib/feature-libraries/modular-schema/minimizeModularChange.d.ts.map +1 -0
- package/lib/feature-libraries/modular-schema/minimizeModularChange.js +25 -0
- package/lib/feature-libraries/modular-schema/minimizeModularChange.js.map +1 -0
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js +9 -2
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
- package/lib/feature-libraries/optional-field/optionalField.js +27 -4
- package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
- package/lib/feature-libraries/schemaChecker.d.ts +22 -3
- package/lib/feature-libraries/schemaChecker.d.ts.map +1 -1
- package/lib/feature-libraries/schemaChecker.js +48 -5
- package/lib/feature-libraries/schemaChecker.js.map +1 -1
- package/lib/feature-libraries/sequence-field/filterEdits.d.ts +12 -0
- package/lib/feature-libraries/sequence-field/filterEdits.d.ts.map +1 -0
- package/lib/feature-libraries/sequence-field/filterEdits.js +107 -0
- package/lib/feature-libraries/sequence-field/filterEdits.js.map +1 -0
- package/lib/feature-libraries/sequence-field/markQueue.d.ts +8 -3
- package/lib/feature-libraries/sequence-field/markQueue.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/markQueue.js +22 -9
- package/lib/feature-libraries/sequence-field/markQueue.js.map +1 -1
- package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts +1 -1
- package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/moveEffectTable.js +2 -6
- package/lib/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts +7 -6
- package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js +2 -4
- package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js.map +1 -1
- package/lib/index.d.ts +3 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +3 -2
- 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 +17 -4
- package/lib/shared-tree/independentView.d.ts.map +1 -1
- package/lib/shared-tree/independentView.js +9 -3
- package/lib/shared-tree/independentView.js.map +1 -1
- package/lib/shared-tree/index.d.ts +2 -1
- package/lib/shared-tree/index.d.ts.map +1 -1
- package/lib/shared-tree/index.js +1 -0
- package/lib/shared-tree/index.js.map +1 -1
- package/lib/shared-tree/schematizingTreeView.d.ts +9 -0
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +31 -16
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/serializedChange.d.ts +41 -0
- package/lib/shared-tree/serializedChange.d.ts.map +1 -0
- package/lib/shared-tree/serializedChange.js +84 -0
- package/lib/shared-tree/serializedChange.js.map +1 -0
- package/lib/shared-tree/sharedTree.d.ts +13 -0
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +2 -0
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/sharedTreeChangeFamily.d.ts +7 -0
- package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
- package/lib/shared-tree/sharedTreeChangeFamily.js +7 -1
- package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
- package/lib/shared-tree/transactionMinimize.d.ts +35 -0
- package/lib/shared-tree/transactionMinimize.d.ts.map +1 -0
- package/lib/shared-tree/transactionMinimize.js +62 -0
- package/lib/shared-tree/transactionMinimize.js.map +1 -0
- package/lib/shared-tree/treeCheckout.d.ts +3 -1
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +18 -44
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree-core/editManager.d.ts +6 -3
- package/lib/shared-tree-core/editManager.d.ts.map +1 -1
- package/lib/shared-tree-core/editManager.js +36 -15
- package/lib/shared-tree-core/editManager.js.map +1 -1
- package/lib/shared-tree-core/editManagerFormatCommons.d.ts +1 -1
- package/lib/shared-tree-core/editManagerFormatCommons.js +1 -1
- package/lib/shared-tree-core/editManagerFormatCommons.js.map +1 -1
- package/lib/shared-tree-core/editManagerFormatVSharedBranches.d.ts +1 -1
- package/lib/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
- package/lib/shared-tree-core/messageCodecVSharedBranches.js +8 -2
- package/lib/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
- package/lib/shared-tree-core/messageFormat.d.ts +1 -1
- package/lib/shared-tree-core/messageFormat.js +1 -1
- package/lib/shared-tree-core/messageFormat.js.map +1 -1
- package/lib/shared-tree-core/messageFormatVSharedBranches.d.ts +10 -1
- package/lib/shared-tree-core/messageFormatVSharedBranches.d.ts.map +1 -1
- package/lib/shared-tree-core/messageFormatVSharedBranches.js +1 -0
- package/lib/shared-tree-core/messageFormatVSharedBranches.js.map +1 -1
- package/lib/shared-tree-core/messageTypes.d.ts +1 -0
- package/lib/shared-tree-core/messageTypes.d.ts.map +1 -1
- package/lib/shared-tree-core/messageTypes.js.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.d.ts +9 -3
- package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.js +25 -12
- package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/lib/shared-tree-core/transaction.d.ts.map +1 -1
- package/lib/shared-tree-core/transaction.js +16 -2
- package/lib/shared-tree-core/transaction.js.map +1 -1
- package/lib/simple-tree/api/configuration.d.ts +32 -2
- package/lib/simple-tree/api/configuration.d.ts.map +1 -1
- package/lib/simple-tree/api/configuration.js +4 -2
- package/lib/simple-tree/api/configuration.js.map +1 -1
- package/lib/simple-tree/api/index.d.ts +2 -2
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js +1 -1
- package/lib/simple-tree/api/index.js.map +1 -1
- package/lib/simple-tree/api/schemaCompatibilityTester.d.ts +13 -25
- package/lib/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaCompatibilityTester.js +32 -43
- package/lib/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +56 -15
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryBeta.d.ts +0 -3
- package/lib/simple-tree/api/schemaFactoryBeta.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactoryBeta.js.map +1 -1
- package/lib/simple-tree/api/snapshotCompatibilityChecker.d.ts.map +1 -1
- package/lib/simple-tree/api/snapshotCompatibilityChecker.js +2 -3
- package/lib/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -1
- package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/storedSchema.js +2 -3
- package/lib/simple-tree/api/storedSchema.js.map +1 -1
- package/lib/simple-tree/api/tree.d.ts +80 -3
- package/lib/simple-tree/api/tree.d.ts.map +1 -1
- package/lib/simple-tree/api/tree.js.map +1 -1
- package/lib/simple-tree/api/typesUnsafe.d.ts +2 -2
- 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/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/toStored.d.ts +72 -6
- package/lib/simple-tree/core/toStored.d.ts.map +1 -1
- package/lib/simple-tree/core/toStored.js +24 -0
- package/lib/simple-tree/core/toStored.js.map +1 -1
- package/lib/simple-tree/index.d.ts +3 -3
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +3 -3
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.d.ts +83 -4
- package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.js +39 -0
- package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
- package/lib/simple-tree/prepareForInsertion.js +9 -0
- package/lib/simple-tree/prepareForInsertion.js.map +1 -1
- package/lib/simple-tree/simpleSchemaFormatV1.js +1 -1
- package/lib/simple-tree/simpleSchemaFormatV1.js.map +1 -1
- package/lib/simple-tree/toStoredSchema.d.ts +11 -27
- package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/lib/simple-tree/toStoredSchema.js +24 -33
- package/lib/simple-tree/toStoredSchema.js.map +1 -1
- package/lib/treeFactory.js +1 -1
- package/lib/treeFactory.js.map +1 -1
- package/lib/util/breakable.d.ts +16 -1
- package/lib/util/breakable.d.ts.map +1 -1
- package/lib/util/breakable.js +9 -1
- package/lib/util/breakable.js.map +1 -1
- package/lib/util/compressedIds.d.ts +69 -2
- package/lib/util/compressedIds.d.ts.map +1 -1
- package/lib/util/compressedIds.js +30 -0
- package/lib/util/compressedIds.js.map +1 -1
- package/lib/util/index.d.ts +2 -2
- package/lib/util/index.d.ts.map +1 -1
- package/lib/util/index.js +2 -2
- package/lib/util/index.js.map +1 -1
- package/lib/util/nestedMap.d.ts.map +1 -1
- package/lib/util/nestedMap.js +17 -4
- package/lib/util/nestedMap.js.map +1 -1
- package/lib/util/nestedSet.d.ts +1 -1
- package/lib/util/nestedSet.d.ts.map +1 -1
- package/lib/util/nestedSet.js.map +1 -1
- package/lib/util/utils.d.ts +0 -6
- package/lib/util/utils.d.ts.map +1 -1
- package/lib/util/utils.js +0 -13
- package/lib/util/utils.js.map +1 -1
- package/package.json +22 -22
- package/src/componentApi.ts +354 -0
- package/src/entrypoints/alpha.ts +6 -0
- package/src/feature-libraries/chunked-forest/codec/chunkDecoding.ts +6 -27
- package/src/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.ts +1 -2
- package/src/feature-libraries/chunked-forest/codec/codecs.ts +17 -44
- package/src/feature-libraries/default-schema/defaultFieldKinds.ts +1 -1
- package/src/feature-libraries/index.ts +2 -0
- package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +51 -7
- package/src/feature-libraries/modular-schema/genericFieldKind.ts +1 -1
- package/src/feature-libraries/modular-schema/index.ts +5 -2
- package/src/feature-libraries/modular-schema/minimizeModularChange.ts +33 -0
- package/src/feature-libraries/modular-schema/modularChangeFamily.ts +16 -1
- package/src/feature-libraries/optional-field/optionalField.ts +43 -3
- package/src/feature-libraries/schemaChecker.ts +86 -9
- package/src/feature-libraries/sequence-field/filterEdits.ts +143 -0
- package/src/feature-libraries/sequence-field/markQueue.ts +28 -11
- package/src/feature-libraries/sequence-field/moveEffectTable.ts +2 -7
- package/src/feature-libraries/sequence-field/sequenceFieldChangeRebaser.ts +3 -5
- package/src/index.ts +6 -0
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/independentView.ts +35 -5
- package/src/shared-tree/index.ts +3 -0
- package/src/shared-tree/schematizingTreeView.ts +52 -20
- package/src/shared-tree/serializedChange.ts +127 -0
- package/src/shared-tree/sharedTree.ts +16 -0
- package/src/shared-tree/sharedTreeChangeFamily.ts +7 -1
- package/src/shared-tree/transactionMinimize.ts +74 -0
- package/src/shared-tree/treeCheckout.ts +42 -57
- package/src/shared-tree-core/editManager.ts +42 -6
- package/src/shared-tree-core/editManagerFormatCommons.ts +1 -1
- package/src/shared-tree-core/messageCodecVSharedBranches.ts +8 -1
- package/src/shared-tree-core/messageFormat.ts +1 -1
- package/src/shared-tree-core/messageFormatVSharedBranches.ts +10 -0
- package/src/shared-tree-core/messageTypes.ts +1 -0
- package/src/shared-tree-core/sharedTreeCore.ts +33 -10
- package/src/shared-tree-core/transaction.ts +19 -2
- package/src/simple-tree/api/configuration.ts +40 -2
- package/src/simple-tree/api/index.ts +2 -1
- package/src/simple-tree/api/schemaCompatibilityTester.ts +41 -49
- package/src/simple-tree/api/schemaFactoryAlpha.ts +56 -15
- package/src/simple-tree/api/schemaFactoryBeta.ts +0 -3
- package/src/simple-tree/api/snapshotCompatibilityChecker.ts +2 -3
- package/src/simple-tree/api/storedSchema.ts +2 -3
- package/src/simple-tree/api/tree.ts +82 -3
- package/src/simple-tree/api/typesUnsafe.ts +2 -1
- package/src/simple-tree/core/index.ts +2 -1
- package/src/simple-tree/core/toStored.ts +95 -8
- package/src/simple-tree/index.ts +4 -3
- package/src/simple-tree/node-kinds/array/arrayNode.ts +168 -4
- package/src/simple-tree/prepareForInsertion.ts +12 -0
- package/src/simple-tree/simpleSchemaFormatV1.ts +1 -1
- package/src/simple-tree/toStoredSchema.ts +44 -39
- package/src/treeFactory.ts +1 -1
- package/src/util/breakable.ts +8 -1
- package/src/util/compressedIds.ts +90 -2
- package/src/util/index.ts +3 -1
- package/src/util/nestedMap.ts +21 -4
- package/src/util/nestedSet.ts +1 -1
- package/src/util/utils.ts +0 -18
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { ChangeAtomId } from "../../core/index.js";
|
|
7
|
+
import type { RangeQueryResult } from "../../util/index.js";
|
|
8
|
+
import { EditFilterStatus, type EditFilterFunc } from "../modular-schema/index.js";
|
|
9
|
+
import { MarkListFactory } from "./markListFactory.js";
|
|
10
|
+
import { NoopMarkType, type Changeset, type Mark } from "./types.js";
|
|
11
|
+
import { getDetachedNodeId, getDetachOutputCellId, omitMarkEffect } from "./utils.js";
|
|
12
|
+
import { MarkQueueBase } from "./markQueue.js";
|
|
13
|
+
import { unreachableCase } from "@fluidframework/core-utils/internal";
|
|
14
|
+
|
|
15
|
+
export function filterEdits(
|
|
16
|
+
change: Changeset,
|
|
17
|
+
options: {
|
|
18
|
+
filterDetach: EditFilterFunc;
|
|
19
|
+
filterAttach: EditFilterFunc;
|
|
20
|
+
preserveOtherEdits: boolean;
|
|
21
|
+
},
|
|
22
|
+
): Changeset {
|
|
23
|
+
const factory = new MarkListFactory();
|
|
24
|
+
const queue = new MarkQueueBase(change);
|
|
25
|
+
for (let mark = queue.peek(); mark !== undefined; mark = queue.peek()) {
|
|
26
|
+
const filtered = filterMark(
|
|
27
|
+
mark,
|
|
28
|
+
options.filterDetach,
|
|
29
|
+
options.filterAttach,
|
|
30
|
+
options.preserveOtherEdits,
|
|
31
|
+
);
|
|
32
|
+
factory.push(filtered);
|
|
33
|
+
queue.dequeueUpTo(filtered.count);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return factory.list;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function filterMark(
|
|
40
|
+
mark: Mark,
|
|
41
|
+
filterDetach: (
|
|
42
|
+
id: ChangeAtomId,
|
|
43
|
+
count: number,
|
|
44
|
+
endpoint?: ChangeAtomId,
|
|
45
|
+
) => RangeQueryResult<EditFilterStatus>,
|
|
46
|
+
filterAttach: (
|
|
47
|
+
id: ChangeAtomId,
|
|
48
|
+
count: number,
|
|
49
|
+
endpoint?: ChangeAtomId,
|
|
50
|
+
) => RangeQueryResult<EditFilterStatus>,
|
|
51
|
+
preserveOtherEdits: boolean,
|
|
52
|
+
): Mark {
|
|
53
|
+
const type = mark.type;
|
|
54
|
+
switch (type) {
|
|
55
|
+
case "Insert":
|
|
56
|
+
case "MoveIn": {
|
|
57
|
+
if (mark.cellId === undefined) {
|
|
58
|
+
return preserveOtherEdits ? mark : omitMarkEffect(mark);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const endpoint = mark.type === "MoveIn" ? mark.finalEndpoint : undefined;
|
|
62
|
+
const result = filterAttach(mark.cellId, mark.count, endpoint);
|
|
63
|
+
|
|
64
|
+
let filtered: Mark;
|
|
65
|
+
switch (result.value) {
|
|
66
|
+
case EditFilterStatus.Preserve: {
|
|
67
|
+
filtered = mark;
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
case EditFilterStatus.PreserveWithoutMove: {
|
|
71
|
+
// KLUDGE: PreserveWithoutMove requires us to return a mark which attaches the node
|
|
72
|
+
// using the detach ID of the move (the endpoint ID).
|
|
73
|
+
// Insert marks use the cell ID as the attach ID, so we must change the cell ID here.
|
|
74
|
+
// This could be a problem if there were references to the old cell ID outside this changeset,
|
|
75
|
+
// but PreserveWithoutMove is only used for transaction minimization, where that is not a problem.
|
|
76
|
+
const newCellId = endpoint ?? { revision: mark.revision, localId: mark.id };
|
|
77
|
+
filtered = {
|
|
78
|
+
type: "Insert",
|
|
79
|
+
count: result.length,
|
|
80
|
+
cellId: newCellId,
|
|
81
|
+
revision: mark.revision,
|
|
82
|
+
id: mark.id,
|
|
83
|
+
};
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
case EditFilterStatus.Remove: {
|
|
87
|
+
filtered = omitMarkEffect(mark);
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
default: {
|
|
91
|
+
unreachableCase(result.value);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return { ...filtered, count: result.length };
|
|
96
|
+
}
|
|
97
|
+
case "Remove":
|
|
98
|
+
case "MoveOut": {
|
|
99
|
+
const detachId = getDetachedNodeId(mark);
|
|
100
|
+
const endpoint = mark.type === "MoveOut" ? mark.finalEndpoint : undefined;
|
|
101
|
+
const result = filterDetach(detachId, mark.count, endpoint);
|
|
102
|
+
|
|
103
|
+
let filtered: Mark;
|
|
104
|
+
switch (result.value) {
|
|
105
|
+
case EditFilterStatus.Preserve: {
|
|
106
|
+
filtered = mark;
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
case EditFilterStatus.PreserveWithoutMove: {
|
|
110
|
+
const outputCellId = getDetachOutputCellId(mark);
|
|
111
|
+
filtered = {
|
|
112
|
+
type: "Remove",
|
|
113
|
+
count: mark.count,
|
|
114
|
+
revision: outputCellId.revision,
|
|
115
|
+
id: outputCellId.localId,
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
if (mark.changes !== undefined) {
|
|
119
|
+
filtered.changes = mark.changes;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
case EditFilterStatus.Remove: {
|
|
125
|
+
filtered = omitMarkEffect(mark);
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
default: {
|
|
129
|
+
unreachableCase(result.value);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return { ...filtered, count: result.length };
|
|
133
|
+
}
|
|
134
|
+
case NoopMarkType:
|
|
135
|
+
case "Rename":
|
|
136
|
+
case "AttachAndDetach": {
|
|
137
|
+
return preserveOtherEdits ? mark : omitMarkEffect(mark);
|
|
138
|
+
}
|
|
139
|
+
default: {
|
|
140
|
+
unreachableCase(type);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
@@ -3,20 +3,17 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { assert
|
|
6
|
+
import { assert } from "@fluidframework/core-utils/internal";
|
|
7
7
|
|
|
8
|
-
import { type MoveEffectTable
|
|
8
|
+
import { getFirstMoveEffectLength, type MoveEffectTable } from "./moveEffectTable.js";
|
|
9
9
|
import type { Mark } from "./types.js";
|
|
10
10
|
import { splitMark } from "./utils.js";
|
|
11
11
|
|
|
12
|
-
export class
|
|
12
|
+
export class MarkQueueBase {
|
|
13
13
|
private readonly stack: Mark[] = [];
|
|
14
14
|
private index = 0;
|
|
15
15
|
|
|
16
|
-
public constructor(
|
|
17
|
-
private readonly list: readonly Mark[],
|
|
18
|
-
private readonly moveEffects: MoveEffectTable,
|
|
19
|
-
) {
|
|
16
|
+
public constructor(private readonly list: readonly Mark[]) {
|
|
20
17
|
this.list = list;
|
|
21
18
|
}
|
|
22
19
|
|
|
@@ -36,11 +33,14 @@ export class MarkQueue {
|
|
|
36
33
|
return undefined;
|
|
37
34
|
}
|
|
38
35
|
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
36
|
+
const splitLength = this.getLengthForSplit(mark);
|
|
37
|
+
if (splitLength < mark.count) {
|
|
38
|
+
const [part1, part2] = splitMark(mark, splitLength);
|
|
39
|
+
this.stack.push(part2);
|
|
40
|
+
return part1;
|
|
42
41
|
}
|
|
43
|
-
|
|
42
|
+
|
|
43
|
+
return mark;
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
/**
|
|
@@ -66,4 +66,21 @@ export class MarkQueue {
|
|
|
66
66
|
}
|
|
67
67
|
return mark;
|
|
68
68
|
}
|
|
69
|
+
|
|
70
|
+
protected getLengthForSplit(mark: Mark): number {
|
|
71
|
+
return mark.count;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export class MarkQueue extends MarkQueueBase {
|
|
76
|
+
public constructor(
|
|
77
|
+
list: readonly Mark[],
|
|
78
|
+
private readonly moveEffects: MoveEffectTable,
|
|
79
|
+
) {
|
|
80
|
+
super(list);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
protected override getLengthForSplit(mark: Mark): number {
|
|
84
|
+
return getFirstMoveEffectLength(mark, mark.count, this.moveEffects);
|
|
85
|
+
}
|
|
69
86
|
}
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
|
|
16
16
|
import type { MoveMarkEffect } from "./helperTypes.js";
|
|
17
17
|
import type { CellMark, Detach, Mark, MarkEffect, MoveId, MoveIn, MoveOut } from "./types.js";
|
|
18
|
-
import { isAttachAndDetachEffect,
|
|
18
|
+
import { isAttachAndDetachEffect, splitMarkEffect } from "./utils.js";
|
|
19
19
|
|
|
20
20
|
export type MoveEffectTable = CrossFieldManager<MoveEffect>;
|
|
21
21
|
|
|
@@ -168,12 +168,7 @@ function adjustMoveEffectBasis(effect: MoveEffectWithBasis, newBasis: MoveId): M
|
|
|
168
168
|
return adjusted;
|
|
169
169
|
}
|
|
170
170
|
|
|
171
|
-
export function
|
|
172
|
-
const length = getFirstMoveEffectLength(mark, mark.count, effects);
|
|
173
|
-
return length < mark.count ? splitMark(mark, length) : [mark];
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
function getFirstMoveEffectLength(
|
|
171
|
+
export function getFirstMoveEffectLength(
|
|
177
172
|
markEffect: MarkEffect,
|
|
178
173
|
count: number,
|
|
179
174
|
effects: MoveEffectTable,
|
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
import type { FieldChangeRebaser } from "../modular-schema/index.js";
|
|
7
7
|
|
|
8
8
|
import { compose } from "./compose.js";
|
|
9
|
+
import { filterEdits } from "./filterEdits.js";
|
|
9
10
|
import { invert } from "./invert.js";
|
|
10
11
|
import { prune } from "./prune.js";
|
|
11
12
|
import { rebase } from "./rebase.js";
|
|
12
13
|
import { replaceRevisions } from "./replaceRevisions.js";
|
|
13
14
|
import type { Changeset } from "./types.js";
|
|
14
|
-
import { omitMarkEffect } from "./utils.js";
|
|
15
15
|
|
|
16
16
|
export type SequenceChangeRebaser = FieldChangeRebaser<Changeset>;
|
|
17
17
|
|
|
@@ -21,7 +21,5 @@ export const sequenceFieldChangeRebaser = {
|
|
|
21
21
|
rebase,
|
|
22
22
|
prune,
|
|
23
23
|
replaceRevisions,
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
},
|
|
27
|
-
};
|
|
24
|
+
filterEdits,
|
|
25
|
+
} as const;
|
package/src/index.ts
CHANGED
|
@@ -78,12 +78,14 @@ export {
|
|
|
78
78
|
type TreeIdentifierUtils,
|
|
79
79
|
independentView,
|
|
80
80
|
type IndependentViewOptions,
|
|
81
|
+
type IndependentViewTelemetryOptions,
|
|
81
82
|
createIndependentTreeBeta,
|
|
82
83
|
createIndependentTreeAlpha,
|
|
83
84
|
type CreateIndependentTreeAlphaOptions,
|
|
84
85
|
ForestTypeOptimized,
|
|
85
86
|
ForestTypeExpensiveDebug,
|
|
86
87
|
ForestTypeReference,
|
|
88
|
+
minimize,
|
|
87
89
|
} from "./shared-tree/index.js";
|
|
88
90
|
|
|
89
91
|
export {
|
|
@@ -97,6 +99,7 @@ export {
|
|
|
97
99
|
type TreeNodeSchema,
|
|
98
100
|
TreeViewConfiguration,
|
|
99
101
|
type ITreeViewConfiguration,
|
|
102
|
+
type ITreeViewConfigurationAlpha,
|
|
100
103
|
type ITreeConfigurationOptions,
|
|
101
104
|
type TreeView,
|
|
102
105
|
type TreeViewEvents,
|
|
@@ -332,6 +335,8 @@ export {
|
|
|
332
335
|
type ErasedNode,
|
|
333
336
|
type ErasedSchemaSubclassable,
|
|
334
337
|
type SnapshotSchemaCompatibilityOptions,
|
|
338
|
+
StagedSchemaUpgradePolicy,
|
|
339
|
+
type StagedSchemaUpgradePolicyFactory,
|
|
335
340
|
type ArrayPlaceAnchor,
|
|
336
341
|
createArrayInsertionAnchor,
|
|
337
342
|
type WithValue,
|
|
@@ -415,3 +420,4 @@ export {
|
|
|
415
420
|
utf16LengthForCodePoints,
|
|
416
421
|
} from "./text/index.js";
|
|
417
422
|
export { ExtensibleUnionNode } from "./extensibleUnionNode.js";
|
|
423
|
+
export { Component } from "./componentApi.js";
|
package/src/packageVersion.ts
CHANGED
|
@@ -3,12 +3,16 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import type { IFluidHandle } from "@fluidframework/core-interfaces";
|
|
6
|
+
import type { IFluidHandle, ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
|
|
7
7
|
import { assert } from "@fluidframework/core-utils/internal";
|
|
8
8
|
import {
|
|
9
9
|
type IIdCompressor,
|
|
10
10
|
createIdCompressor,
|
|
11
11
|
} from "@fluidframework/id-compressor/internal";
|
|
12
|
+
import {
|
|
13
|
+
createChildLogger,
|
|
14
|
+
extractTelemetryLoggerExt,
|
|
15
|
+
} from "@fluidframework/telemetry-utils/internal";
|
|
12
16
|
|
|
13
17
|
import type { CodecWriteOptions, ICodecOptions } from "../codec/index.js";
|
|
14
18
|
import {
|
|
@@ -22,8 +26,8 @@ import {
|
|
|
22
26
|
FieldBatchDecodingContext,
|
|
23
27
|
defaultIncrementalEncodingPolicy,
|
|
24
28
|
schemaCodecBuilder,
|
|
29
|
+
combineChunks,
|
|
25
30
|
} from "../feature-libraries/index.js";
|
|
26
|
-
import { combineChunks } from "../feature-libraries/index.js";
|
|
27
31
|
import type {
|
|
28
32
|
TreeViewConfiguration,
|
|
29
33
|
ImplicitFieldSchema,
|
|
@@ -52,11 +56,28 @@ import {
|
|
|
52
56
|
} from "./sharedTree.js";
|
|
53
57
|
import { createTreeCheckout } from "./treeCheckout.js";
|
|
54
58
|
|
|
59
|
+
/**
|
|
60
|
+
* Options for supplying a telemetry logger to an independent tree view.
|
|
61
|
+
* @remarks
|
|
62
|
+
* Events emitted by the independent tree are tagged with the `independentView` namespace.
|
|
63
|
+
* If no logger is provided, telemetry events are dropped.
|
|
64
|
+
* @alpha @input
|
|
65
|
+
*/
|
|
66
|
+
export interface IndependentViewTelemetryOptions {
|
|
67
|
+
/**
|
|
68
|
+
* Optional logger for telemetry.
|
|
69
|
+
*/
|
|
70
|
+
readonly logger?: ITelemetryBaseLogger | undefined;
|
|
71
|
+
}
|
|
72
|
+
|
|
55
73
|
/**
|
|
56
74
|
* {@link independentView} options.
|
|
57
75
|
* @alpha @input
|
|
58
76
|
*/
|
|
59
|
-
export interface IndependentViewOptions
|
|
77
|
+
export interface IndependentViewOptions
|
|
78
|
+
extends ForestOptions,
|
|
79
|
+
Partial<CodecWriteOptions>,
|
|
80
|
+
IndependentViewTelemetryOptions {
|
|
60
81
|
/**
|
|
61
82
|
* Optional ID compressor for generating and compressing identifiers.
|
|
62
83
|
* If not provided, a new one will be created.
|
|
@@ -69,6 +90,7 @@ export interface IndependentViewOptions extends ForestOptions, Partial<CodecWrit
|
|
|
69
90
|
* @alpha
|
|
70
91
|
*/
|
|
71
92
|
export type CreateIndependentTreeAlphaOptions = ForestOptions &
|
|
93
|
+
IndependentViewTelemetryOptions &
|
|
72
94
|
(
|
|
73
95
|
| (IndependentViewOptions & {
|
|
74
96
|
/**
|
|
@@ -120,7 +142,7 @@ export function independentView<const TSchema extends ImplicitFieldSchema>(
|
|
|
120
142
|
*/
|
|
121
143
|
export function independentInitializedView<const TSchema extends ImplicitFieldSchema>(
|
|
122
144
|
config: TreeViewConfiguration<TSchema>,
|
|
123
|
-
options: ForestOptions & ICodecOptions,
|
|
145
|
+
options: ForestOptions & ICodecOptions & IndependentViewTelemetryOptions,
|
|
124
146
|
content: ViewContent,
|
|
125
147
|
): TreeViewAlpha<TSchema> {
|
|
126
148
|
return createIndependentTreeAlpha({ ...options, content }).viewWith(
|
|
@@ -202,7 +224,13 @@ export function createIndependentTreeBeta<const TSchema extends ImplicitFieldSch
|
|
|
202
224
|
export function createIndependentTreeAlpha<const TSchema extends ImplicitFieldSchema>(
|
|
203
225
|
options?: CreateIndependentTreeAlphaOptions,
|
|
204
226
|
): ViewableTree & Pick<ITreeAlpha, "exportVerbose" | "exportSimpleSchema"> {
|
|
205
|
-
const
|
|
227
|
+
const logger = extractTelemetryLoggerExt(
|
|
228
|
+
createChildLogger({
|
|
229
|
+
logger: options?.logger,
|
|
230
|
+
namespace: "independentView",
|
|
231
|
+
}),
|
|
232
|
+
);
|
|
233
|
+
const breaker = new Breakable("independentView", logger);
|
|
206
234
|
const idCompressor: IIdCompressor =
|
|
207
235
|
options?.idCompressor ?? options?.content?.idCompressor ?? createIdCompressor();
|
|
208
236
|
const mintRevisionTag = (): RevisionTag => idCompressor.generateCompressedId();
|
|
@@ -223,6 +251,7 @@ export function createIndependentTreeAlpha<const TSchema extends ImplicitFieldSc
|
|
|
223
251
|
forest,
|
|
224
252
|
schema: schemaRepository,
|
|
225
253
|
breaker,
|
|
254
|
+
logger,
|
|
226
255
|
codecOptions: options,
|
|
227
256
|
});
|
|
228
257
|
|
|
@@ -235,6 +264,7 @@ export function createIndependentTreeAlpha<const TSchema extends ImplicitFieldSc
|
|
|
235
264
|
// (finalized compressed ids or strings), so summary-style decode is correct.
|
|
236
265
|
const context = FieldBatchDecodingContext.forSummary({
|
|
237
266
|
idCompressor,
|
|
267
|
+
healing: undefined,
|
|
238
268
|
});
|
|
239
269
|
const fieldCursors = fieldBatchCodec.decode(
|
|
240
270
|
options.content.tree as JsonCompatibleReadOnly,
|
package/src/shared-tree/index.ts
CHANGED
|
@@ -43,6 +43,8 @@ export type {
|
|
|
43
43
|
SharedTreeEditBuilder,
|
|
44
44
|
} from "./sharedTreeEditBuilder.js";
|
|
45
45
|
|
|
46
|
+
export { minimize } from "./transactionMinimize.js";
|
|
47
|
+
|
|
46
48
|
export { Tree } from "./tree.js";
|
|
47
49
|
export type { RunTransaction } from "./tree.js";
|
|
48
50
|
|
|
@@ -57,6 +59,7 @@ export {
|
|
|
57
59
|
type ViewContent,
|
|
58
60
|
independentView,
|
|
59
61
|
type IndependentViewOptions,
|
|
62
|
+
type IndependentViewTelemetryOptions,
|
|
60
63
|
createIndependentTreeBeta,
|
|
61
64
|
createIndependentTreeAlpha,
|
|
62
65
|
type CreateIndependentTreeAlphaOptions,
|
|
@@ -23,6 +23,7 @@ import {
|
|
|
23
23
|
type FlexTreeUnknownUnboxed,
|
|
24
24
|
FieldKinds,
|
|
25
25
|
type FlexTreeRequiredField,
|
|
26
|
+
allowsRepoSuperset,
|
|
26
27
|
} from "../feature-libraries/index.js";
|
|
27
28
|
import {
|
|
28
29
|
type ImplicitFieldSchema,
|
|
@@ -32,8 +33,9 @@ import {
|
|
|
32
33
|
tryGetTreeNodeForField,
|
|
33
34
|
setField,
|
|
34
35
|
normalizeFieldSchema,
|
|
35
|
-
|
|
36
|
+
checkSchemaCompatibility,
|
|
36
37
|
type InsertableContent,
|
|
38
|
+
type StagedSchemaUpgradePolicy,
|
|
37
39
|
type TreeViewConfiguration,
|
|
38
40
|
type TreeViewAlpha,
|
|
39
41
|
type InsertableField,
|
|
@@ -57,6 +59,7 @@ import {
|
|
|
57
59
|
toInitialSchema,
|
|
58
60
|
toUpgradeSchema,
|
|
59
61
|
type TreeBranchAlpha,
|
|
62
|
+
type TreeSchema,
|
|
60
63
|
} from "../simple-tree/index.js";
|
|
61
64
|
import {
|
|
62
65
|
type Breakable,
|
|
@@ -98,7 +101,14 @@ export class SchematizingSimpleTreeView<
|
|
|
98
101
|
IEmitter<TreeViewEvents & TreeBranchEvents> &
|
|
99
102
|
HasListeners<TreeViewEvents & TreeBranchEvents> = createEmitter();
|
|
100
103
|
|
|
101
|
-
|
|
104
|
+
/**
|
|
105
|
+
* The schema for this view, captured at construction time for compatibility checking.
|
|
106
|
+
*/
|
|
107
|
+
private readonly viewSchema: TreeSchema;
|
|
108
|
+
/**
|
|
109
|
+
* Stored-schema generation policy from the view configuration, frozen at construction time.
|
|
110
|
+
*/
|
|
111
|
+
private readonly stagedUpgradePolicy: StagedSchemaUpgradePolicy;
|
|
102
112
|
|
|
103
113
|
/**
|
|
104
114
|
* Events to unregister upon flex-tree view disposal.
|
|
@@ -141,9 +151,18 @@ export class SchematizingSimpleTreeView<
|
|
|
141
151
|
|
|
142
152
|
this.rootFieldSchema = normalizeFieldSchema(config.schema);
|
|
143
153
|
|
|
144
|
-
const
|
|
154
|
+
const stagedUpgradePolicy =
|
|
155
|
+
config instanceof TreeViewConfigurationAlpha ? config.stagedUpgradePolicy : undefined;
|
|
156
|
+
const configAlpha = new TreeViewConfigurationAlpha({
|
|
157
|
+
schema: config.schema,
|
|
158
|
+
enableSchemaValidation: config.enableSchemaValidation,
|
|
159
|
+
preventAmbiguity: config.preventAmbiguity,
|
|
160
|
+
stagedUpgradePolicy,
|
|
161
|
+
});
|
|
162
|
+
this.stagedUpgradePolicy = configAlpha.stagedUpgradePolicy;
|
|
145
163
|
|
|
146
|
-
|
|
164
|
+
// Store viewSchema directly from the configuration (TreeViewConfigurationAlpha implements TreeSchema)
|
|
165
|
+
this.viewSchema = configAlpha;
|
|
147
166
|
// This must be initialized before `update` can be called.
|
|
148
167
|
this.currentCompatibility = {
|
|
149
168
|
canView: false,
|
|
@@ -188,7 +207,7 @@ export class SchematizingSimpleTreeView<
|
|
|
188
207
|
}
|
|
189
208
|
|
|
190
209
|
this.runSchemaEdit(() => {
|
|
191
|
-
const schema = toInitialSchema(this.config.schema);
|
|
210
|
+
const schema = toInitialSchema(this.config.schema, this.stagedUpgradePolicy);
|
|
192
211
|
// This has to be the contextless version, since when "initialize" is called (right after this),
|
|
193
212
|
// it will do a schema change which would dispose of the current context (see inside `update`).
|
|
194
213
|
// Thus using the current context (if any) would hydrate nodes then
|
|
@@ -246,19 +265,18 @@ export class SchematizingSimpleTreeView<
|
|
|
246
265
|
public upgradeSchema(): void {
|
|
247
266
|
this.ensureUndisposed();
|
|
248
267
|
|
|
249
|
-
const
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
return;
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
if (!compatibility.canUpgrade) {
|
|
268
|
+
const newSchema = toUpgradeSchema(this.viewSchema.root, this.stagedUpgradePolicy);
|
|
269
|
+
const storedSchema = this.checkout.storedSchema.clone();
|
|
270
|
+
if (!allowsRepoSuperset(defaultSchemaPolicy, storedSchema, newSchema)) {
|
|
256
271
|
throw new UsageError(
|
|
257
|
-
"Existing stored schema cannot be upgraded (see TreeView.compatibility.canUpgrade).",
|
|
272
|
+
"Existing stored schema cannot be upgraded to the requested schema (see TreeView.compatibility.canUpgrade).",
|
|
258
273
|
);
|
|
259
274
|
}
|
|
275
|
+
if (allowsRepoSuperset(defaultSchemaPolicy, newSchema, storedSchema)) {
|
|
276
|
+
// No-op
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
260
279
|
|
|
261
|
-
const newSchema = toUpgradeSchema(this.viewSchema.viewSchema.root);
|
|
262
280
|
this.runSchemaEdit(() => this.checkout.updateSchema(newSchema));
|
|
263
281
|
}
|
|
264
282
|
|
|
@@ -347,12 +365,8 @@ export class SchematizingSimpleTreeView<
|
|
|
347
365
|
private update(): void {
|
|
348
366
|
this.disposeFlexView();
|
|
349
367
|
|
|
350
|
-
const compatibility = this.
|
|
351
|
-
|
|
352
|
-
this.currentCompatibility = {
|
|
353
|
-
...compatibility,
|
|
354
|
-
canInitialize: canInitialize(this.checkout),
|
|
355
|
-
};
|
|
368
|
+
const compatibility = this.computeCompatibility();
|
|
369
|
+
this.currentCompatibility = compatibility;
|
|
356
370
|
|
|
357
371
|
const anchors = this.checkout.forest.anchors;
|
|
358
372
|
const slots = anchors.slots;
|
|
@@ -423,6 +437,18 @@ export class SchematizingSimpleTreeView<
|
|
|
423
437
|
}
|
|
424
438
|
}
|
|
425
439
|
|
|
440
|
+
private computeCompatibility(): SchemaCompatibilityStatus {
|
|
441
|
+
const compatibility = checkSchemaCompatibility(
|
|
442
|
+
this.viewSchema,
|
|
443
|
+
this.checkout.storedSchema,
|
|
444
|
+
this.stagedUpgradePolicy,
|
|
445
|
+
);
|
|
446
|
+
return {
|
|
447
|
+
...compatibility,
|
|
448
|
+
canInitialize: canInitialize(this.checkout),
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
|
|
426
452
|
private runSchemaEdit(edit: () => void): void {
|
|
427
453
|
this.midUpgrade = true;
|
|
428
454
|
try {
|
|
@@ -533,5 +559,11 @@ export class SchematizingSimpleTreeView<
|
|
|
533
559
|
return this.checkout.isMissingEditsFrom(context);
|
|
534
560
|
}
|
|
535
561
|
|
|
562
|
+
public computeNetChangeIfRebasedOnto(
|
|
563
|
+
context: TreeBranchAlpha,
|
|
564
|
+
): JsonCompatibleReadOnly | undefined {
|
|
565
|
+
return this.checkout.computeNetChangeIfRebasedOnto(context);
|
|
566
|
+
}
|
|
567
|
+
|
|
536
568
|
// #endregion Branching
|
|
537
569
|
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { IIdCompressor, SessionId } from "@fluidframework/id-compressor";
|
|
7
|
+
import { isStableId } from "@fluidframework/id-compressor/internal";
|
|
8
|
+
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
9
|
+
|
|
10
|
+
import {
|
|
11
|
+
type ChangeFamily,
|
|
12
|
+
type RevisionTag,
|
|
13
|
+
tagChange,
|
|
14
|
+
type ChangeEncodingContext,
|
|
15
|
+
type TaggedChange,
|
|
16
|
+
} from "../core/index.js";
|
|
17
|
+
import type { JsonCompatibleReadOnly } from "../util/index.js";
|
|
18
|
+
|
|
19
|
+
import type { SharedTreeChange } from "./sharedTreeChangeTypes.js";
|
|
20
|
+
import type { SharedTreeEditBuilder } from "./sharedTreeEditBuilder.js";
|
|
21
|
+
import { SharedTreeChangeFormatVersion } from "./sharedTreeChangeCodecs.js";
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Represents a serialized change for SharedTree.
|
|
25
|
+
*
|
|
26
|
+
* Data in this format is not expected to be durable beyond the scope of a single session.
|
|
27
|
+
*/
|
|
28
|
+
interface SerializedChange {
|
|
29
|
+
readonly version: 1;
|
|
30
|
+
readonly revision: RevisionTag;
|
|
31
|
+
readonly change: JsonCompatibleReadOnly;
|
|
32
|
+
readonly originatorId: SessionId;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function isSerializedChangeV1(value: unknown): value is SerializedChange {
|
|
36
|
+
if (typeof value !== "object" || value === null) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
const change = value as Partial<SerializedChange>;
|
|
40
|
+
return (
|
|
41
|
+
change.version === 1 &&
|
|
42
|
+
(change.revision === "root" || typeof change.revision === "number") &&
|
|
43
|
+
typeof change.originatorId === "string" &&
|
|
44
|
+
isStableId(change.originatorId) &&
|
|
45
|
+
change.change !== undefined
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function encodeSerializedChangeV1(
|
|
50
|
+
idCompressor: IIdCompressor,
|
|
51
|
+
changeFamily: ChangeFamily<SharedTreeEditBuilder, SharedTreeChange>,
|
|
52
|
+
change: SharedTreeChange,
|
|
53
|
+
changeRevision: RevisionTag,
|
|
54
|
+
contextRevision?: RevisionTag,
|
|
55
|
+
): JsonCompatibleReadOnly {
|
|
56
|
+
const context: ChangeEncodingContext = {
|
|
57
|
+
idCompressor,
|
|
58
|
+
originatorId: idCompressor.localSessionId,
|
|
59
|
+
revision: contextRevision,
|
|
60
|
+
isSummary: false,
|
|
61
|
+
};
|
|
62
|
+
const encodedChange = changeFamily.codecs
|
|
63
|
+
.resolve(SharedTreeChangeFormatVersion.v4)
|
|
64
|
+
.encode(change, context);
|
|
65
|
+
|
|
66
|
+
return {
|
|
67
|
+
version: 1,
|
|
68
|
+
revision: changeRevision,
|
|
69
|
+
originatorId: idCompressor.localSessionId,
|
|
70
|
+
change: encodedChange,
|
|
71
|
+
} satisfies SerializedChange;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function decodeSerializedChangeV1(
|
|
75
|
+
idCompressor: IIdCompressor,
|
|
76
|
+
changeFamily: ChangeFamily<SharedTreeEditBuilder, SharedTreeChange>,
|
|
77
|
+
serializedChange: JsonCompatibleReadOnly,
|
|
78
|
+
): TaggedChange<SharedTreeChange> {
|
|
79
|
+
if (!isSerializedChangeV1(serializedChange)) {
|
|
80
|
+
throw new UsageError(`Cannot apply change. Invalid serialized change format.`);
|
|
81
|
+
}
|
|
82
|
+
const { revision, originatorId, change } = serializedChange;
|
|
83
|
+
if (originatorId !== idCompressor.localSessionId) {
|
|
84
|
+
throw new UsageError(
|
|
85
|
+
`Cannot apply change. A serialized changed must be applied to the same SharedTree as it was created from.`,
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
const context: ChangeEncodingContext = {
|
|
89
|
+
idCompressor,
|
|
90
|
+
originatorId: idCompressor.localSessionId,
|
|
91
|
+
revision,
|
|
92
|
+
isSummary: false,
|
|
93
|
+
};
|
|
94
|
+
const treeChange = changeFamily.codecs
|
|
95
|
+
.resolve(SharedTreeChangeFormatVersion.v4)
|
|
96
|
+
.decode(change, context);
|
|
97
|
+
return tagChange(treeChange, revision);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Provides utilities for serializing and deserializing SharedTree changes.
|
|
102
|
+
*
|
|
103
|
+
* @remarks Such changes are not expected to be durable beyond the scope of a single session.
|
|
104
|
+
*/
|
|
105
|
+
export const SerializedChange = {
|
|
106
|
+
/** Utilities for version 1 of the serialized change format. */
|
|
107
|
+
V1: {
|
|
108
|
+
/**
|
|
109
|
+
* Encodes a SharedTree change into the version 1 serialized change format.
|
|
110
|
+
* @param idCompressor - The ID compressor to use for encoding.
|
|
111
|
+
* @param changeFamily - The change family to use for encoding.
|
|
112
|
+
* @param change - The change to encode.
|
|
113
|
+
* @param changeRevision - The revision tag for the change.
|
|
114
|
+
* @param contextRevision - The optional context revision tag.
|
|
115
|
+
* @returns The encoded change in the version 1 serialized change format.
|
|
116
|
+
*/
|
|
117
|
+
encode: encodeSerializedChangeV1,
|
|
118
|
+
/**
|
|
119
|
+
* Decodes a version 1 serialized change into a SharedTree change.
|
|
120
|
+
* @param idCompressor - The ID compressor to use for decoding.
|
|
121
|
+
* @param changeFamily - The change family to use for decoding.
|
|
122
|
+
* @param serializedChange - The serialized change to decode.
|
|
123
|
+
* @returns The decoded SharedTree change.
|
|
124
|
+
*/
|
|
125
|
+
decode: decodeSerializedChangeV1,
|
|
126
|
+
},
|
|
127
|
+
} as const;
|