@fluidframework/tree 2.103.0 → 2.110.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.
Files changed (224) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/api-report/tree.alpha.api.md +12 -3
  3. package/api-report/tree.beta.api.md +11 -3
  4. package/api-report/tree.legacy.beta.api.md +11 -3
  5. package/dist/codec/versioned/format.js +2 -24
  6. package/dist/codec/versioned/format.js.map +1 -1
  7. package/dist/core/rebase/types.js +2 -24
  8. package/dist/core/rebase/types.js.map +1 -1
  9. package/dist/core/schema-stored/formatV1.js +2 -24
  10. package/dist/core/schema-stored/formatV1.js.map +1 -1
  11. package/dist/core/schema-stored/formatV2.js +2 -24
  12. package/dist/core/schema-stored/formatV2.js.map +1 -1
  13. package/dist/core/schema-stored/index.js +3 -25
  14. package/dist/core/schema-stored/index.js.map +1 -1
  15. package/dist/core/tree/anchorSet.js +4 -8
  16. package/dist/core/tree/anchorSet.js.map +1 -1
  17. package/dist/core/tree/detachedFieldIndexFormatCommon.js +2 -24
  18. package/dist/core/tree/detachedFieldIndexFormatCommon.js.map +1 -1
  19. package/dist/core/tree/detachedFieldIndexFormatV2.js +2 -24
  20. package/dist/core/tree/detachedFieldIndexFormatV2.js.map +1 -1
  21. package/dist/core/tree/persistedTreeTextFormat.js +2 -24
  22. package/dist/core/tree/persistedTreeTextFormat.js.map +1 -1
  23. package/dist/entrypoints/internal.js +2 -15
  24. package/dist/entrypoints/internal.js.map +1 -1
  25. package/dist/feature-libraries/chunked-forest/chunkedForest.js +7 -11
  26. package/dist/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  27. package/dist/feature-libraries/chunked-forest/codec/format/formatGeneric.js +2 -24
  28. package/dist/feature-libraries/chunked-forest/codec/format/formatGeneric.js.map +1 -1
  29. package/dist/feature-libraries/chunked-forest/codec/format/formatV1.js +2 -24
  30. package/dist/feature-libraries/chunked-forest/codec/format/formatV1.js.map +1 -1
  31. package/dist/feature-libraries/chunked-forest/codec/format/formatV2.js +2 -24
  32. package/dist/feature-libraries/chunked-forest/codec/format/formatV2.js.map +1 -1
  33. package/dist/feature-libraries/chunked-forest/codec/format/formatVText.js +2 -24
  34. package/dist/feature-libraries/chunked-forest/codec/format/formatVText.js.map +1 -1
  35. package/dist/feature-libraries/flex-tree/lazyEntity.js +9 -19
  36. package/dist/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
  37. package/dist/feature-libraries/flex-tree/lazyNode.js +3 -13
  38. package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  39. package/dist/feature-libraries/forest-summary/formatCommon.js +2 -24
  40. package/dist/feature-libraries/forest-summary/formatCommon.js.map +1 -1
  41. package/dist/feature-libraries/index.js +2 -24
  42. package/dist/feature-libraries/index.js.map +1 -1
  43. package/dist/feature-libraries/modular-schema/genericFieldKindFormat.js +2 -24
  44. package/dist/feature-libraries/modular-schema/genericFieldKindFormat.js.map +1 -1
  45. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  46. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +10 -30
  47. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  48. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.js +2 -24
  49. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
  50. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.js +2 -24
  51. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.js.map +1 -1
  52. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts +0 -5
  53. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  54. package/dist/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  55. package/dist/feature-libraries/object-forest/objectForest.js +11 -55
  56. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  57. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.js +2 -24
  58. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.js.map +1 -1
  59. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV2.js +2 -24
  60. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV2.js.map +1 -1
  61. package/dist/feature-libraries/schema-edits/schemaChangeFormat.js +2 -24
  62. package/dist/feature-libraries/schema-edits/schemaChangeFormat.js.map +1 -1
  63. package/dist/feature-libraries/schema-index/formatV1.js +2 -24
  64. package/dist/feature-libraries/schema-index/formatV1.js.map +1 -1
  65. package/dist/feature-libraries/schema-index/formatV2.js +2 -24
  66. package/dist/feature-libraries/schema-index/formatV2.js.map +1 -1
  67. package/dist/feature-libraries/sequence-field/formatV1.js +2 -24
  68. package/dist/feature-libraries/sequence-field/formatV1.js.map +1 -1
  69. package/dist/feature-libraries/sequence-field/formatV2.js +2 -24
  70. package/dist/feature-libraries/sequence-field/formatV2.js.map +1 -1
  71. package/dist/feature-libraries/sequence-field/formatV3.js +2 -24
  72. package/dist/feature-libraries/sequence-field/formatV3.js.map +1 -1
  73. package/dist/index.js +2 -24
  74. package/dist/index.js.map +1 -1
  75. package/dist/packageVersion.d.ts +1 -1
  76. package/dist/packageVersion.js +1 -1
  77. package/dist/packageVersion.js.map +1 -1
  78. package/dist/shared-tree/schematizingTreeView.d.ts +1 -0
  79. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  80. package/dist/shared-tree/schematizingTreeView.js +7 -41
  81. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  82. package/dist/shared-tree/sharedTree.d.ts +0 -1
  83. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  84. package/dist/shared-tree/sharedTree.js +6 -45
  85. package/dist/shared-tree/sharedTree.js.map +1 -1
  86. package/dist/shared-tree/sharedTreeChangeFormat.js +2 -24
  87. package/dist/shared-tree/sharedTreeChangeFormat.js.map +1 -1
  88. package/dist/shared-tree/treeCheckout.d.ts +12 -3
  89. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  90. package/dist/shared-tree/treeCheckout.js +106 -136
  91. package/dist/shared-tree/treeCheckout.js.map +1 -1
  92. package/dist/shared-tree-core/branch.js +13 -17
  93. package/dist/shared-tree-core/branch.js.map +1 -1
  94. package/dist/shared-tree-core/editManagerFormatCommons.js +2 -24
  95. package/dist/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  96. package/dist/shared-tree-core/editManagerFormatV1toV4.js +2 -24
  97. package/dist/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
  98. package/dist/shared-tree-core/editManagerFormatVSharedBranches.js +2 -24
  99. package/dist/shared-tree-core/editManagerFormatVSharedBranches.js.map +1 -1
  100. package/dist/shared-tree-core/messageCodecVSharedBranches.js +2 -24
  101. package/dist/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
  102. package/dist/shared-tree-core/messageFormatV1ToV4.js +2 -24
  103. package/dist/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
  104. package/dist/shared-tree-core/messageFormatVSharedBranches.js +2 -24
  105. package/dist/shared-tree-core/messageFormatVSharedBranches.js.map +1 -1
  106. package/dist/shared-tree-core/sharedTreeCore.js +6 -43
  107. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  108. package/dist/shared-tree-core/transaction.js +20 -30
  109. package/dist/shared-tree-core/transaction.js.map +1 -1
  110. package/dist/simple-tree/api/simpleSchemaCodec.js +2 -24
  111. package/dist/simple-tree/api/simpleSchemaCodec.js.map +1 -1
  112. package/dist/simple-tree/api/snapshotCompatibilityChecker.js +2 -24
  113. package/dist/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -1
  114. package/dist/simple-tree/api/tree.d.ts +10 -0
  115. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  116. package/dist/simple-tree/api/tree.js.map +1 -1
  117. package/dist/simple-tree/core/treeNodeKernel.js +83 -93
  118. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  119. package/dist/simple-tree/core/unhydratedFlexTree.js +6 -10
  120. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  121. package/dist/simple-tree/leafNodeSchema.js +2 -12
  122. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  123. package/dist/simple-tree/node-kinds/array/arrayNode.js +2 -6
  124. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  125. package/dist/simple-tree/simpleSchemaFormatV1.js +2 -24
  126. package/dist/simple-tree/simpleSchemaFormatV1.js.map +1 -1
  127. package/dist/tableSchema.d.ts +50 -4
  128. package/dist/tableSchema.d.ts.map +1 -1
  129. package/dist/tableSchema.js +202 -106
  130. package/dist/tableSchema.js.map +1 -1
  131. package/dist/util/arrayUtilities.d.ts +20 -0
  132. package/dist/util/arrayUtilities.d.ts.map +1 -1
  133. package/dist/util/arrayUtilities.js +24 -1
  134. package/dist/util/arrayUtilities.js.map +1 -1
  135. package/dist/util/index.d.ts +1 -1
  136. package/dist/util/index.d.ts.map +1 -1
  137. package/dist/util/index.js +3 -2
  138. package/dist/util/index.js.map +1 -1
  139. package/dist/util/rangeMap.d.ts +13 -0
  140. package/dist/util/rangeMap.d.ts.map +1 -1
  141. package/dist/util/rangeMap.js +69 -8
  142. package/dist/util/rangeMap.js.map +1 -1
  143. package/dist/util/typeboxBrand.js +2 -24
  144. package/dist/util/typeboxBrand.js.map +1 -1
  145. package/dist/util/utils.js +2 -24
  146. package/dist/util/utils.js.map +1 -1
  147. package/eslint.config.mts +0 -30
  148. package/lib/core/tree/anchorSet.js +1 -5
  149. package/lib/core/tree/anchorSet.js.map +1 -1
  150. package/lib/feature-libraries/chunked-forest/chunkedForest.js +1 -5
  151. package/lib/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  152. package/lib/feature-libraries/flex-tree/lazyEntity.js +1 -11
  153. package/lib/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
  154. package/lib/feature-libraries/flex-tree/lazyNode.js +1 -11
  155. package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  156. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  157. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +10 -30
  158. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  159. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts +0 -5
  160. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  161. package/lib/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  162. package/lib/feature-libraries/object-forest/objectForest.js +1 -45
  163. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  164. package/lib/packageVersion.d.ts +1 -1
  165. package/lib/packageVersion.js +1 -1
  166. package/lib/packageVersion.js.map +1 -1
  167. package/lib/shared-tree/schematizingTreeView.d.ts +1 -0
  168. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  169. package/lib/shared-tree/schematizingTreeView.js +4 -38
  170. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  171. package/lib/shared-tree/sharedTree.d.ts +0 -1
  172. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  173. package/lib/shared-tree/sharedTree.js +1 -40
  174. package/lib/shared-tree/sharedTree.js.map +1 -1
  175. package/lib/shared-tree/treeCheckout.d.ts +12 -3
  176. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  177. package/lib/shared-tree/treeCheckout.js +62 -92
  178. package/lib/shared-tree/treeCheckout.js.map +1 -1
  179. package/lib/shared-tree-core/branch.js +1 -5
  180. package/lib/shared-tree-core/branch.js.map +1 -1
  181. package/lib/shared-tree-core/sharedTreeCore.js +1 -38
  182. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  183. package/lib/shared-tree-core/transaction.js +1 -11
  184. package/lib/shared-tree-core/transaction.js.map +1 -1
  185. package/lib/simple-tree/api/tree.d.ts +10 -0
  186. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  187. package/lib/simple-tree/api/tree.js.map +1 -1
  188. package/lib/simple-tree/core/treeNodeKernel.js +1 -11
  189. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  190. package/lib/simple-tree/core/unhydratedFlexTree.js +1 -5
  191. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  192. package/lib/simple-tree/leafNodeSchema.js +1 -11
  193. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  194. package/lib/simple-tree/node-kinds/array/arrayNode.js +1 -5
  195. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  196. package/lib/tableSchema.d.ts +50 -4
  197. package/lib/tableSchema.d.ts.map +1 -1
  198. package/lib/tableSchema.js +171 -75
  199. package/lib/tableSchema.js.map +1 -1
  200. package/lib/util/arrayUtilities.d.ts +20 -0
  201. package/lib/util/arrayUtilities.d.ts.map +1 -1
  202. package/lib/util/arrayUtilities.js +22 -0
  203. package/lib/util/arrayUtilities.js.map +1 -1
  204. package/lib/util/index.d.ts +1 -1
  205. package/lib/util/index.d.ts.map +1 -1
  206. package/lib/util/index.js +1 -1
  207. package/lib/util/index.js.map +1 -1
  208. package/lib/util/rangeMap.d.ts +13 -0
  209. package/lib/util/rangeMap.d.ts.map +1 -1
  210. package/lib/util/rangeMap.js +69 -8
  211. package/lib/util/rangeMap.js.map +1 -1
  212. package/package.json +24 -23
  213. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +14 -47
  214. package/src/feature-libraries/modular-schema/modularChangeTypes.ts +0 -5
  215. package/src/packageVersion.ts +1 -1
  216. package/src/shared-tree/schematizingTreeView.ts +4 -0
  217. package/src/shared-tree/sharedTree.ts +2 -6
  218. package/src/shared-tree/treeCheckout.ts +59 -51
  219. package/src/simple-tree/api/tree.ts +11 -0
  220. package/src/tableSchema.ts +306 -80
  221. package/src/util/arrayUtilities.ts +35 -0
  222. package/src/util/index.ts +2 -0
  223. package/src/util/rangeMap.ts +108 -9
  224. package/tsconfig.json +5 -0
