@fluidframework/tree 2.81.0-374083 → 2.81.1
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 +57 -0
- package/api-report/tree.alpha.api.md +0 -1
- package/dist/codec/codec.d.ts +2 -2
- package/dist/codec/codec.d.ts.map +1 -1
- package/dist/codec/codec.js +8 -8
- package/dist/codec/codec.js.map +1 -1
- package/dist/codec/versioned/codec.d.ts +1 -1
- package/dist/codec/versioned/codec.d.ts.map +1 -1
- package/dist/codec/versioned/codec.js +12 -12
- package/dist/codec/versioned/codec.js.map +1 -1
- package/dist/core/change-family/changeFamily.d.ts +1 -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/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 +3 -3
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +4 -6
- package/dist/core/index.js.map +1 -1
- package/dist/core/rebase/changeRebaser.d.ts +1 -6
- package/dist/core/rebase/changeRebaser.d.ts.map +1 -1
- package/dist/core/rebase/changeRebaser.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 +1 -2
- package/dist/core/rebase/index.js.map +1 -1
- package/dist/core/rebase/types.d.ts +1 -2
- package/dist/core/rebase/types.d.ts.map +1 -1
- package/dist/core/rebase/types.js +1 -5
- package/dist/core/rebase/types.js.map +1 -1
- package/dist/core/rebase/utils.d.ts.map +1 -1
- package/dist/core/rebase/utils.js +7 -25
- package/dist/core/rebase/utils.js.map +1 -1
- package/dist/core/schema-stored/formatV2.d.ts.map +1 -1
- package/dist/core/schema-stored/formatV2.js +4 -4
- package/dist/core/schema-stored/formatV2.js.map +1 -1
- package/dist/core/tree/anchorSet.d.ts.map +1 -1
- package/dist/core/tree/anchorSet.js +1 -1
- package/dist/core/tree/anchorSet.js.map +1 -1
- package/dist/core/tree/detachedFieldIndex.d.ts +0 -6
- package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndex.js +0 -9
- package/dist/core/tree/detachedFieldIndex.js.map +1 -1
- package/dist/core/tree/detachedFieldIndexCodecCommon.d.ts +1 -1
- package/dist/core/tree/detachedFieldIndexCodecCommon.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndexCodecCommon.js.map +1 -1
- package/dist/core/tree/detachedFieldIndexCodecV1.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndexCodecV1.js +3 -3
- package/dist/core/tree/detachedFieldIndexCodecV1.js.map +1 -1
- package/dist/core/tree/detachedFieldIndexCodecV2.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndexCodecV2.js +2 -2
- package/dist/core/tree/detachedFieldIndexCodecV2.js.map +1 -1
- package/dist/core/tree/detachedFieldIndexFormatV1.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndexFormatV1.js +3 -3
- package/dist/core/tree/detachedFieldIndexFormatV1.js.map +1 -1
- package/dist/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndexFormatV2.js +4 -4
- package/dist/core/tree/detachedFieldIndexFormatV2.js.map +1 -1
- package/dist/core/tree/index.d.ts +1 -1
- package/dist/core/tree/index.d.ts.map +1 -1
- package/dist/core/tree/index.js +3 -4
- package/dist/core/tree/index.js.map +1 -1
- package/dist/core/tree/pathTree.d.ts +3 -11
- package/dist/core/tree/pathTree.d.ts.map +1 -1
- package/dist/core/tree/pathTree.js +2 -14
- package/dist/core/tree/pathTree.js.map +1 -1
- package/dist/core/tree/visitDelta.d.ts +1 -1
- package/dist/core/tree/visitDelta.d.ts.map +1 -1
- package/dist/core/tree/visitDelta.js.map +1 -1
- package/dist/core/tree/visitorUtils.d.ts.map +1 -1
- package/dist/core/tree/visitorUtils.js +1 -1
- package/dist/core/tree/visitorUtils.js.map +1 -1
- package/dist/feature-libraries/changeAtomIdBTree.d.ts +3 -4
- package/dist/feature-libraries/changeAtomIdBTree.d.ts.map +1 -1
- package/dist/feature-libraries/changeAtomIdBTree.js +2 -16
- package/dist/feature-libraries/changeAtomIdBTree.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/basicChunk.js +0 -7
- package/dist/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkTree.d.ts +1 -1
- package/dist/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkTree.js +1 -4
- package/dist/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +1 -1
- 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 -1
- 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/chunkEncodingGeneric.d.ts +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts +1 -1
- package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/codecs.js +1 -1
- package/dist/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +1 -1
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/format.js +1 -1
- package/dist/feature-libraries/chunked-forest/codec/format.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/formatGeneric.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/formatGeneric.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +1 -1
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +2 -2
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +44 -93
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js +78 -245
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +11 -53
- package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.js +25 -75
- package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
- package/dist/feature-libraries/default-schema/index.d.ts +2 -3
- package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/index.js +2 -5
- package/dist/feature-libraries/default-schema/index.js.map +1 -1
- package/dist/feature-libraries/default-schema/mappedEditBuilder.d.ts +6 -7
- package/dist/feature-libraries/default-schema/mappedEditBuilder.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/mappedEditBuilder.js +0 -15
- package/dist/feature-libraries/default-schema/mappedEditBuilder.js.map +1 -1
- package/dist/feature-libraries/deltaUtils.d.ts +0 -1
- package/dist/feature-libraries/deltaUtils.d.ts.map +1 -1
- package/dist/feature-libraries/deltaUtils.js +1 -6
- package/dist/feature-libraries/deltaUtils.js.map +1 -1
- package/dist/feature-libraries/fieldKindIdentifiers.d.ts +9 -0
- package/dist/feature-libraries/fieldKindIdentifiers.d.ts.map +1 -0
- package/dist/feature-libraries/fieldKindIdentifiers.js +16 -0
- package/dist/feature-libraries/fieldKindIdentifiers.js.map +1 -0
- package/dist/feature-libraries/flex-tree/context.d.ts +0 -9
- package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/context.js +0 -6
- package/dist/feature-libraries/flex-tree/context.js.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +6 -6
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.d.ts +7 -8
- package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.js +17 -48
- package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/dist/feature-libraries/flex-tree/observer.d.ts +1 -1
- package/dist/feature-libraries/flex-tree/observer.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/observer.js.map +1 -1
- package/dist/feature-libraries/forest-summary/codec.d.ts.map +1 -1
- package/dist/feature-libraries/forest-summary/codec.js +1 -1
- package/dist/feature-libraries/forest-summary/codec.js.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.js +3 -3
- package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/dist/feature-libraries/forest-summary/formatV1.d.ts.map +1 -1
- package/dist/feature-libraries/forest-summary/formatV1.js.map +1 -1
- package/dist/feature-libraries/forest-summary/formatV2.d.ts.map +1 -1
- package/dist/feature-libraries/forest-summary/formatV2.js.map +1 -1
- package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +4 -4
- package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -1
- package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js +2 -2
- package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -1
- package/dist/feature-libraries/forest-summary/summaryTypes.d.ts.map +1 -1
- package/dist/feature-libraries/forest-summary/summaryTypes.js.map +1 -1
- package/dist/feature-libraries/index.d.ts +3 -3
- package/dist/feature-libraries/index.d.ts.map +1 -1
- package/dist/feature-libraries/index.js +3 -8
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/mapTreeCursor.d.ts.map +1 -1
- package/dist/feature-libraries/mapTreeCursor.js +0 -1
- package/dist/feature-libraries/mapTreeCursor.js.map +1 -1
- package/dist/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
- package/dist/feature-libraries/mitigatedChangeFamily.js +2 -2
- package/dist/feature-libraries/mitigatedChangeFamily.js.map +1 -1
- package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts +21 -97
- package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/crossFieldQueries.js +7 -4
- package/dist/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +51 -20
- 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/fieldKindConfiguration.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/fieldKindConfiguration.js.map +1 -1
- package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts +1 -1
- package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/genericFieldKind.js +11 -5
- package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
- package/dist/feature-libraries/modular-schema/index.d.ts +4 -4
- package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/index.js +2 -2
- package/dist/feature-libraries/modular-schema/index.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +28 -11
- package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js +162 -254
- package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecV2.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecV2.js +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecV2.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +1 -8
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +21 -49
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js +460 -1325
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts +8 -44
- package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeTypes.js +3 -3
- package/dist/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
- package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
- package/dist/feature-libraries/object-forest/objectForest.js +2 -2
- package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
- package/dist/feature-libraries/optional-field/index.d.ts +2 -2
- package/dist/feature-libraries/optional-field/index.d.ts.map +1 -1
- package/dist/feature-libraries/optional-field/index.js +4 -7
- package/dist/feature-libraries/optional-field/index.js.map +1 -1
- package/dist/feature-libraries/optional-field/optionalField.d.ts +34 -5
- package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
- package/dist/feature-libraries/optional-field/optionalField.js +455 -221
- package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts +33 -24
- package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.js.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldCodecV2.js +28 -57
- package/dist/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldCodecs.js +1 -5
- package/dist/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
- package/dist/feature-libraries/optional-field/requiredField.d.ts +36 -0
- package/dist/feature-libraries/optional-field/requiredField.d.ts.map +1 -0
- package/dist/feature-libraries/optional-field/requiredField.js +27 -0
- package/dist/feature-libraries/optional-field/requiredField.js.map +1 -0
- package/dist/feature-libraries/schema-edits/schemaChangeCodecs.d.ts +1 -1
- package/dist/feature-libraries/schema-edits/schemaChangeCodecs.d.ts.map +1 -1
- package/dist/feature-libraries/schema-edits/schemaChangeCodecs.js +7 -7
- package/dist/feature-libraries/schema-edits/schemaChangeCodecs.js.map +1 -1
- package/dist/feature-libraries/schema-edits/schemaChangeFormat.d.ts.map +1 -1
- package/dist/feature-libraries/schema-edits/schemaChangeFormat.js.map +1 -1
- package/dist/feature-libraries/schemaChecker.d.ts.map +1 -1
- package/dist/feature-libraries/schemaChecker.js +1 -1
- package/dist/feature-libraries/schemaChecker.js.map +1 -1
- package/dist/feature-libraries/sequence-field/compose.d.ts +7 -6
- package/dist/feature-libraries/sequence-field/compose.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/compose.js +259 -83
- package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
- package/dist/feature-libraries/sequence-field/helperTypes.d.ts +10 -14
- package/dist/feature-libraries/sequence-field/helperTypes.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/helperTypes.js.map +1 -1
- package/dist/feature-libraries/sequence-field/index.d.ts +2 -13
- package/dist/feature-libraries/sequence-field/index.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/index.js +3 -28
- package/dist/feature-libraries/sequence-field/index.js.map +1 -1
- package/dist/feature-libraries/sequence-field/invert.d.ts +3 -3
- package/dist/feature-libraries/sequence-field/invert.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/invert.js +167 -65
- package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
- package/dist/feature-libraries/sequence-field/markQueue.d.ts +2 -2
- package/dist/feature-libraries/sequence-field/markQueue.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/markQueue.js.map +1 -1
- package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts +56 -4
- package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/moveEffectTable.js +90 -7
- package/dist/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
- package/dist/feature-libraries/sequence-field/rebase.d.ts +3 -3
- package/dist/feature-libraries/sequence-field/rebase.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/rebase.js +114 -107
- package/dist/feature-libraries/sequence-field/rebase.js.map +1 -1
- package/dist/feature-libraries/sequence-field/relevantRemovedRoots.d.ts +9 -0
- package/dist/feature-libraries/sequence-field/relevantRemovedRoots.d.ts.map +1 -0
- package/dist/feature-libraries/sequence-field/relevantRemovedRoots.js +50 -0
- package/dist/feature-libraries/sequence-field/relevantRemovedRoots.js.map +1 -0
- package/dist/feature-libraries/sequence-field/replaceRevisions.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/replaceRevisions.js +31 -18
- package/dist/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.js +2 -0
- package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +4 -22
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js +187 -365
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js +62 -20
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +2 -2
- package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js +10 -10
- package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts +2 -3
- package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js +109 -14
- package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceKind.d.ts +16 -0
- package/dist/feature-libraries/sequence-field/sequenceKind.d.ts.map +1 -0
- package/dist/feature-libraries/sequence-field/sequenceKind.js +24 -0
- package/dist/feature-libraries/sequence-field/sequenceKind.js.map +1 -0
- package/dist/feature-libraries/sequence-field/types.d.ts +59 -30
- package/dist/feature-libraries/sequence-field/types.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/types.js.map +1 -1
- package/dist/feature-libraries/sequence-field/utils.d.ts +24 -15
- package/dist/feature-libraries/sequence-field/utils.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/utils.js +305 -116
- package/dist/feature-libraries/sequence-field/utils.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.d.ts.map +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/shared-tree/independentView.d.ts.map +1 -1
- package/dist/shared-tree/independentView.js +7 -7
- package/dist/shared-tree/independentView.js.map +1 -1
- package/dist/shared-tree/index.d.ts +1 -1
- package/dist/shared-tree/index.d.ts.map +1 -1
- package/dist/shared-tree/index.js.map +1 -1
- package/dist/shared-tree/schematizeTree.d.ts +4 -4
- package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
- package/dist/shared-tree/schematizeTree.js +1 -2
- package/dist/shared-tree/schematizeTree.js.map +1 -1
- package/dist/shared-tree/schematizingTreeView.d.ts +5 -1
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +39 -40
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts +5 -11
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +5 -43
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/sharedTreeChangeCodecs.d.ts +1 -1
- package/dist/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
- package/dist/shared-tree/sharedTreeChangeCodecs.js +0 -1
- package/dist/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
- package/dist/shared-tree/sharedTreeChangeEnricher.d.ts +31 -24
- package/dist/shared-tree/sharedTreeChangeEnricher.d.ts.map +1 -1
- package/dist/shared-tree/sharedTreeChangeEnricher.js +75 -58
- package/dist/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
- package/dist/shared-tree/sharedTreeChangeFamily.d.ts +5 -5
- package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
- package/dist/shared-tree/sharedTreeChangeFamily.js +4 -10
- package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
- package/dist/shared-tree/sharedTreeEditBuilder.d.ts +6 -16
- package/dist/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
- package/dist/shared-tree/sharedTreeEditBuilder.js +7 -14
- package/dist/shared-tree/sharedTreeEditBuilder.js.map +1 -1
- package/dist/shared-tree/tree.d.ts.map +1 -1
- package/dist/shared-tree/tree.js +14 -14
- package/dist/shared-tree/tree.js.map +1 -1
- package/dist/shared-tree/treeAlpha.d.ts +1 -1
- package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
- package/dist/shared-tree/treeAlpha.js +77 -77
- package/dist/shared-tree/treeAlpha.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts +29 -13
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +80 -79
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree-core/branch.d.ts +3 -4
- package/dist/shared-tree-core/branch.d.ts.map +1 -1
- package/dist/shared-tree-core/branch.js +3 -4
- package/dist/shared-tree-core/branch.js.map +1 -1
- package/dist/shared-tree-core/branchCommitEnricher.d.ts +18 -31
- package/dist/shared-tree-core/branchCommitEnricher.d.ts.map +1 -1
- package/dist/shared-tree-core/branchCommitEnricher.js +24 -76
- package/dist/shared-tree-core/branchCommitEnricher.js.map +1 -1
- package/dist/shared-tree-core/branchIdCodec.d.ts.map +1 -1
- package/dist/shared-tree-core/branchIdCodec.js.map +1 -1
- package/dist/shared-tree-core/changeEnricher.d.ts +8 -43
- package/dist/shared-tree-core/changeEnricher.d.ts.map +1 -1
- package/dist/shared-tree-core/changeEnricher.js +0 -13
- package/dist/shared-tree-core/changeEnricher.js.map +1 -1
- package/dist/shared-tree-core/defaultResubmitMachine.d.ts +4 -12
- package/dist/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
- package/dist/shared-tree-core/defaultResubmitMachine.js +26 -36
- package/dist/shared-tree-core/defaultResubmitMachine.js.map +1 -1
- package/dist/shared-tree-core/editManager.d.ts +3 -3
- package/dist/shared-tree-core/editManager.d.ts.map +1 -1
- package/dist/shared-tree-core/editManager.js +11 -11
- package/dist/shared-tree-core/editManager.js.map +1 -1
- package/dist/shared-tree-core/editManagerCodecs.d.ts +1 -5
- package/dist/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerCodecs.js +2 -10
- package/dist/shared-tree-core/editManagerCodecs.js.map +1 -1
- package/dist/shared-tree-core/editManagerCodecsCommons.d.ts +1 -1
- package/dist/shared-tree-core/editManagerCodecsCommons.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerCodecsCommons.js +1 -2
- package/dist/shared-tree-core/editManagerCodecsCommons.js.map +1 -1
- package/dist/shared-tree-core/editManagerCodecsV1toV4.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerCodecsV1toV4.js +1 -1
- package/dist/shared-tree-core/editManagerCodecsV1toV4.js.map +1 -1
- package/dist/shared-tree-core/editManagerCodecsVSharedBranches.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerCodecsVSharedBranches.js +1 -1
- package/dist/shared-tree-core/editManagerCodecsVSharedBranches.js.map +1 -1
- package/dist/shared-tree-core/editManagerFormatCommons.d.ts +0 -1
- package/dist/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerFormatCommons.js +0 -6
- package/dist/shared-tree-core/editManagerFormatCommons.js.map +1 -1
- package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts +2 -2
- package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerFormatV1toV4.js +0 -1
- package/dist/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
- package/dist/shared-tree-core/editManagerFormatVSharedBranches.d.ts +1 -1
- package/dist/shared-tree-core/editManagerFormatVSharedBranches.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerFormatVSharedBranches.js +1 -1
- package/dist/shared-tree-core/editManagerFormatVSharedBranches.js.map +1 -1
- package/dist/shared-tree-core/index.d.ts +4 -4
- package/dist/shared-tree-core/index.d.ts.map +1 -1
- package/dist/shared-tree-core/index.js +1 -5
- package/dist/shared-tree-core/index.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 +1 -1
- package/dist/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
- package/dist/shared-tree-core/messageCodecVSharedBranches.d.ts +1 -1
- package/dist/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
- package/dist/shared-tree-core/messageCodecVSharedBranches.js +2 -2
- package/dist/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
- package/dist/shared-tree-core/messageCodecs.d.ts +2 -6
- package/dist/shared-tree-core/messageCodecs.d.ts.map +1 -1
- package/dist/shared-tree-core/messageCodecs.js +2 -10
- package/dist/shared-tree-core/messageCodecs.js.map +1 -1
- package/dist/shared-tree-core/messageFormat.d.ts +0 -1
- package/dist/shared-tree-core/messageFormat.d.ts.map +1 -1
- package/dist/shared-tree-core/messageFormat.js +0 -6
- package/dist/shared-tree-core/messageFormat.js.map +1 -1
- package/dist/shared-tree-core/messageFormatV1ToV4.d.ts +2 -2
- package/dist/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
- package/dist/shared-tree-core/messageFormatV1ToV4.js +0 -1
- package/dist/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
- package/dist/shared-tree-core/messageFormatVSharedBranches.d.ts.map +1 -1
- package/dist/shared-tree-core/messageFormatVSharedBranches.js.map +1 -1
- 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 +8 -5
- package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.js +14 -14
- package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/dist/shared-tree-core/versionedSummarizer.d.ts.map +1 -1
- package/dist/shared-tree-core/versionedSummarizer.js +1 -1
- package/dist/shared-tree-core/versionedSummarizer.js.map +1 -1
- package/dist/simple-tree/api/configuration.d.ts +2 -2
- package/dist/simple-tree/api/configuration.d.ts.map +1 -1
- package/dist/simple-tree/api/configuration.js +14 -14
- package/dist/simple-tree/api/configuration.js.map +1 -1
- package/dist/simple-tree/api/create.d.ts +1 -1
- package/dist/simple-tree/api/create.d.ts.map +1 -1
- package/dist/simple-tree/api/create.js +7 -7
- package/dist/simple-tree/api/create.js.map +1 -1
- package/dist/simple-tree/api/dirtyIndex.d.ts +1 -1
- package/dist/simple-tree/api/dirtyIndex.d.ts.map +1 -1
- package/dist/simple-tree/api/dirtyIndex.js.map +1 -1
- package/dist/simple-tree/api/discrepancies.d.ts.map +1 -1
- package/dist/simple-tree/api/discrepancies.js +23 -23
- package/dist/simple-tree/api/discrepancies.js.map +1 -1
- package/dist/simple-tree/api/getJsonSchema.d.ts +1 -1
- package/dist/simple-tree/api/getJsonSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/getJsonSchema.js +1 -1
- package/dist/simple-tree/api/getJsonSchema.js.map +1 -1
- package/dist/simple-tree/api/identifierIndex.d.ts +2 -2
- package/dist/simple-tree/api/identifierIndex.d.ts.map +1 -1
- package/dist/simple-tree/api/identifierIndex.js.map +1 -1
- package/dist/simple-tree/api/incrementalAllowedTypes.d.ts +1 -1
- package/dist/simple-tree/api/incrementalAllowedTypes.d.ts.map +1 -1
- package/dist/simple-tree/api/incrementalAllowedTypes.js +6 -6
- package/dist/simple-tree/api/incrementalAllowedTypes.js.map +1 -1
- package/dist/simple-tree/api/schemaCompatibilityTester.d.ts +1 -1
- package/dist/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaCompatibilityTester.js +1 -1
- package/dist/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
- package/dist/simple-tree/api/schemaCreationUtilities.d.ts +2 -2
- package/dist/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaCreationUtilities.js +7 -7
- package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
- package/dist/simple-tree/api/schemaFactory.d.ts +2 -2
- package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactory.js +7 -7
- package/dist/simple-tree/api/schemaFactory.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +6 -6
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.js +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryBeta.d.ts +2 -2
- package/dist/simple-tree/api/schemaFactoryBeta.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactoryBeta.js +1 -0
- package/dist/simple-tree/api/schemaFactoryBeta.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +1 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
- package/dist/simple-tree/api/schemaFromSimple.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFromSimple.js.map +1 -1
- 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/simpleSchemaCodec.d.ts +1 -1
- package/dist/simple-tree/api/simpleSchemaCodec.d.ts.map +1 -1
- package/dist/simple-tree/api/simpleSchemaCodec.js +17 -17
- package/dist/simple-tree/api/simpleSchemaCodec.js.map +1 -1
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.d.ts +2 -2
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +2 -2
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
- package/dist/simple-tree/api/simpleTreeIndex.d.ts +1 -1
- package/dist/simple-tree/api/simpleTreeIndex.d.ts.map +1 -1
- package/dist/simple-tree/api/simpleTreeIndex.js +1 -1
- package/dist/simple-tree/api/simpleTreeIndex.js.map +1 -1
- package/dist/simple-tree/api/snapshotCompatibilityChecker.d.ts.map +1 -1
- package/dist/simple-tree/api/snapshotCompatibilityChecker.js +14 -14
- 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.map +1 -1
- package/dist/simple-tree/api/tree.d.ts +2 -2
- 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/treeBeta.d.ts +1 -1
- package/dist/simple-tree/api/treeBeta.d.ts.map +1 -1
- package/dist/simple-tree/api/treeBeta.js +2 -2
- package/dist/simple-tree/api/treeBeta.js.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.js +4 -4
- package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
- package/dist/simple-tree/api/typesUnsafe.d.ts +1 -1
- package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -1
- package/dist/simple-tree/api/typesUnsafe.js.map +1 -1
- package/dist/simple-tree/api/verboseTree.d.ts +1 -1
- package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
- package/dist/simple-tree/api/verboseTree.js +22 -22
- package/dist/simple-tree/api/verboseTree.js.map +1 -1
- package/dist/simple-tree/core/allowedTypes.d.ts +1 -1
- package/dist/simple-tree/core/allowedTypes.d.ts.map +1 -1
- package/dist/simple-tree/core/allowedTypes.js +7 -7
- package/dist/simple-tree/core/allowedTypes.js.map +1 -1
- package/dist/simple-tree/core/context.d.ts.map +1 -1
- package/dist/simple-tree/core/context.js.map +1 -1
- package/dist/simple-tree/core/treeNode.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNode.js +1 -1
- package/dist/simple-tree/core/treeNode.js.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js +1 -3
- package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.d.ts +5 -5
- package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/dist/simple-tree/core/treeNodeValid.d.ts +3 -3
- package/dist/simple-tree/core/treeNodeValid.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeValid.js +2 -2
- package/dist/simple-tree/core/treeNodeValid.js.map +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.d.ts +16 -16
- package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.js +8 -59
- package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
- package/dist/simple-tree/core/withType.d.ts.map +1 -1
- package/dist/simple-tree/core/withType.js.map +1 -1
- package/dist/simple-tree/createContext.d.ts.map +1 -1
- package/dist/simple-tree/createContext.js.map +1 -1
- package/dist/simple-tree/fieldSchema.d.ts +5 -5
- package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
- package/dist/simple-tree/fieldSchema.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 +1 -1
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/leafNodeSchema.d.ts +1 -1
- package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/leafNodeSchema.js +15 -15
- package/dist/simple-tree/leafNodeSchema.js.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.d.ts +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.js +47 -49
- package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNodeTypes.d.ts +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNodeTypes.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNodeTypes.js.map +1 -1
- package/dist/simple-tree/node-kinds/common.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/common.js +1 -1
- package/dist/simple-tree/node-kinds/common.js.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.d.ts +2 -2
- package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.js +26 -26
- package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNodeTypes.d.ts +1 -1
- package/dist/simple-tree/node-kinds/map/mapNodeTypes.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNodeTypes.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.d.ts +2 -2
- package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.js +28 -28
- package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNodeTypes.d.ts +3 -3
- package/dist/simple-tree/node-kinds/object/objectNodeTypes.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNodeTypes.js.map +1 -1
- package/dist/simple-tree/node-kinds/record/recordNode.d.ts +1 -1
- package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/record/recordNode.js +36 -38
- package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/record/recordNodeTypes.d.ts +1 -1
- package/dist/simple-tree/node-kinds/record/recordNodeTypes.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/record/recordNodeTypes.js.map +1 -1
- package/dist/simple-tree/prepareForInsertion.d.ts +47 -54
- package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
- package/dist/simple-tree/prepareForInsertion.js +128 -186
- package/dist/simple-tree/prepareForInsertion.js.map +1 -1
- package/dist/simple-tree/simpleSchema.d.ts.map +1 -1
- package/dist/simple-tree/simpleSchema.js.map +1 -1
- package/dist/simple-tree/treeSchema.d.ts.map +1 -1
- package/dist/simple-tree/treeSchema.js.map +1 -1
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +4 -13
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js +22 -40
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
- package/dist/tableSchema.d.ts.map +1 -1
- package/dist/tableSchema.js +22 -21
- package/dist/tableSchema.js.map +1 -1
- package/dist/text/index.d.ts +1 -0
- package/dist/text/index.d.ts.map +1 -1
- package/dist/text/index.js +3 -1
- package/dist/text/index.js.map +1 -1
- package/dist/text/textDomain.d.ts +8 -0
- package/dist/text/textDomain.d.ts.map +1 -1
- package/dist/text/textDomain.js +2 -1
- package/dist/text/textDomain.js.map +1 -1
- package/dist/text/textDomainFormatted.d.ts +572 -0
- package/dist/text/textDomainFormatted.d.ts.map +1 -0
- package/dist/text/textDomainFormatted.js +183 -0
- package/dist/text/textDomainFormatted.js.map +1 -0
- package/dist/treeFactory.d.ts.map +1 -1
- package/dist/treeFactory.js +11 -21
- package/dist/treeFactory.js.map +1 -1
- package/dist/util/bTreeUtils.d.ts.map +1 -1
- package/dist/util/bTreeUtils.js +1 -1
- package/dist/util/bTreeUtils.js.map +1 -1
- package/dist/util/index.d.ts +1 -1
- package/dist/util/index.d.ts.map +1 -1
- package/dist/util/index.js +1 -2
- package/dist/util/index.js.map +1 -1
- package/dist/util/rangeMap.d.ts +12 -24
- package/dist/util/rangeMap.d.ts.map +1 -1
- package/dist/util/rangeMap.js +6 -46
- package/dist/util/rangeMap.js.map +1 -1
- package/dist/util/readSnapshotBlob.d.ts +1 -1
- package/dist/util/readSnapshotBlob.d.ts.map +1 -1
- package/dist/util/readSnapshotBlob.js.map +1 -1
- package/docs/main/sequence-field/move-composition.md +46 -0
- package/eslint.config.mts +4 -4
- package/lib/codec/codec.d.ts +2 -2
- package/lib/codec/codec.d.ts.map +1 -1
- package/lib/codec/codec.js +1 -1
- package/lib/codec/codec.js.map +1 -1
- package/lib/codec/versioned/codec.d.ts +1 -1
- package/lib/codec/versioned/codec.d.ts.map +1 -1
- package/lib/codec/versioned/codec.js +2 -2
- package/lib/codec/versioned/codec.js.map +1 -1
- package/lib/core/change-family/changeFamily.d.ts +1 -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/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 +3 -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/changeRebaser.d.ts +1 -6
- package/lib/core/rebase/changeRebaser.d.ts.map +1 -1
- package/lib/core/rebase/changeRebaser.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 +1 -2
- package/lib/core/rebase/types.d.ts.map +1 -1
- package/lib/core/rebase/types.js +0 -3
- package/lib/core/rebase/types.js.map +1 -1
- package/lib/core/rebase/utils.d.ts.map +1 -1
- package/lib/core/rebase/utils.js +7 -25
- package/lib/core/rebase/utils.js.map +1 -1
- package/lib/core/schema-stored/formatV2.d.ts.map +1 -1
- package/lib/core/schema-stored/formatV2.js +1 -1
- package/lib/core/schema-stored/formatV2.js.map +1 -1
- package/lib/core/tree/anchorSet.d.ts.map +1 -1
- package/lib/core/tree/anchorSet.js +1 -1
- package/lib/core/tree/anchorSet.js.map +1 -1
- package/lib/core/tree/detachedFieldIndex.d.ts +0 -6
- package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndex.js +1 -10
- package/lib/core/tree/detachedFieldIndex.js.map +1 -1
- package/lib/core/tree/detachedFieldIndexCodecCommon.d.ts +1 -1
- package/lib/core/tree/detachedFieldIndexCodecCommon.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndexCodecCommon.js.map +1 -1
- package/lib/core/tree/detachedFieldIndexCodecV1.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndexCodecV1.js +1 -1
- package/lib/core/tree/detachedFieldIndexCodecV1.js.map +1 -1
- package/lib/core/tree/detachedFieldIndexCodecV2.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndexCodecV2.js +2 -2
- package/lib/core/tree/detachedFieldIndexCodecV2.js.map +1 -1
- package/lib/core/tree/detachedFieldIndexFormatV1.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndexFormatV1.js +2 -2
- package/lib/core/tree/detachedFieldIndexFormatV1.js.map +1 -1
- package/lib/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndexFormatV2.js +2 -2
- package/lib/core/tree/detachedFieldIndexFormatV2.js.map +1 -1
- package/lib/core/tree/index.d.ts +1 -1
- package/lib/core/tree/index.d.ts.map +1 -1
- package/lib/core/tree/index.js +1 -1
- package/lib/core/tree/index.js.map +1 -1
- package/lib/core/tree/pathTree.d.ts +3 -11
- package/lib/core/tree/pathTree.d.ts.map +1 -1
- package/lib/core/tree/pathTree.js +1 -12
- package/lib/core/tree/pathTree.js.map +1 -1
- package/lib/core/tree/visitDelta.d.ts +1 -1
- package/lib/core/tree/visitDelta.d.ts.map +1 -1
- package/lib/core/tree/visitDelta.js.map +1 -1
- package/lib/core/tree/visitorUtils.d.ts.map +1 -1
- package/lib/core/tree/visitorUtils.js +1 -1
- package/lib/core/tree/visitorUtils.js.map +1 -1
- package/lib/feature-libraries/changeAtomIdBTree.d.ts +3 -4
- package/lib/feature-libraries/changeAtomIdBTree.d.ts.map +1 -1
- package/lib/feature-libraries/changeAtomIdBTree.js +1 -14
- package/lib/feature-libraries/changeAtomIdBTree.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/basicChunk.js +1 -8
- package/lib/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkTree.d.ts +1 -1
- package/lib/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkTree.js +1 -4
- package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +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 -1
- 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/chunkEncodingGeneric.d.ts +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts +1 -1
- package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/codecs.js +1 -1
- package/lib/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +1 -1
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format.js +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/formatGeneric.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/formatGeneric.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +1 -1
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +2 -2
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +44 -93
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js +73 -237
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +11 -53
- package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.js +6 -56
- package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
- package/lib/feature-libraries/default-schema/index.d.ts +2 -3
- package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/index.js +1 -2
- package/lib/feature-libraries/default-schema/index.js.map +1 -1
- package/lib/feature-libraries/default-schema/mappedEditBuilder.d.ts +6 -7
- package/lib/feature-libraries/default-schema/mappedEditBuilder.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/mappedEditBuilder.js +0 -15
- package/lib/feature-libraries/default-schema/mappedEditBuilder.js.map +1 -1
- package/lib/feature-libraries/deltaUtils.d.ts +0 -1
- package/lib/feature-libraries/deltaUtils.d.ts.map +1 -1
- package/lib/feature-libraries/deltaUtils.js +1 -5
- package/lib/feature-libraries/deltaUtils.js.map +1 -1
- package/lib/feature-libraries/fieldKindIdentifiers.d.ts +9 -0
- package/lib/feature-libraries/fieldKindIdentifiers.d.ts.map +1 -0
- package/lib/feature-libraries/fieldKindIdentifiers.js +13 -0
- package/lib/feature-libraries/fieldKindIdentifiers.js.map +1 -0
- package/lib/feature-libraries/flex-tree/context.d.ts +0 -9
- package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/context.js +0 -6
- package/lib/feature-libraries/flex-tree/context.js.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +6 -6
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.d.ts +7 -8
- package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.js +11 -42
- package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/lib/feature-libraries/flex-tree/observer.d.ts +1 -1
- package/lib/feature-libraries/flex-tree/observer.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/observer.js.map +1 -1
- package/lib/feature-libraries/forest-summary/codec.d.ts.map +1 -1
- package/lib/feature-libraries/forest-summary/codec.js +1 -1
- package/lib/feature-libraries/forest-summary/codec.js.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.js +3 -3
- package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/lib/feature-libraries/forest-summary/formatV1.d.ts.map +1 -1
- package/lib/feature-libraries/forest-summary/formatV1.js.map +1 -1
- package/lib/feature-libraries/forest-summary/formatV2.d.ts.map +1 -1
- package/lib/feature-libraries/forest-summary/formatV2.js.map +1 -1
- package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +4 -4
- package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -1
- package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js +2 -2
- package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -1
- package/lib/feature-libraries/forest-summary/summaryTypes.d.ts.map +1 -1
- package/lib/feature-libraries/forest-summary/summaryTypes.js.map +1 -1
- package/lib/feature-libraries/index.d.ts +3 -3
- package/lib/feature-libraries/index.d.ts.map +1 -1
- package/lib/feature-libraries/index.js +2 -2
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/mapTreeCursor.d.ts.map +1 -1
- package/lib/feature-libraries/mapTreeCursor.js +1 -2
- package/lib/feature-libraries/mapTreeCursor.js.map +1 -1
- package/lib/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
- package/lib/feature-libraries/mitigatedChangeFamily.js +2 -2
- package/lib/feature-libraries/mitigatedChangeFamily.js.map +1 -1
- package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts +21 -97
- package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/crossFieldQueries.js +5 -3
- package/lib/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +51 -20
- 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/fieldKindConfiguration.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/fieldKindConfiguration.js.map +1 -1
- package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts +1 -1
- package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/genericFieldKind.js +11 -5
- package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
- package/lib/feature-libraries/modular-schema/index.d.ts +4 -4
- package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/index.js +2 -2
- package/lib/feature-libraries/modular-schema/index.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +28 -11
- package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js +144 -246
- package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecV2.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecV2.js +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecV2.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +1 -8
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +21 -49
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js +463 -1319
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts +8 -44
- package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeTypes.js +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
- package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
- package/lib/feature-libraries/object-forest/objectForest.js +2 -2
- package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
- package/lib/feature-libraries/optional-field/index.d.ts +2 -2
- package/lib/feature-libraries/optional-field/index.d.ts.map +1 -1
- package/lib/feature-libraries/optional-field/index.js +2 -2
- package/lib/feature-libraries/optional-field/index.js.map +1 -1
- package/lib/feature-libraries/optional-field/optionalField.d.ts +34 -5
- package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
- package/lib/feature-libraries/optional-field/optionalField.js +453 -221
- package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts +33 -24
- package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts.map +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.js.map +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldCodecV2.js +26 -55
- package/lib/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldCodecs.js +1 -5
- package/lib/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
- package/lib/feature-libraries/optional-field/requiredField.d.ts +36 -0
- package/lib/feature-libraries/optional-field/requiredField.d.ts.map +1 -0
- package/lib/feature-libraries/optional-field/requiredField.js +24 -0
- package/lib/feature-libraries/optional-field/requiredField.js.map +1 -0
- package/lib/feature-libraries/schema-edits/schemaChangeCodecs.d.ts +1 -1
- package/lib/feature-libraries/schema-edits/schemaChangeCodecs.d.ts.map +1 -1
- package/lib/feature-libraries/schema-edits/schemaChangeCodecs.js +1 -1
- package/lib/feature-libraries/schema-edits/schemaChangeCodecs.js.map +1 -1
- package/lib/feature-libraries/schema-edits/schemaChangeFormat.d.ts.map +1 -1
- package/lib/feature-libraries/schema-edits/schemaChangeFormat.js.map +1 -1
- package/lib/feature-libraries/schemaChecker.d.ts.map +1 -1
- package/lib/feature-libraries/schemaChecker.js +1 -1
- package/lib/feature-libraries/schemaChecker.js.map +1 -1
- package/lib/feature-libraries/sequence-field/compose.d.ts +7 -6
- package/lib/feature-libraries/sequence-field/compose.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/compose.js +261 -85
- package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
- package/lib/feature-libraries/sequence-field/helperTypes.d.ts +10 -14
- package/lib/feature-libraries/sequence-field/helperTypes.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/helperTypes.js.map +1 -1
- package/lib/feature-libraries/sequence-field/index.d.ts +2 -13
- package/lib/feature-libraries/sequence-field/index.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/index.js +1 -12
- package/lib/feature-libraries/sequence-field/index.js.map +1 -1
- package/lib/feature-libraries/sequence-field/invert.d.ts +3 -3
- package/lib/feature-libraries/sequence-field/invert.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/invert.js +169 -67
- package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
- package/lib/feature-libraries/sequence-field/markQueue.d.ts +2 -2
- package/lib/feature-libraries/sequence-field/markQueue.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/markQueue.js.map +1 -1
- package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts +56 -4
- package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/moveEffectTable.js +84 -6
- package/lib/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
- package/lib/feature-libraries/sequence-field/rebase.d.ts +3 -3
- package/lib/feature-libraries/sequence-field/rebase.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/rebase.js +116 -109
- package/lib/feature-libraries/sequence-field/rebase.js.map +1 -1
- package/lib/feature-libraries/sequence-field/relevantRemovedRoots.d.ts +9 -0
- package/lib/feature-libraries/sequence-field/relevantRemovedRoots.d.ts.map +1 -0
- package/lib/feature-libraries/sequence-field/relevantRemovedRoots.js +46 -0
- package/lib/feature-libraries/sequence-field/relevantRemovedRoots.js.map +1 -0
- package/lib/feature-libraries/sequence-field/replaceRevisions.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/replaceRevisions.js +31 -18
- package/lib/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.js +2 -0
- package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +4 -22
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js +182 -356
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js +63 -21
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +2 -2
- package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js +10 -10
- package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts +2 -3
- package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js +109 -14
- package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceKind.d.ts +16 -0
- package/lib/feature-libraries/sequence-field/sequenceKind.d.ts.map +1 -0
- package/lib/feature-libraries/sequence-field/sequenceKind.js +21 -0
- package/lib/feature-libraries/sequence-field/sequenceKind.js.map +1 -0
- package/lib/feature-libraries/sequence-field/types.d.ts +59 -30
- package/lib/feature-libraries/sequence-field/types.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/types.js.map +1 -1
- package/lib/feature-libraries/sequence-field/utils.d.ts +24 -15
- package/lib/feature-libraries/sequence-field/utils.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/utils.js +298 -112
- package/lib/feature-libraries/sequence-field/utils.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.d.ts.map +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/shared-tree/independentView.d.ts.map +1 -1
- package/lib/shared-tree/independentView.js +3 -3
- package/lib/shared-tree/independentView.js.map +1 -1
- package/lib/shared-tree/index.d.ts +1 -1
- package/lib/shared-tree/index.d.ts.map +1 -1
- package/lib/shared-tree/index.js.map +1 -1
- package/lib/shared-tree/schematizeTree.d.ts +4 -4
- package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
- package/lib/shared-tree/schematizeTree.js +2 -3
- package/lib/shared-tree/schematizeTree.js.map +1 -1
- package/lib/shared-tree/schematizingTreeView.d.ts +5 -1
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +42 -43
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts +5 -11
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +5 -43
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/sharedTreeChangeCodecs.d.ts +1 -1
- package/lib/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
- package/lib/shared-tree/sharedTreeChangeCodecs.js +0 -1
- package/lib/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
- package/lib/shared-tree/sharedTreeChangeEnricher.d.ts +31 -24
- package/lib/shared-tree/sharedTreeChangeEnricher.d.ts.map +1 -1
- package/lib/shared-tree/sharedTreeChangeEnricher.js +74 -56
- package/lib/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
- package/lib/shared-tree/sharedTreeChangeFamily.d.ts +5 -5
- package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
- package/lib/shared-tree/sharedTreeChangeFamily.js +5 -11
- package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
- package/lib/shared-tree/sharedTreeEditBuilder.d.ts +6 -16
- package/lib/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
- package/lib/shared-tree/sharedTreeEditBuilder.js +6 -12
- package/lib/shared-tree/sharedTreeEditBuilder.js.map +1 -1
- package/lib/shared-tree/tree.d.ts.map +1 -1
- package/lib/shared-tree/tree.js +7 -7
- package/lib/shared-tree/tree.js.map +1 -1
- package/lib/shared-tree/treeAlpha.d.ts +1 -1
- package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
- package/lib/shared-tree/treeAlpha.js +3 -3
- package/lib/shared-tree/treeAlpha.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts +29 -13
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +55 -54
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree-core/branch.d.ts +3 -4
- package/lib/shared-tree-core/branch.d.ts.map +1 -1
- package/lib/shared-tree-core/branch.js +3 -4
- package/lib/shared-tree-core/branch.js.map +1 -1
- package/lib/shared-tree-core/branchCommitEnricher.d.ts +18 -31
- package/lib/shared-tree-core/branchCommitEnricher.d.ts.map +1 -1
- package/lib/shared-tree-core/branchCommitEnricher.js +24 -76
- package/lib/shared-tree-core/branchCommitEnricher.js.map +1 -1
- package/lib/shared-tree-core/branchIdCodec.d.ts.map +1 -1
- package/lib/shared-tree-core/branchIdCodec.js.map +1 -1
- package/lib/shared-tree-core/changeEnricher.d.ts +8 -43
- package/lib/shared-tree-core/changeEnricher.d.ts.map +1 -1
- package/lib/shared-tree-core/changeEnricher.js +1 -11
- package/lib/shared-tree-core/changeEnricher.js.map +1 -1
- package/lib/shared-tree-core/defaultResubmitMachine.d.ts +4 -12
- package/lib/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
- package/lib/shared-tree-core/defaultResubmitMachine.js +28 -38
- package/lib/shared-tree-core/defaultResubmitMachine.js.map +1 -1
- package/lib/shared-tree-core/editManager.d.ts +3 -3
- package/lib/shared-tree-core/editManager.d.ts.map +1 -1
- package/lib/shared-tree-core/editManager.js +11 -11
- package/lib/shared-tree-core/editManager.js.map +1 -1
- package/lib/shared-tree-core/editManagerCodecs.d.ts +1 -5
- package/lib/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerCodecs.js +1 -8
- package/lib/shared-tree-core/editManagerCodecs.js.map +1 -1
- package/lib/shared-tree-core/editManagerCodecsCommons.d.ts +1 -1
- package/lib/shared-tree-core/editManagerCodecsCommons.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerCodecsCommons.js +1 -2
- package/lib/shared-tree-core/editManagerCodecsCommons.js.map +1 -1
- 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.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/editManagerFormatCommons.d.ts +0 -1
- package/lib/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerFormatCommons.js +0 -6
- package/lib/shared-tree-core/editManagerFormatCommons.js.map +1 -1
- package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts +2 -2
- package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerFormatV1toV4.js +0 -1
- package/lib/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
- package/lib/shared-tree-core/editManagerFormatVSharedBranches.d.ts +1 -1
- package/lib/shared-tree-core/editManagerFormatVSharedBranches.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerFormatVSharedBranches.js +1 -1
- package/lib/shared-tree-core/editManagerFormatVSharedBranches.js.map +1 -1
- package/lib/shared-tree-core/index.d.ts +4 -4
- package/lib/shared-tree-core/index.d.ts.map +1 -1
- package/lib/shared-tree-core/index.js +2 -3
- package/lib/shared-tree-core/index.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 +1 -1
- package/lib/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
- package/lib/shared-tree-core/messageCodecVSharedBranches.d.ts +1 -1
- package/lib/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
- package/lib/shared-tree-core/messageCodecVSharedBranches.js +2 -2
- package/lib/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
- package/lib/shared-tree-core/messageCodecs.d.ts +2 -6
- package/lib/shared-tree-core/messageCodecs.d.ts.map +1 -1
- package/lib/shared-tree-core/messageCodecs.js +1 -8
- package/lib/shared-tree-core/messageCodecs.js.map +1 -1
- package/lib/shared-tree-core/messageFormat.d.ts +0 -1
- package/lib/shared-tree-core/messageFormat.d.ts.map +1 -1
- package/lib/shared-tree-core/messageFormat.js +0 -6
- package/lib/shared-tree-core/messageFormat.js.map +1 -1
- package/lib/shared-tree-core/messageFormatV1ToV4.d.ts +2 -2
- package/lib/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
- package/lib/shared-tree-core/messageFormatV1ToV4.js +0 -1
- package/lib/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
- package/lib/shared-tree-core/messageFormatVSharedBranches.d.ts.map +1 -1
- package/lib/shared-tree-core/messageFormatVSharedBranches.js.map +1 -1
- 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 +8 -5
- package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.js +15 -15
- package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/lib/shared-tree-core/versionedSummarizer.d.ts.map +1 -1
- package/lib/shared-tree-core/versionedSummarizer.js +1 -1
- package/lib/shared-tree-core/versionedSummarizer.js.map +1 -1
- package/lib/simple-tree/api/configuration.d.ts +2 -2
- package/lib/simple-tree/api/configuration.d.ts.map +1 -1
- package/lib/simple-tree/api/configuration.js +4 -4
- package/lib/simple-tree/api/configuration.js.map +1 -1
- package/lib/simple-tree/api/create.d.ts +1 -1
- package/lib/simple-tree/api/create.d.ts.map +1 -1
- package/lib/simple-tree/api/create.js +1 -1
- package/lib/simple-tree/api/create.js.map +1 -1
- package/lib/simple-tree/api/dirtyIndex.d.ts +1 -1
- package/lib/simple-tree/api/dirtyIndex.d.ts.map +1 -1
- package/lib/simple-tree/api/dirtyIndex.js.map +1 -1
- package/lib/simple-tree/api/discrepancies.d.ts.map +1 -1
- package/lib/simple-tree/api/discrepancies.js +3 -3
- package/lib/simple-tree/api/discrepancies.js.map +1 -1
- package/lib/simple-tree/api/getJsonSchema.d.ts +1 -1
- package/lib/simple-tree/api/getJsonSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/getJsonSchema.js +1 -1
- package/lib/simple-tree/api/getJsonSchema.js.map +1 -1
- package/lib/simple-tree/api/identifierIndex.d.ts +2 -2
- package/lib/simple-tree/api/identifierIndex.d.ts.map +1 -1
- package/lib/simple-tree/api/identifierIndex.js.map +1 -1
- package/lib/simple-tree/api/incrementalAllowedTypes.d.ts +1 -1
- package/lib/simple-tree/api/incrementalAllowedTypes.d.ts.map +1 -1
- package/lib/simple-tree/api/incrementalAllowedTypes.js +3 -3
- package/lib/simple-tree/api/incrementalAllowedTypes.js.map +1 -1
- package/lib/simple-tree/api/schemaCompatibilityTester.d.ts +1 -1
- package/lib/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaCompatibilityTester.js +1 -1
- package/lib/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
- package/lib/simple-tree/api/schemaCreationUtilities.d.ts +2 -2
- package/lib/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaCreationUtilities.js +1 -1
- package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
- package/lib/simple-tree/api/schemaFactory.d.ts +2 -2
- package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactory.js +2 -2
- package/lib/simple-tree/api/schemaFactory.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +6 -6
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.js +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryBeta.d.ts +2 -2
- package/lib/simple-tree/api/schemaFactoryBeta.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactoryBeta.js +1 -0
- package/lib/simple-tree/api/schemaFactoryBeta.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
- package/lib/simple-tree/api/schemaFromSimple.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFromSimple.js.map +1 -1
- 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/simpleSchemaCodec.d.ts +1 -1
- package/lib/simple-tree/api/simpleSchemaCodec.d.ts.map +1 -1
- package/lib/simple-tree/api/simpleSchemaCodec.js +3 -3
- package/lib/simple-tree/api/simpleSchemaCodec.js.map +1 -1
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.d.ts +2 -2
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +2 -2
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
- package/lib/simple-tree/api/simpleTreeIndex.d.ts +1 -1
- package/lib/simple-tree/api/simpleTreeIndex.d.ts.map +1 -1
- package/lib/simple-tree/api/simpleTreeIndex.js +1 -1
- package/lib/simple-tree/api/simpleTreeIndex.js.map +1 -1
- package/lib/simple-tree/api/snapshotCompatibilityChecker.d.ts.map +1 -1
- package/lib/simple-tree/api/snapshotCompatibilityChecker.js +5 -5
- 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.map +1 -1
- package/lib/simple-tree/api/tree.d.ts +2 -2
- 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/treeBeta.d.ts +1 -1
- package/lib/simple-tree/api/treeBeta.d.ts.map +1 -1
- package/lib/simple-tree/api/treeBeta.js +2 -2
- package/lib/simple-tree/api/treeBeta.js.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.js +4 -4
- package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
- package/lib/simple-tree/api/typesUnsafe.d.ts +1 -1
- package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -1
- package/lib/simple-tree/api/typesUnsafe.js.map +1 -1
- package/lib/simple-tree/api/verboseTree.d.ts +1 -1
- package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
- package/lib/simple-tree/api/verboseTree.js +3 -3
- package/lib/simple-tree/api/verboseTree.js.map +1 -1
- package/lib/simple-tree/core/allowedTypes.d.ts +1 -1
- package/lib/simple-tree/core/allowedTypes.d.ts.map +1 -1
- package/lib/simple-tree/core/allowedTypes.js +2 -2
- package/lib/simple-tree/core/allowedTypes.js.map +1 -1
- package/lib/simple-tree/core/context.d.ts.map +1 -1
- package/lib/simple-tree/core/context.js.map +1 -1
- package/lib/simple-tree/core/treeNode.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNode.js +1 -1
- package/lib/simple-tree/core/treeNode.js.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js +1 -3
- package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.d.ts +5 -5
- package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/lib/simple-tree/core/treeNodeValid.d.ts +3 -3
- package/lib/simple-tree/core/treeNodeValid.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeValid.js +2 -2
- package/lib/simple-tree/core/treeNodeValid.js.map +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.d.ts +16 -16
- package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.js +8 -58
- package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
- package/lib/simple-tree/core/withType.d.ts.map +1 -1
- package/lib/simple-tree/core/withType.js.map +1 -1
- package/lib/simple-tree/createContext.d.ts.map +1 -1
- package/lib/simple-tree/createContext.js.map +1 -1
- package/lib/simple-tree/fieldSchema.d.ts +5 -5
- package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
- package/lib/simple-tree/fieldSchema.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 +1 -1
- package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/leafNodeSchema.js +2 -2
- package/lib/simple-tree/leafNodeSchema.js.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.d.ts +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.js +6 -8
- package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNodeTypes.d.ts +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNodeTypes.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNodeTypes.js.map +1 -1
- package/lib/simple-tree/node-kinds/common.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/common.js +2 -2
- package/lib/simple-tree/node-kinds/common.js.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.d.ts +2 -2
- package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.js +8 -8
- package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNodeTypes.d.ts +1 -1
- package/lib/simple-tree/node-kinds/map/mapNodeTypes.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNodeTypes.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.d.ts +2 -2
- package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.js +22 -22
- package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNodeTypes.d.ts +3 -3
- package/lib/simple-tree/node-kinds/object/objectNodeTypes.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNodeTypes.js.map +1 -1
- package/lib/simple-tree/node-kinds/record/recordNode.d.ts +1 -1
- package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/record/recordNode.js +6 -8
- package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/record/recordNodeTypes.d.ts +1 -1
- package/lib/simple-tree/node-kinds/record/recordNodeTypes.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/record/recordNodeTypes.js.map +1 -1
- package/lib/simple-tree/prepareForInsertion.d.ts +47 -54
- package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
- package/lib/simple-tree/prepareForInsertion.js +125 -184
- package/lib/simple-tree/prepareForInsertion.js.map +1 -1
- package/lib/simple-tree/simpleSchema.d.ts.map +1 -1
- package/lib/simple-tree/simpleSchema.js.map +1 -1
- package/lib/simple-tree/treeSchema.d.ts.map +1 -1
- package/lib/simple-tree/treeSchema.js.map +1 -1
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +4 -13
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +13 -30
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
- package/lib/tableSchema.d.ts.map +1 -1
- package/lib/tableSchema.js +2 -1
- package/lib/tableSchema.js.map +1 -1
- package/lib/text/index.d.ts +1 -0
- package/lib/text/index.d.ts.map +1 -1
- package/lib/text/index.js +1 -0
- package/lib/text/index.js.map +1 -1
- package/lib/text/textDomain.d.ts +8 -0
- package/lib/text/textDomain.d.ts.map +1 -1
- package/lib/text/textDomain.js +1 -1
- package/lib/text/textDomain.js.map +1 -1
- package/lib/text/textDomainFormatted.d.ts +572 -0
- package/lib/text/textDomainFormatted.d.ts.map +1 -0
- package/lib/text/textDomainFormatted.js +180 -0
- package/lib/text/textDomainFormatted.js.map +1 -0
- package/lib/treeFactory.d.ts.map +1 -1
- package/lib/treeFactory.js +4 -14
- package/lib/treeFactory.js.map +1 -1
- package/lib/util/bTreeUtils.d.ts.map +1 -1
- package/lib/util/bTreeUtils.js +1 -1
- package/lib/util/bTreeUtils.js.map +1 -1
- package/lib/util/index.d.ts +1 -1
- package/lib/util/index.d.ts.map +1 -1
- package/lib/util/index.js +1 -1
- package/lib/util/index.js.map +1 -1
- package/lib/util/rangeMap.d.ts +12 -24
- package/lib/util/rangeMap.d.ts.map +1 -1
- package/lib/util/rangeMap.js +5 -44
- package/lib/util/rangeMap.js.map +1 -1
- package/lib/util/readSnapshotBlob.d.ts +1 -1
- package/lib/util/readSnapshotBlob.d.ts.map +1 -1
- package/lib/util/readSnapshotBlob.js.map +1 -1
- package/package.json +22 -22
- package/src/codec/codec.ts +10 -7
- package/src/codec/versioned/codec.ts +3 -3
- package/src/core/change-family/changeFamily.ts +0 -5
- package/src/core/change-family/index.ts +0 -1
- package/src/core/index.ts +1 -4
- package/src/core/rebase/changeRebaser.ts +1 -6
- package/src/core/rebase/index.ts +0 -1
- package/src/core/rebase/types.ts +1 -8
- package/src/core/rebase/utils.ts +7 -31
- package/src/core/schema-stored/formatV2.ts +2 -1
- package/src/core/tree/anchorSet.ts +1 -1
- package/src/core/tree/detachedFieldIndex.ts +2 -18
- package/src/core/tree/detachedFieldIndexCodecCommon.ts +2 -1
- package/src/core/tree/detachedFieldIndexCodecV1.ts +2 -2
- package/src/core/tree/detachedFieldIndexCodecV2.ts +3 -3
- package/src/core/tree/detachedFieldIndexFormatV1.ts +3 -2
- package/src/core/tree/detachedFieldIndexFormatV2.ts +3 -2
- package/src/core/tree/index.ts +1 -2
- package/src/core/tree/pathTree.ts +4 -16
- package/src/core/tree/visitDelta.ts +2 -3
- package/src/core/tree/visitorUtils.ts +2 -1
- package/src/feature-libraries/changeAtomIdBTree.ts +4 -28
- package/src/feature-libraries/chunked-forest/basicChunk.ts +1 -7
- package/src/feature-libraries/chunked-forest/chunkTree.ts +2 -7
- package/src/feature-libraries/chunked-forest/codec/chunkDecoding.ts +1 -1
- package/src/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.ts +1 -1
- package/src/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.ts +1 -1
- package/src/feature-libraries/chunked-forest/codec/codecs.ts +2 -2
- package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +1 -1
- package/src/feature-libraries/chunked-forest/codec/format.ts +1 -1
- package/src/feature-libraries/chunked-forest/codec/formatGeneric.ts +1 -0
- package/src/feature-libraries/chunked-forest/codec/schemaBasedEncode.ts +3 -3
- package/src/feature-libraries/default-schema/defaultEditBuilder.ts +128 -405
- package/src/feature-libraries/default-schema/defaultFieldKinds.ts +27 -123
- package/src/feature-libraries/default-schema/index.ts +5 -22
- package/src/feature-libraries/default-schema/mappedEditBuilder.ts +9 -35
- package/src/feature-libraries/deltaUtils.ts +1 -6
- package/src/feature-libraries/fieldKindIdentifiers.ts +16 -0
- package/src/feature-libraries/flex-tree/context.ts +0 -17
- package/src/feature-libraries/flex-tree/flexTreeTypes.ts +8 -7
- package/src/feature-libraries/flex-tree/lazyField.ts +26 -69
- package/src/feature-libraries/flex-tree/observer.ts +3 -1
- package/src/feature-libraries/forest-summary/codec.ts +1 -1
- package/src/feature-libraries/forest-summary/forestSummarizer.ts +6 -6
- package/src/feature-libraries/forest-summary/formatV1.ts +1 -0
- package/src/feature-libraries/forest-summary/formatV2.ts +1 -0
- package/src/feature-libraries/forest-summary/incrementalSummaryBuilder.ts +9 -7
- package/src/feature-libraries/forest-summary/summaryTypes.ts +1 -0
- package/src/feature-libraries/index.ts +8 -27
- package/src/feature-libraries/mapTreeCursor.ts +2 -3
- package/src/feature-libraries/mitigatedChangeFamily.ts +1 -3
- package/src/feature-libraries/modular-schema/crossFieldQueries.ts +44 -142
- package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +58 -32
- package/src/feature-libraries/modular-schema/fieldKindConfiguration.ts +1 -0
- package/src/feature-libraries/modular-schema/genericFieldKind.ts +20 -8
- package/src/feature-libraries/modular-schema/index.ts +15 -16
- package/src/feature-libraries/modular-schema/modularChangeCodecV1.ts +336 -543
- package/src/feature-libraries/modular-schema/modularChangeCodecV2.ts +2 -2
- package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +3 -15
- package/src/feature-libraries/modular-schema/modularChangeFamily.ts +753 -2582
- package/src/feature-libraries/modular-schema/modularChangeFormatV1.ts +0 -1
- package/src/feature-libraries/modular-schema/modularChangeTypes.ts +8 -55
- package/src/feature-libraries/object-forest/objectForest.ts +2 -2
- package/src/feature-libraries/optional-field/index.ts +5 -5
- package/src/feature-libraries/optional-field/optionalField.ts +592 -317
- package/src/feature-libraries/optional-field/optionalFieldChangeTypes.ts +38 -24
- package/src/feature-libraries/optional-field/optionalFieldCodecV2.ts +35 -89
- package/src/feature-libraries/optional-field/optionalFieldCodecs.ts +1 -5
- package/src/feature-libraries/optional-field/requiredField.ts +62 -0
- package/src/feature-libraries/schema-edits/schemaChangeCodecs.ts +1 -1
- package/src/feature-libraries/schema-edits/schemaChangeFormat.ts +1 -0
- package/src/feature-libraries/schemaChecker.ts +3 -2
- package/src/feature-libraries/sequence-field/compose.ts +522 -139
- package/src/feature-libraries/sequence-field/helperTypes.ts +19 -34
- package/src/feature-libraries/sequence-field/index.ts +2 -42
- package/src/feature-libraries/sequence-field/invert.ts +228 -103
- package/src/feature-libraries/sequence-field/markQueue.ts +2 -2
- package/src/feature-libraries/sequence-field/moveEffectTable.ts +195 -8
- package/src/feature-libraries/sequence-field/rebase.ts +205 -169
- package/src/feature-libraries/sequence-field/relevantRemovedRoots.ts +57 -0
- package/src/feature-libraries/sequence-field/replaceRevisions.ts +47 -25
- package/src/feature-libraries/sequence-field/sequenceFieldChangeHandler.ts +2 -0
- package/src/feature-libraries/sequence-field/sequenceFieldCodecV2.ts +228 -648
- package/src/feature-libraries/sequence-field/sequenceFieldCodecV3.ts +70 -56
- package/src/feature-libraries/sequence-field/sequenceFieldEditor.ts +27 -25
- package/src/feature-libraries/sequence-field/sequenceFieldToDelta.ts +129 -19
- package/src/feature-libraries/sequence-field/sequenceKind.ts +40 -0
- package/src/feature-libraries/sequence-field/types.ts +64 -34
- package/src/feature-libraries/sequence-field/utils.ts +353 -139
- package/src/index.ts +1 -1
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/independentView.ts +4 -3
- package/src/shared-tree/index.ts +2 -3
- package/src/shared-tree/schematizeTree.ts +8 -21
- package/src/shared-tree/schematizingTreeView.ts +79 -61
- package/src/shared-tree/sharedTree.ts +10 -64
- package/src/shared-tree/sharedTreeChangeCodecs.ts +2 -5
- package/src/shared-tree/sharedTreeChangeEnricher.ts +87 -68
- package/src/shared-tree/sharedTreeChangeFamily.ts +5 -15
- package/src/shared-tree/sharedTreeEditBuilder.ts +8 -39
- package/src/shared-tree/tree.ts +10 -10
- package/src/shared-tree/treeAlpha.ts +26 -25
- package/src/shared-tree/treeCheckout.ts +119 -94
- package/src/shared-tree-core/branch.ts +6 -12
- package/src/shared-tree-core/branchCommitEnricher.ts +25 -77
- package/src/shared-tree-core/branchIdCodec.ts +1 -0
- package/src/shared-tree-core/changeEnricher.ts +8 -52
- package/src/shared-tree-core/defaultResubmitMachine.ts +39 -51
- package/src/shared-tree-core/editManager.ts +8 -22
- package/src/shared-tree-core/editManagerCodecs.ts +3 -13
- package/src/shared-tree-core/editManagerCodecsCommons.ts +7 -6
- package/src/shared-tree-core/editManagerCodecsV1toV4.ts +1 -1
- package/src/shared-tree-core/editManagerCodecsVSharedBranches.ts +2 -2
- package/src/shared-tree-core/editManagerFormatCommons.ts +1 -6
- package/src/shared-tree-core/editManagerFormatV1toV4.ts +2 -3
- package/src/shared-tree-core/editManagerFormatVSharedBranches.ts +3 -2
- package/src/shared-tree-core/index.ts +2 -7
- package/src/shared-tree-core/messageCodecV1ToV4.ts +4 -5
- package/src/shared-tree-core/messageCodecVSharedBranches.ts +4 -4
- package/src/shared-tree-core/messageCodecs.ts +3 -13
- package/src/shared-tree-core/messageFormat.ts +0 -6
- package/src/shared-tree-core/messageFormatV1ToV4.ts +2 -3
- package/src/shared-tree-core/messageFormatVSharedBranches.ts +1 -0
- package/src/shared-tree-core/messageTypes.ts +1 -0
- package/src/shared-tree-core/sharedTreeCore.ts +27 -31
- package/src/shared-tree-core/versionedSummarizer.ts +3 -1
- package/src/simple-tree/api/configuration.ts +9 -9
- package/src/simple-tree/api/create.ts +7 -6
- package/src/simple-tree/api/dirtyIndex.ts +4 -2
- package/src/simple-tree/api/discrepancies.ts +9 -8
- package/src/simple-tree/api/getJsonSchema.ts +4 -3
- package/src/simple-tree/api/identifierIndex.ts +4 -2
- package/src/simple-tree/api/incrementalAllowedTypes.ts +6 -5
- package/src/simple-tree/api/schemaCompatibilityTester.ts +3 -3
- package/src/simple-tree/api/schemaCreationUtilities.ts +4 -3
- package/src/simple-tree/api/schemaFactory.ts +16 -17
- package/src/simple-tree/api/schemaFactoryAlpha.ts +21 -21
- package/src/simple-tree/api/schemaFactoryBeta.ts +17 -15
- package/src/simple-tree/api/schemaFactoryRecursive.ts +1 -1
- package/src/simple-tree/api/schemaFromSimple.ts +1 -1
- package/src/simple-tree/api/schemaStatics.ts +2 -0
- package/src/simple-tree/api/simpleSchemaCodec.ts +12 -11
- package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +20 -18
- package/src/simple-tree/api/simpleTreeIndex.ts +6 -4
- package/src/simple-tree/api/snapshotCompatibilityChecker.ts +7 -5
- package/src/simple-tree/api/storedSchema.ts +2 -1
- package/src/simple-tree/api/tree.ts +2 -2
- package/src/simple-tree/api/treeBeta.ts +3 -3
- package/src/simple-tree/api/treeNodeApi.ts +14 -13
- package/src/simple-tree/api/typesUnsafe.ts +7 -8
- package/src/simple-tree/api/verboseTree.ts +6 -5
- package/src/simple-tree/core/allowedTypes.ts +4 -4
- package/src/simple-tree/core/context.ts +1 -1
- package/src/simple-tree/core/treeNode.ts +1 -1
- package/src/simple-tree/core/treeNodeKernel.ts +1 -3
- package/src/simple-tree/core/treeNodeSchema.ts +7 -6
- package/src/simple-tree/core/treeNodeValid.ts +9 -9
- package/src/simple-tree/core/unhydratedFlexTree.ts +37 -88
- package/src/simple-tree/core/withType.ts +3 -2
- package/src/simple-tree/createContext.ts +1 -0
- package/src/simple-tree/fieldSchema.ts +5 -8
- package/src/simple-tree/index.ts +1 -2
- package/src/simple-tree/leafNodeSchema.ts +3 -3
- package/src/simple-tree/node-kinds/array/arrayNode.ts +20 -21
- package/src/simple-tree/node-kinds/array/arrayNodeTypes.ts +2 -2
- package/src/simple-tree/node-kinds/common.ts +6 -3
- package/src/simple-tree/node-kinds/map/mapNode.ts +20 -19
- package/src/simple-tree/node-kinds/map/mapNodeTypes.ts +2 -2
- package/src/simple-tree/node-kinds/object/objectNode.ts +37 -37
- package/src/simple-tree/node-kinds/object/objectNodeTypes.ts +8 -7
- package/src/simple-tree/node-kinds/record/recordNode.ts +21 -22
- package/src/simple-tree/node-kinds/record/recordNodeTypes.ts +1 -2
- package/src/simple-tree/prepareForInsertion.ts +205 -345
- package/src/simple-tree/simpleSchema.ts +1 -0
- package/src/simple-tree/treeSchema.ts +1 -0
- package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +16 -44
- package/src/tableSchema.ts +3 -1
- package/src/text/index.ts +1 -0
- package/src/text/textDomain.ts +1 -1
- package/src/text/textDomainFormatted.ts +309 -0
- package/src/treeFactory.ts +8 -18
- package/src/util/bTreeUtils.ts +1 -1
- package/src/util/index.ts +0 -3
- package/src/util/rangeMap.ts +18 -72
- package/src/util/readSnapshotBlob.ts +4 -2
- package/dist/feature-libraries/default-schema/locationBasedEditBuilder.d.ts +0 -38
- package/dist/feature-libraries/default-schema/locationBasedEditBuilder.d.ts.map +0 -1
- package/dist/feature-libraries/default-schema/locationBasedEditBuilder.js +0 -132
- package/dist/feature-libraries/default-schema/locationBasedEditBuilder.js.map +0 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecV3.d.ts +0 -15
- package/dist/feature-libraries/modular-schema/modularChangeCodecV3.d.ts.map +0 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecV3.js +0 -393
- package/dist/feature-libraries/modular-schema/modularChangeCodecV3.js.map +0 -1
- package/dist/feature-libraries/modular-schema/modularChangeFormatV3.d.ts +0 -146
- package/dist/feature-libraries/modular-schema/modularChangeFormatV3.d.ts.map +0 -1
- package/dist/feature-libraries/modular-schema/modularChangeFormatV3.js +0 -32
- package/dist/feature-libraries/modular-schema/modularChangeFormatV3.js.map +0 -1
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts +0 -23
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts.map +0 -1
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.js +0 -31
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.js.map +0 -1
- package/dist/feature-libraries/optional-field/optionalFieldCodecV3.d.ts +0 -12
- package/dist/feature-libraries/optional-field/optionalFieldCodecV3.d.ts.map +0 -1
- package/dist/feature-libraries/optional-field/optionalFieldCodecV3.js +0 -57
- package/dist/feature-libraries/optional-field/optionalFieldCodecV3.js.map +0 -1
- package/dist/shared-tree-core/transactionEnricher.d.ts +0 -23
- package/dist/shared-tree-core/transactionEnricher.d.ts.map +0 -1
- package/dist/shared-tree-core/transactionEnricher.js +0 -74
- package/dist/shared-tree-core/transactionEnricher.js.map +0 -1
- package/lib/feature-libraries/default-schema/locationBasedEditBuilder.d.ts +0 -38
- package/lib/feature-libraries/default-schema/locationBasedEditBuilder.d.ts.map +0 -1
- package/lib/feature-libraries/default-schema/locationBasedEditBuilder.js +0 -128
- package/lib/feature-libraries/default-schema/locationBasedEditBuilder.js.map +0 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecV3.d.ts +0 -15
- package/lib/feature-libraries/modular-schema/modularChangeCodecV3.d.ts.map +0 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecV3.js +0 -389
- package/lib/feature-libraries/modular-schema/modularChangeCodecV3.js.map +0 -1
- package/lib/feature-libraries/modular-schema/modularChangeFormatV3.d.ts +0 -146
- package/lib/feature-libraries/modular-schema/modularChangeFormatV3.d.ts.map +0 -1
- package/lib/feature-libraries/modular-schema/modularChangeFormatV3.js +0 -29
- package/lib/feature-libraries/modular-schema/modularChangeFormatV3.js.map +0 -1
- package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts +0 -23
- package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts.map +0 -1
- package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.js +0 -27
- package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.js.map +0 -1
- package/lib/feature-libraries/optional-field/optionalFieldCodecV3.d.ts +0 -12
- package/lib/feature-libraries/optional-field/optionalFieldCodecV3.d.ts.map +0 -1
- package/lib/feature-libraries/optional-field/optionalFieldCodecV3.js +0 -53
- package/lib/feature-libraries/optional-field/optionalFieldCodecV3.js.map +0 -1
- package/lib/shared-tree-core/transactionEnricher.d.ts +0 -23
- package/lib/shared-tree-core/transactionEnricher.d.ts.map +0 -1
- package/lib/shared-tree-core/transactionEnricher.js +0 -70
- package/lib/shared-tree-core/transactionEnricher.js.map +0 -1
- package/src/feature-libraries/default-schema/locationBasedEditBuilder.ts +0 -188
- package/src/feature-libraries/modular-schema/modularChangeCodecV3.ts +0 -760
- package/src/feature-libraries/modular-schema/modularChangeFormatV3.ts +0 -62
- package/src/feature-libraries/optional-field/optionalFieldChangeFormatV3.ts +0 -45
- package/src/feature-libraries/optional-field/optionalFieldCodecV3.ts +0 -94
- package/src/shared-tree-core/transactionEnricher.ts +0 -74
|
@@ -4,19 +4,19 @@
|
|
|
4
4
|
* Licensed under the MIT License.
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.
|
|
7
|
+
exports.normalizeFieldId = exports.getParentFieldId = exports.ModularEditBuilder = exports.getChangeHandler = exports.getFieldKind = exports.rebaseRevisionMetadataFromInfo = exports.intoDelta = exports.updateRefreshers = exports.relevantRemovedRoots = exports.ModularChangeFamily = void 0;
|
|
8
8
|
const internal_1 = require("@fluidframework/core-utils/internal");
|
|
9
|
-
const sorted_btree_es6_1 = require("@tylerbu/sorted-btree-es6");
|
|
10
9
|
const internal_2 = require("@fluidframework/telemetry-utils/internal");
|
|
10
|
+
const sorted_btree_es6_1 = require("@tylerbu/sorted-btree-es6");
|
|
11
|
+
const semver_ts_1 = require("semver-ts");
|
|
11
12
|
const index_js_1 = require("../../codec/index.js");
|
|
12
13
|
const index_js_2 = require("../../core/index.js");
|
|
13
14
|
const index_js_3 = require("../../util/index.js");
|
|
15
|
+
const changeAtomIdBTree_js_1 = require("../changeAtomIdBTree.js");
|
|
14
16
|
const crossFieldQueries_js_1 = require("./crossFieldQueries.js");
|
|
15
17
|
const fieldChangeHandler_js_1 = require("./fieldChangeHandler.js");
|
|
16
18
|
const genericFieldKind_js_1 = require("./genericFieldKind.js");
|
|
17
19
|
const modularChangeTypes_js_1 = require("./modularChangeTypes.js");
|
|
18
|
-
const semver_ts_1 = require("semver-ts");
|
|
19
|
-
const changeAtomIdBTree_js_1 = require("../changeAtomIdBTree.js");
|
|
20
20
|
/**
|
|
21
21
|
* Implementation of ChangeFamily which delegates work in a given field to the appropriate FieldKind
|
|
22
22
|
* as determined by the schema.
|
|
@@ -72,22 +72,21 @@ class ModularChangeFamily {
|
|
|
72
72
|
return convertedChange;
|
|
73
73
|
}
|
|
74
74
|
compose(changes) {
|
|
75
|
-
const { maxId } = getRevInfoFromTaggedChanges(changes);
|
|
75
|
+
const { revInfos, maxId } = getRevInfoFromTaggedChanges(changes);
|
|
76
76
|
const idState = { maxId };
|
|
77
77
|
const pairwiseDelegate = (left, right) => {
|
|
78
|
-
return this.composePair(left, right, idState);
|
|
78
|
+
return this.composePair(left, right, revInfos, idState);
|
|
79
79
|
};
|
|
80
80
|
const innerChanges = changes.map((change) => change.change);
|
|
81
81
|
return (0, index_js_3.balancedReduce)(innerChanges, pairwiseDelegate, makeModularChangeset);
|
|
82
82
|
}
|
|
83
|
-
composePair(change1, change2, idState) {
|
|
84
|
-
const
|
|
85
|
-
const { fieldChanges, nodeChanges, nodeToParent, nodeAliases, crossFieldKeys, rootNodes } = this.composeAllFields(change1, change2, revInfos, idState);
|
|
83
|
+
composePair(change1, change2, revInfos, idState) {
|
|
84
|
+
const { fieldChanges, nodeChanges, nodeToParent, nodeAliases, crossFieldKeys } = this.composeAllFields(change1, change2, revInfos, idState);
|
|
86
85
|
const { allBuilds, allDestroys, allRefreshers } = composeBuildsDestroysAndRefreshers(change1, change2);
|
|
87
86
|
// The composed changeset has a "no change" constraint if either change has one
|
|
88
87
|
const noChangeConstraint = change1.noChangeConstraint ?? change2.noChangeConstraint;
|
|
89
88
|
const noChangeConstraintOnRevert = change1.noChangeConstraintOnRevert ?? change2.noChangeConstraintOnRevert;
|
|
90
|
-
|
|
89
|
+
return makeModularChangeset({
|
|
91
90
|
fieldChanges,
|
|
92
91
|
nodeChanges,
|
|
93
92
|
nodeToParent,
|
|
@@ -95,16 +94,12 @@ class ModularChangeFamily {
|
|
|
95
94
|
crossFieldKeys,
|
|
96
95
|
maxId: idState.maxId,
|
|
97
96
|
revisions: revInfos,
|
|
98
|
-
|
|
97
|
+
noChangeConstraint,
|
|
98
|
+
noChangeConstraintOnRevert,
|
|
99
99
|
builds: allBuilds,
|
|
100
100
|
destroys: allDestroys,
|
|
101
101
|
refreshers: allRefreshers,
|
|
102
|
-
noChangeConstraint,
|
|
103
|
-
noChangeConstraintOnRevert,
|
|
104
102
|
});
|
|
105
|
-
// XXX: This is an expensive assert which should be disabled before merging.
|
|
106
|
-
validateChangeset(composed, this.fieldKinds);
|
|
107
|
-
return composed;
|
|
108
103
|
}
|
|
109
104
|
composeAllFields(potentiallyConflictedChange1, potentiallyConflictedChange2, revInfos, idState) {
|
|
110
105
|
// Our current cell ordering scheme in sequences depends on being able to rebase over a change with conflicts.
|
|
@@ -125,50 +120,34 @@ class ModularChangeFamily {
|
|
|
125
120
|
const composedNodeChanges = (0, index_js_3.brand)((0, index_js_3.mergeTupleBTrees)(change1.nodeChanges, change2.nodeChanges));
|
|
126
121
|
const composedNodeToParent = (0, index_js_3.brand)((0, index_js_3.mergeTupleBTrees)(change1.nodeToParent, change2.nodeToParent));
|
|
127
122
|
const composedNodeAliases = (0, index_js_3.brand)((0, index_js_3.mergeTupleBTrees)(change1.nodeAliases, change2.nodeAliases));
|
|
128
|
-
const
|
|
129
|
-
nodeIdsToCompose: [],
|
|
130
|
-
affectedBaseFields: (0, index_js_3.newTupleBTree)(),
|
|
131
|
-
};
|
|
132
|
-
const movedCrossFieldKeys = (0, modularChangeTypes_js_1.newCrossFieldRangeTable)();
|
|
133
|
-
const removedCrossFieldKeys = (0, modularChangeTypes_js_1.newCrossFieldRangeTable)();
|
|
134
|
-
const composedRoots = composeRootTables(change1, change2, composedNodeToParent, movedCrossFieldKeys, removedCrossFieldKeys, pendingCompositions);
|
|
135
|
-
const crossFieldTable = newComposeTable(change1, change2, composedRoots, movedCrossFieldKeys, removedCrossFieldKeys, pendingCompositions);
|
|
123
|
+
const crossFieldTable = newComposeTable(change1, change2, composedNodeToParent);
|
|
136
124
|
const composedFields = this.composeFieldMaps(change1.fieldChanges, change2.fieldChanges, undefined, genId, crossFieldTable, revisionMetadata);
|
|
137
125
|
this.composeInvalidatedElements(crossFieldTable, composedFields, composedNodeChanges, composedNodeToParent, composedNodeAliases, genId, revisionMetadata);
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
}
|
|
141
|
-
for (const [nodeId, location] of crossFieldTable.movedNodeToParent.entries()) {
|
|
142
|
-
// Moved nodes are from change2.
|
|
143
|
-
// If there is a corresponding node in change1, then composedNodeToParent will already have the correct entry,
|
|
144
|
-
// because the location of the node is the same in change1 and the composed change
|
|
145
|
-
// (since they have the same input context).
|
|
146
|
-
if (crossFieldTable.newToBaseNodeId.get(nodeId) === undefined) {
|
|
147
|
-
composedNodeToParent.set(nodeId, location);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
126
|
+
// Currently no field kinds require making changes to cross-field keys during composition, so we can just merge the two tables.
|
|
127
|
+
const composedCrossFieldKeys = index_js_3.RangeMap.union(change1.crossFieldKeys, change2.crossFieldKeys);
|
|
150
128
|
return {
|
|
151
129
|
fieldChanges: composedFields,
|
|
152
130
|
nodeChanges: composedNodeChanges,
|
|
153
131
|
nodeToParent: composedNodeToParent,
|
|
154
132
|
nodeAliases: composedNodeAliases,
|
|
155
|
-
crossFieldKeys:
|
|
156
|
-
rootNodes: composedRoots,
|
|
133
|
+
crossFieldKeys: composedCrossFieldKeys,
|
|
157
134
|
};
|
|
158
135
|
}
|
|
159
136
|
composeInvalidatedField(fieldChange, crossFieldTable, genId, revisionMetadata) {
|
|
160
137
|
const context = crossFieldTable.fieldToContext.get(fieldChange);
|
|
161
138
|
(0, internal_1.assert)(context !== undefined, 0x8cc /* Should have context for every invalidated field */);
|
|
162
|
-
const { change1: fieldChange1, change2: fieldChange2, composedChange } = context;
|
|
163
|
-
crossFieldTable.pendingCompositions.affectedBaseFields.delete(fieldIdKeyFromFieldId(context.fieldId));
|
|
139
|
+
const { fieldId, change1: fieldChange1, change2: fieldChange2, composedChange } = context;
|
|
164
140
|
const rebaser = getChangeHandler(this.fieldKinds, composedChange.fieldKind).rebaser;
|
|
165
141
|
const composeNodes = (child1, child2) => {
|
|
166
|
-
if (child1 !== undefined &&
|
|
167
|
-
|
|
142
|
+
if (child1 !== undefined &&
|
|
143
|
+
child2 !== undefined &&
|
|
144
|
+
(0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(crossFieldTable.newToBaseNodeId, child2) === undefined) {
|
|
145
|
+
(0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(crossFieldTable.newToBaseNodeId, child2, child1);
|
|
146
|
+
crossFieldTable.pendingCompositions.nodeIdsToCompose.push([child1, child2]);
|
|
168
147
|
}
|
|
169
148
|
return child1 ?? child2 ?? (0, internal_1.fail)(0xb22 /* Should not compose two undefined nodes */);
|
|
170
149
|
};
|
|
171
|
-
const amendedChange = rebaser.compose(fieldChange1, fieldChange2, composeNodes, genId, new
|
|
150
|
+
const amendedChange = rebaser.compose(fieldChange1, fieldChange2, composeNodes, genId, new ComposeManager(crossFieldTable, fieldChange, fieldId, false), revisionMetadata);
|
|
172
151
|
composedChange.change = (0, index_js_3.brand)(amendedChange);
|
|
173
152
|
}
|
|
174
153
|
/**
|
|
@@ -177,23 +156,32 @@ class ModularChangeFamily {
|
|
|
177
156
|
* - discovering that two node changesets refer to the same node (`nodeIdsToCompose`)
|
|
178
157
|
* - a previously composed field being invalidated by a cross field effect (`invalidatedFields`)
|
|
179
158
|
* - a field which was copied directly from an input changeset being invalidated by a cross field effect
|
|
180
|
-
* (`affectedBaseFields`)
|
|
159
|
+
* (`affectedBaseFields` and `affectedNewFields`)
|
|
181
160
|
*
|
|
182
161
|
* Updating an element may invalidate further elements. This function runs until there is no more invalidation.
|
|
183
162
|
*/
|
|
184
163
|
composeInvalidatedElements(table, composedFields, composedNodes, composedNodeToParent, nodeAliases, genId, metadata) {
|
|
185
164
|
const pending = table.pendingCompositions;
|
|
186
|
-
while (
|
|
187
|
-
|
|
188
|
-
|
|
165
|
+
while (table.invalidatedFields.size > 0 ||
|
|
166
|
+
pending.nodeIdsToCompose.length > 0 ||
|
|
167
|
+
pending.affectedBaseFields.length > 0 ||
|
|
168
|
+
pending.affectedNewFields.length > 0) {
|
|
169
|
+
// Note that the call to `composeNodesById` can add entries to `crossFieldTable.nodeIdPairs`.
|
|
170
|
+
for (const [id1, id2] of pending.nodeIdsToCompose) {
|
|
171
|
+
this.composeNodesById(table.baseChange.nodeChanges, table.newChange.nodeChanges, composedNodes, composedNodeToParent, nodeAliases, id1, id2, genId, table, metadata);
|
|
172
|
+
}
|
|
173
|
+
pending.nodeIdsToCompose.length = 0;
|
|
174
|
+
this.composeAffectedFields(table, table.baseChange, true, pending.affectedBaseFields, composedFields, composedNodes, genId, metadata);
|
|
175
|
+
this.composeAffectedFields(table, table.newChange, false, pending.affectedNewFields, composedFields, composedNodes, genId, metadata);
|
|
176
|
+
this.processInvalidatedCompositions(table, genId, metadata);
|
|
189
177
|
}
|
|
190
178
|
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
179
|
+
processInvalidatedCompositions(table, genId, metadata) {
|
|
180
|
+
const fieldsToUpdate = table.invalidatedFields;
|
|
181
|
+
table.invalidatedFields = new Set();
|
|
182
|
+
for (const fieldChange of fieldsToUpdate) {
|
|
183
|
+
this.composeInvalidatedField(fieldChange, table, genId, metadata);
|
|
195
184
|
}
|
|
196
|
-
table.pendingCompositions.nodeIdsToCompose.length = 0;
|
|
197
185
|
}
|
|
198
186
|
/**
|
|
199
187
|
* Ensures that each field in `affectedFields` has been updated in the composition output.
|
|
@@ -206,36 +194,39 @@ class ModularChangeFamily {
|
|
|
206
194
|
* If not, they are assumed to be part of the new changeset.
|
|
207
195
|
* @param affectedFields - The set of fields to process.
|
|
208
196
|
*/
|
|
209
|
-
composeAffectedFields(table, change, affectedFields, composedFields, composedNodes, genId, metadata) {
|
|
210
|
-
const
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
const fieldId = fieldIdFromFieldIdKey(fieldIdKey);
|
|
214
|
-
const fieldChange = fieldChangeFromId(change, fieldId);
|
|
197
|
+
composeAffectedFields(table, change, areBaseFields, affectedFields, composedFields, composedNodes, genId, metadata) {
|
|
198
|
+
for (const fieldIdKey of affectedFields.keys()) {
|
|
199
|
+
const fieldId = normalizeFieldId(fieldIdFromFieldIdKey(fieldIdKey), change.nodeAliases);
|
|
200
|
+
const fieldChange = fieldChangeFromId(change.fieldChanges, change.nodeChanges, fieldId);
|
|
215
201
|
if (table.fieldToContext.has(fieldChange) ||
|
|
216
202
|
table.newFieldToBaseField.has(fieldChange)) {
|
|
217
|
-
|
|
203
|
+
// This function handles fields which were not part of the intersection of the two changesets but which need to be updated anyway.
|
|
204
|
+
// If we've already processed this field then either it is up to date
|
|
205
|
+
// or there is pending inval which will be handled in processInvalidatedCompositions.
|
|
206
|
+
continue;
|
|
218
207
|
}
|
|
219
|
-
|
|
220
|
-
|
|
208
|
+
const emptyChange = this.createEmptyFieldChange(fieldChange.fieldKind);
|
|
209
|
+
const [change1, change2] = areBaseFields
|
|
210
|
+
? [fieldChange, emptyChange]
|
|
211
|
+
: [emptyChange, fieldChange];
|
|
212
|
+
const composedField = this.composeFieldChanges(fieldId, change1, change2, genId, table, metadata);
|
|
213
|
+
if (fieldId.nodeId === undefined) {
|
|
214
|
+
composedFields.set(fieldId.field, composedField);
|
|
215
|
+
continue;
|
|
221
216
|
}
|
|
217
|
+
const nodeId = (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(table.newToBaseNodeId, fieldId.nodeId) ?? fieldId.nodeId;
|
|
218
|
+
let nodeChangeset = nodeChangeFromId(composedNodes, nodeId);
|
|
219
|
+
if (!table.composedNodes.has(nodeChangeset)) {
|
|
220
|
+
nodeChangeset = cloneNodeChangeset(nodeChangeset);
|
|
221
|
+
(0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(composedNodes, nodeId, nodeChangeset);
|
|
222
|
+
}
|
|
223
|
+
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- using ??= could change behavior if value is falsy
|
|
224
|
+
if (nodeChangeset.fieldChanges === undefined) {
|
|
225
|
+
nodeChangeset.fieldChanges = new Map();
|
|
226
|
+
}
|
|
227
|
+
nodeChangeset.fieldChanges.set(fieldId.field, composedField);
|
|
222
228
|
}
|
|
223
|
-
|
|
224
|
-
composeFieldWithNoNewChange(table, baseFieldChange, fieldId, composedFields, composedNodes, genId, metadata) {
|
|
225
|
-
const emptyChange = this.createEmptyFieldChange(baseFieldChange.fieldKind);
|
|
226
|
-
const composedField = this.composeFieldChanges(fieldId, baseFieldChange, emptyChange, genId, table, metadata);
|
|
227
|
-
if (fieldId.nodeId === undefined) {
|
|
228
|
-
composedFields.set(fieldId.field, composedField);
|
|
229
|
-
return;
|
|
230
|
-
}
|
|
231
|
-
const nodeId = normalizeNodeId((0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(table.newToBaseNodeId, fieldId.nodeId) ?? fieldId.nodeId, table.baseChange.nodeAliases);
|
|
232
|
-
// We clone the node changeset before mutating it, as it may be from one of the input changesets.
|
|
233
|
-
const nodeChangeset = cloneNodeChangeset(nodeChangeFromId(composedNodes, table.baseChange.nodeAliases, nodeId));
|
|
234
|
-
(0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(composedNodes, nodeId, nodeChangeset);
|
|
235
|
-
if (nodeChangeset.fieldChanges === undefined) {
|
|
236
|
-
nodeChangeset.fieldChanges = new Map();
|
|
237
|
-
}
|
|
238
|
-
nodeChangeset.fieldChanges.set(fieldId.field, composedField);
|
|
229
|
+
affectedFields.clear();
|
|
239
230
|
}
|
|
240
231
|
composeFieldMaps(change1, change2, parentId, genId, crossFieldTable, revisionMetadata) {
|
|
241
232
|
const composedFields = new Map();
|
|
@@ -245,14 +236,6 @@ class ModularChangeFamily {
|
|
|
245
236
|
for (const [field, fieldChange1] of change1) {
|
|
246
237
|
const fieldId = { nodeId: parentId, field };
|
|
247
238
|
const fieldChange2 = change2.get(field);
|
|
248
|
-
const cachedComposedFieldChange = crossFieldTable.fieldToContext.get(fieldChange1)?.composedChange;
|
|
249
|
-
if (fieldChange2 === undefined && cachedComposedFieldChange !== undefined) {
|
|
250
|
-
// This can happen if the field was previous processed in `composeFieldWithNoNewChange`.
|
|
251
|
-
// If `change2` does not have a change for this field, then without this check we would
|
|
252
|
-
// lose the composed field change and instead simply have `change1`'s change.
|
|
253
|
-
composedFields.set(field, cachedComposedFieldChange);
|
|
254
|
-
continue;
|
|
255
|
-
}
|
|
256
239
|
const composedField = fieldChange2 === undefined
|
|
257
240
|
? fieldChange1
|
|
258
241
|
: this.composeFieldChanges(fieldId, fieldChange1, fieldChange2, genId, crossFieldTable, revisionMetadata);
|
|
@@ -272,16 +255,17 @@ class ModularChangeFamily {
|
|
|
272
255
|
* will be added to `crossFieldTable.pendingCompositions.nodeIdsToCompose`.
|
|
273
256
|
*
|
|
274
257
|
* Any fields which had cross-field information sent to them as part of this field composition
|
|
275
|
-
* will be added to `affectedBaseFields` in `crossFieldTable.pendingCompositions`.
|
|
258
|
+
* will be added to either `affectedBaseFields` or `affectedNewFields` in `crossFieldTable.pendingCompositions`.
|
|
276
259
|
*
|
|
277
260
|
* Any composed `FieldChange` which is invalidated by new cross-field information will be added to `crossFieldTable.invalidatedFields`.
|
|
278
261
|
*/
|
|
279
262
|
composeFieldChanges(fieldId, change1, change2, idAllocator, crossFieldTable, revisionMetadata) {
|
|
280
263
|
const { fieldKind, changeHandler, change1: change1Normalized, change2: change2Normalized, } = this.normalizeFieldChanges(change1, change2);
|
|
281
|
-
const manager = new
|
|
264
|
+
const manager = new ComposeManager(crossFieldTable, change1, fieldId);
|
|
282
265
|
const composedChange = changeHandler.rebaser.compose(change1Normalized, change2Normalized, (child1, child2) => {
|
|
283
266
|
if (child1 !== undefined && child2 !== undefined) {
|
|
284
|
-
|
|
267
|
+
(0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(crossFieldTable.newToBaseNodeId, child2, child1);
|
|
268
|
+
crossFieldTable.pendingCompositions.nodeIdsToCompose.push([child1, child2]);
|
|
285
269
|
}
|
|
286
270
|
return child1 ?? child2 ?? (0, internal_1.fail)(0xb23 /* Should not compose two undefined nodes */);
|
|
287
271
|
}, idAllocator, manager, revisionMetadata);
|
|
@@ -298,18 +282,19 @@ class ModularChangeFamily {
|
|
|
298
282
|
crossFieldTable.newFieldToBaseField.set(change2, change1);
|
|
299
283
|
return composedField;
|
|
300
284
|
}
|
|
301
|
-
composeNodesById(
|
|
302
|
-
const nodeChangeset1 = nodeChangeFromId(
|
|
303
|
-
const nodeChangeset2 = nodeChangeFromId(
|
|
285
|
+
composeNodesById(nodeChanges1, nodeChanges2, composedNodes, composedNodeToParent, nodeAliases, id1, id2, idAllocator, crossFieldTable, revisionMetadata) {
|
|
286
|
+
const nodeChangeset1 = nodeChangeFromId(nodeChanges1, id1);
|
|
287
|
+
const nodeChangeset2 = nodeChangeFromId(nodeChanges2, id2);
|
|
304
288
|
const composedNodeChangeset = this.composeNodeChanges(id1, nodeChangeset1, nodeChangeset2, idAllocator, crossFieldTable, revisionMetadata);
|
|
305
289
|
(0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(composedNodes, id1, composedNodeChangeset);
|
|
306
290
|
if (!(0, index_js_2.areEqualChangeAtomIds)(id1, id2)) {
|
|
307
291
|
composedNodes.delete([id2.revision, id2.localId]);
|
|
308
292
|
composedNodeToParent.delete([id2.revision, id2.localId]);
|
|
309
|
-
(0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(
|
|
293
|
+
(0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(nodeAliases, id2, id1);
|
|
310
294
|
// We need to delete id1 to avoid forming a cycle in case id1 already had an alias.
|
|
311
|
-
|
|
295
|
+
nodeAliases.delete([id1.revision, id1.localId]);
|
|
312
296
|
}
|
|
297
|
+
crossFieldTable.composedNodes.add(composedNodeChangeset);
|
|
313
298
|
}
|
|
314
299
|
composeNodeChanges(nodeId, change1, change2, genId, crossFieldTable, revisionMetadata) {
|
|
315
300
|
// WARNING: this composition logic assumes that we never make compositions of the following form:
|
|
@@ -362,14 +347,9 @@ class ModularChangeFamily {
|
|
|
362
347
|
}
|
|
363
348
|
const genId = (0, index_js_3.idAllocatorFromMaxId)(change.change.maxId ?? -1);
|
|
364
349
|
const crossFieldTable = {
|
|
365
|
-
|
|
366
|
-
entries: (0, index_js_2.newChangeAtomIdRangeMap)(),
|
|
350
|
+
...newCrossFieldTable(),
|
|
367
351
|
originalFieldToContext: new Map(),
|
|
368
|
-
invertRevision: revisionForInvert,
|
|
369
352
|
invertedNodeToParent: (0, index_js_3.brand)(change.change.nodeToParent.clone()),
|
|
370
|
-
invalidatedFields: new Set(),
|
|
371
|
-
invertedRoots: invertRootTable(change.change, isRollback),
|
|
372
|
-
attachToDetachId: (0, index_js_2.newChangeAtomIdTransform)(),
|
|
373
353
|
};
|
|
374
354
|
const { revInfos: oldRevInfos } = getRevInfoFromTaggedChanges([change]);
|
|
375
355
|
const revisionMetadata = (0, index_js_2.revisionMetadataSourceFromInfo)(oldRevInfos);
|
|
@@ -385,18 +365,16 @@ class ModularChangeFamily {
|
|
|
385
365
|
const originalFieldChange = fieldChange.change;
|
|
386
366
|
const context = crossFieldTable.originalFieldToContext.get(fieldChange);
|
|
387
367
|
(0, internal_1.assert)(context !== undefined, 0x851 /* Should have context for every invalidated field */);
|
|
388
|
-
const { invertedField } = context;
|
|
389
|
-
const amendedChange = getChangeHandler(this.fieldKinds, fieldChange.fieldKind).rebaser.invert(originalFieldChange, isRollback, genId, revisionForInvert, new
|
|
368
|
+
const { invertedField, fieldId } = context;
|
|
369
|
+
const amendedChange = getChangeHandler(this.fieldKinds, fieldChange.fieldKind).rebaser.invert(originalFieldChange, isRollback, genId, revisionForInvert, new InvertManager(crossFieldTable, fieldChange, fieldId), revisionMetadata);
|
|
390
370
|
invertedField.change = (0, index_js_3.brand)(amendedChange);
|
|
391
371
|
}
|
|
392
372
|
}
|
|
393
373
|
const crossFieldKeys = this.makeCrossFieldKeyTable(invertedFields, invertedNodes);
|
|
394
|
-
this.processInvertRenames(crossFieldTable);
|
|
395
374
|
return makeModularChangeset({
|
|
396
375
|
fieldChanges: invertedFields,
|
|
397
376
|
nodeChanges: invertedNodes,
|
|
398
377
|
nodeToParent: crossFieldTable.invertedNodeToParent,
|
|
399
|
-
rootNodes: crossFieldTable.invertedRoots,
|
|
400
378
|
nodeAliases: change.change.nodeAliases,
|
|
401
379
|
crossFieldKeys,
|
|
402
380
|
maxId: genId.getMaxId(),
|
|
@@ -412,7 +390,7 @@ class ModularChangeFamily {
|
|
|
412
390
|
const invertedFields = new Map();
|
|
413
391
|
for (const [field, fieldChange] of changes) {
|
|
414
392
|
const fieldId = { nodeId: parentId, field };
|
|
415
|
-
const manager = new
|
|
393
|
+
const manager = new InvertManager(crossFieldTable, fieldChange, fieldId);
|
|
416
394
|
const invertedChange = getChangeHandler(this.fieldKinds, fieldChange.fieldKind).rebaser.invert(fieldChange.change, isRollback, genId, revisionForInvert, manager, revisionMetadata);
|
|
417
395
|
const invertedFieldChange = {
|
|
418
396
|
...fieldChange,
|
|
@@ -444,12 +422,6 @@ class ModularChangeFamily {
|
|
|
444
422
|
}
|
|
445
423
|
return inverse;
|
|
446
424
|
}
|
|
447
|
-
processInvertRenames(table) {
|
|
448
|
-
for (const { start: newAttachId, value: originalDetachId, length, } of table.attachToDetachId.entries()) {
|
|
449
|
-
// Note that the detach location is already set in `invertDetach`.
|
|
450
|
-
addNodeRename(table.invertedRoots, originalDetachId, newAttachId, length, undefined);
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
425
|
rebase(taggedChange, potentiallyConflictedOver, revisionMetadata) {
|
|
454
426
|
// Our current cell ordering scheme in sequences depends on being able to rebase over a change with conflicts.
|
|
455
427
|
// This means that we must rebase over a muted version of the conflicted changeset.
|
|
@@ -460,26 +432,17 @@ class ModularChangeFamily {
|
|
|
460
432
|
const maxId = Math.max(change.maxId ?? -1, over.change.maxId ?? -1);
|
|
461
433
|
const idState = { maxId };
|
|
462
434
|
const genId = (0, index_js_3.idAllocatorFromState)(idState);
|
|
463
|
-
const affectedBaseFields = (0, index_js_3.newTupleBTree)();
|
|
464
|
-
const nodesToRebase = [];
|
|
465
|
-
const rebasedNodeToParent = (0, index_js_3.brand)(change.nodeToParent.clone());
|
|
466
|
-
const rebaseVersion = Math.max(change.rebaseVersion, over.change.rebaseVersion);
|
|
467
|
-
const rebasedRootNodes = rebaseRoots(change, over.change, affectedBaseFields, nodesToRebase, rebasedNodeToParent, rebaseVersion);
|
|
468
435
|
const crossFieldTable = {
|
|
469
|
-
|
|
470
|
-
entries: newDetachedEntryMap(),
|
|
436
|
+
...newCrossFieldTable(),
|
|
471
437
|
newChange: change,
|
|
472
438
|
baseChange: over.change,
|
|
473
439
|
baseFieldToContext: new Map(),
|
|
474
|
-
baseRoots: over.change.rootNodes,
|
|
475
|
-
rebasedRootNodes,
|
|
476
440
|
baseToRebasedNodeId: (0, index_js_3.newTupleBTree)(),
|
|
477
441
|
rebasedFields: new Set(),
|
|
478
|
-
rebasedNodeToParent,
|
|
479
|
-
|
|
480
|
-
movedDetaches: (0, index_js_2.newChangeAtomIdRangeMap)(),
|
|
442
|
+
rebasedNodeToParent: (0, index_js_3.brand)(change.nodeToParent.clone()),
|
|
443
|
+
rebasedCrossFieldKeys: change.crossFieldKeys.clone(),
|
|
481
444
|
nodeIdPairs: [],
|
|
482
|
-
affectedBaseFields,
|
|
445
|
+
affectedBaseFields: (0, index_js_3.newTupleBTree)(),
|
|
483
446
|
fieldsWithUnattachedChild: new Set(),
|
|
484
447
|
};
|
|
485
448
|
const getBaseRevisions = () => revisionInfoFromTaggedChange(over).map((info) => info.revision);
|
|
@@ -489,9 +452,8 @@ class ModularChangeFamily {
|
|
|
489
452
|
getBaseRevisions,
|
|
490
453
|
};
|
|
491
454
|
const rebasedNodes = (0, index_js_3.brand)(change.nodeChanges.clone());
|
|
492
|
-
const rebasedFields = this.rebaseIntersectingFields(
|
|
493
|
-
this.
|
|
494
|
-
fixupRebasedDetachLocations(crossFieldTable);
|
|
455
|
+
const rebasedFields = this.rebaseIntersectingFields(crossFieldTable, rebasedNodes, genId, rebaseMetadata);
|
|
456
|
+
this.rebaseInvalidatedElements(rebasedFields, rebasedNodes, crossFieldTable, rebaseMetadata, genId);
|
|
495
457
|
const constraintState = newConstraintState(change.constraintViolationCount ?? 0);
|
|
496
458
|
const revertConstraintState = newConstraintState(change.constraintViolationCountOnRevert ?? 0);
|
|
497
459
|
let noChangeConstraint = change.noChangeConstraint;
|
|
@@ -499,17 +461,13 @@ class ModularChangeFamily {
|
|
|
499
461
|
noChangeConstraint = { violated: true };
|
|
500
462
|
constraintState.violationCount += 1;
|
|
501
463
|
}
|
|
502
|
-
this.
|
|
503
|
-
const fieldsWithRootMoves = getFieldsWithRootMoves(crossFieldTable.rebasedRootNodes, change.nodeAliases);
|
|
504
|
-
const fieldToRootChanges = getFieldToRootChanges(crossFieldTable.rebasedRootNodes, change.nodeAliases);
|
|
464
|
+
this.updateConstraintsForFields(rebasedFields, fieldChangeHandler_js_1.NodeAttachState.Attached, fieldChangeHandler_js_1.NodeAttachState.Attached, constraintState, revertConstraintState, rebasedNodes);
|
|
505
465
|
const rebased = makeModularChangeset({
|
|
506
|
-
fieldChanges: this.pruneFieldMap(rebasedFields,
|
|
466
|
+
fieldChanges: this.pruneFieldMap(rebasedFields, rebasedNodes),
|
|
507
467
|
nodeChanges: rebasedNodes,
|
|
508
468
|
nodeToParent: crossFieldTable.rebasedNodeToParent,
|
|
509
|
-
rootNodes: this.pruneRoots(crossFieldTable.rebasedRootNodes, rebasedNodes, crossFieldTable.rebasedNodeToParent, change.nodeAliases, fieldsWithRootMoves, fieldToRootChanges),
|
|
510
|
-
// TODO: Do we need to include aliases for node changesets added during rebasing?
|
|
511
469
|
nodeAliases: change.nodeAliases,
|
|
512
|
-
crossFieldKeys:
|
|
470
|
+
crossFieldKeys: crossFieldTable.rebasedCrossFieldKeys,
|
|
513
471
|
maxId: idState.maxId,
|
|
514
472
|
revisions: change.revisions,
|
|
515
473
|
constraintViolationCount: constraintState.violationCount,
|
|
@@ -519,22 +477,15 @@ class ModularChangeFamily {
|
|
|
519
477
|
builds: change.builds,
|
|
520
478
|
destroys: change.destroys,
|
|
521
479
|
refreshers: change.refreshers,
|
|
522
|
-
rebaseVersion,
|
|
523
480
|
});
|
|
524
|
-
// XXX: This is an expensive assert which should be disabled before merging.
|
|
525
|
-
validateChangeset(rebased, this.fieldKinds);
|
|
526
481
|
return rebased;
|
|
527
482
|
}
|
|
528
483
|
// This performs a first pass on all fields which have both new and base changes.
|
|
529
484
|
// TODO: Can we also handle additional passes in this method?
|
|
530
|
-
rebaseIntersectingFields(
|
|
485
|
+
rebaseIntersectingFields(crossFieldTable, rebasedNodes, genId, metadata) {
|
|
531
486
|
const change = crossFieldTable.newChange;
|
|
532
487
|
const baseChange = crossFieldTable.baseChange;
|
|
533
488
|
const rebasedFields = this.rebaseFieldMap(change.fieldChanges, baseChange.fieldChanges, undefined, genId, crossFieldTable, metadata);
|
|
534
|
-
for (const [newChildChange, baseChildChange] of rootChanges) {
|
|
535
|
-
const rebasedNode = this.rebaseNodeChange(newChildChange, baseChildChange, genId, crossFieldTable, metadata);
|
|
536
|
-
(0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(rebasedNodes, newChildChange, rebasedNode);
|
|
537
|
-
}
|
|
538
489
|
// This loop processes all fields which have both base and new changes.
|
|
539
490
|
// Note that the call to `rebaseNodeChange` can add entries to `crossFieldTable.nodeIdPairs`.
|
|
540
491
|
for (const [newId, baseId, _attachState] of crossFieldTable.nodeIdPairs) {
|
|
@@ -543,85 +494,83 @@ class ModularChangeFamily {
|
|
|
543
494
|
}
|
|
544
495
|
return rebasedFields;
|
|
545
496
|
}
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
(0, internal_1.assert)(
|
|
555
|
-
if (
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
return (0, index_js_2.areEqualChangeAtomIds)(normalizeNodeId(baseChild, crossFieldTable.baseChange.nodeAliases), baseNodeId)
|
|
559
|
-
? baseNodeId
|
|
560
|
-
: undefined;
|
|
561
|
-
};
|
|
562
|
-
const handler = getChangeHandler(this.fieldKinds, baseFieldChange.fieldKind);
|
|
563
|
-
const fieldChange = {
|
|
564
|
-
...baseFieldChange,
|
|
565
|
-
change: (0, index_js_3.brand)(handler.createEmpty()),
|
|
566
|
-
};
|
|
567
|
-
const rebasedNodeId = baseFieldId.nodeId === undefined
|
|
568
|
-
? undefined
|
|
569
|
-
: rebasedNodeIdFromBaseNodeId(crossFieldTable, baseFieldId.nodeId);
|
|
570
|
-
const fieldId = { nodeId: rebasedNodeId, field: baseFieldId.field };
|
|
571
|
-
const rebasedField = handler.rebaser.rebase(fieldChange.change, baseFieldChange.change, rebaseChild, genId, new RebaseNodeManagerI(crossFieldTable, fieldId), metadata, crossFieldTable.rebaseVersion);
|
|
572
|
-
const rebasedFieldChange = {
|
|
573
|
-
...baseFieldChange,
|
|
574
|
-
change: (0, index_js_3.brand)(rebasedField),
|
|
575
|
-
};
|
|
576
|
-
const context = {
|
|
577
|
-
newChange: fieldChange,
|
|
578
|
-
baseChange: baseFieldChange,
|
|
579
|
-
rebasedChange: rebasedFieldChange,
|
|
580
|
-
fieldId,
|
|
581
|
-
baseNodeIds: (0, index_js_3.newTupleBTree)(),
|
|
582
|
-
};
|
|
583
|
-
if (baseNodeId !== undefined) {
|
|
584
|
-
(0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(context.baseNodeIds, baseNodeId, true);
|
|
585
|
-
}
|
|
586
|
-
crossFieldTable.baseFieldToContext.set(baseFieldChange, context);
|
|
587
|
-
crossFieldTable.rebasedFields.add(rebasedFieldChange);
|
|
588
|
-
this.attachRebasedField(rebasedFields, rebasedNodes, crossFieldTable, rebasedFieldChange, fieldId, genId, metadata);
|
|
589
|
-
}
|
|
590
|
-
rebaseInvalidatedFields(rebasedFields, rebasedNodes, crossFieldTable, rebaseMetadata, genId) {
|
|
591
|
-
while (crossFieldTable.affectedBaseFields.size > 0) {
|
|
592
|
-
const baseFields = crossFieldTable.affectedBaseFields.clone();
|
|
593
|
-
crossFieldTable.affectedBaseFields.clear();
|
|
594
|
-
for (const baseFieldIdKey of baseFields.keys()) {
|
|
595
|
-
const baseFieldId = normalizeFieldId(fieldIdFromFieldIdKey(baseFieldIdKey), crossFieldTable.baseChange.nodeAliases);
|
|
596
|
-
const baseField = fieldChangeFromId(crossFieldTable.baseChange, baseFieldId);
|
|
597
|
-
(0, internal_1.assert)(baseField !== undefined, 0x9c2 /* Cross field key registered for empty field */);
|
|
598
|
-
const context = crossFieldTable.baseFieldToContext.get(baseField);
|
|
599
|
-
if (context === undefined) {
|
|
600
|
-
this.rebaseFieldWithoutNewChanges(baseField, baseFieldId, crossFieldTable, rebasedFields, rebasedNodes, genId, rebaseMetadata);
|
|
601
|
-
}
|
|
602
|
-
else {
|
|
603
|
-
this.rebaseInvalidatedField(baseField, crossFieldTable, context, rebaseMetadata, genId);
|
|
604
|
-
}
|
|
497
|
+
// This processes fields which have no new changes but have been invalidated by another field.
|
|
498
|
+
rebaseFieldsWithoutNewChanges(rebasedFields, rebasedNodes, crossFieldTable, genId, metadata) {
|
|
499
|
+
const baseChange = crossFieldTable.baseChange;
|
|
500
|
+
for (const [revision, localId, fieldKey] of crossFieldTable.affectedBaseFields.keys()) {
|
|
501
|
+
const baseNodeId = localId === undefined
|
|
502
|
+
? undefined
|
|
503
|
+
: normalizeNodeId({ revision, localId }, baseChange.nodeAliases);
|
|
504
|
+
const baseFieldChange = fieldMapFromNodeId(baseChange.fieldChanges, baseChange.nodeChanges, baseNodeId).get(fieldKey);
|
|
505
|
+
(0, internal_1.assert)(baseFieldChange !== undefined, 0x9c2 /* Cross field key registered for empty field */);
|
|
506
|
+
if (crossFieldTable.baseFieldToContext.has(baseFieldChange)) {
|
|
507
|
+
// This field has already been processed because there were changes to rebase.
|
|
508
|
+
continue;
|
|
605
509
|
}
|
|
510
|
+
// This field has no changes in the new changeset, otherwise it would have been added to
|
|
511
|
+
// `crossFieldTable.baseFieldToContext` when processing fields with both base and new changes.
|
|
512
|
+
const handler = getChangeHandler(this.fieldKinds, baseFieldChange.fieldKind);
|
|
513
|
+
const fieldChange = {
|
|
514
|
+
...baseFieldChange,
|
|
515
|
+
change: (0, index_js_3.brand)(handler.createEmpty()),
|
|
516
|
+
};
|
|
517
|
+
const rebasedNodeId = baseNodeId === undefined
|
|
518
|
+
? undefined
|
|
519
|
+
: rebasedNodeIdFromBaseNodeId(crossFieldTable, baseNodeId);
|
|
520
|
+
const fieldId = { nodeId: rebasedNodeId, field: fieldKey };
|
|
521
|
+
const rebasedField = handler.rebaser.rebase(fieldChange.change, baseFieldChange.change, noNewChangesRebaseChild, genId, new RebaseManager(crossFieldTable, baseFieldChange, fieldId), metadata);
|
|
522
|
+
const rebasedFieldChange = {
|
|
523
|
+
...baseFieldChange,
|
|
524
|
+
change: (0, index_js_3.brand)(rebasedField),
|
|
525
|
+
};
|
|
526
|
+
// TODO: Deduplicate
|
|
527
|
+
crossFieldTable.baseFieldToContext.set(baseFieldChange, {
|
|
528
|
+
newChange: fieldChange,
|
|
529
|
+
baseChange: baseFieldChange,
|
|
530
|
+
rebasedChange: rebasedFieldChange,
|
|
531
|
+
fieldId,
|
|
532
|
+
baseNodeIds: [],
|
|
533
|
+
});
|
|
534
|
+
crossFieldTable.rebasedFields.add(rebasedFieldChange);
|
|
535
|
+
this.attachRebasedField(rebasedFields, rebasedNodes, crossFieldTable, rebasedFieldChange, fieldId, genId, metadata);
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
rebaseInvalidatedElements(rebasedFields, rebasedNodes, table, metadata, idAllocator) {
|
|
539
|
+
this.rebaseFieldsWithoutNewChanges(rebasedFields, rebasedNodes, table, idAllocator, metadata);
|
|
540
|
+
this.rebaseFieldsWithUnattachedChild(table, metadata, idAllocator);
|
|
541
|
+
this.rebaseInvalidatedFields(table, metadata, idAllocator);
|
|
542
|
+
}
|
|
543
|
+
rebaseInvalidatedFields(crossFieldTable, rebaseMetadata, genId) {
|
|
544
|
+
const fieldsToUpdate = crossFieldTable.invalidatedFields;
|
|
545
|
+
crossFieldTable.invalidatedFields = new Set();
|
|
546
|
+
for (const field of fieldsToUpdate) {
|
|
547
|
+
this.rebaseInvalidatedField(field, crossFieldTable, rebaseMetadata, genId);
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
rebaseFieldsWithUnattachedChild(table, metadata, idAllocator) {
|
|
551
|
+
for (const field of table.fieldsWithUnattachedChild) {
|
|
552
|
+
table.invalidatedFields.delete(field);
|
|
553
|
+
this.rebaseInvalidatedField(field, table, metadata, idAllocator, true);
|
|
606
554
|
}
|
|
607
555
|
}
|
|
608
|
-
rebaseInvalidatedField(baseField, crossFieldTable,
|
|
556
|
+
rebaseInvalidatedField(baseField, crossFieldTable, rebaseMetadata, genId, allowInval = false) {
|
|
557
|
+
const context = crossFieldTable.baseFieldToContext.get(baseField);
|
|
558
|
+
(0, internal_1.assert)(context !== undefined, 0x852 /* Every field should have a context */);
|
|
609
559
|
const { changeHandler, change1: fieldChangeset, change2: baseChangeset, } = this.normalizeFieldChanges(context.newChange, context.baseChange);
|
|
610
560
|
const rebaseChild = (curr, base) => {
|
|
611
561
|
if (curr !== undefined) {
|
|
612
562
|
return curr;
|
|
613
563
|
}
|
|
614
|
-
if (base !== undefined
|
|
615
|
-
|
|
564
|
+
if (base !== undefined) {
|
|
565
|
+
for (const id of context.baseNodeIds) {
|
|
566
|
+
if ((0, index_js_2.areEqualChangeAtomIds)(base, id)) {
|
|
567
|
+
return base;
|
|
568
|
+
}
|
|
569
|
+
}
|
|
616
570
|
}
|
|
617
571
|
return undefined;
|
|
618
572
|
};
|
|
619
|
-
|
|
620
|
-
if (crossFieldTable.fieldsWithUnattachedChild.has(baseField)) {
|
|
621
|
-
crossFieldTable.fieldsWithUnattachedChild.delete(baseField);
|
|
622
|
-
allowInval = true;
|
|
623
|
-
}
|
|
624
|
-
context.rebasedChange.change = (0, index_js_3.brand)(changeHandler.rebaser.rebase(fieldChangeset, baseChangeset, rebaseChild, genId, new RebaseNodeManagerI(crossFieldTable, context.fieldId, allowInval), rebaseMetadata, crossFieldTable.rebaseVersion));
|
|
573
|
+
context.rebasedChange.change = (0, index_js_3.brand)(changeHandler.rebaser.rebase(fieldChangeset, baseChangeset, rebaseChild, genId, new RebaseManager(crossFieldTable, baseField, context.fieldId, allowInval), rebaseMetadata));
|
|
625
574
|
}
|
|
626
575
|
attachRebasedField(rebasedFields, rebasedNodes, table, rebasedField, { nodeId, field: fieldKey }, idAllocator, metadata) {
|
|
627
576
|
if (nodeId === undefined) {
|
|
@@ -630,14 +579,12 @@ class ModularChangeFamily {
|
|
|
630
579
|
}
|
|
631
580
|
const rebasedNode = (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(rebasedNodes, nodeId);
|
|
632
581
|
if (rebasedNode !== undefined) {
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
if (updatedRebasedNode.fieldChanges === undefined) {
|
|
636
|
-
updatedRebasedNode.fieldChanges = new Map([[fieldKey, rebasedField]]);
|
|
582
|
+
if (rebasedNode.fieldChanges === undefined) {
|
|
583
|
+
rebasedNode.fieldChanges = new Map([[fieldKey, rebasedField]]);
|
|
637
584
|
return;
|
|
638
585
|
}
|
|
639
|
-
(0, internal_1.assert)(!
|
|
640
|
-
|
|
586
|
+
(0, internal_1.assert)(!rebasedNode.fieldChanges.has(fieldKey), 0x9c4 /* Expected an empty field */);
|
|
587
|
+
rebasedNode.fieldChanges.set(fieldKey, rebasedField);
|
|
641
588
|
return;
|
|
642
589
|
}
|
|
643
590
|
const newNode = {
|
|
@@ -645,51 +592,39 @@ class ModularChangeFamily {
|
|
|
645
592
|
};
|
|
646
593
|
(0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(rebasedNodes, nodeId, newNode);
|
|
647
594
|
(0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(table.baseToRebasedNodeId, nodeId, nodeId);
|
|
648
|
-
const
|
|
649
|
-
this.attachRebasedNode(rebasedFields, rebasedNodes, table, nodeId,
|
|
650
|
-
}
|
|
651
|
-
attachRebasedNode(rebasedFields, rebasedNodes, table, baseNodeId,
|
|
652
|
-
|
|
653
|
-
const renamedRoot = firstAttachIdFromDetachId(table.baseChange.rootNodes, parentBase.root, 1).value;
|
|
654
|
-
const attachField = table.baseChange.crossFieldKeys.getFirst({ ...renamedRoot, target: crossFieldQueries_js_1.CrossFieldTarget.Destination }, 1).value;
|
|
655
|
-
if (attachField === undefined) {
|
|
656
|
-
const baseDetachLocation = table.baseChange.rootNodes.detachLocations.getFirst(parentBase.root, 1).value;
|
|
657
|
-
assignRootChange(table.rebasedRootNodes, table.rebasedNodeToParent, renamedRoot, baseNodeId, baseDetachLocation, table.rebaseVersion);
|
|
658
|
-
// We need to make sure the rebased changeset includes the detach location,
|
|
659
|
-
// so we add that field to `affectedBaseFields` unless it's already been processed.
|
|
660
|
-
if (baseDetachLocation !== undefined &&
|
|
661
|
-
!table.baseFieldToContext.has(fieldChangeFromId(table.baseChange, baseDetachLocation))) {
|
|
662
|
-
table.affectedBaseFields.set(fieldIdKeyFromFieldId(baseDetachLocation), true);
|
|
663
|
-
}
|
|
664
|
-
}
|
|
665
|
-
else {
|
|
666
|
-
// The base change inserts this node into `attachField`, so the rebased change should represent this node there.
|
|
667
|
-
const normalizedAttachField = normalizeFieldId(attachField, table.baseChange.nodeAliases);
|
|
668
|
-
const entry = table.entries.getFirst(renamedRoot, 1).value ?? {};
|
|
669
|
-
table.entries.set(renamedRoot, 1, { ...entry, nodeChange: baseNodeId });
|
|
670
|
-
table.affectedBaseFields.set(fieldIdKeyFromFieldId(normalizedAttachField), true);
|
|
671
|
-
this.attachRebasedNode(rebasedFields, rebasedNodes, table, baseNodeId, { field: normalizedAttachField }, idAllocator, metadata);
|
|
672
|
-
}
|
|
673
|
-
return;
|
|
674
|
-
}
|
|
675
|
-
const parentFieldIdBase = parentBase.field;
|
|
676
|
-
const baseFieldChange = fieldChangeFromId(table.baseChange, parentFieldIdBase);
|
|
595
|
+
const parentFieldId = getParentFieldId(table.baseChange, nodeId);
|
|
596
|
+
this.attachRebasedNode(rebasedFields, rebasedNodes, table, nodeId, parentFieldId, idAllocator, metadata);
|
|
597
|
+
}
|
|
598
|
+
attachRebasedNode(rebasedFields, rebasedNodes, table, baseNodeId, parentFieldIdBase, idAllocator, metadata) {
|
|
599
|
+
const baseFieldChange = fieldChangeFromId(table.baseChange.fieldChanges, table.baseChange.nodeChanges, parentFieldIdBase);
|
|
677
600
|
const rebasedFieldId = rebasedFieldIdFromBaseId(table, parentFieldIdBase);
|
|
678
|
-
(0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(table.rebasedNodeToParent, baseNodeId,
|
|
601
|
+
(0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(table.rebasedNodeToParent, baseNodeId, rebasedFieldId);
|
|
679
602
|
const context = table.baseFieldToContext.get(baseFieldChange);
|
|
680
603
|
if (context !== undefined) {
|
|
681
604
|
// We've already processed this field.
|
|
682
|
-
// The new child node will be attached in
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
// This is done by checking whether `context.baseNodeIds` already contained `baseNodeId`.
|
|
686
|
-
if ((0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(context.baseNodeIds, baseNodeId, true)) {
|
|
687
|
-
table.fieldsWithUnattachedChild.add(baseFieldChange);
|
|
688
|
-
table.affectedBaseFields.set(fieldIdKeyFromFieldId(parentFieldIdBase), true);
|
|
689
|
-
}
|
|
605
|
+
// The new child node will be attached in rebaseFieldsWithUnattachedChild.
|
|
606
|
+
context.baseNodeIds.push(baseNodeId);
|
|
607
|
+
table.fieldsWithUnattachedChild.add(baseFieldChange);
|
|
690
608
|
return;
|
|
691
609
|
}
|
|
692
|
-
|
|
610
|
+
const handler = getChangeHandler(this.fieldKinds, baseFieldChange.fieldKind);
|
|
611
|
+
const fieldChange = {
|
|
612
|
+
...baseFieldChange,
|
|
613
|
+
change: (0, index_js_3.brand)(handler.createEmpty()),
|
|
614
|
+
};
|
|
615
|
+
const rebasedChangeset = handler.rebaser.rebase(handler.createEmpty(), baseFieldChange.change, (_idNew, idBase) => idBase !== undefined && (0, index_js_2.areEqualChangeAtomIds)(idBase, baseNodeId)
|
|
616
|
+
? baseNodeId
|
|
617
|
+
: undefined, idAllocator, new RebaseManager(table, baseFieldChange, rebasedFieldId), metadata);
|
|
618
|
+
const rebasedField = { ...baseFieldChange, change: (0, index_js_3.brand)(rebasedChangeset) };
|
|
619
|
+
table.rebasedFields.add(rebasedField);
|
|
620
|
+
table.baseFieldToContext.set(baseFieldChange, {
|
|
621
|
+
newChange: fieldChange,
|
|
622
|
+
baseChange: baseFieldChange,
|
|
623
|
+
rebasedChange: rebasedField,
|
|
624
|
+
fieldId: rebasedFieldId,
|
|
625
|
+
baseNodeIds: [],
|
|
626
|
+
});
|
|
627
|
+
this.attachRebasedField(rebasedFields, rebasedNodes, table, rebasedField, rebasedFieldId, idAllocator, metadata);
|
|
693
628
|
}
|
|
694
629
|
rebaseFieldMap(change, over, parentId, genId, crossFieldTable, revisionMetadata) {
|
|
695
630
|
const rebasedFields = new Map();
|
|
@@ -707,8 +642,8 @@ class ModularChangeFamily {
|
|
|
707
642
|
continue;
|
|
708
643
|
}
|
|
709
644
|
const { fieldKind, changeHandler, change1: fieldChangeset, change2: baseChangeset, } = this.normalizeFieldChanges(fieldChange, baseChange);
|
|
710
|
-
const manager = new
|
|
711
|
-
const rebasedField = changeHandler.rebaser.rebase(fieldChangeset, baseChangeset, rebaseChild, genId, manager, revisionMetadata
|
|
645
|
+
const manager = new RebaseManager(crossFieldTable, baseChange, fieldId);
|
|
646
|
+
const rebasedField = changeHandler.rebaser.rebase(fieldChangeset, baseChangeset, rebaseChild, genId, manager, revisionMetadata);
|
|
712
647
|
const rebasedFieldChange = {
|
|
713
648
|
fieldKind,
|
|
714
649
|
change: (0, index_js_3.brand)(rebasedField),
|
|
@@ -719,15 +654,15 @@ class ModularChangeFamily {
|
|
|
719
654
|
newChange: fieldChange,
|
|
720
655
|
rebasedChange: rebasedFieldChange,
|
|
721
656
|
fieldId,
|
|
722
|
-
baseNodeIds:
|
|
657
|
+
baseNodeIds: [],
|
|
723
658
|
});
|
|
724
659
|
crossFieldTable.rebasedFields.add(rebasedFieldChange);
|
|
725
660
|
}
|
|
726
661
|
return rebasedFields;
|
|
727
662
|
}
|
|
728
663
|
rebaseNodeChange(newId, baseId, genId, crossFieldTable, revisionMetadata) {
|
|
729
|
-
const change = nodeChangeFromId(crossFieldTable.newChange.nodeChanges,
|
|
730
|
-
const over = nodeChangeFromId(crossFieldTable.baseChange.nodeChanges,
|
|
664
|
+
const change = nodeChangeFromId(crossFieldTable.newChange.nodeChanges, newId);
|
|
665
|
+
const over = nodeChangeFromId(crossFieldTable.baseChange.nodeChanges, baseId);
|
|
731
666
|
const baseMap = over?.fieldChanges ?? new Map();
|
|
732
667
|
const fieldChanges = change.fieldChanges !== undefined && over.fieldChanges !== undefined
|
|
733
668
|
? this.rebaseFieldMap(change?.fieldChanges ?? new Map(), baseMap, newId, genId, crossFieldTable, revisionMetadata)
|
|
@@ -745,37 +680,28 @@ class ModularChangeFamily {
|
|
|
745
680
|
(0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(crossFieldTable.baseToRebasedNodeId, baseId, newId);
|
|
746
681
|
return rebasedChange;
|
|
747
682
|
}
|
|
748
|
-
updateConstraints(rebasedFields, rebasedNodes, rebasedRoots, constraintState, revertConstraintState) {
|
|
749
|
-
this.updateConstraintsForFields(rebasedFields, fieldChangeHandler_js_1.NodeAttachState.Attached, fieldChangeHandler_js_1.NodeAttachState.Attached, constraintState, revertConstraintState, rebasedNodes);
|
|
750
|
-
for (const [_detachId, nodeId] of rebasedRoots.nodeChanges.entries()) {
|
|
751
|
-
// XXX: This is incorrect if the rebased changeset attaches the node.
|
|
752
|
-
// Efficiently computing whether the changeset attaches the node would require maintaining a mapping from node ID to attach ID.
|
|
753
|
-
const detachedInOutput = true;
|
|
754
|
-
this.updateConstraintsForNode(nodeId, fieldChangeHandler_js_1.NodeAttachState.Detached, detachedInOutput ? fieldChangeHandler_js_1.NodeAttachState.Detached : fieldChangeHandler_js_1.NodeAttachState.Attached, rebasedNodes, constraintState, revertConstraintState);
|
|
755
|
-
}
|
|
756
|
-
}
|
|
757
683
|
updateConstraintsForFields(fields, parentInputAttachState, parentOutputAttachState, constraintState, revertConstraintState, nodes) {
|
|
758
684
|
for (const field of fields.values()) {
|
|
759
685
|
const handler = getChangeHandler(this.fieldKinds, field.fieldKind);
|
|
760
|
-
for (const [nodeId] of handler.getNestedChanges(field.change)) {
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
686
|
+
for (const [nodeId, inputIndex, outputIndex] of handler.getNestedChanges(field.change)) {
|
|
687
|
+
const isInputDetached = inputIndex === undefined;
|
|
688
|
+
const inputAttachState = parentInputAttachState === fieldChangeHandler_js_1.NodeAttachState.Detached || isInputDetached
|
|
689
|
+
? fieldChangeHandler_js_1.NodeAttachState.Detached
|
|
690
|
+
: fieldChangeHandler_js_1.NodeAttachState.Attached;
|
|
691
|
+
const isOutputDetached = outputIndex === undefined;
|
|
764
692
|
const outputAttachState = parentOutputAttachState === fieldChangeHandler_js_1.NodeAttachState.Detached || isOutputDetached
|
|
765
693
|
? fieldChangeHandler_js_1.NodeAttachState.Detached
|
|
766
694
|
: fieldChangeHandler_js_1.NodeAttachState.Attached;
|
|
767
|
-
this.updateConstraintsForNode(nodeId,
|
|
695
|
+
this.updateConstraintsForNode(nodeId, inputAttachState, outputAttachState, nodes, constraintState, revertConstraintState);
|
|
768
696
|
}
|
|
769
697
|
}
|
|
770
698
|
}
|
|
771
699
|
updateConstraintsForNode(nodeId, inputAttachState, outputAttachState, nodes, constraintState, revertConstraintState) {
|
|
772
|
-
const node = (
|
|
773
|
-
const updatedNode = { ...node };
|
|
774
|
-
(0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(nodes, nodeId, updatedNode);
|
|
700
|
+
const node = nodes.get([nodeId.revision, nodeId.localId]) ?? (0, internal_1.fail)(0xb24 /* Unknown node ID */);
|
|
775
701
|
if (node.nodeExistsConstraint !== undefined) {
|
|
776
702
|
const isNowViolated = inputAttachState === fieldChangeHandler_js_1.NodeAttachState.Detached;
|
|
777
703
|
if (node.nodeExistsConstraint.violated !== isNowViolated) {
|
|
778
|
-
|
|
704
|
+
node.nodeExistsConstraint = {
|
|
779
705
|
...node.nodeExistsConstraint,
|
|
780
706
|
violated: isNowViolated,
|
|
781
707
|
};
|
|
@@ -785,7 +711,7 @@ class ModularChangeFamily {
|
|
|
785
711
|
if (node.nodeExistsConstraintOnRevert !== undefined) {
|
|
786
712
|
const isNowViolated = outputAttachState === fieldChangeHandler_js_1.NodeAttachState.Detached;
|
|
787
713
|
if (node.nodeExistsConstraintOnRevert.violated !== isNowViolated) {
|
|
788
|
-
|
|
714
|
+
node.nodeExistsConstraintOnRevert = {
|
|
789
715
|
...node.nodeExistsConstraintOnRevert,
|
|
790
716
|
violated: isNowViolated,
|
|
791
717
|
};
|
|
@@ -796,82 +722,41 @@ class ModularChangeFamily {
|
|
|
796
722
|
this.updateConstraintsForFields(node.fieldChanges, inputAttachState, outputAttachState, constraintState, revertConstraintState, nodes);
|
|
797
723
|
}
|
|
798
724
|
}
|
|
799
|
-
pruneFieldMap(changeset,
|
|
725
|
+
pruneFieldMap(changeset, nodeMap) {
|
|
800
726
|
if (changeset === undefined) {
|
|
801
727
|
return undefined;
|
|
802
728
|
}
|
|
803
729
|
const prunedChangeset = new Map();
|
|
804
730
|
for (const [field, fieldChange] of changeset) {
|
|
805
731
|
const handler = getChangeHandler(this.fieldKinds, fieldChange.fieldKind);
|
|
806
|
-
const prunedFieldChangeset = handler.rebaser.prune(fieldChange.change, (nodeId) => this.pruneNodeChange(nodeId, nodeMap
|
|
807
|
-
|
|
808
|
-
const fieldIdKey = fieldIdKeyFromFieldId(fieldId);
|
|
809
|
-
const rootsWithChanges = fieldsToRootChanges.get(fieldIdKey) ?? [];
|
|
810
|
-
let hasRootWithNodeChange = false;
|
|
811
|
-
for (const rootId of rootsWithChanges) {
|
|
812
|
-
const nodeId = (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(roots.nodeChanges, rootId) ?? (0, internal_1.fail)("No root change found");
|
|
813
|
-
const isRootChangeEmpty = this.pruneNodeChange(nodeId, nodeMap, nodeToParent, aliases, roots, fieldsWithRootMoves, fieldsToRootChanges) === undefined;
|
|
814
|
-
if (isRootChangeEmpty) {
|
|
815
|
-
roots.nodeChanges.delete([rootId.revision, rootId.localId]);
|
|
816
|
-
tryRemoveDetachLocation(roots, rootId, 1);
|
|
817
|
-
}
|
|
818
|
-
else {
|
|
819
|
-
hasRootWithNodeChange = true;
|
|
820
|
-
}
|
|
821
|
-
}
|
|
822
|
-
const hasRootChanges = hasRootWithNodeChange || fieldsWithRootMoves.get(fieldIdKey) === true;
|
|
823
|
-
if (!handler.isEmpty(prunedFieldChangeset) || hasRootChanges) {
|
|
732
|
+
const prunedFieldChangeset = handler.rebaser.prune(fieldChange.change, (nodeId) => this.pruneNodeChange(nodeId, nodeMap));
|
|
733
|
+
if (!handler.isEmpty(prunedFieldChangeset)) {
|
|
824
734
|
prunedChangeset.set(field, { ...fieldChange, change: (0, index_js_3.brand)(prunedFieldChangeset) });
|
|
825
735
|
}
|
|
826
736
|
}
|
|
827
737
|
return prunedChangeset.size > 0 ? prunedChangeset : undefined;
|
|
828
738
|
}
|
|
829
|
-
|
|
830
|
-
const
|
|
831
|
-
for (const [rootIdKey, nodeId] of roots.nodeChanges.entries()) {
|
|
832
|
-
const rootId = { revision: rootIdKey[0], localId: rootIdKey[1] };
|
|
833
|
-
const hasDetachLocation = roots.detachLocations.getFirst(rootId, 1).value !== undefined;
|
|
834
|
-
// If the root has a detach location it should be pruned by recursion when pruning the field it was detached from.
|
|
835
|
-
const prunedId = hasDetachLocation
|
|
836
|
-
? nodeId
|
|
837
|
-
: this.pruneNodeChange(nodeId, nodeMap, nodeToParent, aliases, roots, fieldsWithRootMoves, fieldsToRootChanges);
|
|
838
|
-
if (prunedId !== undefined) {
|
|
839
|
-
pruned.nodeChanges.set(rootIdKey, prunedId);
|
|
840
|
-
}
|
|
841
|
-
tryRemoveDetachLocation(pruned, rootId, 1);
|
|
842
|
-
}
|
|
843
|
-
return pruned;
|
|
844
|
-
}
|
|
845
|
-
pruneNodeChange(nodeId, nodes, nodeToParent, aliases, roots, fieldsWithRootMoves, fieldsToRootChanges) {
|
|
846
|
-
const changeset = nodeChangeFromId(nodes, aliases, nodeId);
|
|
739
|
+
pruneNodeChange(nodeId, nodeMap) {
|
|
740
|
+
const changeset = nodeChangeFromId(nodeMap, nodeId);
|
|
847
741
|
const prunedFields = changeset.fieldChanges === undefined
|
|
848
742
|
? undefined
|
|
849
|
-
: this.pruneFieldMap(changeset.fieldChanges,
|
|
743
|
+
: this.pruneFieldMap(changeset.fieldChanges, nodeMap);
|
|
850
744
|
const prunedChange = { ...changeset, fieldChanges: prunedFields };
|
|
851
745
|
if (prunedChange.fieldChanges === undefined) {
|
|
852
746
|
delete prunedChange.fieldChanges;
|
|
853
747
|
}
|
|
854
748
|
if (isEmptyNodeChangeset(prunedChange)) {
|
|
855
|
-
|
|
856
|
-
nodeId.revision,
|
|
857
|
-
nodeId.localId,
|
|
858
|
-
];
|
|
859
|
-
// TODO: Shouldn't we also delete all aliases associated with this node?
|
|
860
|
-
nodes.delete(nodeIdKey);
|
|
861
|
-
nodeToParent.delete(nodeIdKey);
|
|
749
|
+
nodeMap.delete([nodeId.revision, nodeId.localId]);
|
|
862
750
|
return undefined;
|
|
863
751
|
}
|
|
864
752
|
else {
|
|
865
|
-
(0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(
|
|
753
|
+
(0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(nodeMap, nodeId, prunedChange);
|
|
866
754
|
return nodeId;
|
|
867
755
|
}
|
|
868
756
|
}
|
|
869
757
|
getRevisions(change) {
|
|
870
|
-
if (change.revisions === undefined || change.revisions.length === 0) {
|
|
871
|
-
return new Set([undefined]);
|
|
872
|
-
}
|
|
873
758
|
const aggregated = new Set();
|
|
874
|
-
for (const revInfo of change.revisions) {
|
|
759
|
+
for (const revInfo of change.revisions ?? [{ revision: undefined }]) {
|
|
875
760
|
aggregated.add(revInfo.revision);
|
|
876
761
|
}
|
|
877
762
|
return aggregated;
|
|
@@ -879,13 +764,12 @@ class ModularChangeFamily {
|
|
|
879
764
|
changeRevision(change, replacer) {
|
|
880
765
|
const updatedFields = this.replaceFieldMapRevisions(change.fieldChanges, replacer);
|
|
881
766
|
const updatedNodes = replaceIdMapRevisions(change.nodeChanges, replacer, (nodeChangeset) => this.replaceNodeChangesetRevisions(nodeChangeset, replacer));
|
|
882
|
-
const updatedNodeToParent = replaceIdMapRevisions(change.nodeToParent, replacer, (
|
|
767
|
+
const updatedNodeToParent = replaceIdMapRevisions(change.nodeToParent, replacer, (fieldId) => replaceFieldIdRevision(normalizeFieldId(fieldId, change.nodeAliases), replacer));
|
|
883
768
|
const updated = {
|
|
884
769
|
...change,
|
|
885
770
|
fieldChanges: updatedFields,
|
|
886
771
|
nodeChanges: updatedNodes,
|
|
887
772
|
nodeToParent: updatedNodeToParent,
|
|
888
|
-
rootNodes: replaceRootTableRevision(change.rootNodes, replacer, change.nodeAliases),
|
|
889
773
|
// We've updated all references to old node IDs, so we no longer need an alias table.
|
|
890
774
|
nodeAliases: (0, index_js_3.newTupleBTree)(),
|
|
891
775
|
crossFieldKeys: replaceCrossFieldKeyTableRevisions(change.crossFieldKeys, replacer, change.nodeAliases),
|
|
@@ -918,7 +802,7 @@ class ModularChangeFamily {
|
|
|
918
802
|
return updatedFields;
|
|
919
803
|
}
|
|
920
804
|
makeCrossFieldKeyTable(fields, nodes) {
|
|
921
|
-
const keys = (0, modularChangeTypes_js_1.
|
|
805
|
+
const keys = (0, modularChangeTypes_js_1.newCrossFieldKeyTable)();
|
|
922
806
|
this.populateCrossFieldKeyTableForFieldMap(keys, fields, undefined);
|
|
923
807
|
nodes.forEachPair(([revision, localId], node) => {
|
|
924
808
|
if (node.fieldChanges !== undefined) {
|
|
@@ -945,6 +829,42 @@ class ModularChangeFamily {
|
|
|
945
829
|
const emptyChange = getChangeHandler(this.fieldKinds, fieldKind).createEmpty();
|
|
946
830
|
return { fieldKind, change: (0, index_js_3.brand)(emptyChange) };
|
|
947
831
|
}
|
|
832
|
+
validateChangeset(change) {
|
|
833
|
+
let numNodes = this.validateFieldChanges(change, change.fieldChanges, undefined);
|
|
834
|
+
for (const [[revision, localId], node] of change.nodeChanges.entries()) {
|
|
835
|
+
if (node.fieldChanges === undefined) {
|
|
836
|
+
continue;
|
|
837
|
+
}
|
|
838
|
+
const nodeId = { revision, localId };
|
|
839
|
+
const numChildren = this.validateFieldChanges(change, node.fieldChanges, nodeId);
|
|
840
|
+
numNodes += numChildren;
|
|
841
|
+
}
|
|
842
|
+
(0, internal_1.assert)(numNodes === change.nodeChanges.size, 0xa4d /* Node table contains unparented nodes */);
|
|
843
|
+
}
|
|
844
|
+
/**
|
|
845
|
+
* Asserts that each child and cross field key in each field has a correct entry in
|
|
846
|
+
* `nodeToParent` or `crossFieldKeyTable`.
|
|
847
|
+
* @returns the number of children found.
|
|
848
|
+
*/
|
|
849
|
+
validateFieldChanges(change, fieldChanges, nodeParent) {
|
|
850
|
+
let numChildren = 0;
|
|
851
|
+
for (const [field, fieldChange] of fieldChanges.entries()) {
|
|
852
|
+
const fieldId = { nodeId: nodeParent, field };
|
|
853
|
+
const handler = getChangeHandler(this.fieldKinds, fieldChange.fieldKind);
|
|
854
|
+
for (const [child, _index] of handler.getNestedChanges(fieldChange.change)) {
|
|
855
|
+
const parentFieldId = getParentFieldId(change, child);
|
|
856
|
+
(0, internal_1.assert)(areEqualFieldIds(parentFieldId, fieldId), 0xa4e /* Inconsistent node parentage */);
|
|
857
|
+
numChildren += 1;
|
|
858
|
+
}
|
|
859
|
+
for (const keyRange of handler.getCrossFieldKeys(fieldChange.change)) {
|
|
860
|
+
const fields = getFieldsForCrossFieldKey(change, keyRange.key, keyRange.count);
|
|
861
|
+
(0, internal_1.assert)(fields.length === 1 &&
|
|
862
|
+
fields[0] !== undefined &&
|
|
863
|
+
areEqualFieldIds(fields[0], fieldId), 0xa4f /* Inconsistent cross field keys */);
|
|
864
|
+
}
|
|
865
|
+
}
|
|
866
|
+
return numChildren;
|
|
867
|
+
}
|
|
948
868
|
getEffectiveChange(change) {
|
|
949
869
|
if (hasConflicts(change)) {
|
|
950
870
|
return this.muteChange(change);
|
|
@@ -957,8 +877,7 @@ class ModularChangeFamily {
|
|
|
957
877
|
muteChange(change) {
|
|
958
878
|
const muted = {
|
|
959
879
|
...change,
|
|
960
|
-
|
|
961
|
-
crossFieldKeys: (0, modularChangeTypes_js_1.newCrossFieldRangeTable)(),
|
|
880
|
+
crossFieldKeys: (0, modularChangeTypes_js_1.newCrossFieldKeyTable)(),
|
|
962
881
|
fieldChanges: this.muteFieldChanges(change.fieldChanges),
|
|
963
882
|
nodeChanges: (0, index_js_3.brand)(change.nodeChanges.mapValues((v) => this.muteNodeChange(v))),
|
|
964
883
|
};
|
|
@@ -987,7 +906,7 @@ class ModularChangeFamily {
|
|
|
987
906
|
exports.ModularChangeFamily = ModularChangeFamily;
|
|
988
907
|
ModularChangeFamily.emptyChange = makeModularChangeset();
|
|
989
908
|
function replaceCrossFieldKeyTableRevisions(table, replacer, nodeAliases) {
|
|
990
|
-
const updated = (0, modularChangeTypes_js_1.
|
|
909
|
+
const updated = (0, modularChangeTypes_js_1.newCrossFieldKeyTable)();
|
|
991
910
|
for (const entry of table.entries()) {
|
|
992
911
|
const key = entry.start;
|
|
993
912
|
const updatedKey = replacer.getUpdatedAtomId(key);
|
|
@@ -1046,19 +965,6 @@ function composeBuildsDestroysAndRefreshers(change1, change2) {
|
|
|
1046
965
|
}
|
|
1047
966
|
}
|
|
1048
967
|
}
|
|
1049
|
-
// It's possible to have a build and a refresher for the same root because an attach operation need not be performed in the same changeset as the corresponding build.
|
|
1050
|
-
if (change1.builds !== undefined && change2.refreshers !== undefined) {
|
|
1051
|
-
for (const [key, chunk] of change2.refreshers.entries()) {
|
|
1052
|
-
(0, internal_1.assert)(chunk.topLevelLength === 1, "Expected refresher chunk to have length 1");
|
|
1053
|
-
const match = change1.builds.getPairOrNextLower(key);
|
|
1054
|
-
if (match !== undefined) {
|
|
1055
|
-
const [buildKey, buildChunk] = match;
|
|
1056
|
-
if (buildKey[0] === key[0] && buildKey[1] + buildChunk.topLevelLength > key[1]) {
|
|
1057
|
-
allRefreshers.delete(key);
|
|
1058
|
-
}
|
|
1059
|
-
}
|
|
1060
|
-
}
|
|
1061
|
-
}
|
|
1062
968
|
return { allBuilds, allDestroys, allRefreshers };
|
|
1063
969
|
}
|
|
1064
970
|
function invertBuilds(builds) {
|
|
@@ -1083,53 +989,20 @@ function invertBuilds(builds) {
|
|
|
1083
989
|
* @param fieldKinds - The field kinds to delegate to.
|
|
1084
990
|
*/
|
|
1085
991
|
function* relevantRemovedRoots(change, fieldKinds) {
|
|
1086
|
-
|
|
1087
|
-
addAttachesToSet(change, rootIds);
|
|
1088
|
-
addRenamesToSet(change, rootIds);
|
|
1089
|
-
for (const [[revision, localId]] of change.rootNodes.nodeChanges.entries()) {
|
|
1090
|
-
rootIds.set({ revision, localId }, 1, true);
|
|
1091
|
-
}
|
|
1092
|
-
for (const entry of rootIds.entries()) {
|
|
1093
|
-
for (let offset = 0; offset < entry.length; offset++) {
|
|
1094
|
-
const detachId = (0, index_js_2.offsetChangeAtomId)(entry.start, offset);
|
|
1095
|
-
yield (0, index_js_2.makeDetachedNodeId)(detachId.revision, detachId.localId);
|
|
1096
|
-
}
|
|
1097
|
-
}
|
|
992
|
+
yield* relevantRemovedRootsFromFields(change.fieldChanges, change.nodeChanges, fieldKinds);
|
|
1098
993
|
}
|
|
1099
994
|
exports.relevantRemovedRoots = relevantRemovedRoots;
|
|
1100
|
-
function*
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
}
|
|
1105
|
-
}
|
|
1106
|
-
}
|
|
1107
|
-
exports.getBuildIds = getBuildIds;
|
|
1108
|
-
function addAttachesToSet(change, rootIds) {
|
|
1109
|
-
// This includes each attach which does not have a corresponding detach.
|
|
1110
|
-
for (const entry of change.crossFieldKeys.entries()) {
|
|
1111
|
-
if (entry.start.target !== crossFieldQueries_js_1.CrossFieldTarget.Destination) {
|
|
1112
|
-
continue;
|
|
1113
|
-
}
|
|
1114
|
-
for (const detachIdEntry of change.rootNodes.newToOldId.getAll2(entry.start, entry.length)) {
|
|
1115
|
-
const detachId = detachIdEntry.value ?? (0, index_js_2.offsetChangeAtomId)(entry.start, detachIdEntry.offset);
|
|
1116
|
-
for (const detachEntry of change.crossFieldKeys.getAll2({ ...detachId, target: crossFieldQueries_js_1.CrossFieldTarget.Source }, detachIdEntry.length)) {
|
|
1117
|
-
if (detachEntry.value === undefined) {
|
|
1118
|
-
rootIds.set((0, index_js_2.offsetChangeAtomId)(detachId, detachEntry.offset), detachEntry.length, true);
|
|
1119
|
-
}
|
|
1120
|
-
}
|
|
1121
|
-
}
|
|
995
|
+
function* relevantRemovedRootsFromNode(node, nodeChanges, fieldKinds) {
|
|
996
|
+
const nodeChangeset = nodeChangeFromId(nodeChanges, node);
|
|
997
|
+
if (nodeChangeset.fieldChanges !== undefined) {
|
|
998
|
+
yield* relevantRemovedRootsFromFields(nodeChangeset.fieldChanges, nodeChanges, fieldKinds);
|
|
1122
999
|
}
|
|
1123
1000
|
}
|
|
1124
|
-
function
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
if (detachEntry.value === undefined) {
|
|
1130
|
-
rootIds.set(renameEntry.start, renameEntry.length, true);
|
|
1131
|
-
}
|
|
1132
|
-
}
|
|
1001
|
+
function* relevantRemovedRootsFromFields(change, nodeChanges, fieldKinds) {
|
|
1002
|
+
const delegate = (node) => relevantRemovedRootsFromNode(node, nodeChanges, fieldKinds);
|
|
1003
|
+
for (const [_, fieldChange] of change) {
|
|
1004
|
+
const handler = getChangeHandler(fieldKinds, fieldChange.fieldKind);
|
|
1005
|
+
yield* handler.relevantRemovedRoots(fieldChange.change, delegate);
|
|
1133
1006
|
}
|
|
1134
1007
|
}
|
|
1135
1008
|
/**
|
|
@@ -1175,14 +1048,13 @@ function updateRefreshers(change, getDetachedNode, removedRoots, requireRefreshe
|
|
|
1175
1048
|
refreshers.set([root.major, (0, index_js_3.brand)(root.minor)], node);
|
|
1176
1049
|
}
|
|
1177
1050
|
}
|
|
1178
|
-
const { fieldChanges, nodeChanges, nodeToParent, nodeAliases, crossFieldKeys, maxId, revisions, constraintViolationCount, constraintViolationCountOnRevert, builds, destroys,
|
|
1051
|
+
const { fieldChanges, nodeChanges, nodeToParent, nodeAliases, crossFieldKeys, maxId, revisions, constraintViolationCount, constraintViolationCountOnRevert, builds, destroys, } = change;
|
|
1179
1052
|
return makeModularChangeset({
|
|
1180
1053
|
fieldChanges,
|
|
1181
1054
|
nodeChanges,
|
|
1182
1055
|
nodeToParent,
|
|
1183
1056
|
nodeAliases,
|
|
1184
1057
|
crossFieldKeys,
|
|
1185
|
-
rootNodes,
|
|
1186
1058
|
maxId: maxId,
|
|
1187
1059
|
revisions,
|
|
1188
1060
|
constraintViolationCount,
|
|
@@ -1202,24 +1074,11 @@ exports.updateRefreshers = updateRefreshers;
|
|
|
1202
1074
|
function intoDelta(taggedChange, fieldKinds) {
|
|
1203
1075
|
const change = taggedChange.change;
|
|
1204
1076
|
const rootDelta = {};
|
|
1077
|
+
const global = [];
|
|
1078
|
+
const rename = [];
|
|
1205
1079
|
if (!hasConflicts(change)) {
|
|
1206
1080
|
// If there are no constraint violations, then tree changes apply.
|
|
1207
|
-
const fieldDeltas = intoDeltaImpl(change.fieldChanges, change.nodeChanges,
|
|
1208
|
-
const global = [];
|
|
1209
|
-
for (const [[major, minor], nodeId] of change.rootNodes.nodeChanges.entries()) {
|
|
1210
|
-
global.push({
|
|
1211
|
-
id: { major, minor },
|
|
1212
|
-
fields: deltaFromNodeChange(nodeChangeFromId(change.nodeChanges, change.nodeAliases, nodeId), change.nodeChanges, change.nodeAliases, fieldKinds),
|
|
1213
|
-
});
|
|
1214
|
-
}
|
|
1215
|
-
const rename = [];
|
|
1216
|
-
for (const { start: oldId, value: newId, length, } of change.rootNodes.oldToNewId.entries()) {
|
|
1217
|
-
rename.push({
|
|
1218
|
-
count: length,
|
|
1219
|
-
oldId: (0, index_js_2.makeDetachedNodeId)(oldId.revision, oldId.localId),
|
|
1220
|
-
newId: (0, index_js_2.makeDetachedNodeId)(newId.revision, newId.localId),
|
|
1221
|
-
});
|
|
1222
|
-
}
|
|
1081
|
+
const fieldDeltas = intoDeltaImpl(change.fieldChanges, change.nodeChanges, fieldKinds, global, rename);
|
|
1223
1082
|
if (fieldDeltas.size > 0) {
|
|
1224
1083
|
rootDelta.fields = fieldDeltas;
|
|
1225
1084
|
}
|
|
@@ -1266,22 +1125,28 @@ function copyDetachedNodes(detachedNodes) {
|
|
|
1266
1125
|
/**
|
|
1267
1126
|
* @param change - The change to convert into a delta.
|
|
1268
1127
|
*/
|
|
1269
|
-
function intoDeltaImpl(change, nodeChanges,
|
|
1128
|
+
function intoDeltaImpl(change, nodeChanges, fieldKinds, global, rename) {
|
|
1270
1129
|
const delta = new Map();
|
|
1271
1130
|
for (const [field, fieldChange] of change) {
|
|
1272
|
-
const
|
|
1273
|
-
const nodeChange = nodeChangeFromId(nodeChanges,
|
|
1274
|
-
return deltaFromNodeChange(nodeChange, nodeChanges,
|
|
1131
|
+
const { local: fieldChanges, global: fieldGlobal, rename: fieldRename, } = getChangeHandler(fieldKinds, fieldChange.fieldKind).intoDelta(fieldChange.change, (childChange) => {
|
|
1132
|
+
const nodeChange = nodeChangeFromId(nodeChanges, childChange);
|
|
1133
|
+
return deltaFromNodeChange(nodeChange, nodeChanges, fieldKinds, global, rename);
|
|
1275
1134
|
});
|
|
1276
|
-
if (
|
|
1277
|
-
delta.set(field,
|
|
1135
|
+
if (fieldChanges !== undefined && fieldChanges.length > 0) {
|
|
1136
|
+
delta.set(field, fieldChanges);
|
|
1137
|
+
}
|
|
1138
|
+
for (const c of fieldGlobal ?? []) {
|
|
1139
|
+
global.push(c);
|
|
1140
|
+
}
|
|
1141
|
+
for (const r of fieldRename ?? []) {
|
|
1142
|
+
rename.push(r);
|
|
1278
1143
|
}
|
|
1279
1144
|
}
|
|
1280
1145
|
return delta;
|
|
1281
1146
|
}
|
|
1282
|
-
function deltaFromNodeChange(change, nodeChanges,
|
|
1147
|
+
function deltaFromNodeChange(change, nodeChanges, fieldKinds, global, rename) {
|
|
1283
1148
|
if (change.fieldChanges !== undefined) {
|
|
1284
|
-
return intoDeltaImpl(change.fieldChanges, nodeChanges,
|
|
1149
|
+
return intoDeltaImpl(change.fieldChanges, nodeChanges, fieldKinds, global, rename);
|
|
1285
1150
|
}
|
|
1286
1151
|
// TODO: update the API to allow undefined to be returned here
|
|
1287
1152
|
return new Map();
|
|
@@ -1331,22 +1196,30 @@ function getChangeHandler(fieldKinds, kind) {
|
|
|
1331
1196
|
return getFieldKind(fieldKinds, kind).changeHandler;
|
|
1332
1197
|
}
|
|
1333
1198
|
exports.getChangeHandler = getChangeHandler;
|
|
1334
|
-
function newComposeTable(baseChange, newChange,
|
|
1199
|
+
function newComposeTable(baseChange, newChange, composedNodeToParent) {
|
|
1335
1200
|
return {
|
|
1336
|
-
|
|
1337
|
-
entries: newDetachedEntryMap(),
|
|
1201
|
+
...newCrossFieldTable(),
|
|
1338
1202
|
baseChange,
|
|
1339
1203
|
newChange,
|
|
1340
1204
|
fieldToContext: new Map(),
|
|
1341
1205
|
newFieldToBaseField: new Map(),
|
|
1342
1206
|
newToBaseNodeId: (0, index_js_3.newTupleBTree)(),
|
|
1343
1207
|
composedNodes: new Set(),
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1208
|
+
composedNodeToParent,
|
|
1209
|
+
pendingCompositions: {
|
|
1210
|
+
nodeIdsToCompose: [],
|
|
1211
|
+
affectedBaseFields: (0, index_js_3.newTupleBTree)(),
|
|
1212
|
+
affectedNewFields: (0, index_js_3.newTupleBTree)(),
|
|
1213
|
+
},
|
|
1214
|
+
};
|
|
1215
|
+
}
|
|
1216
|
+
function newCrossFieldTable() {
|
|
1217
|
+
return {
|
|
1218
|
+
srcTable: (0, index_js_2.newChangeAtomIdRangeMap)(),
|
|
1219
|
+
dstTable: (0, index_js_2.newChangeAtomIdRangeMap)(),
|
|
1220
|
+
srcDependents: (0, index_js_2.newChangeAtomIdRangeMap)(),
|
|
1221
|
+
dstDependents: (0, index_js_2.newChangeAtomIdRangeMap)(),
|
|
1222
|
+
invalidatedFields: new Set(),
|
|
1350
1223
|
};
|
|
1351
1224
|
}
|
|
1352
1225
|
function newConstraintState(violationCount) {
|
|
@@ -1354,353 +1227,146 @@ function newConstraintState(violationCount) {
|
|
|
1354
1227
|
violationCount,
|
|
1355
1228
|
};
|
|
1356
1229
|
}
|
|
1357
|
-
class
|
|
1358
|
-
constructor(
|
|
1359
|
-
this.
|
|
1360
|
-
this.
|
|
1230
|
+
class CrossFieldManagerI {
|
|
1231
|
+
constructor(crossFieldTable, currentFieldKey, allowInval = true) {
|
|
1232
|
+
this.crossFieldTable = crossFieldTable;
|
|
1233
|
+
this.currentFieldKey = currentFieldKey;
|
|
1234
|
+
this.allowInval = allowInval;
|
|
1361
1235
|
}
|
|
1362
|
-
|
|
1363
|
-
if (
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
else {
|
|
1371
|
-
(0, crossFieldQueries_js_1.setInCrossFieldMap)(this.table.entries, attachEntry.value, count, nodeChange);
|
|
1372
|
-
this.table.invalidatedFields.add(fieldChangeFromId(this.table.change, attachFieldEntry.value));
|
|
1373
|
-
}
|
|
1374
|
-
}
|
|
1375
|
-
if (!(0, index_js_2.areEqualChangeAtomIds)(detachId, newAttachId)) {
|
|
1376
|
-
for (const entry of doesChangeAttachNodes(this.table.change.crossFieldKeys, detachId, count)) {
|
|
1377
|
-
if (!entry.value) {
|
|
1378
|
-
this.table.attachToDetachId.set(newAttachId, count, detachId);
|
|
1379
|
-
this.table.invertedRoots.detachLocations.set(detachId, count, this.fieldId);
|
|
1236
|
+
set(target, revision, id, count, newValue, invalidateDependents) {
|
|
1237
|
+
if (invalidateDependents && this.allowInval) {
|
|
1238
|
+
const lastChangedId = id + count - 1;
|
|
1239
|
+
let firstId = id;
|
|
1240
|
+
while (firstId <= lastChangedId) {
|
|
1241
|
+
const dependentEntry = (0, crossFieldQueries_js_1.getFirstFromCrossFieldMap)(this.getDependents(target), revision, firstId, lastChangedId - firstId + 1);
|
|
1242
|
+
if (dependentEntry.value !== undefined) {
|
|
1243
|
+
this.crossFieldTable.invalidatedFields.add(dependentEntry.value);
|
|
1380
1244
|
}
|
|
1245
|
+
firstId = (0, index_js_3.brand)(firstId + dependentEntry.length);
|
|
1381
1246
|
}
|
|
1382
1247
|
}
|
|
1248
|
+
(0, crossFieldQueries_js_1.setInCrossFieldMap)(this.getMap(target), revision, id, count, newValue);
|
|
1383
1249
|
}
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
let result;
|
|
1391
|
-
if (detachEntry.value === undefined) {
|
|
1392
|
-
// This node is detached in the input context of the original change.
|
|
1393
|
-
const nodeIdEntry = (0, changeAtomIdBTree_js_1.rangeQueryChangeAtomIdMap)(this.table.change.rootNodes.nodeChanges, detachIdEntry.value, countToProcess);
|
|
1394
|
-
countToProcess = nodeIdEntry.length;
|
|
1395
|
-
result = {
|
|
1396
|
-
value: { nodeChange: nodeIdEntry.value, detachId: detachIdEntry.value },
|
|
1397
|
-
length: countToProcess,
|
|
1398
|
-
};
|
|
1399
|
-
}
|
|
1400
|
-
else {
|
|
1401
|
-
const moveEntry = this.table.entries.getFirst(attachId, countToProcess);
|
|
1402
|
-
result = { ...moveEntry, value: { nodeChange: moveEntry.value } };
|
|
1403
|
-
}
|
|
1404
|
-
if (result.value?.nodeChange !== undefined) {
|
|
1405
|
-
(0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(this.table.invertedNodeToParent, result.value.nodeChange, {
|
|
1406
|
-
field: this.fieldId,
|
|
1407
|
-
});
|
|
1250
|
+
get(target, revision, id, count, addDependency) {
|
|
1251
|
+
if (addDependency) {
|
|
1252
|
+
// We assume that if there is already an entry for this ID it is because
|
|
1253
|
+
// a field handler has called compose on the same node multiple times.
|
|
1254
|
+
// In this case we only want to update the latest version, so we overwrite the dependency.
|
|
1255
|
+
(0, crossFieldQueries_js_1.setInCrossFieldMap)(this.getDependents(target), revision, id, count, this.currentFieldKey);
|
|
1408
1256
|
}
|
|
1409
|
-
return
|
|
1257
|
+
return (0, crossFieldQueries_js_1.getFirstFromCrossFieldMap)(this.getMap(target), revision, id, count);
|
|
1258
|
+
}
|
|
1259
|
+
getMap(target) {
|
|
1260
|
+
return target === crossFieldQueries_js_1.CrossFieldTarget.Source
|
|
1261
|
+
? this.crossFieldTable.srcTable
|
|
1262
|
+
: this.crossFieldTable.dstTable;
|
|
1263
|
+
}
|
|
1264
|
+
getDependents(target) {
|
|
1265
|
+
return target === crossFieldQueries_js_1.CrossFieldTarget.Source
|
|
1266
|
+
? this.crossFieldTable.srcDependents
|
|
1267
|
+
: this.crossFieldTable.dstDependents;
|
|
1410
1268
|
}
|
|
1411
1269
|
}
|
|
1412
|
-
class
|
|
1413
|
-
constructor(table, fieldId, allowInval = true) {
|
|
1414
|
-
|
|
1270
|
+
class InvertManager extends CrossFieldManagerI {
|
|
1271
|
+
constructor(table, field, fieldId, allowInval = true) {
|
|
1272
|
+
super(table, field, allowInval);
|
|
1415
1273
|
this.fieldId = fieldId;
|
|
1416
|
-
this.allowInval = allowInval;
|
|
1417
1274
|
}
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
const detachEntry = firstDetachIdFromAttachId(this.table.baseChange.rootNodes, baseAttachId, countToProcess);
|
|
1421
|
-
countToProcess = detachEntry.length;
|
|
1422
|
-
const nodeEntry = (0, changeAtomIdBTree_js_1.rangeQueryChangeAtomIdMap)(this.table.newChange.rootNodes.nodeChanges, detachEntry.value, countToProcess);
|
|
1423
|
-
countToProcess = nodeEntry.length;
|
|
1424
|
-
const newNodeId = nodeEntry.value;
|
|
1425
|
-
const newRenameEntry = this.table.newChange.rootNodes.oldToNewId.getFirst(detachEntry.value, countToProcess);
|
|
1426
|
-
countToProcess = newRenameEntry.length;
|
|
1427
|
-
let result;
|
|
1428
|
-
// eslint-disable-next-line unicorn/prefer-ternary
|
|
1429
|
-
if (newNodeId !== undefined || newRenameEntry.value !== undefined) {
|
|
1430
|
-
result = {
|
|
1431
|
-
...newRenameEntry,
|
|
1432
|
-
value: { detachId: newRenameEntry.value, nodeChange: newNodeId },
|
|
1433
|
-
};
|
|
1434
|
-
}
|
|
1435
|
-
else {
|
|
1436
|
-
// This handles the case where the base changeset has moved these nodes,
|
|
1437
|
-
// meaning they were attached in the input context of the base changeset.
|
|
1438
|
-
result = this.table.entries.getFirst(baseAttachId, countToProcess);
|
|
1439
|
-
}
|
|
1440
|
-
// TODO: Consider moving these two checks into a separate method so that this function has no side effects.
|
|
1441
|
-
if (result.value?.detachId !== undefined) {
|
|
1442
|
-
this.table.rebasedDetachLocations.set(result.value.detachId, result.length, this.fieldId);
|
|
1443
|
-
}
|
|
1444
|
-
if (result.value?.nodeChange !== undefined) {
|
|
1445
|
-
(0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(this.table.rebasedNodeToParent, result.value.nodeChange, {
|
|
1446
|
-
field: this.fieldId,
|
|
1447
|
-
});
|
|
1448
|
-
}
|
|
1449
|
-
return result;
|
|
1450
|
-
}
|
|
1451
|
-
rebaseOverDetach(baseDetachId, count, newDetachId, nodeChange, cellRename) {
|
|
1452
|
-
let countToProcess = count;
|
|
1453
|
-
const attachIdEntry = firstAttachIdFromDetachId(this.table.baseRoots, baseDetachId, countToProcess);
|
|
1454
|
-
const baseAttachId = attachIdEntry.value;
|
|
1455
|
-
countToProcess = attachIdEntry.length;
|
|
1456
|
-
const attachFieldEntry = getFirstFieldForCrossFieldKey(this.table.baseChange, { ...baseAttachId, target: crossFieldQueries_js_1.CrossFieldTarget.Destination }, countToProcess);
|
|
1457
|
-
countToProcess = attachFieldEntry.length;
|
|
1458
|
-
const detachedMoveEntry = this.table.baseChange.rootNodes.outputDetachLocations.getFirst(baseDetachId, countToProcess);
|
|
1459
|
-
countToProcess = detachedMoveEntry.length;
|
|
1460
|
-
const destinationField = attachFieldEntry.value ?? detachedMoveEntry.value;
|
|
1461
|
-
if (destinationField !== undefined) {
|
|
1462
|
-
// The base detach is part of a move (or move of detach location) in the base changeset.
|
|
1463
|
-
(0, crossFieldQueries_js_1.setInCrossFieldMap)(this.table.entries, baseAttachId, countToProcess, {
|
|
1464
|
-
nodeChange,
|
|
1465
|
-
detachId: newDetachId,
|
|
1466
|
-
cellRename,
|
|
1467
|
-
});
|
|
1468
|
-
if (nodeChange !== undefined || newDetachId !== undefined) {
|
|
1469
|
-
this.invalidateBaseFields([destinationField]);
|
|
1470
|
-
}
|
|
1471
|
-
}
|
|
1472
|
-
if (attachFieldEntry.value === undefined) {
|
|
1473
|
-
// These nodes are detached in the output context of the base changeset.
|
|
1474
|
-
if (nodeChange !== undefined) {
|
|
1475
|
-
assignRootChange(this.table.rebasedRootNodes, this.table.rebasedNodeToParent, baseAttachId, nodeChange, this.fieldId, this.table.rebaseVersion);
|
|
1476
|
-
}
|
|
1477
|
-
if (newDetachId !== undefined) {
|
|
1478
|
-
addNodeRename(this.table.rebasedRootNodes, baseAttachId, newDetachId, countToProcess, this.fieldId);
|
|
1479
|
-
}
|
|
1480
|
-
}
|
|
1481
|
-
if (newDetachId !== undefined) {
|
|
1482
|
-
this.table.movedDetaches.set(newDetachId, countToProcess, true);
|
|
1483
|
-
}
|
|
1484
|
-
if (countToProcess < count) {
|
|
1485
|
-
const remainingCount = count - countToProcess;
|
|
1486
|
-
const nextDetachId = newDetachId === undefined
|
|
1487
|
-
? undefined
|
|
1488
|
-
: (0, index_js_2.offsetChangeAtomId)(newDetachId, countToProcess);
|
|
1489
|
-
this.rebaseOverDetach((0, index_js_2.offsetChangeAtomId)(baseDetachId, countToProcess), remainingCount, nextDetachId, nodeChange);
|
|
1490
|
-
}
|
|
1491
|
-
}
|
|
1492
|
-
addDetach(id, count) {
|
|
1493
|
-
this.table.rebasedDetachLocations.set(id, count, this.fieldId);
|
|
1494
|
-
}
|
|
1495
|
-
removeDetach(id, count) {
|
|
1496
|
-
this.table.movedDetaches.set(id, count, true);
|
|
1497
|
-
}
|
|
1498
|
-
doesBaseAttachNodes(id, count) {
|
|
1499
|
-
let countToProcess = count;
|
|
1500
|
-
const attachEntry = getFirstAttachField(this.table.baseChange.crossFieldKeys, id, countToProcess);
|
|
1501
|
-
countToProcess = attachEntry.length;
|
|
1502
|
-
return { start: id, value: attachEntry.value !== undefined, length: countToProcess };
|
|
1503
|
-
}
|
|
1504
|
-
getBaseRename(id, count) {
|
|
1505
|
-
return this.table.baseChange.rootNodes.oldToNewId.getFirst(id, count);
|
|
1506
|
-
}
|
|
1507
|
-
getNewRenameForBaseRename(baseRenameTo, count) {
|
|
1508
|
-
let countToProcess = count;
|
|
1509
|
-
const inputEntry = firstDetachIdFromAttachId(this.table.baseChange.rootNodes, baseRenameTo, countToProcess);
|
|
1510
|
-
const attachEntry = getFirstAttachField(this.table.baseChange.crossFieldKeys, baseRenameTo, countToProcess);
|
|
1511
|
-
countToProcess = attachEntry.length;
|
|
1512
|
-
if (attachEntry.value !== undefined) {
|
|
1513
|
-
// These nodes are attached in the output context of the base changeset.
|
|
1514
|
-
return { value: undefined, length: countToProcess };
|
|
1515
|
-
}
|
|
1516
|
-
countToProcess = inputEntry.length;
|
|
1517
|
-
const inputId = inputEntry.value;
|
|
1518
|
-
const moveEntry = this.table.entries.getFirst(inputId, countToProcess);
|
|
1519
|
-
countToProcess = moveEntry.length;
|
|
1520
|
-
if (moveEntry.value !== undefined) {
|
|
1521
|
-
return { ...moveEntry, value: moveEntry.value.cellRename ?? moveEntry.value.detachId };
|
|
1522
|
-
}
|
|
1523
|
-
return this.table.newChange.rootNodes.oldToNewId.getFirst(inputId, countToProcess);
|
|
1524
|
-
}
|
|
1525
|
-
invalidateBaseFields(fields) {
|
|
1526
|
-
if (this.allowInval) {
|
|
1527
|
-
for (const fieldId of fields) {
|
|
1528
|
-
this.table.affectedBaseFields.set(fieldIdKeyFromFieldId(fieldId), true);
|
|
1529
|
-
}
|
|
1530
|
-
}
|
|
1275
|
+
onMoveIn(id) {
|
|
1276
|
+
(0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(this.table.invertedNodeToParent, id, this.fieldId);
|
|
1531
1277
|
}
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
(
|
|
1536
|
-
|
|
1537
|
-
(0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(nodeToParent, nodeId, { root: detachId });
|
|
1278
|
+
moveKey(target, revision, id, count) {
|
|
1279
|
+
(0, internal_1.assert)(false, 0x9c5 /* Keys should not be moved manually during invert */);
|
|
1280
|
+
}
|
|
1281
|
+
get table() {
|
|
1282
|
+
return this.crossFieldTable;
|
|
1538
1283
|
}
|
|
1539
|
-
table.detachLocations.set(detachId, 1, detachLocation);
|
|
1540
1284
|
}
|
|
1541
|
-
class
|
|
1542
|
-
constructor(table, fieldId, allowInval = true) {
|
|
1543
|
-
|
|
1285
|
+
class RebaseManager extends CrossFieldManagerI {
|
|
1286
|
+
constructor(table, currentField, fieldId, allowInval = true) {
|
|
1287
|
+
super(table, currentField, allowInval);
|
|
1544
1288
|
this.fieldId = fieldId;
|
|
1545
|
-
this.allowInval = allowInval;
|
|
1546
1289
|
}
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
else {
|
|
1564
|
-
// The base detach was part of a move.
|
|
1565
|
-
// We check if we've previously seen a node change at the move destination.
|
|
1566
|
-
const entry = this.table.entries.getFirst(baseDetachId, countToProcess);
|
|
1567
|
-
result = { value: entry.value, length: entry.length };
|
|
1568
|
-
}
|
|
1569
|
-
// TODO: Consider moving this to a separate method so that this method can be side-effect free.
|
|
1570
|
-
if (result.value?.nodeChange !== undefined) {
|
|
1571
|
-
(0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(this.table.movedNodeToParent, result.value.nodeChange, {
|
|
1572
|
-
field: this.fieldId,
|
|
1573
|
-
});
|
|
1574
|
-
}
|
|
1575
|
-
return result;
|
|
1576
|
-
}
|
|
1577
|
-
composeAttachDetach(baseAttachId, newDetachId, count) {
|
|
1578
|
-
let countToProcess = count;
|
|
1579
|
-
const newAttachEntry = getFirstAttachField(this.table.newChange.crossFieldKeys, newDetachId, countToProcess);
|
|
1580
|
-
countToProcess = newAttachEntry.length;
|
|
1581
|
-
// Both changes can have the same ID if they came from inverse changesets.
|
|
1582
|
-
// If the new detach is part of a move,
|
|
1583
|
-
// then both input changesets contain the attach cross-field key for this ID.
|
|
1584
|
-
// The new attach may still exist in the composed changeset so we do not remove it here.
|
|
1585
|
-
// The new attach will typically cancel with a base detach,
|
|
1586
|
-
// in which case the cross-field key will be removed in `composeDetachAttach`.
|
|
1587
|
-
const hasNewAttachWithBaseAttachId = (0, index_js_2.areEqualChangeAtomIds)(baseAttachId, newDetachId) && newAttachEntry.value !== undefined;
|
|
1588
|
-
if (!hasNewAttachWithBaseAttachId) {
|
|
1589
|
-
this.table.removedCrossFieldKeys.set({ ...baseAttachId, target: crossFieldQueries_js_1.CrossFieldTarget.Destination }, countToProcess, true);
|
|
1590
|
-
}
|
|
1591
|
-
const baseDetachEntry = getFirstDetachField(this.table.baseChange.crossFieldKeys, baseAttachId, countToProcess);
|
|
1592
|
-
countToProcess = baseDetachEntry.length;
|
|
1593
|
-
const baseRootIdEntry = firstDetachIdFromAttachId(this.table.baseChange.rootNodes, baseAttachId, countToProcess);
|
|
1594
|
-
countToProcess = baseRootIdEntry.length;
|
|
1595
|
-
const baseDetachId = baseRootIdEntry.value;
|
|
1596
|
-
if (baseDetachEntry.value === undefined) {
|
|
1597
|
-
const baseDetachLocationEntry = this.table.baseChange.rootNodes.detachLocations.getFirst(baseDetachId, countToProcess);
|
|
1598
|
-
countToProcess = baseDetachLocationEntry.length;
|
|
1599
|
-
// These nodes were detached in the base change's input context,
|
|
1600
|
-
// so the net effect of the two changes is a rename.
|
|
1601
|
-
appendNodeRename(this.table.composedRootNodes, baseAttachId, newDetachId, baseDetachEntry.length, this.table.baseChange.rootNodes, baseDetachLocationEntry.value ?? this.fieldId);
|
|
1602
|
-
this.table.removedCrossFieldKeys.set({ ...newDetachId, target: crossFieldQueries_js_1.CrossFieldTarget.Source }, countToProcess, true);
|
|
1603
|
-
}
|
|
1604
|
-
else {
|
|
1605
|
-
// The base change moves these nodes.
|
|
1606
|
-
const prevEntry = this.table.entries.getFirst(baseAttachId, baseDetachEntry.length).value ?? {};
|
|
1607
|
-
this.table.entries.set(baseAttachId, baseDetachEntry.length, {
|
|
1608
|
-
...prevEntry,
|
|
1609
|
-
detachId: newDetachId,
|
|
1610
|
-
});
|
|
1611
|
-
// The new detach will replace the base detach, so we remove the key for the base detach, unless they have the same ID.
|
|
1612
|
-
if (!(0, index_js_2.areEqualChangeAtomIds)(baseAttachId, newDetachId)) {
|
|
1613
|
-
this.table.removedCrossFieldKeys.set({ ...baseAttachId, target: crossFieldQueries_js_1.CrossFieldTarget.Source }, countToProcess, true);
|
|
1614
|
-
}
|
|
1615
|
-
this.table.movedCrossFieldKeys.set({ ...newDetachId, target: crossFieldQueries_js_1.CrossFieldTarget.Source }, countToProcess, baseDetachEntry.value);
|
|
1616
|
-
this.invalidateBaseFields([baseDetachEntry.value]);
|
|
1617
|
-
}
|
|
1618
|
-
if (newAttachEntry.value === undefined) {
|
|
1619
|
-
const newOutputDetachLocationEntry = this.table.newChange.rootNodes.outputDetachLocations.getFirst(newDetachId, countToProcess);
|
|
1620
|
-
countToProcess = newOutputDetachLocationEntry.length;
|
|
1621
|
-
this.table.composedRootNodes.outputDetachLocations.set(newDetachId, countToProcess, newOutputDetachLocationEntry.value ?? this.fieldId);
|
|
1622
|
-
}
|
|
1623
|
-
if (countToProcess < count) {
|
|
1624
|
-
const remainingCount = count - countToProcess;
|
|
1625
|
-
this.composeAttachDetach((0, index_js_2.offsetChangeAtomId)(baseAttachId, countToProcess), (0, index_js_2.offsetChangeAtomId)(newDetachId, countToProcess), remainingCount);
|
|
1626
|
-
}
|
|
1627
|
-
}
|
|
1628
|
-
sendNewChangesToBaseSourceLocation(baseAttachId, newChanges) {
|
|
1629
|
-
const { value: baseDetachId } = firstDetachIdFromAttachId(this.table.baseChange.rootNodes, baseAttachId, 1);
|
|
1630
|
-
const detachFields = getFieldsForCrossFieldKey(this.table.baseChange, {
|
|
1631
|
-
...baseDetachId,
|
|
1632
|
-
target: crossFieldQueries_js_1.CrossFieldTarget.Source,
|
|
1633
|
-
}, 1);
|
|
1634
|
-
if (detachFields.length > 0) {
|
|
1635
|
-
// The base attach is part of a move in the base changeset.
|
|
1636
|
-
const prevEntry = this.table.entries.getFirst(baseDetachId, 1).value ?? {};
|
|
1637
|
-
this.table.entries.set(baseDetachId, 1, { ...prevEntry, nodeChange: newChanges });
|
|
1638
|
-
if (newChanges !== undefined) {
|
|
1639
|
-
this.invalidateBaseFields(detachFields);
|
|
1290
|
+
set(target, revision, id, count, newValue, invalidateDependents) {
|
|
1291
|
+
if (invalidateDependents && this.allowInval) {
|
|
1292
|
+
const newFieldIds = getFieldsForCrossFieldKey(this.table.newChange, {
|
|
1293
|
+
target,
|
|
1294
|
+
revision,
|
|
1295
|
+
localId: id,
|
|
1296
|
+
}, count);
|
|
1297
|
+
(0, internal_1.assert)(newFieldIds.length === 0, 0x9c6 /* TODO: Modifying a cross-field key from the new changeset is currently unsupported */);
|
|
1298
|
+
const baseFieldIds = getFieldsForCrossFieldKey(this.table.baseChange, {
|
|
1299
|
+
target,
|
|
1300
|
+
revision,
|
|
1301
|
+
localId: id,
|
|
1302
|
+
}, count);
|
|
1303
|
+
(0, internal_1.assert)(baseFieldIds.length > 0, 0x9c7 /* Cross field key not registered in base or new change */);
|
|
1304
|
+
for (const baseFieldId of baseFieldIds) {
|
|
1305
|
+
this.table.affectedBaseFields.set([baseFieldId.nodeId?.revision, baseFieldId.nodeId?.localId, baseFieldId.field], true);
|
|
1640
1306
|
}
|
|
1641
1307
|
}
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1308
|
+
super.set(target, revision, id, count, newValue, invalidateDependents);
|
|
1309
|
+
}
|
|
1310
|
+
onMoveIn(id) {
|
|
1311
|
+
(0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(this.table.rebasedNodeToParent, id, this.fieldId);
|
|
1312
|
+
}
|
|
1313
|
+
moveKey(target, revision, id, count) {
|
|
1314
|
+
this.table.rebasedCrossFieldKeys.set({ target, revision, localId: id }, count, this.fieldId);
|
|
1315
|
+
}
|
|
1316
|
+
get table() {
|
|
1317
|
+
return this.crossFieldTable;
|
|
1318
|
+
}
|
|
1319
|
+
}
|
|
1320
|
+
// TODO: Deduplicate this with RebaseTable
|
|
1321
|
+
class ComposeManager extends CrossFieldManagerI {
|
|
1322
|
+
constructor(table, currentField, fieldId, allowInval = true) {
|
|
1323
|
+
super(table, currentField, allowInval);
|
|
1324
|
+
this.fieldId = fieldId;
|
|
1325
|
+
}
|
|
1326
|
+
set(target, revision, id, count, newValue, invalidateDependents) {
|
|
1327
|
+
if (invalidateDependents && this.allowInval) {
|
|
1328
|
+
const newFieldIds = getFieldsForCrossFieldKey(this.table.newChange, {
|
|
1329
|
+
target,
|
|
1330
|
+
revision,
|
|
1331
|
+
localId: id,
|
|
1332
|
+
}, count);
|
|
1333
|
+
if (newFieldIds.length > 0) {
|
|
1334
|
+
for (const newFieldId of newFieldIds) {
|
|
1335
|
+
this.table.pendingCompositions.affectedNewFields.set([newFieldId.nodeId?.revision, newFieldId.nodeId?.localId, newFieldId.field], true);
|
|
1336
|
+
}
|
|
1646
1337
|
}
|
|
1647
1338
|
else {
|
|
1648
|
-
|
|
1339
|
+
const baseFieldIds = getFieldsForCrossFieldKey(this.table.baseChange, {
|
|
1340
|
+
target,
|
|
1341
|
+
revision,
|
|
1342
|
+
localId: id,
|
|
1343
|
+
}, count);
|
|
1344
|
+
(0, internal_1.assert)(baseFieldIds.length > 0, 0x9c8 /* Cross field key not registered in base or new change */);
|
|
1345
|
+
for (const baseFieldId of baseFieldIds) {
|
|
1346
|
+
this.table.pendingCompositions.affectedBaseFields.set([baseFieldId.nodeId?.revision, baseFieldId.nodeId?.localId, baseFieldId.field], true);
|
|
1347
|
+
}
|
|
1649
1348
|
}
|
|
1650
1349
|
}
|
|
1350
|
+
super.set(target, revision, id, count, newValue, invalidateDependents);
|
|
1651
1351
|
}
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
const isReattachOfSameNodes = (0, index_js_2.areEqualChangeAtomIds)(renamedDetachEntry.value, newAttachId);
|
|
1655
|
-
return { ...renamedDetachEntry, value: isReattachOfSameNodes };
|
|
1656
|
-
}
|
|
1657
|
-
composeDetachAttach(baseDetachId, newAttachId, count, composeToPin) {
|
|
1658
|
-
const areSameEntry = this.areSameNodes(baseDetachId, newAttachId, count);
|
|
1659
|
-
const countToProcess = areSameEntry.length;
|
|
1660
|
-
if (areSameEntry.value) {
|
|
1661
|
-
// These nodes have been moved back to their original location, so the composed changeset should not have any renames for them.
|
|
1662
|
-
// Note that deleting the rename from `this.table.composedRootNodes` would change the result of this method
|
|
1663
|
-
// if it were rerun due to the field being invalidated, so we instead record that the rename should be deleted later.
|
|
1664
|
-
this.table.renamesToDelete.set(baseDetachId, countToProcess, true);
|
|
1665
|
-
}
|
|
1666
|
-
if (composeToPin) {
|
|
1667
|
-
this.table.movedCrossFieldKeys.set({ target: crossFieldQueries_js_1.CrossFieldTarget.Source, ...newAttachId }, countToProcess, this.fieldId);
|
|
1668
|
-
if (!(0, index_js_2.areEqualChangeAtomIds)(baseDetachId, newAttachId)) {
|
|
1669
|
-
// The pin will have `newAttachId` as both its detach and attach ID.
|
|
1670
|
-
// So we remove `baseDetachId` unless that is equal to the pin's detach ID.
|
|
1671
|
-
this.table.removedCrossFieldKeys.set({ target: crossFieldQueries_js_1.CrossFieldTarget.Source, ...baseDetachId }, countToProcess, true);
|
|
1672
|
-
}
|
|
1673
|
-
// Note that while change2 should already have this key, change1 may have a rollback for the same ID in a different location.
|
|
1674
|
-
// In that case, change1's attach should be canceled out by a detach from change2.
|
|
1675
|
-
// Here we make sure that the composed change has the correct location (this field) for the attach ID.
|
|
1676
|
-
this.table.movedCrossFieldKeys.set({ target: crossFieldQueries_js_1.CrossFieldTarget.Destination, ...newAttachId }, countToProcess, this.fieldId);
|
|
1677
|
-
}
|
|
1678
|
-
else {
|
|
1679
|
-
this.table.removedCrossFieldKeys.set({ target: crossFieldQueries_js_1.CrossFieldTarget.Source, ...baseDetachId }, countToProcess, true);
|
|
1680
|
-
this.table.removedCrossFieldKeys.set({ target: crossFieldQueries_js_1.CrossFieldTarget.Destination, ...newAttachId }, countToProcess, true);
|
|
1681
|
-
}
|
|
1682
|
-
if (countToProcess < count) {
|
|
1683
|
-
this.composeAttachDetach((0, index_js_2.offsetChangeAtomId)(baseDetachId, countToProcess), (0, index_js_2.offsetChangeAtomId)(newAttachId, countToProcess), count - countToProcess);
|
|
1684
|
-
}
|
|
1352
|
+
onMoveIn(id) {
|
|
1353
|
+
(0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(this.table.composedNodeToParent, id, this.fieldId);
|
|
1685
1354
|
}
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
}
|
|
1355
|
+
moveKey(target, revision, id, count) {
|
|
1356
|
+
throw new Error("Moving cross-field keys during compose is currently unsupported");
|
|
1357
|
+
}
|
|
1358
|
+
get table() {
|
|
1359
|
+
return this.crossFieldTable;
|
|
1692
1360
|
}
|
|
1693
1361
|
}
|
|
1694
1362
|
function makeModularChangeset(props) {
|
|
1695
1363
|
const p = props ?? { maxId: -1 };
|
|
1696
1364
|
const changeset = {
|
|
1697
|
-
rebaseVersion: p.rebaseVersion ?? 1,
|
|
1698
1365
|
fieldChanges: p.fieldChanges ?? new Map(),
|
|
1699
1366
|
nodeChanges: p.nodeChanges ?? (0, index_js_3.newTupleBTree)(),
|
|
1700
|
-
rootNodes: p.rootNodes ?? newRootTable(),
|
|
1701
1367
|
nodeToParent: p.nodeToParent ?? (0, index_js_3.newTupleBTree)(),
|
|
1702
1368
|
nodeAliases: p.nodeAliases ?? (0, index_js_3.newTupleBTree)(),
|
|
1703
|
-
crossFieldKeys: p.crossFieldKeys ?? (0, modularChangeTypes_js_1.
|
|
1369
|
+
crossFieldKeys: p.crossFieldKeys ?? (0, modularChangeTypes_js_1.newCrossFieldKeyTable)(),
|
|
1704
1370
|
};
|
|
1705
1371
|
if (p.revisions !== undefined && p.revisions.length > 0) {
|
|
1706
1372
|
changeset.revisions = p.revisions;
|
|
@@ -1740,9 +1406,6 @@ class ModularEditBuilder extends index_js_2.EditBuilder {
|
|
|
1740
1406
|
this.idAllocator = (0, index_js_3.idAllocatorFromMaxId)();
|
|
1741
1407
|
this.codecOptions = codecOptions;
|
|
1742
1408
|
}
|
|
1743
|
-
isInTransaction() {
|
|
1744
|
-
return this.transactionDepth > 0;
|
|
1745
|
-
}
|
|
1746
1409
|
enterTransaction() {
|
|
1747
1410
|
this.transactionDepth += 1;
|
|
1748
1411
|
if (this.transactionDepth === 1) {
|
|
@@ -1793,8 +1456,7 @@ class ModularEditBuilder extends index_js_2.EditBuilder {
|
|
|
1793
1456
|
fieldChange: { fieldKind, change },
|
|
1794
1457
|
nodeChanges: (0, index_js_3.newTupleBTree)(),
|
|
1795
1458
|
nodeToParent: (0, index_js_3.newTupleBTree)(),
|
|
1796
|
-
crossFieldKeys: (0, modularChangeTypes_js_1.
|
|
1797
|
-
rootNodes: newRootTable(),
|
|
1459
|
+
crossFieldKeys: (0, modularChangeTypes_js_1.newCrossFieldKeyTable)(),
|
|
1798
1460
|
idAllocator: this.idAllocator,
|
|
1799
1461
|
localCrossFieldKeys,
|
|
1800
1462
|
revision,
|
|
@@ -1813,7 +1475,6 @@ class ModularEditBuilder extends index_js_2.EditBuilder {
|
|
|
1813
1475
|
? makeModularChangeset({
|
|
1814
1476
|
maxId: this.idAllocator.getMaxId(),
|
|
1815
1477
|
builds: change.builds,
|
|
1816
|
-
rootNodes: renameTableFromRenameDescriptions(change.renames ?? []),
|
|
1817
1478
|
revisions: [{ revision: change.revision }],
|
|
1818
1479
|
})
|
|
1819
1480
|
: buildModularChangesetFromField({
|
|
@@ -1824,8 +1485,7 @@ class ModularEditBuilder extends index_js_2.EditBuilder {
|
|
|
1824
1485
|
},
|
|
1825
1486
|
nodeChanges: (0, index_js_3.newTupleBTree)(),
|
|
1826
1487
|
nodeToParent: (0, index_js_3.newTupleBTree)(),
|
|
1827
|
-
crossFieldKeys: (0, modularChangeTypes_js_1.
|
|
1828
|
-
rootNodes: newRootTable(),
|
|
1488
|
+
crossFieldKeys: (0, modularChangeTypes_js_1.newCrossFieldKeyTable)(),
|
|
1829
1489
|
idAllocator: this.idAllocator,
|
|
1830
1490
|
localCrossFieldKeys: getChangeHandler(this.fieldKinds, change.fieldKind).getCrossFieldKeys(change.change),
|
|
1831
1491
|
revision: change.revision,
|
|
@@ -1854,8 +1514,7 @@ class ModularEditBuilder extends index_js_2.EditBuilder {
|
|
|
1854
1514
|
nodeChange,
|
|
1855
1515
|
nodeChanges: (0, index_js_3.newTupleBTree)(),
|
|
1856
1516
|
nodeToParent: (0, index_js_3.newTupleBTree)(),
|
|
1857
|
-
crossFieldKeys: (0, modularChangeTypes_js_1.
|
|
1858
|
-
rootNodes: newRootTable(),
|
|
1517
|
+
crossFieldKeys: (0, modularChangeTypes_js_1.newCrossFieldKeyTable)(),
|
|
1859
1518
|
idAllocator: this.idAllocator,
|
|
1860
1519
|
revision,
|
|
1861
1520
|
}), revision));
|
|
@@ -1869,8 +1528,7 @@ class ModularEditBuilder extends index_js_2.EditBuilder {
|
|
|
1869
1528
|
nodeChange,
|
|
1870
1529
|
nodeChanges: (0, index_js_3.newTupleBTree)(),
|
|
1871
1530
|
nodeToParent: (0, index_js_3.newTupleBTree)(),
|
|
1872
|
-
crossFieldKeys: (0, modularChangeTypes_js_1.
|
|
1873
|
-
rootNodes: newRootTable(),
|
|
1531
|
+
crossFieldKeys: (0, modularChangeTypes_js_1.newCrossFieldKeyTable)(),
|
|
1874
1532
|
idAllocator: this.idAllocator,
|
|
1875
1533
|
revision,
|
|
1876
1534
|
}), revision));
|
|
@@ -1898,19 +1556,16 @@ class ModularEditBuilder extends index_js_2.EditBuilder {
|
|
|
1898
1556
|
}
|
|
1899
1557
|
exports.ModularEditBuilder = ModularEditBuilder;
|
|
1900
1558
|
function buildModularChangesetFromField(props) {
|
|
1901
|
-
const { path, fieldChange, nodeChanges, nodeToParent, crossFieldKeys,
|
|
1559
|
+
const { path, fieldChange, nodeChanges, nodeToParent, crossFieldKeys, idAllocator = (0, index_js_3.idAllocatorFromMaxId)(), localCrossFieldKeys = [], childId, revision, } = props;
|
|
1902
1560
|
const fieldChanges = new Map([[path.field, fieldChange]]);
|
|
1903
1561
|
if (path.parent === undefined) {
|
|
1904
|
-
const field = { nodeId: undefined, field: path.field };
|
|
1905
1562
|
for (const { key, count } of localCrossFieldKeys) {
|
|
1906
|
-
crossFieldKeys.set(key, count, field);
|
|
1563
|
+
crossFieldKeys.set(key, count, { nodeId: undefined, field: path.field });
|
|
1907
1564
|
}
|
|
1908
1565
|
if (childId !== undefined) {
|
|
1909
1566
|
(0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(nodeToParent, childId, {
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
field: path.field,
|
|
1913
|
-
},
|
|
1567
|
+
nodeId: undefined,
|
|
1568
|
+
field: path.field,
|
|
1914
1569
|
});
|
|
1915
1570
|
}
|
|
1916
1571
|
return makeModularChangeset({
|
|
@@ -1918,7 +1573,6 @@ function buildModularChangesetFromField(props) {
|
|
|
1918
1573
|
nodeChanges,
|
|
1919
1574
|
nodeToParent,
|
|
1920
1575
|
crossFieldKeys,
|
|
1921
|
-
rootNodes,
|
|
1922
1576
|
maxId: idAllocator.getMaxId(),
|
|
1923
1577
|
revisions: [{ revision }],
|
|
1924
1578
|
});
|
|
@@ -1927,13 +1581,13 @@ function buildModularChangesetFromField(props) {
|
|
|
1927
1581
|
fieldChanges,
|
|
1928
1582
|
};
|
|
1929
1583
|
const parentId = { localId: (0, index_js_3.brand)(idAllocator.allocate()), revision };
|
|
1930
|
-
const fieldId = { nodeId: parentId, field: path.field };
|
|
1931
1584
|
for (const { key, count } of localCrossFieldKeys) {
|
|
1932
1585
|
crossFieldKeys.set(key, count, { nodeId: parentId, field: path.field });
|
|
1933
1586
|
}
|
|
1934
1587
|
if (childId !== undefined) {
|
|
1935
1588
|
(0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(nodeToParent, childId, {
|
|
1936
|
-
|
|
1589
|
+
nodeId: parentId,
|
|
1590
|
+
field: path.field,
|
|
1937
1591
|
});
|
|
1938
1592
|
}
|
|
1939
1593
|
return buildModularChangesetFromNode({
|
|
@@ -1942,50 +1596,28 @@ function buildModularChangesetFromField(props) {
|
|
|
1942
1596
|
nodeChanges,
|
|
1943
1597
|
nodeToParent,
|
|
1944
1598
|
crossFieldKeys,
|
|
1945
|
-
rootNodes,
|
|
1946
1599
|
idAllocator,
|
|
1947
1600
|
revision,
|
|
1948
1601
|
nodeId: parentId,
|
|
1949
1602
|
});
|
|
1950
1603
|
}
|
|
1951
|
-
exports.buildModularChangesetFromField = buildModularChangesetFromField;
|
|
1952
1604
|
function buildModularChangesetFromNode(props) {
|
|
1953
1605
|
const { path, idAllocator, revision, nodeChanges, nodeChange, nodeId = { localId: (0, index_js_3.brand)(idAllocator.allocate()), revision }, } = props;
|
|
1954
1606
|
(0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(nodeChanges, nodeId, nodeChange);
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
}
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
]);
|
|
1970
|
-
const fieldChange = {
|
|
1971
|
-
fieldKind: genericFieldKind_js_1.genericFieldKind.identifier,
|
|
1972
|
-
change: fieldChangeset,
|
|
1973
|
-
};
|
|
1974
|
-
return buildModularChangesetFromField({
|
|
1975
|
-
...props,
|
|
1976
|
-
path: { parent: path.parent, field: path.parentField },
|
|
1977
|
-
fieldChange,
|
|
1978
|
-
localCrossFieldKeys: [],
|
|
1979
|
-
childId: nodeId,
|
|
1980
|
-
});
|
|
1981
|
-
}
|
|
1982
|
-
}
|
|
1983
|
-
function renameTableFromRenameDescriptions(renames) {
|
|
1984
|
-
const table = newRootTable();
|
|
1985
|
-
for (const rename of renames) {
|
|
1986
|
-
addNodeRename(table, rename.oldId, rename.newId, rename.count, rename.detachLocation);
|
|
1987
|
-
}
|
|
1988
|
-
return table;
|
|
1607
|
+
const fieldChangeset = genericFieldKind_js_1.genericFieldKind.changeHandler.editor.buildChildChanges([
|
|
1608
|
+
[path.parentIndex, nodeId],
|
|
1609
|
+
]);
|
|
1610
|
+
const fieldChange = {
|
|
1611
|
+
fieldKind: genericFieldKind_js_1.genericFieldKind.identifier,
|
|
1612
|
+
change: fieldChangeset,
|
|
1613
|
+
};
|
|
1614
|
+
return buildModularChangesetFromField({
|
|
1615
|
+
...props,
|
|
1616
|
+
path: { parent: path.parent, field: path.parentField },
|
|
1617
|
+
fieldChange,
|
|
1618
|
+
localCrossFieldKeys: [],
|
|
1619
|
+
childId: nodeId,
|
|
1620
|
+
});
|
|
1989
1621
|
}
|
|
1990
1622
|
function getRevInfoFromTaggedChanges(changes) {
|
|
1991
1623
|
let maxId = -1;
|
|
@@ -2002,6 +1634,18 @@ function getRevInfoFromTaggedChanges(changes) {
|
|
|
2002
1634
|
}
|
|
2003
1635
|
}
|
|
2004
1636
|
}
|
|
1637
|
+
const rolledBackRevisions = [];
|
|
1638
|
+
for (const info of revInfos) {
|
|
1639
|
+
if (info.rollbackOf !== undefined) {
|
|
1640
|
+
rolledBackRevisions.push(info.rollbackOf);
|
|
1641
|
+
}
|
|
1642
|
+
}
|
|
1643
|
+
rolledBackRevisions.reverse();
|
|
1644
|
+
for (const revision of rolledBackRevisions) {
|
|
1645
|
+
if (!revisions.has(revision)) {
|
|
1646
|
+
revInfos.push({ revision });
|
|
1647
|
+
}
|
|
1648
|
+
}
|
|
2005
1649
|
return { maxId: (0, index_js_3.brand)(maxId), revInfos };
|
|
2006
1650
|
}
|
|
2007
1651
|
function revisionInfoFromTaggedChange(taggedChange) {
|
|
@@ -2018,16 +1662,15 @@ function revisionInfoFromTaggedChange(taggedChange) {
|
|
|
2018
1662
|
}
|
|
2019
1663
|
return revInfos;
|
|
2020
1664
|
}
|
|
2021
|
-
function fieldChangeFromId(
|
|
2022
|
-
const
|
|
2023
|
-
const fieldMap = fieldMapFromNodeId(change.fieldChanges, change.nodeChanges, change.nodeAliases, fieldId.nodeId);
|
|
1665
|
+
function fieldChangeFromId(fields, nodes, id) {
|
|
1666
|
+
const fieldMap = fieldMapFromNodeId(fields, nodes, id.nodeId);
|
|
2024
1667
|
return fieldMap.get(id.field) ?? (0, internal_1.fail)(0xb25 /* No field exists for the given ID */);
|
|
2025
1668
|
}
|
|
2026
|
-
function fieldMapFromNodeId(rootFieldMap, nodes,
|
|
1669
|
+
function fieldMapFromNodeId(rootFieldMap, nodes, nodeId) {
|
|
2027
1670
|
if (nodeId === undefined) {
|
|
2028
1671
|
return rootFieldMap;
|
|
2029
1672
|
}
|
|
2030
|
-
const node = nodeChangeFromId(nodes,
|
|
1673
|
+
const node = nodeChangeFromId(nodes, nodeId);
|
|
2031
1674
|
(0, internal_1.assert)(node.fieldChanges !== undefined, 0x9c9 /* Expected node to have field changes */);
|
|
2032
1675
|
return node.fieldChanges;
|
|
2033
1676
|
}
|
|
@@ -2040,9 +1683,8 @@ function rebasedFieldIdFromBaseId(table, baseId) {
|
|
|
2040
1683
|
function rebasedNodeIdFromBaseNodeId(table, baseId) {
|
|
2041
1684
|
return (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(table.baseToRebasedNodeId, baseId) ?? baseId;
|
|
2042
1685
|
}
|
|
2043
|
-
function nodeChangeFromId(nodes,
|
|
2044
|
-
const
|
|
2045
|
-
const node = (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(nodes, normalizedId);
|
|
1686
|
+
function nodeChangeFromId(nodes, id) {
|
|
1687
|
+
const node = (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(nodes, id);
|
|
2046
1688
|
(0, internal_1.assert)(node !== undefined, 0x9ca /* Unknown node ID */);
|
|
2047
1689
|
return node;
|
|
2048
1690
|
}
|
|
@@ -2050,20 +1692,12 @@ function fieldIdFromFieldIdKey([revision, localId, field]) {
|
|
|
2050
1692
|
const nodeId = localId === undefined ? undefined : { revision, localId };
|
|
2051
1693
|
return { nodeId, field };
|
|
2052
1694
|
}
|
|
2053
|
-
function fieldIdKeyFromFieldId(fieldId) {
|
|
2054
|
-
return [fieldId.nodeId?.revision, fieldId.nodeId?.localId, fieldId.field];
|
|
2055
|
-
}
|
|
2056
1695
|
function cloneNodeChangeset(nodeChangeset) {
|
|
2057
1696
|
if (nodeChangeset.fieldChanges !== undefined) {
|
|
2058
1697
|
return { ...nodeChangeset, fieldChanges: new Map(nodeChangeset.fieldChanges) };
|
|
2059
1698
|
}
|
|
2060
1699
|
return { ...nodeChangeset };
|
|
2061
1700
|
}
|
|
2062
|
-
function replaceNodeLocationRevision(location, replacer) {
|
|
2063
|
-
return location.field === undefined
|
|
2064
|
-
? { root: replacer.getUpdatedAtomId(location.root) }
|
|
2065
|
-
: { field: replaceFieldIdRevision(location.field, replacer) };
|
|
2066
|
-
}
|
|
2067
1701
|
function replaceFieldIdRevision(fieldId, replacer) {
|
|
2068
1702
|
if (fieldId.nodeId === undefined) {
|
|
2069
1703
|
return fieldId;
|
|
@@ -2073,34 +1707,17 @@ function replaceFieldIdRevision(fieldId, replacer) {
|
|
|
2073
1707
|
nodeId: replacer.getUpdatedAtomId(fieldId.nodeId),
|
|
2074
1708
|
};
|
|
2075
1709
|
}
|
|
2076
|
-
function
|
|
2077
|
-
const
|
|
2078
|
-
|
|
2079
|
-
(
|
|
2080
|
-
if (location.field !== undefined) {
|
|
2081
|
-
return { field: normalizeFieldId(location.field, changeset.nodeAliases) };
|
|
2082
|
-
}
|
|
2083
|
-
return location;
|
|
1710
|
+
function getParentFieldId(changeset, nodeId) {
|
|
1711
|
+
const parentId = (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(changeset.nodeToParent, nodeId);
|
|
1712
|
+
(0, internal_1.assert)(parentId !== undefined, 0x9cb /* Parent field should be defined */);
|
|
1713
|
+
return normalizeFieldId(parentId, changeset.nodeAliases);
|
|
2084
1714
|
}
|
|
2085
|
-
exports.
|
|
1715
|
+
exports.getParentFieldId = getParentFieldId;
|
|
2086
1716
|
function getFieldsForCrossFieldKey(changeset, key, count) {
|
|
2087
1717
|
return changeset.crossFieldKeys
|
|
2088
1718
|
.getAll(key, count)
|
|
2089
1719
|
.map(({ value: fieldId }) => normalizeFieldId(fieldId, changeset.nodeAliases));
|
|
2090
1720
|
}
|
|
2091
|
-
function getFirstFieldForCrossFieldKey(changeset, key, count) {
|
|
2092
|
-
const result = changeset.crossFieldKeys.getFirst(key, count);
|
|
2093
|
-
if (result.value === undefined) {
|
|
2094
|
-
return result;
|
|
2095
|
-
}
|
|
2096
|
-
return { ...result, value: normalizeFieldId(result.value, changeset.nodeAliases) };
|
|
2097
|
-
}
|
|
2098
|
-
function normalizeNodeLocation(location, nodeAliases) {
|
|
2099
|
-
if (location.field !== undefined) {
|
|
2100
|
-
return { field: normalizeFieldId(location.field, nodeAliases) };
|
|
2101
|
-
}
|
|
2102
|
-
return location;
|
|
2103
|
-
}
|
|
2104
1721
|
// This is only exported for use in test utilities.
|
|
2105
1722
|
function normalizeFieldId(fieldId, nodeAliases) {
|
|
2106
1723
|
return fieldId.nodeId === undefined
|
|
@@ -2113,7 +1730,6 @@ exports.normalizeFieldId = normalizeFieldId;
|
|
|
2113
1730
|
*/
|
|
2114
1731
|
function normalizeNodeId(nodeId, nodeAliases) {
|
|
2115
1732
|
let currentId = nodeId;
|
|
2116
|
-
let cycleProbeId = nodeId;
|
|
2117
1733
|
// eslint-disable-next-line no-constant-condition
|
|
2118
1734
|
while (true) {
|
|
2119
1735
|
const dealiased = (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(nodeAliases, currentId);
|
|
@@ -2121,501 +1737,20 @@ function normalizeNodeId(nodeId, nodeAliases) {
|
|
|
2121
1737
|
return currentId;
|
|
2122
1738
|
}
|
|
2123
1739
|
currentId = dealiased;
|
|
2124
|
-
if (cycleProbeId !== undefined) {
|
|
2125
|
-
cycleProbeId = (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(nodeAliases, cycleProbeId);
|
|
2126
|
-
}
|
|
2127
|
-
if (cycleProbeId !== undefined) {
|
|
2128
|
-
cycleProbeId = (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(nodeAliases, cycleProbeId);
|
|
2129
|
-
}
|
|
2130
|
-
(0, internal_1.assert)(!(0, index_js_2.areEqualChangeAtomIdOpts)(cycleProbeId, currentId), "Alias cycle detected");
|
|
2131
1740
|
}
|
|
2132
1741
|
}
|
|
2133
|
-
exports.normalizeNodeId = normalizeNodeId;
|
|
2134
1742
|
function hasConflicts(change) {
|
|
2135
1743
|
return (change.constraintViolationCount ?? 0) > 0;
|
|
2136
1744
|
}
|
|
2137
|
-
function areEqualFieldIds(a, b) {
|
|
2138
|
-
return (0, index_js_2.areEqualChangeAtomIdOpts)(a.nodeId, b.nodeId) && a.field === b.field;
|
|
2139
|
-
}
|
|
2140
|
-
function firstAttachIdFromDetachId(roots, detachId, count) {
|
|
2141
|
-
const result = roots.oldToNewId.getFirst(detachId, count);
|
|
2142
|
-
return { ...result, value: result.value ?? detachId };
|
|
2143
|
-
}
|
|
2144
|
-
function firstDetachIdFromAttachId(roots, attachId, count) {
|
|
2145
|
-
const result = roots.newToOldId.getFirst(attachId, count);
|
|
2146
|
-
return { ...result, start: attachId, value: result.value ?? attachId };
|
|
2147
|
-
}
|
|
2148
|
-
function rebaseCrossFieldKeys(sourceTable, movedDetaches, newDetachLocations) {
|
|
2149
|
-
const rebasedTable = sourceTable.clone();
|
|
2150
|
-
for (const entry of movedDetaches.entries()) {
|
|
2151
|
-
rebasedTable.delete({ ...entry.start, target: crossFieldQueries_js_1.CrossFieldTarget.Source }, entry.length);
|
|
2152
|
-
}
|
|
2153
|
-
for (const entry of newDetachLocations.entries()) {
|
|
2154
|
-
rebasedTable.set({ ...entry.start, target: crossFieldQueries_js_1.CrossFieldTarget.Source }, entry.length, entry.value);
|
|
2155
|
-
}
|
|
2156
|
-
return rebasedTable;
|
|
2157
|
-
}
|
|
2158
|
-
function newRootTable() {
|
|
2159
|
-
return {
|
|
2160
|
-
newToOldId: (0, index_js_2.newChangeAtomIdTransform)(),
|
|
2161
|
-
oldToNewId: (0, index_js_2.newChangeAtomIdTransform)(),
|
|
2162
|
-
nodeChanges: (0, index_js_3.newTupleBTree)(),
|
|
2163
|
-
detachLocations: (0, index_js_2.newChangeAtomIdRangeMap)(),
|
|
2164
|
-
outputDetachLocations: (0, index_js_2.newChangeAtomIdRangeMap)(),
|
|
2165
|
-
};
|
|
2166
|
-
}
|
|
2167
|
-
exports.newRootTable = newRootTable;
|
|
2168
|
-
function rebaseRoots(change, base, affectedBaseFields, nodesToRebase, rebasedNodeToParent, rebaseVersion) {
|
|
2169
|
-
const rebasedRoots = newRootTable();
|
|
2170
|
-
for (const renameEntry of change.rootNodes.oldToNewId.entries()) {
|
|
2171
|
-
rebaseRename(change.rootNodes, rebasedRoots, renameEntry, base, affectedBaseFields);
|
|
2172
|
-
}
|
|
2173
|
-
for (const [detachIdKey, nodeId] of change.rootNodes.nodeChanges.entries()) {
|
|
2174
|
-
const changes = base.rootNodes.nodeChanges.get(detachIdKey);
|
|
2175
|
-
if (changes !== undefined) {
|
|
2176
|
-
nodesToRebase.push([nodeId, changes]);
|
|
2177
|
-
}
|
|
2178
|
-
const detachId = (0, index_js_2.makeChangeAtomId)(detachIdKey[1], detachIdKey[0]);
|
|
2179
|
-
const attachId = firstAttachIdFromDetachId(base.rootNodes, detachId, 1).value;
|
|
2180
|
-
const baseAttachEntry = base.crossFieldKeys.getFirst({ target: crossFieldQueries_js_1.CrossFieldTarget.Destination, ...attachId }, 1);
|
|
2181
|
-
if (baseAttachEntry.value === undefined) {
|
|
2182
|
-
const renamedDetachId = firstAttachIdFromDetachId(base.rootNodes, detachId, 1).value;
|
|
2183
|
-
const baseOutputDetachLocation = base.rootNodes.outputDetachLocations.getFirst(renamedDetachId, 1).value;
|
|
2184
|
-
if (baseOutputDetachLocation !== undefined) {
|
|
2185
|
-
affectedBaseFields.set(fieldIdKeyFromFieldId(baseOutputDetachLocation), true);
|
|
2186
|
-
}
|
|
2187
|
-
const detachLocation = baseOutputDetachLocation ??
|
|
2188
|
-
change.rootNodes.detachLocations.getFirst(detachId, 1).value;
|
|
2189
|
-
// Note that `baseOutputDetachLocation` may contain a node ID from the base changeset.
|
|
2190
|
-
// We will replace the detach location entry with the node ID from the rebased changeset in `fixupRebasedDetachLocations`
|
|
2191
|
-
assignRootChange(rebasedRoots, rebasedNodeToParent, renamedDetachId, nodeId, detachLocation, rebaseVersion);
|
|
2192
|
-
}
|
|
2193
|
-
else {
|
|
2194
|
-
affectedBaseFields.set(fieldIdKeyFromFieldId(baseAttachEntry.value), true);
|
|
2195
|
-
rebasedNodeToParent.delete(detachIdKey);
|
|
2196
|
-
}
|
|
2197
|
-
}
|
|
2198
|
-
for (const entry of change.rootNodes.outputDetachLocations.entries()) {
|
|
2199
|
-
rebasedRoots.outputDetachLocations.set(entry.start, entry.length, entry.value);
|
|
2200
|
-
}
|
|
2201
|
-
return rebasedRoots;
|
|
2202
|
-
}
|
|
2203
|
-
function rebaseRename(newRoots, rebasedRoots, renameEntry, base, affectedBaseFields) {
|
|
2204
|
-
let count = renameEntry.length;
|
|
2205
|
-
const baseRenameEntry = firstAttachIdFromDetachId(base.rootNodes, renameEntry.start, count);
|
|
2206
|
-
count = baseRenameEntry.length;
|
|
2207
|
-
const baseAttachEntry = base.crossFieldKeys.getFirst({
|
|
2208
|
-
...baseRenameEntry.value,
|
|
2209
|
-
target: crossFieldQueries_js_1.CrossFieldTarget.Destination,
|
|
2210
|
-
}, count);
|
|
2211
|
-
count = baseAttachEntry.length;
|
|
2212
|
-
if (baseAttachEntry.value === undefined) {
|
|
2213
|
-
const baseOutputDetachLocation = base.rootNodes.outputDetachLocations.getFirst(baseRenameEntry.value, 1).value;
|
|
2214
|
-
if (baseOutputDetachLocation !== undefined) {
|
|
2215
|
-
affectedBaseFields.set(fieldIdKeyFromFieldId(baseOutputDetachLocation), true);
|
|
2216
|
-
}
|
|
2217
|
-
const detachEntry = newRoots.detachLocations.getFirst(renameEntry.start, count);
|
|
2218
|
-
count = detachEntry.length;
|
|
2219
|
-
const detachLocation = baseOutputDetachLocation ?? detachEntry.value;
|
|
2220
|
-
// Note that `baseOutputDetachLocation` may contain a node ID from the base changeset.
|
|
2221
|
-
// We will replace the detach location entry with the node ID from the rebased changeset in `fixupRebasedDetachLocations`
|
|
2222
|
-
addNodeRename(rebasedRoots, baseRenameEntry.value, renameEntry.value, count, detachLocation);
|
|
2223
|
-
}
|
|
2224
|
-
else {
|
|
2225
|
-
// This rename represents an intention to detach these nodes.
|
|
2226
|
-
// The rebased change should have a detach in the field where the base change attaches the nodes,
|
|
2227
|
-
// so we need to ensure that field is processed.
|
|
2228
|
-
affectedBaseFields.set(fieldIdKeyFromFieldId(normalizeFieldId(baseAttachEntry.value, base.nodeAliases)), true);
|
|
2229
|
-
}
|
|
2230
|
-
const countRemaining = renameEntry.length - count;
|
|
2231
|
-
if (countRemaining > 0) {
|
|
2232
|
-
rebaseRename(newRoots, rebasedRoots, {
|
|
2233
|
-
start: (0, index_js_2.offsetChangeAtomId)(renameEntry.start, count),
|
|
2234
|
-
value: (0, index_js_2.offsetChangeAtomId)(renameEntry.value, count),
|
|
2235
|
-
length: countRemaining,
|
|
2236
|
-
}, base, affectedBaseFields);
|
|
2237
|
-
}
|
|
2238
|
-
}
|
|
2239
1745
|
/**
|
|
2240
|
-
*
|
|
2241
|
-
*
|
|
1746
|
+
* A rebaseChild callback for fields with no new changes.
|
|
1747
|
+
* Asserts that there are no new changes and returns undefined.
|
|
2242
1748
|
*/
|
|
2243
|
-
function
|
|
2244
|
-
|
|
2245
|
-
|
|
2246
|
-
if (normalizedDetachLocation.nodeId !== undefined) {
|
|
2247
|
-
const rebasedNodeId = (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(table.baseToRebasedNodeId, normalizedDetachLocation.nodeId);
|
|
2248
|
-
if (rebasedNodeId !== undefined) {
|
|
2249
|
-
table.rebasedRootNodes.detachLocations.set(start, length, {
|
|
2250
|
-
...normalizedDetachLocation,
|
|
2251
|
-
nodeId: rebasedNodeId,
|
|
2252
|
-
});
|
|
2253
|
-
}
|
|
2254
|
-
}
|
|
2255
|
-
}
|
|
2256
|
-
}
|
|
2257
|
-
function addNodesToCompose(table, id1, id2) {
|
|
2258
|
-
const normalizedId1 = normalizeNodeId(id1, table.baseChange.nodeAliases);
|
|
2259
|
-
const normalizedId2 = normalizeNodeId(id2, table.newChange.nodeAliases);
|
|
2260
|
-
if ((0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(table.newToBaseNodeId, normalizedId2) === undefined) {
|
|
2261
|
-
(0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(table.newToBaseNodeId, normalizedId2, normalizedId1);
|
|
2262
|
-
table.pendingCompositions.nodeIdsToCompose.push([normalizedId1, normalizedId2]);
|
|
2263
|
-
}
|
|
2264
|
-
}
|
|
2265
|
-
function composeRevInfos(revisions1, revisions2) {
|
|
2266
|
-
if (revisions1?.length === 1 &&
|
|
2267
|
-
revisions2?.length === 1 &&
|
|
2268
|
-
revisions1[0]?.revision === revisions2[0]?.revision) {
|
|
2269
|
-
// This is a special case where we are composing two changesets from the same transaction.
|
|
2270
|
-
// We return one of the input arrays to avoid duplicating revision entries.
|
|
2271
|
-
return revisions1;
|
|
2272
|
-
}
|
|
2273
|
-
const result = [...(revisions1 ?? []), ...(revisions2 ?? [])];
|
|
2274
|
-
return result;
|
|
2275
|
-
}
|
|
2276
|
-
function composeCrossFieldKeyTables(table1, table2, movedCrossFieldKeys, removedCrossFieldKeys) {
|
|
2277
|
-
const composedTable = index_js_3.RangeMap.union(table1, table2);
|
|
2278
|
-
for (const entry of movedCrossFieldKeys.entries()) {
|
|
2279
|
-
composedTable.set(entry.start, entry.length, entry.value);
|
|
2280
|
-
}
|
|
2281
|
-
for (const entry of removedCrossFieldKeys.entries()) {
|
|
2282
|
-
composedTable.delete(entry.start, entry.length);
|
|
2283
|
-
}
|
|
2284
|
-
return composedTable;
|
|
2285
|
-
}
|
|
2286
|
-
function composeRootTables(change1, change2, composedNodeToParent, movedCrossFieldKeys, removedCrossFieldKeys, pendingCompositions) {
|
|
2287
|
-
const composedTable = cloneRootTable(change1.rootNodes);
|
|
2288
|
-
for (const renameEntry of change2.rootNodes.oldToNewId.entries()) {
|
|
2289
|
-
composeRename(change1, change2, composedTable, renameEntry.start, renameEntry.value, renameEntry.length, movedCrossFieldKeys, removedCrossFieldKeys, pendingCompositions);
|
|
2290
|
-
}
|
|
2291
|
-
for (const [[revision2, id2], nodeId2] of change2.rootNodes.nodeChanges.entries()) {
|
|
2292
|
-
const detachId2 = { revision: revision2, localId: id2 };
|
|
2293
|
-
const detachId1 = firstDetachIdFromAttachId(change1.rootNodes, detachId2, 1).value;
|
|
2294
|
-
const nodeId1 = (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(change1.rootNodes.nodeChanges, detachId1);
|
|
2295
|
-
if (nodeId1 === undefined) {
|
|
2296
|
-
const fieldId = getFieldsForCrossFieldKey(change1, { ...detachId1, target: crossFieldQueries_js_1.CrossFieldTarget.Source }, 1)[0];
|
|
2297
|
-
if (fieldId === undefined) {
|
|
2298
|
-
assignRootChange(composedTable, composedNodeToParent, detachId1, nodeId2, change1.rootNodes.detachLocations.getFirst(detachId1, 1).value ??
|
|
2299
|
-
change2.rootNodes.detachLocations.getFirst(detachId2, 1).value, Math.max(change1.rebaseVersion, change2.rebaseVersion));
|
|
2300
|
-
}
|
|
2301
|
-
else {
|
|
2302
|
-
// In this case, this node is attached in the input context of change1,
|
|
2303
|
-
// and is represented in detachFieldId.
|
|
2304
|
-
pendingCompositions.affectedBaseFields.set([fieldId.nodeId?.revision, fieldId.nodeId?.localId, fieldId.field], true);
|
|
2305
|
-
}
|
|
2306
|
-
}
|
|
2307
|
-
else {
|
|
2308
|
-
pendingCompositions.nodeIdsToCompose.push([nodeId1, nodeId2]);
|
|
2309
|
-
}
|
|
2310
|
-
}
|
|
2311
|
-
for (const outputDetachEntry of change1.rootNodes.outputDetachLocations.entries()) {
|
|
2312
|
-
composeOutputDetachLocation(outputDetachEntry.start, outputDetachEntry.length, outputDetachEntry.value, change2, composedTable);
|
|
2313
|
-
}
|
|
2314
|
-
for (const entry of change2.rootNodes.outputDetachLocations.entries()) {
|
|
2315
|
-
composedTable.outputDetachLocations.set(entry.start, entry.length, entry.value);
|
|
2316
|
-
}
|
|
2317
|
-
return composedTable;
|
|
2318
|
-
}
|
|
2319
|
-
function composeOutputDetachLocation(outputDetachId1, count, detachLocation, change2, composedTable) {
|
|
2320
|
-
let countToProcess = count;
|
|
2321
|
-
const renameEntry = firstAttachIdFromDetachId(change2.rootNodes, outputDetachId1, countToProcess);
|
|
2322
|
-
countToProcess = renameEntry.length;
|
|
2323
|
-
const attachEntry = getFirstAttachField(change2.crossFieldKeys, renameEntry.value, countToProcess);
|
|
2324
|
-
countToProcess = attachEntry.length;
|
|
2325
|
-
composedTable.outputDetachLocations.delete(outputDetachId1, countToProcess);
|
|
2326
|
-
if (attachEntry.value === undefined) {
|
|
2327
|
-
// We update the key for the detach location to the renamed ID of the root in the composed output context.
|
|
2328
|
-
composedTable.outputDetachLocations.set(renameEntry.value, countToProcess, detachLocation);
|
|
2329
|
-
}
|
|
2330
|
-
else {
|
|
2331
|
-
// These nodes are attached by `change2` and thus attached in the composed output context,
|
|
2332
|
-
// so there should be no output detach location.
|
|
2333
|
-
}
|
|
2334
|
-
const countRemaining = count - countToProcess;
|
|
2335
|
-
if (countRemaining > 0) {
|
|
2336
|
-
composeOutputDetachLocation((0, index_js_2.offsetChangeAtomId)(outputDetachId1, countToProcess), countRemaining, detachLocation, change2, composedTable);
|
|
2337
|
-
}
|
|
2338
|
-
}
|
|
2339
|
-
function composeRename(change1, change2, mergedTable, oldId, newId, count, movedCrossFieldKeys, removedCrossFieldKeys, pendingCompositions) {
|
|
2340
|
-
let countToProcess = count;
|
|
2341
|
-
const detachEntry = getFirstDetachField(change1.crossFieldKeys, oldId, countToProcess);
|
|
2342
|
-
countToProcess = detachEntry.length;
|
|
2343
|
-
if (detachEntry.value === undefined) {
|
|
2344
|
-
// `change1` may also have a rename to `renameEntry.value`, in which case it must refer to a different node.
|
|
2345
|
-
// That node must have been attached by `change1` and detached by `change2`.
|
|
2346
|
-
// The final rename for that node will be created in `composeAttachDetach`.
|
|
2347
|
-
// We delete any such rename for now to avoid colliding with the rename currently being processed.
|
|
2348
|
-
deleteNodeRenameTo(mergedTable, newId, countToProcess);
|
|
2349
|
-
// The nodes were detached before `change`, so we append this rename.
|
|
2350
|
-
appendNodeRename(mergedTable, oldId, newId, countToProcess, change1.rootNodes, change2.rootNodes.detachLocations.getFirst(oldId, countToProcess).value);
|
|
2351
|
-
}
|
|
2352
|
-
else {
|
|
2353
|
-
// `change1` detached these nodes,
|
|
2354
|
-
// so we invalidate the detach location so that the detach's ID can be replaced with the new ID.
|
|
2355
|
-
pendingCompositions.affectedBaseFields.set(fieldIdKeyFromFieldId(detachEntry.value), true);
|
|
2356
|
-
if (!(0, index_js_2.areEqualChangeAtomIds)(oldId, newId)) {
|
|
2357
|
-
// `change1`'s detach will be replaced by `change2`'s detach, so we update the cross-field keys.
|
|
2358
|
-
removedCrossFieldKeys.set({ ...oldId, target: crossFieldQueries_js_1.CrossFieldTarget.Source }, countToProcess, true);
|
|
2359
|
-
}
|
|
2360
|
-
movedCrossFieldKeys.set({ ...newId, target: crossFieldQueries_js_1.CrossFieldTarget.Source }, countToProcess, detachEntry.value);
|
|
2361
|
-
}
|
|
2362
|
-
if (countToProcess < count) {
|
|
2363
|
-
composeRename(change1, change2, mergedTable, (0, index_js_2.offsetChangeAtomId)(oldId, countToProcess), (0, index_js_2.offsetChangeAtomId)(newId, countToProcess), count - countToProcess, movedCrossFieldKeys, removedCrossFieldKeys, pendingCompositions);
|
|
2364
|
-
}
|
|
2365
|
-
}
|
|
2366
|
-
function cloneRootTable(table) {
|
|
2367
|
-
return {
|
|
2368
|
-
oldToNewId: table.oldToNewId.clone(),
|
|
2369
|
-
newToOldId: table.newToOldId.clone(),
|
|
2370
|
-
nodeChanges: (0, index_js_3.brand)(table.nodeChanges.clone()),
|
|
2371
|
-
detachLocations: table.detachLocations.clone(),
|
|
2372
|
-
outputDetachLocations: table.outputDetachLocations.clone(),
|
|
2373
|
-
};
|
|
2374
|
-
}
|
|
2375
|
-
exports.cloneRootTable = cloneRootTable;
|
|
2376
|
-
function invertRootTable(change, isRollback) {
|
|
2377
|
-
const invertedRoots = newRootTable();
|
|
2378
|
-
for (const [[revision, localId], nodeId] of change.rootNodes.nodeChanges.entries()) {
|
|
2379
|
-
const detachId = { revision, localId };
|
|
2380
|
-
const renamedId = firstAttachIdFromDetachId(change.rootNodes, detachId, 1).value;
|
|
2381
|
-
// This checks whether `change` attaches this node.
|
|
2382
|
-
// If it does, the node is not detached in the input context of the inverse, and so should not be included in the root table.
|
|
2383
|
-
if (change.crossFieldKeys.getFirst({ ...renamedId, target: crossFieldQueries_js_1.CrossFieldTarget.Destination }, 1)
|
|
2384
|
-
.value === undefined) {
|
|
2385
|
-
assignRootChange(invertedRoots, undefined, renamedId, nodeId, change.rootNodes.detachLocations.getFirst(detachId, 1).value, change.rebaseVersion);
|
|
2386
|
-
}
|
|
2387
|
-
}
|
|
2388
|
-
if (isRollback) {
|
|
2389
|
-
// We only invert renames of nodes which are not attached or detached by this changeset.
|
|
2390
|
-
// When we invert an attach we will create a detach which incorporates the rename.
|
|
2391
|
-
for (const { start: oldId, value: newId, length, } of change.rootNodes.oldToNewId.entries()) {
|
|
2392
|
-
invertRename(change, invertedRoots, oldId, newId, length);
|
|
2393
|
-
}
|
|
2394
|
-
}
|
|
2395
|
-
return invertedRoots;
|
|
2396
|
-
}
|
|
2397
|
-
function invertRename(change, invertedRoots, oldId, newId, length) {
|
|
2398
|
-
for (const detachEntry of doesChangeDetachNodes(change.crossFieldKeys, newId, length)) {
|
|
2399
|
-
(0, internal_1.assert)(!detachEntry.value, "A changeset should not have a rename and detach for the same node.");
|
|
2400
|
-
}
|
|
2401
|
-
let countProcessed = length;
|
|
2402
|
-
const attachEntry = getFirstAttachField(change.crossFieldKeys, newId, countProcessed);
|
|
2403
|
-
countProcessed = attachEntry.length;
|
|
2404
|
-
if (attachEntry.value === undefined) {
|
|
2405
|
-
const outputDetachEntry = change.rootNodes.outputDetachLocations.getFirst(newId, countProcessed);
|
|
2406
|
-
countProcessed = outputDetachEntry.length;
|
|
2407
|
-
const inputDetachEntry = change.rootNodes.detachLocations.getFirst(oldId, countProcessed);
|
|
2408
|
-
countProcessed = inputDetachEntry.length;
|
|
2409
|
-
addNodeRename(invertedRoots, newId, oldId, countProcessed, outputDetachEntry.value ?? inputDetachEntry.value);
|
|
2410
|
-
}
|
|
2411
|
-
if (countProcessed < length) {
|
|
2412
|
-
invertRename(change, invertedRoots, (0, index_js_2.offsetChangeAtomId)(oldId, countProcessed), (0, index_js_2.offsetChangeAtomId)(newId, countProcessed), length - countProcessed);
|
|
2413
|
-
}
|
|
2414
|
-
}
|
|
2415
|
-
function doesChangeAttachNodes(table, id, count) {
|
|
2416
|
-
return table
|
|
2417
|
-
.getAll2({ ...id, target: crossFieldQueries_js_1.CrossFieldTarget.Destination }, count)
|
|
2418
|
-
.map((entry) => ({ ...entry, value: entry.value !== undefined }));
|
|
2419
|
-
}
|
|
2420
|
-
function doesChangeDetachNodes(table, id, count) {
|
|
2421
|
-
return table
|
|
2422
|
-
.getAll2({ ...id, target: crossFieldQueries_js_1.CrossFieldTarget.Source }, count)
|
|
2423
|
-
.map((entry) => ({ ...entry, value: entry.value !== undefined }));
|
|
2424
|
-
}
|
|
2425
|
-
function getFirstDetachField(table, id, count) {
|
|
2426
|
-
return table.getFirst({ target: crossFieldQueries_js_1.CrossFieldTarget.Source, ...id }, count);
|
|
2427
|
-
}
|
|
2428
|
-
exports.getFirstDetachField = getFirstDetachField;
|
|
2429
|
-
function getFirstAttachField(table, id, count) {
|
|
2430
|
-
return table.getFirst({ target: crossFieldQueries_js_1.CrossFieldTarget.Destination, ...id }, count);
|
|
2431
|
-
}
|
|
2432
|
-
exports.getFirstAttachField = getFirstAttachField;
|
|
2433
|
-
function addNodeRename(table, oldId, newId, count, detachLocation) {
|
|
2434
|
-
if ((0, index_js_2.areEqualChangeAtomIds)(oldId, newId)) {
|
|
2435
|
-
return;
|
|
2436
|
-
}
|
|
2437
|
-
for (const entry of table.oldToNewId.getAll2(oldId, count)) {
|
|
2438
|
-
(0, internal_1.assert)(entry.value === undefined ||
|
|
2439
|
-
(0, index_js_2.areEqualChangeAtomIds)(entry.value, (0, index_js_2.offsetChangeAtomId)(newId, entry.offset)), "Rename collision detected");
|
|
2440
|
-
}
|
|
2441
|
-
for (const entry of table.newToOldId.getAll2(newId, count)) {
|
|
2442
|
-
(0, internal_1.assert)(entry.value === undefined ||
|
|
2443
|
-
(0, index_js_2.areEqualChangeAtomIds)(entry.value, (0, index_js_2.offsetChangeAtomId)(oldId, entry.offset)), "Rename collision detected");
|
|
2444
|
-
}
|
|
2445
|
-
table.oldToNewId.set(oldId, count, newId);
|
|
2446
|
-
table.newToOldId.set(newId, count, oldId);
|
|
2447
|
-
if (detachLocation !== undefined) {
|
|
2448
|
-
table.detachLocations.set(oldId, count, detachLocation);
|
|
2449
|
-
}
|
|
2450
|
-
}
|
|
2451
|
-
exports.addNodeRename = addNodeRename;
|
|
2452
|
-
/**
|
|
2453
|
-
* Deletes any renames from `id`.
|
|
2454
|
-
*/
|
|
2455
|
-
function deleteNodeRenameFrom(roots, id, count) {
|
|
2456
|
-
for (const entry of roots.oldToNewId.getAll(id, count)) {
|
|
2457
|
-
deleteNodeRenameEntry(roots, entry.start, entry.value, entry.length);
|
|
2458
|
-
}
|
|
2459
|
-
}
|
|
2460
|
-
/**
|
|
2461
|
-
* Deletes any renames to `id`.
|
|
2462
|
-
*/
|
|
2463
|
-
function deleteNodeRenameTo(roots, id, count) {
|
|
2464
|
-
for (const entry of roots.newToOldId.getAll(id, count)) {
|
|
2465
|
-
deleteNodeRenameEntry(roots, entry.value, entry.start, entry.length);
|
|
2466
|
-
}
|
|
2467
|
-
}
|
|
2468
|
-
function appendNodeRename(composedTable, oldId, newId, count, change1Table, detachLocation) {
|
|
2469
|
-
let countToProcess = count;
|
|
2470
|
-
const rename1Entry = change1Table.newToOldId.getFirst(oldId, countToProcess);
|
|
2471
|
-
countToProcess = rename1Entry.length;
|
|
2472
|
-
if (rename1Entry.value !== undefined) {
|
|
2473
|
-
deleteNodeRenameFrom(composedTable, rename1Entry.value, countToProcess);
|
|
2474
|
-
}
|
|
2475
|
-
addNodeRename(composedTable, rename1Entry.value ?? oldId, newId, countToProcess, detachLocation);
|
|
2476
|
-
tryRemoveDetachLocation(composedTable, newId, countToProcess);
|
|
2477
|
-
if (countToProcess < count) {
|
|
2478
|
-
const countRemaining = count - countToProcess;
|
|
2479
|
-
appendNodeRename(composedTable, (0, index_js_2.offsetChangeAtomId)(oldId, countToProcess), (0, index_js_2.offsetChangeAtomId)(newId, countToProcess), countRemaining, change1Table, detachLocation);
|
|
2480
|
-
}
|
|
2481
|
-
}
|
|
2482
|
-
function tryRemoveDetachLocation(roots, rootId, count) {
|
|
2483
|
-
let countProcessed = count;
|
|
2484
|
-
const renameEntry = roots.oldToNewId.getFirst(rootId, countProcessed);
|
|
2485
|
-
countProcessed = renameEntry.length;
|
|
2486
|
-
const outputDetachEntry = roots.outputDetachLocations.getFirst(rootId, countProcessed);
|
|
2487
|
-
countProcessed = outputDetachEntry.length;
|
|
2488
|
-
const nodeChangeEntry = (0, changeAtomIdBTree_js_1.rangeQueryChangeAtomIdMap)(roots.nodeChanges, rootId, countProcessed);
|
|
2489
|
-
countProcessed = nodeChangeEntry.length;
|
|
2490
|
-
if (nodeChangeEntry.value === undefined &&
|
|
2491
|
-
renameEntry.value === undefined &&
|
|
2492
|
-
outputDetachEntry.value === undefined) {
|
|
2493
|
-
roots.detachLocations.delete(rootId, countProcessed);
|
|
2494
|
-
}
|
|
2495
|
-
const countRemaining = count - countProcessed;
|
|
2496
|
-
if (countRemaining > 0) {
|
|
2497
|
-
tryRemoveDetachLocation(roots, (0, index_js_2.offsetChangeAtomId)(rootId, countProcessed), countRemaining);
|
|
2498
|
-
}
|
|
2499
|
-
}
|
|
2500
|
-
/**
|
|
2501
|
-
* Deletes the entry renaming the ID range of length `count` from `oldId` to `newId`.
|
|
2502
|
-
* This function assumes that such an entry exists.
|
|
2503
|
-
*/
|
|
2504
|
-
function deleteNodeRenameEntry(roots, oldId, newId, count) {
|
|
2505
|
-
roots.oldToNewId.delete(oldId, count);
|
|
2506
|
-
roots.newToOldId.delete(newId, count);
|
|
2507
|
-
}
|
|
2508
|
-
function replaceRootTableRevision(table, replacer, nodeAliases) {
|
|
2509
|
-
const oldToNewId = table.oldToNewId.mapEntries((id) => replacer.getUpdatedAtomId(id), (id) => replacer.getUpdatedAtomId(id));
|
|
2510
|
-
const newToOldId = table.newToOldId.mapEntries((id) => replacer.getUpdatedAtomId(id), (id) => replacer.getUpdatedAtomId(id));
|
|
2511
|
-
const nodeChanges = replaceIdMapRevisions(table.nodeChanges, replacer, (nodeId) => replacer.getUpdatedAtomId(normalizeNodeId(nodeId, nodeAliases)));
|
|
2512
|
-
const detachLocations = table.detachLocations.mapEntries((id) => replacer.getUpdatedAtomId(id), (fieldId) => replaceFieldIdRevision(normalizeFieldId(fieldId, nodeAliases), replacer));
|
|
2513
|
-
const outputDetachLocations = table.outputDetachLocations.mapEntries((id) => replacer.getUpdatedAtomId(id), (fieldId) => replaceFieldIdRevision(normalizeFieldId(fieldId, nodeAliases), replacer));
|
|
2514
|
-
return { oldToNewId, newToOldId, nodeChanges, detachLocations, outputDetachLocations };
|
|
2515
|
-
}
|
|
2516
|
-
function newDetachedEntryMap() {
|
|
2517
|
-
return new index_js_3.RangeMap(index_js_2.offsetChangeAtomId, index_js_2.subtractChangeAtomIds, offsetDetachedNodeEntry);
|
|
2518
|
-
}
|
|
2519
|
-
function offsetDetachedNodeEntry(entry, count) {
|
|
2520
|
-
(0, internal_1.assert)(count <= 1 || entry.nodeChange === undefined, "Cannot split an entry with a node change");
|
|
2521
|
-
return entry.detachId === undefined
|
|
2522
|
-
? entry
|
|
2523
|
-
: { ...entry, detachId: (0, index_js_2.offsetChangeAtomId)(entry.detachId, count) };
|
|
2524
|
-
}
|
|
2525
|
-
function getFieldsWithRootMoves(roots, nodeAliases) {
|
|
2526
|
-
const fields = (0, index_js_3.newTupleBTree)();
|
|
2527
|
-
for (const { start: rootId, value: fieldId, length } of roots.detachLocations.entries()) {
|
|
2528
|
-
let isRootMoved = false;
|
|
2529
|
-
for (const renameEntry of roots.oldToNewId.getAll2(rootId, length)) {
|
|
2530
|
-
if (renameEntry.value !== undefined) {
|
|
2531
|
-
isRootMoved = true;
|
|
2532
|
-
}
|
|
2533
|
-
}
|
|
2534
|
-
for (const outputDetachEntry of roots.outputDetachLocations.getAll2(rootId, length)) {
|
|
2535
|
-
if (outputDetachEntry.value !== undefined) {
|
|
2536
|
-
isRootMoved = true;
|
|
2537
|
-
}
|
|
2538
|
-
}
|
|
2539
|
-
if (isRootMoved) {
|
|
2540
|
-
fields.set(fieldIdKeyFromFieldId(normalizeFieldId(fieldId, nodeAliases)), true);
|
|
2541
|
-
}
|
|
2542
|
-
}
|
|
2543
|
-
return fields;
|
|
2544
|
-
}
|
|
2545
|
-
function getFieldToRootChanges(roots, nodeAliases) {
|
|
2546
|
-
const fields = (0, index_js_3.newTupleBTree)();
|
|
2547
|
-
for (const rootIdKey of roots.nodeChanges.keys()) {
|
|
2548
|
-
const rootId = { revision: rootIdKey[0], localId: rootIdKey[1] };
|
|
2549
|
-
const detachLocation = roots.detachLocations.getFirst(rootId, 1).value;
|
|
2550
|
-
if (detachLocation !== undefined) {
|
|
2551
|
-
const fieldIdKey = fieldIdKeyFromFieldId(normalizeFieldId(detachLocation, nodeAliases));
|
|
2552
|
-
let rootsInField = fields.get(fieldIdKey);
|
|
2553
|
-
if (rootsInField === undefined) {
|
|
2554
|
-
rootsInField = [];
|
|
2555
|
-
fields.set(fieldIdKey, rootsInField);
|
|
2556
|
-
}
|
|
2557
|
-
rootsInField.push(rootId);
|
|
2558
|
-
}
|
|
2559
|
-
}
|
|
2560
|
-
return fields;
|
|
2561
|
-
}
|
|
2562
|
-
function muteRootChanges(roots) {
|
|
2563
|
-
return {
|
|
2564
|
-
oldToNewId: (0, index_js_2.newChangeAtomIdTransform)(),
|
|
2565
|
-
newToOldId: (0, index_js_2.newChangeAtomIdTransform)(),
|
|
2566
|
-
nodeChanges: (0, index_js_3.brand)(roots.nodeChanges.clone()),
|
|
2567
|
-
detachLocations: roots.detachLocations.clone(),
|
|
2568
|
-
outputDetachLocations: (0, index_js_2.newChangeAtomIdRangeMap)(),
|
|
2569
|
-
};
|
|
2570
|
-
}
|
|
2571
|
-
function validateChangeset(change, fieldKinds) {
|
|
2572
|
-
const unreachableNodes = (0, index_js_3.brand)(change.nodeToParent.clone());
|
|
2573
|
-
const unreachableCFKs = change.crossFieldKeys.clone();
|
|
2574
|
-
validateFieldChanges(fieldKinds, change, change.fieldChanges, undefined, unreachableNodes, unreachableCFKs);
|
|
2575
|
-
for (const [[revision, localId], node] of change.nodeChanges.entries()) {
|
|
2576
|
-
if (node.fieldChanges === undefined) {
|
|
2577
|
-
continue;
|
|
2578
|
-
}
|
|
2579
|
-
const nodeId = normalizeNodeId({ revision, localId }, change.nodeAliases);
|
|
2580
|
-
validateFieldChanges(fieldKinds, change, node.fieldChanges, nodeId, unreachableNodes, unreachableCFKs);
|
|
2581
|
-
}
|
|
2582
|
-
for (const [detachIdKey, nodeId] of change.rootNodes.nodeChanges.entries()) {
|
|
2583
|
-
const detachId = { revision: detachIdKey[0], localId: detachIdKey[1] };
|
|
2584
|
-
const location = getNodeParent(change, nodeId);
|
|
2585
|
-
(0, internal_1.assert)((0, index_js_2.areEqualChangeAtomIdOpts)(location.root, detachId), "Inconsistent node location");
|
|
2586
|
-
const normalizedNodeId = normalizeNodeId(nodeId, change.nodeAliases);
|
|
2587
|
-
unreachableNodes.delete([normalizedNodeId.revision, normalizedNodeId.localId]);
|
|
2588
|
-
const fieldChanges = nodeChangeFromId(change.nodeChanges, change.nodeAliases, nodeId).fieldChanges;
|
|
2589
|
-
if (fieldChanges !== undefined) {
|
|
2590
|
-
validateFieldChanges(fieldKinds, change, fieldChanges, normalizedNodeId, unreachableNodes, unreachableCFKs);
|
|
2591
|
-
}
|
|
2592
|
-
}
|
|
2593
|
-
(0, internal_1.assert)(unreachableNodes.size === 0, "Unreachable nodes found");
|
|
2594
|
-
(0, internal_1.assert)(unreachableCFKs.entries().length === 0, "Unreachable cross-field keys found");
|
|
1749
|
+
function noNewChangesRebaseChild(child, _baseChild, _stateChange) {
|
|
1750
|
+
(0, internal_1.assert)(child === undefined, 0x9c3 /* There should be no new changes in this field */);
|
|
1751
|
+
return undefined;
|
|
2595
1752
|
}
|
|
2596
|
-
|
|
2597
|
-
|
|
2598
|
-
* Asserts that each node has a correct entry in `change.nodeToParent`,
|
|
2599
|
-
* and each cross field key has a correct entry in `change.crossFieldKeys`.
|
|
2600
|
-
* @returns the number of children found.
|
|
2601
|
-
*/
|
|
2602
|
-
function validateFieldChanges(fieldKinds, change, fieldChanges, nodeParent, unreachableNodes, unreachableCFKs) {
|
|
2603
|
-
for (const [field, fieldChange] of fieldChanges.entries()) {
|
|
2604
|
-
const fieldId = { nodeId: nodeParent, field };
|
|
2605
|
-
const handler = getChangeHandler(fieldKinds, fieldChange.fieldKind);
|
|
2606
|
-
for (const [child, _index] of handler.getNestedChanges(fieldChange.change)) {
|
|
2607
|
-
const parentFieldId = getNodeParent(change, child);
|
|
2608
|
-
(0, internal_1.assert)(parentFieldId.field !== undefined && areEqualFieldIds(parentFieldId.field, fieldId), 0xa4e /* Inconsistent node parentage */);
|
|
2609
|
-
unreachableNodes.delete([child.revision, child.localId]);
|
|
2610
|
-
}
|
|
2611
|
-
for (const keyRange of handler.getCrossFieldKeys(fieldChange.change)) {
|
|
2612
|
-
const fields = getFieldsForCrossFieldKey(change, keyRange.key, keyRange.count);
|
|
2613
|
-
(0, internal_1.assert)(fields.length > 0, "Unregistered cross-field key");
|
|
2614
|
-
for (const fieldFromLookup of fields) {
|
|
2615
|
-
(0, internal_1.assert)(areEqualFieldIds(fieldFromLookup, fieldId), 0xa4f /* Inconsistent cross field keys */);
|
|
2616
|
-
}
|
|
2617
|
-
unreachableCFKs.delete(keyRange.key, keyRange.count);
|
|
2618
|
-
}
|
|
2619
|
-
}
|
|
1753
|
+
function areEqualFieldIds(a, b) {
|
|
1754
|
+
return (0, index_js_2.areEqualChangeAtomIdOpts)(a.nodeId, b.nodeId) && a.field === b.field;
|
|
2620
1755
|
}
|
|
2621
1756
|
//# sourceMappingURL=modularChangeFamily.js.map
|