@fluidframework/tree 2.113.1 → 2.115.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +289 -0
- package/api-report/tree.alpha.api.md +127 -39
- package/dist/core/change-family/changeFamily.d.ts +15 -4
- package/dist/core/change-family/changeFamily.d.ts.map +1 -1
- package/dist/core/change-family/changeFamily.js.map +1 -1
- package/dist/core/change-family/editBuilder.d.ts +2 -3
- package/dist/core/change-family/editBuilder.d.ts.map +1 -1
- package/dist/core/change-family/editBuilder.js +1 -2
- package/dist/core/change-family/editBuilder.js.map +1 -1
- package/dist/core/change-family/index.d.ts +1 -1
- package/dist/core/change-family/index.d.ts.map +1 -1
- package/dist/core/change-family/index.js.map +1 -1
- package/dist/core/index.d.ts +4 -3
- 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 +110 -0
- package/dist/core/rebase/types.d.ts.map +1 -1
- package/dist/core/rebase/types.js +47 -1
- package/dist/core/rebase/types.js.map +1 -1
- package/dist/core/tree/delta.d.ts +62 -16
- package/dist/core/tree/delta.d.ts.map +1 -1
- package/dist/core/tree/delta.js.map +1 -1
- package/dist/core/tree/detachedFieldIndex.d.ts +7 -13
- package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndex.js +32 -46
- package/dist/core/tree/detachedFieldIndex.js.map +1 -1
- package/dist/core/tree/index.d.ts +1 -0
- package/dist/core/tree/index.d.ts.map +1 -1
- package/dist/core/tree/index.js.map +1 -1
- package/dist/core/tree/visitorUtils.d.ts +2 -4
- package/dist/core/tree/visitorUtils.d.ts.map +1 -1
- package/dist/core/tree/visitorUtils.js +2 -2
- package/dist/core/tree/visitorUtils.js.map +1 -1
- package/dist/entrypoints/alpha.d.ts +1 -1
- package/dist/entrypoints/alpha.d.ts.map +1 -1
- package/dist/entrypoints/alpha.js +8 -3
- package/dist/entrypoints/alpha.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts +9 -6
- package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/codecs.js +16 -13
- package/dist/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.js +10 -2
- package/dist/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
- package/dist/feature-libraries/comparison-forest/comparisonForest.d.ts +51 -0
- package/dist/feature-libraries/comparison-forest/comparisonForest.d.ts.map +1 -0
- package/dist/feature-libraries/comparison-forest/comparisonForest.js +98 -0
- package/dist/feature-libraries/comparison-forest/comparisonForest.js.map +1 -0
- package/dist/feature-libraries/comparison-forest/index.d.ts +6 -0
- package/dist/feature-libraries/comparison-forest/index.d.ts.map +1 -0
- package/dist/feature-libraries/comparison-forest/index.js +10 -0
- package/dist/feature-libraries/comparison-forest/index.js.map +1 -0
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +8 -6
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js +6 -3
- package/dist/feature-libraries/default-schema/defaultEditBuilder.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.map +1 -1
- package/dist/feature-libraries/default-schema/noChangeCodecs.d.ts +2 -2
- package/dist/feature-libraries/default-schema/noChangeCodecs.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/noChangeCodecs.js +3 -1
- package/dist/feature-libraries/default-schema/noChangeCodecs.js.map +1 -1
- package/dist/feature-libraries/detachedFieldIndexSummarizer.d.ts +6 -3
- package/dist/feature-libraries/detachedFieldIndexSummarizer.d.ts.map +1 -1
- package/dist/feature-libraries/detachedFieldIndexSummarizer.js +18 -6
- package/dist/feature-libraries/detachedFieldIndexSummarizer.js.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts +2 -3
- package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.js +2 -3
- package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/dist/feature-libraries/index.d.ts +4 -3
- package/dist/feature-libraries/index.d.ts.map +1 -1
- package/dist/feature-libraries/index.js +77 -72
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/mitigatedChangeFamily.d.ts +1 -1
- package/dist/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
- package/dist/feature-libraries/mitigatedChangeFamily.js +12 -0
- package/dist/feature-libraries/mitigatedChangeFamily.js.map +1 -1
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +9 -1
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
- package/dist/feature-libraries/modular-schema/genericFieldKindCodecs.d.ts +2 -2
- package/dist/feature-libraries/modular-schema/genericFieldKindCodecs.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/genericFieldKindCodecs.js.map +1 -1
- package/dist/feature-libraries/modular-schema/index.d.ts +1 -1
- package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/index.js.map +1 -1
- package/dist/feature-libraries/modular-schema/invert.d.ts +15 -0
- package/dist/feature-libraries/modular-schema/invert.d.ts.map +1 -0
- package/dist/feature-libraries/modular-schema/invert.js +159 -0
- package/dist/feature-libraries/modular-schema/invert.js.map +1 -0
- package/dist/feature-libraries/modular-schema/minimizeModularChange.d.ts +3 -4
- package/dist/feature-libraries/modular-schema/minimizeModularChange.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/minimizeModularChange.js +2 -2
- package/dist/feature-libraries/modular-schema/minimizeModularChange.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +9 -9
- package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js +0 -2
- package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecV2.d.ts +2 -2
- package/dist/feature-libraries/modular-schema/modularChangeCodecV2.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecV2.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts +2 -2
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +8 -22
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js +53 -406
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeUtils.d.ts +61 -0
- package/dist/feature-libraries/modular-schema/modularChangeUtils.d.ts.map +1 -0
- package/dist/feature-libraries/modular-schema/modularChangeUtils.js +205 -0
- package/dist/feature-libraries/modular-schema/modularChangeUtils.js.map +1 -0
- package/dist/feature-libraries/modular-schema/prune.d.ts +10 -0
- package/dist/feature-libraries/modular-schema/prune.d.ts.map +1 -0
- package/dist/feature-libraries/modular-schema/prune.js +49 -0
- package/dist/feature-libraries/modular-schema/prune.js.map +1 -0
- package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts +2 -2
- package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldCodecs.d.ts +2 -2
- package/dist/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +2 -2
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts +2 -2
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts +2 -2
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.js.map +1 -1
- package/dist/feature-libraries/treeTextCursor.d.ts +15 -0
- package/dist/feature-libraries/treeTextCursor.d.ts.map +1 -1
- package/dist/feature-libraries/treeTextCursor.js +64 -1
- package/dist/feature-libraries/treeTextCursor.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -5
- 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/serializedChange.d.ts +2 -2
- package/dist/shared-tree/serializedChange.d.ts.map +1 -1
- package/dist/shared-tree/serializedChange.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts +11 -3
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +9 -7
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/sharedTreeChangeCodecs.d.ts +2 -2
- package/dist/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
- package/dist/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
- package/dist/shared-tree/sharedTreeChangeFamily.d.ts +41 -4
- package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
- package/dist/shared-tree/sharedTreeChangeFamily.js +57 -1
- package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
- package/dist/shared-tree/transactionMinimize.d.ts.map +1 -1
- package/dist/shared-tree/transactionMinimize.js +2 -2
- package/dist/shared-tree/transactionMinimize.js.map +1 -1
- package/dist/shared-tree/transactionPostProcessor.d.ts +2 -1
- package/dist/shared-tree/transactionPostProcessor.d.ts.map +1 -1
- package/dist/shared-tree/transactionPostProcessor.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts +13 -7
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +59 -13
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree-core/branch.d.ts +24 -9
- package/dist/shared-tree-core/branch.d.ts.map +1 -1
- package/dist/shared-tree-core/branch.js +7 -0
- package/dist/shared-tree-core/branch.js.map +1 -1
- package/dist/shared-tree-core/editManager.d.ts +4 -4
- package/dist/shared-tree-core/editManager.d.ts.map +1 -1
- package/dist/shared-tree-core/editManager.js +2 -0
- package/dist/shared-tree-core/editManager.js.map +1 -1
- package/dist/shared-tree-core/editManagerCodecs.d.ts +3 -14
- package/dist/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerCodecs.js.map +1 -1
- package/dist/shared-tree-core/editManagerCodecsCommons.d.ts +11 -1
- package/dist/shared-tree-core/editManagerCodecsCommons.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerCodecsCommons.js.map +1 -1
- package/dist/shared-tree-core/editManagerCodecsV1toV4.d.ts +4 -11
- package/dist/shared-tree-core/editManagerCodecsV1toV4.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerCodecsV1toV4.js.map +1 -1
- package/dist/shared-tree-core/editManagerCodecsVSharedBranches.d.ts +4 -11
- package/dist/shared-tree-core/editManagerCodecsVSharedBranches.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerCodecsVSharedBranches.js.map +1 -1
- package/dist/shared-tree-core/editManagerSummarizer.d.ts +4 -4
- package/dist/shared-tree-core/editManagerSummarizer.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerSummarizer.js +0 -1
- package/dist/shared-tree-core/editManagerSummarizer.js.map +1 -1
- package/dist/shared-tree-core/messageCodecV1ToV4.d.ts +2 -2
- package/dist/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
- package/dist/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
- package/dist/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
- package/dist/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
- package/dist/shared-tree-core/messageCodecs.d.ts +8 -1
- package/dist/shared-tree-core/messageCodecs.d.ts.map +1 -1
- package/dist/shared-tree-core/messageCodecs.js.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.d.ts +5 -5
- package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.js +1 -1
- package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/dist/shared-tree-core/transaction.d.ts +10 -10
- package/dist/shared-tree-core/transaction.d.ts.map +1 -1
- package/dist/shared-tree-core/transaction.js +6 -3
- package/dist/shared-tree-core/transaction.js.map +1 -1
- package/dist/simple-tree/api/eraseSchemaDetails.d.ts +15 -0
- package/dist/simple-tree/api/eraseSchemaDetails.d.ts.map +1 -1
- package/dist/simple-tree/api/eraseSchemaDetails.js +15 -0
- package/dist/simple-tree/api/eraseSchemaDetails.js.map +1 -1
- package/dist/simple-tree/api/index.d.ts +1 -1
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +2 -3
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +3 -3
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaStatics.d.ts +6 -7
- package/dist/simple-tree/api/schemaStatics.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaStatics.js.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.d.ts +20 -24
- package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.js +48 -49
- package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
- package/dist/simple-tree/core/treeNode.d.ts +5 -6
- package/dist/simple-tree/core/treeNode.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNode.js +2 -4
- package/dist/simple-tree/core/treeNode.js.map +1 -1
- package/dist/simple-tree/core/withType.d.ts +20 -7
- package/dist/simple-tree/core/withType.d.ts.map +1 -1
- package/dist/simple-tree/core/withType.js +4 -7
- package/dist/simple-tree/core/withType.js.map +1 -1
- package/dist/simple-tree/index.d.ts +2 -2
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +3 -4
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/leafNodeSchema.d.ts +6 -1
- package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/leafNodeSchema.js +0 -1
- package/dist/simple-tree/leafNodeSchema.js.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.d.ts +53 -5
- package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.js +91 -10
- package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.d.ts +90 -0
- package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.js +26 -1
- package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.js +2 -2
- package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/record/recordNode.js +2 -2
- package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
- package/dist/text/codePointUtils.d.ts +2 -2
- package/dist/text/codePointUtils.js +2 -2
- package/dist/text/codePointUtils.js.map +1 -1
- package/dist/text/index.d.ts +3 -3
- package/dist/text/index.d.ts.map +1 -1
- package/dist/text/index.js +4 -4
- package/dist/text/index.js.map +1 -1
- package/dist/text/textDomain.d.ts +30 -18
- package/dist/text/textDomain.d.ts.map +1 -1
- package/dist/text/textDomain.js +44 -23
- package/dist/text/textDomain.js.map +1 -1
- package/dist/text/textDomainFormatted.d.ts +180 -82
- package/dist/text/textDomainFormatted.d.ts.map +1 -1
- package/dist/text/textDomainFormatted.js +164 -84
- package/dist/text/textDomainFormatted.js.map +1 -1
- package/dist/text/textDomainFormattedDefault.d.ts +48 -25
- package/dist/text/textDomainFormattedDefault.d.ts.map +1 -1
- package/dist/text/textDomainFormattedDefault.js +24 -19
- package/dist/text/textDomainFormattedDefault.js.map +1 -1
- package/dist/treeDataStore.d.ts +49 -0
- package/dist/treeDataStore.d.ts.map +1 -0
- package/dist/treeDataStore.js +57 -0
- package/dist/treeDataStore.js.map +1 -0
- package/dist/treeFactory.d.ts +8 -3
- package/dist/treeFactory.d.ts.map +1 -1
- package/dist/treeFactory.js +6 -1
- package/dist/treeFactory.js.map +1 -1
- package/dist/util/compressedIds.d.ts +22 -2
- package/dist/util/compressedIds.d.ts.map +1 -1
- package/dist/util/compressedIds.js +22 -1
- package/dist/util/compressedIds.js.map +1 -1
- package/lib/core/change-family/changeFamily.d.ts +15 -4
- package/lib/core/change-family/changeFamily.d.ts.map +1 -1
- package/lib/core/change-family/changeFamily.js.map +1 -1
- package/lib/core/change-family/editBuilder.d.ts +2 -3
- package/lib/core/change-family/editBuilder.d.ts.map +1 -1
- package/lib/core/change-family/editBuilder.js +1 -2
- package/lib/core/change-family/editBuilder.js.map +1 -1
- package/lib/core/change-family/index.d.ts +1 -1
- package/lib/core/change-family/index.d.ts.map +1 -1
- package/lib/core/change-family/index.js.map +1 -1
- package/lib/core/index.d.ts +4 -3
- package/lib/core/index.d.ts.map +1 -1
- package/lib/core/index.js +2 -2
- 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 +110 -0
- package/lib/core/rebase/types.d.ts.map +1 -1
- package/lib/core/rebase/types.js +46 -0
- package/lib/core/rebase/types.js.map +1 -1
- package/lib/core/tree/delta.d.ts +62 -16
- package/lib/core/tree/delta.d.ts.map +1 -1
- package/lib/core/tree/delta.js.map +1 -1
- package/lib/core/tree/detachedFieldIndex.d.ts +7 -13
- package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndex.js +7 -21
- package/lib/core/tree/detachedFieldIndex.js.map +1 -1
- package/lib/core/tree/index.d.ts +1 -0
- package/lib/core/tree/index.d.ts.map +1 -1
- package/lib/core/tree/index.js.map +1 -1
- package/lib/core/tree/visitorUtils.d.ts +2 -4
- package/lib/core/tree/visitorUtils.d.ts.map +1 -1
- package/lib/core/tree/visitorUtils.js +2 -2
- package/lib/core/tree/visitorUtils.js.map +1 -1
- 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/codecs.d.ts +9 -6
- package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/codecs.js +16 -13
- package/lib/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/uniformChunk.js +10 -2
- package/lib/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
- package/lib/feature-libraries/comparison-forest/comparisonForest.d.ts +51 -0
- package/lib/feature-libraries/comparison-forest/comparisonForest.d.ts.map +1 -0
- package/lib/feature-libraries/comparison-forest/comparisonForest.js +94 -0
- package/lib/feature-libraries/comparison-forest/comparisonForest.js.map +1 -0
- package/lib/feature-libraries/comparison-forest/index.d.ts +6 -0
- package/lib/feature-libraries/comparison-forest/index.d.ts.map +1 -0
- package/lib/feature-libraries/comparison-forest/index.js +6 -0
- package/lib/feature-libraries/comparison-forest/index.js.map +1 -0
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +8 -6
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js +6 -3
- package/lib/feature-libraries/default-schema/defaultEditBuilder.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.map +1 -1
- package/lib/feature-libraries/default-schema/noChangeCodecs.d.ts +2 -2
- package/lib/feature-libraries/default-schema/noChangeCodecs.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/noChangeCodecs.js +3 -1
- package/lib/feature-libraries/default-schema/noChangeCodecs.js.map +1 -1
- package/lib/feature-libraries/detachedFieldIndexSummarizer.d.ts +6 -3
- package/lib/feature-libraries/detachedFieldIndexSummarizer.d.ts.map +1 -1
- package/lib/feature-libraries/detachedFieldIndexSummarizer.js +16 -4
- package/lib/feature-libraries/detachedFieldIndexSummarizer.js.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts +2 -3
- package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.js +2 -3
- package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/lib/feature-libraries/index.d.ts +4 -3
- package/lib/feature-libraries/index.d.ts.map +1 -1
- package/lib/feature-libraries/index.js +2 -1
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/mitigatedChangeFamily.d.ts +1 -1
- package/lib/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
- package/lib/feature-libraries/mitigatedChangeFamily.js +12 -0
- package/lib/feature-libraries/mitigatedChangeFamily.js.map +1 -1
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +9 -1
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
- package/lib/feature-libraries/modular-schema/genericFieldKindCodecs.d.ts +2 -2
- package/lib/feature-libraries/modular-schema/genericFieldKindCodecs.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/genericFieldKindCodecs.js.map +1 -1
- package/lib/feature-libraries/modular-schema/index.d.ts +1 -1
- package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/index.js.map +1 -1
- package/lib/feature-libraries/modular-schema/invert.d.ts +15 -0
- package/lib/feature-libraries/modular-schema/invert.d.ts.map +1 -0
- package/lib/feature-libraries/modular-schema/invert.js +155 -0
- package/lib/feature-libraries/modular-schema/invert.js.map +1 -0
- package/lib/feature-libraries/modular-schema/minimizeModularChange.d.ts +3 -4
- package/lib/feature-libraries/modular-schema/minimizeModularChange.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/minimizeModularChange.js +2 -2
- package/lib/feature-libraries/modular-schema/minimizeModularChange.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +9 -9
- package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js +0 -2
- package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecV2.d.ts +2 -2
- package/lib/feature-libraries/modular-schema/modularChangeCodecV2.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecV2.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts +2 -2
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +8 -22
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js +16 -367
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeUtils.d.ts +61 -0
- package/lib/feature-libraries/modular-schema/modularChangeUtils.d.ts.map +1 -0
- package/lib/feature-libraries/modular-schema/modularChangeUtils.js +192 -0
- package/lib/feature-libraries/modular-schema/modularChangeUtils.js.map +1 -0
- package/lib/feature-libraries/modular-schema/prune.d.ts +10 -0
- package/lib/feature-libraries/modular-schema/prune.d.ts.map +1 -0
- package/lib/feature-libraries/modular-schema/prune.js +45 -0
- package/lib/feature-libraries/modular-schema/prune.js.map +1 -0
- package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts +2 -2
- package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldCodecs.d.ts +2 -2
- package/lib/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +2 -2
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts +2 -2
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts +2 -2
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.js.map +1 -1
- package/lib/feature-libraries/treeTextCursor.d.ts +15 -0
- package/lib/feature-libraries/treeTextCursor.d.ts.map +1 -1
- package/lib/feature-libraries/treeTextCursor.js +62 -1
- package/lib/feature-libraries/treeTextCursor.js.map +1 -1
- package/lib/index.d.ts +6 -4
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +4 -3
- 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/serializedChange.d.ts +2 -2
- package/lib/shared-tree/serializedChange.d.ts.map +1 -1
- package/lib/shared-tree/serializedChange.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts +11 -3
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +10 -8
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/sharedTreeChangeCodecs.d.ts +2 -2
- package/lib/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
- package/lib/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
- package/lib/shared-tree/sharedTreeChangeFamily.d.ts +41 -4
- package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
- package/lib/shared-tree/sharedTreeChangeFamily.js +55 -0
- package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
- package/lib/shared-tree/transactionMinimize.d.ts.map +1 -1
- package/lib/shared-tree/transactionMinimize.js +3 -3
- package/lib/shared-tree/transactionMinimize.js.map +1 -1
- package/lib/shared-tree/transactionPostProcessor.d.ts +2 -1
- package/lib/shared-tree/transactionPostProcessor.d.ts.map +1 -1
- package/lib/shared-tree/transactionPostProcessor.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts +13 -7
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +61 -15
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree-core/branch.d.ts +24 -9
- package/lib/shared-tree-core/branch.d.ts.map +1 -1
- package/lib/shared-tree-core/branch.js +7 -0
- package/lib/shared-tree-core/branch.js.map +1 -1
- package/lib/shared-tree-core/editManager.d.ts +4 -4
- package/lib/shared-tree-core/editManager.d.ts.map +1 -1
- package/lib/shared-tree-core/editManager.js +2 -0
- package/lib/shared-tree-core/editManager.js.map +1 -1
- package/lib/shared-tree-core/editManagerCodecs.d.ts +3 -14
- package/lib/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerCodecs.js.map +1 -1
- package/lib/shared-tree-core/editManagerCodecsCommons.d.ts +11 -1
- package/lib/shared-tree-core/editManagerCodecsCommons.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerCodecsCommons.js.map +1 -1
- package/lib/shared-tree-core/editManagerCodecsV1toV4.d.ts +4 -11
- package/lib/shared-tree-core/editManagerCodecsV1toV4.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerCodecsV1toV4.js +1 -1
- package/lib/shared-tree-core/editManagerCodecsV1toV4.js.map +1 -1
- package/lib/shared-tree-core/editManagerCodecsVSharedBranches.d.ts +4 -11
- package/lib/shared-tree-core/editManagerCodecsVSharedBranches.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerCodecsVSharedBranches.js +1 -1
- package/lib/shared-tree-core/editManagerCodecsVSharedBranches.js.map +1 -1
- package/lib/shared-tree-core/editManagerSummarizer.d.ts +4 -4
- package/lib/shared-tree-core/editManagerSummarizer.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerSummarizer.js +0 -1
- package/lib/shared-tree-core/editManagerSummarizer.js.map +1 -1
- package/lib/shared-tree-core/messageCodecV1ToV4.d.ts +2 -2
- package/lib/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
- package/lib/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
- package/lib/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
- package/lib/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
- package/lib/shared-tree-core/messageCodecs.d.ts +8 -1
- package/lib/shared-tree-core/messageCodecs.d.ts.map +1 -1
- package/lib/shared-tree-core/messageCodecs.js.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.d.ts +5 -5
- package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.js +1 -1
- package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/lib/shared-tree-core/transaction.d.ts +10 -10
- package/lib/shared-tree-core/transaction.d.ts.map +1 -1
- package/lib/shared-tree-core/transaction.js +6 -3
- package/lib/shared-tree-core/transaction.js.map +1 -1
- package/lib/simple-tree/api/eraseSchemaDetails.d.ts +15 -0
- package/lib/simple-tree/api/eraseSchemaDetails.d.ts.map +1 -1
- package/lib/simple-tree/api/eraseSchemaDetails.js +15 -0
- package/lib/simple-tree/api/eraseSchemaDetails.js.map +1 -1
- package/lib/simple-tree/api/index.d.ts +1 -1
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js +1 -1
- package/lib/simple-tree/api/index.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +3 -3
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaStatics.d.ts +6 -7
- package/lib/simple-tree/api/schemaStatics.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaStatics.js.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.d.ts +20 -24
- package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.js +46 -46
- package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
- package/lib/simple-tree/core/treeNode.d.ts +5 -6
- package/lib/simple-tree/core/treeNode.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNode.js +2 -4
- package/lib/simple-tree/core/treeNode.js.map +1 -1
- package/lib/simple-tree/core/withType.d.ts +20 -7
- package/lib/simple-tree/core/withType.d.ts.map +1 -1
- package/lib/simple-tree/core/withType.js +4 -7
- package/lib/simple-tree/core/withType.js.map +1 -1
- package/lib/simple-tree/index.d.ts +2 -2
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +1 -1
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/leafNodeSchema.d.ts +6 -1
- package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/leafNodeSchema.js +0 -1
- package/lib/simple-tree/leafNodeSchema.js.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.d.ts +53 -5
- package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.js +93 -12
- package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.d.ts +90 -0
- package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.js +27 -2
- package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.js +3 -3
- package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/record/recordNode.js +3 -3
- package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
- package/lib/text/codePointUtils.d.ts +2 -2
- package/lib/text/codePointUtils.js +2 -2
- package/lib/text/codePointUtils.js.map +1 -1
- package/lib/text/index.d.ts +3 -3
- package/lib/text/index.d.ts.map +1 -1
- package/lib/text/index.js +3 -3
- package/lib/text/index.js.map +1 -1
- package/lib/text/textDomain.d.ts +30 -18
- package/lib/text/textDomain.d.ts.map +1 -1
- package/lib/text/textDomain.js +41 -22
- package/lib/text/textDomain.js.map +1 -1
- package/lib/text/textDomainFormatted.d.ts +180 -82
- package/lib/text/textDomainFormatted.d.ts.map +1 -1
- package/lib/text/textDomainFormatted.js +165 -86
- package/lib/text/textDomainFormatted.js.map +1 -1
- package/lib/text/textDomainFormattedDefault.d.ts +48 -25
- package/lib/text/textDomainFormattedDefault.d.ts.map +1 -1
- package/lib/text/textDomainFormattedDefault.js +25 -20
- package/lib/text/textDomainFormattedDefault.js.map +1 -1
- package/lib/treeDataStore.d.ts +49 -0
- package/lib/treeDataStore.d.ts.map +1 -0
- package/lib/treeDataStore.js +52 -0
- package/lib/treeDataStore.js.map +1 -0
- package/lib/treeFactory.d.ts +8 -3
- package/lib/treeFactory.d.ts.map +1 -1
- package/lib/treeFactory.js +5 -0
- package/lib/treeFactory.js.map +1 -1
- package/lib/util/compressedIds.d.ts +22 -2
- package/lib/util/compressedIds.d.ts.map +1 -1
- package/lib/util/compressedIds.js +22 -1
- package/lib/util/compressedIds.js.map +1 -1
- package/package.json +32 -24
- package/src/core/change-family/changeFamily.ts +32 -4
- package/src/core/change-family/editBuilder.ts +1 -2
- package/src/core/change-family/index.ts +2 -0
- package/src/core/index.ts +11 -6
- package/src/core/rebase/index.ts +2 -0
- package/src/core/rebase/types.ts +113 -0
- package/src/core/tree/delta.ts +62 -16
- package/src/core/tree/detachedFieldIndex.ts +7 -38
- package/src/core/tree/index.ts +2 -0
- package/src/core/tree/visitorUtils.ts +3 -17
- package/src/entrypoints/alpha.ts +9 -1
- package/src/feature-libraries/chunked-forest/codec/codecs.ts +17 -14
- package/src/feature-libraries/chunked-forest/uniformChunk.ts +11 -1
- package/src/feature-libraries/comparison-forest/comparisonForest.ts +140 -0
- package/src/feature-libraries/comparison-forest/index.ts +6 -0
- package/src/feature-libraries/default-schema/defaultEditBuilder.ts +20 -6
- package/src/feature-libraries/default-schema/index.ts +1 -0
- package/src/feature-libraries/default-schema/noChangeCodecs.ts +11 -3
- package/src/feature-libraries/detachedFieldIndexSummarizer.ts +33 -5
- package/src/feature-libraries/forest-summary/forestSummarizer.ts +1 -3
- package/src/feature-libraries/index.ts +5 -0
- package/src/feature-libraries/mitigatedChangeFamily.ts +21 -3
- package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +10 -1
- package/src/feature-libraries/modular-schema/genericFieldKindCodecs.ts +9 -4
- package/src/feature-libraries/modular-schema/index.ts +1 -0
- package/src/feature-libraries/modular-schema/invert.ts +338 -0
- package/src/feature-libraries/modular-schema/minimizeModularChange.ts +3 -5
- package/src/feature-libraries/modular-schema/modularChangeCodecV1.ts +16 -13
- package/src/feature-libraries/modular-schema/modularChangeCodecV2.ts +3 -1
- package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +2 -1
- package/src/feature-libraries/modular-schema/modularChangeFamily.ts +45 -644
- package/src/feature-libraries/modular-schema/modularChangeUtils.ts +340 -0
- package/src/feature-libraries/modular-schema/prune.ts +69 -0
- package/src/feature-libraries/optional-field/optionalFieldCodecV2.ts +4 -2
- package/src/feature-libraries/optional-field/optionalFieldCodecs.ts +5 -2
- package/src/feature-libraries/sequence-field/sequenceFieldCodecV2.ts +4 -2
- package/src/feature-libraries/sequence-field/sequenceFieldCodecV3.ts +4 -2
- package/src/feature-libraries/sequence-field/sequenceFieldCodecs.ts +6 -3
- package/src/feature-libraries/treeTextCursor.ts +66 -1
- package/src/index.ts +11 -4
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/serializedChange.ts +2 -2
- package/src/shared-tree/sharedTree.ts +40 -15
- package/src/shared-tree/sharedTreeChangeCodecs.ts +11 -3
- package/src/shared-tree/sharedTreeChangeFamily.ts +77 -2
- package/src/shared-tree/transactionMinimize.ts +7 -3
- package/src/shared-tree/transactionPostProcessor.ts +5 -1
- package/src/shared-tree/treeCheckout.ts +136 -30
- package/src/shared-tree-core/branch.ts +41 -12
- package/src/shared-tree-core/editManager.ts +46 -25
- package/src/shared-tree-core/editManagerCodecs.ts +9 -21
- package/src/shared-tree-core/editManagerCodecsCommons.ts +14 -2
- package/src/shared-tree-core/editManagerCodecsV1toV4.ts +18 -21
- package/src/shared-tree-core/editManagerCodecsVSharedBranches.ts +18 -20
- package/src/shared-tree-core/editManagerSummarizer.ts +9 -6
- package/src/shared-tree-core/messageCodecV1ToV4.ts +3 -3
- package/src/shared-tree-core/messageCodecVSharedBranches.ts +2 -2
- package/src/shared-tree-core/messageCodecs.ts +12 -2
- package/src/shared-tree-core/sharedTreeCore.ts +16 -7
- package/src/shared-tree-core/transaction.ts +47 -25
- package/src/simple-tree/api/eraseSchemaDetails.ts +15 -0
- package/src/simple-tree/api/index.ts +0 -1
- package/src/simple-tree/api/schemaStatics.ts +2 -2
- package/src/simple-tree/api/treeNodeApi.ts +64 -48
- package/src/simple-tree/core/treeNode.ts +13 -10
- package/src/simple-tree/core/withType.ts +20 -7
- package/src/simple-tree/index.ts +1 -2
- package/src/simple-tree/leafNodeSchema.ts +6 -1
- package/src/simple-tree/node-kinds/array/arrayNode.ts +130 -16
- package/src/simple-tree/node-kinds/map/mapNode.ts +137 -5
- package/src/simple-tree/node-kinds/object/objectNode.ts +3 -3
- package/src/simple-tree/node-kinds/record/recordNode.ts +3 -3
- package/src/text/README.md +1 -1
- package/src/text/codePointUtils.ts +2 -2
- package/src/text/index.ts +3 -3
- package/src/text/textDomain.ts +50 -27
- package/src/text/textDomainFormatted.ts +384 -163
- package/src/text/textDomainFormattedDefault.ts +32 -32
- package/src/treeDataStore.ts +125 -0
- package/src/treeFactory.ts +11 -3
- package/src/util/compressedIds.ts +36 -3
|
@@ -52,6 +52,7 @@ import {
|
|
|
52
52
|
TreeCompressionStrategy,
|
|
53
53
|
buildChunkedForest,
|
|
54
54
|
buildForest,
|
|
55
|
+
ComparisonForest,
|
|
55
56
|
defaultIncrementalEncodingPolicy,
|
|
56
57
|
defaultSchemaPolicy,
|
|
57
58
|
fieldBatchCodecBuilder,
|
|
@@ -105,6 +106,7 @@ import {
|
|
|
105
106
|
getCodecTreeForChangeFormat,
|
|
106
107
|
SharedTreeChangeFormatVersion,
|
|
107
108
|
} from "./sharedTreeChangeCodecs.js";
|
|
109
|
+
import type { SharedTreeChangeProcessingContext } from "./sharedTreeChangeFamily.js";
|
|
108
110
|
import { SharedTreeChangeFamily } from "./sharedTreeChangeFamily.js";
|
|
109
111
|
import type { SharedTreeChange } from "./sharedTreeChangeTypes.js";
|
|
110
112
|
import type { SharedTreeEditBuilder } from "./sharedTreeEditBuilder.js";
|
|
@@ -174,7 +176,11 @@ export type SharedTreeKernelView = Omit<ITreePrivate, keyof (IChannelView & IFlu
|
|
|
174
176
|
*/
|
|
175
177
|
@breakingClass
|
|
176
178
|
export class SharedTreeKernel
|
|
177
|
-
extends SharedTreeCore<
|
|
179
|
+
extends SharedTreeCore<
|
|
180
|
+
SharedTreeEditBuilder,
|
|
181
|
+
SharedTreeChange,
|
|
182
|
+
SharedTreeChangeProcessingContext
|
|
183
|
+
>
|
|
178
184
|
implements SharedKernel
|
|
179
185
|
{
|
|
180
186
|
public readonly checkout: TreeCheckout;
|
|
@@ -219,13 +225,7 @@ export class SharedTreeKernel
|
|
|
219
225
|
idCompressor,
|
|
220
226
|
options.shouldEncodeIncrementally,
|
|
221
227
|
);
|
|
222
|
-
const
|
|
223
|
-
const removedRoots = makeDetachedFieldIndex(
|
|
224
|
-
"repair",
|
|
225
|
-
revisionTagCodec,
|
|
226
|
-
idCompressor,
|
|
227
|
-
options,
|
|
228
|
-
);
|
|
228
|
+
const removedRoots = makeDetachedFieldIndex("repair");
|
|
229
229
|
const schemaCodec = schemaCodecBuilder.build(options);
|
|
230
230
|
const schemaSummarizer = new SchemaSummarizer(
|
|
231
231
|
schema,
|
|
@@ -252,12 +252,11 @@ export class SharedTreeKernel
|
|
|
252
252
|
idCompressor,
|
|
253
253
|
healing:
|
|
254
254
|
options.healUnresolvableIdentifiersOnDecode === true
|
|
255
|
-
? { sharedObjectId: sharedObject.id }
|
|
255
|
+
? { sharedObjectId: sharedObject.id, logger }
|
|
256
256
|
: undefined,
|
|
257
257
|
});
|
|
258
258
|
const forestSummarizer = new ForestSummarizer(
|
|
259
259
|
forest,
|
|
260
|
-
revisionTagCodec,
|
|
261
260
|
encoderContext,
|
|
262
261
|
decoderContext,
|
|
263
262
|
options,
|
|
@@ -265,9 +264,12 @@ export class SharedTreeKernel
|
|
|
265
264
|
initialSequenceNumber,
|
|
266
265
|
options.shouldEncodeIncrementally,
|
|
267
266
|
);
|
|
267
|
+
const revisionTagCodec = new RevisionTagCodec(idCompressor);
|
|
268
268
|
const removedRootsSummarizer = new DetachedFieldIndexSummarizer(
|
|
269
269
|
removedRoots,
|
|
270
|
-
|
|
270
|
+
revisionTagCodec,
|
|
271
|
+
idCompressor,
|
|
272
|
+
options,
|
|
271
273
|
);
|
|
272
274
|
const innerChangeFamily = new SharedTreeChangeFamily(
|
|
273
275
|
revisionTagCodec,
|
|
@@ -436,7 +438,11 @@ export class SharedTreeKernel
|
|
|
436
438
|
|
|
437
439
|
public override applyStashedOp(
|
|
438
440
|
...args: Parameters<
|
|
439
|
-
SharedTreeCore<
|
|
441
|
+
SharedTreeCore<
|
|
442
|
+
SharedTreeEditBuilder,
|
|
443
|
+
SharedTreeChange,
|
|
444
|
+
SharedTreeChangeProcessingContext
|
|
445
|
+
>["applyStashedOp"]
|
|
440
446
|
>
|
|
441
447
|
): void {
|
|
442
448
|
for (const checkout of this.checkouts.values()) {
|
|
@@ -596,6 +602,11 @@ export interface SharedTreeOptionsBeta extends ForestOptions, Partial<CodecWrite
|
|
|
596
602
|
* Healed identifiers are written back out at the next summary in their stable UUID form,
|
|
597
603
|
* so the inconsistency does not need to be re-healed on every load.
|
|
598
604
|
*
|
|
605
|
+
* When this flag is enabled, each time an unresolvable identifier is healed a
|
|
606
|
+
* `HealUnresolvableIdentifierOnDecode` telemetry event is emitted (at
|
|
607
|
+
* {@link @fluidframework/core-interfaces#LogLevelConst.info | LogLevel.info}) through the shared
|
|
608
|
+
* object's logger, allowing applications to detect which documents actually required healing.
|
|
609
|
+
*
|
|
599
610
|
* Off by default because enabling it for documents that are not actually corrupt
|
|
600
611
|
* would mask genuine bugs that otherwise surface as decode failures.
|
|
601
612
|
*
|
|
@@ -739,12 +750,26 @@ export const ForestTypeOptimized = toForestType(
|
|
|
739
750
|
* Includes validation with scales poorly.
|
|
740
751
|
* May be asymptotically slower than {@link ForestTypeReference}, and may perform very badly with larger data sizes.
|
|
741
752
|
* @privateRemarks
|
|
742
|
-
*
|
|
753
|
+
* A {@link ComparisonForest} which uses the "ChunkedForest" forest type as its main forest and validates every delta
|
|
754
|
+
* against a reference "ObjectForest" (with expensive asserts enabled for schema validation).
|
|
755
|
+
* This exercises the optimized forest while asserting that its contents stay consistent with the reference implementation.
|
|
743
756
|
* @beta
|
|
744
757
|
*/
|
|
745
758
|
export const ForestTypeExpensiveDebug = toForestType(
|
|
746
|
-
(
|
|
747
|
-
|
|
759
|
+
(
|
|
760
|
+
breaker: Breakable,
|
|
761
|
+
schema: TreeStoredSchemaSubscription,
|
|
762
|
+
idCompressor: IIdCompressor,
|
|
763
|
+
shouldEncodeIncrementally: IncrementalEncodingPolicy,
|
|
764
|
+
) =>
|
|
765
|
+
new ComparisonForest(
|
|
766
|
+
buildChunkedForest(
|
|
767
|
+
makeTreeChunker(schema, defaultSchemaPolicy, shouldEncodeIncrementally),
|
|
768
|
+
undefined,
|
|
769
|
+
idCompressor,
|
|
770
|
+
),
|
|
771
|
+
buildForest(breaker, schema, undefined, true),
|
|
772
|
+
),
|
|
748
773
|
);
|
|
749
774
|
|
|
750
775
|
type ForestFactory = (
|
|
@@ -16,7 +16,11 @@ import {
|
|
|
16
16
|
makeCodecFamily,
|
|
17
17
|
withSchemaValidation,
|
|
18
18
|
} from "../codec/index.js";
|
|
19
|
-
import type {
|
|
19
|
+
import type {
|
|
20
|
+
ChangeEncodingContext,
|
|
21
|
+
ChangeDecodingContext,
|
|
22
|
+
TreeStoredSchema,
|
|
23
|
+
} from "../core/index.js";
|
|
20
24
|
import {
|
|
21
25
|
ModularChangeFormatVersion,
|
|
22
26
|
type ModularChangeset,
|
|
@@ -39,9 +43,13 @@ import {
|
|
|
39
43
|
import type { SharedTreeChange, SharedTreeInnerChange } from "./sharedTreeChangeTypes.js";
|
|
40
44
|
|
|
41
45
|
export function makeSharedTreeChangeCodecFamily(
|
|
42
|
-
modularChangeCodecFamily: ICodecFamily<
|
|
46
|
+
modularChangeCodecFamily: ICodecFamily<
|
|
47
|
+
ModularChangeset,
|
|
48
|
+
ChangeEncodingContext,
|
|
49
|
+
ChangeDecodingContext
|
|
50
|
+
>,
|
|
43
51
|
options: CodecWriteOptions,
|
|
44
|
-
): ICodecFamily<SharedTreeChange, ChangeEncodingContext> {
|
|
52
|
+
): ICodecFamily<SharedTreeChange, ChangeEncodingContext, ChangeDecodingContext> {
|
|
45
53
|
const versions: [
|
|
46
54
|
FormatVersion,
|
|
47
55
|
IJsonCodec<
|
|
@@ -9,6 +9,7 @@ import type { IIdCompressor } from "@fluidframework/id-compressor";
|
|
|
9
9
|
import type { CodecWriteOptions, ICodecFamily } from "../codec/index.js";
|
|
10
10
|
import {
|
|
11
11
|
type ChangeEncodingContext,
|
|
12
|
+
type ChangeDecodingContext,
|
|
12
13
|
type ChangeFamily,
|
|
13
14
|
type ChangeRebaser,
|
|
14
15
|
type DeltaDetachedNodeId,
|
|
@@ -18,6 +19,7 @@ import {
|
|
|
18
19
|
type RevisionTagCodec,
|
|
19
20
|
type TaggedChange,
|
|
20
21
|
mapTaggedChange,
|
|
22
|
+
type ProcessChangeFn,
|
|
21
23
|
} from "../core/index.js";
|
|
22
24
|
import {
|
|
23
25
|
type FieldBatchCodec,
|
|
@@ -41,6 +43,10 @@ import { makeSharedTreeChangeCodecFamily } from "./sharedTreeChangeCodecs.js";
|
|
|
41
43
|
import type { SharedTreeChange } from "./sharedTreeChangeTypes.js";
|
|
42
44
|
import { SharedTreeEditBuilder } from "./sharedTreeEditBuilder.js";
|
|
43
45
|
|
|
46
|
+
export interface SharedTreeChangeProcessingContext {
|
|
47
|
+
modularChangeFamily: ModularChangeFamily;
|
|
48
|
+
}
|
|
49
|
+
|
|
44
50
|
/**
|
|
45
51
|
* Implementation of {@link ChangeFamily} that combines edits to fields and schema changes.
|
|
46
52
|
*
|
|
@@ -48,14 +54,18 @@ import { SharedTreeEditBuilder } from "./sharedTreeEditBuilder.js";
|
|
|
48
54
|
*/
|
|
49
55
|
export class SharedTreeChangeFamily
|
|
50
56
|
implements
|
|
51
|
-
ChangeFamily<SharedTreeEditBuilder, SharedTreeChange>,
|
|
57
|
+
ChangeFamily<SharedTreeEditBuilder, SharedTreeChange, SharedTreeChangeProcessingContext>,
|
|
52
58
|
ChangeRebaser<SharedTreeChange>
|
|
53
59
|
{
|
|
54
60
|
public static readonly emptyChange: SharedTreeChange = {
|
|
55
61
|
changes: [],
|
|
56
62
|
};
|
|
57
63
|
|
|
58
|
-
public readonly codecs: ICodecFamily<
|
|
64
|
+
public readonly codecs: ICodecFamily<
|
|
65
|
+
SharedTreeChange,
|
|
66
|
+
ChangeEncodingContext,
|
|
67
|
+
ChangeDecodingContext
|
|
68
|
+
>;
|
|
59
69
|
private readonly modularChangeFamily: ModularChangeFamily;
|
|
60
70
|
|
|
61
71
|
public constructor(
|
|
@@ -94,6 +104,15 @@ export class SharedTreeChangeFamily
|
|
|
94
104
|
);
|
|
95
105
|
}
|
|
96
106
|
|
|
107
|
+
public buildProcessor(
|
|
108
|
+
processFn: ProcessChangeFn<SharedTreeChange, SharedTreeChangeProcessingContext>,
|
|
109
|
+
): (change: SharedTreeChange) => SharedTreeChange {
|
|
110
|
+
return (change: SharedTreeChange) =>
|
|
111
|
+
processFn(change, {
|
|
112
|
+
modularChangeFamily: this.modularChangeFamily,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
|
|
97
116
|
public compose(changes: TaggedChange<SharedTreeChange>[]): SharedTreeChange {
|
|
98
117
|
const newChanges: Mutable<SharedTreeChange["changes"]> = [];
|
|
99
118
|
const dataChangeRun: TaggedChange<ModularChangeset>[] = [];
|
|
@@ -342,3 +361,59 @@ export function updateRefreshers(
|
|
|
342
361
|
}
|
|
343
362
|
});
|
|
344
363
|
}
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* The status of a {@link SharedTreeChange} with respect to its constraints.
|
|
367
|
+
*/
|
|
368
|
+
export enum ConstraintStatus {
|
|
369
|
+
/**
|
|
370
|
+
* All constraints are satisfied.
|
|
371
|
+
*/
|
|
372
|
+
Satisfied,
|
|
373
|
+
/**
|
|
374
|
+
* At least one implicit constraint has been violated.
|
|
375
|
+
* @remarks
|
|
376
|
+
* Implicit constraints are those that are automatically enforced by SharedTree on all changes.
|
|
377
|
+
*
|
|
378
|
+
* Such a violation typically arises in one of two scenarios:
|
|
379
|
+
* 1. A schema change conflicts with a concurrent data or schema change that was sequenced before it.
|
|
380
|
+
* 2. A data change conflicts with a concurrent schema change that was sequenced before it.
|
|
381
|
+
*/
|
|
382
|
+
ImplicitViolation,
|
|
383
|
+
/**
|
|
384
|
+
* At least one explicit constraint has been violated.
|
|
385
|
+
* @remarks
|
|
386
|
+
* Explicit constraints are those that are explicitly added
|
|
387
|
+
* through {@link RunTransactionParamsAlpha.preconditions | preconditions}
|
|
388
|
+
* or {@link TransactionCallbackStatusAlpha.preconditionsOnRevert | preconditionsOnRevert}.
|
|
389
|
+
*/
|
|
390
|
+
ExplicitViolation,
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
/**
|
|
394
|
+
* Gets the constraint status of a shared tree change.
|
|
395
|
+
* @param change - The shared tree change to evaluate.
|
|
396
|
+
* @returns The constraint status of the change.
|
|
397
|
+
*/
|
|
398
|
+
export function getConstraintStatus(change: SharedTreeChange): ConstraintStatus {
|
|
399
|
+
if (change.changes.length === 0) {
|
|
400
|
+
// The SharedTreeChange format (both in memory and over the wire) has no way to convey implicit constraint violation.
|
|
401
|
+
// Instead, the current rebase implementation in SharedTreeChangeFamily produces an empty change.
|
|
402
|
+
// This is not ideal because there is no guarantee that an empty change didn't just start out that way.
|
|
403
|
+
// There is currently only one way to generate an empty change that isn't a result of an implicit constraint violation:
|
|
404
|
+
// when the SharedTreeChangeFamily is wrapped in makeMitigatedChangeFamily, an empty change is produced when an error occurs.
|
|
405
|
+
// This is unlikely to cause problems for this logic for two reasons:
|
|
406
|
+
// 1. Such an error will put SharedTree into a broken state, halting further operations.
|
|
407
|
+
// 2. It is reasonable to treat a changeset whose production triggered an error as having violated the implicit constraints in our code.
|
|
408
|
+
return ConstraintStatus.ImplicitViolation;
|
|
409
|
+
}
|
|
410
|
+
if (
|
|
411
|
+
change.changes.some(
|
|
412
|
+
({ type, innerChange }) =>
|
|
413
|
+
type === "data" && (innerChange.constraintViolationCount ?? 0) > 0,
|
|
414
|
+
)
|
|
415
|
+
) {
|
|
416
|
+
return ConstraintStatus.ExplicitViolation;
|
|
417
|
+
}
|
|
418
|
+
return ConstraintStatus.Satisfied;
|
|
419
|
+
}
|
|
@@ -5,13 +5,14 @@
|
|
|
5
5
|
|
|
6
6
|
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { minimizeModularChangeset } from "../feature-libraries/index.js";
|
|
9
9
|
import { ChangeProcessorApplicability } from "../shared-tree-core/index.js";
|
|
10
10
|
import type { TransactionPostProcessor } from "../simple-tree/index.js";
|
|
11
11
|
|
|
12
12
|
import { mapDataChanges } from "./sharedTreeChangeFamily.js";
|
|
13
13
|
import type { SharedTreeChange } from "./sharedTreeChangeTypes.js";
|
|
14
14
|
import { createTransactionPostProcessor } from "./transactionPostProcessor.js";
|
|
15
|
+
import type { SharedTreeChangeProcessingContext } from "./sharedTreeChangeFamily.js";
|
|
15
16
|
|
|
16
17
|
/**
|
|
17
18
|
* "Minimizes" a {@link SharedTreeChange} so that it contains no extraneous
|
|
@@ -26,7 +27,10 @@ import { createTransactionPostProcessor } from "./transactionPostProcessor.js";
|
|
|
26
27
|
*
|
|
27
28
|
* Schema changes are left unchanged.
|
|
28
29
|
*/
|
|
29
|
-
function minimizeSharedTreeChange(
|
|
30
|
+
function minimizeSharedTreeChange(
|
|
31
|
+
change: SharedTreeChange,
|
|
32
|
+
context: SharedTreeChangeProcessingContext,
|
|
33
|
+
): SharedTreeChange {
|
|
30
34
|
const countOfDataChanges = change.changes.filter(
|
|
31
35
|
(innerChange) => innerChange.type === "data",
|
|
32
36
|
).length;
|
|
@@ -36,7 +40,7 @@ function minimizeSharedTreeChange(change: SharedTreeChange): SharedTreeChange {
|
|
|
36
40
|
);
|
|
37
41
|
}
|
|
38
42
|
return mapDataChanges(change, (dataChange) =>
|
|
39
|
-
minimizeModularChangeset(dataChange,
|
|
43
|
+
minimizeModularChangeset(dataChange, context.modularChangeFamily),
|
|
40
44
|
);
|
|
41
45
|
}
|
|
42
46
|
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
import type { ChangeProcessor } from "../shared-tree-core/index.js";
|
|
7
7
|
import type { TransactionPostProcessor } from "../simple-tree/index.js";
|
|
8
|
+
import type { SharedTreeChangeProcessingContext } from "./sharedTreeChangeFamily.js";
|
|
8
9
|
|
|
9
10
|
import type { SharedTreeChange } from "./sharedTreeChangeTypes.js";
|
|
10
11
|
|
|
@@ -13,7 +14,10 @@ import type { SharedTreeChange } from "./sharedTreeChangeTypes.js";
|
|
|
13
14
|
* {@link SharedTreeChange}.
|
|
14
15
|
* @remarks This is the (non-type-erased) form used internally to apply a transaction's post-processor.
|
|
15
16
|
*/
|
|
16
|
-
export type TransactionPostProcessorInternal = ChangeProcessor<
|
|
17
|
+
export type TransactionPostProcessorInternal = ChangeProcessor<
|
|
18
|
+
SharedTreeChange,
|
|
19
|
+
SharedTreeChangeProcessingContext
|
|
20
|
+
>;
|
|
17
21
|
|
|
18
22
|
/**
|
|
19
23
|
* Type-erases an internal {@link TransactionPostProcessorInternal | change processor} as a public
|
|
@@ -4,7 +4,11 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { createEmitter } from "@fluid-internal/client-utils";
|
|
7
|
-
import type {
|
|
7
|
+
import type {
|
|
8
|
+
IEmitter,
|
|
9
|
+
IFluidHandle,
|
|
10
|
+
Listenable,
|
|
11
|
+
} from "@fluidframework/core-interfaces/internal";
|
|
8
12
|
import { assert, unreachableCase, fail } from "@fluidframework/core-utils/internal";
|
|
9
13
|
import type { IIdCompressor } from "@fluidframework/id-compressor";
|
|
10
14
|
import { type TelemetryLoggerExt, UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
@@ -21,6 +25,7 @@ import {
|
|
|
21
25
|
type AnchorSetRootEvents,
|
|
22
26
|
type ChangeFamily,
|
|
23
27
|
CommitKind,
|
|
28
|
+
CommitOutcome,
|
|
24
29
|
type DeltaVisitor,
|
|
25
30
|
type DetachedFieldIndex,
|
|
26
31
|
type IEditableForest,
|
|
@@ -57,6 +62,7 @@ import {
|
|
|
57
62
|
deltaFieldMapHasVisibleChanges,
|
|
58
63
|
findCommonAncestor,
|
|
59
64
|
rebaseBranch,
|
|
65
|
+
type LocalCommitEvents,
|
|
60
66
|
} from "../core/index.js";
|
|
61
67
|
import {
|
|
62
68
|
type FieldBatchCodec,
|
|
@@ -114,7 +120,13 @@ import {
|
|
|
114
120
|
|
|
115
121
|
import { SchematizingSimpleTreeView } from "./schematizingTreeView.js";
|
|
116
122
|
import { SharedTreeChangeEnricher } from "./sharedTreeChangeEnricher.js";
|
|
117
|
-
import {
|
|
123
|
+
import type { SharedTreeChangeProcessingContext } from "./sharedTreeChangeFamily.js";
|
|
124
|
+
import {
|
|
125
|
+
ConstraintStatus,
|
|
126
|
+
SharedTreeChangeFamily,
|
|
127
|
+
getConstraintStatus,
|
|
128
|
+
hasSchemaChange,
|
|
129
|
+
} from "./sharedTreeChangeFamily.js";
|
|
118
130
|
import type { SharedTreeChange } from "./sharedTreeChangeTypes.js";
|
|
119
131
|
import type { ISharedTreeEditor, SharedTreeEditBuilder } from "./sharedTreeEditBuilder.js";
|
|
120
132
|
import { extractTransactionChangeProcessor } from "./transactionPostProcessor.js";
|
|
@@ -210,7 +222,9 @@ export interface CheckoutEvents {
|
|
|
210
222
|
/**
|
|
211
223
|
* A collection of functions for managing transactions on a {@link ITreeCheckout}.
|
|
212
224
|
*/
|
|
213
|
-
export type TreeTransactor = Transactor<
|
|
225
|
+
export type TreeTransactor = Transactor<
|
|
226
|
+
SquashingTransactionOptions<SharedTreeChange, SharedTreeChangeProcessingContext>
|
|
227
|
+
>;
|
|
214
228
|
|
|
215
229
|
/**
|
|
216
230
|
* Provides a means for interacting with a SharedTree.
|
|
@@ -305,8 +319,16 @@ export function createTreeCheckout(
|
|
|
305
319
|
mintRevisionTag: () => RevisionTag,
|
|
306
320
|
revisionTagCodec: RevisionTagCodec,
|
|
307
321
|
args?: {
|
|
308
|
-
branch?: SharedTreeBranch<
|
|
309
|
-
|
|
322
|
+
branch?: SharedTreeBranch<
|
|
323
|
+
SharedTreeEditBuilder,
|
|
324
|
+
SharedTreeChange,
|
|
325
|
+
SharedTreeChangeProcessingContext
|
|
326
|
+
>;
|
|
327
|
+
changeFamily?: ChangeFamily<
|
|
328
|
+
SharedTreeEditBuilder,
|
|
329
|
+
SharedTreeChange,
|
|
330
|
+
SharedTreeChangeProcessingContext
|
|
331
|
+
>;
|
|
310
332
|
schema?: TreeStoredSchemaRepository;
|
|
311
333
|
forest?: IEditableForest;
|
|
312
334
|
fieldBatchCodec?: FieldBatchCodec;
|
|
@@ -489,6 +511,14 @@ export class TreeCheckout implements ITreeCheckout {
|
|
|
489
511
|
|
|
490
512
|
private readonly views = new Set<TreeView<ImplicitFieldSchema>>();
|
|
491
513
|
|
|
514
|
+
/**
|
|
515
|
+
* Event emitters for local commits.
|
|
516
|
+
*/
|
|
517
|
+
private readonly localCommitEventEmitters = new Map<
|
|
518
|
+
RevisionTag,
|
|
519
|
+
IEmitter<LocalCommitEvents>
|
|
520
|
+
>();
|
|
521
|
+
|
|
492
522
|
/**
|
|
493
523
|
* Revertibles maintained for automatic disposal
|
|
494
524
|
*/
|
|
@@ -501,7 +531,11 @@ export class TreeCheckout implements ITreeCheckout {
|
|
|
501
531
|
*/
|
|
502
532
|
private readonly revertibleCommitBranches = new Map<
|
|
503
533
|
RevisionTag,
|
|
504
|
-
SharedTreeBranch<
|
|
534
|
+
SharedTreeBranch<
|
|
535
|
+
SharedTreeEditBuilder,
|
|
536
|
+
SharedTreeChange,
|
|
537
|
+
SharedTreeChangeProcessingContext
|
|
538
|
+
>
|
|
505
539
|
>();
|
|
506
540
|
|
|
507
541
|
/**
|
|
@@ -514,20 +548,24 @@ export class TreeCheckout implements ITreeCheckout {
|
|
|
514
548
|
public events: Listenable<CheckoutEvents> = this.#events;
|
|
515
549
|
|
|
516
550
|
public constructor(
|
|
517
|
-
branch: SharedTreeBranch<
|
|
551
|
+
branch: SharedTreeBranch<
|
|
552
|
+
SharedTreeEditBuilder,
|
|
553
|
+
SharedTreeChange,
|
|
554
|
+
SharedTreeChangeProcessingContext
|
|
555
|
+
>,
|
|
518
556
|
/** True if and only if this checkout is for a branch which is persisted and shared with other clients. */
|
|
519
557
|
public readonly isSharedBranch: boolean,
|
|
520
|
-
private readonly changeFamily: ChangeFamily<
|
|
558
|
+
private readonly changeFamily: ChangeFamily<
|
|
559
|
+
SharedTreeEditBuilder,
|
|
560
|
+
SharedTreeChange,
|
|
561
|
+
SharedTreeChangeProcessingContext
|
|
562
|
+
>,
|
|
521
563
|
public readonly storedSchema: TreeStoredSchemaRepository,
|
|
522
564
|
public readonly forest: IEditableForest,
|
|
523
565
|
private readonly mintRevisionTag: () => RevisionTag,
|
|
524
566
|
private readonly revisionTagCodec: RevisionTagCodec,
|
|
525
567
|
private readonly idCompressor: IIdCompressor,
|
|
526
|
-
private readonly _removedRoots: DetachedFieldIndex = makeDetachedFieldIndex(
|
|
527
|
-
"repair",
|
|
528
|
-
revisionTagCodec,
|
|
529
|
-
idCompressor,
|
|
530
|
-
),
|
|
568
|
+
private readonly _removedRoots: DetachedFieldIndex = makeDetachedFieldIndex("repair"),
|
|
531
569
|
/** Optional logger for telemetry. */
|
|
532
570
|
private readonly logger?: TelemetryLoggerExt,
|
|
533
571
|
public readonly breaker: Breakable = new Breakable("TreeCheckout", logger),
|
|
@@ -649,19 +687,29 @@ export class TreeCheckout implements ITreeCheckout {
|
|
|
649
687
|
|
|
650
688
|
private registerForBranchEvents(): void {
|
|
651
689
|
this.#transaction.branch.events.on("afterChange", this.onAfterBranchChange);
|
|
690
|
+
this.#transaction.branch.events.on("commitSequenced", this.onCommitSequenced);
|
|
652
691
|
this.#transaction.activeBranchEvents.on("afterChange", this.onAfterChange);
|
|
653
692
|
this.#transaction.activeBranchEvents.on("ancestryTrimmed", this.onAncestryTrimmed);
|
|
654
693
|
}
|
|
655
694
|
|
|
656
695
|
private unregisterFromBranchEvents(): void {
|
|
657
696
|
this.#transaction.branch.events.off("afterChange", this.onAfterBranchChange);
|
|
697
|
+
this.#transaction.branch.events.off("commitSequenced", this.onCommitSequenced);
|
|
658
698
|
this.#transaction.activeBranchEvents.off("afterChange", this.onAfterChange);
|
|
659
699
|
this.#transaction.activeBranchEvents.off("ancestryTrimmed", this.onAncestryTrimmed);
|
|
660
700
|
}
|
|
661
701
|
|
|
662
702
|
private createTransactionStack(
|
|
663
|
-
branch: SharedTreeBranch<
|
|
664
|
-
|
|
703
|
+
branch: SharedTreeBranch<
|
|
704
|
+
SharedTreeEditBuilder,
|
|
705
|
+
SharedTreeChange,
|
|
706
|
+
SharedTreeChangeProcessingContext
|
|
707
|
+
>,
|
|
708
|
+
): SquashingTransactionStack<
|
|
709
|
+
SharedTreeEditBuilder,
|
|
710
|
+
SharedTreeChange,
|
|
711
|
+
SharedTreeChangeProcessingContext
|
|
712
|
+
> {
|
|
665
713
|
return new SquashingTransactionStack(branch, this.mintRevisionTag, () => {
|
|
666
714
|
// When each transaction is started, make a restorable checkpoint of the current state of removed roots
|
|
667
715
|
const restoreRemovedRoots = this._removedRoots.createCheckpoint();
|
|
@@ -712,6 +760,39 @@ export class TreeCheckout implements ITreeCheckout {
|
|
|
712
760
|
}
|
|
713
761
|
}
|
|
714
762
|
|
|
763
|
+
private readonly onCommitSequenced = (commit: GraphCommit<SharedTreeChange>): void => {
|
|
764
|
+
const emitter = this.localCommitEventEmitters.get(commit.revision);
|
|
765
|
+
if (emitter === undefined) {
|
|
766
|
+
// If the commit predates the creation of this checkout, there will be no emitter associated with the commit.
|
|
767
|
+
// In that case, we don't need to emit any events.
|
|
768
|
+
return;
|
|
769
|
+
}
|
|
770
|
+
const constraintStatus = getConstraintStatus(commit.change);
|
|
771
|
+
let outcome: CommitOutcome;
|
|
772
|
+
switch (constraintStatus) {
|
|
773
|
+
case ConstraintStatus.Satisfied: {
|
|
774
|
+
outcome = CommitOutcome.FullyApplied;
|
|
775
|
+
break;
|
|
776
|
+
}
|
|
777
|
+
case ConstraintStatus.ImplicitViolation: {
|
|
778
|
+
outcome = CommitOutcome.FullyDropped;
|
|
779
|
+
break;
|
|
780
|
+
}
|
|
781
|
+
case ConstraintStatus.ExplicitViolation: {
|
|
782
|
+
outcome = CommitOutcome.NewContentOnly;
|
|
783
|
+
break;
|
|
784
|
+
}
|
|
785
|
+
default: {
|
|
786
|
+
unreachableCase(constraintStatus);
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
this.emitChangedLocked(() => {
|
|
790
|
+
emitter.emit("settled", outcome);
|
|
791
|
+
}, "a commit settled event callback");
|
|
792
|
+
// No more events will be emitted for this commit, so we can remove the emitter from the map.
|
|
793
|
+
this.localCommitEventEmitters.delete(commit.revision);
|
|
794
|
+
};
|
|
795
|
+
|
|
715
796
|
private readonly onAfterBranchChange = (
|
|
716
797
|
event: SharedTreeBranchChange<SharedTreeChange>,
|
|
717
798
|
): void => {
|
|
@@ -760,6 +841,8 @@ export class TreeCheckout implements ITreeCheckout {
|
|
|
760
841
|
|
|
761
842
|
let withinEventContext = true;
|
|
762
843
|
|
|
844
|
+
const events = createEmitter<LocalCommitEvents>();
|
|
845
|
+
this.localCommitEventEmitters.set(commit.revision, events);
|
|
763
846
|
const metadata: ChangeMetadata = {
|
|
764
847
|
kind,
|
|
765
848
|
isLocal: true,
|
|
@@ -778,6 +861,7 @@ export class TreeCheckout implements ITreeCheckout {
|
|
|
778
861
|
getRevertible: (onDisposed) => getRevertible?.(onDisposed),
|
|
779
862
|
label: this.labelTreeNode?.label,
|
|
780
863
|
labels: buildLabelsSet(this.labelTreeNode),
|
|
864
|
+
events,
|
|
781
865
|
};
|
|
782
866
|
|
|
783
867
|
this.emitChangedLocked(() => {
|
|
@@ -811,8 +895,11 @@ export class TreeCheckout implements ITreeCheckout {
|
|
|
811
895
|
* Shared by both the local and remote `changed` emission paths in {@link TreeCheckout.onAfterBranchChange}.
|
|
812
896
|
* The `try`/`finally` ensures the lock is released even if a listener throws.
|
|
813
897
|
*/
|
|
814
|
-
private emitChangedLocked(
|
|
815
|
-
|
|
898
|
+
private emitChangedLocked(
|
|
899
|
+
emit: () => void,
|
|
900
|
+
reason: string = "a change event callback",
|
|
901
|
+
): void {
|
|
902
|
+
this.editLock.lock(reason);
|
|
816
903
|
try {
|
|
817
904
|
emit();
|
|
818
905
|
} finally {
|
|
@@ -828,7 +915,7 @@ export class TreeCheckout implements ITreeCheckout {
|
|
|
828
915
|
}
|
|
829
916
|
|
|
830
917
|
private readonly onAfterChange = (event: SharedTreeBranchChange<SharedTreeChange>): void => {
|
|
831
|
-
this.editLock.lock();
|
|
918
|
+
this.editLock.lock("a change event callback");
|
|
832
919
|
this.#events.emit("beforeBatch", event);
|
|
833
920
|
if (event.change !== undefined) {
|
|
834
921
|
const revision =
|
|
@@ -1187,7 +1274,11 @@ export class TreeCheckout implements ITreeCheckout {
|
|
|
1187
1274
|
* To avoid updating observers of the view state with intermediate results during a transaction,
|
|
1188
1275
|
* use {@link ITreeCheckout#fork} and {@link ISharedTreeFork#merge}.
|
|
1189
1276
|
*/
|
|
1190
|
-
#transaction: SquashingTransactionStack<
|
|
1277
|
+
#transaction: SquashingTransactionStack<
|
|
1278
|
+
SharedTreeEditBuilder,
|
|
1279
|
+
SharedTreeChange,
|
|
1280
|
+
SharedTreeChangeProcessingContext
|
|
1281
|
+
>;
|
|
1191
1282
|
|
|
1192
1283
|
@throwIfBroken
|
|
1193
1284
|
public fork(): TreeCheckout {
|
|
@@ -1221,7 +1312,11 @@ export class TreeCheckout implements ITreeCheckout {
|
|
|
1221
1312
|
}
|
|
1222
1313
|
|
|
1223
1314
|
public switchBranch(
|
|
1224
|
-
branch: SharedTreeBranch<
|
|
1315
|
+
branch: SharedTreeBranch<
|
|
1316
|
+
SharedTreeEditBuilder,
|
|
1317
|
+
SharedTreeChange,
|
|
1318
|
+
SharedTreeChangeProcessingContext
|
|
1319
|
+
>,
|
|
1225
1320
|
): void {
|
|
1226
1321
|
// TODO: Dispose old branch, if necessary
|
|
1227
1322
|
assert(
|
|
@@ -1648,7 +1743,11 @@ export class TreeCheckout implements ITreeCheckout {
|
|
|
1648
1743
|
return enriched;
|
|
1649
1744
|
}
|
|
1650
1745
|
|
|
1651
|
-
public get mainBranch(): SharedTreeBranch<
|
|
1746
|
+
public get mainBranch(): SharedTreeBranch<
|
|
1747
|
+
SharedTreeEditBuilder,
|
|
1748
|
+
SharedTreeChange,
|
|
1749
|
+
SharedTreeChangeProcessingContext
|
|
1750
|
+
> {
|
|
1652
1751
|
return this.#transaction.branch;
|
|
1653
1752
|
}
|
|
1654
1753
|
|
|
@@ -1664,7 +1763,13 @@ class EditLock {
|
|
|
1664
1763
|
* @remarks Edits will throw an error if the lock is currently locked.
|
|
1665
1764
|
*/
|
|
1666
1765
|
public readonly editor: ISharedTreeEditor;
|
|
1667
|
-
|
|
1766
|
+
/**
|
|
1767
|
+
* The current status of the lock.
|
|
1768
|
+
* The `reason` string will be included in the error message if an attempt is made to edit the tree while the lock is held.
|
|
1769
|
+
*/
|
|
1770
|
+
private status:
|
|
1771
|
+
| { readonly isLocked: false }
|
|
1772
|
+
| { readonly isLocked: true; readonly reason: string } = { isLocked: false };
|
|
1668
1773
|
|
|
1669
1774
|
/**
|
|
1670
1775
|
* @param editor - an editor which will be used to create a new editor that is monitored to determine if any changes are happening to the tree.
|
|
@@ -1728,14 +1833,15 @@ class EditLock {
|
|
|
1728
1833
|
|
|
1729
1834
|
/**
|
|
1730
1835
|
* Prevent further changes from being made to {@link EditLock.editor} until {@link EditLock.unlock} is called.
|
|
1836
|
+
* @param reason - A string describing why the lock is being acquired. This will be included in the error message if an attempt is made to edit while the lock is held.
|
|
1731
1837
|
* @remarks May only be called when the lock is not already locked.
|
|
1732
1838
|
*/
|
|
1733
|
-
public lock(): void {
|
|
1734
|
-
if (this.
|
|
1839
|
+
public lock(reason: string): void {
|
|
1840
|
+
if (this.status.isLocked) {
|
|
1735
1841
|
debugger;
|
|
1736
1842
|
}
|
|
1737
|
-
assert(!this.
|
|
1738
|
-
this.
|
|
1843
|
+
assert(!this.status.isLocked, 0xaa7 /* Checkout has already been locked */);
|
|
1844
|
+
this.status = { isLocked: true, reason };
|
|
1739
1845
|
}
|
|
1740
1846
|
|
|
1741
1847
|
/**
|
|
@@ -1744,8 +1850,8 @@ class EditLock {
|
|
|
1744
1850
|
* This must start with a capital letter, as it shows up as the first part of the error message and we want it to look nice.
|
|
1745
1851
|
*/
|
|
1746
1852
|
public checkUnlocked<T extends string>(action: T extends Capitalize<T> ? T : never): void {
|
|
1747
|
-
if (this.
|
|
1748
|
-
throw new UsageError(`${action} is forbidden during
|
|
1853
|
+
if (this.status.isLocked) {
|
|
1854
|
+
throw new UsageError(`${action} is forbidden during ${this.status.reason}`);
|
|
1749
1855
|
}
|
|
1750
1856
|
}
|
|
1751
1857
|
|
|
@@ -1754,8 +1860,8 @@ class EditLock {
|
|
|
1754
1860
|
* @remarks May only be called when the lock is currently locked.
|
|
1755
1861
|
*/
|
|
1756
1862
|
public unlock(): void {
|
|
1757
|
-
assert(this.
|
|
1758
|
-
this.
|
|
1863
|
+
assert(this.status.isLocked, 0xaa8 /* Checkout has not been locked */);
|
|
1864
|
+
this.status = { isLocked: false };
|
|
1759
1865
|
}
|
|
1760
1866
|
}
|
|
1761
1867
|
|