@@ -50,11 +50,6 @@ export interface ModularChangeset extends Readonly<HasFieldChanges> {
50
50
  readonly noChangeConstraint?: NoChangeConstraint;
51
51
  /** Constraint that the document must be in the same state before the revert of this change is applied as it was after this change was applied */
52
52
  readonly noChangeConstraintOnRevert?: NoChangeConstraint;
53
- /**
54
- * The number of constraint violations that apply to the revert of the changeset. If this count is greater than 0, it will
55
- * prevent the changeset from being reverted or undone.
56
- */
57
- readonly constraintViolationCountOnRevert?: number;
58
53
  readonly builds?: ChangeAtomIdBTree<TreeChunk>;
59
54
  readonly destroys?: ChangeAtomIdBTree<number>;
60
55
  readonly refreshers?: ChangeAtomIdBTree<TreeChunk>;
@@ -1 +1 @@
1
- {"version":3,"file":"modularChangeTypes.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/modular-schema/modularChangeTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"modularChangeTypes.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/modular-schema/modularChangeTypes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"modularChangeTypes.js","sourceRoot":"","sources":["../../../src/feature-libraries/modular-schema/modularChangeTypes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,qBAAqB,GAMrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAc,MAAM,qBAAqB,CAAC;AAiElE,MAAM,UAAU,qBAAqB;IACpC,OAAO,IAAI,QAAQ,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAkB,EAAE,MAAc;IAC9D,OAAO;QACN,GAAG,GAAG;QACN,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC;KACpC,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,CAAgB,EAAE,CAAgB;IACjE,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,SAAS,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAC7C,CAAC;IAED,OAAO,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACpC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n\tsubtractChangeAtomIds,\n\ttype ChangeAtomId,\n\ttype ChangesetLocalId,\n\ttype FieldKey,\n\ttype FieldKindIdentifier,\n\ttype RevisionInfo,\n} from \"../../core/index.js\";\nimport { brand, RangeMap, type Brand } from \"../../util/index.js\";\nimport type { ChangeAtomIdBTree } from \"../changeAtomIdBTree.js\";\nimport type { TreeChunk } from \"../chunked-forest/index.js\";\n\nimport type { CrossFieldTarget } from \"./crossFieldQueries.js\";\n\nexport interface ModularChangeset extends Readonly<HasFieldChanges> {\n\t/**\n\t * The numerically highest `ChangesetLocalId` used in this changeset.\n\t * If undefined then this changeset contains no IDs.\n\t */\n\treadonly maxId?: ChangesetLocalId;\n\t/**\n\t * The revisions included in this changeset, ordered temporally (oldest to newest).\n\t * Undefined for anonymous changesets.\n\t * Should never be empty.\n\t */\n\treadonly revisions?: readonly RevisionInfo[];\n\treadonly fieldChanges: FieldChangeMap;\n\n\t/**\n\t * Maps from this changeset's canonical ID for a node (see comment on node aliases) to the changes for that node.\n\t */\n\treadonly nodeChanges: ChangeAtomIdBTree<NodeChangeset>;\n\n\t/**\n\t * Maps from this changeset's canonical ID for a node to the ID for the field which contains that node.\n\t */\n\t// TODO: Should this be merged with `nodeChanges`?\n\treadonly nodeToParent: ChangeAtomIdBTree<FieldId>;\n\n\t/**\n\t * Maps from a node ID to another ID for the same node.\n\t * If a node ID used in this changeset has no entry in this table, then it is the canonical ID for that node.\n\t * The aliases form a set of trees, where the root of each tree is a canonical ID.\n\t *\n\t * When composing changesets with different canonical IDs for the same node,\n\t * one of those IDs becomes the canonical ID for the composition, while the other is added to this table as an alias.\n\t *\n\t * Node aliases are preserved when composing changesets so we can avoid having to find and update all changed node IDs\n\t * in the field IDs in nodeToParent and crossFieldKeys.\n\t */\n\treadonly nodeAliases: ChangeAtomIdBTree<NodeId>;\n\treadonly crossFieldKeys: CrossFieldKeyTable;\n\t/**\n\t * The number of constraint violations that apply to the input context of the changeset, i.e., before this change is applied.\n\t * If this count is greater than 0, it will prevent the changeset from being applied.\n\t */\n\treadonly constraintViolationCount?: number;\n\t/** Constraint that the document must be in the same state before this change is applied as it was before this change was authored */\n\treadonly noChangeConstraint?: NoChangeConstraint;\n\t/** Constraint that the document must be in the same state before the revert of this change is applied as it was after this change was applied */\n\treadonly noChangeConstraintOnRevert?: NoChangeConstraint;\n\t/**\n\t * The number of constraint violations that apply to the revert of the changeset. If this count is greater than 0, it will\n\t * prevent the changeset from being reverted or undone.\n\t */\n\treadonly constraintViolationCountOnRevert?: number;\n\treadonly builds?: ChangeAtomIdBTree<TreeChunk>;\n\treadonly destroys?: ChangeAtomIdBTree<number>;\n\treadonly refreshers?: ChangeAtomIdBTree<TreeChunk>;\n}\n\nexport type CrossFieldKeyTable = RangeMap<CrossFieldKey, FieldId>;\n\nexport function newCrossFieldKeyTable(): CrossFieldKeyTable {\n\treturn new RangeMap(offsetCrossFieldKey, subtractCrossFieldKeys);\n}\n\nfunction offsetCrossFieldKey(key: CrossFieldKey, offset: number): CrossFieldKey {\n\treturn {\n\t\t...key,\n\t\tlocalId: brand(key.localId + offset),\n\t};\n}\n\nfunction subtractCrossFieldKeys(a: CrossFieldKey, b: CrossFieldKey): number {\n\tconst cmpTarget = a.target - b.target;\n\tif (cmpTarget !== 0) {\n\t\treturn cmpTarget * Number.POSITIVE_INFINITY;\n\t}\n\n\treturn subtractChangeAtomIds(a, b);\n}\n\nexport interface CrossFieldKey extends ChangeAtomId {\n\treadonly target: CrossFieldTarget;\n}\n\nexport interface CrossFieldKeyRange {\n\treadonly key: CrossFieldKey;\n\treadonly count: number;\n}\n\nexport interface FieldId {\n\treadonly nodeId: NodeId | undefined;\n\treadonly field: FieldKey;\n}\n\nexport interface NodeExistsConstraint {\n\tviolated: boolean;\n}\n\n/**\n * A constraint that is violated whenever the state of the document is different from when the change was authored.\n */\nexport interface NoChangeConstraint {\n\tviolated: boolean;\n}\n\n/**\n * Changeset for a subtree rooted at a specific node.\n */\nexport interface NodeChangeset extends HasFieldChanges {\n\t/** Keeps track of whether node exists constraint has been violated by this change */\n\tnodeExistsConstraint?: NodeExistsConstraint;\n\t/** Keeps track of whether node exists constraint will be violated when this change is reverted */\n\tnodeExistsConstraintOnRevert?: NodeExistsConstraint;\n}\n\nexport type NodeId = ChangeAtomId;\n\nexport interface HasFieldChanges {\n\tfieldChanges?: FieldChangeMap;\n}\n\nexport type FieldChangeMap = Map<FieldKey, FieldChange>;\n\nexport interface FieldChange {\n\treadonly fieldKind: FieldKindIdentifier;\n\tchange: FieldChangeset;\n}\n\nexport type FieldChangeset = Brand<unknown, \"FieldChangeset\">;\n"]}
1
+ {"version":3,"file":"modularChangeTypes.js","sourceRoot":"","sources":["../../../src/feature-libraries/modular-schema/modularChangeTypes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,qBAAqB,GAMrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAc,MAAM,qBAAqB,CAAC;AA4DlE,MAAM,UAAU,qBAAqB;IACpC,OAAO,IAAI,QAAQ,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAkB,EAAE,MAAc;IAC9D,OAAO;QACN,GAAG,GAAG;QACN,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC;KACpC,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,CAAgB,EAAE,CAAgB;IACjE,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,SAAS,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAC7C,CAAC;IAED,OAAO,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACpC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n\tsubtractChangeAtomIds,\n\ttype ChangeAtomId,\n\ttype ChangesetLocalId,\n\ttype FieldKey,\n\ttype FieldKindIdentifier,\n\ttype RevisionInfo,\n} from \"../../core/index.js\";\nimport { brand, RangeMap, type Brand } from \"../../util/index.js\";\nimport type { ChangeAtomIdBTree } from \"../changeAtomIdBTree.js\";\nimport type { TreeChunk } from \"../chunked-forest/index.js\";\n\nimport type { CrossFieldTarget } from \"./crossFieldQueries.js\";\n\nexport interface ModularChangeset extends Readonly<HasFieldChanges> {\n\t/**\n\t * The numerically highest `ChangesetLocalId` used in this changeset.\n\t * If undefined then this changeset contains no IDs.\n\t */\n\treadonly maxId?: ChangesetLocalId;\n\t/**\n\t * The revisions included in this changeset, ordered temporally (oldest to newest).\n\t * Undefined for anonymous changesets.\n\t * Should never be empty.\n\t */\n\treadonly revisions?: readonly RevisionInfo[];\n\treadonly fieldChanges: FieldChangeMap;\n\n\t/**\n\t * Maps from this changeset's canonical ID for a node (see comment on node aliases) to the changes for that node.\n\t */\n\treadonly nodeChanges: ChangeAtomIdBTree<NodeChangeset>;\n\n\t/**\n\t * Maps from this changeset's canonical ID for a node to the ID for the field which contains that node.\n\t */\n\t// TODO: Should this be merged with `nodeChanges`?\n\treadonly nodeToParent: ChangeAtomIdBTree<FieldId>;\n\n\t/**\n\t * Maps from a node ID to another ID for the same node.\n\t * If a node ID used in this changeset has no entry in this table, then it is the canonical ID for that node.\n\t * The aliases form a set of trees, where the root of each tree is a canonical ID.\n\t *\n\t * When composing changesets with different canonical IDs for the same node,\n\t * one of those IDs becomes the canonical ID for the composition, while the other is added to this table as an alias.\n\t *\n\t * Node aliases are preserved when composing changesets so we can avoid having to find and update all changed node IDs\n\t * in the field IDs in nodeToParent and crossFieldKeys.\n\t */\n\treadonly nodeAliases: ChangeAtomIdBTree<NodeId>;\n\treadonly crossFieldKeys: CrossFieldKeyTable;\n\t/**\n\t * The number of constraint violations that apply to the input context of the changeset, i.e., before this change is applied.\n\t * If this count is greater than 0, it will prevent the changeset from being applied.\n\t */\n\treadonly constraintViolationCount?: number;\n\t/** Constraint that the document must be in the same state before this change is applied as it was before this change was authored */\n\treadonly noChangeConstraint?: NoChangeConstraint;\n\t/** Constraint that the document must be in the same state before the revert of this change is applied as it was after this change was applied */\n\treadonly noChangeConstraintOnRevert?: NoChangeConstraint;\n\treadonly builds?: ChangeAtomIdBTree<TreeChunk>;\n\treadonly destroys?: ChangeAtomIdBTree<number>;\n\treadonly refreshers?: ChangeAtomIdBTree<TreeChunk>;\n}\n\nexport type CrossFieldKeyTable = RangeMap<CrossFieldKey, FieldId>;\n\nexport function newCrossFieldKeyTable(): CrossFieldKeyTable {\n\treturn new RangeMap(offsetCrossFieldKey, subtractCrossFieldKeys);\n}\n\nfunction offsetCrossFieldKey(key: CrossFieldKey, offset: number): CrossFieldKey {\n\treturn {\n\t\t...key,\n\t\tlocalId: brand(key.localId + offset),\n\t};\n}\n\nfunction subtractCrossFieldKeys(a: CrossFieldKey, b: CrossFieldKey): number {\n\tconst cmpTarget = a.target - b.target;\n\tif (cmpTarget !== 0) {\n\t\treturn cmpTarget * Number.POSITIVE_INFINITY;\n\t}\n\n\treturn subtractChangeAtomIds(a, b);\n}\n\nexport interface CrossFieldKey extends ChangeAtomId {\n\treadonly target: CrossFieldTarget;\n}\n\nexport interface CrossFieldKeyRange {\n\treadonly key: CrossFieldKey;\n\treadonly count: number;\n}\n\nexport interface FieldId {\n\treadonly nodeId: NodeId | undefined;\n\treadonly field: FieldKey;\n}\n\nexport interface NodeExistsConstraint {\n\tviolated: boolean;\n}\n\n/**\n * A constraint that is violated whenever the state of the document is different from when the change was authored.\n */\nexport interface NoChangeConstraint {\n\tviolated: boolean;\n}\n\n/**\n * Changeset for a subtree rooted at a specific node.\n */\nexport interface NodeChangeset extends HasFieldChanges {\n\t/** Keeps track of whether node exists constraint has been violated by this change */\n\tnodeExistsConstraint?: NodeExistsConstraint;\n\t/** Keeps track of whether node exists constraint will be violated when this change is reverted */\n\tnodeExistsConstraintOnRevert?: NodeExistsConstraint;\n}\n\nexport type NodeId = ChangeAtomId;\n\nexport interface HasFieldChanges {\n\tfieldChanges?: FieldChangeMap;\n}\n\nexport type FieldChangeMap = Map<FieldKey, FieldChange>;\n\nexport interface FieldChange {\n\treadonly fieldKind: FieldKindIdentifier;\n\tchange: FieldChangeset;\n}\n\nexport type FieldChangeset = Brand<unknown, \"FieldChangeset\">;\n"]}
@@ -2,51 +2,7 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
6
- var useValue = arguments.length > 2;
7
- for (var i = 0; i < initializers.length; i++) {
8
- value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
9
- }
10
- return useValue ? value : void 0;
11
- };
12
- var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
13
- function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
14
- var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
15
- var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
16
- var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
17
- var _, done = false;
18
- for (var i = decorators.length - 1; i >= 0; i--) {
19
- var context = {};
20
- for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
21
- for (var p in contextIn.access) context.access[p] = contextIn.access[p];
22
- context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
23
- var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
24
- if (kind === "accessor") {
25
- if (result === void 0) continue;
26
- if (result === null || typeof result !== "object") throw new TypeError("Object expected");
27
- if (_ = accept(result.get)) descriptor.get = _;
28
- if (_ = accept(result.set)) descriptor.set = _;
29
- if (_ = accept(result.init)) initializers.unshift(_);
30
- }
31
- else if (_ = accept(result)) {
32
- if (kind === "field") initializers.unshift(_);
33
- else descriptor[key] = _;
34
- }
35
- }
36
- if (target) Object.defineProperty(target, contextIn.name, descriptor);
37
- done = true;
38
- };
39
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
40
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
41
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
42
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
43
- };
44
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
45
- if (kind === "m") throw new TypeError("Private method is not writable");
46
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
47
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
48
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
49
- };
5
+ import { __classPrivateFieldGet, __classPrivateFieldSet, __esDecorate, __runInitializers } from "tslib";
50
6
  import { createEmitter } from "@fluid-internal/client-utils";
51
7
  import { assert, fail } from "@fluidframework/core-utils/internal";
