@fluidframework/tree 2.22.0 → 2.23.0-323641

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.
Files changed (76) hide show
  1. package/dist/core/tree/anchorSet.d.ts.map +1 -1
  2. package/dist/core/tree/anchorSet.js +15 -11
  3. package/dist/core/tree/anchorSet.js.map +1 -1
  4. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  5. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +5 -6
  6. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  7. package/dist/packageVersion.d.ts +1 -1
  8. package/dist/packageVersion.d.ts.map +1 -1
  9. package/dist/packageVersion.js +1 -1
  10. package/dist/packageVersion.js.map +1 -1
  11. package/dist/shared-tree/sharedTree.d.ts +2 -1
  12. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  13. package/dist/shared-tree/sharedTree.js +3 -0
  14. package/dist/shared-tree/sharedTree.js.map +1 -1
  15. package/dist/shared-tree-core/editManager.d.ts +11 -2
  16. package/dist/shared-tree-core/editManager.d.ts.map +1 -1
  17. package/dist/shared-tree-core/editManager.js +63 -28
  18. package/dist/shared-tree-core/editManager.js.map +1 -1
  19. package/dist/shared-tree-core/resubmitMachine.d.ts +2 -0
  20. package/dist/shared-tree-core/resubmitMachine.d.ts.map +1 -1
  21. package/dist/shared-tree-core/resubmitMachine.js.map +1 -1
  22. package/dist/shared-tree-core/sharedTreeCore.d.ts +9 -1
  23. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  24. package/dist/shared-tree-core/sharedTreeCore.js +42 -7
  25. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  26. package/dist/util/index.d.ts +1 -1
  27. package/dist/util/index.d.ts.map +1 -1
  28. package/dist/util/index.js +3 -2
  29. package/dist/util/index.js.map +1 -1
  30. package/dist/util/utils.d.ts +16 -0
  31. package/dist/util/utils.d.ts.map +1 -1
  32. package/dist/util/utils.js +29 -1
  33. package/dist/util/utils.js.map +1 -1
  34. package/lib/core/tree/anchorSet.d.ts.map +1 -1
  35. package/lib/core/tree/anchorSet.js +16 -12
  36. package/lib/core/tree/anchorSet.js.map +1 -1
  37. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  38. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +6 -7
  39. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  40. package/lib/packageVersion.d.ts +1 -1
  41. package/lib/packageVersion.d.ts.map +1 -1
  42. package/lib/packageVersion.js +1 -1
  43. package/lib/packageVersion.js.map +1 -1
  44. package/lib/shared-tree/sharedTree.d.ts +2 -1
  45. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  46. package/lib/shared-tree/sharedTree.js +3 -0
  47. package/lib/shared-tree/sharedTree.js.map +1 -1
  48. package/lib/shared-tree-core/editManager.d.ts +11 -2
  49. package/lib/shared-tree-core/editManager.d.ts.map +1 -1
  50. package/lib/shared-tree-core/editManager.js +63 -28
  51. package/lib/shared-tree-core/editManager.js.map +1 -1
  52. package/lib/shared-tree-core/resubmitMachine.d.ts +2 -0
  53. package/lib/shared-tree-core/resubmitMachine.d.ts.map +1 -1
  54. package/lib/shared-tree-core/resubmitMachine.js.map +1 -1
  55. package/lib/shared-tree-core/sharedTreeCore.d.ts +9 -1
  56. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  57. package/lib/shared-tree-core/sharedTreeCore.js +42 -7
  58. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  59. package/lib/util/index.d.ts +1 -1
  60. package/lib/util/index.d.ts.map +1 -1
  61. package/lib/util/index.js +1 -1
  62. package/lib/util/index.js.map +1 -1
  63. package/lib/util/utils.d.ts +16 -0
  64. package/lib/util/utils.d.ts.map +1 -1
  65. package/lib/util/utils.js +27 -0
  66. package/lib/util/utils.js.map +1 -1
  67. package/package.json +23 -23
  68. package/src/core/tree/anchorSet.ts +34 -24
  69. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +9 -6
  70. package/src/packageVersion.ts +1 -1
  71. package/src/shared-tree/sharedTree.ts +5 -0
  72. package/src/shared-tree-core/editManager.ts +78 -41
  73. package/src/shared-tree-core/resubmitMachine.ts +2 -0
  74. package/src/shared-tree-core/sharedTreeCore.ts +58 -12
  75. package/src/util/index.ts +1 -0
  76. package/src/util/utils.ts +32 -0
@@ -5,5 +5,5 @@
5
5
  * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY
6
6
  */
7
7
  export declare const pkgName = "@fluidframework/tree";
8
- export declare const pkgVersion = "2.22.0";
8
+ export declare const pkgVersion = "2.23.0-323641";
9
9
  //# sourceMappingURL=packageVersion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"packageVersion.d.ts","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,OAAO,yBAAyB,CAAC;AAC9C,eAAO,MAAM,UAAU,WAAW,CAAC"}
1
+ {"version":3,"file":"packageVersion.d.ts","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,OAAO,yBAAyB,CAAC;AAC9C,eAAO,MAAM,UAAU,kBAAkB,CAAC"}
@@ -8,5 +8,5 @@
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.pkgVersion = exports.pkgName = void 0;
10
10
  exports.pkgName = "@fluidframework/tree";
11
- exports.pkgVersion = "2.22.0";
11
+ exports.pkgVersion = "2.23.0-323641";
12
12
  //# sourceMappingURL=packageVersion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,OAAO,GAAG,sBAAsB,CAAC;AACjC,QAAA,UAAU,GAAG,QAAQ,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/tree\";\nexport const pkgVersion = \"2.22.0\";\n"]}
1
+ {"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,OAAO,GAAG,sBAAsB,CAAC;AACjC,QAAA,UAAU,GAAG,eAAe,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/tree\";\nexport const pkgVersion = \"2.23.0-323641\";\n"]}
@@ -6,7 +6,7 @@ import type { ErasedType } from "@fluidframework/core-interfaces/internal";
6
6
  import type { IChannelAttributes, IFluidDataStoreRuntime, IChannelStorageService, IChannel } from "@fluidframework/datastore-definitions/internal";
7
7
  import { SharedObject, type IFluidSerializer, type ISharedObject } from "@fluidframework/shared-object-base/internal";
8
8
  import type { IIdCompressor } from "@fluidframework/id-compressor";
9
- import type { ITelemetryContext, IExperimentalIncrementalSummaryContext, ISummaryTreeWithStats } from "@fluidframework/runtime-definitions/internal";
9
+ import type { ITelemetryContext, IExperimentalIncrementalSummaryContext, ISummaryTreeWithStats, IRuntimeMessageCollection } from "@fluidframework/runtime-definitions/internal";
10
10
  import type { ISequencedDocumentMessage } from "@fluidframework/driver-definitions/internal";
11
11
  import { type ICodecOptions } from "../codec/index.js";
12
12
  import { type IEditableForest, type JsonableTree, type TreeStoredSchema, TreeStoredSchemaRepository, type TreeStoredSchemaSubscription } from "../core/index.js";
@@ -89,6 +89,7 @@ export declare class SharedTree extends SharedObject implements ISharedTree, Wit
89
89
  get editor(): SharedTreeEditBuilder;
90
90
  summarizeCore(serializer: IFluidSerializer, telemetryContext?: ITelemetryContext, incrementalSummaryContext?: IExperimentalIncrementalSummaryContext): ISummaryTreeWithStats;
91
91
  protected processCore(message: ISequencedDocumentMessage, local: boolean, localOpMetadata: unknown): void;
92
+ protected processMessagesCore(messagesCollection: IRuntimeMessageCollection): void;
92
93
  protected onDisconnect(): void;
93
94
  exportVerbose(): VerboseTree | undefined;
94
95
  exportSimpleSchema(): SimpleTreeSchema;
