@fluidframework/tree 2.81.0 → 2.82.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 (579) hide show
  1. package/CHANGELOG.md +125 -0
  2. package/api-report/tree.alpha.api.md +54 -22
  3. package/api-report/tree.beta.api.md +150 -1
  4. package/api-report/tree.legacy.beta.api.md +150 -1
  5. package/api-report/tree.legacy.public.api.md +1 -0
  6. package/api-report/tree.public.api.md +1 -0
  7. package/dist/alpha.d.ts +8 -2
  8. package/dist/beta.d.ts +3 -0
  9. package/dist/codec/codec.d.ts +17 -8
  10. package/dist/codec/codec.d.ts.map +1 -1
  11. package/dist/codec/codec.js +8 -1
  12. package/dist/codec/codec.js.map +1 -1
  13. package/dist/codec/index.d.ts +1 -1
  14. package/dist/codec/index.d.ts.map +1 -1
  15. package/dist/codec/index.js +2 -1
  16. package/dist/codec/index.js.map +1 -1
  17. package/dist/codec/versioned/codec.d.ts +1 -1
  18. package/dist/codec/versioned/codec.d.ts.map +1 -1
  19. package/dist/codec/versioned/codec.js.map +1 -1
  20. package/dist/core/index.d.ts +1 -1
  21. package/dist/core/index.d.ts.map +1 -1
  22. package/dist/core/index.js +4 -2
  23. package/dist/core/index.js.map +1 -1
  24. package/dist/core/rebase/changeRebaser.d.ts +3 -2
  25. package/dist/core/rebase/changeRebaser.d.ts.map +1 -1
  26. package/dist/core/rebase/changeRebaser.js.map +1 -1
  27. package/dist/core/rebase/index.d.ts +1 -1
  28. package/dist/core/rebase/index.d.ts.map +1 -1
  29. package/dist/core/rebase/index.js +4 -2
  30. package/dist/core/rebase/index.js.map +1 -1
  31. package/dist/core/rebase/types.d.ts +23 -3
  32. package/dist/core/rebase/types.d.ts.map +1 -1
  33. package/dist/core/rebase/types.js +30 -16
  34. package/dist/core/rebase/types.js.map +1 -1
  35. package/dist/core/schema-stored/formatV1.d.ts +2 -2
  36. package/dist/core/schema-stored/formatV1.d.ts.map +1 -1
  37. package/dist/core/schema-stored/formatV1.js +0 -5
  38. package/dist/core/schema-stored/formatV1.js.map +1 -1
  39. package/dist/core/schema-stored/formatV2.d.ts +11 -10
  40. package/dist/core/schema-stored/formatV2.d.ts.map +1 -1
  41. package/dist/core/schema-stored/formatV2.js +1 -6
  42. package/dist/core/schema-stored/formatV2.js.map +1 -1
  43. package/dist/core/schema-stored/index.d.ts.map +1 -1
  44. package/dist/core/schema-stored/index.js.map +1 -1
  45. package/dist/core/schema-stored/schema.d.ts.map +1 -1
  46. package/dist/core/schema-stored/schema.js.map +1 -1
  47. package/dist/core/tree/anchorSet.d.ts.map +1 -1
  48. package/dist/core/tree/anchorSet.js.map +1 -1
  49. package/dist/core/tree/delta.d.ts +9 -7
  50. package/dist/core/tree/delta.d.ts.map +1 -1
  51. package/dist/core/tree/delta.js.map +1 -1
  52. package/dist/core/tree/deltaUtil.js +1 -1
  53. package/dist/core/tree/deltaUtil.js.map +1 -1
  54. package/dist/core/tree/visitDelta.js +2 -2
  55. package/dist/core/tree/visitDelta.js.map +1 -1
  56. package/dist/extensibleSchemaUnion.d.ts +72 -0
  57. package/dist/extensibleSchemaUnion.d.ts.map +1 -0
  58. package/dist/extensibleSchemaUnion.js +79 -0
  59. package/dist/extensibleSchemaUnion.js.map +1 -0
  60. package/dist/feature-libraries/changeAtomIdBTree.d.ts +4 -2
  61. package/dist/feature-libraries/changeAtomIdBTree.d.ts.map +1 -1
  62. package/dist/feature-libraries/changeAtomIdBTree.js +9 -1
  63. package/dist/feature-libraries/changeAtomIdBTree.js.map +1 -1
  64. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +1 -3
  65. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  66. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +20 -21
  67. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  68. package/dist/feature-libraries/default-schema/index.d.ts +1 -1
  69. package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
  70. package/dist/feature-libraries/default-schema/index.js.map +1 -1
  71. package/dist/feature-libraries/forest-summary/codec.d.ts +2 -1
  72. package/dist/feature-libraries/forest-summary/codec.d.ts.map +1 -1
  73. package/dist/feature-libraries/forest-summary/codec.js.map +1 -1
  74. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  75. package/dist/feature-libraries/forest-summary/forestSummarizer.js +5 -2
  76. package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  77. package/dist/feature-libraries/forest-summary/formatCommon.d.ts +1 -39
  78. package/dist/feature-libraries/forest-summary/formatCommon.d.ts.map +1 -1
  79. package/dist/feature-libraries/forest-summary/formatCommon.js +1 -2
  80. package/dist/feature-libraries/forest-summary/formatCommon.js.map +1 -1
  81. package/dist/feature-libraries/forest-summary/formatV1.d.ts +1 -39
  82. package/dist/feature-libraries/forest-summary/formatV1.d.ts.map +1 -1
  83. package/dist/feature-libraries/forest-summary/formatV2.d.ts +1 -39
  84. package/dist/feature-libraries/forest-summary/formatV2.d.ts.map +1 -1
  85. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +1 -1
  86. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -1
  87. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js +1 -1
  88. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -1
  89. package/dist/feature-libraries/index.d.ts +3 -3
  90. package/dist/feature-libraries/index.d.ts.map +1 -1
  91. package/dist/feature-libraries/index.js +4 -3
  92. package/dist/feature-libraries/index.js.map +1 -1
  93. package/dist/feature-libraries/modular-schema/defaultRevisionReplacer.d.ts +2 -2
  94. package/dist/feature-libraries/modular-schema/defaultRevisionReplacer.d.ts.map +1 -1
  95. package/dist/feature-libraries/modular-schema/defaultRevisionReplacer.js +42 -22
  96. package/dist/feature-libraries/modular-schema/defaultRevisionReplacer.js.map +1 -1
  97. package/dist/feature-libraries/modular-schema/genericFieldKind.js +1 -1
  98. package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  99. package/dist/feature-libraries/modular-schema/index.d.ts +1 -1
  100. package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
  101. package/dist/feature-libraries/modular-schema/index.js +2 -1
  102. package/dist/feature-libraries/modular-schema/index.js.map +1 -1
  103. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +1 -1
  104. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  105. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js +9 -5
  106. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  107. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts +11 -1
  108. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  109. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +30 -7
  110. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  111. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  112. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +38 -27
  113. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  114. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.d.ts +10 -127
  115. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
  116. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.js +2 -4
  117. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
  118. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.d.ts +3 -79
  119. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.d.ts.map +1 -1
  120. package/dist/feature-libraries/optional-field/optionalField.js +1 -1
  121. package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
  122. package/dist/feature-libraries/optional-field/requiredField.d.ts.map +1 -1
  123. package/dist/feature-libraries/optional-field/requiredField.js.map +1 -1
  124. package/dist/feature-libraries/schema-edits/schemaChangeFormat.d.ts +2 -2
  125. package/dist/feature-libraries/schema-index/codec.js.map +1 -1
  126. package/dist/feature-libraries/schema-index/formatV2.d.ts +4 -4
  127. package/dist/feature-libraries/schema-index/schemaSummarizer.js +1 -1
  128. package/dist/feature-libraries/schema-index/schemaSummarizer.js.map +1 -1
  129. package/dist/feature-libraries/sequence-field/invert.js +2 -2
  130. package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
  131. package/dist/feature-libraries/sequence-field/replaceRevisions.js +16 -16
  132. package/dist/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
  133. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js +1 -1
  134. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  135. package/dist/index.d.ts +5 -5
  136. package/dist/index.d.ts.map +1 -1
  137. package/dist/index.js +4 -1
  138. package/dist/index.js.map +1 -1
  139. package/dist/legacy.d.ts +3 -0
  140. package/dist/packageVersion.d.ts +1 -1
  141. package/dist/packageVersion.js +1 -1
  142. package/dist/packageVersion.js.map +1 -1
  143. package/dist/shared-tree/independentView.d.ts +36 -13
  144. package/dist/shared-tree/independentView.d.ts.map +1 -1
  145. package/dist/shared-tree/independentView.js +1 -0
  146. package/dist/shared-tree/independentView.js.map +1 -1
  147. package/dist/shared-tree/index.d.ts +1 -1
  148. package/dist/shared-tree/index.d.ts.map +1 -1
  149. package/dist/shared-tree/index.js.map +1 -1
  150. package/dist/shared-tree/schematizingTreeView.d.ts +10 -0
  151. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  152. package/dist/shared-tree/schematizingTreeView.js +25 -9
  153. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  154. package/dist/shared-tree/sharedTree.d.ts +3 -3
  155. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  156. package/dist/shared-tree/sharedTree.js +8 -32
  157. package/dist/shared-tree/sharedTree.js.map +1 -1
  158. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts +11 -3
  159. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  160. package/dist/shared-tree/sharedTreeChangeCodecs.js +38 -4
  161. package/dist/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  162. package/dist/shared-tree/sharedTreeChangeFormat.d.ts +4 -4
  163. package/dist/shared-tree/tree.js +1 -1
  164. package/dist/shared-tree/tree.js.map +1 -1
  165. package/dist/shared-tree/treeCheckout.d.ts +20 -0
  166. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  167. package/dist/shared-tree/treeCheckout.js +39 -3
  168. package/dist/shared-tree/treeCheckout.js.map +1 -1
  169. package/dist/shared-tree-core/editManagerSummarizer.js +1 -1
  170. package/dist/shared-tree-core/editManagerSummarizer.js.map +1 -1
  171. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  172. package/dist/shared-tree-core/messageCodecV1ToV4.js +2 -2
  173. package/dist/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  174. package/dist/shared-tree-core/transaction.d.ts +14 -3
  175. package/dist/shared-tree-core/transaction.d.ts.map +1 -1
  176. package/dist/shared-tree-core/transaction.js +59 -16
  177. package/dist/shared-tree-core/transaction.js.map +1 -1
  178. package/dist/shared-tree-core/versionedSummarizer.d.ts.map +1 -1
  179. package/dist/shared-tree-core/versionedSummarizer.js +1 -1
  180. package/dist/shared-tree-core/versionedSummarizer.js.map +1 -1
  181. package/dist/simple-tree/api/index.d.ts +1 -1
  182. package/dist/simple-tree/api/index.d.ts.map +1 -1
  183. package/dist/simple-tree/api/index.js +3 -2
  184. package/dist/simple-tree/api/index.js.map +1 -1
  185. package/dist/simple-tree/api/schemaCreationUtilities.d.ts +9 -0
  186. package/dist/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
  187. package/dist/simple-tree/api/schemaCreationUtilities.js +16 -1
  188. package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  189. package/dist/simple-tree/api/simpleTreeIndex.js.map +1 -1
  190. package/dist/simple-tree/api/transactionTypes.d.ts +10 -0
  191. package/dist/simple-tree/api/transactionTypes.d.ts.map +1 -1
  192. package/dist/simple-tree/api/transactionTypes.js.map +1 -1
  193. package/dist/simple-tree/api/tree.d.ts +81 -6
  194. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  195. package/dist/simple-tree/api/tree.js.map +1 -1
  196. package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  197. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
  198. package/dist/simple-tree/index.d.ts +2 -2
  199. package/dist/simple-tree/index.d.ts.map +1 -1
  200. package/dist/simple-tree/index.js +4 -2
  201. package/dist/simple-tree/index.js.map +1 -1
  202. package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
  203. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  204. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts +63 -0
  205. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  206. package/dist/simple-tree/node-kinds/array/arrayNode.js +43 -1
  207. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  208. package/dist/simple-tree/node-kinds/array/index.d.ts +1 -1
  209. package/dist/simple-tree/node-kinds/array/index.d.ts.map +1 -1
  210. package/dist/simple-tree/node-kinds/array/index.js +2 -1
  211. package/dist/simple-tree/node-kinds/array/index.js.map +1 -1
  212. package/dist/simple-tree/node-kinds/index.d.ts +1 -1
  213. package/dist/simple-tree/node-kinds/index.d.ts.map +1 -1
  214. package/dist/simple-tree/node-kinds/index.js +2 -1
  215. package/dist/simple-tree/node-kinds/index.js.map +1 -1
  216. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  217. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  218. package/dist/tableSchema.d.ts +71 -48
  219. package/dist/tableSchema.d.ts.map +1 -1
  220. package/dist/tableSchema.js +200 -98
  221. package/dist/tableSchema.js.map +1 -1
  222. package/dist/text/textDomainFormatted.js +1 -1
  223. package/dist/text/textDomainFormatted.js.map +1 -1
  224. package/dist/util/bTreeUtils.d.ts +30 -4
  225. package/dist/util/bTreeUtils.d.ts.map +1 -1
  226. package/dist/util/bTreeUtils.js +29 -17
  227. package/dist/util/bTreeUtils.js.map +1 -1
  228. package/dist/util/brand.d.ts.map +1 -1
  229. package/dist/util/brand.js.map +1 -1
  230. package/dist/util/brandedMap.d.ts.map +1 -1
  231. package/dist/util/brandedMap.js.map +1 -1
  232. package/dist/util/breakable.d.ts.map +1 -1
  233. package/dist/util/breakable.js +2 -1
  234. package/dist/util/breakable.js.map +1 -1
  235. package/dist/util/index.d.ts +2 -2
  236. package/dist/util/index.d.ts.map +1 -1
  237. package/dist/util/index.js +6 -3
  238. package/dist/util/index.js.map +1 -1
  239. package/dist/util/opaque.d.ts.map +1 -1
  240. package/dist/util/opaque.js.map +1 -1
  241. package/dist/util/rangeMap.d.ts +3 -2
  242. package/dist/util/rangeMap.d.ts.map +1 -1
  243. package/dist/util/rangeMap.js +7 -1
  244. package/dist/util/rangeMap.js.map +1 -1
  245. package/dist/util/readSnapshotBlob.d.ts +1 -1
  246. package/dist/util/readSnapshotBlob.d.ts.map +1 -1
  247. package/dist/util/readSnapshotBlob.js.map +1 -1
  248. package/dist/util/typeCheck.d.ts.map +1 -1
  249. package/dist/util/typeCheck.js.map +1 -1
  250. package/dist/util/utils.d.ts +20 -16
  251. package/dist/util/utils.d.ts.map +1 -1
  252. package/dist/util/utils.js +49 -17
  253. package/dist/util/utils.js.map +1 -1
  254. package/eslint.config.mts +0 -9
  255. package/lib/alpha.d.ts +8 -2
  256. package/lib/beta.d.ts +3 -0
  257. package/lib/codec/codec.d.ts +17 -8
  258. package/lib/codec/codec.d.ts.map +1 -1
  259. package/lib/codec/codec.js +6 -0
  260. package/lib/codec/codec.js.map +1 -1
  261. package/lib/codec/index.d.ts +1 -1
  262. package/lib/codec/index.d.ts.map +1 -1
  263. package/lib/codec/index.js +1 -1
  264. package/lib/codec/index.js.map +1 -1
  265. package/lib/codec/versioned/codec.d.ts +1 -1
  266. package/lib/codec/versioned/codec.d.ts.map +1 -1
  267. package/lib/codec/versioned/codec.js.map +1 -1
  268. package/lib/core/index.d.ts +1 -1
  269. package/lib/core/index.d.ts.map +1 -1
  270. package/lib/core/index.js +1 -1
  271. package/lib/core/index.js.map +1 -1
  272. package/lib/core/rebase/changeRebaser.d.ts +3 -2
  273. package/lib/core/rebase/changeRebaser.d.ts.map +1 -1
  274. package/lib/core/rebase/changeRebaser.js.map +1 -1
  275. package/lib/core/rebase/index.d.ts +1 -1
  276. package/lib/core/rebase/index.d.ts.map +1 -1
  277. package/lib/core/rebase/index.js +1 -1
  278. package/lib/core/rebase/index.js.map +1 -1
  279. package/lib/core/rebase/types.d.ts +23 -3
  280. package/lib/core/rebase/types.d.ts.map +1 -1
  281. package/lib/core/rebase/types.js +27 -15
  282. package/lib/core/rebase/types.js.map +1 -1
  283. package/lib/core/schema-stored/formatV1.d.ts +2 -2
  284. package/lib/core/schema-stored/formatV1.d.ts.map +1 -1
  285. package/lib/core/schema-stored/formatV1.js +0 -5
  286. package/lib/core/schema-stored/formatV1.js.map +1 -1
  287. package/lib/core/schema-stored/formatV2.d.ts +11 -10
  288. package/lib/core/schema-stored/formatV2.d.ts.map +1 -1
  289. package/lib/core/schema-stored/formatV2.js +1 -6
  290. package/lib/core/schema-stored/formatV2.js.map +1 -1
  291. package/lib/core/schema-stored/index.d.ts.map +1 -1
  292. package/lib/core/schema-stored/index.js +2 -0
  293. package/lib/core/schema-stored/index.js.map +1 -1
  294. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  295. package/lib/core/schema-stored/schema.js.map +1 -1
  296. package/lib/core/tree/anchorSet.d.ts.map +1 -1
  297. package/lib/core/tree/anchorSet.js.map +1 -1
  298. package/lib/core/tree/delta.d.ts +9 -7
  299. package/lib/core/tree/delta.d.ts.map +1 -1
  300. package/lib/core/tree/delta.js.map +1 -1
  301. package/lib/core/tree/deltaUtil.js +1 -1
  302. package/lib/core/tree/deltaUtil.js.map +1 -1
  303. package/lib/core/tree/visitDelta.js +2 -2
  304. package/lib/core/tree/visitDelta.js.map +1 -1
  305. package/lib/extensibleSchemaUnion.d.ts +72 -0
  306. package/lib/extensibleSchemaUnion.d.ts.map +1 -0
  307. package/lib/extensibleSchemaUnion.js +76 -0
  308. package/lib/extensibleSchemaUnion.js.map +1 -0
  309. package/lib/feature-libraries/changeAtomIdBTree.d.ts +4 -2
  310. package/lib/feature-libraries/changeAtomIdBTree.d.ts.map +1 -1
  311. package/lib/feature-libraries/changeAtomIdBTree.js +7 -0
  312. package/lib/feature-libraries/changeAtomIdBTree.js.map +1 -1
  313. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +1 -3
  314. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  315. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +4 -5
  316. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  317. package/lib/feature-libraries/default-schema/index.d.ts +1 -1
  318. package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
  319. package/lib/feature-libraries/default-schema/index.js.map +1 -1
  320. package/lib/feature-libraries/forest-summary/codec.d.ts +2 -1
  321. package/lib/feature-libraries/forest-summary/codec.d.ts.map +1 -1
  322. package/lib/feature-libraries/forest-summary/codec.js.map +1 -1
  323. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  324. package/lib/feature-libraries/forest-summary/forestSummarizer.js +6 -3
  325. package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  326. package/lib/feature-libraries/forest-summary/formatCommon.d.ts +1 -39
  327. package/lib/feature-libraries/forest-summary/formatCommon.d.ts.map +1 -1
  328. package/lib/feature-libraries/forest-summary/formatCommon.js +2 -3
  329. package/lib/feature-libraries/forest-summary/formatCommon.js.map +1 -1
  330. package/lib/feature-libraries/forest-summary/formatV1.d.ts +1 -39
  331. package/lib/feature-libraries/forest-summary/formatV1.d.ts.map +1 -1
  332. package/lib/feature-libraries/forest-summary/formatV2.d.ts +1 -39
  333. package/lib/feature-libraries/forest-summary/formatV2.d.ts.map +1 -1
  334. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +1 -1
  335. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -1
  336. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js +1 -1
  337. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -1
  338. package/lib/feature-libraries/index.d.ts +3 -3
  339. package/lib/feature-libraries/index.d.ts.map +1 -1
  340. package/lib/feature-libraries/index.js +3 -3
  341. package/lib/feature-libraries/index.js.map +1 -1
  342. package/lib/feature-libraries/modular-schema/defaultRevisionReplacer.d.ts +2 -2
  343. package/lib/feature-libraries/modular-schema/defaultRevisionReplacer.d.ts.map +1 -1
  344. package/lib/feature-libraries/modular-schema/defaultRevisionReplacer.js +41 -21
  345. package/lib/feature-libraries/modular-schema/defaultRevisionReplacer.js.map +1 -1
  346. package/lib/feature-libraries/modular-schema/genericFieldKind.js +1 -1
  347. package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  348. package/lib/feature-libraries/modular-schema/index.d.ts +1 -1
  349. package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
  350. package/lib/feature-libraries/modular-schema/index.js +1 -1
  351. package/lib/feature-libraries/modular-schema/index.js.map +1 -1
  352. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +1 -1
  353. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  354. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js +10 -6
  355. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  356. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts +11 -1
  357. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  358. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +29 -6
  359. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  360. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  361. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +41 -30
  362. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  363. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.d.ts +10 -127
  364. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
  365. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.js +2 -4
  366. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
  367. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.d.ts +3 -79
  368. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.d.ts.map +1 -1
  369. package/lib/feature-libraries/optional-field/optionalField.js +1 -1
  370. package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
  371. package/lib/feature-libraries/optional-field/requiredField.d.ts.map +1 -1
  372. package/lib/feature-libraries/optional-field/requiredField.js.map +1 -1
  373. package/lib/feature-libraries/schema-edits/schemaChangeFormat.d.ts +2 -2
  374. package/lib/feature-libraries/schema-index/codec.js.map +1 -1
  375. package/lib/feature-libraries/schema-index/formatV2.d.ts +4 -4
  376. package/lib/feature-libraries/schema-index/schemaSummarizer.js +1 -1
  377. package/lib/feature-libraries/schema-index/schemaSummarizer.js.map +1 -1
  378. package/lib/feature-libraries/sequence-field/invert.js +2 -2
  379. package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
  380. package/lib/feature-libraries/sequence-field/replaceRevisions.js +16 -16
  381. package/lib/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
  382. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js +1 -1
  383. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  384. package/lib/index.d.ts +5 -5
  385. package/lib/index.d.ts.map +1 -1
  386. package/lib/index.js +4 -3
  387. package/lib/index.js.map +1 -1
  388. package/lib/legacy.d.ts +3 -0
  389. package/lib/packageVersion.d.ts +1 -1
  390. package/lib/packageVersion.js +1 -1
  391. package/lib/packageVersion.js.map +1 -1
  392. package/lib/shared-tree/independentView.d.ts +36 -13
  393. package/lib/shared-tree/independentView.d.ts.map +1 -1
  394. package/lib/shared-tree/independentView.js +1 -0
  395. package/lib/shared-tree/independentView.js.map +1 -1
  396. package/lib/shared-tree/index.d.ts +1 -1
  397. package/lib/shared-tree/index.d.ts.map +1 -1
  398. package/lib/shared-tree/index.js.map +1 -1
  399. package/lib/shared-tree/schematizingTreeView.d.ts +10 -0
  400. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  401. package/lib/shared-tree/schematizingTreeView.js +25 -9
  402. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  403. package/lib/shared-tree/sharedTree.d.ts +3 -3
  404. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  405. package/lib/shared-tree/sharedTree.js +10 -34
  406. package/lib/shared-tree/sharedTree.js.map +1 -1
  407. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts +11 -3
  408. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  409. package/lib/shared-tree/sharedTreeChangeCodecs.js +39 -5
  410. package/lib/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  411. package/lib/shared-tree/sharedTreeChangeFormat.d.ts +4 -4
  412. package/lib/shared-tree/tree.js +1 -1
  413. package/lib/shared-tree/tree.js.map +1 -1
  414. package/lib/shared-tree/treeCheckout.d.ts +20 -0
  415. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  416. package/lib/shared-tree/treeCheckout.js +39 -3
  417. package/lib/shared-tree/treeCheckout.js.map +1 -1
  418. package/lib/shared-tree-core/editManagerSummarizer.js +1 -1
  419. package/lib/shared-tree-core/editManagerSummarizer.js.map +1 -1
  420. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  421. package/lib/shared-tree-core/messageCodecV1ToV4.js +2 -2
  422. package/lib/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  423. package/lib/shared-tree-core/transaction.d.ts +14 -3
  424. package/lib/shared-tree-core/transaction.d.ts.map +1 -1
  425. package/lib/shared-tree-core/transaction.js +61 -18
  426. package/lib/shared-tree-core/transaction.js.map +1 -1
  427. package/lib/shared-tree-core/versionedSummarizer.d.ts.map +1 -1
  428. package/lib/shared-tree-core/versionedSummarizer.js +1 -1
  429. package/lib/shared-tree-core/versionedSummarizer.js.map +1 -1
  430. package/lib/simple-tree/api/index.d.ts +1 -1
  431. package/lib/simple-tree/api/index.d.ts.map +1 -1
  432. package/lib/simple-tree/api/index.js +1 -1
  433. package/lib/simple-tree/api/index.js.map +1 -1
  434. package/lib/simple-tree/api/schemaCreationUtilities.d.ts +9 -0
  435. package/lib/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
  436. package/lib/simple-tree/api/schemaCreationUtilities.js +14 -0
  437. package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  438. package/lib/simple-tree/api/simpleTreeIndex.js.map +1 -1
  439. package/lib/simple-tree/api/transactionTypes.d.ts +10 -0
  440. package/lib/simple-tree/api/transactionTypes.d.ts.map +1 -1
  441. package/lib/simple-tree/api/transactionTypes.js.map +1 -1
  442. package/lib/simple-tree/api/tree.d.ts +81 -6
  443. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  444. package/lib/simple-tree/api/tree.js.map +1 -1
  445. package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  446. package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
  447. package/lib/simple-tree/index.d.ts +2 -2
  448. package/lib/simple-tree/index.d.ts.map +1 -1
  449. package/lib/simple-tree/index.js +2 -2
  450. package/lib/simple-tree/index.js.map +1 -1
  451. package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
  452. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  453. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts +63 -0
  454. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  455. package/lib/simple-tree/node-kinds/array/arrayNode.js +41 -0
  456. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  457. package/lib/simple-tree/node-kinds/array/index.d.ts +1 -1
  458. package/lib/simple-tree/node-kinds/array/index.d.ts.map +1 -1
  459. package/lib/simple-tree/node-kinds/array/index.js +1 -1
  460. package/lib/simple-tree/node-kinds/array/index.js.map +1 -1
  461. package/lib/simple-tree/node-kinds/index.d.ts +1 -1
  462. package/lib/simple-tree/node-kinds/index.d.ts.map +1 -1
  463. package/lib/simple-tree/node-kinds/index.js +1 -1
  464. package/lib/simple-tree/node-kinds/index.js.map +1 -1
  465. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  466. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  467. package/lib/tableSchema.d.ts +71 -48
  468. package/lib/tableSchema.d.ts.map +1 -1
  469. package/lib/tableSchema.js +201 -99
  470. package/lib/tableSchema.js.map +1 -1
  471. package/lib/text/textDomainFormatted.js +1 -1
  472. package/lib/text/textDomainFormatted.js.map +1 -1
  473. package/lib/util/bTreeUtils.d.ts +30 -4
  474. package/lib/util/bTreeUtils.d.ts.map +1 -1
  475. package/lib/util/bTreeUtils.js +27 -16
  476. package/lib/util/bTreeUtils.js.map +1 -1
  477. package/lib/util/brand.d.ts.map +1 -1
  478. package/lib/util/brand.js.map +1 -1
  479. package/lib/util/brandedMap.d.ts.map +1 -1
  480. package/lib/util/brandedMap.js.map +1 -1
  481. package/lib/util/breakable.d.ts.map +1 -1
  482. package/lib/util/breakable.js +2 -1
  483. package/lib/util/breakable.js.map +1 -1
  484. package/lib/util/index.d.ts +2 -2
  485. package/lib/util/index.d.ts.map +1 -1
  486. package/lib/util/index.js +2 -2
  487. package/lib/util/index.js.map +1 -1
  488. package/lib/util/opaque.d.ts.map +1 -1
  489. package/lib/util/opaque.js.map +1 -1
  490. package/lib/util/rangeMap.d.ts +3 -2
  491. package/lib/util/rangeMap.d.ts.map +1 -1
  492. package/lib/util/rangeMap.js +7 -1
  493. package/lib/util/rangeMap.js.map +1 -1
  494. package/lib/util/readSnapshotBlob.d.ts +1 -1
  495. package/lib/util/readSnapshotBlob.d.ts.map +1 -1
  496. package/lib/util/readSnapshotBlob.js.map +1 -1
  497. package/lib/util/typeCheck.d.ts.map +1 -1
  498. package/lib/util/typeCheck.js.map +1 -1
  499. package/lib/util/utils.d.ts +20 -16
  500. package/lib/util/utils.d.ts.map +1 -1
  501. package/lib/util/utils.js +44 -15
  502. package/lib/util/utils.js.map +1 -1
  503. package/package.json +23 -23
  504. package/src/codec/codec.ts +30 -11
  505. package/src/codec/index.ts +2 -0
  506. package/src/codec/versioned/codec.ts +9 -13
  507. package/src/core/index.ts +3 -1
  508. package/src/core/rebase/changeRebaser.ts +3 -2
  509. package/src/core/rebase/index.ts +3 -1
  510. package/src/core/rebase/types.ts +51 -13
  511. package/src/core/schema-stored/formatV1.ts +2 -4
  512. package/src/core/schema-stored/formatV2.ts +9 -7
  513. package/src/core/schema-stored/index.ts +2 -0
  514. package/src/core/schema-stored/schema.ts +4 -1
  515. package/src/core/tree/anchorSet.ts +1 -3
  516. package/src/core/tree/delta.ts +9 -7
  517. package/src/core/tree/deltaUtil.ts +1 -1
  518. package/src/core/tree/visitDelta.ts +2 -2
  519. package/src/extensibleSchemaUnion.ts +135 -0
  520. package/src/feature-libraries/changeAtomIdBTree.ts +17 -2
  521. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +5 -6
  522. package/src/feature-libraries/default-schema/index.ts +0 -1
  523. package/src/feature-libraries/forest-summary/codec.ts +7 -2
  524. package/src/feature-libraries/forest-summary/forestSummarizer.ts +15 -3
  525. package/src/feature-libraries/forest-summary/formatCommon.ts +2 -3
  526. package/src/feature-libraries/forest-summary/incrementalSummaryBuilder.ts +4 -5
  527. package/src/feature-libraries/index.ts +3 -2
  528. package/src/feature-libraries/modular-schema/defaultRevisionReplacer.ts +57 -31
  529. package/src/feature-libraries/modular-schema/genericFieldKind.ts +1 -1
  530. package/src/feature-libraries/modular-schema/index.ts +4 -1
  531. package/src/feature-libraries/modular-schema/modularChangeCodecV1.ts +7 -6
  532. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +32 -7
  533. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +54 -33
  534. package/src/feature-libraries/modular-schema/modularChangeFormatV1.ts +2 -4
  535. package/src/feature-libraries/optional-field/optionalField.ts +1 -1
  536. package/src/feature-libraries/optional-field/requiredField.ts +2 -4
  537. package/src/feature-libraries/schema-index/codec.ts +1 -1
  538. package/src/feature-libraries/schema-index/schemaSummarizer.ts +1 -1
  539. package/src/feature-libraries/sequence-field/invert.ts +2 -2
  540. package/src/feature-libraries/sequence-field/replaceRevisions.ts +17 -10
  541. package/src/feature-libraries/sequence-field/sequenceFieldToDelta.ts +1 -1
  542. package/src/index.ts +12 -7
  543. package/src/packageVersion.ts +1 -1
  544. package/src/shared-tree/independentView.ts +42 -6
  545. package/src/shared-tree/index.ts +2 -0
  546. package/src/shared-tree/schematizingTreeView.ts +63 -18
  547. package/src/shared-tree/sharedTree.ts +19 -37
  548. package/src/shared-tree/sharedTreeChangeCodecs.ts +43 -9
  549. package/src/shared-tree/tree.ts +1 -1
  550. package/src/shared-tree/treeCheckout.ts +50 -3
  551. package/src/shared-tree-core/editManagerSummarizer.ts +1 -1
  552. package/src/shared-tree-core/messageCodecV1ToV4.ts +4 -3
  553. package/src/shared-tree-core/transaction.ts +125 -23
  554. package/src/shared-tree-core/versionedSummarizer.ts +3 -2
  555. package/src/simple-tree/api/index.ts +1 -0
  556. package/src/simple-tree/api/schemaCreationUtilities.ts +35 -5
  557. package/src/simple-tree/api/simpleTreeIndex.ts +1 -1
  558. package/src/simple-tree/api/transactionTypes.ts +10 -0
  559. package/src/simple-tree/api/tree.ts +88 -6
  560. package/src/simple-tree/core/treeNodeSchema.ts +5 -8
  561. package/src/simple-tree/index.ts +3 -0
  562. package/src/simple-tree/leafNodeSchema.ts +3 -2
  563. package/src/simple-tree/node-kinds/array/arrayNode.ts +86 -0
  564. package/src/simple-tree/node-kinds/array/index.ts +2 -0
  565. package/src/simple-tree/node-kinds/index.ts +2 -0
  566. package/src/simple-tree/node-kinds/object/objectNode.ts +19 -18
  567. package/src/tableSchema.ts +280 -140
  568. package/src/text/textDomainFormatted.ts +1 -1
  569. package/src/util/bTreeUtils.ts +45 -26
  570. package/src/util/brand.ts +4 -12
  571. package/src/util/brandedMap.ts +2 -6
  572. package/src/util/breakable.ts +3 -2
  573. package/src/util/index.ts +9 -3
  574. package/src/util/opaque.ts +2 -6
  575. package/src/util/rangeMap.ts +11 -5
  576. package/src/util/readSnapshotBlob.ts +3 -3
  577. package/src/util/typeCheck.ts +11 -9
  578. package/src/util/utils.ts +57 -28
  579. package/biome.jsonc +0 -4