52
8
  import { AnchorSet, ITreeSubscriptionCursorState, aboveRootPlaceholder, combineVisitors, deepCopyMapTree, rootFieldKey, } from "../../core/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"objectForest.js","sourceRoot":"","sources":["../../../src/feature-libraries/object-forest/objectForest.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 { createEmitter } from \"@fluid-internal/client-utils\";\nimport type { Listenable } from \"@fluidframework/core-interfaces\";\nimport { assert, fail } from \"@fluidframework/core-utils/internal\";\n\nimport {\n\ttype Anchor,\n\tAnchorSet,\n\ttype AnnouncedVisitor,\n\ttype CursorLocationType,\n\ttype DeltaDetachedNodeId,\n\ttype DeltaVisitor,\n\ttype DetachedField,\n\ttype FieldAnchor,\n\ttype FieldKey,\n\ttype FieldUpPath,\n\ttype ForestEvents,\n\ttype IEditableForest,\n\ttype ITreeCursor,\n\ttype ITreeCursorSynchronous,\n\ttype ITreeSubscriptionCursor,\n\tITreeSubscriptionCursorState,\n\ttype MapTree,\n\ttype PathRootPrefix,\n\ttype PlaceIndex,\n\ttype Range,\n\ttype TreeChunk,\n\ttype TreeFieldStoredSchema,\n\tTreeNavigationResult,\n\ttype TreeNodeSchemaIdentifier,\n\ttype TreeStoredSchemaSubscription,\n\ttype UpPath,\n\ttype Value,\n\taboveRootPlaceholder,\n\tcombineVisitors,\n\tdeepCopyMapTree,\n\trootFieldKey,\n} from \"../../core/index.js\";\nimport {\n\tassertNonNegativeSafeInteger,\n\tassertValidIndex,\n\tassertValidRange,\n\tbrand,\n\tbreakingMethod,\n\ttype Breakable,\n\ttype WithBreakable,\n} from \"../../util/index.js\";\nimport { chunkField, defaultChunkPolicy } from \"../chunked-forest/index.js\";\nimport { defaultSchemaPolicy, FieldKinds } from \"../default-schema/index.js\";\nimport { cursorForMapTreeNode, mapTreeFromCursor } from \"../mapTreeCursor.js\";\nimport { isFieldInSchema, throwOutOfSchema } from \"../schemaChecker.js\";\nimport { type CursorWithNode, SynchronousCursor } from \"../treeCursorUtils.js\";\n\n/** A `MapTree` with mutable fields */\ninterface MutableMapTree extends MapTree {\n\treadonly fields: Map<FieldKey, MutableMapTree[]>;\n}\n\n/** Get a field from a `MutableMapTree`, optionally modifying the tree to create it if missing. */\nfunction getOrCreateField(mapTree: MutableMapTree, key: FieldKey): MutableMapTree[] {\n\tconst field = mapTree.fields.get(key);\n\tif (field !== undefined) {\n\t\treturn field;\n\t}\n\n\tconst newField: MutableMapTree[] = [];\n\tmapTree.fields.set(key, newField);\n\treturn newField;\n}\n\n/**\n * Reference implementation of IEditableForest.\n *\n * This implementation focuses on correctness and simplicity, not performance.\n * It does not use compressed chunks: instead nodes are implemented using objects.\n */\nexport class ObjectForest implements IEditableForest, WithBreakable {\n\tprivate activeVisitor?: DeltaVisitor;\n\n\t// All cursors that are in the \"Current\" state. Must be empty when editing.\n\tpublic readonly currentCursors: Set<Cursor> = new Set();\n\tprivate readonly deltaVisitors: Set<() => AnnouncedVisitor> = new Set();\n\n\treadonly #events = createEmitter<ForestEvents>();\n\tpublic readonly events: Listenable<ForestEvents> = this.#events;\n\n\treadonly #roots: MutableMapTree;\n\tpublic get roots(): MapTree {\n\t\treturn this.#roots;\n\t}\n\n\tpublic constructor(\n\t\tpublic readonly breaker: Breakable,\n\t\t/**\n\t\t * If provided, may be used for validation, but otherwise unused.\n\t\t */\n\t\tpublic readonly schema: TreeStoredSchemaSubscription | undefined,\n\t\tpublic readonly anchors: AnchorSet = new AnchorSet(),\n\t\tpublic readonly additionalAsserts: boolean = false,\n\t\troots?: MapTree,\n\t) {\n\t\tthis.#roots =\n\t\t\troots === undefined\n\t\t\t\t? {\n\t\t\t\t\t\ttype: aboveRootPlaceholder,\n\t\t\t\t\t\tfields: new Map(),\n\t\t\t\t\t}\n\t\t\t\t: deepCopyMapTree(roots);\n\n\t\tif (additionalAsserts) {\n\t\t\tthis.checkSchema();\n\t\t}\n\t}\n\n\tpublic get isEmpty(): boolean {\n\t\treturn this.roots.fields.size === 0;\n\t}\n\n\tpublic clone(schema: TreeStoredSchemaSubscription, breaker?: Breakable): ObjectForest {\n\t\treturn new ObjectForest(\n\t\t\tbreaker ?? this.breaker,\n\t\t\tschema,\n\t\t\tundefined,\n\t\t\tthis.additionalAsserts,\n\t\t\tthis.roots,\n\t\t);\n\t}\n\n\tpublic chunkField(cursor: ITreeCursorSynchronous): TreeChunk[] {\n\t\treturn chunkField(cursor, { idCompressor: undefined, policy: defaultChunkPolicy });\n\t}\n\n\tpublic forgetAnchor(anchor: Anchor): void {\n\t\tthis.anchors.forget(anchor);\n\t}\n\n\t/**\n\t * Throw (and break) if content does not match schema.\n\t */\n\t@breakingMethod\n\tpublic checkSchema(): void {\n\t\tconst schema = this.schema;\n\t\tif (schema !== undefined) {\n\t\t\tconst roots = new Set([...this.roots.fields.keys(), rootFieldKey]);\n\t\t\tfor (const key of roots) {\n\t\t\t\tconst documentRoot = this.roots.fields.get(key) ?? [];\n\t\t\t\tconst fieldSchema: TreeFieldStoredSchema =\n\t\t\t\t\tkey === rootFieldKey\n\t\t\t\t\t\t? schema.rootFieldSchema\n\t\t\t\t\t\t: // TODO: someday we should have schema for detached fields, and use that instead of generating one here.\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t// Some detached fields may have multiple nodes, so we must treat them as sequences:\n\t\t\t\t\t\t\t\tkind: FieldKinds.sequence.identifier,\n\t\t\t\t\t\t\t\ttypes: new Set(documentRoot.map((node) => node.type)),\n\n\t\t\t\t\t\t\t\t// Metadata is not used for schema checks\n\t\t\t\t\t\t\t\tpersistedMetadata: undefined,\n\t\t\t\t\t\t\t};\n\t\t\t\tisFieldInSchema(\n\t\t\t\t\tdocumentRoot,\n\t\t\t\t\tfieldSchema,\n\t\t\t\t\t{\n\t\t\t\t\t\tschema,\n\t\t\t\t\t\tpolicy: defaultSchemaPolicy,\n\t\t\t\t\t},\n\t\t\t\t\tthrowOutOfSchema,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic acquireVisitor(): DeltaVisitor {\n\t\tassert(\n\t\t\tthis.activeVisitor === undefined,\n\t\t\t0x76c /* Must release existing visitor before acquiring another */,\n\t\t);\n\n\t\t// Note: This code uses cursors, however it also modifies the tree.\n\t\t// In general this is not safe, but this code happens to only modify the tree below the current cursor location,\n\t\t// which happens to work.\n\t\t// This pattern could be generalized/formalized with a concept of an exclusive cursor,\n\t\t// which can edit, but is the only cursor allowed at the time.\n\n\t\tconst cursor: Cursor = this.allocateCursor(\"acquireVisitor\");\n\t\tcursor.setToAboveDetachedSequences();\n\n\t\t/**\n\t\t * Called before each edit to allow cursor cleanup to happen and ensure that there are no unexpected cursors.\n\t\t * This is required for each change since there may be app facing change event handlers which create cursors.\n\t\t */\n\t\tconst preEdit = (): void => {\n\t\t\tthis.#events.emit(\"beforeChange\");\n\t\t\tassert(\n\t\t\t\tthis.currentCursors.has(cursor),\n\t\t\t\t0x995 /* missing visitor cursor while editing */,\n\t\t\t);\n\t\t\tif (this.currentCursors.size > 1) {\n\t\t\t\tconst unexpectedSources = [...this.currentCursors].flatMap((c) =>\n\t\t\t\t\tc === cursor ? [] : (c.source ?? null),\n\t\t\t\t);\n\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Found unexpected cursors when editing with the following annotations: ${JSON.stringify(\n\t\t\t\t\t\tunexpectedSources,\n\t\t\t\t\t)}`,\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\tclass Visitor implements DeltaVisitor {\n\t\t\tpublic constructor(private readonly forest: ObjectForest) {}\n\t\t\tpublic free(): void {\n\t\t\t\tcursor.free();\n\t\t\t\tassert(\n\t\t\t\t\tthis.forest.activeVisitor !== undefined,\n\t\t\t\t\t0x76d /* Multiple free calls for same visitor */,\n\t\t\t\t);\n\t\t\t\tthis.forest.activeVisitor = undefined;\n\t\t\t\tif (this.forest.additionalAsserts) {\n\t\t\t\t\t// Schema validation:\n\t\t\t\t\t// When doing \"additionalAsserts\", validate the content against the schema after every batch of edits.\n\t\t\t\t\tthis.forest.checkSchema();\n\t\t\t\t}\n\t\t\t}\n\t\t\tpublic destroy(detachedField: FieldKey, count: number): void {\n\t\t\t\tpreEdit();\n\t\t\t\tthis.forest.delete(detachedField);\n\t\t\t}\n\t\t\tpublic create(content: readonly ITreeCursorSynchronous[], destination: FieldKey): void {\n\t\t\t\tpreEdit();\n\t\t\t\tthis.forest.add(content, destination);\n\t\t\t\tthis.forest.#events.emit(\"afterRootFieldCreated\", destination);\n\t\t\t}\n\t\t\tpublic attach(source: FieldKey, count: number, destination: PlaceIndex): void {\n\t\t\t\tpreEdit();\n\t\t\t\tthis.attachEdit(source, count, destination);\n\t\t\t}\n\t\t\tpublic detach(source: Range, destination: FieldKey, id: DeltaDetachedNodeId): void {\n\t\t\t\tpreEdit();\n\t\t\t\tthis.detachEdit(source, destination);\n\t\t\t}\n\t\t\t/**\n\t\t\t * Attaches the nodes from the given source field into the current field.\n\t\t\t * Does not invalidate dependents.\n\t\t\t * @param source - The the range to be attached.\n\t\t\t * @param count - The number of nodes being attached.\n\t\t\t * Expected to match the number of nodes in the source detached field.\n\t\t\t * @param destination - The index in the current field at which to attach the content.\n\t\t\t */\n\t\t\tprivate attachEdit(source: FieldKey, count: number, destination: PlaceIndex): void {\n\t\t\t\tassertNonNegativeSafeInteger(count);\n\t\t\t\tif (count === 0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst [parent, key] = cursor.getParent();\n\t\t\t\tassert(\n\t\t\t\t\tparent !== this.forest.roots || key !== source,\n\t\t\t\t\t0x7b6 /* Attach source field must be different from current field */,\n\t\t\t\t);\n\t\t\t\tconst currentField = getOrCreateField(parent, key);\n\t\t\t\tassertValidIndex(destination, currentField, true);\n\t\t\t\tconst sourceField = this.forest.#roots.fields.get(source) ?? [];\n\t\t\t\tassert(sourceField !== undefined, 0x7b7 /* Attach source field must exist */);\n\t\t\t\tassert(\n\t\t\t\t\tsourceField.length === count,\n\t\t\t\t\t0x7b8 /* Attach must consume all nodes in source field */,\n\t\t\t\t);\n\t\t\t\t// TODO: this will fail for very large insertions due to argument limits.\n\t\t\t\tcurrentField.splice(destination, 0, ...sourceField);\n\t\t\t\tthis.forest.delete(source);\n\t\t\t}\n\t\t\t/**\n\t\t\t * Detaches the range from the current field and transfers it to the given destination if any.\n\t\t\t * Does not invalidate dependents.\n\t\t\t * @param source - The bounds of the range to be detached from the current field.\n\t\t\t * @param destination - If specified, the destination to transfer the detached range to.\n\t\t\t * If not specified, the detached range is destroyed.\n\t\t\t */\n\t\t\tprivate detachEdit(source: Range, destination: FieldKey | undefined): void {\n\t\t\t\tconst [parent, key] = cursor.getParent();\n\t\t\t\tassert(\n\t\t\t\t\tdestination === undefined || parent !== this.forest.roots || key !== destination,\n\t\t\t\t\t0x7b9 /* Detach destination field must be different from current field */,\n\t\t\t\t);\n\t\t\t\tconst currentField = getOrCreateField(parent, key);\n\t\t\t\tassertValidRange(source, currentField);\n\t\t\t\tconst content = currentField.splice(source.start, source.end - source.start);\n\t\t\t\tif (destination !== undefined) {\n\t\t\t\t\tthis.forest.addFieldAsDetached(content, destination);\n\t\t\t\t}\n\t\t\t\t// This check is performed after the transfer to ensure that the field is not removed in scenarios\n\t\t\t\t// where the source and destination are the same.\n\t\t\t\tif (currentField.length === 0) {\n\t\t\t\t\tparent.fields.delete(key);\n\t\t\t\t}\n\t\t\t}\n\t\t\tpublic enterNode(index: number): void {\n\t\t\t\tcursor.enterNode(index);\n\t\t\t}\n\t\t\tpublic exitNode(index: number): void {\n\t\t\t\tcursor.exitNode();\n\t\t\t}\n\t\t\tpublic enterField(key: FieldKey): void {\n\t\t\t\tcursor.enterField(key);\n\t\t\t}\n\t\t\tpublic exitField(key: FieldKey): void {\n\t\t\t\tcursor.exitField();\n\t\t\t}\n\t\t}\n\n\t\tconst forestVisitor = new Visitor(this);\n\t\tconst announcedVisitors: AnnouncedVisitor[] = [];\n\t\tfor (const getVisitor of this.deltaVisitors) {\n\t\t\tannouncedVisitors.push(getVisitor());\n\t\t}\n\t\tconst combinedVisitor = combineVisitors([forestVisitor, ...announcedVisitors]);\n\t\tthis.activeVisitor = combinedVisitor;\n\t\treturn combinedVisitor;\n\t}\n\n\tpublic registerAnnouncedVisitor(visitor: () => AnnouncedVisitor): void {\n\t\tthis.deltaVisitors.add(visitor);\n\t}\n\n\tpublic deregisterAnnouncedVisitor(visitor: () => AnnouncedVisitor): void {\n\t\tthis.deltaVisitors.delete(visitor);\n\t}\n\n\tprivate nextRange = 0;\n\tpublic newDetachedField(): DetachedField {\n\t\tconst range: DetachedField = brand(String(this.nextRange));\n\t\tthis.nextRange += 1;\n\t\treturn range;\n\t}\n\n\tprivate add(nodes: Iterable<ITreeCursor>, key: FieldKey): void {\n\t\tconst field = Array.from(nodes, mapTreeFromCursor) as MutableMapTree[];\n\t\tthis.addFieldAsDetached(field, key);\n\t}\n\n\tprivate addFieldAsDetached(field: MutableMapTree[], key: FieldKey): void {\n\t\tassert(!this.roots.fields.has(key), 0x370 /* new range must not already exist */);\n\t\tif (field.length > 0) {\n\t\t\tthis.#roots.fields.set(key, field);\n\t\t}\n\t}\n\n\tprivate delete(field: FieldKey): void {\n\t\tthis.#roots.fields.delete(field);\n\t}\n\n\tpublic allocateCursor(source?: string): Cursor {\n\t\treturn new Cursor(this, source);\n\t}\n\n\tpublic tryMoveCursorToNode(\n\t\tdestination: Anchor,\n\t\tcursorToMove: ITreeSubscriptionCursor,\n\t): TreeNavigationResult {\n\t\tconst path = this.anchors.locate(destination);\n\t\tif (path === undefined) {\n\t\t\treturn TreeNavigationResult.NotFound;\n\t\t}\n\t\tthis.moveCursorToPath(path, cursorToMove);\n\t\treturn TreeNavigationResult.Ok;\n\t}\n\n\tpublic tryMoveCursorToField(\n\t\tdestination: FieldAnchor,\n\t\tcursorToMove: ITreeSubscriptionCursor,\n\t): TreeNavigationResult {\n\t\tif (destination.parent === undefined) {\n\t\t\tthis.moveCursorToPath(undefined, cursorToMove);\n\t\t} else {\n\t\t\tconst result = this.tryMoveCursorToNode(destination.parent, cursorToMove);\n\t\t\tif (result !== TreeNavigationResult.Ok) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t\tcursorToMove.enterField(destination.fieldKey);\n\t\treturn TreeNavigationResult.Ok;\n\t}\n\n\tpublic moveCursorToPath(\n\t\tdestination: UpPath | undefined,\n\t\tcursorToMove: ITreeSubscriptionCursor,\n\t): void {\n\t\tassert(\n\t\t\tcursorToMove instanceof Cursor,\n\t\t\t0x337 /* ObjectForest must only be given its own Cursor type */,\n\t\t);\n\t\tassert(\n\t\t\tcursorToMove.forest === this,\n\t\t\t0x338 /* ObjectForest must only be given its own Cursor */,\n\t\t);\n\n\t\tconst indexStack: number[] = [];\n\t\tconst keyStack: FieldKey[] = [];\n\n\t\tlet path: UpPath | undefined = destination;\n\t\twhile (path !== undefined) {\n\t\t\tindexStack.push(path.parentIndex);\n\t\t\tkeyStack.push(path.parentField);\n\t\t\tpath = path.parent;\n\t\t}\n\t\tcursorToMove.setToAboveDetachedSequences();\n\t\twhile (keyStack.length > 0) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tcursorToMove.enterField(keyStack.pop()!);\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tcursorToMove.enterNode(indexStack.pop()!);\n\t\t}\n\n\t\treturn;\n\t}\n\n\tpublic getCursorAboveDetachedFields(): ITreeCursorSynchronous {\n\t\treturn cursorForMapTreeNode(this.roots);\n\t}\n}\n\n/**\n * Cursor implementation for ObjectForest.\n */\nclass Cursor extends SynchronousCursor implements ITreeSubscriptionCursor {\n\tpublic state: ITreeSubscriptionCursorState;\n\n\t/**\n\t * @param forest - forest this cursor navigates\n\t * @param innerCursor - underlying cursor implementation this wraps. `undefined` when state is not `Current`\n\t */\n\tpublic constructor(\n\t\tpublic readonly forest: ObjectForest,\n\t\tpublic readonly source: string | undefined,\n\t\tprivate innerCursor?: CursorWithNode<MutableMapTree>,\n\t) {\n\t\tsuper();\n\t\tif (innerCursor === undefined) {\n\t\t\tthis.state = ITreeSubscriptionCursorState.Cleared;\n\t\t} else {\n\t\t\tthis.state = ITreeSubscriptionCursorState.Current;\n\t\t\tthis.forest.currentCursors.add(this);\n\t\t}\n\t}\n\n\tpublic buildFieldAnchor(): FieldAnchor {\n\t\tconst path = this.getFieldPath();\n\t\tconst anchor =\n\t\t\tpath.parent === undefined ? undefined : this.forest.anchors.track(path.parent);\n\t\treturn { parent: anchor, fieldKey: path.field };\n\t}\n\tpublic getFieldPath(prefix?: PathRootPrefix): FieldUpPath {\n\t\tassert(this.innerCursor !== undefined, 0x45f /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.getFieldPath(prefix);\n\t}\n\tpublic get mode(): CursorLocationType {\n\t\tassert(this.innerCursor !== undefined, 0x42e /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.mode;\n\t}\n\n\tpublic nextField(): boolean {\n\t\tassert(this.innerCursor !== undefined, 0x42f /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.nextField();\n\t}\n\tpublic exitField(): void {\n\t\tassert(this.innerCursor !== undefined, 0x430 /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.exitField();\n\t}\n\tpublic override skipPendingFields(): boolean {\n\t\tassert(this.innerCursor !== undefined, 0x431 /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.skipPendingFields();\n\t}\n\tpublic getFieldKey(): FieldKey {\n\t\tassert(this.innerCursor !== undefined, 0x432 /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.getFieldKey();\n\t}\n\tpublic getFieldLength(): number {\n\t\tassert(this.innerCursor !== undefined, 0x433 /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.getFieldLength();\n\t}\n\tpublic firstNode(): boolean {\n\t\tassert(this.innerCursor !== undefined, 0x434 /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.firstNode();\n\t}\n\tpublic enterNode(childIndex: number): void {\n\t\tassert(this.innerCursor !== undefined, 0x435 /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.enterNode(childIndex);\n\t}\n\tpublic getPath(prefix?: PathRootPrefix): UpPath {\n\t\tassert(this.innerCursor !== undefined, 0x436 /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.getPath(prefix) ?? fail(0xb27 /* no path when at root */);\n\t}\n\tpublic get fieldIndex(): number {\n\t\tassert(this.innerCursor !== undefined, 0x437 /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.fieldIndex;\n\t}\n\tpublic get chunkStart(): number {\n\t\tassert(this.innerCursor !== undefined, 0x438 /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.chunkStart;\n\t}\n\tpublic get chunkLength(): number {\n\t\tassert(this.innerCursor !== undefined, 0x439 /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.chunkLength;\n\t}\n\tpublic seekNodes(offset: number): boolean {\n\t\tassert(this.innerCursor !== undefined, 0x43a /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.seekNodes(offset);\n\t}\n\tpublic nextNode(): boolean {\n\t\tassert(this.innerCursor !== undefined, 0x43b /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.nextNode();\n\t}\n\tpublic exitNode(): void {\n\t\tassert(this.innerCursor !== undefined, 0x43c /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.exitNode();\n\t}\n\tpublic firstField(): boolean {\n\t\tassert(this.innerCursor !== undefined, 0x43d /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.firstField();\n\t}\n\tpublic enterField(key: FieldKey): void {\n\t\tassert(this.innerCursor !== undefined, 0x43e /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.enterField(key);\n\t}\n\tpublic get type(): TreeNodeSchemaIdentifier {\n\t\tassert(this.innerCursor !== undefined, 0x43f /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.type;\n\t}\n\tpublic get value(): Value {\n\t\tassert(this.innerCursor !== undefined, 0x440 /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.value;\n\t}\n\n\t// TODO: tests for clear when not at root.\n\tpublic clear(): void {\n\t\tassert(\n\t\t\tthis.state !== ITreeSubscriptionCursorState.Freed,\n\t\t\t0x33b /* Cursor must not be freed */,\n\t\t);\n\t\tthis.state = ITreeSubscriptionCursorState.Cleared;\n\t\tthis.innerCursor = undefined;\n\t\tthis.forest.currentCursors.delete(this);\n\t}\n\n\t/**\n\t * Move this cursor to the special dummy node above the detached sequences.\n\t * Can be used when cleared (but not freed).\n\t */\n\tpublic setToAboveDetachedSequences(): void {\n\t\tassert(\n\t\t\tthis.state !== ITreeSubscriptionCursorState.Freed,\n\t\t\t0x33c /* Cursor must not be freed */,\n\t\t);\n\t\tthis.clear();\n\t\tthis.state = ITreeSubscriptionCursorState.Current;\n\t\t// Cast to a cursor of _mutable_ trees to allow direct manipulation of the tree data which is more efficient than doing immutable copies.\n\t\tthis.innerCursor = cursorForMapTreeNode(\n\t\t\tthis.forest.roots,\n\t\t) as CursorWithNode<MutableMapTree>;\n\t\tthis.forest.currentCursors.add(this);\n\t}\n\n\tpublic getNode(): MutableMapTree {\n\t\tassert(this.innerCursor !== undefined, 0x33e /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.getNode();\n\t}\n\n\tpublic getParent(): [MutableMapTree, FieldKey] {\n\t\tassert(this.innerCursor !== undefined, 0x441 /* Cursor must be current to be used */);\n\t\t// This could be optimized to skip moving it accessing internals of cursor.\n\t\tconst key = this.innerCursor.getFieldKey();\n\t\tthis.innerCursor.exitField();\n\t\tconst node = this.innerCursor.getNode();\n\t\tthis.innerCursor.enterField(key);\n\t\treturn [node, key];\n\t}\n\n\tpublic fork(source?: string): ITreeSubscriptionCursor {\n\t\tassert(this.innerCursor !== undefined, 0x460 /* Cursor must be current to be used */);\n\t\treturn new Cursor(this.forest, source ?? `fork: ${this.source}`, this.innerCursor.fork());\n\t}\n\n\tpublic free(): void {\n\t\tassert(\n\t\t\tthis.state !== ITreeSubscriptionCursorState.Freed,\n\t\t\t0x33f /* Cursor must not be double freed */,\n\t\t);\n\t\tthis.forest.currentCursors.delete(this);\n\t\tthis.state = ITreeSubscriptionCursorState.Freed;\n\t}\n\n\tpublic buildAnchor(): Anchor {\n\t\tassert(\n\t\t\tthis.state === ITreeSubscriptionCursorState.Current,\n\t\t\t0x37a /* Cursor must be current to be used */,\n\t\t);\n\t\treturn this.forest.anchors.track(this.getPath());\n\t}\n}\n\n// This function is the folder level export for objectForest, and hides all the implementation types.\n// When other forest implementations are created (ex: optimized ones),\n// this function should likely be moved and updated to (at least conditionally) use them.\n/**\n * Returns an implementation of {@link IEditableForest} with no content.\n * @privateRemarks\n * TODO:\n * refactor to remove this function, and instead place `ForestTypeReference` and `ForestTypeExpensiveDebug` here as a better way to encapsulate ObjectForest.\n */\nexport function buildForest(\n\tbreaker: Breakable,\n\tschema?: TreeStoredSchemaSubscription,\n\tanchors?: AnchorSet,\n\tadditionalAsserts: boolean = false,\n): ObjectForest {\n\treturn new ObjectForest(breaker, schema, anchors, additionalAsserts);\n}\n"]}