@@ -1 +1 @@
1
- {"version":3,"file":"sharedTree.d.ts","sourceRoot":"","sources":["../../src/shared-tree/sharedTree.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sharedTree.d.ts","sourceRoot":"","sources":["../../src/shared-tree/sharedTree.ts"],"names":[],"mappings":"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"}
@@ -106,6 +106,9 @@ class SharedTree extends internal_2.SharedObject {
106
106
  processCore(message, local, localOpMetadata) {
107
107
  this.kernel.processCore(message, local, localOpMetadata);
108
108
  }
109
+ processMessagesCore(messagesCollection) {
110
+ this.kernel.processMessagesCore(messagesCollection);
111
+ }
109
112
  onDisconnect() { }
110
113
  exportVerbose() {
111
114
  return this.kernel.exportVerbose();
@@ -1 +1 @@
1
- {"version":3,"file":"sharedTree.js","sourceRoot":"","sources":["../../src/shared-tree/sharedTree.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 {\n\tErasedType,\n\tIFluidHandle,\n\tIFluidLoadable,\n} from \"@fluidframework/core-interfaces/internal\";\nimport type {\n\tIChannelAttributes,\n\tIFluidDataStoreRuntime,\n\tIChannelStorageService,\n\tIChannel,\n} from \"@fluidframework/datastore-definitions/internal\";\nimport {\n\tSharedObject,\n\ttype IFluidSerializer,\n\ttype ISharedObject,\n} from \"@fluidframework/shared-object-base/internal\";\nimport {\n\tUsageError,\n\ttype ITelemetryLoggerExt,\n} from \"@fluidframework/telemetry-utils/internal\";\nimport type { IIdCompressor } from \"@fluidframework/id-compressor\";\nimport type {\n\tITelemetryContext,\n\tIExperimentalIncrementalSummaryContext,\n\tISummaryTreeWithStats,\n} from \"@fluidframework/runtime-definitions/internal\";\nimport type { ISequencedDocumentMessage } from \"@fluidframework/driver-definitions/internal\";\n\nimport { type ICodecOptions, noopValidator } from \"../codec/index.js\";\nimport {\n\ttype GraphCommit,\n\ttype IEditableForest,\n\ttype ITreeCursor,\n\ttype JsonableTree,\n\tLeafNodeStoredSchema,\n\tMapNodeStoredSchema,\n\tObjectNodeStoredSchema,\n\tRevisionTagCodec,\n\ttype TaggedChange,\n\ttype TreeFieldStoredSchema,\n\ttype TreeNodeSchemaIdentifier,\n\ttype TreeNodeStoredSchema,\n\ttype TreeStoredSchema,\n\tTreeStoredSchemaRepository,\n\ttype TreeStoredSchemaSubscription,\n\tmakeDetachedFieldIndex,\n\tmoveToDetachedField,\n} from \"../core/index.js\";\n\nimport {\n\tDetachedFieldIndexSummarizer,\n\tFieldKinds,\n\tForestSummarizer,\n\tSchemaSummarizer,\n\tTreeCompressionStrategy,\n\tbuildChunkedForest,\n\tbuildForest,\n\tdefaultSchemaPolicy,\n\tjsonableTreeFromFieldCursor,\n\tmakeFieldBatchCodec,\n\tmakeMitigatedChangeFamily,\n\tmakeTreeChunker,\n} from \"../feature-libraries/index.js\";\nimport {\n\ttype ClonableSchemaAndPolicy,\n\tDefaultResubmitMachine,\n\ttype ExplicitCoreCodecVersions,\n\tSharedTreeCore,\n} from \"../shared-tree-core/index.js\";\nimport {\n\ttype ITree,\n\ttype ImplicitFieldSchema,\n\tNodeKind,\n\ttype ReadSchema,\n\ttype SimpleFieldSchema,\n\ttype SimpleTreeSchema,\n\ttype TreeView,\n\ttype TreeViewAlpha,\n\ttype TreeViewConfiguration,\n\ttype UnsafeUnknownSchema,\n\ttype VerboseTree,\n\ttryStoredSchemaAsArray,\n\ttype SimpleNodeSchema,\n\tcustomFromCursorStored,\n\tFieldKind,\n\ttype CustomTreeNode,\n\ttype CustomTreeValue,\n\ttype ITreeAlpha,\n} from \"../simple-tree/index.js\";\n\nimport { SchematizingSimpleTreeView } from \"./schematizingTreeView.js\";\nimport { SharedTreeReadonlyChangeEnricher } from \"./sharedTreeChangeEnricher.js\";\nimport { SharedTreeChangeFamily } from \"./sharedTreeChangeFamily.js\";\nimport type { SharedTreeChange } from \"./sharedTreeChangeTypes.js\";\nimport type { SharedTreeEditBuilder } from \"./sharedTreeEditBuilder.js\";\nimport { type TreeCheckout, type BranchableTree, createTreeCheckout } from \"./treeCheckout.js\";\nimport {\n\tBreakable,\n\tbreakingClass,\n\tfail,\n\tthrowIfBroken,\n\ttype WithBreakable,\n} from \"../util/index.js\";\n\n/**\n * Copy of data from an {@link ITreePrivate} at some point in time.\n * @remarks\n * This is unrelated to Fluids concept of \"snapshots\".\n */\nexport interface SharedTreeContentSnapshot {\n\t/**\n\t * The schema stored in the document.\n\t *\n\t * @remarks\n\t * Edits to the schema can mutate the schema stored of the tree which took this snapshot (but this snapshot will remain the same)\n\t * This is mainly useful for debugging cases where schematize reports an incompatible view schema.\n\t */\n\treadonly schema: TreeStoredSchema;\n\t/**\n\t * All {@link TreeStatus.InDocument} content.\n\t */\n\treadonly tree: JsonableTree[];\n\t/**\n\t * All {@link TreeStatus.Removed} content.\n\t */\n\treadonly removed: [string | number | undefined, number, JsonableTree][];\n}\n\n/**\n * Information about a Fluid channel.\n * @privateRemarks\n * This is distinct from {@link IChannel} as it omits the APIs used by the runtime to manage the channel and instead only has things which are useful (and safe) to expose to users of the channel.\n * @internal\n */\nexport type IChannelView = Pick<IChannel, \"id\" | \"attributes\" | \"isAttached\">;\n\n/**\n * {@link ITree} extended with some non-public APIs.\n * @internal\n */\nexport interface ITreeInternal extends IChannelView, ITreeAlpha {}\n\n/**\n * {@link ITreeInternal} extended with some non-exported APIs.\n * @remarks\n * This allows access to the tree content using the internal data model used at the storage and \"flex\" layers,\n * and should only be needed for testing and debugging this package's internals.\n */\nexport interface ITreePrivate extends ITreeInternal {\n\t/**\n\t * Provides a copy of the current content of the tree.\n\t * This can be useful for inspecting the tree when no suitable view schema is available.\n\t * This is only intended for use in testing and exceptional code paths: it is not performant.\n\t *\n\t * This does not include everything that is included in a tree summary, since information about how to merge future edits is omitted.\n\t */\n\tcontentSnapshot(): SharedTreeContentSnapshot;\n}\n\n/**\n * {@link ITreePrivate} extended with ISharedObject.\n * @remarks\n * This is used when integration testing this package with the Fluid runtime as it exposes the APIs the runtime consumes to manipulate the tree.\n */\nexport interface ISharedTree extends ISharedObject, ITreePrivate {}\n\n/**\n * Has an entry for each codec which writes an explicit version into its data.\n *\n * This is used to map the single API entrypoint controlling the format {@link SharedTreeOptions.formatVersion}\n * to a list of write versions that for each codec that should be used for that format.\n *\n * Note that all explicitly versioned codecs should be using the format version from the data to read encoded data.\n *\n * TODO: Plumb these write versions into forest, schema, detached field index codec creation.\n */\ninterface ExplicitCodecVersions extends ExplicitCoreCodecVersions {\n\tforest: number;\n\tschema: number;\n\tdetachedFieldIndex: number;\n\tfieldBatch: number;\n}\n\nconst formatVersionToTopLevelCodecVersions = new Map<number, ExplicitCodecVersions>([\n\t[\n\t\t1,\n\t\t{ forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 1, message: 1, fieldBatch: 1 },\n\t],\n\t[\n\t\t2,\n\t\t{ forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 2, message: 2, fieldBatch: 1 },\n\t],\n\t[\n\t\t3,\n\t\t{ forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 3, message: 3, fieldBatch: 1 },\n\t],\n\t[\n\t\t4,\n\t\t{ forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 4, message: 4, fieldBatch: 1 },\n\t],\n]);\n\nfunction getCodecVersions(formatVersion: number): ExplicitCodecVersions {\n\tconst versions = formatVersionToTopLevelCodecVersions.get(formatVersion);\n\tassert(versions !== undefined, 0x90e /* Unknown format version */);\n\treturn versions;\n}\n\n/**\n * Shared object wrapping {@link SharedTreeKernel}.\n */\nexport class SharedTree extends SharedObject implements ISharedTree, WithBreakable {\n\tpublic readonly breaker: Breakable = new Breakable(\"Shared Tree\");\n\n\tpublic get checkout(): TreeCheckout {\n\t\treturn this.kernel.checkout;\n\t}\n\tpublic get storedSchema(): TreeStoredSchemaRepository {\n\t\treturn this.checkout.storedSchema;\n\t}\n\n\tprivate readonly kernel: SharedTreeKernel;\n\n\tpublic constructor(\n\t\tid: string,\n\t\truntime: IFluidDataStoreRuntime,\n\t\tattributes: IChannelAttributes,\n\t\toptionsParam: SharedTreeOptionsInternal,\n\t\ttelemetryContextPrefix: string = \"fluid_sharedTree_\",\n\t) {\n\t\tsuper(id, runtime, attributes, telemetryContextPrefix);\n\t\tif (runtime.idCompressor === undefined) {\n\t\t\tthrow new UsageError(\"IdCompressor must be enabled to use SharedTree\");\n\t\t}\n\t\tthis.kernel = new SharedTreeKernel(\n\t\t\tthis.breaker,\n\t\t\tthis,\n\t\t\tthis.serializer,\n\t\t\t(content, localOpMetadata) => this.submitLocalMessage(content, localOpMetadata),\n\t\t\t() => this.deltaManager.lastSequenceNumber,\n\t\t\tthis.logger,\n\t\t\truntime.idCompressor,\n\t\t\toptionsParam,\n\t\t);\n\t}\n\n\tpublic get editor(): SharedTreeEditBuilder {\n\t\treturn this.kernel.getEditor();\n\t}\n\n\tpublic summarizeCore(\n\t\tserializer: IFluidSerializer,\n\t\ttelemetryContext?: ITelemetryContext,\n\t\tincrementalSummaryContext?: IExperimentalIncrementalSummaryContext,\n\t): ISummaryTreeWithStats {\n\t\treturn this.kernel.summarizeCore(serializer, telemetryContext, incrementalSummaryContext);\n\t}\n\n\tprotected processCore(\n\t\tmessage: ISequencedDocumentMessage,\n\t\tlocal: boolean,\n\t\tlocalOpMetadata: unknown,\n\t): void {\n\t\tthis.kernel.processCore(message, local, localOpMetadata);\n\t}\n\n\tprotected onDisconnect(): void {}\n\n\tpublic exportVerbose(): VerboseTree | undefined {\n\t\treturn this.kernel.exportVerbose();\n\t}\n\n\tpublic exportSimpleSchema(): SimpleTreeSchema {\n\t\treturn this.kernel.exportSimpleSchema();\n\t}\n\n\tpublic contentSnapshot(): SharedTreeContentSnapshot {\n\t\treturn this.kernel.contentSnapshot();\n\t}\n\n\t// For the new TreeViewAlpha API\n\tpublic viewWith<TRoot extends ImplicitFieldSchema | UnsafeUnknownSchema>(\n\t\tconfig: TreeViewConfiguration<ReadSchema<TRoot>>,\n\t): SchematizingSimpleTreeView<TRoot> & TreeView<ReadSchema<TRoot>>;\n\n\t// For the old TreeView API\n\tpublic viewWith<TRoot extends ImplicitFieldSchema>(\n\t\tconfig: TreeViewConfiguration<TRoot>,\n\t): SchematizingSimpleTreeView<TRoot> & TreeView<TRoot>;\n\n\tpublic viewWith<TRoot extends ImplicitFieldSchema | UnsafeUnknownSchema>(\n\t\tconfig: TreeViewConfiguration<ReadSchema<TRoot>>,\n\t): SchematizingSimpleTreeView<TRoot> & TreeView<ReadSchema<TRoot>> {\n\t\treturn this.kernel.viewWith(config);\n\t}\n\n\tprotected override async loadCore(services: IChannelStorageService): Promise<void> {\n\t\tawait this.kernel.loadCore(services);\n\t}\n\n\tprotected override didAttach(): void {\n\t\tthis.kernel.didAttach();\n\t}\n\n\tprotected override applyStashedOp(\n\t\t...args: Parameters<\n\t\t\tSharedTreeCore<SharedTreeEditBuilder, SharedTreeChange>[\"applyStashedOp\"]\n\t\t>\n\t): void {\n\t\tthis.kernel.applyStashedOp(...args);\n\t}\n\n\tprotected override reSubmitCore(\n\t\t...args: Parameters<\n\t\t\tSharedTreeCore<SharedTreeEditBuilder, SharedTreeChange>[\"reSubmitCore\"]\n\t\t>\n\t): void {\n\t\tthis.kernel.reSubmitCore(...args);\n\t}\n}\n\n/**\n * SharedTreeCore, configured with a good set of indexes and field kinds which will maintain compatibility over time.\n *\n * TODO: detail compatibility requirements.\n */\n@breakingClass\nclass SharedTreeKernel extends SharedTreeCore<SharedTreeEditBuilder, SharedTreeChange> {\n\tpublic readonly checkout: TreeCheckout;\n\tpublic get storedSchema(): TreeStoredSchemaRepository {\n\t\treturn this.checkout.storedSchema;\n\t}\n\n\tpublic constructor(\n\t\tbreaker: Breakable,\n\t\tsharedObject: IChannelView & IFluidLoadable,\n\t\tserializer: IFluidSerializer,\n\t\tsubmitLocalMessage: (content: unknown, localOpMetadata?: unknown) => void,\n\t\tlastSequenceNumber: () => number | undefined,\n\t\tlogger: ITelemetryLoggerExt | undefined,\n\t\tidCompressor: IIdCompressor,\n\t\toptionsParam: SharedTreeOptionsInternal,\n\t) {\n\t\tconst options = { ...defaultSharedTreeOptions, ...optionsParam };\n\t\tconst codecVersions = getCodecVersions(options.formatVersion);\n\t\tconst schema = new TreeStoredSchemaRepository();\n\t\tconst forest = buildConfiguredForest(options.forest, schema, idCompressor);\n\t\tconst revisionTagCodec = new RevisionTagCodec(idCompressor);\n\t\tconst removedRoots = makeDetachedFieldIndex(\n\t\t\t\"repair\",\n\t\t\trevisionTagCodec,\n\t\t\tidCompressor,\n\t\t\toptions,\n\t\t);\n\t\tconst schemaSummarizer = new SchemaSummarizer(schema, options, {\n\t\t\tgetCurrentSeq: lastSequenceNumber,\n\t\t});\n\t\tconst fieldBatchCodec = makeFieldBatchCodec(options, codecVersions.fieldBatch);\n\n\t\tconst encoderContext = {\n\t\t\tschema: {\n\t\t\t\tschema,\n\t\t\t\tpolicy: defaultSchemaPolicy,\n\t\t\t},\n\t\t\tencodeType: options.treeEncodeType,\n\t\t\toriginatorId: idCompressor.localSessionId,\n\t\t\tidCompressor,\n\t\t};\n\t\tconst forestSummarizer = new ForestSummarizer(\n\t\t\tforest,\n\t\t\trevisionTagCodec,\n\t\t\tfieldBatchCodec,\n\t\t\tencoderContext,\n\t\t\toptions,\n\t\t\tidCompressor,\n\t\t);\n\t\tconst removedRootsSummarizer = new DetachedFieldIndexSummarizer(removedRoots);\n\t\tconst innerChangeFamily = new SharedTreeChangeFamily(\n\t\t\trevisionTagCodec,\n\t\t\tfieldBatchCodec,\n\t\t\toptions,\n\t\t\toptions.treeEncodeType,\n\t\t\tidCompressor,\n\t\t);\n\t\tconst changeFamily = makeMitigatedChangeFamily(\n\t\t\tinnerChangeFamily,\n\t\t\tSharedTreeChangeFamily.emptyChange,\n\t\t\t(error: unknown) => {\n\t\t\t\t// TODO:6344 Add telemetry for these errors.\n\t\t\t\t// Rethrowing the error has a different effect depending on the context in which the\n\t\t\t\t// ChangeFamily was invoked:\n\t\t\t\t// - If the ChangeFamily was invoked as part of incoming op processing, rethrowing the error\n\t\t\t\t// will cause the runtime to disconnect the client, log a severe error, and not reconnect.\n\t\t\t\t// This will not cause the host application to crash because it is not on the stack at that time.\n\t\t\t\t// TODO: let the host application know that the client is now disconnected.\n\t\t\t\t// - If the ChangeFamily was invoked as part of dealing with a local change, rethrowing the\n\t\t\t\t// error will cause the host application to crash. This is not ideal, but is better than\n\t\t\t\t// letting the application either send an invalid change to the server or allowing the\n\t\t\t\t// application to continue working when its local branches contain edits that cannot be\n\t\t\t\t// reflected in its views.\n\t\t\t\t// The best course of action for a host application in such a state is to restart.\n\t\t\t\t// TODO: let the host application know about this situation and provide a way to\n\t\t\t\t// programmatically reload the SharedTree container.\n\t\t\t\tthrow error;\n\t\t\t},\n\t\t);\n\t\tconst changeEnricher = new SharedTreeReadonlyChangeEnricher(forest, schema, removedRoots);\n\t\tsuper(\n\t\t\tbreaker,\n\t\t\tsharedObject,\n\t\t\tserializer,\n\t\t\tsubmitLocalMessage,\n\t\t\tlogger,\n\t\t\t[schemaSummarizer, forestSummarizer, removedRootsSummarizer],\n\t\t\tchangeFamily,\n\t\t\toptions,\n\t\t\tcodecVersions,\n\t\t\tidCompressor,\n\t\t\tschema,\n\t\t\tdefaultSchemaPolicy,\n\t\t\tnew DefaultResubmitMachine(\n\t\t\t\t(change: TaggedChange<SharedTreeChange>) =>\n\t\t\t\t\tchangeFamily.rebaser.invert(change, true, this.mintRevisionTag()),\n\t\t\t\tchangeEnricher,\n\t\t\t),\n\t\t\tchangeEnricher,\n\t\t);\n\t\tconst localBranch = this.getLocalBranch();\n\t\tthis.checkout = createTreeCheckout(idCompressor, this.mintRevisionTag, revisionTagCodec, {\n\t\t\tbranch: localBranch,\n\t\t\tchangeFamily,\n\t\t\tschema,\n\t\t\tforest,\n\t\t\tfieldBatchCodec,\n\t\t\tremovedRoots,\n\t\t\tchunkCompressionStrategy: options.treeEncodeType,\n\t\t\tlogger,\n\t\t\tbreaker: this.breaker,\n\t\t\tdisposeForksAfterTransaction: options.disposeForksAfterTransaction,\n\t\t});\n\n\t\tthis.checkout.transaction.events.on(\"started\", () => {\n\t\t\tif (sharedObject.isAttached()) {\n\t\t\t\t// It is currently forbidden to attach during a transaction, so transaction state changes can be ignored until after attaching.\n\t\t\t\tthis.commitEnricher.startTransaction();\n\t\t\t}\n\t\t});\n\t\tthis.checkout.transaction.events.on(\"aborting\", () => {\n\t\t\tif (sharedObject.isAttached()) {\n\t\t\t\t// It is currently forbidden to attach during a transaction, so transaction state changes can be ignored until after attaching.\n\t\t\t\tthis.commitEnricher.abortTransaction();\n\t\t\t}\n\t\t});\n\t\tthis.checkout.transaction.events.on(\"committing\", () => {\n\t\t\tif (sharedObject.isAttached()) {\n\t\t\t\t// It is currently forbidden to attach during a transaction, so transaction state changes can be ignored until after attaching.\n\t\t\t\tthis.commitEnricher.commitTransaction();\n\t\t\t}\n\t\t});\n\t\tthis.checkout.events.on(\"beforeBatch\", (event) => {\n\t\t\tif (event.type === \"append\" && sharedObject.isAttached()) {\n\t\t\t\tif (this.checkout.transaction.isInProgress()) {\n\t\t\t\t\tthis.commitEnricher.addTransactionCommits(event.newCommits);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic exportVerbose(): VerboseTree | undefined {\n\t\tconst cursor = this.checkout.forest.allocateCursor(\"contentSnapshot\");\n\t\ttry {\n\t\t\tmoveToDetachedField(this.checkout.forest, cursor);\n\t\t\tconst length = cursor.getFieldLength();\n\t\t\tif (length === 0) {\n\t\t\t\treturn undefined;\n\t\t\t} else if (length === 1) {\n\t\t\t\tcursor.enterNode(0);\n\t\t\t\treturn verboseFromCursor(cursor, this.storedSchema.nodeSchema);\n\t\t\t} else {\n\t\t\t\tfail(\"Invalid document root length\");\n\t\t\t}\n\t\t} finally {\n\t\t\tcursor.free();\n\t\t}\n\t}\n\n\tpublic exportSimpleSchema(): SimpleTreeSchema {\n\t\treturn {\n\t\t\t...exportSimpleFieldSchemaStored(this.storedSchema.rootFieldSchema),\n\t\t\tdefinitions: new Map(\n\t\t\t\t[...this.storedSchema.nodeSchema].map(([key, schema]) => {\n\t\t\t\t\treturn [key, exportSimpleNodeSchemaStored(schema)];\n\t\t\t\t}),\n\t\t\t),\n\t\t};\n\t}\n\n\t@throwIfBroken\n\tpublic contentSnapshot(): SharedTreeContentSnapshot {\n\t\tconst cursor = this.checkout.forest.allocateCursor(\"contentSnapshot\");\n\t\ttry {\n\t\t\tmoveToDetachedField(this.checkout.forest, cursor);\n\t\t\treturn {\n\t\t\t\tschema: this.storedSchema.clone(),\n\t\t\t\ttree: jsonableTreeFromFieldCursor(cursor),\n\t\t\t\tremoved: this.checkout.getRemovedRoots(),\n\t\t\t};\n\t\t} finally {\n\t\t\tcursor.free();\n\t\t}\n\t}\n\n\t// For the new TreeViewAlpha API\n\tpublic viewWith<TRoot extends ImplicitFieldSchema | UnsafeUnknownSchema>(\n\t\tconfig: TreeViewConfiguration<ReadSchema<TRoot>>,\n\t): SchematizingSimpleTreeView<TRoot> & TreeView<ReadSchema<TRoot>>;\n\n\t// For the old TreeView API\n\tpublic viewWith<TRoot extends ImplicitFieldSchema>(\n\t\tconfig: TreeViewConfiguration<TRoot>,\n\t): SchematizingSimpleTreeView<TRoot> & TreeView<TRoot>;\n\n\tpublic viewWith<TRoot extends ImplicitFieldSchema | UnsafeUnknownSchema>(\n\t\tconfig: TreeViewConfiguration<ReadSchema<TRoot>>,\n\t): SchematizingSimpleTreeView<TRoot> & TreeView<ReadSchema<TRoot>> {\n\t\treturn this.checkout.viewWith(config) as SchematizingSimpleTreeView<TRoot> &\n\t\t\tTreeView<ReadSchema<TRoot>>;\n\t}\n\n\tpublic override async loadCore(services: IChannelStorageService): Promise<void> {\n\t\tawait super.loadCore(services);\n\t\tthis.checkout.load();\n\t}\n\n\tpublic override didAttach(): void {\n\t\tif (this.checkout.transaction.isInProgress()) {\n\t\t\t// Attaching during a transaction is not currently supported.\n\t\t\t// At least part of of the system is known to not handle this case correctly - commit enrichment - and there may be others.\n\t\t\tthrow new UsageError(\n\t\t\t\t\"Cannot attach while a transaction is in progress. Commit or abort the transaction before attaching.\",\n\t\t\t);\n\t\t}\n\t\tsuper.didAttach();\n\t}\n\n\tpublic override applyStashedOp(\n\t\t...args: Parameters<\n\t\t\tSharedTreeCore<SharedTreeEditBuilder, SharedTreeChange>[\"applyStashedOp\"]\n\t\t>\n\t): void {\n\t\tassert(\n\t\t\t!this.checkout.transaction.isInProgress(),\n\t\t\t0x674 /* Unexpected transaction is open while applying stashed ops */,\n\t\t);\n\t\tsuper.applyStashedOp(...args);\n\t}\n\n\tprotected override submitCommit(\n\t\tcommit: GraphCommit<SharedTreeChange>,\n\t\tschemaAndPolicy: ClonableSchemaAndPolicy,\n\t\tisResubmit: boolean,\n\t): void {\n\t\tassert(\n\t\t\t!this.checkout.transaction.isInProgress(),\n\t\t\t0xaa6 /* Cannot submit a commit while a transaction is in progress */,\n\t\t);\n\t\tif (isResubmit) {\n\t\t\treturn super.submitCommit(commit, schemaAndPolicy, isResubmit);\n\t\t}\n\n\t\t// Refrain from submitting new commits until they are validated by the checkout.\n\t\t// This is not a strict requirement for correctness in our system, but in the event that there is a bug when applying commits to the checkout\n\t\t// that causes a crash (e.g. in the forest), this will at least prevent this client from sending the problematic commit to any other clients.\n\t\tthis.checkout.onCommitValid(commit, () =>\n\t\t\tsuper.submitCommit(commit, schemaAndPolicy, isResubmit),\n\t\t);\n\t}\n}\n\n/**\n * Get a {@link BranchableTree} from a {@link ITree}.\n * @remarks The branch can be used for \"version control\"-style coordination of edits on the tree.\n * @privateRemarks This function will be removed if/when the branching API becomes public,\n * but it (or something like it) is necessary in the meantime to prevent the alpha types from being exposed as public.\n * @alpha\n * @deprecated This API is superseded by {@link TreeBranch}, which should be used instead.\n */\nexport function getBranch(tree: ITree): BranchableTree;\n/**\n * Get a {@link BranchableTree} from a {@link TreeView}.\n * @remarks The branch can be used for \"version control\"-style coordination of edits on the tree.\n * Branches are currently an unstable \"alpha\" API and are subject to change in the future.\n * @privateRemarks This function will be removed if/when the branching API becomes public,\n * but it (or something like it) is necessary in the meantime to prevent the alpha types from being exposed as public.\n * @alpha\n * @deprecated This API is superseded by {@link TreeBranch}, which should be used instead.\n */\nexport function getBranch<T extends ImplicitFieldSchema | UnsafeUnknownSchema>(\n\tview: TreeViewAlpha<T>,\n): BranchableTree;\nexport function getBranch<T extends ImplicitFieldSchema | UnsafeUnknownSchema>(\n\ttreeOrView: ITree | TreeViewAlpha<T>,\n): BranchableTree {\n\tassert(\n\t\ttreeOrView instanceof SharedTree || treeOrView instanceof SchematizingSimpleTreeView,\n\t\t0xa48 /* Unsupported implementation */,\n\t);\n\tconst checkout: TreeCheckout = treeOrView.checkout;\n\t// This cast is safe so long as TreeCheckout supports all the operations on the branch interface.\n\treturn checkout as unknown as BranchableTree;\n}\n\n/**\n * Format versions supported by SharedTree.\n *\n * Each version documents a required minimum version of the \\@fluidframework/tree package.\n * @alpha\n */\nexport const SharedTreeFormatVersion = {\n\t/**\n\t * Requires \\@fluidframework/tree \\>= 2.0.0.\n\t *\n\t * @deprecated - FF does not currently plan on supporting this format long-term.\n\t * Do not write production documents using this format, as they may not be loadable in the future.\n\t */\n\tv1: 1,\n\n\t/**\n\t * Requires \\@fluidframework/tree \\>= 2.0.0.\n\t */\n\tv2: 2,\n\n\t/**\n\t * Requires \\@fluidframework/tree \\>= 2.0.0.\n\t */\n\tv3: 3,\n} as const;\n\n/**\n * Format versions supported by SharedTree.\n *\n * Each version documents a required minimum version of the \\@fluidframework/tree package.\n * @alpha\n * @privateRemarks\n * See packages/dds/tree/docs/main/compatibility.md for information on how to add support for a new format.\n *\n * TODO: Before this gets promoted past Alpha,\n * a separate abstraction more suited for use in the public API should be adopted rather than reusing the same types used internally.\n * Such an abstraction should probably be in the form of a Fluid-Framework wide compatibility enum.\n */\nexport type SharedTreeFormatVersion = typeof SharedTreeFormatVersion;\n\n/**\n * Configuration options for SharedTree.\n * @alpha\n */\nexport type SharedTreeOptions = Partial<ICodecOptions> &\n\tPartial<SharedTreeFormatOptions> &\n\tForestOptions;\n\nexport interface SharedTreeOptionsInternal extends SharedTreeOptions {\n\tdisposeForksAfterTransaction?: boolean;\n}\n/**\n * Configuration options for SharedTree's internal tree storage.\n * @alpha\n */\nexport interface ForestOptions {\n\t/**\n\t * The {@link ForestType} indicating which forest type should be created for the SharedTree.\n\t */\n\treadonly forest?: ForestType;\n}\n\n/**\n * Options for configuring the persisted format SharedTree uses.\n * @alpha\n */\nexport interface SharedTreeFormatOptions {\n\t/**\n\t * See {@link TreeCompressionStrategy}.\n\t * default: TreeCompressionStrategy.Compressed\n\t */\n\ttreeEncodeType: TreeCompressionStrategy;\n\t/**\n\t * The format version SharedTree should use to persist documents.\n\t *\n\t * This option has compatibility implications for applications using SharedTree.\n\t * Each version documents a required minimum version of \\@fluidframework/tree.\n\t * If this minimum version fails to be met, the SharedTree may fail to load.\n\t * To be safe, application authors should verify that they have saturated this version\n\t * of \\@fluidframework/tree in their ecosystem before changing the format version.\n\t *\n\t * This option defaults to SharedTreeFormatVersion.v2.\n\t */\n\tformatVersion: SharedTreeFormatVersion[keyof SharedTreeFormatVersion];\n}\n\n/**\n * Used to distinguish between different forest types.\n * @remarks\n * Current options are {@link ForestTypeReference}, {@link ForestTypeOptimized} and {@link ForestTypeExpensiveDebug}.\n * @sealed @alpha\n */\nexport interface ForestType extends ErasedType<\"ForestType\"> {}\n\n/**\n * Reference implementation of forest.\n * @remarks\n * A simple implementation with minimal complexity and moderate debuggability, validation and performance.\n * @privateRemarks\n * The \"ObjectForest\" forest type.\n * @alpha\n */\nexport const ForestTypeReference = toForestType(() => buildForest());\n\n/**\n * Optimized implementation of forest.\n * @remarks\n * A complex optimized forest implementation, which has minimal validation and debuggability to optimize for performance.\n * Uses an internal representation optimized for size designed to scale to larger datasets with reduced overhead.\n * @privateRemarks\n * The \"ChunkedForest\" forest type.\n * @alpha\n */\nexport const ForestTypeOptimized = toForestType(\n\t(schema: TreeStoredSchemaSubscription, idCompressor: IIdCompressor) =>\n\t\tbuildChunkedForest(makeTreeChunker(schema, defaultSchemaPolicy), undefined, idCompressor),\n);\n\n/**\n * Slow implementation of forest intended only for debugging.\n * @remarks\n * Includes validation with scales poorly.\n * May be asymptotically slower than {@link ForestTypeReference}, and may perform very badly with larger data sizes.\n * @privateRemarks\n * The \"ObjectForest\" forest type with expensive asserts for debugging.\n * @alpha\n */\nexport const ForestTypeExpensiveDebug = toForestType(() => buildForest(undefined, true));\n\ntype ForestFactory = (\n\tschema: TreeStoredSchemaSubscription,\n\tidCompressor: IIdCompressor,\n) => IEditableForest;\n\nfunction toForestType(factory: ForestFactory): ForestType {\n\treturn factory as unknown as ForestType;\n}\n\n/**\n * Build and return a forest of the requested type.\n */\nexport function buildConfiguredForest(\n\tfactory: ForestType,\n\tschema: TreeStoredSchemaSubscription,\n\tidCompressor: IIdCompressor,\n): IEditableForest {\n\treturn (factory as unknown as ForestFactory)(schema, idCompressor);\n}\n\nexport const defaultSharedTreeOptions: Required<SharedTreeOptionsInternal> = {\n\tjsonValidator: noopValidator,\n\tforest: ForestTypeReference,\n\ttreeEncodeType: TreeCompressionStrategy.Compressed,\n\tformatVersion: SharedTreeFormatVersion.v3,\n\tdisposeForksAfterTransaction: true,\n};\n\nfunction verboseFromCursor(\n\treader: ITreeCursor,\n\tschema: ReadonlyMap<TreeNodeSchemaIdentifier, TreeNodeStoredSchema>,\n): VerboseTree {\n\tconst fields = customFromCursorStored(reader, schema, verboseFromCursor);\n\tconst nodeSchema = schema.get(reader.type) ?? fail(\"missing schema for type in cursor\");\n\tif (nodeSchema instanceof LeafNodeStoredSchema) {\n\t\treturn fields as CustomTreeValue<IFluidHandle>;\n\t}\n\n\treturn {\n\t\ttype: reader.type,\n\t\tfields: fields as CustomTreeNode<IFluidHandle>,\n\t};\n}\n\nfunction exportSimpleFieldSchemaStored(schema: TreeFieldStoredSchema): SimpleFieldSchema {\n\tlet kind: FieldKind;\n\tswitch (schema.kind) {\n\t\tcase FieldKinds.identifier.identifier:\n\t\t\tkind = FieldKind.Identifier;\n\t\t\tbreak;\n\t\tcase FieldKinds.optional.identifier:\n\t\t\tkind = FieldKind.Optional;\n\t\t\tbreak;\n\t\tcase FieldKinds.required.identifier:\n\t\t\tkind = FieldKind.Required;\n\t\t\tbreak;\n\t\tcase FieldKinds.forbidden.identifier:\n\t\t\tkind = FieldKind.Optional;\n\t\t\tassert(schema.types.size === 0, 0xa94 /* invalid forbidden field */);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tfail(\"invalid field kind\");\n\t}\n\treturn { kind, allowedTypes: schema.types };\n}\n\nfunction exportSimpleNodeSchemaStored(schema: TreeNodeStoredSchema): SimpleNodeSchema {\n\tconst arrayTypes = tryStoredSchemaAsArray(schema);\n\tif (arrayTypes !== undefined) {\n\t\treturn { kind: NodeKind.Array, allowedTypes: arrayTypes };\n\t}\n\tif (schema instanceof ObjectNodeStoredSchema) {\n\t\tconst fields: Record<string, SimpleFieldSchema> = {};\n\t\tfor (const [key, field] of schema.objectNodeFields) {\n\t\t\tfields[key] = exportSimpleFieldSchemaStored(field);\n\t\t}\n\t\treturn { kind: NodeKind.Object, fields };\n\t}\n\tif (schema instanceof MapNodeStoredSchema) {\n\t\tassert(\n\t\t\tschema.mapFields.kind === FieldKinds.optional.identifier,\n\t\t\t0xa95 /* Invalid map schema */,\n\t\t);\n\t\treturn { kind: NodeKind.Map, allowedTypes: schema.mapFields.types };\n\t}\n\tif (schema instanceof LeafNodeStoredSchema) {\n\t\treturn { kind: NodeKind.Leaf, leafKind: schema.leafValue };\n\t}\n\tfail(\"invalid schema kind\");\n}\n"]}
1
+ {"version":3,"file":"sharedTree.js","sourceRoot":"","sources":["../../src/shared-tree/sharedTree.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 {\n\tErasedType,\n\tIFluidHandle,\n\tIFluidLoadable,\n} from \"@fluidframework/core-interfaces/internal\";\nimport type {\n\tIChannelAttributes,\n\tIFluidDataStoreRuntime,\n\tIChannelStorageService,\n\tIChannel,\n} from \"@fluidframework/datastore-definitions/internal\";\nimport {\n\tSharedObject,\n\ttype IFluidSerializer,\n\ttype ISharedObject,\n} from \"@fluidframework/shared-object-base/internal\";\nimport {\n\tUsageError,\n\ttype ITelemetryLoggerExt,\n} from \"@fluidframework/telemetry-utils/internal\";\nimport type { IIdCompressor } from \"@fluidframework/id-compressor\";\nimport type {\n\tITelemetryContext,\n\tIExperimentalIncrementalSummaryContext,\n\tISummaryTreeWithStats,\n\tIRuntimeMessageCollection,\n} from \"@fluidframework/runtime-definitions/internal\";\nimport type { ISequencedDocumentMessage } from \"@fluidframework/driver-definitions/internal\";\n\nimport { type ICodecOptions, noopValidator } from \"../codec/index.js\";\nimport {\n\ttype GraphCommit,\n\ttype IEditableForest,\n\ttype ITreeCursor,\n\ttype JsonableTree,\n\tLeafNodeStoredSchema,\n\tMapNodeStoredSchema,\n\tObjectNodeStoredSchema,\n\tRevisionTagCodec,\n\ttype TaggedChange,\n\ttype TreeFieldStoredSchema,\n\ttype TreeNodeSchemaIdentifier,\n\ttype TreeNodeStoredSchema,\n\ttype TreeStoredSchema,\n\tTreeStoredSchemaRepository,\n\ttype TreeStoredSchemaSubscription,\n\tmakeDetachedFieldIndex,\n\tmoveToDetachedField,\n} from \"../core/index.js\";\n\nimport {\n\tDetachedFieldIndexSummarizer,\n\tFieldKinds,\n\tForestSummarizer,\n\tSchemaSummarizer,\n\tTreeCompressionStrategy,\n\tbuildChunkedForest,\n\tbuildForest,\n\tdefaultSchemaPolicy,\n\tjsonableTreeFromFieldCursor,\n\tmakeFieldBatchCodec,\n\tmakeMitigatedChangeFamily,\n\tmakeTreeChunker,\n} from \"../feature-libraries/index.js\";\nimport {\n\ttype ClonableSchemaAndPolicy,\n\tDefaultResubmitMachine,\n\ttype ExplicitCoreCodecVersions,\n\tSharedTreeCore,\n} from \"../shared-tree-core/index.js\";\nimport {\n\ttype ITree,\n\ttype ImplicitFieldSchema,\n\tNodeKind,\n\ttype ReadSchema,\n\ttype SimpleFieldSchema,\n\ttype SimpleTreeSchema,\n\ttype TreeView,\n\ttype TreeViewAlpha,\n\ttype TreeViewConfiguration,\n\ttype UnsafeUnknownSchema,\n\ttype VerboseTree,\n\ttryStoredSchemaAsArray,\n\ttype SimpleNodeSchema,\n\tcustomFromCursorStored,\n\tFieldKind,\n\ttype CustomTreeNode,\n\ttype CustomTreeValue,\n\ttype ITreeAlpha,\n} from \"../simple-tree/index.js\";\n\nimport { SchematizingSimpleTreeView } from \"./schematizingTreeView.js\";\nimport { SharedTreeReadonlyChangeEnricher } from \"./sharedTreeChangeEnricher.js\";\nimport { SharedTreeChangeFamily } from \"./sharedTreeChangeFamily.js\";\nimport type { SharedTreeChange } from \"./sharedTreeChangeTypes.js\";\nimport type { SharedTreeEditBuilder } from \"./sharedTreeEditBuilder.js\";\nimport { type TreeCheckout, type BranchableTree, createTreeCheckout } from \"./treeCheckout.js\";\nimport {\n\tBreakable,\n\tbreakingClass,\n\tfail,\n\tthrowIfBroken,\n\ttype WithBreakable,\n} from \"../util/index.js\";\n\n/**\n * Copy of data from an {@link ITreePrivate} at some point in time.\n * @remarks\n * This is unrelated to Fluids concept of \"snapshots\".\n */\nexport interface SharedTreeContentSnapshot {\n\t/**\n\t * The schema stored in the document.\n\t *\n\t * @remarks\n\t * Edits to the schema can mutate the schema stored of the tree which took this snapshot (but this snapshot will remain the same)\n\t * This is mainly useful for debugging cases where schematize reports an incompatible view schema.\n\t */\n\treadonly schema: TreeStoredSchema;\n\t/**\n\t * All {@link TreeStatus.InDocument} content.\n\t */\n\treadonly tree: JsonableTree[];\n\t/**\n\t * All {@link TreeStatus.Removed} content.\n\t */\n\treadonly removed: [string | number | undefined, number, JsonableTree][];\n}\n\n/**\n * Information about a Fluid channel.\n * @privateRemarks\n * This is distinct from {@link IChannel} as it omits the APIs used by the runtime to manage the channel and instead only has things which are useful (and safe) to expose to users of the channel.\n * @internal\n */\nexport type IChannelView = Pick<IChannel, \"id\" | \"attributes\" | \"isAttached\">;\n\n/**\n * {@link ITree} extended with some non-public APIs.\n * @internal\n */\nexport interface ITreeInternal extends IChannelView, ITreeAlpha {}\n\n/**\n * {@link ITreeInternal} extended with some non-exported APIs.\n * @remarks\n * This allows access to the tree content using the internal data model used at the storage and \"flex\" layers,\n * and should only be needed for testing and debugging this package's internals.\n */\nexport interface ITreePrivate extends ITreeInternal {\n\t/**\n\t * Provides a copy of the current content of the tree.\n\t * This can be useful for inspecting the tree when no suitable view schema is available.\n\t * This is only intended for use in testing and exceptional code paths: it is not performant.\n\t *\n\t * This does not include everything that is included in a tree summary, since information about how to merge future edits is omitted.\n\t */\n\tcontentSnapshot(): SharedTreeContentSnapshot;\n}\n\n/**\n * {@link ITreePrivate} extended with ISharedObject.\n * @remarks\n * This is used when integration testing this package with the Fluid runtime as it exposes the APIs the runtime consumes to manipulate the tree.\n */\nexport interface ISharedTree extends ISharedObject, ITreePrivate {}\n\n/**\n * Has an entry for each codec which writes an explicit version into its data.\n *\n * This is used to map the single API entrypoint controlling the format {@link SharedTreeOptions.formatVersion}\n * to a list of write versions that for each codec that should be used for that format.\n *\n * Note that all explicitly versioned codecs should be using the format version from the data to read encoded data.\n *\n * TODO: Plumb these write versions into forest, schema, detached field index codec creation.\n */\ninterface ExplicitCodecVersions extends ExplicitCoreCodecVersions {\n\tforest: number;\n\tschema: number;\n\tdetachedFieldIndex: number;\n\tfieldBatch: number;\n}\n\nconst formatVersionToTopLevelCodecVersions = new Map<number, ExplicitCodecVersions>([\n\t[\n\t\t1,\n\t\t{ forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 1, message: 1, fieldBatch: 1 },\n\t],\n\t[\n\t\t2,\n\t\t{ forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 2, message: 2, fieldBatch: 1 },\n\t],\n\t[\n\t\t3,\n\t\t{ forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 3, message: 3, fieldBatch: 1 },\n\t],\n\t[\n\t\t4,\n\t\t{ forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 4, message: 4, fieldBatch: 1 },\n\t],\n]);\n\nfunction getCodecVersions(formatVersion: number): ExplicitCodecVersions {\n\tconst versions = formatVersionToTopLevelCodecVersions.get(formatVersion);\n\tassert(versions !== undefined, 0x90e /* Unknown format version */);\n\treturn versions;\n}\n\n/**\n * Shared object wrapping {@link SharedTreeKernel}.\n */\nexport class SharedTree extends SharedObject implements ISharedTree, WithBreakable {\n\tpublic readonly breaker: Breakable = new Breakable(\"Shared Tree\");\n\n\tpublic get checkout(): TreeCheckout {\n\t\treturn this.kernel.checkout;\n\t}\n\tpublic get storedSchema(): TreeStoredSchemaRepository {\n\t\treturn this.checkout.storedSchema;\n\t}\n\n\tprivate readonly kernel: SharedTreeKernel;\n\n\tpublic constructor(\n\t\tid: string,\n\t\truntime: IFluidDataStoreRuntime,\n\t\tattributes: IChannelAttributes,\n\t\toptionsParam: SharedTreeOptionsInternal,\n\t\ttelemetryContextPrefix: string = \"fluid_sharedTree_\",\n\t) {\n\t\tsuper(id, runtime, attributes, telemetryContextPrefix);\n\t\tif (runtime.idCompressor === undefined) {\n\t\t\tthrow new UsageError(\"IdCompressor must be enabled to use SharedTree\");\n\t\t}\n\t\tthis.kernel = new SharedTreeKernel(\n\t\t\tthis.breaker,\n\t\t\tthis,\n\t\t\tthis.serializer,\n\t\t\t(content, localOpMetadata) => this.submitLocalMessage(content, localOpMetadata),\n\t\t\t() => this.deltaManager.lastSequenceNumber,\n\t\t\tthis.logger,\n\t\t\truntime.idCompressor,\n\t\t\toptionsParam,\n\t\t);\n\t}\n\n\tpublic get editor(): SharedTreeEditBuilder {\n\t\treturn this.kernel.getEditor();\n\t}\n\n\tpublic summarizeCore(\n\t\tserializer: IFluidSerializer,\n\t\ttelemetryContext?: ITelemetryContext,\n\t\tincrementalSummaryContext?: IExperimentalIncrementalSummaryContext,\n\t): ISummaryTreeWithStats {\n\t\treturn this.kernel.summarizeCore(serializer, telemetryContext, incrementalSummaryContext);\n\t}\n\n\tprotected processCore(\n\t\tmessage: ISequencedDocumentMessage,\n\t\tlocal: boolean,\n\t\tlocalOpMetadata: unknown,\n\t): void {\n\t\tthis.kernel.processCore(message, local, localOpMetadata);\n\t}\n\n\tprotected override processMessagesCore(messagesCollection: IRuntimeMessageCollection): void {\n\t\tthis.kernel.processMessagesCore(messagesCollection);\n\t}\n\n\tprotected onDisconnect(): void {}\n\n\tpublic exportVerbose(): VerboseTree | undefined {\n\t\treturn this.kernel.exportVerbose();\n\t}\n\n\tpublic exportSimpleSchema(): SimpleTreeSchema {\n\t\treturn this.kernel.exportSimpleSchema();\n\t}\n\n\tpublic contentSnapshot(): SharedTreeContentSnapshot {\n\t\treturn this.kernel.contentSnapshot();\n\t}\n\n\t// For the new TreeViewAlpha API\n\tpublic viewWith<TRoot extends ImplicitFieldSchema | UnsafeUnknownSchema>(\n\t\tconfig: TreeViewConfiguration<ReadSchema<TRoot>>,\n\t): SchematizingSimpleTreeView<TRoot> & TreeView<ReadSchema<TRoot>>;\n\n\t// For the old TreeView API\n\tpublic viewWith<TRoot extends ImplicitFieldSchema>(\n\t\tconfig: TreeViewConfiguration<TRoot>,\n\t): SchematizingSimpleTreeView<TRoot> & TreeView<TRoot>;\n\n\tpublic viewWith<TRoot extends ImplicitFieldSchema | UnsafeUnknownSchema>(\n\t\tconfig: TreeViewConfiguration<ReadSchema<TRoot>>,\n\t): SchematizingSimpleTreeView<TRoot> & TreeView<ReadSchema<TRoot>> {\n\t\treturn this.kernel.viewWith(config);\n\t}\n\n\tprotected override async loadCore(services: IChannelStorageService): Promise<void> {\n\t\tawait this.kernel.loadCore(services);\n\t}\n\n\tprotected override didAttach(): void {\n\t\tthis.kernel.didAttach();\n\t}\n\n\tprotected override applyStashedOp(\n\t\t...args: Parameters<\n\t\t\tSharedTreeCore<SharedTreeEditBuilder, SharedTreeChange>[\"applyStashedOp\"]\n\t\t>\n\t): void {\n\t\tthis.kernel.applyStashedOp(...args);\n\t}\n\n\tprotected override reSubmitCore(\n\t\t...args: Parameters<\n\t\t\tSharedTreeCore<SharedTreeEditBuilder, SharedTreeChange>[\"reSubmitCore\"]\n\t\t>\n\t): void {\n\t\tthis.kernel.reSubmitCore(...args);\n\t}\n}\n\n/**\n * SharedTreeCore, configured with a good set of indexes and field kinds which will maintain compatibility over time.\n *\n * TODO: detail compatibility requirements.\n */\n@breakingClass\nclass SharedTreeKernel extends SharedTreeCore<SharedTreeEditBuilder, SharedTreeChange> {\n\tpublic readonly checkout: TreeCheckout;\n\tpublic get storedSchema(): TreeStoredSchemaRepository {\n\t\treturn this.checkout.storedSchema;\n\t}\n\n\tpublic constructor(\n\t\tbreaker: Breakable,\n\t\tsharedObject: IChannelView & IFluidLoadable,\n\t\tserializer: IFluidSerializer,\n\t\tsubmitLocalMessage: (content: unknown, localOpMetadata?: unknown) => void,\n\t\tlastSequenceNumber: () => number | undefined,\n\t\tlogger: ITelemetryLoggerExt | undefined,\n\t\tidCompressor: IIdCompressor,\n\t\toptionsParam: SharedTreeOptionsInternal,\n\t) {\n\t\tconst options = { ...defaultSharedTreeOptions, ...optionsParam };\n\t\tconst codecVersions = getCodecVersions(options.formatVersion);\n\t\tconst schema = new TreeStoredSchemaRepository();\n\t\tconst forest = buildConfiguredForest(options.forest, schema, idCompressor);\n\t\tconst revisionTagCodec = new RevisionTagCodec(idCompressor);\n\t\tconst removedRoots = makeDetachedFieldIndex(\n\t\t\t\"repair\",\n\t\t\trevisionTagCodec,\n\t\t\tidCompressor,\n\t\t\toptions,\n\t\t);\n\t\tconst schemaSummarizer = new SchemaSummarizer(schema, options, {\n\t\t\tgetCurrentSeq: lastSequenceNumber,\n\t\t});\n\t\tconst fieldBatchCodec = makeFieldBatchCodec(options, codecVersions.fieldBatch);\n\n\t\tconst encoderContext = {\n\t\t\tschema: {\n\t\t\t\tschema,\n\t\t\t\tpolicy: defaultSchemaPolicy,\n\t\t\t},\n\t\t\tencodeType: options.treeEncodeType,\n\t\t\toriginatorId: idCompressor.localSessionId,\n\t\t\tidCompressor,\n\t\t};\n\t\tconst forestSummarizer = new ForestSummarizer(\n\t\t\tforest,\n\t\t\trevisionTagCodec,\n\t\t\tfieldBatchCodec,\n\t\t\tencoderContext,\n\t\t\toptions,\n\t\t\tidCompressor,\n\t\t);\n\t\tconst removedRootsSummarizer = new DetachedFieldIndexSummarizer(removedRoots);\n\t\tconst innerChangeFamily = new SharedTreeChangeFamily(\n\t\t\trevisionTagCodec,\n\t\t\tfieldBatchCodec,\n\t\t\toptions,\n\t\t\toptions.treeEncodeType,\n\t\t\tidCompressor,\n\t\t);\n\t\tconst changeFamily = makeMitigatedChangeFamily(\n\t\t\tinnerChangeFamily,\n\t\t\tSharedTreeChangeFamily.emptyChange,\n\t\t\t(error: unknown) => {\n\t\t\t\t// TODO:6344 Add telemetry for these errors.\n\t\t\t\t// Rethrowing the error has a different effect depending on the context in which the\n\t\t\t\t// ChangeFamily was invoked:\n\t\t\t\t// - If the ChangeFamily was invoked as part of incoming op processing, rethrowing the error\n\t\t\t\t// will cause the runtime to disconnect the client, log a severe error, and not reconnect.\n\t\t\t\t// This will not cause the host application to crash because it is not on the stack at that time.\n\t\t\t\t// TODO: let the host application know that the client is now disconnected.\n\t\t\t\t// - If the ChangeFamily was invoked as part of dealing with a local change, rethrowing the\n\t\t\t\t// error will cause the host application to crash. This is not ideal, but is better than\n\t\t\t\t// letting the application either send an invalid change to the server or allowing the\n\t\t\t\t// application to continue working when its local branches contain edits that cannot be\n\t\t\t\t// reflected in its views.\n\t\t\t\t// The best course of action for a host application in such a state is to restart.\n\t\t\t\t// TODO: let the host application know about this situation and provide a way to\n\t\t\t\t// programmatically reload the SharedTree container.\n\t\t\t\tthrow error;\n\t\t\t},\n\t\t);\n\t\tconst changeEnricher = new SharedTreeReadonlyChangeEnricher(forest, schema, removedRoots);\n\t\tsuper(\n\t\t\tbreaker,\n\t\t\tsharedObject,\n\t\t\tserializer,\n\t\t\tsubmitLocalMessage,\n\t\t\tlogger,\n\t\t\t[schemaSummarizer, forestSummarizer, removedRootsSummarizer],\n\t\t\tchangeFamily,\n\t\t\toptions,\n\t\t\tcodecVersions,\n\t\t\tidCompressor,\n\t\t\tschema,\n\t\t\tdefaultSchemaPolicy,\n\t\t\tnew DefaultResubmitMachine(\n\t\t\t\t(change: TaggedChange<SharedTreeChange>) =>\n\t\t\t\t\tchangeFamily.rebaser.invert(change, true, this.mintRevisionTag()),\n\t\t\t\tchangeEnricher,\n\t\t\t),\n\t\t\tchangeEnricher,\n\t\t);\n\t\tconst localBranch = this.getLocalBranch();\n\t\tthis.checkout = createTreeCheckout(idCompressor, this.mintRevisionTag, revisionTagCodec, {\n\t\t\tbranch: localBranch,\n\t\t\tchangeFamily,\n\t\t\tschema,\n\t\t\tforest,\n\t\t\tfieldBatchCodec,\n\t\t\tremovedRoots,\n\t\t\tchunkCompressionStrategy: options.treeEncodeType,\n\t\t\tlogger,\n\t\t\tbreaker: this.breaker,\n\t\t\tdisposeForksAfterTransaction: options.disposeForksAfterTransaction,\n\t\t});\n\n\t\tthis.checkout.transaction.events.on(\"started\", () => {\n\t\t\tif (sharedObject.isAttached()) {\n\t\t\t\t// It is currently forbidden to attach during a transaction, so transaction state changes can be ignored until after attaching.\n\t\t\t\tthis.commitEnricher.startTransaction();\n\t\t\t}\n\t\t});\n\t\tthis.checkout.transaction.events.on(\"aborting\", () => {\n\t\t\tif (sharedObject.isAttached()) {\n\t\t\t\t// It is currently forbidden to attach during a transaction, so transaction state changes can be ignored until after attaching.\n\t\t\t\tthis.commitEnricher.abortTransaction();\n\t\t\t}\n\t\t});\n\t\tthis.checkout.transaction.events.on(\"committing\", () => {\n\t\t\tif (sharedObject.isAttached()) {\n\t\t\t\t// It is currently forbidden to attach during a transaction, so transaction state changes can be ignored until after attaching.\n\t\t\t\tthis.commitEnricher.commitTransaction();\n\t\t\t}\n\t\t});\n\t\tthis.checkout.events.on(\"beforeBatch\", (event) => {\n\t\t\tif (event.type === \"append\" && sharedObject.isAttached()) {\n\t\t\t\tif (this.checkout.transaction.isInProgress()) {\n\t\t\t\t\tthis.commitEnricher.addTransactionCommits(event.newCommits);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic exportVerbose(): VerboseTree | undefined {\n\t\tconst cursor = this.checkout.forest.allocateCursor(\"contentSnapshot\");\n\t\ttry {\n\t\t\tmoveToDetachedField(this.checkout.forest, cursor);\n\t\t\tconst length = cursor.getFieldLength();\n\t\t\tif (length === 0) {\n\t\t\t\treturn undefined;\n\t\t\t} else if (length === 1) {\n\t\t\t\tcursor.enterNode(0);\n\t\t\t\treturn verboseFromCursor(cursor, this.storedSchema.nodeSchema);\n\t\t\t} else {\n\t\t\t\tfail(\"Invalid document root length\");\n\t\t\t}\n\t\t} finally {\n\t\t\tcursor.free();\n\t\t}\n\t}\n\n\tpublic exportSimpleSchema(): SimpleTreeSchema {\n\t\treturn {\n\t\t\t...exportSimpleFieldSchemaStored(this.storedSchema.rootFieldSchema),\n\t\t\tdefinitions: new Map(\n\t\t\t\t[...this.storedSchema.nodeSchema].map(([key, schema]) => {\n\t\t\t\t\treturn [key, exportSimpleNodeSchemaStored(schema)];\n\t\t\t\t}),\n\t\t\t),\n\t\t};\n\t}\n\n\t@throwIfBroken\n\tpublic contentSnapshot(): SharedTreeContentSnapshot {\n\t\tconst cursor = this.checkout.forest.allocateCursor(\"contentSnapshot\");\n\t\ttry {\n\t\t\tmoveToDetachedField(this.checkout.forest, cursor);\n\t\t\treturn {\n\t\t\t\tschema: this.storedSchema.clone(),\n\t\t\t\ttree: jsonableTreeFromFieldCursor(cursor),\n\t\t\t\tremoved: this.checkout.getRemovedRoots(),\n\t\t\t};\n\t\t} finally {\n\t\t\tcursor.free();\n\t\t}\n\t}\n\n\t// For the new TreeViewAlpha API\n\tpublic viewWith<TRoot extends ImplicitFieldSchema | UnsafeUnknownSchema>(\n\t\tconfig: TreeViewConfiguration<ReadSchema<TRoot>>,\n\t): SchematizingSimpleTreeView<TRoot> & TreeView<ReadSchema<TRoot>>;\n\n\t// For the old TreeView API\n\tpublic viewWith<TRoot extends ImplicitFieldSchema>(\n\t\tconfig: TreeViewConfiguration<TRoot>,\n\t): SchematizingSimpleTreeView<TRoot> & TreeView<TRoot>;\n\n\tpublic viewWith<TRoot extends ImplicitFieldSchema | UnsafeUnknownSchema>(\n\t\tconfig: TreeViewConfiguration<ReadSchema<TRoot>>,\n\t): SchematizingSimpleTreeView<TRoot> & TreeView<ReadSchema<TRoot>> {\n\t\treturn this.checkout.viewWith(config) as SchematizingSimpleTreeView<TRoot> &\n\t\t\tTreeView<ReadSchema<TRoot>>;\n\t}\n\n\tpublic override async loadCore(services: IChannelStorageService): Promise<void> {\n\t\tawait super.loadCore(services);\n\t\tthis.checkout.load();\n\t}\n\n\tpublic override didAttach(): void {\n\t\tif (this.checkout.transaction.isInProgress()) {\n\t\t\t// Attaching during a transaction is not currently supported.\n\t\t\t// At least part of of the system is known to not handle this case correctly - commit enrichment - and there may be others.\n\t\t\tthrow new UsageError(\n\t\t\t\t\"Cannot attach while a transaction is in progress. Commit or abort the transaction before attaching.\",\n\t\t\t);\n\t\t}\n\t\tsuper.didAttach();\n\t}\n\n\tpublic override applyStashedOp(\n\t\t...args: Parameters<\n\t\t\tSharedTreeCore<SharedTreeEditBuilder, SharedTreeChange>[\"applyStashedOp\"]\n\t\t>\n\t): void {\n\t\tassert(\n\t\t\t!this.checkout.transaction.isInProgress(),\n\t\t\t0x674 /* Unexpected transaction is open while applying stashed ops */,\n\t\t);\n\t\tsuper.applyStashedOp(...args);\n\t}\n\n\tprotected override submitCommit(\n\t\tcommit: GraphCommit<SharedTreeChange>,\n\t\tschemaAndPolicy: ClonableSchemaAndPolicy,\n\t\tisResubmit: boolean,\n\t): void {\n\t\tassert(\n\t\t\t!this.checkout.transaction.isInProgress(),\n\t\t\t0xaa6 /* Cannot submit a commit while a transaction is in progress */,\n\t\t);\n\t\tif (isResubmit) {\n\t\t\treturn super.submitCommit(commit, schemaAndPolicy, isResubmit);\n\t\t}\n\n\t\t// Refrain from submitting new commits until they are validated by the checkout.\n\t\t// This is not a strict requirement for correctness in our system, but in the event that there is a bug when applying commits to the checkout\n\t\t// that causes a crash (e.g. in the forest), this will at least prevent this client from sending the problematic commit to any other clients.\n\t\tthis.checkout.onCommitValid(commit, () =>\n\t\t\tsuper.submitCommit(commit, schemaAndPolicy, isResubmit),\n\t\t);\n\t}\n}\n\n/**\n * Get a {@link BranchableTree} from a {@link ITree}.\n * @remarks The branch can be used for \"version control\"-style coordination of edits on the tree.\n * @privateRemarks This function will be removed if/when the branching API becomes public,\n * but it (or something like it) is necessary in the meantime to prevent the alpha types from being exposed as public.\n * @alpha\n * @deprecated This API is superseded by {@link TreeBranch}, which should be used instead.\n */\nexport function getBranch(tree: ITree): BranchableTree;\n/**\n * Get a {@link BranchableTree} from a {@link TreeView}.\n * @remarks The branch can be used for \"version control\"-style coordination of edits on the tree.\n * Branches are currently an unstable \"alpha\" API and are subject to change in the future.\n * @privateRemarks This function will be removed if/when the branching API becomes public,\n * but it (or something like it) is necessary in the meantime to prevent the alpha types from being exposed as public.\n * @alpha\n * @deprecated This API is superseded by {@link TreeBranch}, which should be used instead.\n */\nexport function getBranch<T extends ImplicitFieldSchema | UnsafeUnknownSchema>(\n\tview: TreeViewAlpha<T>,\n): BranchableTree;\nexport function getBranch<T extends ImplicitFieldSchema | UnsafeUnknownSchema>(\n\ttreeOrView: ITree | TreeViewAlpha<T>,\n): BranchableTree {\n\tassert(\n\t\ttreeOrView instanceof SharedTree || treeOrView instanceof SchematizingSimpleTreeView,\n\t\t0xa48 /* Unsupported implementation */,\n\t);\n\tconst checkout: TreeCheckout = treeOrView.checkout;\n\t// This cast is safe so long as TreeCheckout supports all the operations on the branch interface.\n\treturn checkout as unknown as BranchableTree;\n}\n\n/**\n * Format versions supported by SharedTree.\n *\n * Each version documents a required minimum version of the \\@fluidframework/tree package.\n * @alpha\n */\nexport const SharedTreeFormatVersion = {\n\t/**\n\t * Requires \\@fluidframework/tree \\>= 2.0.0.\n\t *\n\t * @deprecated - FF does not currently plan on supporting this format long-term.\n\t * Do not write production documents using this format, as they may not be loadable in the future.\n\t */\n\tv1: 1,\n\n\t/**\n\t * Requires \\@fluidframework/tree \\>= 2.0.0.\n\t */\n\tv2: 2,\n\n\t/**\n\t * Requires \\@fluidframework/tree \\>= 2.0.0.\n\t */\n\tv3: 3,\n} as const;\n\n/**\n * Format versions supported by SharedTree.\n *\n * Each version documents a required minimum version of the \\@fluidframework/tree package.\n * @alpha\n * @privateRemarks\n * See packages/dds/tree/docs/main/compatibility.md for information on how to add support for a new format.\n *\n * TODO: Before this gets promoted past Alpha,\n * a separate abstraction more suited for use in the public API should be adopted rather than reusing the same types used internally.\n * Such an abstraction should probably be in the form of a Fluid-Framework wide compatibility enum.\n */\nexport type SharedTreeFormatVersion = typeof SharedTreeFormatVersion;\n\n/**\n * Configuration options for SharedTree.\n * @alpha\n */\nexport type SharedTreeOptions = Partial<ICodecOptions> &\n\tPartial<SharedTreeFormatOptions> &\n\tForestOptions;\n\nexport interface SharedTreeOptionsInternal extends SharedTreeOptions {\n\tdisposeForksAfterTransaction?: boolean;\n}\n/**\n * Configuration options for SharedTree's internal tree storage.\n * @alpha\n */\nexport interface ForestOptions {\n\t/**\n\t * The {@link ForestType} indicating which forest type should be created for the SharedTree.\n\t */\n\treadonly forest?: ForestType;\n}\n\n/**\n * Options for configuring the persisted format SharedTree uses.\n * @alpha\n */\nexport interface SharedTreeFormatOptions {\n\t/**\n\t * See {@link TreeCompressionStrategy}.\n\t * default: TreeCompressionStrategy.Compressed\n\t */\n\ttreeEncodeType: TreeCompressionStrategy;\n\t/**\n\t * The format version SharedTree should use to persist documents.\n\t *\n\t * This option has compatibility implications for applications using SharedTree.\n\t * Each version documents a required minimum version of \\@fluidframework/tree.\n\t * If this minimum version fails to be met, the SharedTree may fail to load.\n\t * To be safe, application authors should verify that they have saturated this version\n\t * of \\@fluidframework/tree in their ecosystem before changing the format version.\n\t *\n\t * This option defaults to SharedTreeFormatVersion.v2.\n\t */\n\tformatVersion: SharedTreeFormatVersion[keyof SharedTreeFormatVersion];\n}\n\n/**\n * Used to distinguish between different forest types.\n * @remarks\n * Current options are {@link ForestTypeReference}, {@link ForestTypeOptimized} and {@link ForestTypeExpensiveDebug}.\n * @sealed @alpha\n */\nexport interface ForestType extends ErasedType<\"ForestType\"> {}\n\n/**\n * Reference implementation of forest.\n * @remarks\n * A simple implementation with minimal complexity and moderate debuggability, validation and performance.\n * @privateRemarks\n * The \"ObjectForest\" forest type.\n * @alpha\n */\nexport const ForestTypeReference = toForestType(() => buildForest());\n\n/**\n * Optimized implementation of forest.\n * @remarks\n * A complex optimized forest implementation, which has minimal validation and debuggability to optimize for performance.\n * Uses an internal representation optimized for size designed to scale to larger datasets with reduced overhead.\n * @privateRemarks\n * The \"ChunkedForest\" forest type.\n * @alpha\n */\nexport const ForestTypeOptimized = toForestType(\n\t(schema: TreeStoredSchemaSubscription, idCompressor: IIdCompressor) =>\n\t\tbuildChunkedForest(makeTreeChunker(schema, defaultSchemaPolicy), undefined, idCompressor),\n);\n\n/**\n * Slow implementation of forest intended only for debugging.\n * @remarks\n * Includes validation with scales poorly.\n * May be asymptotically slower than {@link ForestTypeReference}, and may perform very badly with larger data sizes.\n * @privateRemarks\n * The \"ObjectForest\" forest type with expensive asserts for debugging.\n * @alpha\n */\nexport const ForestTypeExpensiveDebug = toForestType(() => buildForest(undefined, true));\n\ntype ForestFactory = (\n\tschema: TreeStoredSchemaSubscription,\n\tidCompressor: IIdCompressor,\n) => IEditableForest;\n\nfunction toForestType(factory: ForestFactory): ForestType {\n\treturn factory as unknown as ForestType;\n}\n\n/**\n * Build and return a forest of the requested type.\n */\nexport function buildConfiguredForest(\n\tfactory: ForestType,\n\tschema: TreeStoredSchemaSubscription,\n\tidCompressor: IIdCompressor,\n): IEditableForest {\n\treturn (factory as unknown as ForestFactory)(schema, idCompressor);\n}\n\nexport const defaultSharedTreeOptions: Required<SharedTreeOptionsInternal> = {\n\tjsonValidator: noopValidator,\n\tforest: ForestTypeReference,\n\ttreeEncodeType: TreeCompressionStrategy.Compressed,\n\tformatVersion: SharedTreeFormatVersion.v3,\n\tdisposeForksAfterTransaction: true,\n};\n\nfunction verboseFromCursor(\n\treader: ITreeCursor,\n\tschema: ReadonlyMap<TreeNodeSchemaIdentifier, TreeNodeStoredSchema>,\n): VerboseTree {\n\tconst fields = customFromCursorStored(reader, schema, verboseFromCursor);\n\tconst nodeSchema = schema.get(reader.type) ?? fail(\"missing schema for type in cursor\");\n\tif (nodeSchema instanceof LeafNodeStoredSchema) {\n\t\treturn fields as CustomTreeValue<IFluidHandle>;\n\t}\n\n\treturn {\n\t\ttype: reader.type,\n\t\tfields: fields as CustomTreeNode<IFluidHandle>,\n\t};\n}\n\nfunction exportSimpleFieldSchemaStored(schema: TreeFieldStoredSchema): SimpleFieldSchema {\n\tlet kind: FieldKind;\n\tswitch (schema.kind) {\n\t\tcase FieldKinds.identifier.identifier:\n\t\t\tkind = FieldKind.Identifier;\n\t\t\tbreak;\n\t\tcase FieldKinds.optional.identifier:\n\t\t\tkind = FieldKind.Optional;\n\t\t\tbreak;\n\t\tcase FieldKinds.required.identifier:\n\t\t\tkind = FieldKind.Required;\n\t\t\tbreak;\n\t\tcase FieldKinds.forbidden.identifier:\n\t\t\tkind = FieldKind.Optional;\n\t\t\tassert(schema.types.size === 0, 0xa94 /* invalid forbidden field */);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tfail(\"invalid field kind\");\n\t}\n\treturn { kind, allowedTypes: schema.types };\n}\n\nfunction exportSimpleNodeSchemaStored(schema: TreeNodeStoredSchema): SimpleNodeSchema {\n\tconst arrayTypes = tryStoredSchemaAsArray(schema);\n\tif (arrayTypes !== undefined) {\n\t\treturn { kind: NodeKind.Array, allowedTypes: arrayTypes };\n\t}\n\tif (schema instanceof ObjectNodeStoredSchema) {\n\t\tconst fields: Record<string, SimpleFieldSchema> = {};\n\t\tfor (const [key, field] of schema.objectNodeFields) {\n\t\t\tfields[key] = exportSimpleFieldSchemaStored(field);\n\t\t}\n\t\treturn { kind: NodeKind.Object, fields };\n\t}\n\tif (schema instanceof MapNodeStoredSchema) {\n\t\tassert(\n\t\t\tschema.mapFields.kind === FieldKinds.optional.identifier,\n\t\t\t0xa95 /* Invalid map schema */,\n\t\t);\n\t\treturn { kind: NodeKind.Map, allowedTypes: schema.mapFields.types };\n\t}\n\tif (schema instanceof LeafNodeStoredSchema) {\n\t\treturn { kind: NodeKind.Leaf, leafKind: schema.leafValue };\n\t}\n\tfail(\"invalid schema kind\");\n}\n"]}
@@ -5,7 +5,7 @@
5
5
  import type { SessionId } from "@fluidframework/id-compressor";
6
6
  import { type ChangeFamily, type ChangeFamilyEditor, type GraphCommit, type RevisionTag } from "../core/index.js";
7
7
  import { SharedTreeBranch } from "./branch.js";
8
- import type { Commit, SeqNumber, SequencedCommit, SummarySessionBranch } from "./editManagerFormat.js";
8
+ import type { SeqNumber, SequencedCommit, SummarySessionBranch } from "./editManagerFormat.js";
9
9
  import { type ITelemetryLoggerExt } from "@fluidframework/telemetry-utils/internal";
10
10
  export declare const minimumPossibleSequenceNumber: SeqNumber;
11
11
  /**
@@ -127,7 +127,16 @@ export declare class EditManager<TEditor extends ChangeFamilyEditor, TChangeset,
127
127
  * have length zero.
128
128
  */
129
129
  getLongestBranchLength(): number;
130
- addSequencedChange(newCommit: Commit<TChangeset>, sequenceNumber: SeqNumber, referenceSequenceNumber: SeqNumber): void;
130
+ /**
131
+ * Add a bunch of sequenced changes. A bunch is a group of sequenced commits that have the following properties:
132
+ * - They are not interleaved with messages from other DDSes in the container.
133
+ * - They are all part of the same batch, which entails:
134
+ * - They are contiguous in sequencing order.
135
+ * - They are all from the same client.
136
+ * - They are all based on the same reference sequence number.
137
+ * - They are not interleaved with messages from other clients.
138
+ */
139
+ addSequencedChanges(newCommits: readonly GraphCommit<TChangeset>[], sessionId: SessionId, sequenceNumber: SeqNumber, referenceSequenceNumber: SeqNumber): void;
131
140
  findLocalCommit(revision: RevisionTag): [commit: GraphCommit<TChangeset>, commitsAfter: GraphCommit<TChangeset>[]];
132
141
  private pushCommitToTrunk;
133
142
  private pushGraphCommitToTrunk;
@@ -1 +1 @@
1
- {"version":3,"file":"editManager.d.ts","sourceRoot":"","sources":["../../src/shared-tree-core/editManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"editManager.d.ts","sourceRoot":"","sources":["../../src/shared-tree-core/editManager.ts"],"names":[],"mappings":"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"}
@@ -307,7 +307,7 @@ class EditManager {
307
307
  // `EditManager` would have to be amended in one of two ways:
308
308
  // A) Changes made by the local session should be represented by a branch in `EditManager.branches`.
309
309
  // B) The contents of such a branch should be computed on demand based on the trunk.
310
- // Note that option (A) would be a simple change to `addSequencedChange` whereas (B) would likely require
310
+ // Note that option (A) would be a simple change to `addSequencedChanges` whereas (B) would likely require
311
311
  // rebasing trunk changes over the inverse of trunk changes.
312
312
  (0, internal_1.assert)(this.localBranch.getHead() === this.trunk.getHead(), 0x428 /* Clients with local changes cannot be used to generate summaries */);
313
313
  // Trimming the trunk before serializing ensures that the trunk data in the summary is as minimal as possible.
@@ -427,12 +427,33 @@ class EditManager {
427
427
  const localPath = getPathFromBase(this.localBranch.getHead(), trunkHead);
428
428
  return Math.max(max, localPath.length);
429
429
  }
430
- addSequencedChange(newCommit, sequenceNumber, referenceSequenceNumber) {
430
+ /* eslint-disable jsdoc/check-indentation */
431
+ /**
432
+ * Add a bunch of sequenced changes. A bunch is a group of sequenced commits that have the following properties:
433
+ * - They are not interleaved with messages from other DDSes in the container.
434
+ * - They are all part of the same batch, which entails:
435
+ * - They are contiguous in sequencing order.
436
+ * - They are all from the same client.
437
+ * - They are all based on the same reference sequence number.
438
+ * - They are not interleaved with messages from other clients.
439
+ */
440
+ /* eslint-enable jsdoc/check-indentation */
441
+ addSequencedChanges(newCommits, sessionId, sequenceNumber, referenceSequenceNumber) {
442
+ (0, internal_1.assert)(newCommits.length > 0, "Expected at least one sequenced change");
431
443
  (0, internal_1.assert)(sequenceNumber > this.minimumSequenceNumber, 0x713 /* Expected change sequence number to exceed the last known minimum sequence number */);
432
444
  (0, internal_1.assert)(sequenceNumber >= // This is ">=", not ">" because changes in the same batch will have the same sequence number
433
445
  (this.sequenceMap.maxKey()?.sequenceNumber ?? exports.minimumPossibleSequenceNumber), 0xa64 /* Attempted to sequence change with an outdated sequence number */);
446
+ // Returns the sequence id for the next commit to be processed in the bunch. Since all the commits have the
447
+ // same sequence number, only the index in the batch needs to be incremented.
448
+ const getNextSequenceId = (sequenceId) => {
449
+ return {
450
+ sequenceNumber: sequenceId.sequenceNumber,
451
+ indexInBatch: (sequenceId.indexInBatch ?? 0) + 1,
452
+ };
453
+ };
434
454
  const commitsSequenceNumber = this.getBatch(sequenceNumber);
435
- const sequenceId = commitsSequenceNumber.length === 0
455
+ // The sequence id for the next commit to be processed in the bunch.
456
+ let nextSequenceId = commitsSequenceNumber.length === 0
436
457
  ? {
437
458
  sequenceNumber,
438
459
  }
@@ -440,33 +461,47 @@ class EditManager {
440
461
  sequenceNumber,
441
462
  indexInBatch: commitsSequenceNumber.length,
442
463
  };
443
- if (newCommit.sessionId === this.localSessionId) {
444
- return this.fastForwardNextLocalCommit(sequenceId);
445
- }
446
- // Get the revision that the remote change is based on
447
- const [, baseRevisionInTrunk] = this.getClosestTrunkCommit(referenceSequenceNumber);
448
- // Rebase that branch over the part of the trunk up to the base revision
449
- // This will be a no-op if the sending client has not advanced since the last time we received an edit from it
450
- const peerLocalBranch = (0, index_js_2.getOrCreate)(this.peerLocalBranches, newCommit.sessionId, () => new branch_js_1.SharedTreeBranch(baseRevisionInTrunk, this.changeFamily, this.mintRevisionTag));
451
- peerLocalBranch.rebaseOnto(this.trunk, baseRevisionInTrunk);
452
- if (peerLocalBranch.getHead() === this.trunk.getHead()) {
453
- // If the branch is fully caught up and empty after being rebased, then push to the trunk directly
454
- this.pushCommitToTrunk(sequenceId, newCommit);
455
- peerLocalBranch.setHead(this.trunk.getHead());
464
+ // Local changes, i.e., changes from this client are applied by fast forwarding the local branch commit onto
465
+ // the trunk.
466
+ if (sessionId === this.localSessionId) {
467
+ for (const _ of newCommits) {
468
+ this.fastForwardNextLocalCommit(nextSequenceId);
469
+ nextSequenceId = getNextSequenceId(nextSequenceId);
470
+ }
471
+ return;
456
472
  }
457
- else {
458
- // Otherwise, rebase the change over the trunk and append it, and append the original change to the peer branch.
459
- const { duration, output: newChangeFullyRebased } = (0, internal_2.measure)(() => (0, index_js_1.rebaseChange)(this.changeFamily.rebaser, newCommit, peerLocalBranch.getHead(), this.trunk.getHead(), this.mintRevisionTag));
460
- this.telemetryEventBatcher?.accumulateAndLog({
461
- duration,
462
- ...newChangeFullyRebased.telemetryProperties,
463
- });
464
- peerLocalBranch.apply((0, index_js_1.tagChange)(newCommit.change, newCommit.revision));
465
- this.pushCommitToTrunk(sequenceId, {
466
- ...newCommit,
467
- change: newChangeFullyRebased.change,
468
- });
473
+ // Remote changes, i.e., changes from remote clients are applied in three steps.
474
+ for (const newCommit of newCommits) {
475
+ // Step 1 - Recreate the peer remote client's local environment.
476
+ // Get the revision that the remote change is based on
477
+ const [, baseRevisionInTrunk] = this.getClosestTrunkCommit(referenceSequenceNumber);
478
+ // Rebase that peer local branch over the part of the trunk up to the base revision
479
+ // This will be a no-op if the sending client has not advanced since the last time we received an edit from it
480
+ const peerLocalBranch = (0, index_js_2.getOrCreate)(this.peerLocalBranches, sessionId, () => new branch_js_1.SharedTreeBranch(baseRevisionInTrunk, this.changeFamily, this.mintRevisionTag));
481
+ peerLocalBranch.rebaseOnto(this.trunk, baseRevisionInTrunk);
482
+ // Step 2 - Append the change to the peer branch. Rebase the change to the tip of the trunk.
483
+ if (peerLocalBranch.getHead() === this.trunk.getHead()) {
484
+ // If the branch is fully caught up and empty after being rebased, then push to the trunk directly
485
+ this.pushCommitToTrunk(nextSequenceId, { ...newCommit, sessionId });
486
+ peerLocalBranch.setHead(this.trunk.getHead());
487
+ }
488
+ else {
489
+ // Otherwise, rebase the change over the trunk and append it, and append the original change to the peer branch.
490
+ const { duration, output: newChangeFullyRebased } = (0, internal_2.measure)(() => (0, index_js_1.rebaseChange)(this.changeFamily.rebaser, newCommit, peerLocalBranch.getHead(), this.trunk.getHead(), this.mintRevisionTag));
491
+ this.telemetryEventBatcher?.accumulateAndLog({
492
+ duration,
493
+ ...newChangeFullyRebased.telemetryProperties,
494
+ });
495
+ peerLocalBranch.apply((0, index_js_1.tagChange)(newCommit.change, newCommit.revision));
496
+ this.pushCommitToTrunk(nextSequenceId, {
497
+ ...newCommit,
498
+ sessionId,
499
+ change: newChangeFullyRebased.change,
500
+ });
501
+ }
502
+ nextSequenceId = getNextSequenceId(nextSequenceId);
469
503
  }
504
+ // Step 3 - Rebase the local branch over the updated trunk.
470
505
  this.localBranch.rebaseOnto(this.trunk);
471
506
  }
472
507
  findLocalCommit(revision) {