@@ -94,7 +94,7 @@ class TextNode
94
94
  ][]) {
95
95
  // Object.entries should only return string keyed enumerable own properties.
96
96
  // The TypeScript typing does not account for this, and thus this assertion is necessary for this code to compile.
97
- assert(typeof key === "string", "Object.entries returned a non-string key.");
97
+ assert(typeof key === "string", 0xcc8 /* Object.entries returned a non-string key. */);
98
98
  const f = FormattedTextAsTree.CharacterFormat.fields.get(key);
99
99
  if (f === undefined) {
100
100
  throw new UsageError(`Unknown format key: ${key}`);
@@ -10,8 +10,7 @@ import { brand, type Brand } from "./brand.js";
10
10
 
11
11
  /**
12
12
  * A BTree which uses tuples (arrays) as the key.
13
- * @remarks
14
- * All keys must be the same length.
13
+ * @remarks All keys must be the same length.
15
14
  */
16
15
  export type TupleBTree<K extends readonly DefaultComparable[], V> = Brand<
17
16
  BTree<K, V>,
@@ -20,45 +19,65 @@ export type TupleBTree<K extends readonly DefaultComparable[], V> = Brand<
20
19
 
21
20
  /**
22
21
  * Create a new {@link TupleBTree}.
22
+ * @param comparator - Either a single {@link TupleComparator | comparator} for all pairs of elements in the tuple or a {@link TupleComparators | tuple of comparators} that compares each pair of corresponding elements individually.
23
+ * @param entries - Optional initial entries for the btree.
23
24
  */
24
25
  export function newTupleBTree<const K extends readonly DefaultComparable[], V>(
26
+ comparator: (a: K, b: K) => number,
25
27
  entries?: [K, V][],
26
28
  ): TupleBTree<K, V> {
27
- return brand(new BTree<K, V>(entries, compareTuples));
29
+ return brand(new BTree<K, V>(entries, comparator));
28
30
  }
29
31
 
32
+ /** A comparator which can compare any pair of corresponding elements in the key of a {@link TupleBTree} */
33
+ type TupleComparator<T extends DefaultComparable> = (a: T, b: T) => number;
34
+
35
+ /**
36
+ * A list of comparators for a {@link TupleBTree}.
37
+ * @remarks For each comparator _C_ at index _i_, C compares the pair of corresponding elements at index _i_ in the key of the btree.
38
+ */
39
+ type TupleComparators<T extends readonly DefaultComparable[]> = {
40
+ [P in keyof T]: TupleComparator<T[P]>;
41
+ };
42
+
30
43
  /**
31
44
  * Compares two tuples (arrays) element by element.
32
- * @param arrayA - The first tuple to compare.
33
- * @param arrayB - The second tuple to compare.
34
- * @returns A negative number if arrayA \< arrayB, a positive number if arrayA \> arrayB, or 0 if they are equal.
45
+ * @param a - The first tuple to compare.
46
+ * @param b - The second tuple to compare.
47
+ * @returns The comparison of the first pair of elements at the same index that differ, or 0 if all elements are equal.
48
+ * @remarks The tuples must be the same length and have the same type of elements in the same order.
35
49
  */
36
- function compareTuples(
37
- arrayA: readonly DefaultComparable[],
38
- arrayB: readonly DefaultComparable[],
39
- ): number {
40
- debugAssert(
41
- () =>
42
- arrayA.length === arrayB.length || "compareTuples requires arrays of the same length",
43
- );
44
- for (let i = 0; i < arrayA.length; i++) {
45
- const result = defaultComparator(arrayA[i], arrayB[i]);
46
- if (result !== 0) {
47
- return result;
50
+ export function createTupleComparator<const K extends readonly DefaultComparable[]>(
51
+ compare: TupleComparator<K[number]> | TupleComparators<K> = defaultComparator,
52
+ ): (a: K, b: K) => number {
53
+ return (a: K, b: K): number => {
54
+ debugAssert(
55
+ () => a.length === b.length || "compareTuples requires arrays of the same length",
56
+ );
57
+ const comparators = typeof compare === "function" ? undefined : compare;
58
+ for (let i = 0; i < a.length; i++) {
59
+ const comparator = comparators?.[i] ?? (compare as TupleComparator<K[number]>);
60
+ const result = comparator(a[i], b[i]);
61
+ if (result !== 0) {
62
+ return result;
63
+ }
48
64
  }
49
- }
50
- return 0;
65
+ return 0;
66
+ };
51
67
  }
52
68
 
53
- export function mergeTupleBTrees<K extends readonly DefaultComparable[], V>(
54
- tree1: TupleBTree<K, V> | undefined,
69
+ /**
70
+ * Merge the entries of two {@link TupleBTree}s.
71
+ * @param tree1 - The first btree.
72
+ * @param tree2 - The second btree.
73
+ * This always returns a new btree and does not modify either input.
74
+ * @param preferLeft - If true, colliding keys will use the value from `tree1`, otherwise the value from `tree2` is used.
75
+ */
76
+ export function mergeTupleBTrees<const K extends readonly DefaultComparable[], V>(
77
+ tree1: TupleBTree<K, V>,
55
78
  tree2: TupleBTree<K, V> | undefined,
56
79
  preferLeft = true,
57
80
  ): TupleBTree<K, V> {
58
- if (tree1 === undefined) {
59
- return tree2 === undefined ? newTupleBTree<K, V>() : brand(tree2.clone());
60
- }
61
-
62
81
  const result: TupleBTree<K, V> = brand(tree1.clone());
63
82
  if (tree2 === undefined) {
64
83
  return result;
package/src/util/brand.ts CHANGED
@@ -82,23 +82,15 @@ export abstract class BrandedType<out ValueType, Name> {
82
82
  * Implementation detail of type branding. Should not be used directly outside this file,
83
83
  * but shows up as part of branded types so API-Extractor requires it to be exported.
84
84
  */
85
- export type ValueFromBranded<T extends BrandedType<unknown, unknown>> = T extends BrandedType<
86
- infer ValueType,
87
- unknown
88
- >
89
- ? ValueType
90
- : never;
85
+ export type ValueFromBranded<T extends BrandedType<unknown, unknown>> =
86
+ T extends BrandedType<infer ValueType, unknown> ? ValueType : never;
91
87
 
92
88
  /**
93
89
  * Implementation detail of type branding. Should not be used directly outside this file,
94
90
  * but shows up as part of branded types so API-Extractor requires it to be exported.
95
91
  */
96
- export type NameFromBranded<T extends BrandedType<unknown, unknown>> = T extends BrandedType<
97
- unknown,
98
- infer Name
99
- >
100
- ? Name
101
- : never;
92
+ export type NameFromBranded<T extends BrandedType<unknown, unknown>> =
93
+ T extends BrandedType<unknown, infer Name> ? Name : never;
102
94
 
103
95
  /**
104
96
  * Adds a type {@link Brand} to a value.
@@ -19,12 +19,8 @@ import { getOrCreate } from "./utils.js";
19
19
  export type BrandedKey<TKey, TContent> = Brand<TKey, ["BrandedKey", Invariant<TContent>]>;
20
20
 
21
21
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
22
- export type BrandedKeyContent<TKey extends BrandedKey<unknown, any>> = TKey extends BrandedKey<
23
- unknown,
24
- infer TContent
25
- >
26
- ? TContent
27
- : never;
22
+ export type BrandedKeyContent<TKey extends BrandedKey<unknown, any>> =
23
+ TKey extends BrandedKey<unknown, infer TContent> ? TContent : never;
28
24
 
29
25
  /**
30
26
  * A Map where the keys carry the types of values which they correspond to.
@@ -215,7 +215,7 @@ export function breakingClass<Target extends abstract new (...args: any[]) => Wi
215
215
  // Avoiding wrapping the constructor also avoids messing up the displayed name in the debugger.
216
216
  const doNotWrap: Set<string | symbol> = new Set(["constructor"]);
217
217
 
218
- let prototype: object | null = target.prototype;
218
+ let prototype: object | null = target.prototype as object;
219
219
  while (prototype !== null) {
220
220
  for (const key of Reflect.ownKeys(prototype)) {
221
221
  if (!doNotWrap.has(key)) {
@@ -228,7 +228,8 @@ export function breakingClass<Target extends abstract new (...args: any[]) => Wi
228
228
  !isBreaker(descriptor.value)
229
229
  ) {
230
230
  // This does not affect the original class, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor
231
- descriptor.value = breakingMethod(descriptor.value);
231
+ const method = descriptor.value as (...args: unknown[]) => unknown;
232
+ descriptor.value = breakingMethod(method);
232
233
  Object.defineProperty(DecoratedBreakable.prototype, key, descriptor);
233
234
  }
234
235
  }
package/src/util/index.ts CHANGED
@@ -89,14 +89,15 @@ export {
89
89
  objectToMap,
90
90
  invertMap,
91
91
  oneFromIterable,
92
- type Named,
93
- compareNamed,
94
92
  disposeSymbol,
95
93
  type IDisposable,
96
94
  capitalize,
97
95
  assertValidRangeIndices,
98
96
  transformObjectMap,
97
+ compareNumbers,
98
+ comparePartialNumbers,
99
99
  compareStrings,
100
+ comparePartialStrings,
100
101
  find,
101
102
  count,
102
103
  getLast,
@@ -153,7 +154,12 @@ export {
153
154
  breakingClass,
154
155
  } from "./breakable.js";
155
156
 
156
- export { type TupleBTree, newTupleBTree, mergeTupleBTrees } from "./bTreeUtils.js";
157
+ export {
158
+ type TupleBTree,
159
+ newTupleBTree,
160
+ mergeTupleBTrees,
161
+ createTupleComparator,
162
+ } from "./bTreeUtils.js";
157
163
 
158
164
  export { cloneWithReplacements } from "./cloneWithReplacements.js";
159
165
 
@@ -24,12 +24,8 @@ import type { isAny } from "./typeCheck.js";
24
24
  * ```
25
25
  */
26
26
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
27
- export type Opaque<T extends Brand<any, unknown>> = T extends BrandedType<
28
- infer ValueType,
29
- infer Name
30
- >
31
- ? BrandedType<ValueType, Name>
32
- : never;
27
+ export type Opaque<T extends Brand<any, unknown>> =
28
+ T extends BrandedType<infer ValueType, infer Name> ? BrandedType<ValueType, Name> : never;
33
29
 
34
30
  /**
35
31
  * See {@link extractFromOpaque}.
@@ -171,18 +171,22 @@ export class RangeMap<K, V> {
171
171
  *
172
172
  * @param start - The start of the range to delete (inclusive).
173
173
  * @param length - The length of the range to delete.
174
+ * @returns The number of keys/value pairs deleted (integer between 0 and `length`, inclusive).
174
175
  */
175
- public delete(start: K, length: number): void {
176
+ public delete(start: K, length: number): number {
177
+ let deleteCount = 0;
176
178
  const lastDeleteKey = this.offsetKey(start, length - 1);
177
179
  for (const { start: key, length: entryLength, value } of this.getIntersectingEntries(
178
180
  start,
179
181
  length,
180
182
  )) {
183
+ deleteCount += entryLength;
181
184
  this.tree.delete(key);
182
185
  const lengthBefore = this.subtractKeys(start, key);
183
186
  if (lengthBefore > 0) {
184
187
  // A portion of this entry comes before the deletion range, so we reinsert that portion.
185
188
  this.tree.set(key, { length: lengthBefore, value });
189
+ deleteCount -= lengthBefore;
186
190
  }
187
191
 
188
192
  const lastEntryKey = this.offsetKey(key, entryLength - 1);
@@ -195,8 +199,10 @@ export class RangeMap<K, V> {
195
199
  length: lengthAfter,
196
200
  value: this.offsetValue(value, difference),
197
201
  });
202
+ deleteCount -= lengthAfter;
198
203
  }
199
204
  }
205
+ return deleteCount;
200
206
  }
201
207
 
202
208
  public clone(): RangeMap<K, V> {
@@ -321,15 +327,15 @@ export interface RangeQueryEntry<K, V> extends RangeQueryResult<K, V> {
321
327
  readonly value: V;
322
328
  }
323
329
 
324
- export function newIntegerRangeMap<V>(): RangeMap<number, V> {
330
+ export function newIntegerRangeMap<V, K extends number = number>(): RangeMap<K, V> {
325
331
  return new RangeMap(offsetInteger, subtractIntegers);
326
332
  }
327
333
 
328
- function offsetInteger(key: number, offset: number): number {
329
- return key + offset;
334
+ function offsetInteger<K extends number>(key: K, offset: number): K {
335
+ return (key + offset) as K;
330
336
  }
331
337
 
332
- function subtractIntegers(a: number, b: number): number {
338
+ function subtractIntegers<K extends number>(a: K, b: K): number {
333
339
  return a - b;
334
340
  }
335
341
 
@@ -14,12 +14,12 @@ import type { JsonCompatible } from "./utils.js";
14
14
  /**
15
15
  * Reads and parses a snapshot blob from storage service.
16
16
  */
17
- export const readAndParseSnapshotBlob = async <T extends JsonCompatible<IFluidHandle>>(
17
+ export const readAndParseSnapshotBlob = async (
18
18
  blobPath: string,
19
19
  service: IChannelStorageService,
20
20
  parse: SummaryElementParser,
21
- ): Promise<T> => {
21
+ ): Promise<JsonCompatible<IFluidHandle>> => {
22
22
  const treeBuffer = await service.readBlob(blobPath);
23
23
  const treeBufferString = bufferToString(treeBuffer, "utf8");
24
- return parse(treeBufferString) as T;
24
+ return parse(treeBufferString) as JsonCompatible<IFluidHandle>;
25
25
  };
@@ -154,22 +154,24 @@ export type isAssignableTo<Source, Destination> = [Source] extends [Destination]
154
154
  /**
155
155
  * Returns a type parameter that is true iff Subset is a strict subset of Superset.
156
156
  */
157
- export type isStrictSubset<Subset, Superset> = isAssignableTo<Subset, Superset> extends false
158
- ? false
159
- : isAssignableTo<Superset, Subset> extends true
157
+ export type isStrictSubset<Subset, Superset> =
158
+ isAssignableTo<Subset, Superset> extends false
160
159
  ? false
161
- : true;
160
+ : isAssignableTo<Superset, Subset> extends true
161
+ ? false
162
+ : true;
162
163
 
163
164
  /**
164
165
  * Returns a type parameter that is true iff A and B are assignable to each other, and neither is any.
165
166
  * This is useful for checking if the output of a type meta-function is the expected type.
166
167
  * @internal
167
168
  */
168
- export type areSafelyAssignable<A, B> = eitherIsAny<A, B> extends true
169
- ? false
170
- : isAssignableTo<A, B> extends true
171
- ? isAssignableTo<B, A>
172
- : false;
169
+ export type areSafelyAssignable<A, B> =
170
+ eitherIsAny<A, B> extends true
171
+ ? false
172
+ : isAssignableTo<A, B> extends true
173
+ ? isAssignableTo<B, A>
174
+ : false;
173
175
 
174
176
  /**
175
177
  * Returns a type parameter that is true iff A is any or B is any.
package/src/util/utils.ts CHANGED
@@ -4,8 +4,7 @@
4
4
  */
5
5
 
6
6
  import { assert } from "@fluidframework/core-utils/internal";
7
- import { Type } from "@sinclair/typebox";
8
- import structuredClone from "@ungap/structured-clone";
7
+ import { Type, type TUnsafe } from "@sinclair/typebox";
9
8
 
10
9
  /**
11
10
  * Subset of Map interface.
@@ -45,7 +44,7 @@ export function asMutable<T>(readonly: T): Mutable<T> {
45
44
  return readonly as Mutable<T>;
46
45
  }
47
46
 
48
- export const clone = structuredClone;
47
+ export { default as clone } from "@ungap/structured-clone";
49
48
 
50
49
  /**
51
50
  * Checks whether or not the given object is a `readonly` array.
@@ -377,7 +376,8 @@ export type JsonCompatibleReadOnlyObject = { readonly [P in string]?: JsonCompat
377
376
  * expressed using composition of schemas for runtime validation, even if we don't think making the types
378
377
  * generic is worth the maintenance cost.
379
378
  */
380
- export const JsonCompatibleReadOnlySchema = Type.Any();
379
+ export const JsonCompatibleReadOnlySchema =
380
+ Type.Any() as unknown as TUnsafe<JsonCompatibleReadOnly>;
381
381
 
382
382
  /**
383
383
  * Returns if a particular json compatible value is an object.
@@ -471,8 +471,11 @@ export function transformObjectMap<
471
471
  >(
472
472
  objectMap: Record<MapKey, MapValue>,
473
473
  transformer: (value: MapValue, key: MapKey) => NewMapValue,
474
- ): Record<MapKey, MapValue> {
475
- const output: Record<MapKey, MapValue> = Object.create(null);
474
+ ): Record<MapKey, NewMapValue> {
475
+ const output: Record<MapKey, NewMapValue> = Object.create(null) as Record<
476
+ MapKey,
477
+ NewMapValue
478
+ >;
476
479
  // This function must only be used with objects specifically intended to encode map like information.
477
480
  for (const key of Object.keys(objectMap)) {
478
481
  const element = objectMap[key as MapKey];
@@ -500,27 +503,6 @@ export function invertMap<Key, Value>(input: Map<Key, Value>): Map<Value, Key> {
500
503
  return result;
501
504
  }
502
505
 
503
- /**
504
- * Type with a name describing what it is.
505
- * Typically used with values (like schema) that can be stored in a map, but in some representations have their name/key as a field.
506
- */
507
- export interface Named<TName> {
508
- readonly name: TName;
509
- }
510
-
511
- /**
512
- * Order {@link Named} objects by their name.
513
- */
514
- export function compareNamed(a: Named<string>, b: Named<string>): -1 | 0 | 1 {
515
- if (a.name < b.name) {
516
- return -1;
517
- }
518
- if (a.name > b.name) {
519
- return 1;
520
- }
521
- return 0;
522
- }
523
-
524
506
  /**
525
507
  * Placeholder for `Symbol.dispose`.
526
508
  * @privateRemarks
@@ -570,12 +552,59 @@ export function capitalize<S extends string>(s: S): Capitalize<S> {
570
552
  }
571
553
 
572
554
  /**
573
- * Compares strings lexically to form a strict partial ordering.
555
+ * Compares two numbers to form a strict total ordering.
556
+ * @remarks NaN is treated as less than all other numbers and equal to itself.
557
+ * Infinity is considered equal to itself.
574
558
  */
559
+ export function compareNumbers<T extends number>(a: T, b: T): number {
560
+ if (Number.isNaN(a)) {
561
+ return Number.isNaN(b) ? 0 : -1;
562
+ } else if (Number.isNaN(b)) {
563
+ return 1;
564
+ } else if (a === b) {
565
+ return 0; // Infinity - Infinity = NaN (not 0), so use explicit comparison
566
+ }
567
+ return a - b;
568
+ }
569
+
570
+ /**
571
+ * Compares two numbers to form a strict total ordering while allowing for `undefined` values.
572
+ * @remarks `undefined` is considered less than any number and equal to itself.
573
+ * NaN is treated as less than all other numbers (but greater than undefined) and equal to itself.
574
+ */
575
+ export function comparePartialNumbers<T extends number>(
576
+ a: T | undefined,
577
+ b: T | undefined,
578
+ ): number {
579
+ if (a === undefined) {
580
+ return b === undefined ? 0 : -1;
581
+ } else if (b === undefined) {
582
+ return 1;
583
+ }
584
+ return compareNumbers(a, b);
585
+ }
586
+
587
+ /** Compares two strings lexically to form a strict total ordering. */
575
588
  export function compareStrings<T extends string>(a: T, b: T): number {
576
589
  return a > b ? 1 : a === b ? 0 : -1;
577
590
  }
578
591
 
592
+ /**
593
+ * Compares two strings lexically to form a strict total ordering while allowing for `undefined` values.
594
+ * @remarks `undefined` is considered less than any string and equal to itself.
595
+ */
596
+ export function comparePartialStrings<T extends string>(
597
+ a: T | undefined,
598
+ b: T | undefined,
599
+ ): number {
600
+ if (a === undefined) {
601
+ return b === undefined ? 0 : -1;
602
+ } else if (b === undefined) {
603
+ return 1;
604
+ }
605
+ return compareStrings(a, b);
606
+ }
607
+
579
608
  /**
580
609
  * Defines a property on an object that is lazily initialized and cached.
581
610
  * @remarks This is useful for properties that are expensive to compute and it is not guaranteed that they will be accessed.
package/biome.jsonc DELETED
@@ -1,4 +0,0 @@
1
- {
2
- "$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
3
- "extends": ["../../../biome.jsonc"]
4
- }