1
+ {"version":3,"file":"objectForest.js","sourceRoot":"","sources":["../../../src/feature-libraries/object-forest/objectForest.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 { createEmitter } from \"@fluid-internal/client-utils\";\nimport type { Listenable } from \"@fluidframework/core-interfaces\";\nimport { assert, fail } from \"@fluidframework/core-utils/internal\";\n\nimport {\n\ttype Anchor,\n\tAnchorSet,\n\ttype AnnouncedVisitor,\n\ttype CursorLocationType,\n\ttype DeltaDetachedNodeId,\n\ttype DeltaVisitor,\n\ttype DetachedField,\n\ttype FieldAnchor,\n\ttype FieldKey,\n\ttype FieldUpPath,\n\ttype ForestEvents,\n\ttype IEditableForest,\n\ttype ITreeCursor,\n\ttype ITreeCursorSynchronous,\n\ttype ITreeSubscriptionCursor,\n\tITreeSubscriptionCursorState,\n\ttype MapTree,\n\ttype PathRootPrefix,\n\ttype PlaceIndex,\n\ttype Range,\n\ttype TreeChunk,\n\ttype TreeFieldStoredSchema,\n\tTreeNavigationResult,\n\ttype TreeNodeSchemaIdentifier,\n\ttype TreeStoredSchemaSubscription,\n\ttype UpPath,\n\ttype Value,\n\taboveRootPlaceholder,\n\tcombineVisitors,\n\tdeepCopyMapTree,\n\trootFieldKey,\n} from \"../../core/index.js\";\nimport {\n\tassertNonNegativeSafeInteger,\n\tassertValidIndex,\n\tassertValidRange,\n\tbrand,\n\tbreakingMethod,\n\ttype Breakable,\n\ttype WithBreakable,\n} from \"../../util/index.js\";\nimport { chunkField, defaultChunkPolicy } from \"../chunked-forest/index.js\";\nimport { defaultSchemaPolicy, FieldKinds } from \"../default-schema/index.js\";\nimport { cursorForMapTreeNode, mapTreeFromCursor } from \"../mapTreeCursor.js\";\nimport { isFieldInSchema, throwOutOfSchema } from \"../schemaChecker.js\";\nimport { type CursorWithNode, SynchronousCursor } from \"../treeCursorUtils.js\";\n\n/** A `MapTree` with mutable fields */\ninterface MutableMapTree extends MapTree {\n\treadonly fields: Map<FieldKey, MutableMapTree[]>;\n}\n\n/** Get a field from a `MutableMapTree`, optionally modifying the tree to create it if missing. */\nfunction getOrCreateField(mapTree: MutableMapTree, key: FieldKey): MutableMapTree[] {\n\tconst field = mapTree.fields.get(key);\n\tif (field !== undefined) {\n\t\treturn field;\n\t}\n\n\tconst newField: MutableMapTree[] = [];\n\tmapTree.fields.set(key, newField);\n\treturn newField;\n}\n\n/**\n * Reference implementation of IEditableForest.\n *\n * This implementation focuses on correctness and simplicity, not performance.\n * It does not use compressed chunks: instead nodes are implemented using objects.\n */\nexport class ObjectForest implements IEditableForest, WithBreakable {\n\tprivate activeVisitor?: DeltaVisitor;\n\n\t// All cursors that are in the \"Current\" state. Must be empty when editing.\n\tpublic readonly currentCursors: Set<Cursor> = new Set();\n\tprivate readonly deltaVisitors: Set<() => AnnouncedVisitor> = new Set();\n\n\treadonly #events = createEmitter<ForestEvents>();\n\tpublic readonly events: Listenable<ForestEvents> = this.#events;\n\n\treadonly #roots: MutableMapTree;\n\tpublic get roots(): MapTree {\n\t\treturn this.#roots;\n\t}\n\n\tpublic constructor(\n\t\tpublic readonly breaker: Breakable,\n\t\t/**\n\t\t * If provided, may be used for validation, but otherwise unused.\n\t\t */\n\t\tpublic readonly schema: TreeStoredSchemaSubscription | undefined,\n\t\tpublic readonly anchors: AnchorSet = new AnchorSet(),\n\t\tpublic readonly additionalAsserts: boolean = false,\n\t\troots?: MapTree,\n\t) {\n\t\tthis.#roots =\n\t\t\troots === undefined\n\t\t\t\t? {\n\t\t\t\t\t\ttype: aboveRootPlaceholder,\n\t\t\t\t\t\tfields: new Map(),\n\t\t\t\t\t}\n\t\t\t\t: deepCopyMapTree(roots);\n\n\t\tif (additionalAsserts) {\n\t\t\tthis.checkSchema();\n\t\t}\n\t}\n\n\tpublic get isEmpty(): boolean {\n\t\treturn this.roots.fields.size === 0;\n\t}\n\n\tpublic clone(schema: TreeStoredSchemaSubscription, breaker?: Breakable): ObjectForest {\n\t\treturn new ObjectForest(\n\t\t\tbreaker ?? this.breaker,\n\t\t\tschema,\n\t\t\tundefined,\n\t\t\tthis.additionalAsserts,\n\t\t\tthis.roots,\n\t\t);\n\t}\n\n\tpublic chunkField(cursor: ITreeCursorSynchronous): TreeChunk[] {\n\t\treturn chunkField(cursor, { idCompressor: undefined, policy: defaultChunkPolicy });\n\t}\n\n\tpublic forgetAnchor(anchor: Anchor): void {\n\t\tthis.anchors.forget(anchor);\n\t}\n\n\t/**\n\t * Throw (and break) if content does not match schema.\n\t */\n\t@breakingMethod\n\tpublic checkSchema(): void {\n\t\tconst schema = this.schema;\n\t\tif (schema !== undefined) {\n\t\t\tconst roots = new Set([...this.roots.fields.keys(), rootFieldKey]);\n\t\t\tfor (const key of roots) {\n\t\t\t\tconst documentRoot = this.roots.fields.get(key) ?? [];\n\t\t\t\tconst fieldSchema: TreeFieldStoredSchema =\n\t\t\t\t\tkey === rootFieldKey\n\t\t\t\t\t\t? schema.rootFieldSchema\n\t\t\t\t\t\t: // TODO: someday we should have schema for detached fields, and use that instead of generating one here.\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t// Some detached fields may have multiple nodes, so we must treat them as sequences:\n\t\t\t\t\t\t\t\tkind: FieldKinds.sequence.identifier,\n\t\t\t\t\t\t\t\ttypes: new Set(documentRoot.map((node) => node.type)),\n\n\t\t\t\t\t\t\t\t// Metadata is not used for schema checks\n\t\t\t\t\t\t\t\tpersistedMetadata: undefined,\n\t\t\t\t\t\t\t};\n\t\t\t\tisFieldInSchema(\n\t\t\t\t\tdocumentRoot,\n\t\t\t\t\tfieldSchema,\n\t\t\t\t\t{\n\t\t\t\t\t\tschema,\n\t\t\t\t\t\tpolicy: defaultSchemaPolicy,\n\t\t\t\t\t},\n\t\t\t\t\tthrowOutOfSchema,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic acquireVisitor(): DeltaVisitor {\n\t\tassert(\n\t\t\tthis.activeVisitor === undefined,\n\t\t\t0x76c /* Must release existing visitor before acquiring another */,\n\t\t);\n\n\t\t// Note: This code uses cursors, however it also modifies the tree.\n\t\t// In general this is not safe, but this code happens to only modify the tree below the current cursor location,\n\t\t// which happens to work.\n\t\t// This pattern could be generalized/formalized with a concept of an exclusive cursor,\n\t\t// which can edit, but is the only cursor allowed at the time.\n\n\t\tconst cursor: Cursor = this.allocateCursor(\"acquireVisitor\");\n\t\tcursor.setToAboveDetachedSequences();\n\n\t\t/**\n\t\t * Called before each edit to allow cursor cleanup to happen and ensure that there are no unexpected cursors.\n\t\t * This is required for each change since there may be app facing change event handlers which create cursors.\n\t\t */\n\t\tconst preEdit = (): void => {\n\t\t\tthis.#events.emit(\"beforeChange\");\n\t\t\tassert(\n\t\t\t\tthis.currentCursors.has(cursor),\n\t\t\t\t0x995 /* missing visitor cursor while editing */,\n\t\t\t);\n\t\t\tif (this.currentCursors.size > 1) {\n\t\t\t\tconst unexpectedSources = [...this.currentCursors].flatMap((c) =>\n\t\t\t\t\tc === cursor ? [] : (c.source ?? null),\n\t\t\t\t);\n\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Found unexpected cursors when editing with the following annotations: ${JSON.stringify(\n\t\t\t\t\t\tunexpectedSources,\n\t\t\t\t\t)}`,\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\tclass Visitor implements DeltaVisitor {\n\t\t\tpublic constructor(private readonly forest: ObjectForest) {}\n\t\t\tpublic free(): void {\n\t\t\t\tcursor.free();\n\t\t\t\tassert(\n\t\t\t\t\tthis.forest.activeVisitor !== undefined,\n\t\t\t\t\t0x76d /* Multiple free calls for same visitor */,\n\t\t\t\t);\n\t\t\t\tthis.forest.activeVisitor = undefined;\n\t\t\t\tif (this.forest.additionalAsserts) {\n\t\t\t\t\t// Schema validation:\n\t\t\t\t\t// When doing \"additionalAsserts\", validate the content against the schema after every batch of edits.\n\t\t\t\t\tthis.forest.checkSchema();\n\t\t\t\t}\n\t\t\t}\n\t\t\tpublic destroy(detachedField: FieldKey, count: number): void {\n\t\t\t\tpreEdit();\n\t\t\t\tthis.forest.delete(detachedField);\n\t\t\t}\n\t\t\tpublic create(content: readonly ITreeCursorSynchronous[], destination: FieldKey): void {\n\t\t\t\tpreEdit();\n\t\t\t\tthis.forest.add(content, destination);\n\t\t\t\tthis.forest.#events.emit(\"afterRootFieldCreated\", destination);\n\t\t\t}\n\t\t\tpublic attach(source: FieldKey, count: number, destination: PlaceIndex): void {\n\t\t\t\tpreEdit();\n\t\t\t\tthis.attachEdit(source, count, destination);\n\t\t\t}\n\t\t\tpublic detach(source: Range, destination: FieldKey, id: DeltaDetachedNodeId): void {\n\t\t\t\tpreEdit();\n\t\t\t\tthis.detachEdit(source, destination);\n\t\t\t}\n\t\t\t/**\n\t\t\t * Attaches the nodes from the given source field into the current field.\n\t\t\t * Does not invalidate dependents.\n\t\t\t * @param source - The the range to be attached.\n\t\t\t * @param count - The number of nodes being attached.\n\t\t\t * Expected to match the number of nodes in the source detached field.\n\t\t\t * @param destination - The index in the current field at which to attach the content.\n\t\t\t */\n\t\t\tprivate attachEdit(source: FieldKey, count: number, destination: PlaceIndex): void {\n\t\t\t\tassertNonNegativeSafeInteger(count);\n\t\t\t\tif (count === 0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst [parent, key] = cursor.getParent();\n\t\t\t\tassert(\n\t\t\t\t\tparent !== this.forest.roots || key !== source,\n\t\t\t\t\t0x7b6 /* Attach source field must be different from current field */,\n\t\t\t\t);\n\t\t\t\tconst currentField = getOrCreateField(parent, key);\n\t\t\t\tassertValidIndex(destination, currentField, true);\n\t\t\t\tconst sourceField = this.forest.#roots.fields.get(source) ?? [];\n\t\t\t\tassert(sourceField !== undefined, 0x7b7 /* Attach source field must exist */);\n\t\t\t\tassert(\n\t\t\t\t\tsourceField.length === count,\n\t\t\t\t\t0x7b8 /* Attach must consume all nodes in source field */,\n\t\t\t\t);\n\t\t\t\t// TODO: this will fail for very large insertions due to argument limits.\n\t\t\t\tcurrentField.splice(destination, 0, ...sourceField);\n\t\t\t\tthis.forest.delete(source);\n\t\t\t}\n\t\t\t/**\n\t\t\t * Detaches the range from the current field and transfers it to the given destination if any.\n\t\t\t * Does not invalidate dependents.\n\t\t\t * @param source - The bounds of the range to be detached from the current field.\n\t\t\t * @param destination - If specified, the destination to transfer the detached range to.\n\t\t\t * If not specified, the detached range is destroyed.\n\t\t\t */\n\t\t\tprivate detachEdit(source: Range, destination: FieldKey | undefined): void {\n\t\t\t\tconst [parent, key] = cursor.getParent();\n\t\t\t\tassert(\n\t\t\t\t\tdestination === undefined || parent !== this.forest.roots || key !== destination,\n\t\t\t\t\t0x7b9 /* Detach destination field must be different from current field */,\n\t\t\t\t);\n\t\t\t\tconst currentField = getOrCreateField(parent, key);\n\t\t\t\tassertValidRange(source, currentField);\n\t\t\t\tconst content = currentField.splice(source.start, source.end - source.start);\n\t\t\t\tif (destination !== undefined) {\n\t\t\t\t\tthis.forest.addFieldAsDetached(content, destination);\n\t\t\t\t}\n\t\t\t\t// This check is performed after the transfer to ensure that the field is not removed in scenarios\n\t\t\t\t// where the source and destination are the same.\n\t\t\t\tif (currentField.length === 0) {\n\t\t\t\t\tparent.fields.delete(key);\n\t\t\t\t}\n\t\t\t}\n\t\t\tpublic enterNode(index: number): void {\n\t\t\t\tcursor.enterNode(index);\n\t\t\t}\n\t\t\tpublic exitNode(index: number): void {\n\t\t\t\tcursor.exitNode();\n\t\t\t}\n\t\t\tpublic enterField(key: FieldKey): void {\n\t\t\t\tcursor.enterField(key);\n\t\t\t}\n\t\t\tpublic exitField(key: FieldKey): void {\n\t\t\t\tcursor.exitField();\n\t\t\t}\n\t\t}\n\n\t\tconst forestVisitor = new Visitor(this);\n\t\tconst announcedVisitors: AnnouncedVisitor[] = [];\n\t\tfor (const getVisitor of this.deltaVisitors) {\n\t\t\tannouncedVisitors.push(getVisitor());\n\t\t}\n\t\tconst combinedVisitor = combineVisitors([forestVisitor, ...announcedVisitors]);\n\t\tthis.activeVisitor = combinedVisitor;\n\t\treturn combinedVisitor;\n\t}\n\n\tpublic registerAnnouncedVisitor(visitor: () => AnnouncedVisitor): void {\n\t\tthis.deltaVisitors.add(visitor);\n\t}\n\n\tpublic deregisterAnnouncedVisitor(visitor: () => AnnouncedVisitor): void {\n\t\tthis.deltaVisitors.delete(visitor);\n\t}\n\n\tprivate nextRange = 0;\n\tpublic newDetachedField(): DetachedField {\n\t\tconst range: DetachedField = brand(String(this.nextRange));\n\t\tthis.nextRange += 1;\n\t\treturn range;\n\t}\n\n\tprivate add(nodes: Iterable<ITreeCursor>, key: FieldKey): void {\n\t\tconst field = Array.from(nodes, mapTreeFromCursor) as MutableMapTree[];\n\t\tthis.addFieldAsDetached(field, key);\n\t}\n\n\tprivate addFieldAsDetached(field: MutableMapTree[], key: FieldKey): void {\n\t\tassert(!this.roots.fields.has(key), 0x370 /* new range must not already exist */);\n\t\tif (field.length > 0) {\n\t\t\tthis.#roots.fields.set(key, field);\n\t\t}\n\t}\n\n\tprivate delete(field: FieldKey): void {\n\t\tthis.#roots.fields.delete(field);\n\t}\n\n\tpublic allocateCursor(source?: string): Cursor {\n\t\treturn new Cursor(this, source);\n\t}\n\n\tpublic tryMoveCursorToNode(\n\t\tdestination: Anchor,\n\t\tcursorToMove: ITreeSubscriptionCursor,\n\t): TreeNavigationResult {\n\t\tconst path = this.anchors.locate(destination);\n\t\tif (path === undefined) {\n\t\t\treturn TreeNavigationResult.NotFound;\n\t\t}\n\t\tthis.moveCursorToPath(path, cursorToMove);\n\t\treturn TreeNavigationResult.Ok;\n\t}\n\n\tpublic tryMoveCursorToField(\n\t\tdestination: FieldAnchor,\n\t\tcursorToMove: ITreeSubscriptionCursor,\n\t): TreeNavigationResult {\n\t\tif (destination.parent === undefined) {\n\t\t\tthis.moveCursorToPath(undefined, cursorToMove);\n\t\t} else {\n\t\t\tconst result = this.tryMoveCursorToNode(destination.parent, cursorToMove);\n\t\t\tif (result !== TreeNavigationResult.Ok) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t\tcursorToMove.enterField(destination.fieldKey);\n\t\treturn TreeNavigationResult.Ok;\n\t}\n\n\tpublic moveCursorToPath(\n\t\tdestination: UpPath | undefined,\n\t\tcursorToMove: ITreeSubscriptionCursor,\n\t): void {\n\t\tassert(\n\t\t\tcursorToMove instanceof Cursor,\n\t\t\t0x337 /* ObjectForest must only be given its own Cursor type */,\n\t\t);\n\t\tassert(\n\t\t\tcursorToMove.forest === this,\n\t\t\t0x338 /* ObjectForest must only be given its own Cursor */,\n\t\t);\n\n\t\tconst indexStack: number[] = [];\n\t\tconst keyStack: FieldKey[] = [];\n\n\t\tlet path: UpPath | undefined = destination;\n\t\twhile (path !== undefined) {\n\t\t\tindexStack.push(path.parentIndex);\n\t\t\tkeyStack.push(path.parentField);\n\t\t\tpath = path.parent;\n\t\t}\n\t\tcursorToMove.setToAboveDetachedSequences();\n\t\twhile (keyStack.length > 0) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tcursorToMove.enterField(keyStack.pop()!);\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tcursorToMove.enterNode(indexStack.pop()!);\n\t\t}\n\n\t\treturn;\n\t}\n\n\tpublic getCursorAboveDetachedFields(): ITreeCursorSynchronous {\n\t\treturn cursorForMapTreeNode(this.roots);\n\t}\n}\n\n/**\n * Cursor implementation for ObjectForest.\n */\nclass Cursor extends SynchronousCursor implements ITreeSubscriptionCursor {\n\tpublic state: ITreeSubscriptionCursorState;\n\n\t/**\n\t * @param forest - forest this cursor navigates\n\t * @param innerCursor - underlying cursor implementation this wraps. `undefined` when state is not `Current`\n\t */\n\tpublic constructor(\n\t\tpublic readonly forest: ObjectForest,\n\t\tpublic readonly source: string | undefined,\n\t\tprivate innerCursor?: CursorWithNode<MutableMapTree>,\n\t) {\n\t\tsuper();\n\t\tif (innerCursor === undefined) {\n\t\t\tthis.state = ITreeSubscriptionCursorState.Cleared;\n\t\t} else {\n\t\t\tthis.state = ITreeSubscriptionCursorState.Current;\n\t\t\tthis.forest.currentCursors.add(this);\n\t\t}\n\t}\n\n\tpublic buildFieldAnchor(): FieldAnchor {\n\t\tconst path = this.getFieldPath();\n\t\tconst anchor =\n\t\t\tpath.parent === undefined ? undefined : this.forest.anchors.track(path.parent);\n\t\treturn { parent: anchor, fieldKey: path.field };\n\t}\n\tpublic getFieldPath(prefix?: PathRootPrefix): FieldUpPath {\n\t\tassert(this.innerCursor !== undefined, 0x45f /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.getFieldPath(prefix);\n\t}\n\tpublic get mode(): CursorLocationType {\n\t\tassert(this.innerCursor !== undefined, 0x42e /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.mode;\n\t}\n\n\tpublic nextField(): boolean {\n\t\tassert(this.innerCursor !== undefined, 0x42f /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.nextField();\n\t}\n\tpublic exitField(): void {\n\t\tassert(this.innerCursor !== undefined, 0x430 /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.exitField();\n\t}\n\tpublic override skipPendingFields(): boolean {\n\t\tassert(this.innerCursor !== undefined, 0x431 /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.skipPendingFields();\n\t}\n\tpublic getFieldKey(): FieldKey {\n\t\tassert(this.innerCursor !== undefined, 0x432 /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.getFieldKey();\n\t}\n\tpublic getFieldLength(): number {\n\t\tassert(this.innerCursor !== undefined, 0x433 /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.getFieldLength();\n\t}\n\tpublic firstNode(): boolean {\n\t\tassert(this.innerCursor !== undefined, 0x434 /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.firstNode();\n\t}\n\tpublic enterNode(childIndex: number): void {\n\t\tassert(this.innerCursor !== undefined, 0x435 /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.enterNode(childIndex);\n\t}\n\tpublic getPath(prefix?: PathRootPrefix): UpPath {\n\t\tassert(this.innerCursor !== undefined, 0x436 /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.getPath(prefix) ?? fail(0xb27 /* no path when at root */);\n\t}\n\tpublic get fieldIndex(): number {\n\t\tassert(this.innerCursor !== undefined, 0x437 /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.fieldIndex;\n\t}\n\tpublic get chunkStart(): number {\n\t\tassert(this.innerCursor !== undefined, 0x438 /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.chunkStart;\n\t}\n\tpublic get chunkLength(): number {\n\t\tassert(this.innerCursor !== undefined, 0x439 /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.chunkLength;\n\t}\n\tpublic seekNodes(offset: number): boolean {\n\t\tassert(this.innerCursor !== undefined, 0x43a /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.seekNodes(offset);\n\t}\n\tpublic nextNode(): boolean {\n\t\tassert(this.innerCursor !== undefined, 0x43b /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.nextNode();\n\t}\n\tpublic exitNode(): void {\n\t\tassert(this.innerCursor !== undefined, 0x43c /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.exitNode();\n\t}\n\tpublic firstField(): boolean {\n\t\tassert(this.innerCursor !== undefined, 0x43d /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.firstField();\n\t}\n\tpublic enterField(key: FieldKey): void {\n\t\tassert(this.innerCursor !== undefined, 0x43e /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.enterField(key);\n\t}\n\tpublic get type(): TreeNodeSchemaIdentifier {\n\t\tassert(this.innerCursor !== undefined, 0x43f /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.type;\n\t}\n\tpublic get value(): Value {\n\t\tassert(this.innerCursor !== undefined, 0x440 /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.value;\n\t}\n\n\t// TODO: tests for clear when not at root.\n\tpublic clear(): void {\n\t\tassert(\n\t\t\tthis.state !== ITreeSubscriptionCursorState.Freed,\n\t\t\t0x33b /* Cursor must not be freed */,\n\t\t);\n\t\tthis.state = ITreeSubscriptionCursorState.Cleared;\n\t\tthis.innerCursor = undefined;\n\t\tthis.forest.currentCursors.delete(this);\n\t}\n\n\t/**\n\t * Move this cursor to the special dummy node above the detached sequences.\n\t * Can be used when cleared (but not freed).\n\t */\n\tpublic setToAboveDetachedSequences(): void {\n\t\tassert(\n\t\t\tthis.state !== ITreeSubscriptionCursorState.Freed,\n\t\t\t0x33c /* Cursor must not be freed */,\n\t\t);\n\t\tthis.clear();\n\t\tthis.state = ITreeSubscriptionCursorState.Current;\n\t\t// Cast to a cursor of _mutable_ trees to allow direct manipulation of the tree data which is more efficient than doing immutable copies.\n\t\tthis.innerCursor = cursorForMapTreeNode(\n\t\t\tthis.forest.roots,\n\t\t) as CursorWithNode<MutableMapTree>;\n\t\tthis.forest.currentCursors.add(this);\n\t}\n\n\tpublic getNode(): MutableMapTree {\n\t\tassert(this.innerCursor !== undefined, 0x33e /* Cursor must be current to be used */);\n\t\treturn this.innerCursor.getNode();\n\t}\n\n\tpublic getParent(): [MutableMapTree, FieldKey] {\n\t\tassert(this.innerCursor !== undefined, 0x441 /* Cursor must be current to be used */);\n\t\t// This could be optimized to skip moving it accessing internals of cursor.\n\t\tconst key = this.innerCursor.getFieldKey();\n\t\tthis.innerCursor.exitField();\n\t\tconst node = this.innerCursor.getNode();\n\t\tthis.innerCursor.enterField(key);\n\t\treturn [node, key];\n\t}\n\n\tpublic fork(source?: string): ITreeSubscriptionCursor {\n\t\tassert(this.innerCursor !== undefined, 0x460 /* Cursor must be current to be used */);\n\t\treturn new Cursor(this.forest, source ?? `fork: ${this.source}`, this.innerCursor.fork());\n\t}\n\n\tpublic free(): void {\n\t\tassert(\n\t\t\tthis.state !== ITreeSubscriptionCursorState.Freed,\n\t\t\t0x33f /* Cursor must not be double freed */,\n\t\t);\n\t\tthis.forest.currentCursors.delete(this);\n\t\tthis.state = ITreeSubscriptionCursorState.Freed;\n\t}\n\n\tpublic buildAnchor(): Anchor {\n\t\tassert(\n\t\t\tthis.state === ITreeSubscriptionCursorState.Current,\n\t\t\t0x37a /* Cursor must be current to be used */,\n\t\t);\n\t\treturn this.forest.anchors.track(this.getPath());\n\t}\n}\n\n// This function is the folder level export for objectForest, and hides all the implementation types.\n// When other forest implementations are created (ex: optimized ones),\n// this function should likely be moved and updated to (at least conditionally) use them.\n/**\n * Returns an implementation of {@link IEditableForest} with no content.\n * @privateRemarks\n * TODO:\n * refactor to remove this function, and instead place `ForestTypeReference` and `ForestTypeExpensiveDebug` here as a better way to encapsulate ObjectForest.\n */\nexport function buildForest(\n\tbreaker: Breakable,\n\tschema?: TreeStoredSchemaSubscription,\n\tanchors?: AnchorSet,\n\tadditionalAsserts: boolean = false,\n): ObjectForest {\n\treturn new ObjectForest(breaker, schema, anchors, additionalAsserts);\n}\n"]}
@@ -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.103.0";
8
+ export declare const pkgVersion = "2.110.0";
9
9
  //# sourceMappingURL=packageVersion.d.ts.map
