@fluidframework/tree 2.1.0-281041 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vscode/Tree.code-workspace +2 -1
- package/CHANGELOG.md +38 -0
- package/README.md +6 -6
- package/api-report/tree.alpha.api.md +1 -1
- package/api-report/tree.beta.api.md +1 -1
- package/api-report/tree.public.api.md +1 -1
- package/dist/core/forest/editableForest.d.ts.map +1 -1
- package/dist/core/forest/editableForest.js +4 -2
- package/dist/core/forest/editableForest.js.map +1 -1
- package/dist/core/tree/anchorSet.d.ts +1 -0
- package/dist/core/tree/anchorSet.d.ts.map +1 -1
- package/dist/core/tree/anchorSet.js +13 -0
- package/dist/core/tree/anchorSet.js.map +1 -1
- package/dist/core/tree/detachedFieldIndex.d.ts +48 -11
- package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndex.js +144 -20
- package/dist/core/tree/detachedFieldIndex.js.map +1 -1
- package/dist/core/tree/detachedFieldIndexCodec.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndexCodec.js +13 -4
- package/dist/core/tree/detachedFieldIndexCodec.js.map +1 -1
- package/dist/core/tree/detachedFieldIndexFormat.d.ts +1 -1
- package/dist/core/tree/detachedFieldIndexFormat.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndexFormat.js.map +1 -1
- package/dist/core/tree/detachedFieldIndexTypes.d.ts +39 -4
- package/dist/core/tree/detachedFieldIndexTypes.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndexTypes.js.map +1 -1
- package/dist/core/tree/index.d.ts +2 -1
- package/dist/core/tree/index.d.ts.map +1 -1
- package/dist/core/tree/index.js.map +1 -1
- package/dist/core/tree/visitDelta.d.ts +3 -1
- package/dist/core/tree/visitDelta.d.ts.map +1 -1
- package/dist/core/tree/visitDelta.js +31 -15
- package/dist/core/tree/visitDelta.js.map +1 -1
- package/dist/core/tree/visitorUtils.d.ts +3 -3
- package/dist/core/tree/visitorUtils.d.ts.map +1 -1
- package/dist/core/tree/visitorUtils.js +4 -4
- package/dist/core/tree/visitorUtils.js.map +1 -1
- package/dist/feature-libraries/editableTreeBinder.js +1 -1
- package/dist/feature-libraries/editableTreeBinder.js.map +1 -1
- package/dist/feature-libraries/flex-map-tree/mapTreeNode.d.ts +1 -8
- package/dist/feature-libraries/flex-map-tree/mapTreeNode.d.ts.map +1 -1
- package/dist/feature-libraries/flex-map-tree/mapTreeNode.js +0 -52
- package/dist/feature-libraries/flex-map-tree/mapTreeNode.js.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +1 -13
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.js +0 -2
- package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/dist/feature-libraries/flex-tree/index.d.ts +2 -1
- package/dist/feature-libraries/flex-tree/index.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/index.js +5 -1
- package/dist/feature-libraries/flex-tree/index.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyEntity.d.ts +1 -2
- package/dist/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.d.ts +1 -2
- package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.js +10 -18
- package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.d.ts +1 -4
- package/dist/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.js +0 -27
- package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.js +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/dist/feature-libraries/index.d.ts +1 -1
- package/dist/feature-libraries/index.d.ts.map +1 -1
- package/dist/feature-libraries/index.js +4 -1
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/modular-schema/discrepancies.js +3 -3
- package/dist/feature-libraries/modular-schema/discrepancies.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js +14 -17
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/dist/feature-libraries/object-forest/objectForest.d.ts +3 -2
- package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
- package/dist/feature-libraries/object-forest/objectForest.js +5 -4
- package/dist/feature-libraries/object-forest/objectForest.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/sharedTree.d.ts +5 -1
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +8 -1
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/sharedTreeChangeEnricher.js +1 -1
- package/dist/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
- package/dist/shared-tree/treeApi.js +1 -1
- package/dist/shared-tree/treeApi.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts +10 -1
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +47 -4
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree/treeView.d.ts.map +1 -1
- package/dist/shared-tree/treeView.js +7 -3
- package/dist/shared-tree/treeView.js.map +1 -1
- package/dist/shared-tree-core/branch.d.ts +6 -0
- package/dist/shared-tree-core/branch.d.ts.map +1 -1
- package/dist/shared-tree-core/branch.js +2 -0
- package/dist/shared-tree-core/branch.js.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.d.ts +4 -0
- package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.js +6 -0
- package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/dist/simple-tree/arrayNode.js +1 -1
- package/dist/simple-tree/arrayNode.js.map +1 -1
- package/dist/simple-tree/index.d.ts +3 -3
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +2 -1
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/proxies.d.ts.map +1 -1
- package/dist/simple-tree/proxies.js +7 -21
- package/dist/simple-tree/proxies.js.map +1 -1
- package/dist/simple-tree/proxyBinding.d.ts +4 -0
- package/dist/simple-tree/proxyBinding.d.ts.map +1 -1
- package/dist/simple-tree/proxyBinding.js +23 -1
- package/dist/simple-tree/proxyBinding.js.map +1 -1
- package/dist/simple-tree/tree.d.ts.map +1 -1
- package/dist/simple-tree/tree.js +1 -1
- package/dist/simple-tree/tree.js.map +1 -1
- package/dist/simple-tree/treeNodeApi.d.ts +2 -75
- package/dist/simple-tree/treeNodeApi.d.ts.map +1 -1
- package/dist/simple-tree/treeNodeApi.js +7 -15
- package/dist/simple-tree/treeNodeApi.js.map +1 -1
- package/dist/simple-tree/treeNodeKernel.d.ts +26 -0
- package/dist/simple-tree/treeNodeKernel.d.ts.map +1 -0
- package/dist/simple-tree/treeNodeKernel.js +83 -0
- package/dist/simple-tree/treeNodeKernel.js.map +1 -0
- package/dist/simple-tree/types.d.ts +73 -0
- package/dist/simple-tree/types.d.ts.map +1 -1
- package/dist/simple-tree/types.js +89 -1
- package/dist/simple-tree/types.js.map +1 -1
- package/dist/util/breakable.js +1 -1
- package/dist/util/breakable.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.map +1 -1
- package/lib/core/forest/editableForest.d.ts.map +1 -1
- package/lib/core/forest/editableForest.js +4 -2
- package/lib/core/forest/editableForest.js.map +1 -1
- package/lib/core/tree/anchorSet.d.ts +1 -0
- package/lib/core/tree/anchorSet.d.ts.map +1 -1
- package/lib/core/tree/anchorSet.js +13 -0
- package/lib/core/tree/anchorSet.js.map +1 -1
- package/lib/core/tree/detachedFieldIndex.d.ts +48 -11
- package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndex.js +145 -21
- package/lib/core/tree/detachedFieldIndex.js.map +1 -1
- package/lib/core/tree/detachedFieldIndexCodec.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndexCodec.js +13 -4
- package/lib/core/tree/detachedFieldIndexCodec.js.map +1 -1
- package/lib/core/tree/detachedFieldIndexFormat.d.ts +1 -1
- package/lib/core/tree/detachedFieldIndexFormat.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndexFormat.js.map +1 -1
- package/lib/core/tree/detachedFieldIndexTypes.d.ts +39 -4
- package/lib/core/tree/detachedFieldIndexTypes.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndexTypes.js.map +1 -1
- package/lib/core/tree/index.d.ts +2 -1
- package/lib/core/tree/index.d.ts.map +1 -1
- package/lib/core/tree/index.js.map +1 -1
- package/lib/core/tree/visitDelta.d.ts +3 -1
- package/lib/core/tree/visitDelta.d.ts.map +1 -1
- package/lib/core/tree/visitDelta.js +31 -15
- package/lib/core/tree/visitDelta.js.map +1 -1
- package/lib/core/tree/visitorUtils.d.ts +3 -3
- package/lib/core/tree/visitorUtils.d.ts.map +1 -1
- package/lib/core/tree/visitorUtils.js +4 -4
- package/lib/core/tree/visitorUtils.js.map +1 -1
- package/lib/feature-libraries/editableTreeBinder.js +1 -1
- package/lib/feature-libraries/editableTreeBinder.js.map +1 -1
- package/lib/feature-libraries/flex-map-tree/mapTreeNode.d.ts +1 -8
- package/lib/feature-libraries/flex-map-tree/mapTreeNode.d.ts.map +1 -1
- package/lib/feature-libraries/flex-map-tree/mapTreeNode.js +2 -54
- package/lib/feature-libraries/flex-map-tree/mapTreeNode.js.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +1 -13
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.js +0 -2
- package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/lib/feature-libraries/flex-tree/index.d.ts +2 -1
- package/lib/feature-libraries/flex-tree/index.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/index.js +2 -1
- package/lib/feature-libraries/flex-tree/index.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyEntity.d.ts +1 -2
- package/lib/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.d.ts +1 -2
- package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.js +12 -20
- package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.d.ts +1 -4
- package/lib/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.js +3 -30
- package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.js +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/lib/feature-libraries/index.d.ts +1 -1
- package/lib/feature-libraries/index.d.ts.map +1 -1
- package/lib/feature-libraries/index.js +1 -1
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/modular-schema/discrepancies.js +3 -3
- package/lib/feature-libraries/modular-schema/discrepancies.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js +14 -17
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/lib/feature-libraries/object-forest/objectForest.d.ts +3 -2
- package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
- package/lib/feature-libraries/object-forest/objectForest.js +5 -4
- package/lib/feature-libraries/object-forest/objectForest.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/sharedTree.d.ts +5 -1
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +8 -1
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/sharedTreeChangeEnricher.js +1 -1
- package/lib/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
- package/lib/shared-tree/treeApi.js +1 -1
- package/lib/shared-tree/treeApi.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts +10 -1
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +47 -4
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree/treeView.d.ts.map +1 -1
- package/lib/shared-tree/treeView.js +4 -0
- package/lib/shared-tree/treeView.js.map +1 -1
- package/lib/shared-tree-core/branch.d.ts +6 -0
- package/lib/shared-tree-core/branch.d.ts.map +1 -1
- package/lib/shared-tree-core/branch.js +2 -0
- package/lib/shared-tree-core/branch.js.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.d.ts +4 -0
- package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.js +6 -0
- package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/lib/simple-tree/arrayNode.js +2 -2
- package/lib/simple-tree/arrayNode.js.map +1 -1
- package/lib/simple-tree/index.d.ts +3 -3
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +1 -1
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/proxies.d.ts.map +1 -1
- package/lib/simple-tree/proxies.js +7 -21
- package/lib/simple-tree/proxies.js.map +1 -1
- package/lib/simple-tree/proxyBinding.d.ts +4 -0
- package/lib/simple-tree/proxyBinding.d.ts.map +1 -1
- package/lib/simple-tree/proxyBinding.js +19 -0
- package/lib/simple-tree/proxyBinding.js.map +1 -1
- package/lib/simple-tree/tree.d.ts.map +1 -1
- package/lib/simple-tree/tree.js +1 -1
- package/lib/simple-tree/tree.js.map +1 -1
- package/lib/simple-tree/treeNodeApi.d.ts +2 -75
- package/lib/simple-tree/treeNodeApi.d.ts.map +1 -1
- package/lib/simple-tree/treeNodeApi.js +9 -17
- package/lib/simple-tree/treeNodeApi.js.map +1 -1
- package/lib/simple-tree/treeNodeKernel.d.ts +26 -0
- package/lib/simple-tree/treeNodeKernel.d.ts.map +1 -0
- package/lib/simple-tree/treeNodeKernel.js +79 -0
- package/lib/simple-tree/treeNodeKernel.js.map +1 -0
- package/lib/simple-tree/types.d.ts +73 -0
- package/lib/simple-tree/types.d.ts.map +1 -1
- package/lib/simple-tree/types.js +90 -2
- package/lib/simple-tree/types.js.map +1 -1
- package/lib/util/breakable.js +1 -1
- package/lib/util/breakable.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.map +1 -1
- package/package.json +22 -22
- package/src/core/forest/editableForest.ts +10 -2
- package/src/core/tree/anchorSet.ts +14 -0
- package/src/core/tree/detachedFieldIndex.ts +217 -35
- package/src/core/tree/detachedFieldIndexCodec.ts +17 -8
- package/src/core/tree/detachedFieldIndexFormat.ts +1 -1
- package/src/core/tree/detachedFieldIndexTypes.ts +41 -5
- package/src/core/tree/index.ts +2 -1
- package/src/core/tree/visitDelta.ts +57 -16
- package/src/core/tree/visitorUtils.ts +7 -4
- package/src/feature-libraries/editableTreeBinder.ts +1 -1
- package/src/feature-libraries/flex-map-tree/mapTreeNode.ts +1 -65
- package/src/feature-libraries/flex-tree/flexTreeTypes.ts +0 -19
- package/src/feature-libraries/flex-tree/index.ts +7 -1
- package/src/feature-libraries/flex-tree/lazyEntity.ts +0 -3
- package/src/feature-libraries/flex-tree/lazyField.ts +14 -26
- package/src/feature-libraries/flex-tree/lazyNode.ts +1 -42
- package/src/feature-libraries/forest-summary/forestSummarizer.ts +1 -0
- package/src/feature-libraries/index.ts +3 -0
- package/src/feature-libraries/modular-schema/discrepancies.ts +3 -3
- package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +1 -1
- package/src/feature-libraries/modular-schema/modularChangeFamily.ts +22 -20
- package/src/feature-libraries/object-forest/objectForest.ts +7 -3
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/sharedTree.ts +8 -1
- package/src/shared-tree/sharedTreeChangeEnricher.ts +1 -1
- package/src/shared-tree/treeApi.ts +1 -1
- package/src/shared-tree/treeCheckout.ts +56 -5
- package/src/shared-tree/treeView.ts +5 -0
- package/src/shared-tree-core/branch.ts +9 -0
- package/src/shared-tree-core/sharedTreeCore.ts +7 -0
- package/src/simple-tree/arrayNode.ts +2 -2
- package/src/simple-tree/index.ts +3 -3
- package/src/simple-tree/proxies.ts +8 -29
- package/src/simple-tree/proxyBinding.ts +23 -0
- package/src/simple-tree/tree.ts +4 -1
- package/src/simple-tree/treeNodeApi.ts +14 -96
- package/src/simple-tree/treeNodeKernel.ts +91 -0
- package/src/simple-tree/types.ts +233 -2
- package/src/util/breakable.ts +1 -1
- package/src/util/index.ts +1 -0
|
@@ -93,7 +93,7 @@ export class ForestSummarizer {
|
|
|
93
93
|
]);
|
|
94
94
|
}
|
|
95
95
|
assert(this.forest.isEmpty, 0x797 /* forest must be empty */);
|
|
96
|
-
applyDelta({ build, fields: new Map(fieldChanges) }, this.forest, makeDetachedFieldIndex("init", this.revisionTagCodec, this.idCompressor));
|
|
96
|
+
applyDelta({ build, fields: new Map(fieldChanges) }, undefined, this.forest, makeDetachedFieldIndex("init", this.revisionTagCodec, this.idCompressor));
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forestSummarizer.js","sourceRoot":"","sources":["../../../src/feature-libraries/forest-summary/forestSummarizer.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { bufferToString } from \"@fluid-internal/client-utils\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport type { IChannelStorageService } from \"@fluidframework/datastore-definitions/internal\";\nimport type {\n\tIGarbageCollectionData,\n\tISummaryTreeWithStats,\n\tITelemetryContext,\n} from \"@fluidframework/runtime-definitions/internal\";\nimport { createSingleBlobSummary } from \"@fluidframework/shared-object-base/internal\";\n\nimport { type ICodecOptions, noopValidator } from \"../../codec/index.js\";\nimport {\n\ttype DeltaDetachedNodeBuild,\n\ttype DeltaFieldChanges,\n\ttype FieldKey,\n\ttype IEditableForest,\n\ttype ITreeCursorSynchronous,\n\ttype ITreeSubscriptionCursor,\n\ttype RevisionTagCodec,\n\tTreeNavigationResult,\n\tapplyDelta,\n\tforEachField,\n\tmakeDetachedFieldIndex,\n\tmapCursorField,\n} from \"../../core/index.js\";\nimport type {\n\tSummarizable,\n\tSummaryElementParser,\n\tSummaryElementStringifier,\n} from \"../../shared-tree-core/index.js\";\nimport { idAllocatorFromMaxId } from \"../../util/index.js\";\n// eslint-disable-next-line import/no-internal-modules\nimport { chunkField, defaultChunkPolicy } from \"../chunked-forest/chunkTree.js\";\nimport type { FieldBatchCodec, FieldBatchEncodingContext } from \"../chunked-forest/index.js\";\n\nimport { type ForestCodec, makeForestSummarizerCodec } from \"./codec.js\";\nimport type { Format } from \"./format.js\";\nimport type { IIdCompressor } from \"@fluidframework/id-compressor\";\n/**\n * The storage key for the blob in the summary containing tree data\n */\nconst treeBlobKey = \"ForestTree\";\n\n/**\n * Provides methods for summarizing and loading a forest.\n */\nexport class ForestSummarizer implements Summarizable {\n\tpublic readonly key = \"Forest\";\n\n\tprivate readonly codec: ForestCodec;\n\n\t/**\n\t * @param encoderContext - The schema if provided here must be mutated by the caller to keep it up to date.\n\t */\n\tpublic constructor(\n\t\tprivate readonly forest: IEditableForest,\n\t\tprivate readonly revisionTagCodec: RevisionTagCodec,\n\t\tfieldBatchCodec: FieldBatchCodec,\n\t\tprivate readonly encoderContext: FieldBatchEncodingContext,\n\t\toptions: ICodecOptions = { jsonValidator: noopValidator },\n\t\tprivate readonly idCompressor: IIdCompressor,\n\t) {\n\t\tthis.codec = makeForestSummarizerCodec(options, fieldBatchCodec);\n\t}\n\n\t/**\n\t * Synchronous monolithic summarization of tree content.\n\t *\n\t * TODO: when perf matters, this should be replaced with a chunked async version using a binary format.\n\t *\n\t * @returns a snapshot of the forest's tree as a string.\n\t */\n\tprivate getTreeString(stringify: SummaryElementStringifier): string {\n\t\tconst rootCursor = this.forest.getCursorAboveDetachedFields();\n\t\tconst fieldMap: Map<FieldKey, ITreeCursorSynchronous & ITreeSubscriptionCursor> =\n\t\t\tnew Map();\n\t\t// TODO: Encode all detached fields in one operation for better performance and compression\n\t\tforEachField(rootCursor, (cursor) => {\n\t\t\tconst key = cursor.getFieldKey();\n\t\t\tconst innerCursor = this.forest.allocateCursor(\"getTreeString\");\n\t\t\tassert(\n\t\t\t\tthis.forest.tryMoveCursorToField({ fieldKey: key, parent: undefined }, innerCursor) ===\n\t\t\t\t\tTreeNavigationResult.Ok,\n\t\t\t\t0x892 /* failed to navigate to field */,\n\t\t\t);\n\t\t\tfieldMap.set(key, innerCursor as ITreeCursorSynchronous & ITreeSubscriptionCursor);\n\t\t});\n\t\tconst encoded = this.codec.encode(fieldMap, this.encoderContext);\n\n\t\tfieldMap.forEach((value) => value.free());\n\t\treturn stringify(encoded);\n\t}\n\n\tpublic getAttachSummary(\n\t\tstringify: SummaryElementStringifier,\n\t\tfullTree?: boolean,\n\t\ttrackState?: boolean,\n\t\ttelemetryContext?: ITelemetryContext,\n\t): ISummaryTreeWithStats {\n\t\treturn createSingleBlobSummary(treeBlobKey, this.getTreeString(stringify));\n\t}\n\n\tpublic async summarize(\n\t\tstringify: SummaryElementStringifier,\n\t\tfullTree?: boolean,\n\t\ttrackState?: boolean,\n\t\ttelemetryContext?: ITelemetryContext,\n\t): Promise<ISummaryTreeWithStats> {\n\t\treturn createSingleBlobSummary(treeBlobKey, this.getTreeString(stringify));\n\t}\n\n\tpublic getGCData(fullGC?: boolean): IGarbageCollectionData {\n\t\t// TODO: Properly implement garbage collection. Right now, garbage collection is performed automatically\n\t\t// by the code in SharedObject (from which SharedTreeCore extends). The `runtime.uploadBlob` API delegates\n\t\t// to the `BlobManager`, which automatically populates the summary with ISummaryAttachment entries for each\n\t\t// blob.\n\t\treturn {\n\t\t\tgcNodes: {},\n\t\t};\n\t}\n\n\tpublic async load(\n\t\tservices: IChannelStorageService,\n\t\tparse: SummaryElementParser,\n\t): Promise<void> {\n\t\tif (await services.contains(treeBlobKey)) {\n\t\t\tconst treeBuffer = await services.readBlob(treeBlobKey);\n\t\t\tconst treeBufferString = bufferToString(treeBuffer, \"utf8\");\n\t\t\t// TODO: this code is parsing data without an optional validator, this should be defined in a typebox schema as part of the\n\t\t\t// forest summary format.\n\t\t\tconst fields = this.codec.decode(parse(treeBufferString) as Format, this.encoderContext);\n\t\t\tconst allocator = idAllocatorFromMaxId();\n\t\t\tconst fieldChanges: [FieldKey, DeltaFieldChanges][] = [];\n\t\t\tconst build: DeltaDetachedNodeBuild[] = [];\n\t\t\tfor (const [fieldKey, field] of fields) {\n\t\t\t\tconst chunked = chunkField(field, defaultChunkPolicy);\n\t\t\t\tconst nodeCursors = chunked.flatMap((chunk) =>\n\t\t\t\t\tmapCursorField(chunk.cursor(), (cursor) => cursor.fork()),\n\t\t\t\t);\n\t\t\t\tconst buildId = { minor: allocator.allocate(nodeCursors.length) };\n\t\t\t\tbuild.push({\n\t\t\t\t\tid: buildId,\n\t\t\t\t\ttrees: nodeCursors,\n\t\t\t\t});\n\t\t\t\tfieldChanges.push([\n\t\t\t\t\tfieldKey,\n\t\t\t\t\t{\n\t\t\t\t\t\tlocal: [{ count: nodeCursors.length, attach: buildId }],\n\t\t\t\t\t},\n\t\t\t\t]);\n\t\t\t}\n\n\t\t\tassert(this.forest.isEmpty, 0x797 /* forest must be empty */);\n\t\t\tapplyDelta(\n\t\t\t\t{ build, fields: new Map(fieldChanges) },\n\t\t\t\tthis.forest,\n\t\t\t\tmakeDetachedFieldIndex(\"init\", this.revisionTagCodec, this.idCompressor),\n\t\t\t);\n\t\t}\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"forestSummarizer.js","sourceRoot":"","sources":["../../../src/feature-libraries/forest-summary/forestSummarizer.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { bufferToString } from \"@fluid-internal/client-utils\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport type { IChannelStorageService } from \"@fluidframework/datastore-definitions/internal\";\nimport type {\n\tIGarbageCollectionData,\n\tISummaryTreeWithStats,\n\tITelemetryContext,\n} from \"@fluidframework/runtime-definitions/internal\";\nimport { createSingleBlobSummary } from \"@fluidframework/shared-object-base/internal\";\n\nimport { type ICodecOptions, noopValidator } from \"../../codec/index.js\";\nimport {\n\ttype DeltaDetachedNodeBuild,\n\ttype DeltaFieldChanges,\n\ttype FieldKey,\n\ttype IEditableForest,\n\ttype ITreeCursorSynchronous,\n\ttype ITreeSubscriptionCursor,\n\ttype RevisionTagCodec,\n\tTreeNavigationResult,\n\tapplyDelta,\n\tforEachField,\n\tmakeDetachedFieldIndex,\n\tmapCursorField,\n} from \"../../core/index.js\";\nimport type {\n\tSummarizable,\n\tSummaryElementParser,\n\tSummaryElementStringifier,\n} from \"../../shared-tree-core/index.js\";\nimport { idAllocatorFromMaxId } from \"../../util/index.js\";\n// eslint-disable-next-line import/no-internal-modules\nimport { chunkField, defaultChunkPolicy } from \"../chunked-forest/chunkTree.js\";\nimport type { FieldBatchCodec, FieldBatchEncodingContext } from \"../chunked-forest/index.js\";\n\nimport { type ForestCodec, makeForestSummarizerCodec } from \"./codec.js\";\nimport type { Format } from \"./format.js\";\nimport type { IIdCompressor } from \"@fluidframework/id-compressor\";\n/**\n * The storage key for the blob in the summary containing tree data\n */\nconst treeBlobKey = \"ForestTree\";\n\n/**\n * Provides methods for summarizing and loading a forest.\n */\nexport class ForestSummarizer implements Summarizable {\n\tpublic readonly key = \"Forest\";\n\n\tprivate readonly codec: ForestCodec;\n\n\t/**\n\t * @param encoderContext - The schema if provided here must be mutated by the caller to keep it up to date.\n\t */\n\tpublic constructor(\n\t\tprivate readonly forest: IEditableForest,\n\t\tprivate readonly revisionTagCodec: RevisionTagCodec,\n\t\tfieldBatchCodec: FieldBatchCodec,\n\t\tprivate readonly encoderContext: FieldBatchEncodingContext,\n\t\toptions: ICodecOptions = { jsonValidator: noopValidator },\n\t\tprivate readonly idCompressor: IIdCompressor,\n\t) {\n\t\tthis.codec = makeForestSummarizerCodec(options, fieldBatchCodec);\n\t}\n\n\t/**\n\t * Synchronous monolithic summarization of tree content.\n\t *\n\t * TODO: when perf matters, this should be replaced with a chunked async version using a binary format.\n\t *\n\t * @returns a snapshot of the forest's tree as a string.\n\t */\n\tprivate getTreeString(stringify: SummaryElementStringifier): string {\n\t\tconst rootCursor = this.forest.getCursorAboveDetachedFields();\n\t\tconst fieldMap: Map<FieldKey, ITreeCursorSynchronous & ITreeSubscriptionCursor> =\n\t\t\tnew Map();\n\t\t// TODO: Encode all detached fields in one operation for better performance and compression\n\t\tforEachField(rootCursor, (cursor) => {\n\t\t\tconst key = cursor.getFieldKey();\n\t\t\tconst innerCursor = this.forest.allocateCursor(\"getTreeString\");\n\t\t\tassert(\n\t\t\t\tthis.forest.tryMoveCursorToField({ fieldKey: key, parent: undefined }, innerCursor) ===\n\t\t\t\t\tTreeNavigationResult.Ok,\n\t\t\t\t0x892 /* failed to navigate to field */,\n\t\t\t);\n\t\t\tfieldMap.set(key, innerCursor as ITreeCursorSynchronous & ITreeSubscriptionCursor);\n\t\t});\n\t\tconst encoded = this.codec.encode(fieldMap, this.encoderContext);\n\n\t\tfieldMap.forEach((value) => value.free());\n\t\treturn stringify(encoded);\n\t}\n\n\tpublic getAttachSummary(\n\t\tstringify: SummaryElementStringifier,\n\t\tfullTree?: boolean,\n\t\ttrackState?: boolean,\n\t\ttelemetryContext?: ITelemetryContext,\n\t): ISummaryTreeWithStats {\n\t\treturn createSingleBlobSummary(treeBlobKey, this.getTreeString(stringify));\n\t}\n\n\tpublic async summarize(\n\t\tstringify: SummaryElementStringifier,\n\t\tfullTree?: boolean,\n\t\ttrackState?: boolean,\n\t\ttelemetryContext?: ITelemetryContext,\n\t): Promise<ISummaryTreeWithStats> {\n\t\treturn createSingleBlobSummary(treeBlobKey, this.getTreeString(stringify));\n\t}\n\n\tpublic getGCData(fullGC?: boolean): IGarbageCollectionData {\n\t\t// TODO: Properly implement garbage collection. Right now, garbage collection is performed automatically\n\t\t// by the code in SharedObject (from which SharedTreeCore extends). The `runtime.uploadBlob` API delegates\n\t\t// to the `BlobManager`, which automatically populates the summary with ISummaryAttachment entries for each\n\t\t// blob.\n\t\treturn {\n\t\t\tgcNodes: {},\n\t\t};\n\t}\n\n\tpublic async load(\n\t\tservices: IChannelStorageService,\n\t\tparse: SummaryElementParser,\n\t): Promise<void> {\n\t\tif (await services.contains(treeBlobKey)) {\n\t\t\tconst treeBuffer = await services.readBlob(treeBlobKey);\n\t\t\tconst treeBufferString = bufferToString(treeBuffer, \"utf8\");\n\t\t\t// TODO: this code is parsing data without an optional validator, this should be defined in a typebox schema as part of the\n\t\t\t// forest summary format.\n\t\t\tconst fields = this.codec.decode(parse(treeBufferString) as Format, this.encoderContext);\n\t\t\tconst allocator = idAllocatorFromMaxId();\n\t\t\tconst fieldChanges: [FieldKey, DeltaFieldChanges][] = [];\n\t\t\tconst build: DeltaDetachedNodeBuild[] = [];\n\t\t\tfor (const [fieldKey, field] of fields) {\n\t\t\t\tconst chunked = chunkField(field, defaultChunkPolicy);\n\t\t\t\tconst nodeCursors = chunked.flatMap((chunk) =>\n\t\t\t\t\tmapCursorField(chunk.cursor(), (cursor) => cursor.fork()),\n\t\t\t\t);\n\t\t\t\tconst buildId = { minor: allocator.allocate(nodeCursors.length) };\n\t\t\t\tbuild.push({\n\t\t\t\t\tid: buildId,\n\t\t\t\t\ttrees: nodeCursors,\n\t\t\t\t});\n\t\t\t\tfieldChanges.push([\n\t\t\t\t\tfieldKey,\n\t\t\t\t\t{\n\t\t\t\t\t\tlocal: [{ count: nodeCursors.length, attach: buildId }],\n\t\t\t\t\t},\n\t\t\t\t]);\n\t\t\t}\n\n\t\t\tassert(this.forest.isEmpty, 0x797 /* forest must be empty */);\n\t\t\tapplyDelta(\n\t\t\t\t{ build, fields: new Map(fieldChanges) },\n\t\t\t\tundefined,\n\t\t\t\tthis.forest,\n\t\t\t\tmakeDetachedFieldIndex(\"init\", this.revisionTagCodec, this.idCompressor),\n\t\t\t);\n\t\t}\n\t}\n}\n"]}
|
|
@@ -23,7 +23,7 @@ export { mapRootChanges } from "./deltaUtils.js";
|
|
|
23
23
|
export { type TreeChunk, chunkTree, chunkFieldSingle, buildChunkedForest, defaultChunkPolicy, type FieldBatch, type FieldBatchCodec, makeTreeChunker, makeFieldBatchCodec, type FieldBatchEncodingContext, } from "./chunked-forest/index.js";
|
|
24
24
|
export { compareLocalNodeKeys, createNodeKeyManager, isStableNodeKey, type LocalNodeKey, MockNodeKeyManager, type NodeKeyManager, nodeKeyTreeIdentifier, type StableNodeKey, } from "./node-key/index.js";
|
|
25
25
|
export { FieldKinds, type Required, type Optional, type Sequence, type Identifier, type Forbidden, type DefaultChangeset, DefaultChangeFamily, DefaultEditBuilder, type IDefaultEditBuilder, type ValueFieldEditBuilder, type OptionalFieldEditBuilder, type SequenceFieldEditBuilder, defaultSchemaPolicy, fieldKinds, fieldKindConfigurations, intoDelta, relevantRemovedRoots, SchemaValidationErrors, isNodeInSchema, } from "./default-schema/index.js";
|
|
26
|
-
export { type AssignableFieldKinds, type FlexTreeFieldNode, type FlexibleFieldContent, type FlexibleNodeContent, type FlexTreeLeafNode, type FlexTreeMapNode, type FlexTreeOptionalField, type FlexTreeRequiredField, type FlexTreeSequenceField, Skip, type FlexTreeObjectNode, type FlexTreeObjectNodeTyped, type FlexTreeContext, type FlexTreeTypedField, type FlexTreeTypedNode, type FlexTreeTypedNodeUnion, type FlexTreeEntity, type FlexTreeField, type FlexTreeNode, getTreeContext, type CheckTypesOverlap, TreeStatus, Context, type FlexTreeNodeEvents, type FlexTreeUnknownUnboxed, isFlexTreeNode, ContextSlot, type FlexTreeTypedFieldInner, type FlexTreeUnboxFieldInner, type FlexTreeObjectNodeFields, type FlexTreeUnboxField, type FlexTreeUnboxNode, type FlexTreeUnboxNodeUnion, type IsArrayOfOne, type FlexibleNodeSubSequence, flexTreeMarker, FlexTreeEntityKind, type PropertyNameFromFieldKey, type ReservedObjectNodeFieldPropertyNames, type ReservedObjectNodeFieldPropertyNamePrefixes, reservedObjectNodeFieldPropertyNames, reservedObjectNodeFieldPropertyNamePrefixes, type FlexTreeObjectNodeFieldsInner, assertFlexTreeEntityNotFreed, flexTreeSlot, getSchemaAndPolicy, } from "./flex-tree/index.js";
|
|
26
|
+
export { type AssignableFieldKinds, type FlexTreeFieldNode, type FlexibleFieldContent, type FlexibleNodeContent, type FlexTreeLeafNode, type FlexTreeMapNode, type FlexTreeOptionalField, type FlexTreeRequiredField, type FlexTreeSequenceField, Skip, type FlexTreeObjectNode, type FlexTreeObjectNodeTyped, type FlexTreeContext, type FlexTreeTypedField, type FlexTreeTypedNode, type FlexTreeTypedNodeUnion, type FlexTreeEntity, type FlexTreeField, type FlexTreeNode, getTreeContext, type CheckTypesOverlap, TreeStatus, Context, type FlexTreeNodeEvents, type FlexTreeUnknownUnboxed, isFlexTreeNode, ContextSlot, type FlexTreeTypedFieldInner, type FlexTreeUnboxFieldInner, type FlexTreeObjectNodeFields, type FlexTreeUnboxField, type FlexTreeUnboxNode, type FlexTreeUnboxNodeUnion, type IsArrayOfOne, type FlexibleNodeSubSequence, flexTreeMarker, FlexTreeEntityKind, type PropertyNameFromFieldKey, type ReservedObjectNodeFieldPropertyNames, type ReservedObjectNodeFieldPropertyNamePrefixes, reservedObjectNodeFieldPropertyNames, reservedObjectNodeFieldPropertyNamePrefixes, type FlexTreeObjectNodeFieldsInner, assertFlexTreeEntityNotFreed, flexTreeSlot, getSchemaAndPolicy, isFreedSymbol, LazyEntity, treeStatusFromAnchorCache, } from "./flex-tree/index.js";
|
|
27
27
|
export { treeSchemaFromStoredSchema } from "./storedToViewSchema.js";
|
|
28
28
|
export { TreeCompressionStrategy } from "./treeCompressionUtils.js";
|
|
29
29
|
export { valueSchemaAllows } from "./valueUtilities.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/feature-libraries/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/feature-libraries/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,7 +23,7 @@ export { mapRootChanges } from "./deltaUtils.js";
|
|
|
23
23
|
export { chunkTree, chunkFieldSingle, buildChunkedForest, defaultChunkPolicy, makeTreeChunker, makeFieldBatchCodec, } from "./chunked-forest/index.js";
|
|
24
24
|
export { compareLocalNodeKeys, createNodeKeyManager, isStableNodeKey, MockNodeKeyManager, nodeKeyTreeIdentifier, } from "./node-key/index.js";
|
|
25
25
|
export { FieldKinds, DefaultChangeFamily, DefaultEditBuilder, defaultSchemaPolicy, fieldKinds, fieldKindConfigurations, intoDelta, relevantRemovedRoots, SchemaValidationErrors, isNodeInSchema, } from "./default-schema/index.js";
|
|
26
|
-
export { Skip, getTreeContext, TreeStatus, Context, isFlexTreeNode, ContextSlot, flexTreeMarker, FlexTreeEntityKind, reservedObjectNodeFieldPropertyNames, reservedObjectNodeFieldPropertyNamePrefixes, assertFlexTreeEntityNotFreed, flexTreeSlot, getSchemaAndPolicy, } from "./flex-tree/index.js";
|
|
26
|
+
export { Skip, getTreeContext, TreeStatus, Context, isFlexTreeNode, ContextSlot, flexTreeMarker, FlexTreeEntityKind, reservedObjectNodeFieldPropertyNames, reservedObjectNodeFieldPropertyNamePrefixes, assertFlexTreeEntityNotFreed, flexTreeSlot, getSchemaAndPolicy, isFreedSymbol, LazyEntity, treeStatusFromAnchorCache, } from "./flex-tree/index.js";
|
|
27
27
|
export { treeSchemaFromStoredSchema } from "./storedToViewSchema.js";
|
|
28
28
|
export { TreeCompressionStrategy } from "./treeCompressionUtils.js";
|
|
29
29
|
export { valueSchemaAllows } from "./valueUtilities.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/feature-libraries/index.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport {\n\tcreateDataBinderBuffering,\n\tcreateDataBinderDirect,\n\tcreateDataBinderInvalidating,\n\tcreateBinderOptions,\n\tcreateFlushableBinderOptions,\n\ttype DataBinder,\n\ttype BinderOptions,\n\ttype Flushable,\n\ttype FlushableBinderOptions,\n\ttype FlushableDataBinder,\n\ttype MatchPolicy,\n\ttype SubtreePolicy,\n\ttype BindSyntaxTree,\n\tindexSymbol,\n\ttype BindPolicy,\n\ttype BindTree,\n\ttype BindTreeDefault,\n\ttype DownPath,\n\ttype BindPath,\n\ttype PathStep,\n\tBindingType,\n\ttype BindingContextType,\n\ttype BindingContext,\n\ttype VisitorBindingContext,\n\ttype RemoveBindingContext,\n\ttype InsertBindingContext,\n\ttype BatchBindingContext,\n\ttype InvalidationBindingContext,\n\ttype OperationBinderEvents,\n\ttype InvalidationBinderEvents,\n\ttype CompareFunction,\n\ttype BinderEventsCompare,\n\ttype AnchorsCompare,\n\ttoDownPath,\n\tcomparePipeline,\n\tcompileSyntaxTree,\n} from \"./editableTreeBinder.js\";\nexport {\n\ttypeNameSymbol,\n\tvalueSymbol,\n\ttype ContextuallyTypedNodeDataObject,\n\ttype ContextuallyTypedNodeData,\n\ttype MarkedArrayLike,\n\tisContextuallyTypedNodeDataObject,\n\tgetFieldKind,\n\ttype ArrayLikeMut,\n\tcursorFromContextualData,\n\tcursorsFromContextualData,\n\ttype ContextuallyTypedFieldData,\n\tcursorForTypedData,\n\tcursorForTypedTreeData,\n\tcursorsForTypedFieldData,\n\tnormalizeNewFieldContent,\n\ttype NewFieldContent,\n\tgetPossibleTypes,\n\tgetAllowedTypes,\n} from \"./contextuallyTyped.js\";\n\nexport { allowsValue, assertAllowedValue, isTreeValue } from \"./valueUtilities.js\";\n\nexport type { FieldGenerator, TreeDataContext } from \"./fieldGenerator.js\";\n\nexport { ForestSummarizer } from \"./forest-summary/index.js\";\nexport {\n\tcursorForMapTreeField,\n\tcursorForMapTreeNode,\n\tmapTreeFromCursor,\n} from \"./mapTreeCursor.js\";\nexport { MemoizedIdRangeAllocator, type IdRange } from \"./memoizedIdRangeAllocator.js\";\nexport { buildForest } from \"./object-forest/index.js\";\nexport { SchemaSummarizer, encodeTreeSchema, makeSchemaCodec } from \"./schema-index/index.js\";\nexport {\n\tstackTreeNodeCursor,\n\ttype CursorAdapter,\n\tprefixPath,\n\tprefixFieldPath,\n\ttype CursorWithNode,\n\tstackTreeFieldCursor,\n} from \"./treeCursorUtils.js\";\nexport {\n\tcursorForJsonableTreeNode,\n\tcursorForJsonableTreeField,\n\tjsonableTreeFromCursor,\n\tjsonableTreeFromFieldCursor,\n\tjsonableTreeFromForest,\n} from \"./treeTextCursor.js\";\n\n// Split this up into separate import and export for compatibility with API-Extractor.\nimport * as SequenceField from \"./sequence-field/index.js\";\nexport { SequenceField };\n\nexport {\n\tisNeverField,\n\tModularEditBuilder,\n\ttype FieldEditDescription as EditDescription,\n\ttype FieldChangeHandler,\n\ttype FieldChangeRebaser,\n\ttype FieldEditor,\n\ttype FieldChangeMap,\n\ttype FieldChange,\n\ttype FieldChangeset,\n\ttype ToDelta,\n\ttype ModularChangeset,\n\tmakeModularChangeCodecFamily,\n\ttype NodeChangeComposer,\n\ttype NodeChangeInverter,\n\ttype NodeChangeRebaser,\n\ttype NodeChangePruner,\n\ttype CrossFieldManager,\n\tCrossFieldTarget,\n\tFlexFieldKind,\n\ttype FullSchemaPolicy,\n\tallowsRepoSuperset,\n\ttype GenericChangeset,\n\tgenericFieldKind,\n\ttype HasFieldChanges,\n\ttype NodeExistsConstraint,\n\tFieldKindWithEditor,\n\tModularChangeFamily,\n\ttype RelevantRemovedRootsFromChild,\n\tEncodedModularChangeset,\n\tupdateRefreshers,\n\ttype NodeId,\n\ttype FieldChangeEncodingContext,\n\ttype FieldKindConfiguration,\n\ttype FieldKindConfigurationEntry,\n\tgetAllowedContentIncompatibilities,\n} from \"./modular-schema/index.js\";\n\nexport {\n\ttype FlexTreeNodeSchema,\n\ttype FlexAllowedTypes,\n\tFlexFieldSchema,\n\ttype FlexTreeSchema,\n\tAny,\n\ttype SchemaLibraryData,\n\ttype LazyTreeNodeSchema,\n\tViewSchema,\n\ttype SchemaLintConfiguration,\n\tFlexFieldNodeSchema,\n\tLeafNodeSchema,\n\tFlexMapNodeSchema,\n\tFlexObjectNodeSchema,\n\tschemaIsFieldNode,\n\tschemaIsLeaf,\n\tschemaIsMap,\n\tschemaIsObjectNode,\n\ttype Unenforced,\n\ttype AllowedTypeSet,\n\tmarkEager,\n\ttype FlexMapFieldSchema,\n\ttype SchemaCollection,\n\tTreeNodeSchemaBase,\n\ttype LazyItem,\n\ttype FlexListToUnion,\n\ttype ExtractItemType,\n\tisLazy,\n\ttype NormalizeObjectNodeFields,\n\ttype NormalizeField as NormalizeFieldSchema,\n\ttype FlexObjectNodeFields,\n\tintoStoredSchema,\n\tintoStoredSchemaCollection,\n\ttype NormalizeLazyItem,\n\ttype FlexList,\n} from \"./typed-schema/index.js\";\n\nexport {\n\tSchemaBuilderBase,\n\ttype SchemaLibrary,\n\ttype FlexImplicitFieldSchema,\n\ttype NormalizeField,\n\ttype FlexImplicitAllowedTypes,\n\ttype NormalizeAllowedTypes,\n\ttype SchemaBuilderOptions,\n\tnormalizeAllowedTypes,\n\tnormalizeField,\n} from \"./schemaBuilderBase.js\";\nexport { SchemaBuilderInternal } from \"./schemaBuilder.js\";\n\nexport { mapRootChanges } from \"./deltaUtils.js\";\n\nexport {\n\ttype TreeChunk,\n\tchunkTree,\n\tchunkFieldSingle,\n\tbuildChunkedForest,\n\tdefaultChunkPolicy,\n\ttype FieldBatch,\n\ttype FieldBatchCodec,\n\tmakeTreeChunker,\n\tmakeFieldBatchCodec,\n\ttype FieldBatchEncodingContext,\n} from \"./chunked-forest/index.js\";\n\nexport {\n\tcompareLocalNodeKeys,\n\tcreateNodeKeyManager,\n\tisStableNodeKey,\n\ttype LocalNodeKey,\n\tMockNodeKeyManager,\n\ttype NodeKeyManager,\n\tnodeKeyTreeIdentifier,\n\ttype StableNodeKey,\n} from \"./node-key/index.js\";\n\nexport {\n\tFieldKinds,\n\ttype Required,\n\ttype Optional,\n\ttype Sequence,\n\ttype Identifier,\n\ttype Forbidden,\n\ttype DefaultChangeset,\n\tDefaultChangeFamily,\n\tDefaultEditBuilder,\n\ttype IDefaultEditBuilder,\n\ttype ValueFieldEditBuilder,\n\ttype OptionalFieldEditBuilder,\n\ttype SequenceFieldEditBuilder,\n\tdefaultSchemaPolicy,\n\tfieldKinds,\n\tfieldKindConfigurations,\n\tintoDelta,\n\trelevantRemovedRoots,\n\tSchemaValidationErrors,\n\tisNodeInSchema,\n} from \"./default-schema/index.js\";\n\nexport {\n\ttype AssignableFieldKinds,\n\ttype FlexTreeFieldNode,\n\ttype FlexibleFieldContent,\n\ttype FlexibleNodeContent,\n\ttype FlexTreeLeafNode,\n\ttype FlexTreeMapNode,\n\ttype FlexTreeOptionalField,\n\ttype FlexTreeRequiredField,\n\ttype FlexTreeSequenceField,\n\tSkip,\n\ttype FlexTreeObjectNode,\n\ttype FlexTreeObjectNodeTyped,\n\ttype FlexTreeContext,\n\ttype FlexTreeTypedField,\n\ttype FlexTreeTypedNode,\n\ttype FlexTreeTypedNodeUnion,\n\ttype FlexTreeEntity,\n\ttype FlexTreeField,\n\ttype FlexTreeNode,\n\tgetTreeContext,\n\ttype CheckTypesOverlap,\n\tTreeStatus,\n\tContext,\n\ttype FlexTreeNodeEvents,\n\ttype FlexTreeUnknownUnboxed,\n\tisFlexTreeNode,\n\tContextSlot,\n\t// Internal\n\ttype FlexTreeTypedFieldInner,\n\ttype FlexTreeUnboxFieldInner,\n\ttype FlexTreeObjectNodeFields,\n\ttype FlexTreeUnboxField,\n\ttype FlexTreeUnboxNode,\n\ttype FlexTreeUnboxNodeUnion,\n\ttype IsArrayOfOne,\n\ttype FlexibleNodeSubSequence,\n\tflexTreeMarker,\n\tFlexTreeEntityKind,\n\ttype PropertyNameFromFieldKey,\n\ttype ReservedObjectNodeFieldPropertyNames,\n\ttype ReservedObjectNodeFieldPropertyNamePrefixes,\n\treservedObjectNodeFieldPropertyNames,\n\treservedObjectNodeFieldPropertyNamePrefixes,\n\ttype FlexTreeObjectNodeFieldsInner,\n\tassertFlexTreeEntityNotFreed,\n\tflexTreeSlot,\n\tgetSchemaAndPolicy,\n} from \"./flex-tree/index.js\";\n\nexport { treeSchemaFromStoredSchema } from \"./storedToViewSchema.js\";\n\nexport { TreeCompressionStrategy } from \"./treeCompressionUtils.js\";\n\nexport { valueSchemaAllows } from \"./valueUtilities.js\";\n\nexport type {\n\tInsertableFlexNode,\n\tInsertableFlexField,\n\tAllowedTypesToFlexInsertableTree,\n\tApplyMultiplicity,\n\t// Internal\n\tCollectOptions,\n\tTypedFields,\n\tUnbrandedName,\n\tEmptyObject,\n} from \"./schema-aware/index.js\";\n\nexport { DetachedFieldIndexSummarizer } from \"./detachedFieldIndexSummarizer.js\";\n\nexport {\n\ttype SchemaChange,\n\tmakeSchemaChangeCodecs,\n\tEncodedSchemaChange,\n} from \"./schema-edits/index.js\";\n\nexport { makeMitigatedChangeFamily } from \"./mitigatedChangeFamily.js\";\n\nexport {\n\ttype MapTreeNode,\n\tisMapTreeNode,\n\tgetOrCreateMapTreeNode,\n\ttryGetMapTreeNode,\n} from \"./flex-map-tree/index.js\";\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/feature-libraries/index.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport {\n\tcreateDataBinderBuffering,\n\tcreateDataBinderDirect,\n\tcreateDataBinderInvalidating,\n\tcreateBinderOptions,\n\tcreateFlushableBinderOptions,\n\ttype DataBinder,\n\ttype BinderOptions,\n\ttype Flushable,\n\ttype FlushableBinderOptions,\n\ttype FlushableDataBinder,\n\ttype MatchPolicy,\n\ttype SubtreePolicy,\n\ttype BindSyntaxTree,\n\tindexSymbol,\n\ttype BindPolicy,\n\ttype BindTree,\n\ttype BindTreeDefault,\n\ttype DownPath,\n\ttype BindPath,\n\ttype PathStep,\n\tBindingType,\n\ttype BindingContextType,\n\ttype BindingContext,\n\ttype VisitorBindingContext,\n\ttype RemoveBindingContext,\n\ttype InsertBindingContext,\n\ttype BatchBindingContext,\n\ttype InvalidationBindingContext,\n\ttype OperationBinderEvents,\n\ttype InvalidationBinderEvents,\n\ttype CompareFunction,\n\ttype BinderEventsCompare,\n\ttype AnchorsCompare,\n\ttoDownPath,\n\tcomparePipeline,\n\tcompileSyntaxTree,\n} from \"./editableTreeBinder.js\";\nexport {\n\ttypeNameSymbol,\n\tvalueSymbol,\n\ttype ContextuallyTypedNodeDataObject,\n\ttype ContextuallyTypedNodeData,\n\ttype MarkedArrayLike,\n\tisContextuallyTypedNodeDataObject,\n\tgetFieldKind,\n\ttype ArrayLikeMut,\n\tcursorFromContextualData,\n\tcursorsFromContextualData,\n\ttype ContextuallyTypedFieldData,\n\tcursorForTypedData,\n\tcursorForTypedTreeData,\n\tcursorsForTypedFieldData,\n\tnormalizeNewFieldContent,\n\ttype NewFieldContent,\n\tgetPossibleTypes,\n\tgetAllowedTypes,\n} from \"./contextuallyTyped.js\";\n\nexport { allowsValue, assertAllowedValue, isTreeValue } from \"./valueUtilities.js\";\n\nexport type { FieldGenerator, TreeDataContext } from \"./fieldGenerator.js\";\n\nexport { ForestSummarizer } from \"./forest-summary/index.js\";\nexport {\n\tcursorForMapTreeField,\n\tcursorForMapTreeNode,\n\tmapTreeFromCursor,\n} from \"./mapTreeCursor.js\";\nexport { MemoizedIdRangeAllocator, type IdRange } from \"./memoizedIdRangeAllocator.js\";\nexport { buildForest } from \"./object-forest/index.js\";\nexport { SchemaSummarizer, encodeTreeSchema, makeSchemaCodec } from \"./schema-index/index.js\";\nexport {\n\tstackTreeNodeCursor,\n\ttype CursorAdapter,\n\tprefixPath,\n\tprefixFieldPath,\n\ttype CursorWithNode,\n\tstackTreeFieldCursor,\n} from \"./treeCursorUtils.js\";\nexport {\n\tcursorForJsonableTreeNode,\n\tcursorForJsonableTreeField,\n\tjsonableTreeFromCursor,\n\tjsonableTreeFromFieldCursor,\n\tjsonableTreeFromForest,\n} from \"./treeTextCursor.js\";\n\n// Split this up into separate import and export for compatibility with API-Extractor.\nimport * as SequenceField from \"./sequence-field/index.js\";\nexport { SequenceField };\n\nexport {\n\tisNeverField,\n\tModularEditBuilder,\n\ttype FieldEditDescription as EditDescription,\n\ttype FieldChangeHandler,\n\ttype FieldChangeRebaser,\n\ttype FieldEditor,\n\ttype FieldChangeMap,\n\ttype FieldChange,\n\ttype FieldChangeset,\n\ttype ToDelta,\n\ttype ModularChangeset,\n\tmakeModularChangeCodecFamily,\n\ttype NodeChangeComposer,\n\ttype NodeChangeInverter,\n\ttype NodeChangeRebaser,\n\ttype NodeChangePruner,\n\ttype CrossFieldManager,\n\tCrossFieldTarget,\n\tFlexFieldKind,\n\ttype FullSchemaPolicy,\n\tallowsRepoSuperset,\n\ttype GenericChangeset,\n\tgenericFieldKind,\n\ttype HasFieldChanges,\n\ttype NodeExistsConstraint,\n\tFieldKindWithEditor,\n\tModularChangeFamily,\n\ttype RelevantRemovedRootsFromChild,\n\tEncodedModularChangeset,\n\tupdateRefreshers,\n\ttype NodeId,\n\ttype FieldChangeEncodingContext,\n\ttype FieldKindConfiguration,\n\ttype FieldKindConfigurationEntry,\n\tgetAllowedContentIncompatibilities,\n} from \"./modular-schema/index.js\";\n\nexport {\n\ttype FlexTreeNodeSchema,\n\ttype FlexAllowedTypes,\n\tFlexFieldSchema,\n\ttype FlexTreeSchema,\n\tAny,\n\ttype SchemaLibraryData,\n\ttype LazyTreeNodeSchema,\n\tViewSchema,\n\ttype SchemaLintConfiguration,\n\tFlexFieldNodeSchema,\n\tLeafNodeSchema,\n\tFlexMapNodeSchema,\n\tFlexObjectNodeSchema,\n\tschemaIsFieldNode,\n\tschemaIsLeaf,\n\tschemaIsMap,\n\tschemaIsObjectNode,\n\ttype Unenforced,\n\ttype AllowedTypeSet,\n\tmarkEager,\n\ttype FlexMapFieldSchema,\n\ttype SchemaCollection,\n\tTreeNodeSchemaBase,\n\ttype LazyItem,\n\ttype FlexListToUnion,\n\ttype ExtractItemType,\n\tisLazy,\n\ttype NormalizeObjectNodeFields,\n\ttype NormalizeField as NormalizeFieldSchema,\n\ttype FlexObjectNodeFields,\n\tintoStoredSchema,\n\tintoStoredSchemaCollection,\n\ttype NormalizeLazyItem,\n\ttype FlexList,\n} from \"./typed-schema/index.js\";\n\nexport {\n\tSchemaBuilderBase,\n\ttype SchemaLibrary,\n\ttype FlexImplicitFieldSchema,\n\ttype NormalizeField,\n\ttype FlexImplicitAllowedTypes,\n\ttype NormalizeAllowedTypes,\n\ttype SchemaBuilderOptions,\n\tnormalizeAllowedTypes,\n\tnormalizeField,\n} from \"./schemaBuilderBase.js\";\nexport { SchemaBuilderInternal } from \"./schemaBuilder.js\";\n\nexport { mapRootChanges } from \"./deltaUtils.js\";\n\nexport {\n\ttype TreeChunk,\n\tchunkTree,\n\tchunkFieldSingle,\n\tbuildChunkedForest,\n\tdefaultChunkPolicy,\n\ttype FieldBatch,\n\ttype FieldBatchCodec,\n\tmakeTreeChunker,\n\tmakeFieldBatchCodec,\n\ttype FieldBatchEncodingContext,\n} from \"./chunked-forest/index.js\";\n\nexport {\n\tcompareLocalNodeKeys,\n\tcreateNodeKeyManager,\n\tisStableNodeKey,\n\ttype LocalNodeKey,\n\tMockNodeKeyManager,\n\ttype NodeKeyManager,\n\tnodeKeyTreeIdentifier,\n\ttype StableNodeKey,\n} from \"./node-key/index.js\";\n\nexport {\n\tFieldKinds,\n\ttype Required,\n\ttype Optional,\n\ttype Sequence,\n\ttype Identifier,\n\ttype Forbidden,\n\ttype DefaultChangeset,\n\tDefaultChangeFamily,\n\tDefaultEditBuilder,\n\ttype IDefaultEditBuilder,\n\ttype ValueFieldEditBuilder,\n\ttype OptionalFieldEditBuilder,\n\ttype SequenceFieldEditBuilder,\n\tdefaultSchemaPolicy,\n\tfieldKinds,\n\tfieldKindConfigurations,\n\tintoDelta,\n\trelevantRemovedRoots,\n\tSchemaValidationErrors,\n\tisNodeInSchema,\n} from \"./default-schema/index.js\";\n\nexport {\n\ttype AssignableFieldKinds,\n\ttype FlexTreeFieldNode,\n\ttype FlexibleFieldContent,\n\ttype FlexibleNodeContent,\n\ttype FlexTreeLeafNode,\n\ttype FlexTreeMapNode,\n\ttype FlexTreeOptionalField,\n\ttype FlexTreeRequiredField,\n\ttype FlexTreeSequenceField,\n\tSkip,\n\ttype FlexTreeObjectNode,\n\ttype FlexTreeObjectNodeTyped,\n\ttype FlexTreeContext,\n\ttype FlexTreeTypedField,\n\ttype FlexTreeTypedNode,\n\ttype FlexTreeTypedNodeUnion,\n\ttype FlexTreeEntity,\n\ttype FlexTreeField,\n\ttype FlexTreeNode,\n\tgetTreeContext,\n\ttype CheckTypesOverlap,\n\tTreeStatus,\n\tContext,\n\ttype FlexTreeNodeEvents,\n\ttype FlexTreeUnknownUnboxed,\n\tisFlexTreeNode,\n\tContextSlot,\n\t// Internal\n\ttype FlexTreeTypedFieldInner,\n\ttype FlexTreeUnboxFieldInner,\n\ttype FlexTreeObjectNodeFields,\n\ttype FlexTreeUnboxField,\n\ttype FlexTreeUnboxNode,\n\ttype FlexTreeUnboxNodeUnion,\n\ttype IsArrayOfOne,\n\ttype FlexibleNodeSubSequence,\n\tflexTreeMarker,\n\tFlexTreeEntityKind,\n\ttype PropertyNameFromFieldKey,\n\ttype ReservedObjectNodeFieldPropertyNames,\n\ttype ReservedObjectNodeFieldPropertyNamePrefixes,\n\treservedObjectNodeFieldPropertyNames,\n\treservedObjectNodeFieldPropertyNamePrefixes,\n\ttype FlexTreeObjectNodeFieldsInner,\n\tassertFlexTreeEntityNotFreed,\n\tflexTreeSlot,\n\tgetSchemaAndPolicy,\n\tisFreedSymbol,\n\tLazyEntity,\n\ttreeStatusFromAnchorCache,\n} from \"./flex-tree/index.js\";\n\nexport { treeSchemaFromStoredSchema } from \"./storedToViewSchema.js\";\n\nexport { TreeCompressionStrategy } from \"./treeCompressionUtils.js\";\n\nexport { valueSchemaAllows } from \"./valueUtilities.js\";\n\nexport type {\n\tInsertableFlexNode,\n\tInsertableFlexField,\n\tAllowedTypesToFlexInsertableTree,\n\tApplyMultiplicity,\n\t// Internal\n\tCollectOptions,\n\tTypedFields,\n\tUnbrandedName,\n\tEmptyObject,\n} from \"./schema-aware/index.js\";\n\nexport { DetachedFieldIndexSummarizer } from \"./detachedFieldIndexSummarizer.js\";\n\nexport {\n\ttype SchemaChange,\n\tmakeSchemaChangeCodecs,\n\tEncodedSchemaChange,\n} from \"./schema-edits/index.js\";\n\nexport { makeMitigatedChangeFamily } from \"./mitigatedChangeFamily.js\";\n\nexport {\n\ttype MapTreeNode,\n\tisMapTreeNode,\n\tgetOrCreateMapTreeNode,\n\ttryGetMapTreeNode,\n} from \"./flex-map-tree/index.js\";\n"]}
|
|
@@ -41,7 +41,7 @@ export function getAllowedContentIncompatibilities(view, stored) {
|
|
|
41
41
|
}
|
|
42
42
|
else {
|
|
43
43
|
const storedNodeSchema = stored.nodeSchema.get(key);
|
|
44
|
-
assert(storedNodeSchema !== undefined,
|
|
44
|
+
assert(storedNodeSchema !== undefined, 0x9be /* The storedNodeSchema in stored.nodeSchema should not be undefined */);
|
|
45
45
|
if (storedNodeSchema instanceof MapNodeStoredSchema) {
|
|
46
46
|
incompatibilities.push({
|
|
47
47
|
identifier: key,
|
|
@@ -84,7 +84,7 @@ export function getAllowedContentIncompatibilities(view, stored) {
|
|
|
84
84
|
}
|
|
85
85
|
else {
|
|
86
86
|
const storedNodeSchema = stored.nodeSchema.get(key);
|
|
87
|
-
assert(storedNodeSchema !== undefined,
|
|
87
|
+
assert(storedNodeSchema !== undefined, 0x9bf /* The storedNodeSchema in stored.nodeSchema should not be undefined */);
|
|
88
88
|
if (storedNodeSchema instanceof ObjectNodeStoredSchema) {
|
|
89
89
|
incompatibilities.push({
|
|
90
90
|
identifier: key,
|
|
@@ -120,7 +120,7 @@ export function getAllowedContentIncompatibilities(view, stored) {
|
|
|
120
120
|
}
|
|
121
121
|
else {
|
|
122
122
|
const storedNodeSchema = stored.nodeSchema.get(key);
|
|
123
|
-
assert(storedNodeSchema !== undefined,
|
|
123
|
+
assert(storedNodeSchema !== undefined, 0x9c0 /* The storedNodeSchema in stored.nodeSchema should not be undefined */);
|
|
124
124
|
if (storedNodeSchema instanceof MapNodeStoredSchema) {
|
|
125
125
|
incompatibilities.push({
|
|
126
126
|
identifier: key,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discrepancies.js","sourceRoot":"","sources":["../../../src/feature-libraries/modular-schema/discrepancies.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\n\nimport {\n\ttype FieldKey,\n\ttype FieldKindIdentifier,\n\tLeafNodeStoredSchema,\n\tMapNodeStoredSchema,\n\tObjectNodeStoredSchema,\n\ttype TreeFieldStoredSchema,\n\ttype TreeNodeSchemaIdentifier,\n\ttype TreeStoredSchema,\n\ttype TreeTypeSet,\n\ttype ValueSchema,\n} from \"../../core/index.js\";\n\n/**\n * @remarks\n *\n * 1. FieldIncompatibility\n *\n * `FieldIncompatibility` represents the differences between two `TreeFieldStoredSchema` objects. It consists of\n * three types of incompatibilities:\n *\n * - FieldKindIncompatibility: Indicates the differences in `FieldKindIdentifier` between two `TreeFieldStoredSchema`\n * objects (e.g., optional, required, sequence, etc.).\n * - AllowedTypesIncompatibility: Indicates the differences in the allowed child types between the two schemas.\n * - ValueSchemaIncompatibility: Specifically indicates the differences in the `ValueSchema` of two\n * `LeafNodeStoredSchema` objects.\n *\n * 2. NodeIncompatibility\n *\n * `NodeIncompatibility` represents the differences between two `TreeNodeStoredSchema` objects and includes:\n *\n * - NodeKindIncompatibility: Indicates the differences in the types of `TreeNodeStoredSchema` (currently supports\n * `ObjectNodeStoredSchema`, `MapNodeStoredSchema`, and `LeafNodeStoredSchema`).\n * - NodeFieldsIncompatibility: Indicates the `FieldIncompatibility` of `TreeFieldStoredSchema` within two\n * `TreeNodeStoredSchema`. It includes an array of `FieldIncompatibility` instances in the `differences` field.\n *\n * When comparing two nodes for compatibility, it only makes sense to compare their fields if the nodes are of\n * the same kind (map, object, leaf).\n *\n * 3. Incompatibility\n *\n * Incompatibility consists of both `NodeIncompatibility` and `FieldIncompatibility`, representing any kind of\n * schema differences. See {@link getAllowedContentIncompatibilities} for more details about how we process it\n * and the ordering.\n */\nexport type Incompatibility = FieldIncompatibility | NodeIncompatibility;\n\nexport type NodeIncompatibility = NodeKindIncompatibility | NodeFieldsIncompatibility;\n\nexport type FieldIncompatibility =\n\t| AllowedTypeIncompatibility\n\t| FieldKindIncompatibility\n\t| ValueSchemaIncompatibility;\n\nexport interface AllowedTypeIncompatibility {\n\tidentifier: string | undefined; // undefined indicates root field schema\n\tmismatch: \"allowedTypes\";\n\t/**\n\t * List of allowed type identifiers in viewed schema\n\t */\n\tview: string[];\n\t/**\n\t * List of allowed type identifiers in stored schema\n\t */\n\tstored: string[];\n}\n\nexport interface FieldKindIncompatibility {\n\tidentifier: string | undefined; // undefined indicates root field schema\n\tmismatch: \"fieldKind\";\n\tview: FieldKindIdentifier | undefined;\n\tstored: FieldKindIdentifier | undefined;\n}\n\nexport interface ValueSchemaIncompatibility {\n\tidentifier: string;\n\tmismatch: \"valueSchema\";\n\tview: ValueSchema | undefined;\n\tstored: ValueSchema | undefined;\n}\n\nexport interface NodeKindIncompatibility {\n\tidentifier: string;\n\tmismatch: \"nodeKind\";\n\tview: SchemaFactoryNodeKind | undefined;\n\tstored: SchemaFactoryNodeKind | undefined;\n}\n\nexport interface NodeFieldsIncompatibility {\n\tidentifier: string;\n\tmismatch: \"fields\";\n\tdifferences: FieldIncompatibility[];\n}\n\ntype SchemaFactoryNodeKind = \"object\" | \"leaf\" | \"map\";\n\n/**\n * @remarks\n *\n * The workflow for finding schema incompatibilities:\n * 1. Compare the two root schemas to identify any `FieldIncompatibility`.\n *\n * 2. For each node schema in the `view`:\n * - Verify if the node schema exists in the stored. If it does, ensure that the `SchemaFactoryNodeKind` are\n * consistent. Otherwise this difference is treated as `NodeKindIncompatibility`\n * - If a node schema with the same identifier exists in both view and stored, and their `SchemaFactoryNodeKind`\n * are consistent, perform a exhaustive validation to identify all `FieldIncompatibility`.\n *\n * 3. For each node schema in the stored, verify if it exists in the view. The overlapping parts were already\n * addressed in the previous step.\n *\n * @returns the discrepancies between two TreeStoredSchema objects\n */\nexport function getAllowedContentIncompatibilities(\n\tview: TreeStoredSchema,\n\tstored: TreeStoredSchema,\n): Incompatibility[] {\n\tconst incompatibilities: Incompatibility[] = [];\n\n\t// check root schema discrepancies\n\tincompatibilities.push(\n\t\t...trackFieldDiscrepancies(view.rootFieldSchema, stored.rootFieldSchema),\n\t);\n\n\t// Verify the existence and type of a node schema given its identifier (key), then determine if\n\t// an exhaustive search is necessary.\n\tconst viewNodeKeys = new Set<TreeNodeSchemaIdentifier>();\n\tfor (const [key, viewNodeSchema] of view.nodeSchema) {\n\t\tviewNodeKeys.add(key);\n\n\t\tif (viewNodeSchema instanceof ObjectNodeStoredSchema) {\n\t\t\tif (!stored.nodeSchema.has(key)) {\n\t\t\t\tincompatibilities.push({\n\t\t\t\t\tidentifier: key,\n\t\t\t\t\tmismatch: \"nodeKind\",\n\t\t\t\t\tview: \"object\",\n\t\t\t\t\tstored: undefined,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst storedNodeSchema = stored.nodeSchema.get(key);\n\t\t\t\tassert(\n\t\t\t\t\tstoredNodeSchema !== undefined,\n\t\t\t\t\t\"The storedNodeSchema in stored.nodeSchema should not be undefined\",\n\t\t\t\t);\n\t\t\t\tif (storedNodeSchema instanceof MapNodeStoredSchema) {\n\t\t\t\t\tincompatibilities.push({\n\t\t\t\t\t\tidentifier: key,\n\t\t\t\t\t\tmismatch: \"nodeKind\",\n\t\t\t\t\t\tview: \"object\",\n\t\t\t\t\t\tstored: \"map\",\n\t\t\t\t\t} satisfies NodeKindIncompatibility);\n\t\t\t\t} else if (storedNodeSchema instanceof LeafNodeStoredSchema) {\n\t\t\t\t\tincompatibilities.push({\n\t\t\t\t\t\tidentifier: key,\n\t\t\t\t\t\tmismatch: \"nodeKind\",\n\t\t\t\t\t\tview: \"object\",\n\t\t\t\t\t\tstored: \"leaf\",\n\t\t\t\t\t} satisfies NodeKindIncompatibility);\n\t\t\t\t} else if (storedNodeSchema instanceof ObjectNodeStoredSchema) {\n\t\t\t\t\tconst differences = trackObjectNodeDiscrepancies(viewNodeSchema, storedNodeSchema);\n\t\t\t\t\tif (differences.length > 0) {\n\t\t\t\t\t\tincompatibilities.push({\n\t\t\t\t\t\t\tidentifier: key,\n\t\t\t\t\t\t\tmismatch: \"fields\",\n\t\t\t\t\t\t\tdifferences,\n\t\t\t\t\t\t} satisfies NodeFieldsIncompatibility);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthrowUnsupportedNodeType(storedNodeSchema.constructor.name);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (viewNodeSchema instanceof MapNodeStoredSchema) {\n\t\t\tif (!stored.nodeSchema.has(key)) {\n\t\t\t\tincompatibilities.push({\n\t\t\t\t\tidentifier: key,\n\t\t\t\t\tmismatch: \"nodeKind\",\n\t\t\t\t\tview: \"map\",\n\t\t\t\t\tstored: undefined,\n\t\t\t\t} satisfies NodeKindIncompatibility);\n\t\t\t} else {\n\t\t\t\tconst storedNodeSchema = stored.nodeSchema.get(key);\n\t\t\t\tassert(\n\t\t\t\t\tstoredNodeSchema !== undefined,\n\t\t\t\t\t\"The storedNodeSchema in stored.nodeSchema should not be undefined\",\n\t\t\t\t);\n\t\t\t\tif (storedNodeSchema instanceof ObjectNodeStoredSchema) {\n\t\t\t\t\tincompatibilities.push({\n\t\t\t\t\t\tidentifier: key,\n\t\t\t\t\t\tmismatch: \"nodeKind\",\n\t\t\t\t\t\tview: \"map\",\n\t\t\t\t\t\tstored: \"object\",\n\t\t\t\t\t} satisfies NodeKindIncompatibility);\n\t\t\t\t} else if (storedNodeSchema instanceof LeafNodeStoredSchema) {\n\t\t\t\t\tincompatibilities.push({\n\t\t\t\t\t\tidentifier: key,\n\t\t\t\t\t\tmismatch: \"nodeKind\",\n\t\t\t\t\t\tview: \"map\",\n\t\t\t\t\t\tstored: \"leaf\",\n\t\t\t\t\t} satisfies NodeKindIncompatibility);\n\t\t\t\t} else if (storedNodeSchema instanceof MapNodeStoredSchema) {\n\t\t\t\t\tincompatibilities.push(\n\t\t\t\t\t\t...trackFieldDiscrepancies(\n\t\t\t\t\t\t\tviewNodeSchema.mapFields,\n\t\t\t\t\t\t\tstoredNodeSchema.mapFields,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthrowUnsupportedNodeType(storedNodeSchema.constructor.name);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (viewNodeSchema instanceof LeafNodeStoredSchema) {\n\t\t\tif (!stored.nodeSchema.has(key)) {\n\t\t\t\tincompatibilities.push({\n\t\t\t\t\tidentifier: key,\n\t\t\t\t\tmismatch: \"nodeKind\",\n\t\t\t\t\tview: \"leaf\",\n\t\t\t\t\tstored: undefined,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst storedNodeSchema = stored.nodeSchema.get(key);\n\t\t\t\tassert(\n\t\t\t\t\tstoredNodeSchema !== undefined,\n\t\t\t\t\t\"The storedNodeSchema in stored.nodeSchema should not be undefined\",\n\t\t\t\t);\n\t\t\t\tif (storedNodeSchema instanceof MapNodeStoredSchema) {\n\t\t\t\t\tincompatibilities.push({\n\t\t\t\t\t\tidentifier: key,\n\t\t\t\t\t\tmismatch: \"nodeKind\",\n\t\t\t\t\t\tview: \"leaf\",\n\t\t\t\t\t\tstored: \"map\",\n\t\t\t\t\t} satisfies NodeKindIncompatibility);\n\t\t\t\t} else if (storedNodeSchema instanceof ObjectNodeStoredSchema) {\n\t\t\t\t\tincompatibilities.push({\n\t\t\t\t\t\tidentifier: key,\n\t\t\t\t\t\tmismatch: \"nodeKind\",\n\t\t\t\t\t\tview: \"leaf\",\n\t\t\t\t\t\tstored: \"object\",\n\t\t\t\t\t} satisfies NodeKindIncompatibility);\n\t\t\t\t} else if (storedNodeSchema instanceof LeafNodeStoredSchema) {\n\t\t\t\t\tif (viewNodeSchema.leafValue !== storedNodeSchema.leafValue) {\n\t\t\t\t\t\tincompatibilities.push({\n\t\t\t\t\t\t\tidentifier: key,\n\t\t\t\t\t\t\tmismatch: \"valueSchema\",\n\t\t\t\t\t\t\tview: viewNodeSchema.leafValue,\n\t\t\t\t\t\t\tstored: storedNodeSchema.leafValue,\n\t\t\t\t\t\t} satisfies ValueSchemaIncompatibility);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthrowUnsupportedNodeType(storedNodeSchema.constructor.name);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrowUnsupportedNodeType(viewNodeSchema.constructor.name);\n\t\t}\n\t}\n\n\tfor (const [key, storedNodeSchema] of stored.nodeSchema) {\n\t\tif (!viewNodeKeys.has(key)) {\n\t\t\tincompatibilities.push({\n\t\t\t\tidentifier: key,\n\t\t\t\tmismatch: \"nodeKind\",\n\t\t\t\tview: undefined,\n\t\t\t\tstored:\n\t\t\t\t\tstoredNodeSchema instanceof MapNodeStoredSchema\n\t\t\t\t\t\t? \"map\"\n\t\t\t\t\t\t: storedNodeSchema instanceof ObjectNodeStoredSchema\n\t\t\t\t\t\t\t? \"object\"\n\t\t\t\t\t\t\t: \"leaf\",\n\t\t\t} satisfies NodeKindIncompatibility);\n\t\t}\n\t}\n\n\treturn incompatibilities;\n}\n\n/**\n * The function to track the discrepancies between two field stored schemas.\n *\n * @param keyOrRoot - If the key is missing, it indicates that this is the root field schema.\n */\nfunction trackFieldDiscrepancies(\n\tview: TreeFieldStoredSchema,\n\tstored: TreeFieldStoredSchema,\n\tkeyOrRoot?: string,\n): FieldIncompatibility[] {\n\tconst differences: FieldIncompatibility[] = [];\n\n\t// Only track the intersection of the two sets.\n\tconst findSetDiscrepancies = (\n\t\ta: TreeTypeSet,\n\t\tb: TreeTypeSet,\n\t): [TreeNodeSchemaIdentifier[], TreeNodeSchemaIdentifier[]] => {\n\t\tif (a === undefined && b === undefined) {\n\t\t\treturn [[], []];\n\t\t}\n\n\t\tif (a !== undefined && b !== undefined) {\n\t\t\tconst aDiff = [...a].filter((value) => !b.has(value));\n\t\t\tconst bDiff = [...b].filter((value) => !a.has(value));\n\t\t\treturn [aDiff, bDiff];\n\t\t}\n\n\t\tif (a !== undefined) {\n\t\t\treturn [[...a], []];\n\t\t}\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\treturn [[], [...b!]];\n\t};\n\n\tconst allowedTypesDiscrepancies = findSetDiscrepancies(view.types, stored.types);\n\tif (allowedTypesDiscrepancies[0].length > 0 || allowedTypesDiscrepancies[1].length > 0) {\n\t\tdifferences.push({\n\t\t\tidentifier: keyOrRoot,\n\t\t\tmismatch: \"allowedTypes\",\n\t\t\tview: allowedTypesDiscrepancies[0],\n\t\t\tstored: allowedTypesDiscrepancies[1],\n\t\t} satisfies AllowedTypeIncompatibility);\n\t}\n\n\tif (view.kind !== stored.kind) {\n\t\tdifferences.push({\n\t\t\tidentifier: keyOrRoot,\n\t\t\tmismatch: \"fieldKind\",\n\t\t\tview: view.kind,\n\t\t\tstored: stored.kind,\n\t\t} satisfies FieldKindIncompatibility);\n\t}\n\n\treturn differences;\n}\n\nfunction trackObjectNodeDiscrepancies(\n\tview: ObjectNodeStoredSchema,\n\tstored: ObjectNodeStoredSchema,\n): FieldIncompatibility[] {\n\tconst differences: FieldIncompatibility[] = [];\n\tconst viewFieldKeys = new Set<FieldKey>();\n\t/**\n\t * Similar to the logic used for tracking discrepancies between two node schemas, we will identify\n\t * three types of differences:\n\t * 1. Fields that exist in the view schema but not in the stored schema.\n\t * 2. Fields that exist in both schemas but have different contents.\n\t * 3. Fields that exist in the stored schema but not in the view schema.\n\t *\n\t * First, the view schema is iterated to track the first two types of differences.\n\t * Then, the stored schema is iterated to find the third type.\n\t */\n\n\tfor (const [fieldKey, fieldStoredSchema] of view.objectNodeFields) {\n\t\tviewFieldKeys.add(fieldKey);\n\t\tif (!stored.objectNodeFields.has(fieldKey)) {\n\t\t\tdifferences.push({\n\t\t\t\tidentifier: fieldKey,\n\t\t\t\tmismatch: \"fieldKind\",\n\t\t\t\tview: fieldStoredSchema.kind,\n\t\t\t\tstored: undefined,\n\t\t\t} satisfies FieldKindIncompatibility);\n\t\t} else {\n\t\t\tdifferences.push(\n\t\t\t\t...trackFieldDiscrepancies(\n\t\t\t\t\tview.objectNodeFields.get(fieldKey) as TreeFieldStoredSchema,\n\t\t\t\t\tstored.objectNodeFields.get(fieldKey) as TreeFieldStoredSchema,\n\t\t\t\t\tfieldKey,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t}\n\n\tfor (const [fieldKey, fieldStoredSchema] of stored.objectNodeFields) {\n\t\tif (viewFieldKeys.has(fieldKey)) {\n\t\t\tcontinue;\n\t\t}\n\t\tdifferences.push({\n\t\t\tidentifier: fieldKey,\n\t\t\tmismatch: \"fieldKind\",\n\t\t\tview: undefined,\n\t\t\tstored: fieldStoredSchema.kind,\n\t\t} satisfies FieldKindIncompatibility);\n\t}\n\n\treturn differences;\n}\n\nfunction throwUnsupportedNodeType(type: string): never {\n\tthrow new TypeError(`Unsupported node stored schema type: ${type}`);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"discrepancies.js","sourceRoot":"","sources":["../../../src/feature-libraries/modular-schema/discrepancies.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\n\nimport {\n\ttype FieldKey,\n\ttype FieldKindIdentifier,\n\tLeafNodeStoredSchema,\n\tMapNodeStoredSchema,\n\tObjectNodeStoredSchema,\n\ttype TreeFieldStoredSchema,\n\ttype TreeNodeSchemaIdentifier,\n\ttype TreeStoredSchema,\n\ttype TreeTypeSet,\n\ttype ValueSchema,\n} from \"../../core/index.js\";\n\n/**\n * @remarks\n *\n * 1. FieldIncompatibility\n *\n * `FieldIncompatibility` represents the differences between two `TreeFieldStoredSchema` objects. It consists of\n * three types of incompatibilities:\n *\n * - FieldKindIncompatibility: Indicates the differences in `FieldKindIdentifier` between two `TreeFieldStoredSchema`\n * objects (e.g., optional, required, sequence, etc.).\n * - AllowedTypesIncompatibility: Indicates the differences in the allowed child types between the two schemas.\n * - ValueSchemaIncompatibility: Specifically indicates the differences in the `ValueSchema` of two\n * `LeafNodeStoredSchema` objects.\n *\n * 2. NodeIncompatibility\n *\n * `NodeIncompatibility` represents the differences between two `TreeNodeStoredSchema` objects and includes:\n *\n * - NodeKindIncompatibility: Indicates the differences in the types of `TreeNodeStoredSchema` (currently supports\n * `ObjectNodeStoredSchema`, `MapNodeStoredSchema`, and `LeafNodeStoredSchema`).\n * - NodeFieldsIncompatibility: Indicates the `FieldIncompatibility` of `TreeFieldStoredSchema` within two\n * `TreeNodeStoredSchema`. It includes an array of `FieldIncompatibility` instances in the `differences` field.\n *\n * When comparing two nodes for compatibility, it only makes sense to compare their fields if the nodes are of\n * the same kind (map, object, leaf).\n *\n * 3. Incompatibility\n *\n * Incompatibility consists of both `NodeIncompatibility` and `FieldIncompatibility`, representing any kind of\n * schema differences. See {@link getAllowedContentIncompatibilities} for more details about how we process it\n * and the ordering.\n */\nexport type Incompatibility = FieldIncompatibility | NodeIncompatibility;\n\nexport type NodeIncompatibility = NodeKindIncompatibility | NodeFieldsIncompatibility;\n\nexport type FieldIncompatibility =\n\t| AllowedTypeIncompatibility\n\t| FieldKindIncompatibility\n\t| ValueSchemaIncompatibility;\n\nexport interface AllowedTypeIncompatibility {\n\tidentifier: string | undefined; // undefined indicates root field schema\n\tmismatch: \"allowedTypes\";\n\t/**\n\t * List of allowed type identifiers in viewed schema\n\t */\n\tview: string[];\n\t/**\n\t * List of allowed type identifiers in stored schema\n\t */\n\tstored: string[];\n}\n\nexport interface FieldKindIncompatibility {\n\tidentifier: string | undefined; // undefined indicates root field schema\n\tmismatch: \"fieldKind\";\n\tview: FieldKindIdentifier | undefined;\n\tstored: FieldKindIdentifier | undefined;\n}\n\nexport interface ValueSchemaIncompatibility {\n\tidentifier: string;\n\tmismatch: \"valueSchema\";\n\tview: ValueSchema | undefined;\n\tstored: ValueSchema | undefined;\n}\n\nexport interface NodeKindIncompatibility {\n\tidentifier: string;\n\tmismatch: \"nodeKind\";\n\tview: SchemaFactoryNodeKind | undefined;\n\tstored: SchemaFactoryNodeKind | undefined;\n}\n\nexport interface NodeFieldsIncompatibility {\n\tidentifier: string;\n\tmismatch: \"fields\";\n\tdifferences: FieldIncompatibility[];\n}\n\ntype SchemaFactoryNodeKind = \"object\" | \"leaf\" | \"map\";\n\n/**\n * @remarks\n *\n * The workflow for finding schema incompatibilities:\n * 1. Compare the two root schemas to identify any `FieldIncompatibility`.\n *\n * 2. For each node schema in the `view`:\n * - Verify if the node schema exists in the stored. If it does, ensure that the `SchemaFactoryNodeKind` are\n * consistent. Otherwise this difference is treated as `NodeKindIncompatibility`\n * - If a node schema with the same identifier exists in both view and stored, and their `SchemaFactoryNodeKind`\n * are consistent, perform a exhaustive validation to identify all `FieldIncompatibility`.\n *\n * 3. For each node schema in the stored, verify if it exists in the view. The overlapping parts were already\n * addressed in the previous step.\n *\n * @returns the discrepancies between two TreeStoredSchema objects\n */\nexport function getAllowedContentIncompatibilities(\n\tview: TreeStoredSchema,\n\tstored: TreeStoredSchema,\n): Incompatibility[] {\n\tconst incompatibilities: Incompatibility[] = [];\n\n\t// check root schema discrepancies\n\tincompatibilities.push(\n\t\t...trackFieldDiscrepancies(view.rootFieldSchema, stored.rootFieldSchema),\n\t);\n\n\t// Verify the existence and type of a node schema given its identifier (key), then determine if\n\t// an exhaustive search is necessary.\n\tconst viewNodeKeys = new Set<TreeNodeSchemaIdentifier>();\n\tfor (const [key, viewNodeSchema] of view.nodeSchema) {\n\t\tviewNodeKeys.add(key);\n\n\t\tif (viewNodeSchema instanceof ObjectNodeStoredSchema) {\n\t\t\tif (!stored.nodeSchema.has(key)) {\n\t\t\t\tincompatibilities.push({\n\t\t\t\t\tidentifier: key,\n\t\t\t\t\tmismatch: \"nodeKind\",\n\t\t\t\t\tview: \"object\",\n\t\t\t\t\tstored: undefined,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst storedNodeSchema = stored.nodeSchema.get(key);\n\t\t\t\tassert(\n\t\t\t\t\tstoredNodeSchema !== undefined,\n\t\t\t\t\t0x9be /* The storedNodeSchema in stored.nodeSchema should not be undefined */,\n\t\t\t\t);\n\t\t\t\tif (storedNodeSchema instanceof MapNodeStoredSchema) {\n\t\t\t\t\tincompatibilities.push({\n\t\t\t\t\t\tidentifier: key,\n\t\t\t\t\t\tmismatch: \"nodeKind\",\n\t\t\t\t\t\tview: \"object\",\n\t\t\t\t\t\tstored: \"map\",\n\t\t\t\t\t} satisfies NodeKindIncompatibility);\n\t\t\t\t} else if (storedNodeSchema instanceof LeafNodeStoredSchema) {\n\t\t\t\t\tincompatibilities.push({\n\t\t\t\t\t\tidentifier: key,\n\t\t\t\t\t\tmismatch: \"nodeKind\",\n\t\t\t\t\t\tview: \"object\",\n\t\t\t\t\t\tstored: \"leaf\",\n\t\t\t\t\t} satisfies NodeKindIncompatibility);\n\t\t\t\t} else if (storedNodeSchema instanceof ObjectNodeStoredSchema) {\n\t\t\t\t\tconst differences = trackObjectNodeDiscrepancies(viewNodeSchema, storedNodeSchema);\n\t\t\t\t\tif (differences.length > 0) {\n\t\t\t\t\t\tincompatibilities.push({\n\t\t\t\t\t\t\tidentifier: key,\n\t\t\t\t\t\t\tmismatch: \"fields\",\n\t\t\t\t\t\t\tdifferences,\n\t\t\t\t\t\t} satisfies NodeFieldsIncompatibility);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthrowUnsupportedNodeType(storedNodeSchema.constructor.name);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (viewNodeSchema instanceof MapNodeStoredSchema) {\n\t\t\tif (!stored.nodeSchema.has(key)) {\n\t\t\t\tincompatibilities.push({\n\t\t\t\t\tidentifier: key,\n\t\t\t\t\tmismatch: \"nodeKind\",\n\t\t\t\t\tview: \"map\",\n\t\t\t\t\tstored: undefined,\n\t\t\t\t} satisfies NodeKindIncompatibility);\n\t\t\t} else {\n\t\t\t\tconst storedNodeSchema = stored.nodeSchema.get(key);\n\t\t\t\tassert(\n\t\t\t\t\tstoredNodeSchema !== undefined,\n\t\t\t\t\t0x9bf /* The storedNodeSchema in stored.nodeSchema should not be undefined */,\n\t\t\t\t);\n\t\t\t\tif (storedNodeSchema instanceof ObjectNodeStoredSchema) {\n\t\t\t\t\tincompatibilities.push({\n\t\t\t\t\t\tidentifier: key,\n\t\t\t\t\t\tmismatch: \"nodeKind\",\n\t\t\t\t\t\tview: \"map\",\n\t\t\t\t\t\tstored: \"object\",\n\t\t\t\t\t} satisfies NodeKindIncompatibility);\n\t\t\t\t} else if (storedNodeSchema instanceof LeafNodeStoredSchema) {\n\t\t\t\t\tincompatibilities.push({\n\t\t\t\t\t\tidentifier: key,\n\t\t\t\t\t\tmismatch: \"nodeKind\",\n\t\t\t\t\t\tview: \"map\",\n\t\t\t\t\t\tstored: \"leaf\",\n\t\t\t\t\t} satisfies NodeKindIncompatibility);\n\t\t\t\t} else if (storedNodeSchema instanceof MapNodeStoredSchema) {\n\t\t\t\t\tincompatibilities.push(\n\t\t\t\t\t\t...trackFieldDiscrepancies(\n\t\t\t\t\t\t\tviewNodeSchema.mapFields,\n\t\t\t\t\t\t\tstoredNodeSchema.mapFields,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthrowUnsupportedNodeType(storedNodeSchema.constructor.name);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (viewNodeSchema instanceof LeafNodeStoredSchema) {\n\t\t\tif (!stored.nodeSchema.has(key)) {\n\t\t\t\tincompatibilities.push({\n\t\t\t\t\tidentifier: key,\n\t\t\t\t\tmismatch: \"nodeKind\",\n\t\t\t\t\tview: \"leaf\",\n\t\t\t\t\tstored: undefined,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst storedNodeSchema = stored.nodeSchema.get(key);\n\t\t\t\tassert(\n\t\t\t\t\tstoredNodeSchema !== undefined,\n\t\t\t\t\t0x9c0 /* The storedNodeSchema in stored.nodeSchema should not be undefined */,\n\t\t\t\t);\n\t\t\t\tif (storedNodeSchema instanceof MapNodeStoredSchema) {\n\t\t\t\t\tincompatibilities.push({\n\t\t\t\t\t\tidentifier: key,\n\t\t\t\t\t\tmismatch: \"nodeKind\",\n\t\t\t\t\t\tview: \"leaf\",\n\t\t\t\t\t\tstored: \"map\",\n\t\t\t\t\t} satisfies NodeKindIncompatibility);\n\t\t\t\t} else if (storedNodeSchema instanceof ObjectNodeStoredSchema) {\n\t\t\t\t\tincompatibilities.push({\n\t\t\t\t\t\tidentifier: key,\n\t\t\t\t\t\tmismatch: \"nodeKind\",\n\t\t\t\t\t\tview: \"leaf\",\n\t\t\t\t\t\tstored: \"object\",\n\t\t\t\t\t} satisfies NodeKindIncompatibility);\n\t\t\t\t} else if (storedNodeSchema instanceof LeafNodeStoredSchema) {\n\t\t\t\t\tif (viewNodeSchema.leafValue !== storedNodeSchema.leafValue) {\n\t\t\t\t\t\tincompatibilities.push({\n\t\t\t\t\t\t\tidentifier: key,\n\t\t\t\t\t\t\tmismatch: \"valueSchema\",\n\t\t\t\t\t\t\tview: viewNodeSchema.leafValue,\n\t\t\t\t\t\t\tstored: storedNodeSchema.leafValue,\n\t\t\t\t\t\t} satisfies ValueSchemaIncompatibility);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthrowUnsupportedNodeType(storedNodeSchema.constructor.name);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrowUnsupportedNodeType(viewNodeSchema.constructor.name);\n\t\t}\n\t}\n\n\tfor (const [key, storedNodeSchema] of stored.nodeSchema) {\n\t\tif (!viewNodeKeys.has(key)) {\n\t\t\tincompatibilities.push({\n\t\t\t\tidentifier: key,\n\t\t\t\tmismatch: \"nodeKind\",\n\t\t\t\tview: undefined,\n\t\t\t\tstored:\n\t\t\t\t\tstoredNodeSchema instanceof MapNodeStoredSchema\n\t\t\t\t\t\t? \"map\"\n\t\t\t\t\t\t: storedNodeSchema instanceof ObjectNodeStoredSchema\n\t\t\t\t\t\t\t? \"object\"\n\t\t\t\t\t\t\t: \"leaf\",\n\t\t\t} satisfies NodeKindIncompatibility);\n\t\t}\n\t}\n\n\treturn incompatibilities;\n}\n\n/**\n * The function to track the discrepancies between two field stored schemas.\n *\n * @param keyOrRoot - If the key is missing, it indicates that this is the root field schema.\n */\nfunction trackFieldDiscrepancies(\n\tview: TreeFieldStoredSchema,\n\tstored: TreeFieldStoredSchema,\n\tkeyOrRoot?: string,\n): FieldIncompatibility[] {\n\tconst differences: FieldIncompatibility[] = [];\n\n\t// Only track the intersection of the two sets.\n\tconst findSetDiscrepancies = (\n\t\ta: TreeTypeSet,\n\t\tb: TreeTypeSet,\n\t): [TreeNodeSchemaIdentifier[], TreeNodeSchemaIdentifier[]] => {\n\t\tif (a === undefined && b === undefined) {\n\t\t\treturn [[], []];\n\t\t}\n\n\t\tif (a !== undefined && b !== undefined) {\n\t\t\tconst aDiff = [...a].filter((value) => !b.has(value));\n\t\t\tconst bDiff = [...b].filter((value) => !a.has(value));\n\t\t\treturn [aDiff, bDiff];\n\t\t}\n\n\t\tif (a !== undefined) {\n\t\t\treturn [[...a], []];\n\t\t}\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\treturn [[], [...b!]];\n\t};\n\n\tconst allowedTypesDiscrepancies = findSetDiscrepancies(view.types, stored.types);\n\tif (allowedTypesDiscrepancies[0].length > 0 || allowedTypesDiscrepancies[1].length > 0) {\n\t\tdifferences.push({\n\t\t\tidentifier: keyOrRoot,\n\t\t\tmismatch: \"allowedTypes\",\n\t\t\tview: allowedTypesDiscrepancies[0],\n\t\t\tstored: allowedTypesDiscrepancies[1],\n\t\t} satisfies AllowedTypeIncompatibility);\n\t}\n\n\tif (view.kind !== stored.kind) {\n\t\tdifferences.push({\n\t\t\tidentifier: keyOrRoot,\n\t\t\tmismatch: \"fieldKind\",\n\t\t\tview: view.kind,\n\t\t\tstored: stored.kind,\n\t\t} satisfies FieldKindIncompatibility);\n\t}\n\n\treturn differences;\n}\n\nfunction trackObjectNodeDiscrepancies(\n\tview: ObjectNodeStoredSchema,\n\tstored: ObjectNodeStoredSchema,\n): FieldIncompatibility[] {\n\tconst differences: FieldIncompatibility[] = [];\n\tconst viewFieldKeys = new Set<FieldKey>();\n\t/**\n\t * Similar to the logic used for tracking discrepancies between two node schemas, we will identify\n\t * three types of differences:\n\t * 1. Fields that exist in the view schema but not in the stored schema.\n\t * 2. Fields that exist in both schemas but have different contents.\n\t * 3. Fields that exist in the stored schema but not in the view schema.\n\t *\n\t * First, the view schema is iterated to track the first two types of differences.\n\t * Then, the stored schema is iterated to find the third type.\n\t */\n\n\tfor (const [fieldKey, fieldStoredSchema] of view.objectNodeFields) {\n\t\tviewFieldKeys.add(fieldKey);\n\t\tif (!stored.objectNodeFields.has(fieldKey)) {\n\t\t\tdifferences.push({\n\t\t\t\tidentifier: fieldKey,\n\t\t\t\tmismatch: \"fieldKind\",\n\t\t\t\tview: fieldStoredSchema.kind,\n\t\t\t\tstored: undefined,\n\t\t\t} satisfies FieldKindIncompatibility);\n\t\t} else {\n\t\t\tdifferences.push(\n\t\t\t\t...trackFieldDiscrepancies(\n\t\t\t\t\tview.objectNodeFields.get(fieldKey) as TreeFieldStoredSchema,\n\t\t\t\t\tstored.objectNodeFields.get(fieldKey) as TreeFieldStoredSchema,\n\t\t\t\t\tfieldKey,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t}\n\n\tfor (const [fieldKey, fieldStoredSchema] of stored.objectNodeFields) {\n\t\tif (viewFieldKeys.has(fieldKey)) {\n\t\t\tcontinue;\n\t\t}\n\t\tdifferences.push({\n\t\t\tidentifier: fieldKey,\n\t\t\tmismatch: \"fieldKind\",\n\t\t\tview: undefined,\n\t\t\tstored: fieldStoredSchema.kind,\n\t\t} satisfies FieldKindIncompatibility);\n\t}\n\n\treturn differences;\n}\n\nfunction throwUnsupportedNodeType(type: string): never {\n\tthrow new TypeError(`Unsupported node stored schema type: ${type}`);\n}\n"]}
|
|
@@ -271,7 +271,7 @@ function getChangeHandler(fieldKinds, fieldKind) {
|
|
|
271
271
|
return genericFieldKind.changeHandler;
|
|
272
272
|
}
|
|
273
273
|
const handler = fieldKinds.get(fieldKind)?.kind.changeHandler;
|
|
274
|
-
assert(handler !== undefined,
|
|
274
|
+
assert(handler !== undefined, 0x9c1 /* Unknown field kind */);
|
|
275
275
|
return handler;
|
|
276
276
|
}
|
|
277
277
|
//# sourceMappingURL=modularChangeCodecs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modularChangeCodecs.js","sourceRoot":"","sources":["../../../src/feature-libraries/modular-schema/modularChangeCodecs.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport type { TAnySchema } from \"@sinclair/typebox\";\n\nimport {\n\ttype ICodecFamily,\n\ttype ICodecOptions,\n\ttype IJsonCodec,\n\ttype IMultiFormatCodec,\n\ttype SchemaValidationFunction,\n\tmakeCodecFamily,\n\twithSchemaValidation,\n} from \"../../codec/index.js\";\nimport type {\n\tChangeAtomIdMap,\n\tChangeEncodingContext,\n\tChangesetLocalId,\n\tEncodedRevisionTag,\n\tFieldKey,\n\tFieldKindIdentifier,\n\tITreeCursorSynchronous,\n\tRevisionInfo,\n\tRevisionTag,\n} from \"../../core/index.js\";\nimport {\n\ttype IdAllocator,\n\ttype JsonCompatibleReadOnly,\n\ttype Mutable,\n\tbrand,\n\tfail,\n\tidAllocatorFromMaxId,\n\tsetInNestedMap,\n\ttryGetFromNestedMap,\n} from \"../../util/index.js\";\nimport {\n\ttype FieldBatchCodec,\n\ttype TreeChunk,\n\tchunkFieldSingle,\n\tdefaultChunkPolicy,\n} from \"../chunked-forest/index.js\";\nimport { TreeCompressionStrategy } from \"../treeCompressionUtils.js\";\n\nimport type {\n\tFieldKindConfiguration,\n\tFieldKindConfigurationEntry,\n} from \"./fieldKindConfiguration.js\";\nimport { genericFieldKind } from \"./genericFieldKind.js\";\nimport {\n\ttype EncodedBuilds,\n\ttype EncodedBuildsArray,\n\ttype EncodedFieldChange,\n\ttype EncodedFieldChangeMap,\n\tEncodedModularChangeset,\n\ttype EncodedNodeChangeset,\n\ttype EncodedRevisionInfo,\n} from \"./modularChangeFormat.js\";\nimport type {\n\tFieldChangeMap,\n\tFieldChangeset,\n\tFieldId,\n\tModularChangeset,\n\tNodeChangeset,\n\tNodeId,\n} from \"./modularChangeTypes.js\";\nimport type { FieldChangeEncodingContext, FieldChangeHandler } from \"./fieldChangeHandler.js\";\nimport { newCrossFieldKeyTable } from \"./modularChangeFamily.js\";\n\nexport function makeModularChangeCodecFamily(\n\tfieldKindConfigurations: ReadonlyMap<number, FieldKindConfiguration>,\n\trevisionTagCodec: IJsonCodec<\n\t\tRevisionTag,\n\t\tEncodedRevisionTag,\n\t\tEncodedRevisionTag,\n\t\tChangeEncodingContext\n\t>,\n\tfieldsCodec: FieldBatchCodec,\n\t{ jsonValidator: validator }: ICodecOptions,\n\tchunkCompressionStrategy: TreeCompressionStrategy = TreeCompressionStrategy.Compressed,\n): ICodecFamily<ModularChangeset, ChangeEncodingContext> {\n\treturn makeCodecFamily(\n\t\tArray.from(fieldKindConfigurations.entries(), ([version, fieldKinds]) => [\n\t\t\tversion,\n\t\t\tmakeModularChangeCodec(\n\t\t\t\tfieldKinds,\n\t\t\t\trevisionTagCodec,\n\t\t\t\tfieldsCodec,\n\t\t\t\t{ jsonValidator: validator },\n\t\t\t\tchunkCompressionStrategy,\n\t\t\t),\n\t\t]),\n\t);\n}\n\ntype ModularChangeCodec = IJsonCodec<\n\tModularChangeset,\n\tEncodedModularChangeset,\n\tEncodedModularChangeset,\n\tChangeEncodingContext\n>;\n\ntype FieldCodec = IMultiFormatCodec<\n\tFieldChangeset,\n\tJsonCompatibleReadOnly,\n\tJsonCompatibleReadOnly,\n\tFieldChangeEncodingContext\n>;\n\nfunction makeModularChangeCodec(\n\tfieldKinds: FieldKindConfiguration,\n\trevisionTagCodec: IJsonCodec<\n\t\tRevisionTag,\n\t\tEncodedRevisionTag,\n\t\tEncodedRevisionTag,\n\t\tChangeEncodingContext\n\t>,\n\tfieldsCodec: FieldBatchCodec,\n\t{ jsonValidator: validator }: ICodecOptions,\n\tchunkCompressionStrategy: TreeCompressionStrategy = TreeCompressionStrategy.Compressed,\n): ModularChangeCodec {\n\t// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n\tconst getMapEntry = ({ kind, formatVersion }: FieldKindConfigurationEntry) => {\n\t\tconst codec = kind.changeHandler.codecsFactory(revisionTagCodec).resolve(formatVersion);\n\t\treturn {\n\t\t\tcodec,\n\t\t\tcompiledSchema: codec.json.encodedSchema\n\t\t\t\t? validator.compile(codec.json.encodedSchema)\n\t\t\t\t: undefined,\n\t\t};\n\t};\n\n\t/**\n\t * The codec version for the generic field kind.\n\t */\n\tconst genericFieldKindFormatVersion = 1;\n\tconst fieldChangesetCodecs: Map<\n\t\tFieldKindIdentifier,\n\t\t{\n\t\t\tcompiledSchema?: SchemaValidationFunction<TAnySchema>;\n\t\t\tcodec: FieldCodec;\n\t\t}\n\t> = new Map([\n\t\t[\n\t\t\tgenericFieldKind.identifier,\n\t\t\tgetMapEntry({ kind: genericFieldKind, formatVersion: genericFieldKindFormatVersion }),\n\t\t],\n\t]);\n\n\tfieldKinds.forEach((entry, identifier) => {\n\t\tfieldChangesetCodecs.set(identifier, getMapEntry(entry));\n\t});\n\n\tconst getFieldChangesetCodec = (\n\t\tfieldKind: FieldKindIdentifier,\n\t): {\n\t\tcompiledSchema?: SchemaValidationFunction<TAnySchema>;\n\t\tcodec: FieldCodec;\n\t} => {\n\t\tconst entry = fieldChangesetCodecs.get(fieldKind);\n\t\tassert(entry !== undefined, 0x5ea /* Tried to encode unsupported fieldKind */);\n\t\treturn entry;\n\t};\n\n\tfunction encodeFieldChangesForJson(\n\t\tchange: FieldChangeMap,\n\t\tcontext: ChangeEncodingContext,\n\t\tnodeChanges: ChangeAtomIdMap<NodeChangeset>,\n\t): EncodedFieldChangeMap {\n\t\tconst fieldContext: FieldChangeEncodingContext = {\n\t\t\tbaseContext: context,\n\n\t\t\tencodeNode: (nodeId: NodeId): EncodedNodeChangeset => {\n\t\t\t\tconst node = tryGetFromNestedMap(nodeChanges, nodeId.revision, nodeId.localId);\n\t\t\t\tassert(node !== undefined, 0x92e /* Unknown node ID */);\n\t\t\t\treturn encodeNodeChangesForJson(node, fieldContext);\n\t\t\t},\n\n\t\t\tdecodeNode: () => fail(\"Should not decode nodes during field encoding\"),\n\t\t};\n\n\t\treturn encodeFieldChangesForJsonI(change, fieldContext);\n\t}\n\n\tfunction encodeFieldChangesForJsonI(\n\t\tchange: FieldChangeMap,\n\t\tcontext: FieldChangeEncodingContext,\n\t): EncodedFieldChangeMap {\n\t\tconst encodedFields: EncodedFieldChangeMap = [];\n\n\t\tfor (const [field, fieldChange] of change) {\n\t\t\tconst { codec, compiledSchema } = getFieldChangesetCodec(fieldChange.fieldKind);\n\t\t\tconst encodedChange = codec.json.encode(fieldChange.change, context);\n\t\t\tif (compiledSchema !== undefined && !compiledSchema.check(encodedChange)) {\n\t\t\t\tfail(\"Encoded change didn't pass schema validation.\");\n\t\t\t}\n\n\t\t\tconst fieldKey: FieldKey = field;\n\t\t\tconst encodedField: EncodedFieldChange = {\n\t\t\t\tfieldKey,\n\t\t\t\tfieldKind: fieldChange.fieldKind,\n\t\t\t\tchange: encodedChange,\n\t\t\t};\n\n\t\t\tencodedFields.push(encodedField);\n\t\t}\n\n\t\treturn encodedFields;\n\t}\n\n\tfunction encodeNodeChangesForJson(\n\t\tchange: NodeChangeset,\n\t\tcontext: FieldChangeEncodingContext,\n\t): EncodedNodeChangeset {\n\t\tconst encodedChange: EncodedNodeChangeset = {};\n\t\tconst { fieldChanges, nodeExistsConstraint } = change;\n\n\t\tif (fieldChanges !== undefined) {\n\t\t\tencodedChange.fieldChanges = encodeFieldChangesForJsonI(fieldChanges, context);\n\t\t}\n\n\t\tif (nodeExistsConstraint !== undefined) {\n\t\t\tencodedChange.nodeExistsConstraint = nodeExistsConstraint;\n\t\t}\n\n\t\treturn encodedChange;\n\t}\n\n\tfunction decodeFieldChangesFromJson(\n\t\tencodedChange: EncodedFieldChangeMap,\n\t\tparentId: NodeId | undefined,\n\t\tdecoded: ModularChangeset,\n\t\tcontext: ChangeEncodingContext,\n\t\tidAllocator: IdAllocator,\n\t): FieldChangeMap {\n\t\tconst decodedFields: FieldChangeMap = new Map();\n\t\tfor (const field of encodedChange) {\n\t\t\tconst { codec, compiledSchema } = getFieldChangesetCodec(field.fieldKind);\n\t\t\tif (compiledSchema !== undefined && !compiledSchema.check(field.change)) {\n\t\t\t\tfail(\"Encoded change didn't pass schema validation.\");\n\t\t\t}\n\n\t\t\tconst fieldId: FieldId = {\n\t\t\t\tnodeId: parentId,\n\t\t\t\tfield: field.fieldKey,\n\t\t\t};\n\n\t\t\tconst fieldContext: FieldChangeEncodingContext = {\n\t\t\t\tbaseContext: context,\n\n\t\t\t\tencodeNode: () => fail(\"Should not encode nodes during field decoding\"),\n\n\t\t\t\tdecodeNode: (encodedNode: EncodedNodeChangeset): NodeId => {\n\t\t\t\t\tconst nodeId: NodeId = {\n\t\t\t\t\t\trevision: context.revision,\n\t\t\t\t\t\tlocalId: brand(idAllocator.allocate()),\n\t\t\t\t\t};\n\n\t\t\t\t\tconst node = decodeNodeChangesetFromJson(\n\t\t\t\t\t\tencodedNode,\n\t\t\t\t\t\tnodeId,\n\t\t\t\t\t\tdecoded,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\tidAllocator,\n\t\t\t\t\t);\n\n\t\t\t\t\tsetInNestedMap(decoded.nodeChanges, nodeId.revision, nodeId.localId, node);\n\t\t\t\t\tsetInNestedMap(decoded.nodeToParent, nodeId.revision, nodeId.localId, fieldId);\n\t\t\t\t\treturn nodeId;\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst fieldChangeset = codec.json.decode(field.change, fieldContext);\n\n\t\t\tconst crossFieldKeys = getChangeHandler(fieldKinds, field.fieldKind).getCrossFieldKeys(\n\t\t\t\tfieldChangeset,\n\t\t\t);\n\n\t\t\tfor (const crossFieldKey of crossFieldKeys) {\n\t\t\t\tdecoded.crossFieldKeys.set(crossFieldKey, fieldId);\n\t\t\t}\n\n\t\t\tconst fieldKey: FieldKey = brand<FieldKey>(field.fieldKey);\n\n\t\t\tdecodedFields.set(fieldKey, {\n\t\t\t\tfieldKind: field.fieldKind,\n\t\t\t\tchange: brand(fieldChangeset),\n\t\t\t});\n\t\t}\n\n\t\treturn decodedFields;\n\t}\n\n\tfunction decodeNodeChangesetFromJson(\n\t\tencodedChange: EncodedNodeChangeset,\n\t\tid: NodeId,\n\t\tdecoded: ModularChangeset,\n\t\tcontext: ChangeEncodingContext,\n\t\tidAllocator: IdAllocator,\n\t): NodeChangeset {\n\t\tconst decodedChange: NodeChangeset = {};\n\t\tconst { fieldChanges, nodeExistsConstraint } = encodedChange;\n\n\t\tif (fieldChanges !== undefined) {\n\t\t\tdecodedChange.fieldChanges = decodeFieldChangesFromJson(\n\t\t\t\tfieldChanges,\n\t\t\t\tid,\n\t\t\t\tdecoded,\n\t\t\t\tcontext,\n\t\t\t\tidAllocator,\n\t\t\t);\n\t\t}\n\n\t\tif (nodeExistsConstraint !== undefined) {\n\t\t\tdecodedChange.nodeExistsConstraint = nodeExistsConstraint;\n\t\t}\n\n\t\treturn decodedChange;\n\t}\n\n\tfunction encodeDetachedNodes(\n\t\tdetachedNodes: ChangeAtomIdMap<TreeChunk> | undefined,\n\t\tcontext: ChangeEncodingContext,\n\t): EncodedBuilds | undefined {\n\t\tif (detachedNodes === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst treesToEncode: ITreeCursorSynchronous[] = [];\n\t\tconst buildsArray: EncodedBuildsArray = Array.from(detachedNodes.entries()).map(\n\t\t\t([r, commitBuilds]) => {\n\t\t\t\tconst commitBuildsEncoded: [ChangesetLocalId, number][] = Array.from(\n\t\t\t\t\tcommitBuilds.entries(),\n\t\t\t\t).map(([i, t]) => {\n\t\t\t\t\ttreesToEncode.push(t.cursor());\n\t\t\t\t\tconst treeIndexInBatch = treesToEncode.length - 1;\n\t\t\t\t\treturn [i, treeIndexInBatch];\n\t\t\t\t});\n\t\t\t\t// `undefined` does not round-trip through JSON strings, so it needs special handling.\n\t\t\t\t// Most entries will have an undefined revision due to the revision information being inherited from the `ModularChangeset`.\n\t\t\t\t// We therefore optimize for the common case by omitting the revision when it is undefined.\n\t\t\t\treturn r === undefined || r === context.revision\n\t\t\t\t\t? [commitBuildsEncoded]\n\t\t\t\t\t: [commitBuildsEncoded, revisionTagCodec.encode(r, context)];\n\t\t\t},\n\t\t);\n\t\treturn buildsArray.length === 0\n\t\t\t? undefined\n\t\t\t: {\n\t\t\t\t\tbuilds: buildsArray,\n\t\t\t\t\ttrees: fieldsCodec.encode(treesToEncode, {\n\t\t\t\t\t\tencodeType: chunkCompressionStrategy,\n\t\t\t\t\t\tschema: context.schema,\n\t\t\t\t\t\toriginatorId: context.originatorId,\n\t\t\t\t\t\tidCompressor: context.idCompressor,\n\t\t\t\t\t}),\n\t\t\t\t};\n\t}\n\n\tfunction decodeDetachedNodes(\n\t\tencoded: EncodedBuilds | undefined,\n\t\tcontext: ChangeEncodingContext,\n\t): ChangeAtomIdMap<TreeChunk> | undefined {\n\t\tif (encoded === undefined || encoded.builds.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst chunks = fieldsCodec.decode(encoded.trees, {\n\t\t\tencodeType: chunkCompressionStrategy,\n\t\t\toriginatorId: context.originatorId,\n\t\t\tidCompressor: context.idCompressor,\n\t\t});\n\t\tconst getChunk = (index: number): TreeChunk => {\n\t\t\tassert(index < chunks.length, 0x898 /* out of bounds index for build chunk */);\n\t\t\treturn chunkFieldSingle(chunks[index], defaultChunkPolicy);\n\t\t};\n\n\t\tconst map: ModularChangeset[\"builds\"] = new Map();\n\t\tencoded.builds.forEach((build) => {\n\t\t\t// EncodedRevisionTag cannot be an array so this ensures that we can isolate the tuple\n\t\t\tconst revision =\n\t\t\t\tbuild[1] === undefined ? context.revision : revisionTagCodec.decode(build[1], context);\n\t\t\tmap.set(revision, new Map(build[0].map(([i, n]) => [i, getChunk(n)])));\n\t\t});\n\n\t\treturn map;\n\t}\n\n\tfunction encodeRevisionInfos(\n\t\trevisions: readonly RevisionInfo[],\n\t\tcontext: ChangeEncodingContext,\n\t): EncodedRevisionInfo[] | undefined {\n\t\tif (context.revision !== undefined) {\n\t\t\tassert(\n\t\t\t\trevisions.length === 1 &&\n\t\t\t\t\trevisions[0].revision === context.revision &&\n\t\t\t\t\trevisions[0].rollbackOf === undefined,\n\t\t\t\t0x964 /* A tagged change should only contain the tagged revision */,\n\t\t\t);\n\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst encodedRevisions = [];\n\t\tfor (const revision of revisions) {\n\t\t\tconst encodedRevision: Mutable<EncodedRevisionInfo> = {\n\t\t\t\trevision: revisionTagCodec.encode(revision.revision, context),\n\t\t\t};\n\n\t\t\tif (revision.rollbackOf !== undefined) {\n\t\t\t\tencodedRevision.rollbackOf = revisionTagCodec.encode(revision.rollbackOf, context);\n\t\t\t}\n\n\t\t\tencodedRevisions.push(encodedRevision);\n\t\t}\n\n\t\treturn encodedRevisions;\n\t}\n\n\tfunction decodeRevisionInfos(\n\t\trevisions: readonly EncodedRevisionInfo[] | undefined,\n\t\tcontext: ChangeEncodingContext,\n\t): RevisionInfo[] | undefined {\n\t\tif (revisions === undefined) {\n\t\t\treturn context.revision !== undefined ? [{ revision: context.revision }] : undefined;\n\t\t}\n\n\t\tconst decodedRevisions = [];\n\t\tfor (const revision of revisions) {\n\t\t\tconst decodedRevision: Mutable<RevisionInfo> = {\n\t\t\t\trevision: revisionTagCodec.decode(revision.revision, context),\n\t\t\t};\n\n\t\t\tif (revision.rollbackOf !== undefined) {\n\t\t\t\tdecodedRevision.rollbackOf = revisionTagCodec.decode(revision.rollbackOf, context);\n\t\t\t}\n\n\t\t\tdecodedRevisions.push(decodedRevision);\n\t\t}\n\n\t\treturn decodedRevisions;\n\t}\n\n\tconst modularChangeCodec: ModularChangeCodec = {\n\t\tencode: (change, context) => {\n\t\t\t// Destroys only exist in rollback changesets, which are never sent.\n\t\t\tassert(change.destroys === undefined, 0x899 /* Unexpected changeset with destroys */);\n\t\t\treturn {\n\t\t\t\tmaxId: change.maxId,\n\t\t\t\trevisions:\n\t\t\t\t\tchange.revisions === undefined\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: encodeRevisionInfos(change.revisions, context),\n\t\t\t\tchanges: encodeFieldChangesForJson(change.fieldChanges, context, change.nodeChanges),\n\t\t\t\tbuilds: encodeDetachedNodes(change.builds, context),\n\t\t\t\trefreshers: encodeDetachedNodes(change.refreshers, context),\n\t\t\t\tviolations: change.constraintViolationCount,\n\t\t\t};\n\t\t},\n\n\t\tdecode: (encodedChange: EncodedModularChangeset, context) => {\n\t\t\tconst decoded: Mutable<ModularChangeset> = {\n\t\t\t\tfieldChanges: new Map(),\n\t\t\t\tnodeChanges: new Map(),\n\t\t\t\tnodeToParent: new Map(),\n\t\t\t\tnodeAliases: new Map(),\n\t\t\t\tcrossFieldKeys: newCrossFieldKeyTable(),\n\t\t\t};\n\n\t\t\tdecoded.fieldChanges = decodeFieldChangesFromJson(\n\t\t\t\tencodedChange.changes,\n\t\t\t\tundefined,\n\t\t\t\tdecoded,\n\t\t\t\tcontext,\n\t\t\t\tidAllocatorFromMaxId(encodedChange.maxId),\n\t\t\t);\n\n\t\t\tif (encodedChange.builds !== undefined) {\n\t\t\t\tdecoded.builds = decodeDetachedNodes(encodedChange.builds, context);\n\t\t\t}\n\t\t\tif (encodedChange.refreshers !== undefined) {\n\t\t\t\tdecoded.refreshers = decodeDetachedNodes(encodedChange.refreshers, context);\n\t\t\t}\n\n\t\t\tif (encodedChange.violations !== undefined) {\n\t\t\t\tdecoded.constraintViolationCount = encodedChange.violations;\n\t\t\t}\n\n\t\t\tconst decodedRevInfos = decodeRevisionInfos(encodedChange.revisions, context);\n\t\t\tif (decodedRevInfos !== undefined) {\n\t\t\t\tdecoded.revisions = decodedRevInfos;\n\t\t\t}\n\t\t\tif (encodedChange.maxId !== undefined) {\n\t\t\t\tdecoded.maxId = encodedChange.maxId;\n\t\t\t}\n\t\t\treturn decoded;\n\t\t},\n\t};\n\n\treturn withSchemaValidation(EncodedModularChangeset, modularChangeCodec, validator);\n}\n\nfunction getChangeHandler(\n\tfieldKinds: FieldKindConfiguration,\n\tfieldKind: FieldKindIdentifier,\n): FieldChangeHandler<unknown> {\n\tif (fieldKind === genericFieldKind.identifier) {\n\t\treturn genericFieldKind.changeHandler;\n\t}\n\n\tconst handler = fieldKinds.get(fieldKind)?.kind.changeHandler;\n\tassert(handler !== undefined, \"Unknown field kind\");\n\treturn handler;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"modularChangeCodecs.js","sourceRoot":"","sources":["../../../src/feature-libraries/modular-schema/modularChangeCodecs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAG7D,OAAO,EAMN,eAAe,EACf,oBAAoB,GACpB,MAAM,sBAAsB,CAAC;AAY9B,OAAO,EAIN,KAAK,EACL,IAAI,EACJ,oBAAoB,EACpB,cAAc,EACd,mBAAmB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAGN,gBAAgB,EAChB,kBAAkB,GAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAMrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAKN,uBAAuB,GAGvB,MAAM,0BAA0B,CAAC;AAUlC,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,MAAM,UAAU,4BAA4B,CAC3C,uBAAoE,EACpE,gBAKC,EACD,WAA4B,EAC5B,EAAE,aAAa,EAAE,SAAS,EAAiB,EAC3C,2BAAoD,uBAAuB,CAAC,UAAU;IAEtF,OAAO,eAAe,CACrB,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC;QACxE,OAAO;QACP,sBAAsB,CACrB,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,EAAE,aAAa,EAAE,SAAS,EAAE,EAC5B,wBAAwB,CACxB;KACD,CAAC,CACF,CAAC;AACH,CAAC;AAgBD,SAAS,sBAAsB,CAC9B,UAAkC,EAClC,gBAKC,EACD,WAA4B,EAC5B,EAAE,aAAa,EAAE,SAAS,EAAiB,EAC3C,2BAAoD,uBAAuB,CAAC,UAAU;IAEtF,4EAA4E;IAC5E,MAAM,WAAW,GAAG,CAAC,EAAE,IAAI,EAAE,aAAa,EAA+B,EAAE,EAAE;QAC5E,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACxF,OAAO;YACN,KAAK;YACL,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,aAAa;gBACvC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC7C,CAAC,CAAC,SAAS;SACZ,CAAC;IACH,CAAC,CAAC;IAEF;;OAEG;IACH,MAAM,6BAA6B,GAAG,CAAC,CAAC;IACxC,MAAM,oBAAoB,GAMtB,IAAI,GAAG,CAAC;QACX;YACC,gBAAgB,CAAC,UAAU;YAC3B,WAAW,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,aAAa,EAAE,6BAA6B,EAAE,CAAC;SACrF;KACD,CAAC,CAAC;IAEH,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;QACxC,oBAAoB,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,MAAM,sBAAsB,GAAG,CAC9B,SAA8B,EAI7B,EAAE;QACH,MAAM,KAAK,GAAG,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/E,OAAO,KAAK,CAAC;IACd,CAAC,CAAC;IAEF,SAAS,yBAAyB,CACjC,MAAsB,EACtB,OAA8B,EAC9B,WAA2C;QAE3C,MAAM,YAAY,GAA+B;YAChD,WAAW,EAAE,OAAO;YAEpB,UAAU,EAAE,CAAC,MAAc,EAAwB,EAAE;gBACpD,MAAM,IAAI,GAAG,mBAAmB,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC/E,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBACxD,OAAO,wBAAwB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YACrD,CAAC;YAED,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,+CAA+C,CAAC;SACvE,CAAC;QAEF,OAAO,0BAA0B,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACzD,CAAC;IAED,SAAS,0BAA0B,CAClC,MAAsB,EACtB,OAAmC;QAEnC,MAAM,aAAa,GAA0B,EAAE,CAAC;QAEhD,KAAK,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,MAAM,EAAE,CAAC;YAC3C,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,sBAAsB,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAChF,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACrE,IAAI,cAAc,KAAK,SAAS,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC1E,IAAI,CAAC,+CAA+C,CAAC,CAAC;YACvD,CAAC;YAED,MAAM,QAAQ,GAAa,KAAK,CAAC;YACjC,MAAM,YAAY,GAAuB;gBACxC,QAAQ;gBACR,SAAS,EAAE,WAAW,CAAC,SAAS;gBAChC,MAAM,EAAE,aAAa;aACrB,CAAC;YAEF,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,aAAa,CAAC;IACtB,CAAC;IAED,SAAS,wBAAwB,CAChC,MAAqB,EACrB,OAAmC;QAEnC,MAAM,aAAa,GAAyB,EAAE,CAAC;QAC/C,MAAM,EAAE,YAAY,EAAE,oBAAoB,EAAE,GAAG,MAAM,CAAC;QAEtD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAChC,aAAa,CAAC,YAAY,GAAG,0BAA0B,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAChF,CAAC;QAED,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;YACxC,aAAa,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QAC3D,CAAC;QAED,OAAO,aAAa,CAAC;IACtB,CAAC;IAED,SAAS,0BAA0B,CAClC,aAAoC,EACpC,QAA4B,EAC5B,OAAyB,EACzB,OAA8B,EAC9B,WAAwB;QAExB,MAAM,aAAa,GAAmB,IAAI,GAAG,EAAE,CAAC;QAChD,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;YACnC,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,sBAAsB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC1E,IAAI,cAAc,KAAK,SAAS,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzE,IAAI,CAAC,+CAA+C,CAAC,CAAC;YACvD,CAAC;YAED,MAAM,OAAO,GAAY;gBACxB,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,KAAK,CAAC,QAAQ;aACrB,CAAC;YAEF,MAAM,YAAY,GAA+B;gBAChD,WAAW,EAAE,OAAO;gBAEpB,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,+CAA+C,CAAC;gBAEvE,UAAU,EAAE,CAAC,WAAiC,EAAU,EAAE;oBACzD,MAAM,MAAM,GAAW;wBACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;wBAC1B,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;qBACtC,CAAC;oBAEF,MAAM,IAAI,GAAG,2BAA2B,CACvC,WAAW,EACX,MAAM,EACN,OAAO,EACP,OAAO,EACP,WAAW,CACX,CAAC;oBAEF,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;oBAC3E,cAAc,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;oBAC/E,OAAO,MAAM,CAAC;gBACf,CAAC;aACD,CAAC;YAEF,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YAErE,MAAM,cAAc,GAAG,gBAAgB,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,iBAAiB,CACrF,cAAc,CACd,CAAC;YAEF,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;gBAC5C,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YACpD,CAAC;YAED,MAAM,QAAQ,GAAa,KAAK,CAAW,KAAK,CAAC,QAAQ,CAAC,CAAC;YAE3D,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE;gBAC3B,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,MAAM,EAAE,KAAK,CAAC,cAAc,CAAC;aAC7B,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,aAAa,CAAC;IACtB,CAAC;IAED,SAAS,2BAA2B,CACnC,aAAmC,EACnC,EAAU,EACV,OAAyB,EACzB,OAA8B,EAC9B,WAAwB;QAExB,MAAM,aAAa,GAAkB,EAAE,CAAC;QACxC,MAAM,EAAE,YAAY,EAAE,oBAAoB,EAAE,GAAG,aAAa,CAAC;QAE7D,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAChC,aAAa,CAAC,YAAY,GAAG,0BAA0B,CACtD,YAAY,EACZ,EAAE,EACF,OAAO,EACP,OAAO,EACP,WAAW,CACX,CAAC;QACH,CAAC;QAED,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;YACxC,aAAa,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QAC3D,CAAC;QAED,OAAO,aAAa,CAAC;IACtB,CAAC;IAED,SAAS,mBAAmB,CAC3B,aAAqD,EACrD,OAA8B;QAE9B,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,MAAM,aAAa,GAA6B,EAAE,CAAC;QACnD,MAAM,WAAW,GAAuB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAC9E,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,EAAE;YACrB,MAAM,mBAAmB,GAAiC,KAAK,CAAC,IAAI,CACnE,YAAY,CAAC,OAAO,EAAE,CACtB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;gBAChB,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC/B,MAAM,gBAAgB,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;gBAClD,OAAO,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC;YACH,sFAAsF;YACtF,4HAA4H;YAC5H,2FAA2F;YAC3F,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,OAAO,CAAC,QAAQ;gBAC/C,CAAC,CAAC,CAAC,mBAAmB,CAAC;gBACvB,CAAC,CAAC,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAC/D,CAAC,CACD,CAAC;QACF,OAAO,WAAW,CAAC,MAAM,KAAK,CAAC;YAC9B,CAAC,CAAC,SAAS;YACX,CAAC,CAAC;gBACA,MAAM,EAAE,WAAW;gBACnB,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,aAAa,EAAE;oBACxC,UAAU,EAAE,wBAAwB;oBACpC,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,YAAY,EAAE,OAAO,CAAC,YAAY;oBAClC,YAAY,EAAE,OAAO,CAAC,YAAY;iBAClC,CAAC;aACF,CAAC;IACL,CAAC;IAED,SAAS,mBAAmB,CAC3B,OAAkC,EAClC,OAA8B;QAE9B,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1D,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE;YAChD,UAAU,EAAE,wBAAwB;YACpC,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,YAAY,EAAE,OAAO,CAAC,YAAY;SAClC,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAa,EAAE;YAC7C,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,yCAAyC,CAAC,CAAC;YAC/E,OAAO,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,kBAAkB,CAAC,CAAC;QAC5D,CAAC,CAAC;QAEF,MAAM,GAAG,GAA+B,IAAI,GAAG,EAAE,CAAC;QAClD,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAChC,sFAAsF;YACtF,MAAM,QAAQ,GACb,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACxF,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACZ,CAAC;IAED,SAAS,mBAAmB,CAC3B,SAAkC,EAClC,OAA8B;QAE9B,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACpC,MAAM,CACL,SAAS,CAAC,MAAM,KAAK,CAAC;gBACrB,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ;gBAC1C,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,EACtC,KAAK,CAAC,6DAA6D,CACnE,CAAC;YAEF,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,MAAM,gBAAgB,GAAG,EAAE,CAAC;QAC5B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAClC,MAAM,eAAe,GAAiC;gBACrD,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;aAC7D,CAAC;YAEF,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBACvC,eAAe,CAAC,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACpF,CAAC;YAED,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,gBAAgB,CAAC;IACzB,CAAC;IAED,SAAS,mBAAmB,CAC3B,SAAqD,EACrD,OAA8B;QAE9B,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACtF,CAAC;QAED,MAAM,gBAAgB,GAAG,EAAE,CAAC;QAC5B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAClC,MAAM,eAAe,GAA0B;gBAC9C,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;aAC7D,CAAC;YAEF,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBACvC,eAAe,CAAC,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACpF,CAAC;YAED,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,gBAAgB,CAAC;IACzB,CAAC;IAED,MAAM,kBAAkB,GAAuB;QAC9C,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;YAC3B,oEAAoE;YACpE,MAAM,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,KAAK,CAAC,wCAAwC,CAAC,CAAC;YACtF,OAAO;gBACN,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,SAAS,EACR,MAAM,CAAC,SAAS,KAAK,SAAS;oBAC7B,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC;gBAClD,OAAO,EAAE,yBAAyB,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC;gBACpF,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBACnD,UAAU,EAAE,mBAAmB,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC;gBAC3D,UAAU,EAAE,MAAM,CAAC,wBAAwB;aAC3C,CAAC;QACH,CAAC;QAED,MAAM,EAAE,CAAC,aAAsC,EAAE,OAAO,EAAE,EAAE;YAC3D,MAAM,OAAO,GAA8B;gBAC1C,YAAY,EAAE,IAAI,GAAG,EAAE;gBACvB,WAAW,EAAE,IAAI,GAAG,EAAE;gBACtB,YAAY,EAAE,IAAI,GAAG,EAAE;gBACvB,WAAW,EAAE,IAAI,GAAG,EAAE;gBACtB,cAAc,EAAE,qBAAqB,EAAE;aACvC,CAAC;YAEF,OAAO,CAAC,YAAY,GAAG,0BAA0B,CAChD,aAAa,CAAC,OAAO,EACrB,SAAS,EACT,OAAO,EACP,OAAO,EACP,oBAAoB,CAAC,aAAa,CAAC,KAAK,CAAC,CACzC,CAAC;YAEF,IAAI,aAAa,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACxC,OAAO,CAAC,MAAM,GAAG,mBAAmB,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACrE,CAAC;YACD,IAAI,aAAa,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC5C,OAAO,CAAC,UAAU,GAAG,mBAAmB,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC7E,CAAC;YAED,IAAI,aAAa,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC5C,OAAO,CAAC,wBAAwB,GAAG,aAAa,CAAC,UAAU,CAAC;YAC7D,CAAC;YAED,MAAM,eAAe,GAAG,mBAAmB,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC9E,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;gBACnC,OAAO,CAAC,SAAS,GAAG,eAAe,CAAC;YACrC,CAAC;YACD,IAAI,aAAa,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBACvC,OAAO,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;YACrC,CAAC;YACD,OAAO,OAAO,CAAC;QAChB,CAAC;KACD,CAAC;IAEF,OAAO,oBAAoB,CAAC,uBAAuB,EAAE,kBAAkB,EAAE,SAAS,CAAC,CAAC;AACrF,CAAC;AAED,SAAS,gBAAgB,CACxB,UAAkC,EAClC,SAA8B;IAE9B,IAAI,SAAS,KAAK,gBAAgB,CAAC,UAAU,EAAE,CAAC;QAC/C,OAAO,gBAAgB,CAAC,aAAa,CAAC;IACvC,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC;IAC9D,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC9D,OAAO,OAAO,CAAC;AAChB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport type { TAnySchema } from \"@sinclair/typebox\";\n\nimport {\n\ttype ICodecFamily,\n\ttype ICodecOptions,\n\ttype IJsonCodec,\n\ttype IMultiFormatCodec,\n\ttype SchemaValidationFunction,\n\tmakeCodecFamily,\n\twithSchemaValidation,\n} from \"../../codec/index.js\";\nimport type {\n\tChangeAtomIdMap,\n\tChangeEncodingContext,\n\tChangesetLocalId,\n\tEncodedRevisionTag,\n\tFieldKey,\n\tFieldKindIdentifier,\n\tITreeCursorSynchronous,\n\tRevisionInfo,\n\tRevisionTag,\n} from \"../../core/index.js\";\nimport {\n\ttype IdAllocator,\n\ttype JsonCompatibleReadOnly,\n\ttype Mutable,\n\tbrand,\n\tfail,\n\tidAllocatorFromMaxId,\n\tsetInNestedMap,\n\ttryGetFromNestedMap,\n} from \"../../util/index.js\";\nimport {\n\ttype FieldBatchCodec,\n\ttype TreeChunk,\n\tchunkFieldSingle,\n\tdefaultChunkPolicy,\n} from \"../chunked-forest/index.js\";\nimport { TreeCompressionStrategy } from \"../treeCompressionUtils.js\";\n\nimport type {\n\tFieldKindConfiguration,\n\tFieldKindConfigurationEntry,\n} from \"./fieldKindConfiguration.js\";\nimport { genericFieldKind } from \"./genericFieldKind.js\";\nimport {\n\ttype EncodedBuilds,\n\ttype EncodedBuildsArray,\n\ttype EncodedFieldChange,\n\ttype EncodedFieldChangeMap,\n\tEncodedModularChangeset,\n\ttype EncodedNodeChangeset,\n\ttype EncodedRevisionInfo,\n} from \"./modularChangeFormat.js\";\nimport type {\n\tFieldChangeMap,\n\tFieldChangeset,\n\tFieldId,\n\tModularChangeset,\n\tNodeChangeset,\n\tNodeId,\n} from \"./modularChangeTypes.js\";\nimport type { FieldChangeEncodingContext, FieldChangeHandler } from \"./fieldChangeHandler.js\";\nimport { newCrossFieldKeyTable } from \"./modularChangeFamily.js\";\n\nexport function makeModularChangeCodecFamily(\n\tfieldKindConfigurations: ReadonlyMap<number, FieldKindConfiguration>,\n\trevisionTagCodec: IJsonCodec<\n\t\tRevisionTag,\n\t\tEncodedRevisionTag,\n\t\tEncodedRevisionTag,\n\t\tChangeEncodingContext\n\t>,\n\tfieldsCodec: FieldBatchCodec,\n\t{ jsonValidator: validator }: ICodecOptions,\n\tchunkCompressionStrategy: TreeCompressionStrategy = TreeCompressionStrategy.Compressed,\n): ICodecFamily<ModularChangeset, ChangeEncodingContext> {\n\treturn makeCodecFamily(\n\t\tArray.from(fieldKindConfigurations.entries(), ([version, fieldKinds]) => [\n\t\t\tversion,\n\t\t\tmakeModularChangeCodec(\n\t\t\t\tfieldKinds,\n\t\t\t\trevisionTagCodec,\n\t\t\t\tfieldsCodec,\n\t\t\t\t{ jsonValidator: validator },\n\t\t\t\tchunkCompressionStrategy,\n\t\t\t),\n\t\t]),\n\t);\n}\n\ntype ModularChangeCodec = IJsonCodec<\n\tModularChangeset,\n\tEncodedModularChangeset,\n\tEncodedModularChangeset,\n\tChangeEncodingContext\n>;\n\ntype FieldCodec = IMultiFormatCodec<\n\tFieldChangeset,\n\tJsonCompatibleReadOnly,\n\tJsonCompatibleReadOnly,\n\tFieldChangeEncodingContext\n>;\n\nfunction makeModularChangeCodec(\n\tfieldKinds: FieldKindConfiguration,\n\trevisionTagCodec: IJsonCodec<\n\t\tRevisionTag,\n\t\tEncodedRevisionTag,\n\t\tEncodedRevisionTag,\n\t\tChangeEncodingContext\n\t>,\n\tfieldsCodec: FieldBatchCodec,\n\t{ jsonValidator: validator }: ICodecOptions,\n\tchunkCompressionStrategy: TreeCompressionStrategy = TreeCompressionStrategy.Compressed,\n): ModularChangeCodec {\n\t// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n\tconst getMapEntry = ({ kind, formatVersion }: FieldKindConfigurationEntry) => {\n\t\tconst codec = kind.changeHandler.codecsFactory(revisionTagCodec).resolve(formatVersion);\n\t\treturn {\n\t\t\tcodec,\n\t\t\tcompiledSchema: codec.json.encodedSchema\n\t\t\t\t? validator.compile(codec.json.encodedSchema)\n\t\t\t\t: undefined,\n\t\t};\n\t};\n\n\t/**\n\t * The codec version for the generic field kind.\n\t */\n\tconst genericFieldKindFormatVersion = 1;\n\tconst fieldChangesetCodecs: Map<\n\t\tFieldKindIdentifier,\n\t\t{\n\t\t\tcompiledSchema?: SchemaValidationFunction<TAnySchema>;\n\t\t\tcodec: FieldCodec;\n\t\t}\n\t> = new Map([\n\t\t[\n\t\t\tgenericFieldKind.identifier,\n\t\t\tgetMapEntry({ kind: genericFieldKind, formatVersion: genericFieldKindFormatVersion }),\n\t\t],\n\t]);\n\n\tfieldKinds.forEach((entry, identifier) => {\n\t\tfieldChangesetCodecs.set(identifier, getMapEntry(entry));\n\t});\n\n\tconst getFieldChangesetCodec = (\n\t\tfieldKind: FieldKindIdentifier,\n\t): {\n\t\tcompiledSchema?: SchemaValidationFunction<TAnySchema>;\n\t\tcodec: FieldCodec;\n\t} => {\n\t\tconst entry = fieldChangesetCodecs.get(fieldKind);\n\t\tassert(entry !== undefined, 0x5ea /* Tried to encode unsupported fieldKind */);\n\t\treturn entry;\n\t};\n\n\tfunction encodeFieldChangesForJson(\n\t\tchange: FieldChangeMap,\n\t\tcontext: ChangeEncodingContext,\n\t\tnodeChanges: ChangeAtomIdMap<NodeChangeset>,\n\t): EncodedFieldChangeMap {\n\t\tconst fieldContext: FieldChangeEncodingContext = {\n\t\t\tbaseContext: context,\n\n\t\t\tencodeNode: (nodeId: NodeId): EncodedNodeChangeset => {\n\t\t\t\tconst node = tryGetFromNestedMap(nodeChanges, nodeId.revision, nodeId.localId);\n\t\t\t\tassert(node !== undefined, 0x92e /* Unknown node ID */);\n\t\t\t\treturn encodeNodeChangesForJson(node, fieldContext);\n\t\t\t},\n\n\t\t\tdecodeNode: () => fail(\"Should not decode nodes during field encoding\"),\n\t\t};\n\n\t\treturn encodeFieldChangesForJsonI(change, fieldContext);\n\t}\n\n\tfunction encodeFieldChangesForJsonI(\n\t\tchange: FieldChangeMap,\n\t\tcontext: FieldChangeEncodingContext,\n\t): EncodedFieldChangeMap {\n\t\tconst encodedFields: EncodedFieldChangeMap = [];\n\n\t\tfor (const [field, fieldChange] of change) {\n\t\t\tconst { codec, compiledSchema } = getFieldChangesetCodec(fieldChange.fieldKind);\n\t\t\tconst encodedChange = codec.json.encode(fieldChange.change, context);\n\t\t\tif (compiledSchema !== undefined && !compiledSchema.check(encodedChange)) {\n\t\t\t\tfail(\"Encoded change didn't pass schema validation.\");\n\t\t\t}\n\n\t\t\tconst fieldKey: FieldKey = field;\n\t\t\tconst encodedField: EncodedFieldChange = {\n\t\t\t\tfieldKey,\n\t\t\t\tfieldKind: fieldChange.fieldKind,\n\t\t\t\tchange: encodedChange,\n\t\t\t};\n\n\t\t\tencodedFields.push(encodedField);\n\t\t}\n\n\t\treturn encodedFields;\n\t}\n\n\tfunction encodeNodeChangesForJson(\n\t\tchange: NodeChangeset,\n\t\tcontext: FieldChangeEncodingContext,\n\t): EncodedNodeChangeset {\n\t\tconst encodedChange: EncodedNodeChangeset = {};\n\t\tconst { fieldChanges, nodeExistsConstraint } = change;\n\n\t\tif (fieldChanges !== undefined) {\n\t\t\tencodedChange.fieldChanges = encodeFieldChangesForJsonI(fieldChanges, context);\n\t\t}\n\n\t\tif (nodeExistsConstraint !== undefined) {\n\t\t\tencodedChange.nodeExistsConstraint = nodeExistsConstraint;\n\t\t}\n\n\t\treturn encodedChange;\n\t}\n\n\tfunction decodeFieldChangesFromJson(\n\t\tencodedChange: EncodedFieldChangeMap,\n\t\tparentId: NodeId | undefined,\n\t\tdecoded: ModularChangeset,\n\t\tcontext: ChangeEncodingContext,\n\t\tidAllocator: IdAllocator,\n\t): FieldChangeMap {\n\t\tconst decodedFields: FieldChangeMap = new Map();\n\t\tfor (const field of encodedChange) {\n\t\t\tconst { codec, compiledSchema } = getFieldChangesetCodec(field.fieldKind);\n\t\t\tif (compiledSchema !== undefined && !compiledSchema.check(field.change)) {\n\t\t\t\tfail(\"Encoded change didn't pass schema validation.\");\n\t\t\t}\n\n\t\t\tconst fieldId: FieldId = {\n\t\t\t\tnodeId: parentId,\n\t\t\t\tfield: field.fieldKey,\n\t\t\t};\n\n\t\t\tconst fieldContext: FieldChangeEncodingContext = {\n\t\t\t\tbaseContext: context,\n\n\t\t\t\tencodeNode: () => fail(\"Should not encode nodes during field decoding\"),\n\n\t\t\t\tdecodeNode: (encodedNode: EncodedNodeChangeset): NodeId => {\n\t\t\t\t\tconst nodeId: NodeId = {\n\t\t\t\t\t\trevision: context.revision,\n\t\t\t\t\t\tlocalId: brand(idAllocator.allocate()),\n\t\t\t\t\t};\n\n\t\t\t\t\tconst node = decodeNodeChangesetFromJson(\n\t\t\t\t\t\tencodedNode,\n\t\t\t\t\t\tnodeId,\n\t\t\t\t\t\tdecoded,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\tidAllocator,\n\t\t\t\t\t);\n\n\t\t\t\t\tsetInNestedMap(decoded.nodeChanges, nodeId.revision, nodeId.localId, node);\n\t\t\t\t\tsetInNestedMap(decoded.nodeToParent, nodeId.revision, nodeId.localId, fieldId);\n\t\t\t\t\treturn nodeId;\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst fieldChangeset = codec.json.decode(field.change, fieldContext);\n\n\t\t\tconst crossFieldKeys = getChangeHandler(fieldKinds, field.fieldKind).getCrossFieldKeys(\n\t\t\t\tfieldChangeset,\n\t\t\t);\n\n\t\t\tfor (const crossFieldKey of crossFieldKeys) {\n\t\t\t\tdecoded.crossFieldKeys.set(crossFieldKey, fieldId);\n\t\t\t}\n\n\t\t\tconst fieldKey: FieldKey = brand<FieldKey>(field.fieldKey);\n\n\t\t\tdecodedFields.set(fieldKey, {\n\t\t\t\tfieldKind: field.fieldKind,\n\t\t\t\tchange: brand(fieldChangeset),\n\t\t\t});\n\t\t}\n\n\t\treturn decodedFields;\n\t}\n\n\tfunction decodeNodeChangesetFromJson(\n\t\tencodedChange: EncodedNodeChangeset,\n\t\tid: NodeId,\n\t\tdecoded: ModularChangeset,\n\t\tcontext: ChangeEncodingContext,\n\t\tidAllocator: IdAllocator,\n\t): NodeChangeset {\n\t\tconst decodedChange: NodeChangeset = {};\n\t\tconst { fieldChanges, nodeExistsConstraint } = encodedChange;\n\n\t\tif (fieldChanges !== undefined) {\n\t\t\tdecodedChange.fieldChanges = decodeFieldChangesFromJson(\n\t\t\t\tfieldChanges,\n\t\t\t\tid,\n\t\t\t\tdecoded,\n\t\t\t\tcontext,\n\t\t\t\tidAllocator,\n\t\t\t);\n\t\t}\n\n\t\tif (nodeExistsConstraint !== undefined) {\n\t\t\tdecodedChange.nodeExistsConstraint = nodeExistsConstraint;\n\t\t}\n\n\t\treturn decodedChange;\n\t}\n\n\tfunction encodeDetachedNodes(\n\t\tdetachedNodes: ChangeAtomIdMap<TreeChunk> | undefined,\n\t\tcontext: ChangeEncodingContext,\n\t): EncodedBuilds | undefined {\n\t\tif (detachedNodes === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst treesToEncode: ITreeCursorSynchronous[] = [];\n\t\tconst buildsArray: EncodedBuildsArray = Array.from(detachedNodes.entries()).map(\n\t\t\t([r, commitBuilds]) => {\n\t\t\t\tconst commitBuildsEncoded: [ChangesetLocalId, number][] = Array.from(\n\t\t\t\t\tcommitBuilds.entries(),\n\t\t\t\t).map(([i, t]) => {\n\t\t\t\t\ttreesToEncode.push(t.cursor());\n\t\t\t\t\tconst treeIndexInBatch = treesToEncode.length - 1;\n\t\t\t\t\treturn [i, treeIndexInBatch];\n\t\t\t\t});\n\t\t\t\t// `undefined` does not round-trip through JSON strings, so it needs special handling.\n\t\t\t\t// Most entries will have an undefined revision due to the revision information being inherited from the `ModularChangeset`.\n\t\t\t\t// We therefore optimize for the common case by omitting the revision when it is undefined.\n\t\t\t\treturn r === undefined || r === context.revision\n\t\t\t\t\t? [commitBuildsEncoded]\n\t\t\t\t\t: [commitBuildsEncoded, revisionTagCodec.encode(r, context)];\n\t\t\t},\n\t\t);\n\t\treturn buildsArray.length === 0\n\t\t\t? undefined\n\t\t\t: {\n\t\t\t\t\tbuilds: buildsArray,\n\t\t\t\t\ttrees: fieldsCodec.encode(treesToEncode, {\n\t\t\t\t\t\tencodeType: chunkCompressionStrategy,\n\t\t\t\t\t\tschema: context.schema,\n\t\t\t\t\t\toriginatorId: context.originatorId,\n\t\t\t\t\t\tidCompressor: context.idCompressor,\n\t\t\t\t\t}),\n\t\t\t\t};\n\t}\n\n\tfunction decodeDetachedNodes(\n\t\tencoded: EncodedBuilds | undefined,\n\t\tcontext: ChangeEncodingContext,\n\t): ChangeAtomIdMap<TreeChunk> | undefined {\n\t\tif (encoded === undefined || encoded.builds.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst chunks = fieldsCodec.decode(encoded.trees, {\n\t\t\tencodeType: chunkCompressionStrategy,\n\t\t\toriginatorId: context.originatorId,\n\t\t\tidCompressor: context.idCompressor,\n\t\t});\n\t\tconst getChunk = (index: number): TreeChunk => {\n\t\t\tassert(index < chunks.length, 0x898 /* out of bounds index for build chunk */);\n\t\t\treturn chunkFieldSingle(chunks[index], defaultChunkPolicy);\n\t\t};\n\n\t\tconst map: ModularChangeset[\"builds\"] = new Map();\n\t\tencoded.builds.forEach((build) => {\n\t\t\t// EncodedRevisionTag cannot be an array so this ensures that we can isolate the tuple\n\t\t\tconst revision =\n\t\t\t\tbuild[1] === undefined ? context.revision : revisionTagCodec.decode(build[1], context);\n\t\t\tmap.set(revision, new Map(build[0].map(([i, n]) => [i, getChunk(n)])));\n\t\t});\n\n\t\treturn map;\n\t}\n\n\tfunction encodeRevisionInfos(\n\t\trevisions: readonly RevisionInfo[],\n\t\tcontext: ChangeEncodingContext,\n\t): EncodedRevisionInfo[] | undefined {\n\t\tif (context.revision !== undefined) {\n\t\t\tassert(\n\t\t\t\trevisions.length === 1 &&\n\t\t\t\t\trevisions[0].revision === context.revision &&\n\t\t\t\t\trevisions[0].rollbackOf === undefined,\n\t\t\t\t0x964 /* A tagged change should only contain the tagged revision */,\n\t\t\t);\n\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst encodedRevisions = [];\n\t\tfor (const revision of revisions) {\n\t\t\tconst encodedRevision: Mutable<EncodedRevisionInfo> = {\n\t\t\t\trevision: revisionTagCodec.encode(revision.revision, context),\n\t\t\t};\n\n\t\t\tif (revision.rollbackOf !== undefined) {\n\t\t\t\tencodedRevision.rollbackOf = revisionTagCodec.encode(revision.rollbackOf, context);\n\t\t\t}\n\n\t\t\tencodedRevisions.push(encodedRevision);\n\t\t}\n\n\t\treturn encodedRevisions;\n\t}\n\n\tfunction decodeRevisionInfos(\n\t\trevisions: readonly EncodedRevisionInfo[] | undefined,\n\t\tcontext: ChangeEncodingContext,\n\t): RevisionInfo[] | undefined {\n\t\tif (revisions === undefined) {\n\t\t\treturn context.revision !== undefined ? [{ revision: context.revision }] : undefined;\n\t\t}\n\n\t\tconst decodedRevisions = [];\n\t\tfor (const revision of revisions) {\n\t\t\tconst decodedRevision: Mutable<RevisionInfo> = {\n\t\t\t\trevision: revisionTagCodec.decode(revision.revision, context),\n\t\t\t};\n\n\t\t\tif (revision.rollbackOf !== undefined) {\n\t\t\t\tdecodedRevision.rollbackOf = revisionTagCodec.decode(revision.rollbackOf, context);\n\t\t\t}\n\n\t\t\tdecodedRevisions.push(decodedRevision);\n\t\t}\n\n\t\treturn decodedRevisions;\n\t}\n\n\tconst modularChangeCodec: ModularChangeCodec = {\n\t\tencode: (change, context) => {\n\t\t\t// Destroys only exist in rollback changesets, which are never sent.\n\t\t\tassert(change.destroys === undefined, 0x899 /* Unexpected changeset with destroys */);\n\t\t\treturn {\n\t\t\t\tmaxId: change.maxId,\n\t\t\t\trevisions:\n\t\t\t\t\tchange.revisions === undefined\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: encodeRevisionInfos(change.revisions, context),\n\t\t\t\tchanges: encodeFieldChangesForJson(change.fieldChanges, context, change.nodeChanges),\n\t\t\t\tbuilds: encodeDetachedNodes(change.builds, context),\n\t\t\t\trefreshers: encodeDetachedNodes(change.refreshers, context),\n\t\t\t\tviolations: change.constraintViolationCount,\n\t\t\t};\n\t\t},\n\n\t\tdecode: (encodedChange: EncodedModularChangeset, context) => {\n\t\t\tconst decoded: Mutable<ModularChangeset> = {\n\t\t\t\tfieldChanges: new Map(),\n\t\t\t\tnodeChanges: new Map(),\n\t\t\t\tnodeToParent: new Map(),\n\t\t\t\tnodeAliases: new Map(),\n\t\t\t\tcrossFieldKeys: newCrossFieldKeyTable(),\n\t\t\t};\n\n\t\t\tdecoded.fieldChanges = decodeFieldChangesFromJson(\n\t\t\t\tencodedChange.changes,\n\t\t\t\tundefined,\n\t\t\t\tdecoded,\n\t\t\t\tcontext,\n\t\t\t\tidAllocatorFromMaxId(encodedChange.maxId),\n\t\t\t);\n\n\t\t\tif (encodedChange.builds !== undefined) {\n\t\t\t\tdecoded.builds = decodeDetachedNodes(encodedChange.builds, context);\n\t\t\t}\n\t\t\tif (encodedChange.refreshers !== undefined) {\n\t\t\t\tdecoded.refreshers = decodeDetachedNodes(encodedChange.refreshers, context);\n\t\t\t}\n\n\t\t\tif (encodedChange.violations !== undefined) {\n\t\t\t\tdecoded.constraintViolationCount = encodedChange.violations;\n\t\t\t}\n\n\t\t\tconst decodedRevInfos = decodeRevisionInfos(encodedChange.revisions, context);\n\t\t\tif (decodedRevInfos !== undefined) {\n\t\t\t\tdecoded.revisions = decodedRevInfos;\n\t\t\t}\n\t\t\tif (encodedChange.maxId !== undefined) {\n\t\t\t\tdecoded.maxId = encodedChange.maxId;\n\t\t\t}\n\t\t\treturn decoded;\n\t\t},\n\t};\n\n\treturn withSchemaValidation(EncodedModularChangeset, modularChangeCodec, validator);\n}\n\nfunction getChangeHandler(\n\tfieldKinds: FieldKindConfiguration,\n\tfieldKind: FieldKindIdentifier,\n): FieldChangeHandler<unknown> {\n\tif (fieldKind === genericFieldKind.identifier) {\n\t\treturn genericFieldKind.changeHandler;\n\t}\n\n\tconst handler = fieldKinds.get(fieldKind)?.kind.changeHandler;\n\tassert(handler !== undefined, 0x9c1 /* Unknown field kind */);\n\treturn handler;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modularChangeFamily.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/modular-schema/modularChangeFamily.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EACN,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EAIrB,KAAK,mBAAmB,EAGxB,KAAK,SAAS,EACd,WAAW,EAEX,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,MAAM,EAWX,MAAM,qBAAqB,CAAC;AAoB7B,OAAO,EACN,KAAK,SAAS,EAId,MAAM,4BAA4B,CAAC;AAWpC,OAAO,EACN,KAAK,kBAAkB,EAEvB,KAAK,sBAAsB,EAC3B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,mBAAmB,EAAc,MAAM,0BAA0B,CAAC;AAGhF,OAAO,KAAK,EACX,kBAAkB,EAClB,kBAAkB,EAGlB,cAAc,EACd,OAAO,EACP,gBAAgB,EAEhB,MAAM,EAEN,MAAM,yBAAyB,CAAC;AAEjC;;;GAGG;AACH,qBAAa,mBACZ,YACC,YAAY,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,EAClD,aAAa,CAAC,gBAAgB,CAAC;aAQf,MAAM,EAAE,YAAY,CAAC,gBAAgB,EAAE,qBAAqB,CAAC;IAN9E,gBAAuB,WAAW,EAAE,gBAAgB,CAA0B;IAE9E,SAAgB,UAAU,EAAE,WAAW,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;gBAGjF,UAAU,EAAE,WAAW,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,EACjD,MAAM,EAAE,YAAY,CAAC,gBAAgB,EAAE,qBAAqB,CAAC;IAK9E,IAAW,OAAO,IAAI,aAAa,CAAC,gBAAgB,CAAC,CAEpD;IAED;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB;IAgD7B,OAAO,CAAC,oBAAoB;IA8BrB,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,gBAAgB,CAAC,EAAE,GAAG,gBAAgB;
|
|
1
|
+
{"version":3,"file":"modularChangeFamily.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/modular-schema/modularChangeFamily.ts"],"names":[],"mappings":"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"}
|
|
@@ -72,13 +72,10 @@ export class ModularChangeFamily {
|
|
|
72
72
|
compose(changes) {
|
|
73
73
|
const { revInfos, maxId } = getRevInfoFromTaggedChanges(changes);
|
|
74
74
|
const idState = { maxId };
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
nodeAliases: new Map(),
|
|
80
|
-
crossFieldKeys: newCrossFieldKeyTable(),
|
|
81
|
-
})).change;
|
|
75
|
+
if (changes.length === 0) {
|
|
76
|
+
return makeModularChangeset();
|
|
77
|
+
}
|
|
78
|
+
return changes.reduce((change1, change2) => makeAnonChange(this.composePair(change1, change2, revInfos, idState))).change;
|
|
82
79
|
}
|
|
83
80
|
composePair(change1, change2, revInfos, idState) {
|
|
84
81
|
const { fieldChanges, nodeChanges, nodeToParent, nodeAliases, crossFieldKeys } = this.composeAllFields(change1.change, change2.change, revInfos, idState);
|
|
@@ -447,7 +444,7 @@ export class ModularChangeFamily {
|
|
|
447
444
|
? normalizeNodeId({ revision, localId }, baseChange.nodeAliases)
|
|
448
445
|
: undefined;
|
|
449
446
|
const baseFieldChange = fieldMapFromNodeId(baseChange.fieldChanges, baseChange.nodeChanges, baseNodeId).get(fieldKey);
|
|
450
|
-
assert(baseFieldChange !== undefined,
|
|
447
|
+
assert(baseFieldChange !== undefined, 0x9c2 /* Cross field key registered for empty field */);
|
|
451
448
|
if (crossFieldTable.baseFieldToContext.has(baseFieldChange)) {
|
|
452
449
|
// This field has already been processed because there were changes to rebase.
|
|
453
450
|
continue;
|
|
@@ -455,7 +452,7 @@ export class ModularChangeFamily {
|
|
|
455
452
|
// This field has no changes in the new changeset, otherwise it would have been added to
|
|
456
453
|
// `crossFieldTable.baseFieldToContext` when processing fields with both base and new changes.
|
|
457
454
|
const rebaseChild = (child, baseChild, stateChange) => {
|
|
458
|
-
assert(child === undefined,
|
|
455
|
+
assert(child === undefined, 0x9c3 /* There should be no new changes in this field */);
|
|
459
456
|
return undefined;
|
|
460
457
|
};
|
|
461
458
|
const handler = getChangeHandler(this.fieldKinds, baseFieldChange.fieldKind);
|
|
@@ -495,7 +492,7 @@ export class ModularChangeFamily {
|
|
|
495
492
|
rebasedNode.fieldChanges = new Map([[fieldKey, rebasedField]]);
|
|
496
493
|
return;
|
|
497
494
|
}
|
|
498
|
-
assert(!rebasedNode.fieldChanges.has(fieldKey),
|
|
495
|
+
assert(!rebasedNode.fieldChanges.has(fieldKey), 0x9c4 /* Expected an empty field */);
|
|
499
496
|
rebasedNode.fieldChanges.set(fieldKey, rebasedField);
|
|
500
497
|
return;
|
|
501
498
|
}
|
|
@@ -1120,7 +1117,7 @@ class InvertManager extends CrossFieldManagerI {
|
|
|
1120
1117
|
setInChangeAtomIdMap(this.table.invertedNodeToParent, id, this.fieldId);
|
|
1121
1118
|
}
|
|
1122
1119
|
moveKey(target, revision, id, count) {
|
|
1123
|
-
assert(false,
|
|
1120
|
+
assert(false, 0x9c5 /* Keys should not be moved manually during invert */);
|
|
1124
1121
|
}
|
|
1125
1122
|
get table() {
|
|
1126
1123
|
return this.crossFieldTable;
|
|
@@ -1139,14 +1136,14 @@ class RebaseManager extends CrossFieldManagerI {
|
|
|
1139
1136
|
id,
|
|
1140
1137
|
count,
|
|
1141
1138
|
]);
|
|
1142
|
-
assert(newFieldIds.length === 0,
|
|
1139
|
+
assert(newFieldIds.length === 0, 0x9c6 /* TODO: Modifying a cross-field key from the new changeset is currently unsupported */);
|
|
1143
1140
|
const baseFieldIds = getFieldsForCrossFieldKey(this.table.baseChange, [
|
|
1144
1141
|
target,
|
|
1145
1142
|
revision,
|
|
1146
1143
|
id,
|
|
1147
1144
|
count,
|
|
1148
1145
|
]);
|
|
1149
|
-
assert(baseFieldIds.length > 0,
|
|
1146
|
+
assert(baseFieldIds.length > 0, 0x9c7 /* Cross field key not registered in base or new change */);
|
|
1150
1147
|
for (const baseFieldId of baseFieldIds) {
|
|
1151
1148
|
this.table.affectedBaseFields.set([baseFieldId.nodeId?.revision, baseFieldId.nodeId?.localId, baseFieldId.field], true);
|
|
1152
1149
|
}
|
|
@@ -1188,7 +1185,7 @@ class ComposeManager extends CrossFieldManagerI {
|
|
|
1188
1185
|
id,
|
|
1189
1186
|
count,
|
|
1190
1187
|
]);
|
|
1191
|
-
assert(baseFieldIds.length > 0,
|
|
1188
|
+
assert(baseFieldIds.length > 0, 0x9c8 /* Cross field key not registered in base or new change */);
|
|
1192
1189
|
for (const baseFieldId of baseFieldIds) {
|
|
1193
1190
|
this.table.pendingCompositions.affectedBaseFields.set([baseFieldId.nodeId?.revision, baseFieldId.nodeId?.localId, baseFieldId.field], true);
|
|
1194
1191
|
}
|
|
@@ -1422,7 +1419,7 @@ function fieldMapFromNodeId(rootFieldMap, nodes, nodeId) {
|
|
|
1422
1419
|
return rootFieldMap;
|
|
1423
1420
|
}
|
|
1424
1421
|
const node = nodeChangeFromId(nodes, nodeId);
|
|
1425
|
-
assert(node.fieldChanges !== undefined,
|
|
1422
|
+
assert(node.fieldChanges !== undefined, 0x9c9 /* Expected node to have field changes */);
|
|
1426
1423
|
return node.fieldChanges;
|
|
1427
1424
|
}
|
|
1428
1425
|
function rebasedFieldIdFromBaseId(table, baseId) {
|
|
@@ -1436,7 +1433,7 @@ function rebasedNodeIdFromBaseNodeId(table, baseId) {
|
|
|
1436
1433
|
}
|
|
1437
1434
|
function nodeChangeFromId(nodes, id) {
|
|
1438
1435
|
const node = getFromChangeAtomIdMap(nodes, id);
|
|
1439
|
-
assert(node !== undefined,
|
|
1436
|
+
assert(node !== undefined, 0x9ca /* Unknown node ID */);
|
|
1440
1437
|
return node;
|
|
1441
1438
|
}
|
|
1442
1439
|
function fieldIdFromFieldIdKey([revision, localId, field]) {
|
|
@@ -1460,7 +1457,7 @@ function replaceFieldIdRevision(fieldId, oldRevisions, newRevision) {
|
|
|
1460
1457
|
}
|
|
1461
1458
|
export function getParentFieldId(changeset, nodeId) {
|
|
1462
1459
|
const parentId = getFromChangeAtomIdMap(changeset.nodeToParent, nodeId);
|
|
1463
|
-
assert(parentId !== undefined,
|
|
1460
|
+
assert(parentId !== undefined, 0x9cb /* Parent field should be defined */);
|
|
1464
1461
|
return normalizeFieldId(parentId, changeset.nodeAliases);
|
|
1465
1462
|
}
|
|
1466
1463
|
export function getFieldsForCrossFieldKey(changeset, [target, revision, id, count]) {
|