@@ -5,5 +5,5 @@
5
5
  * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY
6
6
  */
7
7
  export const pkgName = "@fluidframework/tree";
8
- export const pkgVersion = "2.103.0";
8
+ export const pkgVersion = "2.110.0";
9
9
  //# sourceMappingURL=packageVersion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,sBAAsB,CAAC;AAC9C,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,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.103.0\";\n"]}
1
+ {"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,sBAAsB,CAAC;AAC9C,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,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.110.0\";\n"]}
@@ -93,5 +93,6 @@ export declare class SchematizingSimpleTreeView<in out TRootSchema extends Impli
93
93
  fork(): ReturnType<TreeBranchAlpha["fork"]> & SchematizingSimpleTreeView<TRootSchema>;
94
94
  merge(context: TreeBranchAlpha, disposeMerged?: boolean): void;
95
95
  rebaseOnto(context: TreeBranchAlpha): void;
96
+ isMissingEditsFrom(context: TreeBranchAlpha): boolean;
96
97
  }
97
98
  //# sourceMappingURL=schematizingTreeView.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schematizingTreeView.d.ts","sourceRoot":"","sources":["../../src/shared-tree/schematizingTreeView.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schematizingTreeView.d.ts","sourceRoot":"","sources":["../../src/shared-tree/schematizingTreeView.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACX,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,MAAM,0CAA0C,CAAC;AAKlD,OAAO,EACN,KAAK,qBAAqB,EAG1B,OAAO,EAMP,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACN,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,QAAQ,EACb,KAAK,cAAc,EAMnB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,6BAA6B,EAClC,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EAWzB,KAAK,eAAe,EACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,KAAK,SAAS,EAGd,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD;;;GAGG;AACH,eAAO,MAAM,QAAQ,sEAA8C,CAAC;AAEpE;;GAEG;AACH,qBACa,0BAA0B,CACtC,EAAE,CAAC,GAAG,CAAC,WAAW,SAAS,mBAAmB,GAAG,mBAAmB,CACnE,YAAW,aAAa,CAAC,WAAW,CAAC,EAAE,aAAa;aA+CpC,QAAQ,EAAE,YAAY;aACtB,MAAM,EAAE,qBAAqB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;aACtD,cAAc,EAAE,qBAAqB;IACrD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IAhD5B;;;;OAIG;IACH,OAAO,CAAC,eAAe,CAAsB;IAE7C;;OAEG;IACH,OAAO,CAAC,oBAAoB,CAAwC;IACpE,SAAgB,MAAM,EAAE,UAAU,CAAC,cAAc,GAAG,gBAAgB,CAAC,GACpE,QAAQ,CAAC,cAAc,GAAG,gBAAgB,CAAC,GAC3C,YAAY,CAAC,cAAc,GAAG,gBAAgB,CAAC,CAAmB;IAEnE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA4B;IAEvD;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAAyB;IAEzE;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAyB;IAEtD,QAAQ,UAAS;IACxB;;;;;OAKG;IACH,OAAO,CAAC,UAAU,CAAS;IAE3B;;OAEG;IACH,OAAO,CAAC,gBAAgB,CAAC,CAAa;IAEtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAc;IAC9C,SAAgB,OAAO,EAAE,SAAS,CAAC;gBAGlB,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,qBAAqB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,EACtD,cAAc,EAAE,qBAAqB,EACpC,SAAS,CAAC,SAAQ,IAAI,aAAA;IA8BjC,QAAQ,IAAI,IAAI,IAAI,eAAe;IAInC,WAAW,CAAC,MAAM,EAAE,sBAAsB,GAAG,IAAI;IAIjD,aAAa,CAAC,OAAO,SAAS,mBAAmB,EACvD,MAAM,EAAE,OAAO,GACb,IAAI,IAAI,aAAa,CAAC,OAAO,CAAC;IAIjC,IAAW,MAAM,IAAI,UAAU,CAAC,WAAW,CAAC,CAE3C;IAEM,UAAU,CAAC,OAAO,EAAE,eAAe,CAAC,WAAW,CAAC,GAAG,IAAI;IAgEvD,aAAa,IAAI,IAAI;IAmB5B;;OAEG;IACI,kBAAkB,IAAI,OAAO;IAM7B,cAAc,CAAC,aAAa,EAAE,aAAa,EACjD,WAAW,EAAE,MAAM,yBAAyB,CAAC,aAAa,EAAE,aAAa,CAAC,EAC1E,MAAM,CAAC,EAAE,oBAAoB,GAC3B,oBAAoB,CAAC,aAAa,EAAE,aAAa,CAAC;IAC9C,cAAc,CACpB,WAAW,EAAE,MAAM,6BAA6B,GAAG,IAAI,EACvD,MAAM,CAAC,EAAE,oBAAoB,GAC3B,iBAAiB;IAYb,mBAAmB,CAAC,aAAa,EAAE,aAAa,EACtD,WAAW,EAAE,MAAM,OAAO,CAAC,yBAAyB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,EACnF,MAAM,CAAC,EAAE,oBAAoB,GAC3B,OAAO,CAAC,oBAAoB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IACvD,mBAAmB,CACzB,WAAW,EAAE,MAAM,OAAO,CAAC,6BAA6B,GAAG,IAAI,CAAC,EAChE,MAAM,CAAC,EAAE,oBAAoB,GAC3B,OAAO,CAAC,iBAAiB,CAAC;IA0B7B,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,YAAY;IAIpB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,MAAM;IA+Ed,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,eAAe;IAkBvB,IAAW,aAAa,IAAI,yBAAyB,CAKpD;IAEM,OAAO,IAAI,IAAI;IAetB,OAAO,KAAK,QAAQ,GAenB;IAED,IAAW,IAAI,IAAI,aAAa,CAAC,WAAW,CAAC,CAE5C;IAED,IAAW,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,WAAW,CAAC,EAcpD;IAIM,IAAI,IAAI,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,GACjD,0BAA0B,CAAC,WAAW,CAAC;IAIjC,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,aAAa,UAAO,GAAG,IAAI;IAI3D,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAI1C,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO;CAK5D"}
@@ -2,44 +2,7 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
6
- function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
7
- var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
8
- var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
9
- var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
10
- var _, done = false;
11
- for (var i = decorators.length - 1; i >= 0; i--) {
12
- var context = {};
13
- for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
14
- for (var p in contextIn.access) context.access[p] = contextIn.access[p];
15
- context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
16
- var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
17
- if (kind === "accessor") {
18
- if (result === void 0) continue;
19
- if (result === null || typeof result !== "object") throw new TypeError("Object expected");
20
- if (_ = accept(result.get)) descriptor.get = _;
21
- if (_ = accept(result.set)) descriptor.set = _;
22
- if (_ = accept(result.init)) initializers.unshift(_);
23
- }
24
- else if (_ = accept(result)) {
25
- if (kind === "field") initializers.unshift(_);
26
- else descriptor[key] = _;
27
- }
28
- }
29
- if (target) Object.defineProperty(target, contextIn.name, descriptor);
30
- done = true;
31
- };
32
- var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
33
- var useValue = arguments.length > 2;
34
- for (var i = 0; i < initializers.length; i++) {
35
- value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
36
- }
37
- return useValue ? value : void 0;
38
- };
39
- var __setFunctionName = (this && this.__setFunctionName) || function (f, name, prefix) {
40
- if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
41
- return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
42
- };
5
+ import { __esDecorate, __runInitializers, __setFunctionName } from "tslib";
43
6
  import { createEmitter } from "@fluid-internal/client-utils";
44
7
  import { assert } from "@fluidframework/core-utils/internal";
45
8
  import { UsageError } from "@fluidframework/telemetry-utils/internal";
@@ -341,6 +304,9 @@ let SchematizingSimpleTreeView = (() => {
341
304
  rebaseOnto(context) {
342
305
  this.checkout.rebaseOnto(context);
343
306
  }
307
+ isMissingEditsFrom(context) {
308
+ return this.checkout.isMissingEditsFrom(context);
309
+ }
344
310
  };
345
311
  __setFunctionName(_classThis, "SchematizingSimpleTreeView");
346
312
  (() => {
@@ -1 +1 @@
1
- {"version":3,"file":"schematizingTreeView.js","sourceRoot":"","sources":["../../src/shared-tree/schematizingTreeView.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 { createEmitter } from \"@fluid-internal/client-utils\";\nimport type {\n\tHasListeners,\n\tIEmitter,\n\tListenable,\n} from \"@fluidframework/core-interfaces/internal\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport { UsageError } from \"@fluidframework/telemetry-utils/internal\";\n\nimport { anchorSlot, rootFieldKey } from \"../core/index.js\";\nimport {\n\ttype NodeIdentifierManager,\n\tdefaultSchemaPolicy,\n\tcursorForMapTreeField,\n\tContext,\n\tcombineChunks,\n\ttype FlexTreeOptionalField,\n\ttype FlexTreeUnknownUnboxed,\n\tFieldKinds,\n\ttype FlexTreeRequiredField,\n} from \"../feature-libraries/index.js\";\nimport {\n\ttype ImplicitFieldSchema,\n\ttype SchemaCompatibilityStatus,\n\ttype TreeView,\n\ttype TreeViewEvents,\n\ttryGetTreeNodeForField,\n\tsetField,\n\tnormalizeFieldSchema,\n\tSchemaCompatibilityTester,\n\ttype InsertableContent,\n\ttype TreeViewConfiguration,\n\ttype TreeViewAlpha,\n\ttype InsertableField,\n\ttype ReadableField,\n\ttype ReadSchema,\n\ttype UnsafeUnknownSchema,\n\ttype TreeBranchEvents,\n\ttype VoidTransactionCallbackStatus,\n\ttype TransactionCallbackStatus,\n\ttype TransactionResult,\n\ttype TransactionResultExt,\n\ttype RunTransactionParams,\n\tHydratedContext,\n\tSimpleContextSlot,\n\tareImplicitFieldSchemaEqual,\n\tprepareForInsertionContextless,\n\ttype FieldSchema,\n\ttryDisposeTreeNode,\n\tFieldSchemaAlpha,\n\tTreeViewConfigurationAlpha,\n\ttoInitialSchema,\n\ttoUpgradeSchema,\n\ttype TreeBranchAlpha,\n} from \"../simple-tree/index.js\";\nimport {\n\ttype Breakable,\n\tbreakingClass,\n\tdisposeSymbol,\n\ttype JsonCompatibleReadOnly,\n\ttype WithBreakable,\n} from \"../util/index.js\";\n\nimport { canInitialize, initialize, initializerFromChunk } from \"./schematizeTree.js\";\nimport type { TreeCheckout } from \"./treeCheckout.js\";\n\n/**\n * Creating multiple tree views from the same checkout is not supported. This slot is used to detect if one already\n * exists and error if creating a second.\n */\nexport const ViewSlot = anchorSlot<TreeView<ImplicitFieldSchema>>();\n\n/**\n * Implementation of TreeView wrapping a FlexTreeView.\n */\n@breakingClass\nexport class SchematizingSimpleTreeView<\n\tin out TRootSchema extends ImplicitFieldSchema | UnsafeUnknownSchema,\n> implements TreeViewAlpha<TRootSchema>, WithBreakable\n{\n\t/**\n\t * This is set to undefined when this object is disposed or the view schema does not support viewing the document's stored schema.\n\t *\n\t * The view schema may be incompatible with the stored schema. Use `compatibility` to check.\n\t */\n\tprivate flexTreeContext: Context | undefined;\n\n\t/**\n\t * Undefined iff uninitialized or disposed.\n\t */\n\tprivate currentCompatibility: SchemaCompatibilityStatus | undefined;\n\tpublic readonly events: Listenable<TreeViewEvents & TreeBranchEvents> &\n\t\tIEmitter<TreeViewEvents & TreeBranchEvents> &\n\t\tHasListeners<TreeViewEvents & TreeBranchEvents> = createEmitter();\n\n\tprivate readonly viewSchema: SchemaCompatibilityTester;\n\n\t/**\n\t * Events to unregister upon flex-tree view disposal.\n\t */\n\tprivate readonly flexTreeViewUnregisterCallbacks = new Set<() => void>();\n\n\t/**\n\t * Events to unregister upon disposal.\n\t */\n\tprivate readonly unregisterCallbacks = new Set<() => void>();\n\n\tpublic disposed = false;\n\t/**\n\t * This is set to true while an edit impacting the document schema is in progress.\n\t * This allows suppressing extra rootChanged / schemaChanged events until the edit concludes.\n\t * This is useful especially for some initialization edits, since document initialization can involve transient schemas\n\t * which are implementation details and should not be exposed to the user.\n\t */\n\tprivate midUpgrade = false;\n\n\t/**\n\t * Hydration work deferred until Context has been created.\n\t */\n\tprivate pendingHydration?: () => void;\n\n\tprivate readonly rootFieldSchema: FieldSchema;\n\tpublic readonly breaker: Breakable;\n\n\tpublic constructor(\n\t\tpublic readonly checkout: TreeCheckout,\n\t\tpublic readonly config: TreeViewConfiguration<ReadSchema<TRootSchema>>,\n\t\tpublic readonly nodeKeyManager: NodeIdentifierManager,\n\t\tprivate readonly onDispose?: () => void,\n\t) {\n\t\tthis.breaker = checkout.breaker;\n\t\tif (checkout.forest.anchors.slots.has(ViewSlot)) {\n\t\t\tthrow new UsageError(\"Cannot create a second tree view from the same checkout\");\n\t\t}\n\t\tcheckout.forest.anchors.slots.set(ViewSlot, this);\n\n\t\tthis.rootFieldSchema = normalizeFieldSchema(config.schema);\n\n\t\tconst configAlpha = new TreeViewConfigurationAlpha({ schema: config.schema });\n\n\t\tthis.viewSchema = new SchemaCompatibilityTester(configAlpha);\n\t\t// This must be initialized before `update` can be called.\n\t\tthis.currentCompatibility = {\n\t\t\tcanView: false,\n\t\t\tcanUpgrade: true,\n\t\t\tisEquivalent: false,\n\t\t\tcanInitialize: true,\n\t\t};\n\t\tthis.update();\n\n\t\tthis.unregisterCallbacks.add(\n\t\t\tthis.checkout.events.on(\"changed\", (data, getRevertible) => {\n\t\t\t\tthis.events.emit(\"changed\", data, getRevertible);\n\t\t\t\tthis.events.emit(\"commitApplied\", data, getRevertible);\n\t\t\t}),\n\t\t);\n\t}\n\n\tpublic isBranch(): this is TreeBranchAlpha {\n\t\treturn true;\n\t}\n\n\tpublic applyChange(change: JsonCompatibleReadOnly): void {\n\t\tthis.checkout.applySerializedChange(change);\n\t}\n\n\tpublic hasRootSchema<TSchema extends ImplicitFieldSchema>(\n\t\tschema: TSchema,\n\t): this is TreeViewAlpha<TSchema> {\n\t\treturn areImplicitFieldSchemaEqual(this.rootFieldSchema, schema);\n\t}\n\n\tpublic get schema(): ReadSchema<TRootSchema> {\n\t\treturn this.config.schema;\n\t}\n\n\tpublic initialize(content: InsertableField<TRootSchema>): void {\n\t\tthis.ensureUndisposed();\n\n\t\tconst compatibility = this.compatibility;\n\t\tif (!compatibility.canInitialize) {\n\t\t\tthrow new UsageError(\"Tree cannot be initialized more than once.\");\n\t\t}\n\n\t\tthis.runSchemaEdit(() => {\n\t\t\tconst schema = toInitialSchema(this.config.schema);\n\t\t\t// This has to be the contextless version, since when \"initialize\" is called (right after this),\n\t\t\t// it will do a schema change which would dispose of the current context (see inside `update`).\n\t\t\t// Thus using the current context (if any) would hydrate nodes then\n\t\t\t// immediately dispose them instead of having them actually be useable after initialize.\n\t\t\t// For this to work,\n\t\t\t// the hydration must be deferred until after the content is inserted into the tree and the final schema change is done (for required roots),\n\t\t\t// but before any user event could could run.\n\t\t\tconst mapTree = prepareForInsertionContextless(\n\t\t\t\tcontent as InsertableContent | undefined,\n\t\t\t\tthis.rootFieldSchema,\n\t\t\t\t{\n\t\t\t\t\tschema,\n\t\t\t\t\tpolicy: defaultSchemaPolicy,\n\t\t\t\t},\n\t\t\t\tthis,\n\t\t\t\tschema.rootFieldSchema,\n\t\t\t\t(batches, doHydration) => {\n\t\t\t\t\tassert(\n\t\t\t\t\t\tthis.pendingHydration === undefined,\n\t\t\t\t\t\t0xc74 /* pendingHydration already set */,\n\t\t\t\t\t);\n\t\t\t\t\tthis.pendingHydration = () => {\n\t\t\t\t\t\tassert(\n\t\t\t\t\t\t\tbatches.length <= 1,\n\t\t\t\t\t\t\t0xc75 /* initialize should at most one hydration batch */,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tfor (const batch of batches) {\n\t\t\t\t\t\t\tdoHydration(batch, {\n\t\t\t\t\t\t\t\tparent: undefined,\n\t\t\t\t\t\t\t\tparentField: rootFieldKey,\n\t\t\t\t\t\t\t\tparentIndex: 0,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tthis.runTransaction(() => {\n\t\t\t\tinitialize(\n\t\t\t\t\tthis.checkout,\n\t\t\t\t\tschema,\n\t\t\t\t\tinitializerFromChunk(this.checkout, () => {\n\t\t\t\t\t\t// This must be done after initial schema is set!\n\t\t\t\t\t\treturn combineChunks(\n\t\t\t\t\t\t\tthis.checkout.forest.chunkField(\n\t\t\t\t\t\t\t\tcursorForMapTreeField(mapTree === undefined ? [] : [mapTree]),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\t}\n\n\tpublic upgradeSchema(): void {\n\t\tthis.ensureUndisposed();\n\n\t\tconst compatibility = this.compatibility;\n\t\tif (compatibility.isEquivalent) {\n\t\t\t// No-op\n\t\t\treturn;\n\t\t}\n\n\t\tif (!compatibility.canUpgrade) {\n\t\t\tthrow new UsageError(\n\t\t\t\t\"Existing stored schema cannot be upgraded (see TreeView.compatibility.canUpgrade).\",\n\t\t\t);\n\t\t}\n\n\t\tconst newSchema = toUpgradeSchema(this.viewSchema.viewSchema.root);\n\t\tthis.runSchemaEdit(() => this.checkout.updateSchema(newSchema));\n\t}\n\n\t/**\n\t * Gets the flex-tree context. Throws when disposed or out of schema.\n\t */\n\tpublic getFlexTreeContext(): Context {\n\t\tthis.ensureUndisposed();\n\t\tassert(this.flexTreeContext !== undefined, 0x8c0 /* unexpected getViewOrError */);\n\t\treturn this.flexTreeContext;\n\t}\n\n\tpublic runTransaction<TSuccessValue, TFailureValue>(\n\t\ttransaction: () => TransactionCallbackStatus<TSuccessValue, TFailureValue>,\n\t\tparams?: RunTransactionParams,\n\t): TransactionResultExt<TSuccessValue, TFailureValue>;\n\tpublic runTransaction(\n\t\ttransaction: () => VoidTransactionCallbackStatus | void,\n\t\tparams?: RunTransactionParams,\n\t): TransactionResult;\n\tpublic runTransaction<TSuccessValue, TFailureValue>(\n\t\ttransaction: () =>\n\t\t\t| TransactionCallbackStatus<TSuccessValue, TFailureValue>\n\t\t\t| VoidTransactionCallbackStatus\n\t\t\t| void,\n\t\tparams?: RunTransactionParams,\n\t): TransactionResultExt<TSuccessValue, TFailureValue> | TransactionResult {\n\t\tthis.ensureUndisposed();\n\t\treturn this.checkout.runTransaction(transaction, params);\n\t}\n\n\tpublic runTransactionAsync<TSuccessValue, TFailureValue>(\n\t\ttransaction: () => Promise<TransactionCallbackStatus<TSuccessValue, TFailureValue>>,\n\t\tparams?: RunTransactionParams,\n\t): Promise<TransactionResultExt<TSuccessValue, TFailureValue>>;\n\tpublic runTransactionAsync(\n\t\ttransaction: () => Promise<VoidTransactionCallbackStatus | void>,\n\t\tparams?: RunTransactionParams,\n\t): Promise<TransactionResult>;\n\tpublic async runTransactionAsync<TSuccessValue, TFailureValue>(\n\t\ttransaction: () => Promise<\n\t\t\t| TransactionCallbackStatus<TSuccessValue, TFailureValue>\n\t\t\t| VoidTransactionCallbackStatus\n\t\t\t| void\n\t\t>,\n\t\tparams: RunTransactionParams | undefined,\n\t): Promise<TransactionResultExt<TSuccessValue, TFailureValue> | TransactionResult> {\n\t\tthis.ensureUndisposed();\n\t\tif (this.checkout.transaction.size > 0) {\n\t\t\t// breaker.break() sets brokenBy synchronously before throwing.\n\t\t\t// A plain `throw` inside an async function would be captured as a rejected Promise\n\t\t\t// before @breakingClass could set brokenBy. By setting it here first, the\n\t\t\t// subsequent call to unmountTransaction (also @breakingClass-wrapped) will see the\n\t\t\t// broken state and throw synchronously, propagating out of the outer runTransaction\n\t\t\t// to its caller.\n\t\t\tthis.breaker.break(\n\t\t\t\tnew UsageError(\n\t\t\t\t\t\"An asynchronous transaction cannot be started while another transaction is already in progress.\",\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\treturn this.checkout.runTransactionAsync(transaction, params);\n\t}\n\n\tprivate ensureUndisposed(): void {\n\t\tif (this.disposed) {\n\t\t\tthis.failDisposed();\n\t\t}\n\t}\n\n\tprivate failDisposed(): never {\n\t\tthrow new UsageError(\"Accessed a disposed TreeView.\");\n\t}\n\n\t/**\n\t * Updates `this.view` and the current compatibility status.\n\t * Invoked during initialization and when `this.view` needs to be replaced due to stored schema changes.\n\t * Handles re-registering for events to call update in the future.\n\t * @remarks\n\t * This does not check if the view needs to be replaced, it replaces it unconditionally:\n\t * callers should do any checking to detect if it's really needed before calling `update`.\n\t * @privateRemarks\n\t * This implementation avoids making any edits, which prevents it from being invoked reentrantly.\n\t * If implicit initialization (or some other edit) is desired, it should be done outside of this method.\n\t */\n\tprivate update(): void {\n\t\tthis.disposeFlexView();\n\n\t\tconst compatibility = this.viewSchema.checkCompatibility(this.checkout.storedSchema);\n\n\t\tthis.currentCompatibility = {\n\t\t\t...compatibility,\n\t\t\tcanInitialize: canInitialize(this.checkout),\n\t\t};\n\n\t\tconst anchors = this.checkout.forest.anchors;\n\t\tconst slots = anchors.slots;\n\n\t\tif (compatibility.canView) {\n\t\t\tthis.flexTreeContext = new Context(\n\t\t\t\tdefaultSchemaPolicy,\n\t\t\t\tthis.checkout,\n\t\t\t\tthis.nodeKeyManager,\n\t\t\t);\n\t\t\tassert(!slots.has(SimpleContextSlot), 0xa47 /* extra simple tree context */);\n\t\t\tassert(\n\t\t\t\tthis.rootFieldSchema instanceof FieldSchemaAlpha,\n\t\t\t\t0xbfa /* all field schema should be FieldSchemaAlpha */,\n\t\t\t);\n\t\t\tslots.set(\n\t\t\t\tSimpleContextSlot,\n\t\t\t\tnew HydratedContext(\n\t\t\t\t\tthis.flexTreeContext,\n\t\t\t\t\tHydratedContext.schemaMapFromRootSchema(\n\t\t\t\t\t\tthis.rootFieldSchema.allowedTypesFull.evaluate(),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t);\n\n\t\t\t// Trigger \"rootChanged\" events if the root changes in the future.\n\t\t\t{\n\t\t\t\t// Currently there is no good way to do this as FlexTreeField has no events for changes.\n\t\t\t\t// this.root.on(????)\n\t\t\t\t// As a workaround for the above, trigger \"rootChanged\" in \"afterBatch\".\n\t\t\t\t// Ideally these events would be just events for changes within the root.\n\t\t\t\t// TODO: provide a better event: this.view.flexTree.on(????) and/or integrate with with the normal event code paths.\n\n\t\t\t\t// Track what the root was before to be able to detect changes.\n\t\t\t\t// This uses the flex tree root to avoid demanding the simple-tree TreeNode when it might not be hydrated yet.\n\t\t\t\tlet lastRoot: FlexTreeUnknownUnboxed | undefined = (\n\t\t\t\t\tthis.flexTreeContext.root as FlexTreeOptionalField\n\t\t\t\t).content;\n\n\t\t\t\tthis.flexTreeViewUnregisterCallbacks.add(\n\t\t\t\t\tthis.checkout.events.on(\"afterBatch\", () => {\n\t\t\t\t\t\t// In the initialization flow, this event is raised before the correct compatibility w.r.t the new schema is calculated.\n\t\t\t\t\t\t// Accessing `this.root` in that case can throw. It's OK to ignore this because:\n\t\t\t\t\t\t// - The rootChanged event will already be raised at the end of the current upgrade\n\t\t\t\t\t\t// - It doesn't matter that `lastRoot` isn't updated in this case, because `update` will be called again before the upgrade\n\t\t\t\t\t\t// completes (at which point this callback and the `lastRoot` captured here will be out of scope anyway)\n\t\t\t\t\t\tif (!this.midUpgrade && lastRoot !== this.flexRoot.content) {\n\t\t\t\t\t\t\tlastRoot = this.flexRoot.content;\n\t\t\t\t\t\t\tthis.events.emit(\"rootChanged\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis.flexTreeViewUnregisterCallbacks.add(\n\t\t\t// Will dispose the old view (if there is one) when its no longer valid, and create a new one if appropriate.\n\t\t\tthis.checkout.storedSchema.events.on(\"afterSchemaChange\", () => this.update()),\n\t\t);\n\n\t\tif (!this.midUpgrade) {\n\t\t\tassert(\n\t\t\t\tthis.pendingHydration === undefined,\n\t\t\t\t0xc76 /* no nodes should be pending hydration when triggering events that could access nodes */,\n\t\t\t);\n\t\t\tthis.events.emit(\"schemaChanged\");\n\t\t\tthis.events.emit(\"rootChanged\");\n\t\t}\n\t}\n\n\tprivate runSchemaEdit(edit: () => void): void {\n\t\tthis.midUpgrade = true;\n\t\ttry {\n\t\t\tedit();\n\t\t} finally {\n\t\t\tthis.midUpgrade = false;\n\t\t}\n\t\t// Ensure hydration is flushed before events run which could access nodes.\n\t\tthis.pendingHydration?.();\n\t\tthis.pendingHydration = undefined;\n\t\tthis.events.emit(\"schemaChanged\");\n\t\tthis.events.emit(\"rootChanged\");\n\t}\n\n\tprivate disposeFlexView(): void {\n\t\tconst anchors = this.checkout.forest.anchors;\n\t\tif (this.flexTreeContext !== undefined) {\n\t\t\t// Cleanup any TreeNodes cached in the AnchorSet when disposing the flex-tree which they wrap.\n\t\t\tfor (const anchorNode of anchors) {\n\t\t\t\ttryDisposeTreeNode(anchorNode);\n\t\t\t}\n\n\t\t\tthis.flexTreeContext[disposeSymbol]();\n\t\t\tthis.flexTreeContext = undefined;\n\t\t}\n\t\tfor (const unregister of this.flexTreeViewUnregisterCallbacks) {\n\t\t\tunregister();\n\t\t}\n\t\tthis.flexTreeViewUnregisterCallbacks.clear();\n\t\tanchors.slots.delete(SimpleContextSlot);\n\t}\n\n\tpublic get compatibility(): SchemaCompatibilityStatus {\n\t\tif (!this.currentCompatibility) {\n\t\t\tthis.failDisposed();\n\t\t}\n\t\treturn this.currentCompatibility;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.disposed = true;\n\t\tthis.disposeFlexView();\n\t\tfor (const unregister of this.unregisterCallbacks) {\n\t\t\tunregister();\n\t\t}\n\t\tthis.checkout.forest.anchors.slots.delete(ViewSlot);\n\t\tthis.currentCompatibility = undefined;\n\t\tthis.onDispose?.();\n\t\tif (!this.checkout.isSharedBranch && !this.checkout.disposed) {\n\t\t\t// All non-shared branches are 1:1 with views, so if a user manually disposes a view, we should also dispose the checkout/branch.\n\t\t\tthis.checkout.dispose();\n\t\t}\n\t}\n\n\tprivate get flexRoot(): FlexTreeOptionalField | FlexTreeRequiredField {\n\t\tthis.breaker.use();\n\t\tif (!this.compatibility.canView) {\n\t\t\tthrow new UsageError(\n\t\t\t\t\"Document is out of schema. Check TreeView.compatibility before accessing TreeView.root.\",\n\t\t\t);\n\t\t}\n\t\tconst view = this.getFlexTreeContext();\n\t\tassert(\n\t\t\tview.root.is(FieldKinds.optional) ||\n\t\t\t\tview.root.is(FieldKinds.required) ||\n\t\t\t\tview.root.is(FieldKinds.identifier),\n\t\t\t0xc77 /* unexpected root field kind */,\n\t\t);\n\t\treturn view.root;\n\t}\n\n\tpublic get root(): ReadableField<TRootSchema> {\n\t\treturn tryGetTreeNodeForField(this.flexRoot) as ReadableField<TRootSchema>;\n\t}\n\n\tpublic set root(newRoot: InsertableField<TRootSchema>) {\n\t\tthis.breaker.use();\n\t\tif (!this.compatibility.canView) {\n\t\t\tthrow new UsageError(\n\t\t\t\t\"Document is out of schema. Check TreeView.compatibility before accessing TreeView.root.\",\n\t\t\t);\n\t\t}\n\t\tconst view = this.getFlexTreeContext();\n\t\tsetField(\n\t\t\tview.root,\n\t\t\tthis.rootFieldSchema,\n\t\t\tnewRoot as InsertableContent | undefined,\n\t\t\tthis.checkout.storedSchema.rootFieldSchema,\n\t\t);\n\t}\n\n\t// #region Branching\n\n\tpublic fork(): ReturnType<TreeBranchAlpha[\"fork\"]> &\n\t\tSchematizingSimpleTreeView<TRootSchema> {\n\t\treturn this.checkout.fork().viewWith(this.config);\n\t}\n\n\tpublic merge(context: TreeBranchAlpha, disposeMerged = true): void {\n\t\tthis.checkout.merge(context, disposeMerged);\n\t}\n\n\tpublic rebaseOnto(context: TreeBranchAlpha): void {\n\t\tthis.checkout.rebaseOnto(context);\n\t}\n\n\t// #endregion Branching\n}\n"]}
1
+ {"version":3,"file":"schematizingTreeView.js","sourceRoot":"","sources":["../../src/shared-tree/schematizingTreeView.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 { createEmitter } from \"@fluid-internal/client-utils\";\nimport type {\n\tHasListeners,\n\tIEmitter,\n\tListenable,\n} from \"@fluidframework/core-interfaces/internal\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport { UsageError } from \"@fluidframework/telemetry-utils/internal\";\n\nimport { anchorSlot, rootFieldKey } from \"../core/index.js\";\nimport {\n\ttype NodeIdentifierManager,\n\tdefaultSchemaPolicy,\n\tcursorForMapTreeField,\n\tContext,\n\tcombineChunks,\n\ttype FlexTreeOptionalField,\n\ttype FlexTreeUnknownUnboxed,\n\tFieldKinds,\n\ttype FlexTreeRequiredField,\n} from \"../feature-libraries/index.js\";\nimport {\n\ttype ImplicitFieldSchema,\n\ttype SchemaCompatibilityStatus,\n\ttype TreeView,\n\ttype TreeViewEvents,\n\ttryGetTreeNodeForField,\n\tsetField,\n\tnormalizeFieldSchema,\n\tSchemaCompatibilityTester,\n\ttype InsertableContent,\n\ttype TreeViewConfiguration,\n\ttype TreeViewAlpha,\n\ttype InsertableField,\n\ttype ReadableField,\n\ttype ReadSchema,\n\ttype UnsafeUnknownSchema,\n\ttype TreeBranchEvents,\n\ttype VoidTransactionCallbackStatus,\n\ttype TransactionCallbackStatus,\n\ttype TransactionResult,\n\ttype TransactionResultExt,\n\ttype RunTransactionParams,\n\tHydratedContext,\n\tSimpleContextSlot,\n\tareImplicitFieldSchemaEqual,\n\tprepareForInsertionContextless,\n\ttype FieldSchema,\n\ttryDisposeTreeNode,\n\tFieldSchemaAlpha,\n\tTreeViewConfigurationAlpha,\n\ttoInitialSchema,\n\ttoUpgradeSchema,\n\ttype TreeBranchAlpha,\n} from \"../simple-tree/index.js\";\nimport {\n\ttype Breakable,\n\tbreakingClass,\n\tdisposeSymbol,\n\ttype JsonCompatibleReadOnly,\n\ttype WithBreakable,\n} from \"../util/index.js\";\n\nimport { canInitialize, initialize, initializerFromChunk } from \"./schematizeTree.js\";\nimport type { TreeCheckout } from \"./treeCheckout.js\";\n\n/**\n * Creating multiple tree views from the same checkout is not supported. This slot is used to detect if one already\n * exists and error if creating a second.\n */\nexport const ViewSlot = anchorSlot<TreeView<ImplicitFieldSchema>>();\n\n/**\n * Implementation of TreeView wrapping a FlexTreeView.\n */\n@breakingClass\nexport class SchematizingSimpleTreeView<\n\tin out TRootSchema extends ImplicitFieldSchema | UnsafeUnknownSchema,\n> implements TreeViewAlpha<TRootSchema>, WithBreakable\n{\n\t/**\n\t * This is set to undefined when this object is disposed or the view schema does not support viewing the document's stored schema.\n\t *\n\t * The view schema may be incompatible with the stored schema. Use `compatibility` to check.\n\t */\n\tprivate flexTreeContext: Context | undefined;\n\n\t/**\n\t * Undefined iff uninitialized or disposed.\n\t */\n\tprivate currentCompatibility: SchemaCompatibilityStatus | undefined;\n\tpublic readonly events: Listenable<TreeViewEvents & TreeBranchEvents> &\n\t\tIEmitter<TreeViewEvents & TreeBranchEvents> &\n\t\tHasListeners<TreeViewEvents & TreeBranchEvents> = createEmitter();\n\n\tprivate readonly viewSchema: SchemaCompatibilityTester;\n\n\t/**\n\t * Events to unregister upon flex-tree view disposal.\n\t */\n\tprivate readonly flexTreeViewUnregisterCallbacks = new Set<() => void>();\n\n\t/**\n\t * Events to unregister upon disposal.\n\t */\n\tprivate readonly unregisterCallbacks = new Set<() => void>();\n\n\tpublic disposed = false;\n\t/**\n\t * This is set to true while an edit impacting the document schema is in progress.\n\t * This allows suppressing extra rootChanged / schemaChanged events until the edit concludes.\n\t * This is useful especially for some initialization edits, since document initialization can involve transient schemas\n\t * which are implementation details and should not be exposed to the user.\n\t */\n\tprivate midUpgrade = false;\n\n\t/**\n\t * Hydration work deferred until Context has been created.\n\t */\n\tprivate pendingHydration?: () => void;\n\n\tprivate readonly rootFieldSchema: FieldSchema;\n\tpublic readonly breaker: Breakable;\n\n\tpublic constructor(\n\t\tpublic readonly checkout: TreeCheckout,\n\t\tpublic readonly config: TreeViewConfiguration<ReadSchema<TRootSchema>>,\n\t\tpublic readonly nodeKeyManager: NodeIdentifierManager,\n\t\tprivate readonly onDispose?: () => void,\n\t) {\n\t\tthis.breaker = checkout.breaker;\n\t\tif (checkout.forest.anchors.slots.has(ViewSlot)) {\n\t\t\tthrow new UsageError(\"Cannot create a second tree view from the same checkout\");\n\t\t}\n\t\tcheckout.forest.anchors.slots.set(ViewSlot, this);\n\n\t\tthis.rootFieldSchema = normalizeFieldSchema(config.schema);\n\n\t\tconst configAlpha = new TreeViewConfigurationAlpha({ schema: config.schema });\n\n\t\tthis.viewSchema = new SchemaCompatibilityTester(configAlpha);\n\t\t// This must be initialized before `update` can be called.\n\t\tthis.currentCompatibility = {\n\t\t\tcanView: false,\n\t\t\tcanUpgrade: true,\n\t\t\tisEquivalent: false,\n\t\t\tcanInitialize: true,\n\t\t};\n\t\tthis.update();\n\n\t\tthis.unregisterCallbacks.add(\n\t\t\tthis.checkout.events.on(\"changed\", (data, getRevertible) => {\n\t\t\t\tthis.events.emit(\"changed\", data, getRevertible);\n\t\t\t\tthis.events.emit(\"commitApplied\", data, getRevertible);\n\t\t\t}),\n\t\t);\n\t}\n\n\tpublic isBranch(): this is TreeBranchAlpha {\n\t\treturn true;\n\t}\n\n\tpublic applyChange(change: JsonCompatibleReadOnly): void {\n\t\tthis.checkout.applySerializedChange(change);\n\t}\n\n\tpublic hasRootSchema<TSchema extends ImplicitFieldSchema>(\n\t\tschema: TSchema,\n\t): this is TreeViewAlpha<TSchema> {\n\t\treturn areImplicitFieldSchemaEqual(this.rootFieldSchema, schema);\n\t}\n\n\tpublic get schema(): ReadSchema<TRootSchema> {\n\t\treturn this.config.schema;\n\t}\n\n\tpublic initialize(content: InsertableField<TRootSchema>): void {\n\t\tthis.ensureUndisposed();\n\n\t\tconst compatibility = this.compatibility;\n\t\tif (!compatibility.canInitialize) {\n\t\t\tthrow new UsageError(\"Tree cannot be initialized more than once.\");\n\t\t}\n\n\t\tthis.runSchemaEdit(() => {\n\t\t\tconst schema = toInitialSchema(this.config.schema);\n\t\t\t// This has to be the contextless version, since when \"initialize\" is called (right after this),\n\t\t\t// it will do a schema change which would dispose of the current context (see inside `update`).\n\t\t\t// Thus using the current context (if any) would hydrate nodes then\n\t\t\t// immediately dispose them instead of having them actually be useable after initialize.\n\t\t\t// For this to work,\n\t\t\t// the hydration must be deferred until after the content is inserted into the tree and the final schema change is done (for required roots),\n\t\t\t// but before any user event could could run.\n\t\t\tconst mapTree = prepareForInsertionContextless(\n\t\t\t\tcontent as InsertableContent | undefined,\n\t\t\t\tthis.rootFieldSchema,\n\t\t\t\t{\n\t\t\t\t\tschema,\n\t\t\t\t\tpolicy: defaultSchemaPolicy,\n\t\t\t\t},\n\t\t\t\tthis,\n\t\t\t\tschema.rootFieldSchema,\n\t\t\t\t(batches, doHydration) => {\n\t\t\t\t\tassert(\n\t\t\t\t\t\tthis.pendingHydration === undefined,\n\t\t\t\t\t\t0xc74 /* pendingHydration already set */,\n\t\t\t\t\t);\n\t\t\t\t\tthis.pendingHydration = () => {\n\t\t\t\t\t\tassert(\n\t\t\t\t\t\t\tbatches.length <= 1,\n\t\t\t\t\t\t\t0xc75 /* initialize should at most one hydration batch */,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tfor (const batch of batches) {\n\t\t\t\t\t\t\tdoHydration(batch, {\n\t\t\t\t\t\t\t\tparent: undefined,\n\t\t\t\t\t\t\t\tparentField: rootFieldKey,\n\t\t\t\t\t\t\t\tparentIndex: 0,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tthis.runTransaction(() => {\n\t\t\t\tinitialize(\n\t\t\t\t\tthis.checkout,\n\t\t\t\t\tschema,\n\t\t\t\t\tinitializerFromChunk(this.checkout, () => {\n\t\t\t\t\t\t// This must be done after initial schema is set!\n\t\t\t\t\t\treturn combineChunks(\n\t\t\t\t\t\t\tthis.checkout.forest.chunkField(\n\t\t\t\t\t\t\t\tcursorForMapTreeField(mapTree === undefined ? [] : [mapTree]),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\t}\n\n\tpublic upgradeSchema(): void {\n\t\tthis.ensureUndisposed();\n\n\t\tconst compatibility = this.compatibility;\n\t\tif (compatibility.isEquivalent) {\n\t\t\t// No-op\n\t\t\treturn;\n\t\t}\n\n\t\tif (!compatibility.canUpgrade) {\n\t\t\tthrow new UsageError(\n\t\t\t\t\"Existing stored schema cannot be upgraded (see TreeView.compatibility.canUpgrade).\",\n\t\t\t);\n\t\t}\n\n\t\tconst newSchema = toUpgradeSchema(this.viewSchema.viewSchema.root);\n\t\tthis.runSchemaEdit(() => this.checkout.updateSchema(newSchema));\n\t}\n\n\t/**\n\t * Gets the flex-tree context. Throws when disposed or out of schema.\n\t */\n\tpublic getFlexTreeContext(): Context {\n\t\tthis.ensureUndisposed();\n\t\tassert(this.flexTreeContext !== undefined, 0x8c0 /* unexpected getViewOrError */);\n\t\treturn this.flexTreeContext;\n\t}\n\n\tpublic runTransaction<TSuccessValue, TFailureValue>(\n\t\ttransaction: () => TransactionCallbackStatus<TSuccessValue, TFailureValue>,\n\t\tparams?: RunTransactionParams,\n\t): TransactionResultExt<TSuccessValue, TFailureValue>;\n\tpublic runTransaction(\n\t\ttransaction: () => VoidTransactionCallbackStatus | void,\n\t\tparams?: RunTransactionParams,\n\t): TransactionResult;\n\tpublic runTransaction<TSuccessValue, TFailureValue>(\n\t\ttransaction: () =>\n\t\t\t| TransactionCallbackStatus<TSuccessValue, TFailureValue>\n\t\t\t| VoidTransactionCallbackStatus\n\t\t\t| void,\n\t\tparams?: RunTransactionParams,\n\t): TransactionResultExt<TSuccessValue, TFailureValue> | TransactionResult {\n\t\tthis.ensureUndisposed();\n\t\treturn this.checkout.runTransaction(transaction, params);\n\t}\n\n\tpublic runTransactionAsync<TSuccessValue, TFailureValue>(\n\t\ttransaction: () => Promise<TransactionCallbackStatus<TSuccessValue, TFailureValue>>,\n\t\tparams?: RunTransactionParams,\n\t): Promise<TransactionResultExt<TSuccessValue, TFailureValue>>;\n\tpublic runTransactionAsync(\n\t\ttransaction: () => Promise<VoidTransactionCallbackStatus | void>,\n\t\tparams?: RunTransactionParams,\n\t): Promise<TransactionResult>;\n\tpublic async runTransactionAsync<TSuccessValue, TFailureValue>(\n\t\ttransaction: () => Promise<\n\t\t\t| TransactionCallbackStatus<TSuccessValue, TFailureValue>\n\t\t\t| VoidTransactionCallbackStatus\n\t\t\t| void\n\t\t>,\n\t\tparams: RunTransactionParams | undefined,\n\t): Promise<TransactionResultExt<TSuccessValue, TFailureValue> | TransactionResult> {\n\t\tthis.ensureUndisposed();\n\t\tif (this.checkout.transaction.size > 0) {\n\t\t\t// breaker.break() sets brokenBy synchronously before throwing.\n\t\t\t// A plain `throw` inside an async function would be captured as a rejected Promise\n\t\t\t// before @breakingClass could set brokenBy. By setting it here first, the\n\t\t\t// subsequent call to unmountTransaction (also @breakingClass-wrapped) will see the\n\t\t\t// broken state and throw synchronously, propagating out of the outer runTransaction\n\t\t\t// to its caller.\n\t\t\tthis.breaker.break(\n\t\t\t\tnew UsageError(\n\t\t\t\t\t\"An asynchronous transaction cannot be started while another transaction is already in progress.\",\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\treturn this.checkout.runTransactionAsync(transaction, params);\n\t}\n\n\tprivate ensureUndisposed(): void {\n\t\tif (this.disposed) {\n\t\t\tthis.failDisposed();\n\t\t}\n\t}\n\n\tprivate failDisposed(): never {\n\t\tthrow new UsageError(\"Accessed a disposed TreeView.\");\n\t}\n\n\t/**\n\t * Updates `this.view` and the current compatibility status.\n\t * Invoked during initialization and when `this.view` needs to be replaced due to stored schema changes.\n\t * Handles re-registering for events to call update in the future.\n\t * @remarks\n\t * This does not check if the view needs to be replaced, it replaces it unconditionally:\n\t * callers should do any checking to detect if it's really needed before calling `update`.\n\t * @privateRemarks\n\t * This implementation avoids making any edits, which prevents it from being invoked reentrantly.\n\t * If implicit initialization (or some other edit) is desired, it should be done outside of this method.\n\t */\n\tprivate update(): void {\n\t\tthis.disposeFlexView();\n\n\t\tconst compatibility = this.viewSchema.checkCompatibility(this.checkout.storedSchema);\n\n\t\tthis.currentCompatibility = {\n\t\t\t...compatibility,\n\t\t\tcanInitialize: canInitialize(this.checkout),\n\t\t};\n\n\t\tconst anchors = this.checkout.forest.anchors;\n\t\tconst slots = anchors.slots;\n\n\t\tif (compatibility.canView) {\n\t\t\tthis.flexTreeContext = new Context(\n\t\t\t\tdefaultSchemaPolicy,\n\t\t\t\tthis.checkout,\n\t\t\t\tthis.nodeKeyManager,\n\t\t\t);\n\t\t\tassert(!slots.has(SimpleContextSlot), 0xa47 /* extra simple tree context */);\n\t\t\tassert(\n\t\t\t\tthis.rootFieldSchema instanceof FieldSchemaAlpha,\n\t\t\t\t0xbfa /* all field schema should be FieldSchemaAlpha */,\n\t\t\t);\n\t\t\tslots.set(\n\t\t\t\tSimpleContextSlot,\n\t\t\t\tnew HydratedContext(\n\t\t\t\t\tthis.flexTreeContext,\n\t\t\t\t\tHydratedContext.schemaMapFromRootSchema(\n\t\t\t\t\t\tthis.rootFieldSchema.allowedTypesFull.evaluate(),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t);\n\n\t\t\t// Trigger \"rootChanged\" events if the root changes in the future.\n\t\t\t{\n\t\t\t\t// Currently there is no good way to do this as FlexTreeField has no events for changes.\n\t\t\t\t// this.root.on(????)\n\t\t\t\t// As a workaround for the above, trigger \"rootChanged\" in \"afterBatch\".\n\t\t\t\t// Ideally these events would be just events for changes within the root.\n\t\t\t\t// TODO: provide a better event: this.view.flexTree.on(????) and/or integrate with with the normal event code paths.\n\n\t\t\t\t// Track what the root was before to be able to detect changes.\n\t\t\t\t// This uses the flex tree root to avoid demanding the simple-tree TreeNode when it might not be hydrated yet.\n\t\t\t\tlet lastRoot: FlexTreeUnknownUnboxed | undefined = (\n\t\t\t\t\tthis.flexTreeContext.root as FlexTreeOptionalField\n\t\t\t\t).content;\n\n\t\t\t\tthis.flexTreeViewUnregisterCallbacks.add(\n\t\t\t\t\tthis.checkout.events.on(\"afterBatch\", () => {\n\t\t\t\t\t\t// In the initialization flow, this event is raised before the correct compatibility w.r.t the new schema is calculated.\n\t\t\t\t\t\t// Accessing `this.root` in that case can throw. It's OK to ignore this because:\n\t\t\t\t\t\t// - The rootChanged event will already be raised at the end of the current upgrade\n\t\t\t\t\t\t// - It doesn't matter that `lastRoot` isn't updated in this case, because `update` will be called again before the upgrade\n\t\t\t\t\t\t// completes (at which point this callback and the `lastRoot` captured here will be out of scope anyway)\n\t\t\t\t\t\tif (!this.midUpgrade && lastRoot !== this.flexRoot.content) {\n\t\t\t\t\t\t\tlastRoot = this.flexRoot.content;\n\t\t\t\t\t\t\tthis.events.emit(\"rootChanged\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis.flexTreeViewUnregisterCallbacks.add(\n\t\t\t// Will dispose the old view (if there is one) when its no longer valid, and create a new one if appropriate.\n\t\t\tthis.checkout.storedSchema.events.on(\"afterSchemaChange\", () => this.update()),\n\t\t);\n\n\t\tif (!this.midUpgrade) {\n\t\t\tassert(\n\t\t\t\tthis.pendingHydration === undefined,\n\t\t\t\t0xc76 /* no nodes should be pending hydration when triggering events that could access nodes */,\n\t\t\t);\n\t\t\tthis.events.emit(\"schemaChanged\");\n\t\t\tthis.events.emit(\"rootChanged\");\n\t\t}\n\t}\n\n\tprivate runSchemaEdit(edit: () => void): void {\n\t\tthis.midUpgrade = true;\n\t\ttry {\n\t\t\tedit();\n\t\t} finally {\n\t\t\tthis.midUpgrade = false;\n\t\t}\n\t\t// Ensure hydration is flushed before events run which could access nodes.\n\t\tthis.pendingHydration?.();\n\t\tthis.pendingHydration = undefined;\n\t\tthis.events.emit(\"schemaChanged\");\n\t\tthis.events.emit(\"rootChanged\");\n\t}\n\n\tprivate disposeFlexView(): void {\n\t\tconst anchors = this.checkout.forest.anchors;\n\t\tif (this.flexTreeContext !== undefined) {\n\t\t\t// Cleanup any TreeNodes cached in the AnchorSet when disposing the flex-tree which they wrap.\n\t\t\tfor (const anchorNode of anchors) {\n\t\t\t\ttryDisposeTreeNode(anchorNode);\n\t\t\t}\n\n\t\t\tthis.flexTreeContext[disposeSymbol]();\n\t\t\tthis.flexTreeContext = undefined;\n\t\t}\n\t\tfor (const unregister of this.flexTreeViewUnregisterCallbacks) {\n\t\t\tunregister();\n\t\t}\n\t\tthis.flexTreeViewUnregisterCallbacks.clear();\n\t\tanchors.slots.delete(SimpleContextSlot);\n\t}\n\n\tpublic get compatibility(): SchemaCompatibilityStatus {\n\t\tif (!this.currentCompatibility) {\n\t\t\tthis.failDisposed();\n\t\t}\n\t\treturn this.currentCompatibility;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.disposed = true;\n\t\tthis.disposeFlexView();\n\t\tfor (const unregister of this.unregisterCallbacks) {\n\t\t\tunregister();\n\t\t}\n\t\tthis.checkout.forest.anchors.slots.delete(ViewSlot);\n\t\tthis.currentCompatibility = undefined;\n\t\tthis.onDispose?.();\n\t\tif (!this.checkout.isSharedBranch && !this.checkout.disposed) {\n\t\t\t// All non-shared branches are 1:1 with views, so if a user manually disposes a view, we should also dispose the checkout/branch.\n\t\t\tthis.checkout.dispose();\n\t\t}\n\t}\n\n\tprivate get flexRoot(): FlexTreeOptionalField | FlexTreeRequiredField {\n\t\tthis.breaker.use();\n\t\tif (!this.compatibility.canView) {\n\t\t\tthrow new UsageError(\n\t\t\t\t\"Document is out of schema. Check TreeView.compatibility before accessing TreeView.root.\",\n\t\t\t);\n\t\t}\n\t\tconst view = this.getFlexTreeContext();\n\t\tassert(\n\t\t\tview.root.is(FieldKinds.optional) ||\n\t\t\t\tview.root.is(FieldKinds.required) ||\n\t\t\t\tview.root.is(FieldKinds.identifier),\n\t\t\t0xc77 /* unexpected root field kind */,\n\t\t);\n\t\treturn view.root;\n\t}\n\n\tpublic get root(): ReadableField<TRootSchema> {\n\t\treturn tryGetTreeNodeForField(this.flexRoot) as ReadableField<TRootSchema>;\n\t}\n\n\tpublic set root(newRoot: InsertableField<TRootSchema>) {\n\t\tthis.breaker.use();\n\t\tif (!this.compatibility.canView) {\n\t\t\tthrow new UsageError(\n\t\t\t\t\"Document is out of schema. Check TreeView.compatibility before accessing TreeView.root.\",\n\t\t\t);\n\t\t}\n\t\tconst view = this.getFlexTreeContext();\n\t\tsetField(\n\t\t\tview.root,\n\t\t\tthis.rootFieldSchema,\n\t\t\tnewRoot as InsertableContent | undefined,\n\t\t\tthis.checkout.storedSchema.rootFieldSchema,\n\t\t);\n\t}\n\n\t// #region Branching\n\n\tpublic fork(): ReturnType<TreeBranchAlpha[\"fork\"]> &\n\t\tSchematizingSimpleTreeView<TRootSchema> {\n\t\treturn this.checkout.fork().viewWith(this.config);\n\t}\n\n\tpublic merge(context: TreeBranchAlpha, disposeMerged = true): void {\n\t\tthis.checkout.merge(context, disposeMerged);\n\t}\n\n\tpublic rebaseOnto(context: TreeBranchAlpha): void {\n\t\tthis.checkout.rebaseOnto(context);\n\t}\n\n\tpublic isMissingEditsFrom(context: TreeBranchAlpha): boolean {\n\t\treturn this.checkout.isMissingEditsFrom(context);\n\t}\n\n\t// #endregion Branching\n}\n"]}
@@ -193,7 +193,6 @@ export interface SharedTreeOptions extends SharedTreeOptionsBeta, Partial<CodecW
193
193
  shouldEncodeIncrementally?: IncrementalEncodingPolicy;
194
194
  }
195
195
  export interface SharedTreeOptionsInternal extends SharedTreeOptions, Partial<SharedTreeCoreOptionsInternal> {
196
- disposeForksAfterTransaction?: boolean;
197
196
  }
198
197
  /**
199
198
  * Configuration options for SharedTree's internal tree storage.
@@ -1 +1 @@
1
- {"version":3,"file":"sharedTree.d.ts","sourceRoot":"","sources":["../../src/shared-tree/sharedTree.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAE3F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AAC7F,OAAO,KAAK,EAAE,aAAa,EAAY,MAAM,+BAA+B,CAAC;AAC7E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AAC5F,OAAO,KAAK,EACX,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAc,KAAK,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAE/F,OAAO,EACN,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAI1B,KAAK,aAAa,EAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEN,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,YAAY,EAOjB,KAAK,gBAAgB,EACrB,0BAA0B,EAC1B,KAAK,4BAA4B,EAKjC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAKN,uBAAuB,EAUvB,KAAK,yBAAyB,EAC9B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACN,KAAK,QAAQ,EACb,KAAK,uBAAuB,EAI5B,KAAK,6BAA6B,EAClC,oBAAoB,EACpB,cAAc,EACd,wBAAwB,EAExB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACN,KAAK,mBAAmB,EAExB,KAAK,UAAU,EAEf,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EACb,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAIhB,KAAK,UAAU,EAGf,KAAK,UAAU,EACf,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,KAAK,SAAS,EAEd,KAAK,cAAc,EAEnB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAEN,6BAA6B,EAC7B,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,mBAAmB,CAAC;AAE1E;;;;GAIG;AACH,MAAM,WAAW,yBAAyB;IACzC;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC;IAC9B;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC;CACxE;AAED;;;GAGG;AACH,MAAM,WAAW,aAAc,SAAQ,YAAY,EAAE,UAAU;CAAG;AAElE;;;;;GAKG;AACH,MAAM,WAAW,YAAa,SAAQ,aAAa;IAClD;;;;;;OAMG;IACH,eAAe,IAAI,yBAAyB,CAAC;IAE7C;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC;AAE7F;;;;GAIG;AACH,qBACa,gBACZ,SAAQ,cAAc,CAAC,qBAAqB,EAAE,gBAAgB,CAC9D,YAAW,YAAY;IAyBtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAvBxB,SAAgB,QAAQ,EAAE,YAAY,CAAC;IACvC,IAAW,YAAY,IAAI,0BAA0B,CAEpD;IAED,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0C;IAEpE;;;;;;OAMG;IACH,SAAgB,IAAI,EAAE,oBAAoB,CAAC;gBAG1C,OAAO,EAAE,SAAS,EAClB,YAAY,EAAE,YAAY,GAAG,cAAc,EAC3C,UAAU,EAAE,gBAAgB,EAC5B,kBAAkB,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,OAAO,KAAK,IAAI,EACzE,kBAAkB,EAAE,MAAM,MAAM,GAAG,SAAS,EAC5C,qBAAqB,EAAE,MAAM,EACZ,MAAM,EAAE,kBAAkB,GAAG,SAAS,EACvD,YAAY,EAAE,aAAa,EAC3B,YAAY,EAAE,yBAAyB;IAuIxC,OAAO,CAAC,gBAAgB;IAIjB,aAAa,IAAI,WAAW,GAAG,SAAS;IAIxC,kBAAkB,IAAI,gBAAgB;IAKtC,eAAe,IAAI,yBAAyB;IAe5C,QAAQ,CAAC,KAAK,SAAS,mBAAmB,GAAG,mBAAmB,EACtE,MAAM,EAAE,qBAAqB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAC9C,0BAA0B,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAG3D,QAAQ,CAAC,KAAK,SAAS,mBAAmB,EAChD,MAAM,EAAE,qBAAqB,CAAC,KAAK,CAAC,GAClC,0BAA0B,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IAS/C,cAAc,CAAC,KAAK,SAAS,mBAAmB,EACtD,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,qBAAqB,CAAC,KAAK,CAAC,GAClC,QAAQ,CAAC,KAAK,CAAC;IAelB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,cAAc;IAQA,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/D,SAAS,IAAI,IAAI;IAajB,cAAc,CAC7B,GAAG,IAAI,EAAE,UAAU,CAClB,cAAc,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,CAAC,gBAAgB,CAAC,CACzE,GACC,IAAI;cAUY,YAAY,CAC9B,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,WAAW,CAAC,gBAAgB,CAAC,EACrC,eAAe,EAAE,uBAAuB,EACxC,UAAU,EAAE,OAAO,GACjB,IAAI;IAkBA,YAAY,IAAI,IAAI;CAC3B;AAED,wBAAgB,kBAAkB,CACjC,YAAY,EAAE,gBAAgB,GAC5B,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,CASrC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACtC,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE,aAAa,GACpB,gBAAgB,CAIlB;AAED;;;;;GAKG;AACH,eAAO,MAAM,iCAAiC,mHAQ5C,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,+GAQxC,CAAC;AAoBH,wBAAgB,+BAA+B,CAC9C,aAAa,EAAE,uBAAuB,GACpC,SAAS,CAaX;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAsB,SAAQ,aAAa,EAAE,OAAO,CAAC,qBAAqB,CAAC;IAC3F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,QAAQ,CAAC,mCAAmC,CAAC,EAAE,OAAO,CAAC;CACvD;AAED;;;GAGG;AACH,MAAM,WAAW,iBAChB,SAAQ,qBAAqB,EAC5B,OAAO,CAAC,iBAAiB,CAAC,EAC1B,OAAO,CAAC,uBAAuB,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IACxC;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,yBAAyB,CAAC;CACtD;AAED,MAAM,WAAW,yBAChB,SAAQ,iBAAiB,EACxB,OAAO,CAAC,6BAA6B,CAAC;IACvC,4BAA4B,CAAC,EAAE,OAAO,CAAC;CACvC;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC7B;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACvC;;;OAGG;IACH,cAAc,EAAE,uBAAuB,CAAC;CACxC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,UAAW,SAAQ,UAAU,CAAC,YAAY,CAAC;CAAG;AAE/D;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,YAG/B,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,YAY/B,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,YAGpC,CAAC;AAaF;;GAEG;AACH,wBAAgB,qBAAqB,CACpC,OAAO,EAAE,SAAS,EAClB,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,4BAA4B,EACpC,YAAY,EAAE,aAAa,EAC3B,yBAAyB,EAAE,yBAAyB,GAClD,eAAe,CAOjB;AAED,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,yBAAyB,CAWxE,CAAC"}
1
+ {"version":3,"file":"sharedTree.d.ts","sourceRoot":"","sources":["../../src/shared-tree/sharedTree.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAE3F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AAC7F,OAAO,KAAK,EAAE,aAAa,EAAY,MAAM,+BAA+B,CAAC;AAC7E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AAC5F,OAAO,KAAK,EACX,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,KAAK,kBAAkB,EAAc,MAAM,0CAA0C,CAAC;AAE/F,OAAO,EACN,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAI1B,KAAK,aAAa,EAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEN,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,YAAY,EAOjB,KAAK,gBAAgB,EACrB,0BAA0B,EAC1B,KAAK,4BAA4B,EAKjC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAKN,uBAAuB,EAUvB,KAAK,yBAAyB,EAC9B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACN,KAAK,QAAQ,EACb,KAAK,uBAAuB,EAI5B,KAAK,6BAA6B,EAClC,oBAAoB,EACpB,cAAc,EACd,wBAAwB,EAExB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACN,KAAK,mBAAmB,EAExB,KAAK,UAAU,EAEf,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EACb,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAIhB,KAAK,UAAU,EAGf,KAAK,UAAU,EACf,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,KAAK,SAAS,EAEd,KAAK,cAAc,EAEnB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAEN,6BAA6B,EAC7B,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,mBAAmB,CAAC;AAE1E;;;;GAIG;AACH,MAAM,WAAW,yBAAyB;IACzC;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC;IAC9B;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC;CACxE;AAED;;;GAGG;AACH,MAAM,WAAW,aAAc,SAAQ,YAAY,EAAE,UAAU;CAAG;AAElE;;;;;GAKG;AACH,MAAM,WAAW,YAAa,SAAQ,aAAa;IAClD;;;;;;OAMG;IACH,eAAe,IAAI,yBAAyB,CAAC;IAE7C;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC;AAE7F;;;;GAIG;AACH,qBACa,gBACZ,SAAQ,cAAc,CAAC,qBAAqB,EAAE,gBAAgB,CAC9D,YAAW,YAAY;IAyBtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAvBxB,SAAgB,QAAQ,EAAE,YAAY,CAAC;IACvC,IAAW,YAAY,IAAI,0BAA0B,CAEpD;IAED,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0C;IAEpE;;;;;;OAMG;IACH,SAAgB,IAAI,EAAE,oBAAoB,CAAC;gBAG1C,OAAO,EAAE,SAAS,EAClB,YAAY,EAAE,YAAY,GAAG,cAAc,EAC3C,UAAU,EAAE,gBAAgB,EAC5B,kBAAkB,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,OAAO,KAAK,IAAI,EACzE,kBAAkB,EAAE,MAAM,MAAM,GAAG,SAAS,EAC5C,qBAAqB,EAAE,MAAM,EACZ,MAAM,EAAE,kBAAkB,GAAG,SAAS,EACvD,YAAY,EAAE,aAAa,EAC3B,YAAY,EAAE,yBAAyB;IAsIxC,OAAO,CAAC,gBAAgB;IAIjB,aAAa,IAAI,WAAW,GAAG,SAAS;IAIxC,kBAAkB,IAAI,gBAAgB;IAKtC,eAAe,IAAI,yBAAyB;IAe5C,QAAQ,CAAC,KAAK,SAAS,mBAAmB,GAAG,mBAAmB,EACtE,MAAM,EAAE,qBAAqB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAC9C,0BAA0B,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAG3D,QAAQ,CAAC,KAAK,SAAS,mBAAmB,EAChD,MAAM,EAAE,qBAAqB,CAAC,KAAK,CAAC,GAClC,0BAA0B,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IAS/C,cAAc,CAAC,KAAK,SAAS,mBAAmB,EACtD,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,qBAAqB,CAAC,KAAK,CAAC,GAClC,QAAQ,CAAC,KAAK,CAAC;IAelB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,cAAc;IAQA,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/D,SAAS,IAAI,IAAI;IAajB,cAAc,CAC7B,GAAG,IAAI,EAAE,UAAU,CAClB,cAAc,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,CAAC,gBAAgB,CAAC,CACzE,GACC,IAAI;cAUY,YAAY,CAC9B,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,WAAW,CAAC,gBAAgB,CAAC,EACrC,eAAe,EAAE,uBAAuB,EACxC,UAAU,EAAE,OAAO,GACjB,IAAI;IAkBA,YAAY,IAAI,IAAI;CAC3B;AAED,wBAAgB,kBAAkB,CACjC,YAAY,EAAE,gBAAgB,GAC5B,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,CASrC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACtC,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE,aAAa,GACpB,gBAAgB,CAIlB;AAED;;;;;GAKG;AACH,eAAO,MAAM,iCAAiC,mHAQ5C,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,+GAQxC,CAAC;AAoBH,wBAAgB,+BAA+B,CAC9C,aAAa,EAAE,uBAAuB,GACpC,SAAS,CAaX;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAsB,SAAQ,aAAa,EAAE,OAAO,CAAC,qBAAqB,CAAC;IAC3F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,QAAQ,CAAC,mCAAmC,CAAC,EAAE,OAAO,CAAC;CACvD;AAED;;;GAGG;AACH,MAAM,WAAW,iBAChB,SAAQ,qBAAqB,EAC5B,OAAO,CAAC,iBAAiB,CAAC,EAC1B,OAAO,CAAC,uBAAuB,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IACxC;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,yBAAyB,CAAC;CACtD;AAED,MAAM,WAAW,yBAChB,SAAQ,iBAAiB,EACxB,OAAO,CAAC,6BAA6B,CAAC;CAAG;AAE3C;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC7B;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACvC;;;OAGG;IACH,cAAc,EAAE,uBAAuB,CAAC;CACxC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,UAAW,SAAQ,UAAU,CAAC,YAAY,CAAC;CAAG;AAE/D;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,YAG/B,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,YAY/B,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,YAGpC,CAAC;AAaF;;GAEG;AACH,wBAAgB,qBAAqB,CACpC,OAAO,EAAE,SAAS,EAClB,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,4BAA4B,EACpC,YAAY,EAAE,aAAa,EAC3B,yBAAyB,EAAE,yBAAyB,GAClD,eAAe,CAOjB;AAED,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,yBAAyB,CAUxE,CAAC"}