@fluidframework/sequence 2.53.0 → 2.60.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 (131) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/api-report/{sequence.legacy.alpha.api.md → sequence.legacy.beta.api.md} +35 -59
  3. package/dist/index.d.ts +1 -1
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/intervalCollection.d.ts +3 -6
  7. package/dist/intervalCollection.d.ts.map +1 -1
  8. package/dist/intervalCollection.js.map +1 -1
  9. package/dist/intervalIndex/endpointInRangeIndex.d.ts.map +1 -1
  10. package/dist/intervalIndex/endpointInRangeIndex.js +0 -1
  11. package/dist/intervalIndex/endpointInRangeIndex.js.map +1 -1
  12. package/dist/intervalIndex/intervalIndex.d.ts +1 -2
  13. package/dist/intervalIndex/intervalIndex.d.ts.map +1 -1
  14. package/dist/intervalIndex/intervalIndex.js.map +1 -1
  15. package/dist/intervalIndex/overlappingIntervalsIndex.d.ts +2 -4
  16. package/dist/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -1
  17. package/dist/intervalIndex/overlappingIntervalsIndex.js +1 -3
  18. package/dist/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
  19. package/dist/intervalIndex/startpointInRangeIndex.d.ts.map +1 -1
  20. package/dist/intervalIndex/startpointInRangeIndex.js +0 -1
  21. package/dist/intervalIndex/startpointInRangeIndex.js.map +1 -1
  22. package/dist/intervalTree.d.ts +4 -4
  23. package/dist/intervalTree.d.ts.map +1 -1
  24. package/dist/intervalTree.js.map +1 -1
  25. package/dist/intervals/intervalUtils.d.ts +18 -47
  26. package/dist/intervals/intervalUtils.d.ts.map +1 -1
  27. package/dist/intervals/intervalUtils.js +4 -6
  28. package/dist/intervals/intervalUtils.js.map +1 -1
  29. package/dist/intervals/sequenceInterval.d.ts +3 -31
  30. package/dist/intervals/sequenceInterval.d.ts.map +1 -1
  31. package/dist/intervals/sequenceInterval.js.map +1 -1
  32. package/dist/legacy.d.ts +0 -1
  33. package/dist/packageVersion.d.ts +1 -1
  34. package/dist/packageVersion.js +1 -1
  35. package/dist/packageVersion.js.map +1 -1
  36. package/dist/revertibles.d.ts +9 -18
  37. package/dist/revertibles.d.ts.map +1 -1
  38. package/dist/revertibles.js +7 -15
  39. package/dist/revertibles.js.map +1 -1
  40. package/dist/sequence.d.ts +2 -4
  41. package/dist/sequence.d.ts.map +1 -1
  42. package/dist/sequence.js +0 -1
  43. package/dist/sequence.js.map +1 -1
  44. package/dist/sequenceDeltaEvent.d.ts +4 -8
  45. package/dist/sequenceDeltaEvent.d.ts.map +1 -1
  46. package/dist/sequenceDeltaEvent.js +3 -11
  47. package/dist/sequenceDeltaEvent.js.map +1 -1
  48. package/dist/sequenceFactory.d.ts +2 -4
  49. package/dist/sequenceFactory.d.ts.map +1 -1
  50. package/dist/sequenceFactory.js +1 -6
  51. package/dist/sequenceFactory.js.map +1 -1
  52. package/dist/sharedSequence.d.ts.map +1 -1
  53. package/dist/sharedSequence.js +0 -2
  54. package/dist/sharedSequence.js.map +1 -1
  55. package/dist/sharedString.d.ts +2 -4
  56. package/dist/sharedString.d.ts.map +1 -1
  57. package/dist/sharedString.js +1 -4
  58. package/dist/sharedString.js.map +1 -1
  59. package/lib/index.d.ts +1 -1
  60. package/lib/index.d.ts.map +1 -1
  61. package/lib/index.js.map +1 -1
  62. package/lib/intervalCollection.d.ts +3 -6
  63. package/lib/intervalCollection.d.ts.map +1 -1
  64. package/lib/intervalCollection.js.map +1 -1
  65. package/lib/intervalIndex/endpointInRangeIndex.d.ts.map +1 -1
  66. package/lib/intervalIndex/endpointInRangeIndex.js +0 -1
  67. package/lib/intervalIndex/endpointInRangeIndex.js.map +1 -1
  68. package/lib/intervalIndex/intervalIndex.d.ts +1 -2
  69. package/lib/intervalIndex/intervalIndex.d.ts.map +1 -1
  70. package/lib/intervalIndex/intervalIndex.js.map +1 -1
  71. package/lib/intervalIndex/overlappingIntervalsIndex.d.ts +2 -4
  72. package/lib/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -1
  73. package/lib/intervalIndex/overlappingIntervalsIndex.js +1 -3
  74. package/lib/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
  75. package/lib/intervalIndex/startpointInRangeIndex.d.ts.map +1 -1
  76. package/lib/intervalIndex/startpointInRangeIndex.js +0 -1
  77. package/lib/intervalIndex/startpointInRangeIndex.js.map +1 -1
  78. package/lib/intervalTree.d.ts +4 -4
  79. package/lib/intervalTree.d.ts.map +1 -1
  80. package/lib/intervalTree.js.map +1 -1
  81. package/lib/intervals/intervalUtils.d.ts +18 -47
  82. package/lib/intervals/intervalUtils.d.ts.map +1 -1
  83. package/lib/intervals/intervalUtils.js +5 -7
  84. package/lib/intervals/intervalUtils.js.map +1 -1
  85. package/lib/intervals/sequenceInterval.d.ts +3 -31
  86. package/lib/intervals/sequenceInterval.d.ts.map +1 -1
  87. package/lib/intervals/sequenceInterval.js.map +1 -1
  88. package/lib/legacy.d.ts +0 -1
  89. package/lib/packageVersion.d.ts +1 -1
  90. package/lib/packageVersion.js +1 -1
  91. package/lib/packageVersion.js.map +1 -1
  92. package/lib/revertibles.d.ts +9 -18
  93. package/lib/revertibles.d.ts.map +1 -1
  94. package/lib/revertibles.js +8 -17
  95. package/lib/revertibles.js.map +1 -1
  96. package/lib/sequence.d.ts +2 -4
  97. package/lib/sequence.d.ts.map +1 -1
  98. package/lib/sequence.js +1 -4
  99. package/lib/sequence.js.map +1 -1
  100. package/lib/sequenceDeltaEvent.d.ts +4 -8
  101. package/lib/sequenceDeltaEvent.d.ts.map +1 -1
  102. package/lib/sequenceDeltaEvent.js +4 -13
  103. package/lib/sequenceDeltaEvent.js.map +1 -1
  104. package/lib/sequenceFactory.d.ts +2 -4
  105. package/lib/sequenceFactory.d.ts.map +1 -1
  106. package/lib/sequenceFactory.js +1 -6
  107. package/lib/sequenceFactory.js.map +1 -1
  108. package/lib/sharedSequence.d.ts.map +1 -1
  109. package/lib/sharedSequence.js +0 -2
  110. package/lib/sharedSequence.js.map +1 -1
  111. package/lib/sharedString.d.ts +2 -4
  112. package/lib/sharedString.d.ts.map +1 -1
  113. package/lib/sharedString.js +1 -4
  114. package/lib/sharedString.js.map +1 -1
  115. package/package.json +36 -19
  116. package/src/index.ts +0 -1
  117. package/src/intervalCollection.ts +3 -6
  118. package/src/intervalIndex/endpointInRangeIndex.ts +0 -2
  119. package/src/intervalIndex/intervalIndex.ts +1 -2
  120. package/src/intervalIndex/overlappingIntervalsIndex.ts +2 -6
  121. package/src/intervalIndex/startpointInRangeIndex.ts +0 -2
  122. package/src/intervalTree.ts +5 -5
  123. package/src/intervals/intervalUtils.ts +20 -60
  124. package/src/intervals/sequenceInterval.ts +4 -45
  125. package/src/packageVersion.ts +1 -1
  126. package/src/revertibles.ts +10 -20
  127. package/src/sequence.ts +2 -6
  128. package/src/sequenceDeltaEvent.ts +5 -16
  129. package/src/sequenceFactory.ts +2 -9
  130. package/src/sharedSequence.ts +0 -2
  131. package/src/sharedString.ts +2 -8
@@ -1 +1 @@
1
- {"version":3,"file":"sequence.d.ts","sourceRoot":"","sources":["../src/sequence.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAExE,OAAO,EACN,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,MAAM,gDAAgD,CAAC;AACxD,OAAO,EAEN,yBAAyB,EACzB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EACN,MAAM,EACN,YAAY,EAIZ,kBAAkB,EAKlB,iBAAiB,EACjB,QAAQ,EACR,cAAc,EACd,sBAAsB,EAEtB,yBAAyB,EACzB,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EAQjB,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC1B,KAAK,OAAO,EACZ,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACN,qBAAqB,EACrB,iBAAiB,EACjB,MAAM,8CAA8C,CAAC;AAKtD,OAAO,EACN,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACZ,KAAK,aAAa,EAClB,MAAM,6CAA6C,CAAC;AASrD,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAG3E,OAAO,EACN,kBAAkB,EAElB,wBAAwB,EAExB,MAAM,yBAAyB,CAAC;AAKjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,WAAW,4BAA6B,SAAQ,mBAAmB;IACxE,CACC,KAAK,EAAE,0BAA0B,EACjC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,qBAAqB,KAAK,IAAI,GAC9E,IAAI,CAAC;IACR,CACC,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,qBAAqB,KAAK,IAAI,GAC1E,IAAI,CAAC;IACR,CACC,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,wBAAwB,EAAE,MAAM,EAAE,qBAAqB,KAAK,IAAI,GAChF,IAAI,CAAC;CACR;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB,CAAC,CAAC,SAAS,QAAQ,CACzD,SAAQ,aAAa,CAAC,4BAA4B,CAAC,EAClD,yBAAyB;IAC1B;;;;;;;OAOG;IACH,4BAA4B,CAC3B,OAAO,EAAE,CAAC,EACV,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,WAAW,GAAG,SAAS,EACnC,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,kBAAkB,CAAC,EAAE,OAAO,GAC1B,sBAAsB,CAAC;IAE1B;;OAEG;IACH,4BAA4B,CAC3B,IAAI,EAAE,sBAAsB,GAC1B,sBAAsB,GAAG,SAAS,CAAC;IAEtC;;OAEG;IACH,SAAS,IAAI,MAAM,CAAC;IAEpB;;;;OAIG;IACH,WAAW,CAAC,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC;IAEvC;;;;;;;OAOG;IACH,gCAAgC,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAAC;IAElE;;;;;;;;;;;;;OAaG;IACH,YAAY,CAAC,WAAW,EACvB,OAAO,EAAE,cAAc,CAAC,WAAW,CAAC,EACpC,KAAK,CAAC,EAAE,MAAM,EACd,GAAG,CAAC,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,WAAW,EACnB,UAAU,CAAC,EAAE,OAAO,GAClB,IAAI,CAAC;IAER;;;;OAIG;IACH,yBAAyB,CAAC,GAAG,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;IAEpE;;;;OAIG;IACH,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG;QAClC,OAAO,EAAE,CAAC,GAAG,SAAS,CAAC;QACvB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;KAC3B,CAAC;IAEF,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IAE9D;;;;;;;;;;;OAWG;IACH,2BAA2B,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAExD;;;OAGG;IACH,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,2BAA2B,CAAC;IAElE;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,eAAe,CACd,KAAK,EAAE,MAAM,GAAG,qBAAqB,EACrC,GAAG,EAAE,MAAM,GAAG,qBAAqB,GACjC,IAAI,CAAC;IAER;;;OAGG;IACH,aAAa,IAAI,MAAM,CAAC;IAExB;;;;;;;OAOG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAEpE;;;;;;;;;;;;OAYG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;IAErF;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9C;;;;;;;;;;;;;OAaG;IACH,2BAA2B,CAC1B,oBAAoB,EAAE,MAAM,EAC5B,kBAAkB,EAAE,MAAM,EAC1B,cAAc,EAAE,MAAM,GACpB,MAAM,GAAG,SAAS,CAAC;IAGtB;;;;;;OAMG;IACH,eAAe,IAAI,IAAI,CAAC;IAExB;;;;OAIG;IAEH,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAElD,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG;QACvC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;QAC7B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;KAChC,CAAC;IAEF;;;;OAIG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAEtD;;;;OAIG;IACH,kBAAkB,CAAC,WAAW,EAAE,iBAAiB,GAAG,MAAM,CAAC;CAG3D;AAED;;GAEG;AACH,8BAAsB,qBAAqB,CAAC,CAAC,SAAS,QAAQ,CAC7D,SAAQ,YAAY,CAAC,4BAA4B,CACjD,YAAW,sBAAsB,CAAC,CAAC,CAAC;IAgH5B,EAAE,EAAE,MAAM;aAED,eAAe,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,QAAQ;IAhHlE;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IAEhE,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAyDjC;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAuB;IAEvD,OAAO,CAAC,qBAAqB,CAAqB;IAElD;;;;;;;;;;;OAWG;IACH,OAAO,KAAK,aAAa,GAExB;IAED,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,sBAAsB,CAAmC;IACjE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAwB;gBAE3D,gBAAgB,EAAE,sBAAsB,EACjC,EAAE,EAAE,MAAM,EACjB,UAAU,EAAE,kBAAkB,EACd,eAAe,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,QAAQ;IA0E3D,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAI7C,eAAe,CACrB,KAAK,EAAE,MAAM,GAAG,qBAAqB,EACrC,GAAG,EAAE,MAAM,GAAG,qBAAqB,GACjC,IAAI;IAKA,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAIjD,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG;QACzC,OAAO,EAAE,CAAC,GAAG,SAAS,CAAC;QACvB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;KAC3B;IAMM,SAAS,IAAI,MAAM;IAInB,WAAW,CAAC,OAAO,EAAE,QAAQ,GAAG,MAAM;IAItC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI;IAInE,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;IAIpF,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI7D,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG;QAC9C,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;QAC7B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;KAChC;IAIM,4BAA4B,CAClC,OAAO,EAAE,CAAC,EACV,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,WAAW,GAAG,SAAS,EACnC,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,kBAAkB,CAAC,EAAE,OAAO,GAC1B,sBAAsB;IAWlB,gCAAgC,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM;IAIjE,4BAA4B,CAClC,IAAI,EAAE,sBAAsB,GAC1B,sBAAsB,GAAG,SAAS;IAI9B,2BAA2B,CACjC,oBAAoB,EAAE,MAAM,EAC5B,kBAAkB,EAAE,MAAM,EAC1B,cAAc,EAAE,MAAM,GACpB,MAAM,GAAG,SAAS;IAQrB,OAAO,CAAC,qBAAqB;IActB,kBAAkB,CAAC,WAAW,EAAE,iBAAiB,GAAG,MAAM;IAI1D,YAAY,CAAC,WAAW,EAC9B,OAAO,EAAE,cAAc,CAAC,WAAW,CAAC,EACpC,KAAK,CAAC,EAAE,MAAM,EACd,GAAG,CAAC,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,WAAW,EACnB,UAAU,GAAE,OAAe,GACzB,IAAI;IAIA,aAAa,IAAI,MAAM;IAIvB,yBAAyB,CAAC,GAAG,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI;IAInE,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI;IAKrD,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,2BAA2B;IAIjE,2BAA2B,IAAI,gBAAgB,CAAC,MAAM,CAAC;IAI9D;;OAEG;IACH,SAAS,CAAC,aAAa,CACtB,UAAU,EAAE,gBAAgB,EAC5B,gBAAgB,CAAC,EAAE,iBAAiB,GAClC,qBAAqB;IAcxB;;;OAGG;IACH,SAAS,CAAC,iBAAiB,CAAC,UAAU,EAAE,gBAAgB;IAQxD;;;;;;;;OAQG;IACH,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,IAAI;IAc3E;;OAEG;IACH,SAAS,CAAC,SAAS;IAKnB;;OAEG;IACH,SAAS,CAAC,YAAY;IAEtB;;OAEG;IACH,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAE,OAAe;IAetF,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,GAAG,IAAI;IAI5E;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO,GAAG,IAAI;IAYhE;;OAEG;cACa,QAAQ,CAAC,OAAO,EAAE,sBAAsB;IAoDxD;;OAEG;IACH,SAAS,CAAC,WAAW,CACpB,OAAO,EAAE,yBAAyB,EAClC,KAAK,EAAE,OAAO,EACd,eAAe,EAAE,OAAO;IA+BzB;;OAEG;IACH,SAAS,CAAC,SAAS;IAQnB;;OAEG;IACH,SAAS,CAAC,mBAAmB;IAK7B;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI;IAM5C,OAAO,CAAC,kBAAkB;IAiB1B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAwC3B,OAAO,CAAC,+BAA+B;IAYvC,OAAO,CAAC,6BAA6B;IAoBrC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;CASzB;AA4BD;;GAEG;AACH,wBAAgB,yBAAyB,SAExC"}
1
+ {"version":3,"file":"sequence.d.ts","sourceRoot":"","sources":["../src/sequence.ts"],"names":[],"mappings":"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"}
package/dist/sequence.js CHANGED
@@ -424,7 +424,6 @@ class SharedSegmentSequence extends internal_5.SharedObject {
424
424
  stashMessage = {
425
425
  ...message,
426
426
  referenceSequenceNumber: stashMessage.sequenceNumber - 1,
427
- // eslint-disable-next-line import/no-deprecated
428
427
  contents: ops.length !== 1 ? (0, internal_3.createGroupOp)(...ops) : ops[0],
429
428
  };
430
429
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sequence.js","sourceRoot":"","sources":["../src/sequence.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { bufferToString } from \"@fluid-internal/client-utils\";\nimport { IEventThisPlaceHolder } from \"@fluidframework/core-interfaces\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport {\n\tIChannelAttributes,\n\tIFluidDataStoreRuntime,\n\tIChannelStorageService,\n} from \"@fluidframework/datastore-definitions/internal\";\nimport {\n\tMessageType,\n\tISequencedDocumentMessage,\n} from \"@fluidframework/driver-definitions/internal\";\nimport {\n\tClient,\n\tIJSONSegment,\n\tIMergeTreeAnnotateMsg,\n\tIMergeTreeDeltaOp,\n\t// eslint-disable-next-line import/no-deprecated\n\tIMergeTreeGroupMsg,\n\t// eslint-disable-next-line import/no-deprecated\n\tIMergeTreeObliterateMsg,\n\tIMergeTreeOp,\n\tIMergeTreeRemoveMsg,\n\tIRelativePosition,\n\tISegment,\n\tISegmentAction,\n\tLocalReferencePosition,\n\tMergeTreeDeltaType,\n\tMergeTreeRevertibleDriver,\n\tPropertySet,\n\tReferencePosition,\n\tReferenceType,\n\tSlidingPreference,\n\tcreateAnnotateRangeOp,\n\t// eslint-disable-next-line import/no-deprecated\n\tcreateGroupOp,\n\tcreateInsertOp,\n\tcreateObliterateRangeOp,\n\tcreateRemoveRangeOp,\n\tmatchProperties,\n\ttype AdjustParams,\n\ttype InteriorSequencePlace,\n\ttype MapLike,\n} from \"@fluidframework/merge-tree/internal\";\nimport {\n\tISummaryTreeWithStats,\n\tITelemetryContext,\n} from \"@fluidframework/runtime-definitions/internal\";\nimport {\n\tObjectStoragePartition,\n\tSummaryTreeBuilder,\n} from \"@fluidframework/runtime-utils/internal\";\nimport {\n\tIFluidSerializer,\n\tISharedObjectEvents,\n\tSharedObject,\n\ttype ISharedObject,\n} from \"@fluidframework/shared-object-base/internal\";\nimport {\n\tLoggingError,\n\tcreateChildLogger,\n\tcreateConfigBasedOptionsProxy,\n\tloggerToMonitoringContext,\n} from \"@fluidframework/telemetry-utils/internal\";\nimport Deque from \"double-ended-queue\";\n\nimport { type ISequenceIntervalCollection } from \"./intervalCollection.js\";\nimport { IMapOperation, IntervalCollectionMap } from \"./intervalCollectionMap.js\";\nimport { type SequenceOptions } from \"./intervalCollectionMapInterfaces.js\";\nimport {\n\tSequenceDeltaEvent,\n\tSequenceDeltaEventClass,\n\tSequenceMaintenanceEvent,\n\tSequenceMaintenanceEventClass,\n} from \"./sequenceDeltaEvent.js\";\n\nconst snapshotFileName = \"header\";\nconst contentPath = \"content\";\n\n/**\n * Events emitted in response to changes to the sequence data.\n *\n * @remarks\n *\n * The following is the list of events emitted.\n *\n * ### \"sequenceDelta\"\n *\n * The sequenceDelta event is emitted when segments are inserted, annotated, or removed.\n *\n * #### Listener signature\n *\n * ```typescript\n * (event: SequenceDeltaEvent, target: IEventThisPlaceHolder) => void\n * ```\n * - `event` - Various information on the segments that were modified.\n *\n * - `target` - The sequence itself.\n *\n * ### \"maintenance\"\n *\n * The maintenance event is emitted when segments are modified during merge-tree maintenance.\n *\n * #### Listener signature\n *\n * ```typescript\n * (event: SequenceMaintenanceEvent, target: IEventThisPlaceHolder) => void\n * ```\n * - `event` - Various information on the segments that were modified.\n *\n * - `target` - The sequence itself.\n * @legacy\n * @alpha\n */\nexport interface ISharedSegmentSequenceEvents extends ISharedObjectEvents {\n\t(\n\t\tevent: \"createIntervalCollection\",\n\t\tlistener: (label: string, local: boolean, target: IEventThisPlaceHolder) => void,\n\t): void;\n\t(\n\t\tevent: \"sequenceDelta\",\n\t\tlistener: (event: SequenceDeltaEvent, target: IEventThisPlaceHolder) => void,\n\t): void;\n\t(\n\t\tevent: \"maintenance\",\n\t\tlistener: (event: SequenceMaintenanceEvent, target: IEventThisPlaceHolder) => void,\n\t): void;\n}\n\n/**\n * @legacy\n * @alpha\n */\nexport interface ISharedSegmentSequence<T extends ISegment>\n\textends ISharedObject<ISharedSegmentSequenceEvents>,\n\t\tMergeTreeRevertibleDriver {\n\t/**\n\t * Creates a `LocalReferencePosition` on this SharedString. If the refType does not include\n\t * ReferenceType.Transient, the returned reference will be added to the localRefs on the provided segment.\n\t * @param segment - Segment to add the local reference on\n\t * @param offset - Offset on the segment at which to place the local reference\n\t * @param refType - ReferenceType for the created local reference\n\t * @param properties - PropertySet to place on the created local reference\n\t */\n\tcreateLocalReferencePosition(\n\t\tsegment: T,\n\t\toffset: number,\n\t\trefType: ReferenceType,\n\t\tproperties: PropertySet | undefined,\n\t\tslidingPreference?: SlidingPreference,\n\t\tcanSlideToEndpoint?: boolean,\n\t): LocalReferencePosition;\n\n\t/**\n\t * Removes a `LocalReferencePosition` from this SharedString.\n\t */\n\tremoveLocalReferencePosition(\n\t\tlref: LocalReferencePosition,\n\t): LocalReferencePosition | undefined;\n\n\t/**\n\t * Returns the length of the current sequence for the client\n\t */\n\tgetLength(): number;\n\n\t/**\n\t * Returns the current position of a segment, and -1 if the segment\n\t * does not exist in this sequence\n\t * @param segment - The segment to get the position of\n\t */\n\tgetPosition(segment: ISegment): number;\n\n\t/**\n\t * Resolves a `ReferencePosition` into a character position using this client's perspective.\n\t *\n\t * Reference positions that point to a character that has been removed will\n\t * always return the position of the nearest non-removed character, regardless\n\t * of `ReferenceType`. To handle this case specifically, one may wish\n\t * to look at the segment returned by `ReferencePosition.getSegment`.\n\t */\n\tlocalReferencePositionToPosition(lref: ReferencePosition): number;\n\n\t/**\n\t * Walk the underlying segments of the sequence.\n\t * The walked segments may extend beyond the range if the segments cross the\n\t * ranges start or end boundaries.\n\t *\n\t * Set split range to true to ensure only segments within the range are walked.\n\t *\n\t * @param handler - The function to handle each segment. Traversal ends if\n\t * this function returns true.\n\t * @param start - Optional. The start of range walk.\n\t * @param end - Optional. The end of range walk\n\t * @param accum - Optional. An object that will be passed to the handler for accumulation\n\t * @param splitRange - Optional. Splits boundary segments on the range boundaries. Defaults to false.\n\t */\n\twalkSegments<TClientData>(\n\t\thandler: ISegmentAction<TClientData>,\n\t\tstart?: number,\n\t\tend?: number,\n\t\taccum?: TClientData,\n\t\tsplitRange?: boolean,\n\t): void;\n\n\t/**\n\t * Inserts a segment directly before a `ReferencePosition`.\n\t * @param refPos - The reference position to insert the segment at\n\t * @param segment - The segment to insert\n\t */\n\tinsertAtReferencePosition(pos: ReferencePosition, segment: T): void;\n\n\t/**\n\t * Finds the segment information (i.e. segment + offset) corresponding to a character position in the SharedString.\n\t * If the position is past the end of the string, `segment` and `offset` on the returned object may be undefined.\n\t * @param pos - Character position (index) into the current local view of the SharedString.\n\t */\n\tgetContainingSegment(pos: number): {\n\t\tsegment: T | undefined;\n\t\toffset: number | undefined;\n\t};\n\n\tgetPropertiesAtPosition(pos: number): PropertySet | undefined;\n\n\t/**\n\t * @returns An iterable object that enumerates the IntervalCollection labels.\n\t *\n\t * @example\n\t *\n\t * ```typescript\n\t * const iter = this.getIntervalCollectionKeys();\n\t * for (key of iter)\n\t * const collection = this.getIntervalCollection(key);\n\t * ...\n\t * ```\n\t */\n\tgetIntervalCollectionLabels(): IterableIterator<string>;\n\n\t/**\n\t * Retrieves the interval collection keyed on `label`. If no such interval collection exists,\n\t * creates one.\n\t */\n\tgetIntervalCollection(label: string): ISequenceIntervalCollection;\n\n\t/**\n\t * Obliterate is similar to remove, but differs in that segments concurrently\n\t * inserted into an obliterated range will also be removed.\n\t * Inserts are considered concurrent to an obliterate iff the insert op's seq is after the obliterate op's refSeq\n\t * and the insert's refSeq is before the obliterates seq.\n\t * Inserts made by the client which most recently obliterated a range containing the insert position\n\t * are not considered concurrent to any obliteration (the last client to obliterate gets the right to insert).\n\t *\n\t * The endpoints can either be inclusive or exclusive.\n\t * Exclusive endpoints allow the obliterated range to \"grow\" to include adjacent concurrently inserted segments on that side.\n\t *\n\t * @param start - The start of the range to obliterate.\n\t * Inclusive if side is Before or a number is provided.\n\t * @param end - The end of the range to obliterate. Inclusive if side is After.\n\t * If a number is provided it is treated as exclusive,\n\t * but the endpoint does not expand in order to preserve existing behavior.\n\t *\n\t * @example Given the initial state `\"|ABC>\"`,\n\t * `obliterateRange({ pos: 0, side: Side.After }, { pos: 4, side: Side.Before })` obliterates `\"ABC\"`, leaving only `\"|>\"`.\n\t * `insertFromSpec(1, { text: \"AAA\"})` would insert `\"AAA\"` before |, resulting in `\"|AAA>\"`.\n\t * If another client does the same thing but inserts `\"BBB\"` and gets sequenced later, all clients will eventually see `|BBB>`.\n\t */\n\tobliterateRange(\n\t\tstart: number | InteriorSequencePlace,\n\t\tend: number | InteriorSequencePlace,\n\t): void;\n\n\t/**\n\t * @returns The most recent sequence number which has been acked by the server and processed by this\n\t * SharedSegmentSequence.\n\t */\n\tgetCurrentSeq(): number;\n\n\t/**\n\t * Annotates the range with the provided properties\n\t *\n\t * @param start - The inclusive start position of the range to annotate\n\t * @param end - The exclusive end position of the range to annotate\n\t * @param props - The properties to annotate the range with\n\t *\n\t */\n\tannotateRange(start: number, end: number, props: PropertySet): void;\n\n\t/**\n\t * Annotates a specified range within the sequence by applying the provided adjustments.\n\t *\n\t * @param start - The inclusive start position of the range to annotate. This is a zero-based index.\n\t * @param end - The exclusive end position of the range to annotate. This is a zero-based index.\n\t * @param adjust - A map-like object specifying the properties to adjust. Each key-value pair represents a property and its corresponding adjustment to be applied over the range.\n\t * An adjustment is defined by an object containing a `delta` to be added to the current property value, and optional `min` and `max` constraints to limit the adjusted value.\n\t *\n\t * @remarks\n\t * The range is defined by the start and end positions, where the start position is inclusive and the end position is exclusive.\n\t * The properties provided in the adjust parameter will be applied to the specified range. Each adjustment modifies the current value of the property by adding the specified `value`.\n\t * If the current value is not a number, the `delta` will be summed with 0 to compute the new value. The optional `min` and `max` constraints are applied after the adjustment to ensure the final value falls within the specified bounds.\n\t */\n\tannotateAdjustRange(start: number, end: number, adjust: MapLike<AdjustParams>): void;\n\n\t/**\n\t * @param start - The inclusive start of the range to remove\n\t * @param end - The exclusive end of the range to remove\n\t */\n\tremoveRange(start: number, end: number): void;\n\n\t/**\n\t * Resolves a remote client's position against the local sequence\n\t * and returns the remote client's position relative to the local\n\t * sequence. The client ref seq must be above the minimum sequence number\n\t * or the return value will be undefined.\n\t * Generally this method is used in conjunction with signals which provide\n\t * point in time values for the below parameters, and is useful for things\n\t * like displaying user position. It should not be used with persisted values\n\t * as persisted values will quickly become invalid as the remoteClientRefSeq\n\t * moves below the minimum sequence number\n\t * @param remoteClientPosition - The remote client's position to resolve\n\t * @param remoteClientRefSeq - The reference sequence number of the remote client\n\t * @param remoteClientId - The client id of the remote client\n\t */\n\tresolveRemoteClientPosition(\n\t\tremoteClientPosition: number,\n\t\tremoteClientRefSeq: number,\n\t\tremoteClientId: string,\n\t): number | undefined;\n\n\t// #region APIs we might want to remove\n\t/**\n\t * Initializes the object as a local, non-shared object. This object can become shared after\n\t * it is attached to the document.\n\t * @privateRemarks\n\t * TODO: determine if this API (from SharedObject) is needed by users of the encapsulated API, declarative API or both,\n\t * and handle exposing it in a consistent way for all SharedObjects if needed.\n\t */\n\tinitializeLocal(): void;\n\n\t/**\n\t * @deprecated The ability to create group ops will be removed in an upcoming\n\t * release, as group ops are redundant with the native batching capabilities\n\t * of the runtime\n\t */\n\t// eslint-disable-next-line import/no-deprecated\n\tgroupOperation(groupOp: IMergeTreeGroupMsg): void;\n\n\tgetRangeExtentsOfPosition(pos: number): {\n\t\tposStart: number | undefined;\n\t\tposAfterEnd: number | undefined;\n\t};\n\n\t/**\n\t * Inserts a segment\n\t * @param start - The position to insert the segment at\n\t * @param spec - The segment to inserts spec\n\t */\n\tinsertFromSpec(pos: number, spec: IJSONSegment): void;\n\n\t/**\n\t * Given a position specified relative to a marker id, lookup the marker\n\t * and convert the position to a character position.\n\t * @param relativePos - Id of marker (may be indirect) and whether position is before or after marker.\n\t */\n\tposFromRelativePos(relativePos: IRelativePosition): number;\n\n\t// #endregion\n}\n\n/**\n * @internal\n */\nexport abstract class SharedSegmentSequence<T extends ISegment>\n\textends SharedObject<ISharedSegmentSequenceEvents>\n\timplements ISharedSegmentSequence<T>\n{\n\t/**\n\t * This is a safeguard to avoid problematic reentrancy of local ops. This type of scenario occurs if the user of SharedString subscribes\n\t * to the `sequenceDelta` event and uses the callback for a local op to submit further local ops.\n\t * Historically (before 2.0.0-internal.6.1.0), doing so would result in eventual consistency issues or a corrupted document.\n\t * These issues were fixed in #16815 which makes such reentrancy no different from applying the ops in order but not from within the change events,\n\t * but there is still little test coverage for reentrant scenarios.\n\t * Additionally, applications submitting ops from inside change events need to take extreme care that their data models also support reentrancy.\n\t * Since this is likely not the case, by default SharedString throws when encountering reentrant ops.\n\t *\n\t * An application using SharedString which explicitly wants to opt in to allowing reentrancy anyway can set `sharedStringPreventReentrancy`\n\t * on the data store options to `false`.\n\t */\n\tprotected guardReentrancy: <TRet>(callback: () => TRet) => TRet;\n\n\tprivate static createOpsFromDelta(event: SequenceDeltaEvent): IMergeTreeDeltaOp[] {\n\t\tconst ops: IMergeTreeDeltaOp[] = [];\n\t\tfor (const r of event.ranges) {\n\t\t\tswitch (event.deltaOperation) {\n\t\t\t\tcase MergeTreeDeltaType.ANNOTATE: {\n\t\t\t\t\tconst lastAnnotate = ops[ops.length - 1] as IMergeTreeAnnotateMsg;\n\t\t\t\t\tconst props: PropertySet = {};\n\t\t\t\t\tfor (const key of Object.keys(r.propertyDeltas)) {\n\t\t\t\t\t\tprops[key] = r.segment.properties?.[key] ?? null;\n\t\t\t\t\t}\n\t\t\t\t\tif (\n\t\t\t\t\t\tlastAnnotate &&\n\t\t\t\t\t\tlastAnnotate.pos2 === r.position &&\n\t\t\t\t\t\tmatchProperties(lastAnnotate.props, props)\n\t\t\t\t\t) {\n\t\t\t\t\t\tlastAnnotate.pos2 += r.segment.cachedLength;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tops.push(\n\t\t\t\t\t\t\tcreateAnnotateRangeOp(r.position, r.position + r.segment.cachedLength, props),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase MergeTreeDeltaType.INSERT:\n\t\t\t\t\tops.push(createInsertOp(r.position, r.segment.clone().toJSONObject()));\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MergeTreeDeltaType.REMOVE: {\n\t\t\t\t\tconst lastRem = ops[ops.length - 1] as IMergeTreeRemoveMsg;\n\t\t\t\t\tif (lastRem?.pos1 === r.position) {\n\t\t\t\t\t\tassert(lastRem.pos2 !== undefined, 0x3ff /* pos2 should not be undefined here */);\n\t\t\t\t\t\tlastRem.pos2 += r.segment.cachedLength;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tops.push(createRemoveRangeOp(r.position, r.position + r.segment.cachedLength));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase MergeTreeDeltaType.OBLITERATE: {\n\t\t\t\t\t// eslint-disable-next-line import/no-deprecated\n\t\t\t\t\tconst lastRem = ops[ops.length - 1] as IMergeTreeObliterateMsg;\n\t\t\t\t\tif (lastRem?.pos1 === r.position) {\n\t\t\t\t\t\tassert(lastRem.pos2 !== undefined, 0x874 /* pos2 should not be undefined here */);\n\t\t\t\t\t\tlastRem.pos2 += r.segment.cachedLength;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tops.push(createObliterateRangeOp(r.position, r.position + r.segment.cachedLength));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tdefault:\n\t\t\t}\n\t\t}\n\t\treturn ops;\n\t}\n\n\t/**\n\t * Note: this field only provides a lower-bound on the reference sequence numbers for in-flight ops.\n\t * The exact reason isn't understood, but some e2e tests suggest that the runtime may sometimes process\n\t * incoming leave/join ops before putting an op that this DDS submits over the wire.\n\t *\n\t * E.g. SharedString submits an op while deltaManager has lastSequenceNumber = 10, but before the runtime\n\t * puts this op over the wire, it processes a client join/leave op with sequence number 11, so the referenceSequenceNumber\n\t * on the SharedString op is 11.\n\t *\n\t * The reference sequence numbers placed in this queue are also not accurate for stashed ops due to how the applyStashedOp\n\t * flow works at the runtime level. This is a legitimate bug, and AB#6602 tracks one way to fix it (stop reaching all the way\n\t * to deltaManager's lastSequenceNumber to obtain refSeq, instead leveraging some analogous notion on the container or datastore\n\t * runtime).\n\t */\n\tprivate readonly inFlightRefSeqs = new Deque<number>();\n\n\tprivate ongoingResubmitRefSeq: number | undefined;\n\n\t/**\n\t * Gets the reference sequence number (i.e. sequence number of the runtime's last processed op) for an op submitted\n\t * in the current context.\n\t *\n\t * This value can be optionally overridden using `useResubmitRefSeq`.\n\t * IntervalCollection's resubmit logic currently relies on preserving merge information from when the op was originally submitted,\n\t * even if the op is resubmitted more than once. Thus during resubmit, `inFlightRefSeqs` gets populated with the\n\t * original refSeq rather than the refSeq at the time of reconnection.\n\t *\n\t * @remarks - In some not fully understood cases, the runtime may process incoming ops before putting an op that this\n\t * DDS submits over the wire. See `inFlightRefSeqs` for more details.\n\t */\n\tprivate get currentRefSeq() {\n\t\treturn this.ongoingResubmitRefSeq ?? this.deltaManager.lastSequenceNumber;\n\t}\n\n\tprotected client: Client;\n\tprivate messagesSinceMSNChange: ISequencedDocumentMessage[] = [];\n\tprivate readonly intervalCollections: IntervalCollectionMap;\n\tconstructor(\n\t\tdataStoreRuntime: IFluidDataStoreRuntime,\n\t\tpublic id: string,\n\t\tattributes: IChannelAttributes,\n\t\tpublic readonly segmentFromSpec: (spec: IJSONSegment) => ISegment,\n\t) {\n\t\tsuper(id, dataStoreRuntime, attributes, \"fluid_sequence_\");\n\n\t\tconst getMinInFlightRefSeq = () => this.inFlightRefSeqs.get(0);\n\t\tthis.guardReentrancy =\n\t\t\t(dataStoreRuntime.options.sharedStringPreventReentrancy ?? true)\n\t\t\t\t? ensureNoReentrancy\n\t\t\t\t: createReentrancyDetector((depth) => {\n\t\t\t\t\t\tif (totalReentrancyLogs > 0) {\n\t\t\t\t\t\t\ttotalReentrancyLogs--;\n\t\t\t\t\t\t\tthis.logger.sendTelemetryEvent(\n\t\t\t\t\t\t\t\t{ eventName: \"LocalOpReentry\", depth },\n\t\t\t\t\t\t\t\tnew LoggingError(reentrancyErrorMessage),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\tconst options = createConfigBasedOptionsProxy<SequenceOptions>(\n\t\t\tloggerToMonitoringContext(this.logger).config,\n\t\t\t\"Fluid.Sequence\",\n\t\t\t{\n\t\t\t\tmergeTreeEnableObliterate: (c, n) => c.getBoolean(n),\n\t\t\t\tmergeTreeEnableSidedObliterate: (c, n) => c.getBoolean(n),\n\t\t\t\tintervalStickinessEnabled: (c, n) => c.getBoolean(n),\n\t\t\t\tmergeTreeReferencesCanSlideToEndpoint: (c, n) => c.getBoolean(n),\n\t\t\t\tmergeTreeEnableAnnotateAdjust: (c, n) => c.getBoolean(n),\n\t\t\t},\n\t\t\tdataStoreRuntime.options,\n\t\t);\n\n\t\tthis.client = new Client(\n\t\t\tsegmentFromSpec,\n\t\t\tcreateChildLogger({\n\t\t\t\tlogger: this.logger,\n\t\t\t\tnamespace: \"SharedSegmentSequence.MergeTreeClient\",\n\t\t\t}),\n\t\t\toptions,\n\t\t\tgetMinInFlightRefSeq,\n\t\t);\n\n\t\tthis.client.prependListener(\"delta\", (opArgs, deltaArgs) => {\n\t\t\tconst event = new SequenceDeltaEventClass(opArgs, deltaArgs, this.client);\n\t\t\tif (event.isLocal && event.opArgs.rollback !== true) {\n\t\t\t\tthis.submitSequenceMessage(opArgs.op);\n\t\t\t}\n\t\t\tif (deltaArgs.deltaSegments.length > 0) {\n\t\t\t\tthis.emit(\"sequenceDelta\", event, this);\n\t\t\t}\n\t\t});\n\n\t\tthis.client.on(\"maintenance\", (args, opArgs) => {\n\t\t\tthis.emit(\n\t\t\t\t\"maintenance\",\n\t\t\t\tnew SequenceMaintenanceEventClass(opArgs, args, this.client),\n\t\t\t\tthis,\n\t\t\t);\n\t\t});\n\n\t\tthis.intervalCollections = new IntervalCollectionMap(\n\t\t\tthis.serializer,\n\t\t\tthis.handle,\n\t\t\t(op, localOpMetadata) => {\n\t\t\t\tif (!this.isAttached()) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.inFlightRefSeqs.push(this.currentRefSeq);\n\t\t\t\tthis.submitLocalMessage(op, localOpMetadata);\n\t\t\t},\n\t\t\toptions,\n\t\t);\n\t}\n\n\tpublic removeRange(start: number, end: number): void {\n\t\tthis.guardReentrancy(() => this.client.removeRangeLocal(start, end));\n\t}\n\n\tpublic obliterateRange(\n\t\tstart: number | InteriorSequencePlace,\n\t\tend: number | InteriorSequencePlace,\n\t): void {\n\t\tthis.guardReentrancy(() => this.client.obliterateRangeLocal(start, end));\n\t}\n\n\t// eslint-disable-next-line import/no-deprecated\n\tpublic groupOperation(groupOp: IMergeTreeGroupMsg): void {\n\t\tthis.guardReentrancy(() => this.client.localTransaction(groupOp));\n\t}\n\n\tpublic getContainingSegment(pos: number): {\n\t\tsegment: T | undefined;\n\t\toffset: number | undefined;\n\t} {\n\t\treturn (\n\t\t\tthis.client.getContainingSegment<T>(pos) ?? { segment: undefined, offset: undefined }\n\t\t);\n\t}\n\n\tpublic getLength(): number {\n\t\treturn this.client.getLength();\n\t}\n\n\tpublic getPosition(segment: ISegment): number {\n\t\treturn this.client.getPosition(segment);\n\t}\n\n\tpublic annotateRange(start: number, end: number, props: PropertySet): void {\n\t\tthis.guardReentrancy(() => this.client.annotateRangeLocal(start, end, props));\n\t}\n\n\tpublic annotateAdjustRange(start: number, end: number, adjust: MapLike<AdjustParams>): void {\n\t\tthis.guardReentrancy(() => this.client.annotateAdjustRangeLocal(start, end, adjust));\n\t}\n\n\tpublic getPropertiesAtPosition(pos: number): PropertySet | undefined {\n\t\treturn this.client.getPropertiesAtPosition(pos);\n\t}\n\n\tpublic getRangeExtentsOfPosition(pos: number): {\n\t\tposStart: number | undefined;\n\t\tposAfterEnd: number | undefined;\n\t} {\n\t\treturn this.client.getRangeExtentsOfPosition(pos);\n\t}\n\n\tpublic createLocalReferencePosition(\n\t\tsegment: T,\n\t\toffset: number,\n\t\trefType: ReferenceType,\n\t\tproperties: PropertySet | undefined,\n\t\tslidingPreference?: SlidingPreference,\n\t\tcanSlideToEndpoint?: boolean,\n\t): LocalReferencePosition {\n\t\treturn this.client.createLocalReferencePosition(\n\t\t\tsegment,\n\t\t\toffset,\n\t\t\trefType,\n\t\t\tproperties,\n\t\t\tslidingPreference,\n\t\t\tcanSlideToEndpoint,\n\t\t);\n\t}\n\n\tpublic localReferencePositionToPosition(lref: ReferencePosition): number {\n\t\treturn this.client.localReferencePositionToPosition(lref);\n\t}\n\n\tpublic removeLocalReferencePosition(\n\t\tlref: LocalReferencePosition,\n\t): LocalReferencePosition | undefined {\n\t\treturn this.client.removeLocalReferencePosition(lref);\n\t}\n\n\tpublic resolveRemoteClientPosition(\n\t\tremoteClientPosition: number,\n\t\tremoteClientRefSeq: number,\n\t\tremoteClientId: string,\n\t): number | undefined {\n\t\treturn this.client.resolveRemoteClientPosition(\n\t\t\tremoteClientPosition,\n\t\t\tremoteClientRefSeq,\n\t\t\tremoteClientId,\n\t\t);\n\t}\n\n\tprivate submitSequenceMessage(message: IMergeTreeOp) {\n\t\tif (!this.isAttached()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.inFlightRefSeqs.push(this.currentRefSeq);\n\n\t\tconst metadata = this.client.peekPendingSegmentGroups(\n\t\t\tmessage.type === MergeTreeDeltaType.GROUP ? message.ops.length : 1,\n\t\t);\n\n\t\tthis.submitLocalMessage(message, metadata);\n\t}\n\n\tpublic posFromRelativePos(relativePos: IRelativePosition): number {\n\t\treturn this.client.posFromRelativePos(relativePos);\n\t}\n\n\tpublic walkSegments<TClientData>(\n\t\thandler: ISegmentAction<TClientData>,\n\t\tstart?: number,\n\t\tend?: number,\n\t\taccum?: TClientData,\n\t\tsplitRange: boolean = false,\n\t): void {\n\t\tthis.client.walkSegments(handler, start, end, accum as TClientData, splitRange);\n\t}\n\n\tpublic getCurrentSeq(): number {\n\t\treturn this.client.getCurrentSeq();\n\t}\n\n\tpublic insertAtReferencePosition(pos: ReferencePosition, segment: T): void {\n\t\tthis.guardReentrancy(() => this.client.insertAtReferencePositionLocal(pos, segment));\n\t}\n\n\tpublic insertFromSpec(pos: number, spec: IJSONSegment): void {\n\t\tconst segment = this.segmentFromSpec(spec);\n\t\tthis.guardReentrancy(() => this.client.insertSegmentLocal(pos, segment));\n\t}\n\n\tpublic getIntervalCollection(label: string): ISequenceIntervalCollection {\n\t\treturn this.intervalCollections.get(label);\n\t}\n\n\tpublic getIntervalCollectionLabels(): IterableIterator<string> {\n\t\treturn this.intervalCollections.keys();\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObject.summarizeCore}\n\t */\n\tprotected summarizeCore(\n\t\tserializer: IFluidSerializer,\n\t\ttelemetryContext?: ITelemetryContext,\n\t): ISummaryTreeWithStats {\n\t\tconst builder = new SummaryTreeBuilder();\n\n\t\t// conditionally write the interval collection blob\n\t\t// only if it has entries\n\t\tif (this.intervalCollections.size > 0) {\n\t\t\tbuilder.addBlob(snapshotFileName, this.intervalCollections.serialize(serializer));\n\t\t}\n\n\t\tbuilder.addWithStats(contentPath, this.summarizeMergeTree(serializer));\n\n\t\treturn builder.getSummaryTree();\n\t}\n\n\t/**\n\t * Runs serializer over the GC data for this SharedMatrix.\n\t * All the IFluidHandle's represent routes to other objects.\n\t */\n\tprotected processGCDataCore(serializer: IFluidSerializer) {\n\t\tif (this.intervalCollections.size > 0) {\n\t\t\tthis.intervalCollections.serialize(serializer);\n\t\t}\n\n\t\tthis.client.serializeGCData(this.handle, serializer);\n\t}\n\n\t/**\n\t * Replace the range specified from start to end with the provided segment\n\t * This is done by inserting the segment at the end of the range, followed\n\t * by removing the contents of the range\n\t * For a zero or reverse range (start \\>= end), insert at end do not remove anything\n\t * @param start - The start of the range to replace\n\t * @param end - The end of the range to replace\n\t * @param segment - The segment that will replace the range\n\t */\n\tprotected replaceRange(start: number, end: number, segment: ISegment): void {\n\t\t// Insert at the max end of the range when start > end, but still remove the range later\n\t\tconst insertIndex: number = Math.max(start, end);\n\n\t\t// Insert first, so local references can slide to the inserted seg if any\n\t\tconst insert = this.guardReentrancy(() =>\n\t\t\tthis.client.insertSegmentLocal(insertIndex, segment),\n\t\t);\n\n\t\tif (insert && start < end) {\n\t\t\tthis.removeRange(start, end);\n\t\t}\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObject.onConnect}\n\t */\n\tprotected onConnect() {\n\t\t// Update merge tree collaboration information with new client ID and then resend pending ops\n\t\tthis.client.startOrUpdateCollaboration(this.runtime.clientId);\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObject.onDisconnect}\n\t */\n\tprotected onDisconnect() {}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObject.reSubmitCore}\n\t */\n\tprotected reSubmitCore(content: any, localOpMetadata: unknown, squash: boolean = false) {\n\t\tconst originalRefSeq = this.inFlightRefSeqs.shift();\n\t\tassert(\n\t\t\toriginalRefSeq !== undefined,\n\t\t\t0x8bb /* Expected a recorded refSeq when resubmitting an op */,\n\t\t);\n\t\tthis.useResubmitRefSeq(originalRefSeq, () => {\n\t\t\tif (!this.intervalCollections.tryResubmitMessage(content, localOpMetadata, squash)) {\n\t\t\t\tthis.submitSequenceMessage(\n\t\t\t\t\tthis.client.regeneratePendingOp(content as IMergeTreeOp, localOpMetadata, squash),\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected reSubmitSquashed(content: unknown, localOpMetadata: unknown): void {\n\t\tthis.reSubmitCore(content, localOpMetadata, true);\n\t}\n\n\t/**\n\t * Revert an op\n\t */\n\tprotected rollback(content: any, localOpMetadata: unknown): void {\n\t\tconst originalRefSeq = this.inFlightRefSeqs.pop();\n\t\tassert(\n\t\t\toriginalRefSeq !== undefined,\n\t\t\t0xb7f /* Expected a recorded refSeq when rolling back an op */,\n\t\t);\n\n\t\tif (!this.intervalCollections.tryRollback(content, localOpMetadata)) {\n\t\t\tthis.client.rollback(content, localOpMetadata);\n\t\t}\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObject.loadCore}\n\t */\n\tprotected async loadCore(storage: IChannelStorageService) {\n\t\tif (await storage.contains(snapshotFileName)) {\n\t\t\tconst blob = await storage.readBlob(snapshotFileName);\n\t\t\tconst header = bufferToString(blob, \"utf8\");\n\t\t\tthis.intervalCollections.populate(header);\n\t\t}\n\n\t\ttry {\n\t\t\t// this will load the header, and return a promise\n\t\t\t// that will resolve when the body is loaded\n\t\t\t// and the catchup ops are available.\n\t\t\tconst { catchupOpsP } = await this.client.load(\n\t\t\t\tthis.runtime,\n\t\t\t\tnew ObjectStoragePartition(storage, contentPath),\n\t\t\t\tthis.serializer,\n\t\t\t);\n\n\t\t\t// process the catch up ops, and finishing the loading process\n\t\t\t(await catchupOpsP).forEach((m) => {\n\t\t\t\tconst collabWindow = this.client.getCollabWindow();\n\t\t\t\tif (\n\t\t\t\t\tm.minimumSequenceNumber < collabWindow.minSeq ||\n\t\t\t\t\tm.referenceSequenceNumber < collabWindow.minSeq ||\n\t\t\t\t\tm.sequenceNumber <= collabWindow.minSeq ||\n\t\t\t\t\t// sequenceNumber could be the same if messages are part of a grouped batch\n\t\t\t\t\tm.sequenceNumber < collabWindow.currentSeq\n\t\t\t\t) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Invalid catchup operations in snapshot: ${JSON.stringify({\n\t\t\t\t\t\t\top: {\n\t\t\t\t\t\t\t\tseq: m.sequenceNumber,\n\t\t\t\t\t\t\t\tminSeq: m.minimumSequenceNumber,\n\t\t\t\t\t\t\t\trefSeq: m.referenceSequenceNumber,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tcollabWindow: {\n\t\t\t\t\t\t\t\tseq: collabWindow.currentSeq,\n\t\t\t\t\t\t\t\tminSeq: collabWindow.minSeq,\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\tthis.processMergeTreeMsg(m);\n\t\t\t});\n\n\t\t\t// Initialize the interval collections\n\t\t\tthis.initializeIntervalCollections();\n\t\t} catch (error) {\n\t\t\tthis.logger.sendErrorEvent({ eventName: \"SequenceLoadFailed\" }, error);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObject.processCore}\n\t */\n\tprotected processCore(\n\t\tmessage: ISequencedDocumentMessage,\n\t\tlocal: boolean,\n\t\tlocalOpMetadata: unknown,\n\t) {\n\t\tif (local) {\n\t\t\tconst recordedRefSeq = this.inFlightRefSeqs.shift();\n\t\t\tassert(recordedRefSeq !== undefined, 0x8bc /* No pending recorded refSeq found */);\n\t\t\t// TODO: AB#7076: Some equivalent assert should be enabled. This fails some e2e stashed op tests because\n\t\t\t// the deltaManager may have seen more messages than the runtime has processed while amidst the stashed op\n\t\t\t// flow, so e.g. when `applyStashedOp` is called and the DDS is put in a state where it expects an ack for\n\t\t\t// one of its messages, the delta manager has actually already seen subsequent messages from collaborators\n\t\t\t// which the in-flight message is concurrent to.\n\t\t\t// See \"handles stashed ops created on top of sequenced local ops\" for one such test case.\n\t\t\t// assert(recordedRefSeq <= message.referenceSequenceNumber, \"RefSeq mismatch\");\n\t\t}\n\n\t\tassert(\n\t\t\tmessage.type === MessageType.Operation,\n\t\t\t0x073 /* \"Sequence message not operation\" */,\n\t\t);\n\n\t\tconst handled = this.intervalCollections.tryProcessMessage(\n\t\t\tmessage.contents as IMapOperation,\n\t\t\tlocal,\n\t\t\tmessage,\n\t\t\tlocalOpMetadata,\n\t\t);\n\n\t\tif (!handled) {\n\t\t\tthis.processMergeTreeMsg(message, local);\n\t\t}\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObject.didAttach}\n\t */\n\tprotected didAttach() {\n\t\t// If we are not local, and we've attached we need to start generating and sending ops\n\t\t// so start collaboration and provide a default client id incase we are not connected\n\t\tif (this.isAttached()) {\n\t\t\tthis.client.startOrUpdateCollaboration(this.runtime.clientId ?? \"attached\");\n\t\t}\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObject.initializeLocalCore}\n\t */\n\tprotected initializeLocalCore() {\n\t\tsuper.initializeLocalCore();\n\t\tthis.initializeIntervalCollections();\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObjectCore.applyStashedOp}\n\t */\n\tprotected applyStashedOp(content: any): void {\n\t\tif (!this.intervalCollections.tryApplyStashedOp(content)) {\n\t\t\tthis.client.applyStashedOp(content);\n\t\t}\n\t}\n\n\tprivate summarizeMergeTree(serializer: IFluidSerializer): ISummaryTreeWithStats {\n\t\tconst minSeq = this.deltaManager.minimumSequenceNumber;\n\n\t\tthis.processMinSequenceNumberChanged(minSeq);\n\n\t\tthis.messagesSinceMSNChange.forEach((m) => {\n\t\t\tm.minimumSequenceNumber = minSeq;\n\t\t});\n\n\t\treturn this.client.summarize(\n\t\t\tthis.runtime,\n\t\t\tthis.handle,\n\t\t\tserializer,\n\t\t\tthis.messagesSinceMSNChange,\n\t\t);\n\t}\n\n\t/**\n\t *\n\t * @param message - Message with decoded and hydrated handles\n\t */\n\tprivate processMergeTreeMsg(message: ISequencedDocumentMessage, local?: boolean) {\n\t\tconst ops: IMergeTreeDeltaOp[] = [];\n\t\tfunction transformOps(event: SequenceDeltaEvent) {\n\t\t\tops.push(...SharedSegmentSequence.createOpsFromDelta(event));\n\t\t}\n\t\tconst needsTransformation = message.referenceSequenceNumber !== message.sequenceNumber - 1;\n\t\tlet stashMessage: Readonly<ISequencedDocumentMessage> = message;\n\t\tif (this.runtime.options.newMergeTreeSnapshotFormat !== true) {\n\t\t\tif (needsTransformation) {\n\t\t\t\tthis.on(\"sequenceDelta\", transformOps);\n\t\t\t}\n\t\t}\n\n\t\tthis.client.applyMsg(message, local);\n\n\t\tif (this.runtime.options.newMergeTreeSnapshotFormat !== true) {\n\t\t\tif (needsTransformation) {\n\t\t\t\tthis.removeListener(\"sequenceDelta\", transformOps);\n\t\t\t\t// shallow clone the message as we only overwrite top level properties,\n\t\t\t\t// like referenceSequenceNumber and content only\n\t\t\t\tstashMessage = {\n\t\t\t\t\t...message,\n\t\t\t\t\treferenceSequenceNumber: stashMessage.sequenceNumber - 1,\n\t\t\t\t\t// eslint-disable-next-line import/no-deprecated\n\t\t\t\t\tcontents: ops.length !== 1 ? createGroupOp(...ops) : ops[0],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.messagesSinceMSNChange.push(stashMessage);\n\n\t\t\t// Do GC every once in a while...\n\t\t\tif (\n\t\t\t\tthis.messagesSinceMSNChange.length > 20 &&\n\t\t\t\tthis.messagesSinceMSNChange[20].sequenceNumber < message.minimumSequenceNumber\n\t\t\t) {\n\t\t\t\tthis.processMinSequenceNumberChanged(message.minimumSequenceNumber);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate processMinSequenceNumberChanged(minSeq: number) {\n\t\tlet index = 0;\n\t\tfor (; index < this.messagesSinceMSNChange.length; index++) {\n\t\t\tif (this.messagesSinceMSNChange[index].sequenceNumber > minSeq) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (index !== 0) {\n\t\t\tthis.messagesSinceMSNChange = this.messagesSinceMSNChange.slice(index);\n\t\t}\n\t}\n\n\tprivate initializeIntervalCollections() {\n\t\t// Listen and initialize new SharedIntervalCollections\n\t\tthis.intervalCollections.events.on(\n\t\t\t\"createIntervalCollection\",\n\t\t\t(key: string, local: boolean) => {\n\t\t\t\tconst intervalCollection = this.intervalCollections.get(key);\n\t\t\t\tif (!intervalCollection.attached) {\n\t\t\t\t\tintervalCollection.attachGraph(this.client, key);\n\t\t\t\t}\n\t\t\t\tthis.emit(\"createIntervalCollection\", key, local, this);\n\t\t\t},\n\t\t);\n\n\t\t// Initialize existing SharedIntervalCollections\n\t\tfor (const key of this.intervalCollections.keys()) {\n\t\t\tconst intervalCollection = this.intervalCollections.get(key);\n\t\t\tintervalCollection.attachGraph(this.client, key);\n\t\t}\n\t}\n\n\t/**\n\t * Overrides the \"currently applicable reference sequence number\" for the duration of the callback.\n\t * See remarks on `currentRefSeq` for more context.\n\t */\n\tprivate useResubmitRefSeq(refSeq: number, callback: () => void) {\n\t\tconst previousResubmitRefSeq = this.ongoingResubmitRefSeq;\n\t\tthis.ongoingResubmitRefSeq = refSeq;\n\t\ttry {\n\t\t\tcallback();\n\t\t} finally {\n\t\t\tthis.ongoingResubmitRefSeq = previousResubmitRefSeq;\n\t\t}\n\t}\n}\n\nfunction createReentrancyDetector(\n\tonReentrancy: (depth: number) => void,\n): <T>(callback: () => T) => T {\n\tlet depth = 0;\n\tfunction detectReentrancy<T>(callback: () => T): T {\n\t\tif (depth > 0) {\n\t\t\tonReentrancy(depth);\n\t\t}\n\t\tdepth++;\n\t\ttry {\n\t\t\treturn callback();\n\t\t} finally {\n\t\t\tdepth--;\n\t\t}\n\t}\n\n\treturn detectReentrancy;\n}\n\n/**\n * Apps which generate reentrant behavior may do so at a high frequency.\n * Logging even per-SharedSegmentSequence instance might be too noisy, and having a few logs from a session\n * is likely enough.\n */\nlet totalReentrancyLogs = 3;\n\n/**\n * Resets the reentrancy log counter. Test-only API.\n */\nexport function resetReentrancyLogCounter() {\n\ttotalReentrancyLogs = 3;\n}\n\nconst reentrancyErrorMessage = \"Reentrancy detected in sequence local ops\";\nconst ensureNoReentrancy = createReentrancyDetector(() => {\n\tthrow new LoggingError(reentrancyErrorMessage);\n});\n"]}
1
+ {"version":3,"file":"sequence.js","sourceRoot":"","sources":["../src/sequence.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { bufferToString } from \"@fluid-internal/client-utils\";\nimport { IEventThisPlaceHolder } from \"@fluidframework/core-interfaces\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport {\n\tIChannelAttributes,\n\tIFluidDataStoreRuntime,\n\tIChannelStorageService,\n} from \"@fluidframework/datastore-definitions/internal\";\nimport {\n\tMessageType,\n\tISequencedDocumentMessage,\n} from \"@fluidframework/driver-definitions/internal\";\nimport {\n\tClient,\n\tIJSONSegment,\n\tIMergeTreeAnnotateMsg,\n\tIMergeTreeDeltaOp,\n\t// eslint-disable-next-line import/no-deprecated\n\tIMergeTreeGroupMsg,\n\t// eslint-disable-next-line import/no-deprecated\n\tIMergeTreeObliterateMsg,\n\tIMergeTreeOp,\n\tIMergeTreeRemoveMsg,\n\tIRelativePosition,\n\tISegment,\n\tISegmentAction,\n\tLocalReferencePosition,\n\tMergeTreeDeltaType,\n\tMergeTreeRevertibleDriver,\n\tPropertySet,\n\tReferencePosition,\n\tReferenceType,\n\tSlidingPreference,\n\tcreateAnnotateRangeOp,\n\tcreateGroupOp,\n\tcreateInsertOp,\n\tcreateObliterateRangeOp,\n\tcreateRemoveRangeOp,\n\tmatchProperties,\n\ttype AdjustParams,\n\ttype InteriorSequencePlace,\n\ttype MapLike,\n} from \"@fluidframework/merge-tree/internal\";\nimport {\n\tISummaryTreeWithStats,\n\tITelemetryContext,\n} from \"@fluidframework/runtime-definitions/internal\";\nimport {\n\tObjectStoragePartition,\n\tSummaryTreeBuilder,\n} from \"@fluidframework/runtime-utils/internal\";\nimport {\n\tIFluidSerializer,\n\tISharedObjectEvents,\n\tSharedObject,\n\ttype ISharedObject,\n} from \"@fluidframework/shared-object-base/internal\";\nimport {\n\tLoggingError,\n\tcreateChildLogger,\n\tcreateConfigBasedOptionsProxy,\n\tloggerToMonitoringContext,\n} from \"@fluidframework/telemetry-utils/internal\";\nimport Deque from \"double-ended-queue\";\n\nimport { type ISequenceIntervalCollection } from \"./intervalCollection.js\";\nimport { IMapOperation, IntervalCollectionMap } from \"./intervalCollectionMap.js\";\nimport { type SequenceOptions } from \"./intervalCollectionMapInterfaces.js\";\nimport {\n\tSequenceDeltaEvent,\n\tSequenceDeltaEventClass,\n\tSequenceMaintenanceEvent,\n\tSequenceMaintenanceEventClass,\n} from \"./sequenceDeltaEvent.js\";\n\nconst snapshotFileName = \"header\";\nconst contentPath = \"content\";\n\n/**\n * Events emitted in response to changes to the sequence data.\n *\n * @remarks\n *\n * The following is the list of events emitted.\n *\n * ### \"sequenceDelta\"\n *\n * The sequenceDelta event is emitted when segments are inserted, annotated, or removed.\n *\n * #### Listener signature\n *\n * ```typescript\n * (event: SequenceDeltaEvent, target: IEventThisPlaceHolder) => void\n * ```\n * - `event` - Various information on the segments that were modified.\n *\n * - `target` - The sequence itself.\n *\n * ### \"maintenance\"\n *\n * The maintenance event is emitted when segments are modified during merge-tree maintenance.\n *\n * #### Listener signature\n *\n * ```typescript\n * (event: SequenceMaintenanceEvent, target: IEventThisPlaceHolder) => void\n * ```\n * - `event` - Various information on the segments that were modified.\n *\n * - `target` - The sequence itself.\n * @legacy @beta\n */\nexport interface ISharedSegmentSequenceEvents extends ISharedObjectEvents {\n\t(\n\t\tevent: \"createIntervalCollection\",\n\t\tlistener: (label: string, local: boolean, target: IEventThisPlaceHolder) => void,\n\t): void;\n\t(\n\t\tevent: \"sequenceDelta\",\n\t\tlistener: (event: SequenceDeltaEvent, target: IEventThisPlaceHolder) => void,\n\t): void;\n\t(\n\t\tevent: \"maintenance\",\n\t\tlistener: (event: SequenceMaintenanceEvent, target: IEventThisPlaceHolder) => void,\n\t): void;\n}\n\n/**\n * @legacy @beta\n */\nexport interface ISharedSegmentSequence<T extends ISegment>\n\textends ISharedObject<ISharedSegmentSequenceEvents>,\n\t\tMergeTreeRevertibleDriver {\n\t/**\n\t * Creates a `LocalReferencePosition` on this SharedString. If the refType does not include\n\t * ReferenceType.Transient, the returned reference will be added to the localRefs on the provided segment.\n\t * @param segment - Segment to add the local reference on\n\t * @param offset - Offset on the segment at which to place the local reference\n\t * @param refType - ReferenceType for the created local reference\n\t * @param properties - PropertySet to place on the created local reference\n\t */\n\tcreateLocalReferencePosition(\n\t\tsegment: T,\n\t\toffset: number,\n\t\trefType: ReferenceType,\n\t\tproperties: PropertySet | undefined,\n\t\tslidingPreference?: SlidingPreference,\n\t\tcanSlideToEndpoint?: boolean,\n\t): LocalReferencePosition;\n\n\t/**\n\t * Removes a `LocalReferencePosition` from this SharedString.\n\t */\n\tremoveLocalReferencePosition(\n\t\tlref: LocalReferencePosition,\n\t): LocalReferencePosition | undefined;\n\n\t/**\n\t * Returns the length of the current sequence for the client\n\t */\n\tgetLength(): number;\n\n\t/**\n\t * Returns the current position of a segment, and -1 if the segment\n\t * does not exist in this sequence\n\t * @param segment - The segment to get the position of\n\t */\n\tgetPosition(segment: ISegment): number;\n\n\t/**\n\t * Resolves a `ReferencePosition` into a character position using this client's perspective.\n\t *\n\t * Reference positions that point to a character that has been removed will\n\t * always return the position of the nearest non-removed character, regardless\n\t * of `ReferenceType`. To handle this case specifically, one may wish\n\t * to look at the segment returned by `ReferencePosition.getSegment`.\n\t */\n\tlocalReferencePositionToPosition(lref: ReferencePosition): number;\n\n\t/**\n\t * Walk the underlying segments of the sequence.\n\t * The walked segments may extend beyond the range if the segments cross the\n\t * ranges start or end boundaries.\n\t *\n\t * Set split range to true to ensure only segments within the range are walked.\n\t *\n\t * @param handler - The function to handle each segment. Traversal ends if\n\t * this function returns true.\n\t * @param start - Optional. The start of range walk.\n\t * @param end - Optional. The end of range walk\n\t * @param accum - Optional. An object that will be passed to the handler for accumulation\n\t * @param splitRange - Optional. Splits boundary segments on the range boundaries. Defaults to false.\n\t */\n\twalkSegments<TClientData>(\n\t\thandler: ISegmentAction<TClientData>,\n\t\tstart?: number,\n\t\tend?: number,\n\t\taccum?: TClientData,\n\t\tsplitRange?: boolean,\n\t): void;\n\n\t/**\n\t * Inserts a segment directly before a `ReferencePosition`.\n\t * @param refPos - The reference position to insert the segment at\n\t * @param segment - The segment to insert\n\t */\n\tinsertAtReferencePosition(pos: ReferencePosition, segment: T): void;\n\n\t/**\n\t * Finds the segment information (i.e. segment + offset) corresponding to a character position in the SharedString.\n\t * If the position is past the end of the string, `segment` and `offset` on the returned object may be undefined.\n\t * @param pos - Character position (index) into the current local view of the SharedString.\n\t */\n\tgetContainingSegment(pos: number): {\n\t\tsegment: T | undefined;\n\t\toffset: number | undefined;\n\t};\n\n\tgetPropertiesAtPosition(pos: number): PropertySet | undefined;\n\n\t/**\n\t * @returns An iterable object that enumerates the IntervalCollection labels.\n\t *\n\t * @example\n\t *\n\t * ```typescript\n\t * const iter = this.getIntervalCollectionKeys();\n\t * for (key of iter)\n\t * const collection = this.getIntervalCollection(key);\n\t * ...\n\t * ```\n\t */\n\tgetIntervalCollectionLabels(): IterableIterator<string>;\n\n\t/**\n\t * Retrieves the interval collection keyed on `label`. If no such interval collection exists,\n\t * creates one.\n\t */\n\tgetIntervalCollection(label: string): ISequenceIntervalCollection;\n\n\t/**\n\t * Obliterate is similar to remove, but differs in that segments concurrently\n\t * inserted into an obliterated range will also be removed.\n\t * Inserts are considered concurrent to an obliterate iff the insert op's seq is after the obliterate op's refSeq\n\t * and the insert's refSeq is before the obliterates seq.\n\t * Inserts made by the client which most recently obliterated a range containing the insert position\n\t * are not considered concurrent to any obliteration (the last client to obliterate gets the right to insert).\n\t *\n\t * The endpoints can either be inclusive or exclusive.\n\t * Exclusive endpoints allow the obliterated range to \"grow\" to include adjacent concurrently inserted segments on that side.\n\t *\n\t * @param start - The start of the range to obliterate.\n\t * Inclusive if side is Before or a number is provided.\n\t * @param end - The end of the range to obliterate. Inclusive if side is After.\n\t * If a number is provided it is treated as exclusive,\n\t * but the endpoint does not expand in order to preserve existing behavior.\n\t *\n\t * @example Given the initial state `\"|ABC>\"`,\n\t * `obliterateRange({ pos: 0, side: Side.After }, { pos: 4, side: Side.Before })` obliterates `\"ABC\"`, leaving only `\"|>\"`.\n\t * `insertFromSpec(1, { text: \"AAA\"})` would insert `\"AAA\"` before |, resulting in `\"|AAA>\"`.\n\t * If another client does the same thing but inserts `\"BBB\"` and gets sequenced later, all clients will eventually see `|BBB>`.\n\t */\n\tobliterateRange(\n\t\tstart: number | InteriorSequencePlace,\n\t\tend: number | InteriorSequencePlace,\n\t): void;\n\n\t/**\n\t * @returns The most recent sequence number which has been acked by the server and processed by this\n\t * SharedSegmentSequence.\n\t */\n\tgetCurrentSeq(): number;\n\n\t/**\n\t * Annotates the range with the provided properties\n\t *\n\t * @param start - The inclusive start position of the range to annotate\n\t * @param end - The exclusive end position of the range to annotate\n\t * @param props - The properties to annotate the range with\n\t *\n\t */\n\tannotateRange(start: number, end: number, props: PropertySet): void;\n\n\t/**\n\t * Annotates a specified range within the sequence by applying the provided adjustments.\n\t *\n\t * @param start - The inclusive start position of the range to annotate. This is a zero-based index.\n\t * @param end - The exclusive end position of the range to annotate. This is a zero-based index.\n\t * @param adjust - A map-like object specifying the properties to adjust. Each key-value pair represents a property and its corresponding adjustment to be applied over the range.\n\t * An adjustment is defined by an object containing a `delta` to be added to the current property value, and optional `min` and `max` constraints to limit the adjusted value.\n\t *\n\t * @remarks\n\t * The range is defined by the start and end positions, where the start position is inclusive and the end position is exclusive.\n\t * The properties provided in the adjust parameter will be applied to the specified range. Each adjustment modifies the current value of the property by adding the specified `value`.\n\t * If the current value is not a number, the `delta` will be summed with 0 to compute the new value. The optional `min` and `max` constraints are applied after the adjustment to ensure the final value falls within the specified bounds.\n\t */\n\tannotateAdjustRange(start: number, end: number, adjust: MapLike<AdjustParams>): void;\n\n\t/**\n\t * @param start - The inclusive start of the range to remove\n\t * @param end - The exclusive end of the range to remove\n\t */\n\tremoveRange(start: number, end: number): void;\n\n\t/**\n\t * Resolves a remote client's position against the local sequence\n\t * and returns the remote client's position relative to the local\n\t * sequence. The client ref seq must be above the minimum sequence number\n\t * or the return value will be undefined.\n\t * Generally this method is used in conjunction with signals which provide\n\t * point in time values for the below parameters, and is useful for things\n\t * like displaying user position. It should not be used with persisted values\n\t * as persisted values will quickly become invalid as the remoteClientRefSeq\n\t * moves below the minimum sequence number\n\t * @param remoteClientPosition - The remote client's position to resolve\n\t * @param remoteClientRefSeq - The reference sequence number of the remote client\n\t * @param remoteClientId - The client id of the remote client\n\t */\n\tresolveRemoteClientPosition(\n\t\tremoteClientPosition: number,\n\t\tremoteClientRefSeq: number,\n\t\tremoteClientId: string,\n\t): number | undefined;\n\n\t// #region APIs we might want to remove\n\t/**\n\t * Initializes the object as a local, non-shared object. This object can become shared after\n\t * it is attached to the document.\n\t * @privateRemarks\n\t * TODO: determine if this API (from SharedObject) is needed by users of the encapsulated API, declarative API or both,\n\t * and handle exposing it in a consistent way for all SharedObjects if needed.\n\t */\n\tinitializeLocal(): void;\n\n\t/**\n\t * @deprecated The ability to create group ops will be removed in an upcoming\n\t * release, as group ops are redundant with the native batching capabilities\n\t * of the runtime\n\t */\n\t// eslint-disable-next-line import/no-deprecated\n\tgroupOperation(groupOp: IMergeTreeGroupMsg): void;\n\n\tgetRangeExtentsOfPosition(pos: number): {\n\t\tposStart: number | undefined;\n\t\tposAfterEnd: number | undefined;\n\t};\n\n\t/**\n\t * Inserts a segment\n\t * @param start - The position to insert the segment at\n\t * @param spec - The segment to inserts spec\n\t */\n\tinsertFromSpec(pos: number, spec: IJSONSegment): void;\n\n\t/**\n\t * Given a position specified relative to a marker id, lookup the marker\n\t * and convert the position to a character position.\n\t * @param relativePos - Id of marker (may be indirect) and whether position is before or after marker.\n\t */\n\tposFromRelativePos(relativePos: IRelativePosition): number;\n\n\t// #endregion\n}\n\n/**\n * @internal\n */\nexport abstract class SharedSegmentSequence<T extends ISegment>\n\textends SharedObject<ISharedSegmentSequenceEvents>\n\timplements ISharedSegmentSequence<T>\n{\n\t/**\n\t * This is a safeguard to avoid problematic reentrancy of local ops. This type of scenario occurs if the user of SharedString subscribes\n\t * to the `sequenceDelta` event and uses the callback for a local op to submit further local ops.\n\t * Historically (before 2.0.0-internal.6.1.0), doing so would result in eventual consistency issues or a corrupted document.\n\t * These issues were fixed in #16815 which makes such reentrancy no different from applying the ops in order but not from within the change events,\n\t * but there is still little test coverage for reentrant scenarios.\n\t * Additionally, applications submitting ops from inside change events need to take extreme care that their data models also support reentrancy.\n\t * Since this is likely not the case, by default SharedString throws when encountering reentrant ops.\n\t *\n\t * An application using SharedString which explicitly wants to opt in to allowing reentrancy anyway can set `sharedStringPreventReentrancy`\n\t * on the data store options to `false`.\n\t */\n\tprotected guardReentrancy: <TRet>(callback: () => TRet) => TRet;\n\n\tprivate static createOpsFromDelta(event: SequenceDeltaEvent): IMergeTreeDeltaOp[] {\n\t\tconst ops: IMergeTreeDeltaOp[] = [];\n\t\tfor (const r of event.ranges) {\n\t\t\tswitch (event.deltaOperation) {\n\t\t\t\tcase MergeTreeDeltaType.ANNOTATE: {\n\t\t\t\t\tconst lastAnnotate = ops[ops.length - 1] as IMergeTreeAnnotateMsg;\n\t\t\t\t\tconst props: PropertySet = {};\n\t\t\t\t\tfor (const key of Object.keys(r.propertyDeltas)) {\n\t\t\t\t\t\tprops[key] = r.segment.properties?.[key] ?? null;\n\t\t\t\t\t}\n\t\t\t\t\tif (\n\t\t\t\t\t\tlastAnnotate &&\n\t\t\t\t\t\tlastAnnotate.pos2 === r.position &&\n\t\t\t\t\t\tmatchProperties(lastAnnotate.props, props)\n\t\t\t\t\t) {\n\t\t\t\t\t\tlastAnnotate.pos2 += r.segment.cachedLength;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tops.push(\n\t\t\t\t\t\t\tcreateAnnotateRangeOp(r.position, r.position + r.segment.cachedLength, props),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase MergeTreeDeltaType.INSERT:\n\t\t\t\t\tops.push(createInsertOp(r.position, r.segment.clone().toJSONObject()));\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MergeTreeDeltaType.REMOVE: {\n\t\t\t\t\tconst lastRem = ops[ops.length - 1] as IMergeTreeRemoveMsg;\n\t\t\t\t\tif (lastRem?.pos1 === r.position) {\n\t\t\t\t\t\tassert(lastRem.pos2 !== undefined, 0x3ff /* pos2 should not be undefined here */);\n\t\t\t\t\t\tlastRem.pos2 += r.segment.cachedLength;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tops.push(createRemoveRangeOp(r.position, r.position + r.segment.cachedLength));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase MergeTreeDeltaType.OBLITERATE: {\n\t\t\t\t\t// eslint-disable-next-line import/no-deprecated\n\t\t\t\t\tconst lastRem = ops[ops.length - 1] as IMergeTreeObliterateMsg;\n\t\t\t\t\tif (lastRem?.pos1 === r.position) {\n\t\t\t\t\t\tassert(lastRem.pos2 !== undefined, 0x874 /* pos2 should not be undefined here */);\n\t\t\t\t\t\tlastRem.pos2 += r.segment.cachedLength;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tops.push(createObliterateRangeOp(r.position, r.position + r.segment.cachedLength));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tdefault:\n\t\t\t}\n\t\t}\n\t\treturn ops;\n\t}\n\n\t/**\n\t * Note: this field only provides a lower-bound on the reference sequence numbers for in-flight ops.\n\t * The exact reason isn't understood, but some e2e tests suggest that the runtime may sometimes process\n\t * incoming leave/join ops before putting an op that this DDS submits over the wire.\n\t *\n\t * E.g. SharedString submits an op while deltaManager has lastSequenceNumber = 10, but before the runtime\n\t * puts this op over the wire, it processes a client join/leave op with sequence number 11, so the referenceSequenceNumber\n\t * on the SharedString op is 11.\n\t *\n\t * The reference sequence numbers placed in this queue are also not accurate for stashed ops due to how the applyStashedOp\n\t * flow works at the runtime level. This is a legitimate bug, and AB#6602 tracks one way to fix it (stop reaching all the way\n\t * to deltaManager's lastSequenceNumber to obtain refSeq, instead leveraging some analogous notion on the container or datastore\n\t * runtime).\n\t */\n\tprivate readonly inFlightRefSeqs = new Deque<number>();\n\n\tprivate ongoingResubmitRefSeq: number | undefined;\n\n\t/**\n\t * Gets the reference sequence number (i.e. sequence number of the runtime's last processed op) for an op submitted\n\t * in the current context.\n\t *\n\t * This value can be optionally overridden using `useResubmitRefSeq`.\n\t * IntervalCollection's resubmit logic currently relies on preserving merge information from when the op was originally submitted,\n\t * even if the op is resubmitted more than once. Thus during resubmit, `inFlightRefSeqs` gets populated with the\n\t * original refSeq rather than the refSeq at the time of reconnection.\n\t *\n\t * @remarks - In some not fully understood cases, the runtime may process incoming ops before putting an op that this\n\t * DDS submits over the wire. See `inFlightRefSeqs` for more details.\n\t */\n\tprivate get currentRefSeq() {\n\t\treturn this.ongoingResubmitRefSeq ?? this.deltaManager.lastSequenceNumber;\n\t}\n\n\tprotected client: Client;\n\tprivate messagesSinceMSNChange: ISequencedDocumentMessage[] = [];\n\tprivate readonly intervalCollections: IntervalCollectionMap;\n\tconstructor(\n\t\tdataStoreRuntime: IFluidDataStoreRuntime,\n\t\tpublic id: string,\n\t\tattributes: IChannelAttributes,\n\t\tpublic readonly segmentFromSpec: (spec: IJSONSegment) => ISegment,\n\t) {\n\t\tsuper(id, dataStoreRuntime, attributes, \"fluid_sequence_\");\n\n\t\tconst getMinInFlightRefSeq = () => this.inFlightRefSeqs.get(0);\n\t\tthis.guardReentrancy =\n\t\t\t(dataStoreRuntime.options.sharedStringPreventReentrancy ?? true)\n\t\t\t\t? ensureNoReentrancy\n\t\t\t\t: createReentrancyDetector((depth) => {\n\t\t\t\t\t\tif (totalReentrancyLogs > 0) {\n\t\t\t\t\t\t\ttotalReentrancyLogs--;\n\t\t\t\t\t\t\tthis.logger.sendTelemetryEvent(\n\t\t\t\t\t\t\t\t{ eventName: \"LocalOpReentry\", depth },\n\t\t\t\t\t\t\t\tnew LoggingError(reentrancyErrorMessage),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\tconst options = createConfigBasedOptionsProxy<SequenceOptions>(\n\t\t\tloggerToMonitoringContext(this.logger).config,\n\t\t\t\"Fluid.Sequence\",\n\t\t\t{\n\t\t\t\tmergeTreeEnableObliterate: (c, n) => c.getBoolean(n),\n\t\t\t\tmergeTreeEnableSidedObliterate: (c, n) => c.getBoolean(n),\n\t\t\t\tintervalStickinessEnabled: (c, n) => c.getBoolean(n),\n\t\t\t\tmergeTreeReferencesCanSlideToEndpoint: (c, n) => c.getBoolean(n),\n\t\t\t\tmergeTreeEnableAnnotateAdjust: (c, n) => c.getBoolean(n),\n\t\t\t},\n\t\t\tdataStoreRuntime.options,\n\t\t);\n\n\t\tthis.client = new Client(\n\t\t\tsegmentFromSpec,\n\t\t\tcreateChildLogger({\n\t\t\t\tlogger: this.logger,\n\t\t\t\tnamespace: \"SharedSegmentSequence.MergeTreeClient\",\n\t\t\t}),\n\t\t\toptions,\n\t\t\tgetMinInFlightRefSeq,\n\t\t);\n\n\t\tthis.client.prependListener(\"delta\", (opArgs, deltaArgs) => {\n\t\t\tconst event = new SequenceDeltaEventClass(opArgs, deltaArgs, this.client);\n\t\t\tif (event.isLocal && event.opArgs.rollback !== true) {\n\t\t\t\tthis.submitSequenceMessage(opArgs.op);\n\t\t\t}\n\t\t\tif (deltaArgs.deltaSegments.length > 0) {\n\t\t\t\tthis.emit(\"sequenceDelta\", event, this);\n\t\t\t}\n\t\t});\n\n\t\tthis.client.on(\"maintenance\", (args, opArgs) => {\n\t\t\tthis.emit(\n\t\t\t\t\"maintenance\",\n\t\t\t\tnew SequenceMaintenanceEventClass(opArgs, args, this.client),\n\t\t\t\tthis,\n\t\t\t);\n\t\t});\n\n\t\tthis.intervalCollections = new IntervalCollectionMap(\n\t\t\tthis.serializer,\n\t\t\tthis.handle,\n\t\t\t(op, localOpMetadata) => {\n\t\t\t\tif (!this.isAttached()) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.inFlightRefSeqs.push(this.currentRefSeq);\n\t\t\t\tthis.submitLocalMessage(op, localOpMetadata);\n\t\t\t},\n\t\t\toptions,\n\t\t);\n\t}\n\n\tpublic removeRange(start: number, end: number): void {\n\t\tthis.guardReentrancy(() => this.client.removeRangeLocal(start, end));\n\t}\n\n\tpublic obliterateRange(\n\t\tstart: number | InteriorSequencePlace,\n\t\tend: number | InteriorSequencePlace,\n\t): void {\n\t\tthis.guardReentrancy(() => this.client.obliterateRangeLocal(start, end));\n\t}\n\n\t// eslint-disable-next-line import/no-deprecated\n\tpublic groupOperation(groupOp: IMergeTreeGroupMsg): void {\n\t\tthis.guardReentrancy(() => this.client.localTransaction(groupOp));\n\t}\n\n\tpublic getContainingSegment(pos: number): {\n\t\tsegment: T | undefined;\n\t\toffset: number | undefined;\n\t} {\n\t\treturn (\n\t\t\tthis.client.getContainingSegment<T>(pos) ?? { segment: undefined, offset: undefined }\n\t\t);\n\t}\n\n\tpublic getLength(): number {\n\t\treturn this.client.getLength();\n\t}\n\n\tpublic getPosition(segment: ISegment): number {\n\t\treturn this.client.getPosition(segment);\n\t}\n\n\tpublic annotateRange(start: number, end: number, props: PropertySet): void {\n\t\tthis.guardReentrancy(() => this.client.annotateRangeLocal(start, end, props));\n\t}\n\n\tpublic annotateAdjustRange(start: number, end: number, adjust: MapLike<AdjustParams>): void {\n\t\tthis.guardReentrancy(() => this.client.annotateAdjustRangeLocal(start, end, adjust));\n\t}\n\n\tpublic getPropertiesAtPosition(pos: number): PropertySet | undefined {\n\t\treturn this.client.getPropertiesAtPosition(pos);\n\t}\n\n\tpublic getRangeExtentsOfPosition(pos: number): {\n\t\tposStart: number | undefined;\n\t\tposAfterEnd: number | undefined;\n\t} {\n\t\treturn this.client.getRangeExtentsOfPosition(pos);\n\t}\n\n\tpublic createLocalReferencePosition(\n\t\tsegment: T,\n\t\toffset: number,\n\t\trefType: ReferenceType,\n\t\tproperties: PropertySet | undefined,\n\t\tslidingPreference?: SlidingPreference,\n\t\tcanSlideToEndpoint?: boolean,\n\t): LocalReferencePosition {\n\t\treturn this.client.createLocalReferencePosition(\n\t\t\tsegment,\n\t\t\toffset,\n\t\t\trefType,\n\t\t\tproperties,\n\t\t\tslidingPreference,\n\t\t\tcanSlideToEndpoint,\n\t\t);\n\t}\n\n\tpublic localReferencePositionToPosition(lref: ReferencePosition): number {\n\t\treturn this.client.localReferencePositionToPosition(lref);\n\t}\n\n\tpublic removeLocalReferencePosition(\n\t\tlref: LocalReferencePosition,\n\t): LocalReferencePosition | undefined {\n\t\treturn this.client.removeLocalReferencePosition(lref);\n\t}\n\n\tpublic resolveRemoteClientPosition(\n\t\tremoteClientPosition: number,\n\t\tremoteClientRefSeq: number,\n\t\tremoteClientId: string,\n\t): number | undefined {\n\t\treturn this.client.resolveRemoteClientPosition(\n\t\t\tremoteClientPosition,\n\t\t\tremoteClientRefSeq,\n\t\t\tremoteClientId,\n\t\t);\n\t}\n\n\tprivate submitSequenceMessage(message: IMergeTreeOp) {\n\t\tif (!this.isAttached()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.inFlightRefSeqs.push(this.currentRefSeq);\n\n\t\tconst metadata = this.client.peekPendingSegmentGroups(\n\t\t\tmessage.type === MergeTreeDeltaType.GROUP ? message.ops.length : 1,\n\t\t);\n\n\t\tthis.submitLocalMessage(message, metadata);\n\t}\n\n\tpublic posFromRelativePos(relativePos: IRelativePosition): number {\n\t\treturn this.client.posFromRelativePos(relativePos);\n\t}\n\n\tpublic walkSegments<TClientData>(\n\t\thandler: ISegmentAction<TClientData>,\n\t\tstart?: number,\n\t\tend?: number,\n\t\taccum?: TClientData,\n\t\tsplitRange: boolean = false,\n\t): void {\n\t\tthis.client.walkSegments(handler, start, end, accum as TClientData, splitRange);\n\t}\n\n\tpublic getCurrentSeq(): number {\n\t\treturn this.client.getCurrentSeq();\n\t}\n\n\tpublic insertAtReferencePosition(pos: ReferencePosition, segment: T): void {\n\t\tthis.guardReentrancy(() => this.client.insertAtReferencePositionLocal(pos, segment));\n\t}\n\n\tpublic insertFromSpec(pos: number, spec: IJSONSegment): void {\n\t\tconst segment = this.segmentFromSpec(spec);\n\t\tthis.guardReentrancy(() => this.client.insertSegmentLocal(pos, segment));\n\t}\n\n\tpublic getIntervalCollection(label: string): ISequenceIntervalCollection {\n\t\treturn this.intervalCollections.get(label);\n\t}\n\n\tpublic getIntervalCollectionLabels(): IterableIterator<string> {\n\t\treturn this.intervalCollections.keys();\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObject.summarizeCore}\n\t */\n\tprotected summarizeCore(\n\t\tserializer: IFluidSerializer,\n\t\ttelemetryContext?: ITelemetryContext,\n\t): ISummaryTreeWithStats {\n\t\tconst builder = new SummaryTreeBuilder();\n\n\t\t// conditionally write the interval collection blob\n\t\t// only if it has entries\n\t\tif (this.intervalCollections.size > 0) {\n\t\t\tbuilder.addBlob(snapshotFileName, this.intervalCollections.serialize(serializer));\n\t\t}\n\n\t\tbuilder.addWithStats(contentPath, this.summarizeMergeTree(serializer));\n\n\t\treturn builder.getSummaryTree();\n\t}\n\n\t/**\n\t * Runs serializer over the GC data for this SharedMatrix.\n\t * All the IFluidHandle's represent routes to other objects.\n\t */\n\tprotected processGCDataCore(serializer: IFluidSerializer) {\n\t\tif (this.intervalCollections.size > 0) {\n\t\t\tthis.intervalCollections.serialize(serializer);\n\t\t}\n\n\t\tthis.client.serializeGCData(this.handle, serializer);\n\t}\n\n\t/**\n\t * Replace the range specified from start to end with the provided segment\n\t * This is done by inserting the segment at the end of the range, followed\n\t * by removing the contents of the range\n\t * For a zero or reverse range (start \\>= end), insert at end do not remove anything\n\t * @param start - The start of the range to replace\n\t * @param end - The end of the range to replace\n\t * @param segment - The segment that will replace the range\n\t */\n\tprotected replaceRange(start: number, end: number, segment: ISegment): void {\n\t\t// Insert at the max end of the range when start > end, but still remove the range later\n\t\tconst insertIndex: number = Math.max(start, end);\n\n\t\t// Insert first, so local references can slide to the inserted seg if any\n\t\tconst insert = this.guardReentrancy(() =>\n\t\t\tthis.client.insertSegmentLocal(insertIndex, segment),\n\t\t);\n\n\t\tif (insert && start < end) {\n\t\t\tthis.removeRange(start, end);\n\t\t}\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObject.onConnect}\n\t */\n\tprotected onConnect() {\n\t\t// Update merge tree collaboration information with new client ID and then resend pending ops\n\t\tthis.client.startOrUpdateCollaboration(this.runtime.clientId);\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObject.onDisconnect}\n\t */\n\tprotected onDisconnect() {}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObject.reSubmitCore}\n\t */\n\tprotected reSubmitCore(content: any, localOpMetadata: unknown, squash: boolean = false) {\n\t\tconst originalRefSeq = this.inFlightRefSeqs.shift();\n\t\tassert(\n\t\t\toriginalRefSeq !== undefined,\n\t\t\t0x8bb /* Expected a recorded refSeq when resubmitting an op */,\n\t\t);\n\t\tthis.useResubmitRefSeq(originalRefSeq, () => {\n\t\t\tif (!this.intervalCollections.tryResubmitMessage(content, localOpMetadata, squash)) {\n\t\t\t\tthis.submitSequenceMessage(\n\t\t\t\t\tthis.client.regeneratePendingOp(content as IMergeTreeOp, localOpMetadata, squash),\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected reSubmitSquashed(content: unknown, localOpMetadata: unknown): void {\n\t\tthis.reSubmitCore(content, localOpMetadata, true);\n\t}\n\n\t/**\n\t * Revert an op\n\t */\n\tprotected rollback(content: any, localOpMetadata: unknown): void {\n\t\tconst originalRefSeq = this.inFlightRefSeqs.pop();\n\t\tassert(\n\t\t\toriginalRefSeq !== undefined,\n\t\t\t0xb7f /* Expected a recorded refSeq when rolling back an op */,\n\t\t);\n\n\t\tif (!this.intervalCollections.tryRollback(content, localOpMetadata)) {\n\t\t\tthis.client.rollback(content, localOpMetadata);\n\t\t}\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObject.loadCore}\n\t */\n\tprotected async loadCore(storage: IChannelStorageService) {\n\t\tif (await storage.contains(snapshotFileName)) {\n\t\t\tconst blob = await storage.readBlob(snapshotFileName);\n\t\t\tconst header = bufferToString(blob, \"utf8\");\n\t\t\tthis.intervalCollections.populate(header);\n\t\t}\n\n\t\ttry {\n\t\t\t// this will load the header, and return a promise\n\t\t\t// that will resolve when the body is loaded\n\t\t\t// and the catchup ops are available.\n\t\t\tconst { catchupOpsP } = await this.client.load(\n\t\t\t\tthis.runtime,\n\t\t\t\tnew ObjectStoragePartition(storage, contentPath),\n\t\t\t\tthis.serializer,\n\t\t\t);\n\n\t\t\t// process the catch up ops, and finishing the loading process\n\t\t\t(await catchupOpsP).forEach((m) => {\n\t\t\t\tconst collabWindow = this.client.getCollabWindow();\n\t\t\t\tif (\n\t\t\t\t\tm.minimumSequenceNumber < collabWindow.minSeq ||\n\t\t\t\t\tm.referenceSequenceNumber < collabWindow.minSeq ||\n\t\t\t\t\tm.sequenceNumber <= collabWindow.minSeq ||\n\t\t\t\t\t// sequenceNumber could be the same if messages are part of a grouped batch\n\t\t\t\t\tm.sequenceNumber < collabWindow.currentSeq\n\t\t\t\t) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Invalid catchup operations in snapshot: ${JSON.stringify({\n\t\t\t\t\t\t\top: {\n\t\t\t\t\t\t\t\tseq: m.sequenceNumber,\n\t\t\t\t\t\t\t\tminSeq: m.minimumSequenceNumber,\n\t\t\t\t\t\t\t\trefSeq: m.referenceSequenceNumber,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tcollabWindow: {\n\t\t\t\t\t\t\t\tseq: collabWindow.currentSeq,\n\t\t\t\t\t\t\t\tminSeq: collabWindow.minSeq,\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\tthis.processMergeTreeMsg(m);\n\t\t\t});\n\n\t\t\t// Initialize the interval collections\n\t\t\tthis.initializeIntervalCollections();\n\t\t} catch (error) {\n\t\t\tthis.logger.sendErrorEvent({ eventName: \"SequenceLoadFailed\" }, error);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObject.processCore}\n\t */\n\tprotected processCore(\n\t\tmessage: ISequencedDocumentMessage,\n\t\tlocal: boolean,\n\t\tlocalOpMetadata: unknown,\n\t) {\n\t\tif (local) {\n\t\t\tconst recordedRefSeq = this.inFlightRefSeqs.shift();\n\t\t\tassert(recordedRefSeq !== undefined, 0x8bc /* No pending recorded refSeq found */);\n\t\t\t// TODO: AB#7076: Some equivalent assert should be enabled. This fails some e2e stashed op tests because\n\t\t\t// the deltaManager may have seen more messages than the runtime has processed while amidst the stashed op\n\t\t\t// flow, so e.g. when `applyStashedOp` is called and the DDS is put in a state where it expects an ack for\n\t\t\t// one of its messages, the delta manager has actually already seen subsequent messages from collaborators\n\t\t\t// which the in-flight message is concurrent to.\n\t\t\t// See \"handles stashed ops created on top of sequenced local ops\" for one such test case.\n\t\t\t// assert(recordedRefSeq <= message.referenceSequenceNumber, \"RefSeq mismatch\");\n\t\t}\n\n\t\tassert(\n\t\t\tmessage.type === MessageType.Operation,\n\t\t\t0x073 /* \"Sequence message not operation\" */,\n\t\t);\n\n\t\tconst handled = this.intervalCollections.tryProcessMessage(\n\t\t\tmessage.contents as IMapOperation,\n\t\t\tlocal,\n\t\t\tmessage,\n\t\t\tlocalOpMetadata,\n\t\t);\n\n\t\tif (!handled) {\n\t\t\tthis.processMergeTreeMsg(message, local);\n\t\t}\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObject.didAttach}\n\t */\n\tprotected didAttach() {\n\t\t// If we are not local, and we've attached we need to start generating and sending ops\n\t\t// so start collaboration and provide a default client id incase we are not connected\n\t\tif (this.isAttached()) {\n\t\t\tthis.client.startOrUpdateCollaboration(this.runtime.clientId ?? \"attached\");\n\t\t}\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObject.initializeLocalCore}\n\t */\n\tprotected initializeLocalCore() {\n\t\tsuper.initializeLocalCore();\n\t\tthis.initializeIntervalCollections();\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObjectCore.applyStashedOp}\n\t */\n\tprotected applyStashedOp(content: any): void {\n\t\tif (!this.intervalCollections.tryApplyStashedOp(content)) {\n\t\t\tthis.client.applyStashedOp(content);\n\t\t}\n\t}\n\n\tprivate summarizeMergeTree(serializer: IFluidSerializer): ISummaryTreeWithStats {\n\t\tconst minSeq = this.deltaManager.minimumSequenceNumber;\n\n\t\tthis.processMinSequenceNumberChanged(minSeq);\n\n\t\tthis.messagesSinceMSNChange.forEach((m) => {\n\t\t\tm.minimumSequenceNumber = minSeq;\n\t\t});\n\n\t\treturn this.client.summarize(\n\t\t\tthis.runtime,\n\t\t\tthis.handle,\n\t\t\tserializer,\n\t\t\tthis.messagesSinceMSNChange,\n\t\t);\n\t}\n\n\t/**\n\t *\n\t * @param message - Message with decoded and hydrated handles\n\t */\n\tprivate processMergeTreeMsg(message: ISequencedDocumentMessage, local?: boolean) {\n\t\tconst ops: IMergeTreeDeltaOp[] = [];\n\t\tfunction transformOps(event: SequenceDeltaEvent) {\n\t\t\tops.push(...SharedSegmentSequence.createOpsFromDelta(event));\n\t\t}\n\t\tconst needsTransformation = message.referenceSequenceNumber !== message.sequenceNumber - 1;\n\t\tlet stashMessage: Readonly<ISequencedDocumentMessage> = message;\n\t\tif (this.runtime.options.newMergeTreeSnapshotFormat !== true) {\n\t\t\tif (needsTransformation) {\n\t\t\t\tthis.on(\"sequenceDelta\", transformOps);\n\t\t\t}\n\t\t}\n\n\t\tthis.client.applyMsg(message, local);\n\n\t\tif (this.runtime.options.newMergeTreeSnapshotFormat !== true) {\n\t\t\tif (needsTransformation) {\n\t\t\t\tthis.removeListener(\"sequenceDelta\", transformOps);\n\t\t\t\t// shallow clone the message as we only overwrite top level properties,\n\t\t\t\t// like referenceSequenceNumber and content only\n\t\t\t\tstashMessage = {\n\t\t\t\t\t...message,\n\t\t\t\t\treferenceSequenceNumber: stashMessage.sequenceNumber - 1,\n\t\t\t\t\tcontents: ops.length !== 1 ? createGroupOp(...ops) : ops[0],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.messagesSinceMSNChange.push(stashMessage);\n\n\t\t\t// Do GC every once in a while...\n\t\t\tif (\n\t\t\t\tthis.messagesSinceMSNChange.length > 20 &&\n\t\t\t\tthis.messagesSinceMSNChange[20].sequenceNumber < message.minimumSequenceNumber\n\t\t\t) {\n\t\t\t\tthis.processMinSequenceNumberChanged(message.minimumSequenceNumber);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate processMinSequenceNumberChanged(minSeq: number) {\n\t\tlet index = 0;\n\t\tfor (; index < this.messagesSinceMSNChange.length; index++) {\n\t\t\tif (this.messagesSinceMSNChange[index].sequenceNumber > minSeq) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (index !== 0) {\n\t\t\tthis.messagesSinceMSNChange = this.messagesSinceMSNChange.slice(index);\n\t\t}\n\t}\n\n\tprivate initializeIntervalCollections() {\n\t\t// Listen and initialize new SharedIntervalCollections\n\t\tthis.intervalCollections.events.on(\n\t\t\t\"createIntervalCollection\",\n\t\t\t(key: string, local: boolean) => {\n\t\t\t\tconst intervalCollection = this.intervalCollections.get(key);\n\t\t\t\tif (!intervalCollection.attached) {\n\t\t\t\t\tintervalCollection.attachGraph(this.client, key);\n\t\t\t\t}\n\t\t\t\tthis.emit(\"createIntervalCollection\", key, local, this);\n\t\t\t},\n\t\t);\n\n\t\t// Initialize existing SharedIntervalCollections\n\t\tfor (const key of this.intervalCollections.keys()) {\n\t\t\tconst intervalCollection = this.intervalCollections.get(key);\n\t\t\tintervalCollection.attachGraph(this.client, key);\n\t\t}\n\t}\n\n\t/**\n\t * Overrides the \"currently applicable reference sequence number\" for the duration of the callback.\n\t * See remarks on `currentRefSeq` for more context.\n\t */\n\tprivate useResubmitRefSeq(refSeq: number, callback: () => void) {\n\t\tconst previousResubmitRefSeq = this.ongoingResubmitRefSeq;\n\t\tthis.ongoingResubmitRefSeq = refSeq;\n\t\ttry {\n\t\t\tcallback();\n\t\t} finally {\n\t\t\tthis.ongoingResubmitRefSeq = previousResubmitRefSeq;\n\t\t}\n\t}\n}\n\nfunction createReentrancyDetector(\n\tonReentrancy: (depth: number) => void,\n): <T>(callback: () => T) => T {\n\tlet depth = 0;\n\tfunction detectReentrancy<T>(callback: () => T): T {\n\t\tif (depth > 0) {\n\t\t\tonReentrancy(depth);\n\t\t}\n\t\tdepth++;\n\t\ttry {\n\t\t\treturn callback();\n\t\t} finally {\n\t\t\tdepth--;\n\t\t}\n\t}\n\n\treturn detectReentrancy;\n}\n\n/**\n * Apps which generate reentrant behavior may do so at a high frequency.\n * Logging even per-SharedSegmentSequence instance might be too noisy, and having a few logs from a session\n * is likely enough.\n */\nlet totalReentrancyLogs = 3;\n\n/**\n * Resets the reentrancy log counter. Test-only API.\n */\nexport function resetReentrancyLogCounter() {\n\ttotalReentrancyLogs = 3;\n}\n\nconst reentrancyErrorMessage = \"Reentrancy detected in sequence local ops\";\nconst ensureNoReentrancy = createReentrancyDetector(() => {\n\tthrow new LoggingError(reentrancyErrorMessage);\n});\n"]}
@@ -9,8 +9,7 @@ import { Client, IMergeTreeDeltaCallbackArgs, IMergeTreeDeltaOpArgs, IMergeTreeM
9
9
  * The properties of this object and its sub-objects represent the state of the sequence at the
10
10
  * point in time at which the operation was applied.
11
11
  * They will not take into any future modifications performed to the underlying sequence and merge tree.
12
- * @legacy
13
- * @alpha
12
+ * @legacy @beta
14
13
  */
15
14
  export interface SequenceEvent<TOperation extends MergeTreeDeltaOperationTypes = MergeTreeDeltaOperationTypes> {
16
15
  readonly deltaOperation: TOperation;
@@ -84,8 +83,7 @@ export declare abstract class SequenceEventClass<TOperation extends MergeTreeDel
84
83
  * For group ops, each op will get its own event, and the group op property will be set on the op args.
85
84
  *
86
85
  * Ops may get multiple events. For instance, an insert-replace will get a remove then an insert event.
87
- * @legacy
88
- * @alpha
86
+ * @legacy @beta
89
87
  */
90
88
  export interface SequenceDeltaEvent extends SequenceEvent<MergeTreeDeltaOperationType> {
91
89
  readonly opArgs: IMergeTreeDeltaOpArgs;
@@ -104,8 +102,7 @@ export declare class SequenceDeltaEventClass extends SequenceEventClass<MergeTre
104
102
  * The properties of this object and its sub-objects represent the state of the sequence at the
105
103
  * point in time at which the operation was applied.
106
104
  * They will not take into consideration any future modifications performed to the underlying sequence and merge tree.
107
- * @legacy
108
- * @alpha
105
+ * @legacy @beta
109
106
  */
110
107
  export interface SequenceMaintenanceEvent extends SequenceEvent<MergeTreeMaintenanceType> {
111
108
  readonly opArgs: IMergeTreeDeltaOpArgs | undefined;
@@ -127,8 +124,7 @@ export declare class SequenceMaintenanceEventClass extends SequenceEventClass<Me
127
124
  }
128
125
  /**
129
126
  * A range that has changed corresponding to a segment modification.
130
- * @legacy
131
- * @alpha
127
+ * @legacy @beta
132
128
  */
133
129
  export interface ISequenceDeltaRange<TOperation extends MergeTreeDeltaOperationTypes = MergeTreeDeltaOperationTypes> {
134
130
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"sequenceDeltaEvent.d.ts","sourceRoot":"","sources":["../src/sequenceDeltaEvent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sequenceDeltaEvent.d.ts","sourceRoot":"","sources":["../src/sequenceDeltaEvent.ts"],"names":[],"mappings":"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"}
@@ -12,9 +12,7 @@ class SequenceEventClass {
12
12
  /**
13
13
  * Arguments reflecting the type of change that caused this event.
14
14
  */
15
- deltaArgs,
16
- // eslint-disable-next-line import/no-deprecated
17
- mergeTreeClient) {
15
+ deltaArgs, mergeTreeClient) {
18
16
  this.opArgs = opArgs;
19
17
  this.deltaArgs = deltaArgs;
20
18
  this.mergeTreeClient = mergeTreeClient;
@@ -24,9 +22,7 @@ class SequenceEventClass {
24
22
  }
25
23
  this.deltaOperation = deltaArgs.operation;
26
24
  this.isLocal = opArgs?.sequencedMessage === undefined;
27
- // eslint-disable-next-line import/no-deprecated
28
25
  this.sortedRanges = new internal_1.Lazy(() => {
29
- // eslint-disable-next-line import/no-deprecated
30
26
  const set = new internal_2.SortedSegmentSet();
31
27
  this.deltaArgs.deltaSegments.forEach((delta) => {
32
28
  const newRange = {
@@ -73,9 +69,7 @@ class SequenceEventClass {
73
69
  }
74
70
  exports.SequenceEventClass = SequenceEventClass;
75
71
  class SequenceDeltaEventClass extends SequenceEventClass {
76
- constructor(opArgs, deltaArgs,
77
- // eslint-disable-next-line import/no-deprecated
78
- mergeTreeClient) {
72
+ constructor(opArgs, deltaArgs, mergeTreeClient) {
79
73
  super(opArgs, deltaArgs, mergeTreeClient);
80
74
  this.opArgs = opArgs;
81
75
  }
@@ -88,9 +82,7 @@ class SequenceMaintenanceEventClass extends SequenceEventClass {
88
82
  *
89
83
  * In that case, this argument provides information about the change which was acknowledged.
90
84
  */
91
- opArgs, deltaArgs,
92
- // eslint-disable-next-line import/no-deprecated
93
- mergeTreeClient) {
85
+ opArgs, deltaArgs, mergeTreeClient) {
94
86
  super(opArgs, deltaArgs, mergeTreeClient);
95
87
  this.opArgs = opArgs;
96
88
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sequenceDeltaEvent.js","sourceRoot":"","sources":["../src/sequenceDeltaEvent.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert, Lazy } from \"@fluidframework/core-utils/internal\";\nimport {\n\t// eslint-disable-next-line import/no-deprecated\n\tClient,\n\tIMergeTreeDeltaCallbackArgs,\n\tIMergeTreeDeltaOpArgs,\n\tIMergeTreeMaintenanceCallbackArgs,\n\tISegment,\n\tMergeTreeDeltaOperationType,\n\tMergeTreeDeltaOperationTypes,\n\tMergeTreeDeltaType,\n\tMergeTreeMaintenanceType,\n\tPropertySet, // eslint-disable-next-line import/no-deprecated\n\tSortedSegmentSet,\n} from \"@fluidframework/merge-tree/internal\";\n\n/**\n * Base class for SequenceDeltaEvent and SequenceMaintenanceEvent.\n *\n * The properties of this object and its sub-objects represent the state of the sequence at the\n * point in time at which the operation was applied.\n * They will not take into any future modifications performed to the underlying sequence and merge tree.\n * @legacy\n * @alpha\n */\nexport interface SequenceEvent<\n\tTOperation extends MergeTreeDeltaOperationTypes = MergeTreeDeltaOperationTypes,\n> {\n\treadonly deltaOperation: TOperation;\n\n\treadonly deltaArgs: IMergeTreeDeltaCallbackArgs<TOperation>;\n\t/**\n\t * The in-order ranges affected by this delta.\n\t * These are not necessarily contiguous.\n\t *\n\t * @remarks - If processing code doesn't care about the order of the ranges, it may instead consider using the\n\t * {@link @fluidframework/merge-tree#IMergeTreeDeltaCallbackArgs.deltaSegments|deltaSegments} field on {@link SequenceEvent.deltaArgs|deltaArgs}.\n\t */\n\treadonly ranges: readonly Readonly<ISequenceDeltaRange<TOperation>>[];\n\n\t/**\n\t * The client id of the client that made the change which caused the delta event\n\t */\n\treadonly clientId: string | undefined;\n\n\t/**\n\t * The first of the modified ranges.\n\t */\n\treadonly first: Readonly<ISequenceDeltaRange<TOperation>>;\n\n\t/**\n\t * The last of the modified ranges.\n\t */\n\treadonly last: Readonly<ISequenceDeltaRange<TOperation>>;\n}\nexport abstract class SequenceEventClass<\n\tTOperation extends MergeTreeDeltaOperationTypes = MergeTreeDeltaOperationTypes,\n> implements SequenceEvent<TOperation>\n{\n\tpublic readonly isLocal: boolean;\n\tpublic readonly deltaOperation: TOperation;\n\t// eslint-disable-next-line import/no-deprecated\n\tprivate readonly sortedRanges: Lazy<SortedSegmentSet<ISequenceDeltaRange<TOperation>>>;\n\tprivate readonly pFirst: Lazy<ISequenceDeltaRange<TOperation>>;\n\tprivate readonly pLast: Lazy<ISequenceDeltaRange<TOperation>>;\n\n\tconstructor(\n\t\tpublic readonly opArgs: IMergeTreeDeltaOpArgs | undefined,\n\t\t/**\n\t\t * Arguments reflecting the type of change that caused this event.\n\t\t */\n\t\tpublic readonly deltaArgs: IMergeTreeDeltaCallbackArgs<TOperation>,\n\t\t// eslint-disable-next-line import/no-deprecated\n\t\tprivate readonly mergeTreeClient: Client,\n\t) {\n\t\tif (\n\t\t\tdeltaArgs.operation !== MergeTreeDeltaType.OBLITERATE &&\n\t\t\tdeltaArgs.operation !== MergeTreeMaintenanceType.ACKNOWLEDGED\n\t\t) {\n\t\t\tassert(\n\t\t\t\tdeltaArgs.deltaSegments.length > 0,\n\t\t\t\t0x2d8 /* \"Empty change event should not be emitted.\" */,\n\t\t\t);\n\t\t}\n\t\tthis.deltaOperation = deltaArgs.operation;\n\t\tthis.isLocal = opArgs?.sequencedMessage === undefined;\n\n\t\t// eslint-disable-next-line import/no-deprecated\n\t\tthis.sortedRanges = new Lazy<SortedSegmentSet<ISequenceDeltaRange<TOperation>>>(() => {\n\t\t\t// eslint-disable-next-line import/no-deprecated\n\t\t\tconst set = new SortedSegmentSet<ISequenceDeltaRange<TOperation>>();\n\t\t\tthis.deltaArgs.deltaSegments.forEach((delta) => {\n\t\t\t\tconst newRange: ISequenceDeltaRange<TOperation> = {\n\t\t\t\t\toperation: this.deltaArgs.operation,\n\t\t\t\t\tposition: this.mergeTreeClient.getPosition(delta.segment),\n\t\t\t\t\tpropertyDeltas: delta.propertyDeltas ?? {},\n\t\t\t\t\tsegment: delta.segment,\n\t\t\t\t};\n\t\t\t\tset.addOrUpdate(newRange);\n\t\t\t});\n\t\t\treturn set;\n\t\t});\n\n\t\tthis.pFirst = new Lazy<ISequenceDeltaRange<TOperation>>(\n\t\t\t() => this.sortedRanges.value.items[0],\n\t\t);\n\n\t\tthis.pLast = new Lazy<ISequenceDeltaRange<TOperation>>(\n\t\t\t() => this.sortedRanges.value.items[this.sortedRanges.value.size - 1],\n\t\t);\n\t}\n\n\t/**\n\t * The in-order ranges affected by this delta.\n\t * These are not necessarily contiguous.\n\t *\n\t * @remarks - If processing code doesn't care about the order of the ranges, it may instead consider using the\n\t * {@link @fluidframework/merge-tree#IMergeTreeDeltaCallbackArgs.deltaSegments|deltaSegments} field on {@link SequenceEvent.deltaArgs|deltaArgs}.\n\t */\n\tpublic get ranges(): readonly Readonly<ISequenceDeltaRange<TOperation>>[] {\n\t\treturn this.sortedRanges.value.items;\n\t}\n\n\t/**\n\t * The client id of the client that made the change which caused the delta event\n\t */\n\tpublic get clientId(): string | undefined {\n\t\treturn this.mergeTreeClient.longClientId;\n\t}\n\n\t/**\n\t * The first of the modified ranges.\n\t */\n\tpublic get first(): Readonly<ISequenceDeltaRange<TOperation>> {\n\t\treturn this.pFirst.value;\n\t}\n\n\t/**\n\t * The last of the modified ranges.\n\t */\n\tpublic get last(): Readonly<ISequenceDeltaRange<TOperation>> {\n\t\treturn this.pLast.value;\n\t}\n}\n\n/**\n * The event object returned on sequenceDelta events.\n *\n * The properties of this object and its sub-objects represent the state of the sequence at the\n * point in time at which the operation was applied.\n * They will not take into consideration any future modifications performed to the underlying sequence and merge tree.\n *\n * For group ops, each op will get its own event, and the group op property will be set on the op args.\n *\n * Ops may get multiple events. For instance, an insert-replace will get a remove then an insert event.\n * @legacy\n * @alpha\n */\nexport interface SequenceDeltaEvent extends SequenceEvent<MergeTreeDeltaOperationType> {\n\treadonly opArgs: IMergeTreeDeltaOpArgs;\n\n\t/**\n\t * Whether the event was caused by a locally-made change.\n\t */\n\treadonly isLocal: boolean;\n}\nexport class SequenceDeltaEventClass\n\textends SequenceEventClass<MergeTreeDeltaOperationType>\n\timplements SequenceDeltaEvent\n{\n\tconstructor(\n\t\tpublic readonly opArgs: IMergeTreeDeltaOpArgs,\n\t\tdeltaArgs: IMergeTreeDeltaCallbackArgs,\n\t\t// eslint-disable-next-line import/no-deprecated\n\t\tmergeTreeClient: Client,\n\t) {\n\t\tsuper(opArgs, deltaArgs, mergeTreeClient);\n\t}\n}\n\n/**\n * The event object returned on maintenance events.\n *\n * The properties of this object and its sub-objects represent the state of the sequence at the\n * point in time at which the operation was applied.\n * They will not take into consideration any future modifications performed to the underlying sequence and merge tree.\n * @legacy\n * @alpha\n */\nexport interface SequenceMaintenanceEvent extends SequenceEvent<MergeTreeMaintenanceType> {\n\treadonly opArgs: IMergeTreeDeltaOpArgs | undefined;\n}\nexport class SequenceMaintenanceEventClass\n\textends SequenceEventClass<MergeTreeMaintenanceType>\n\timplements SequenceMaintenanceEvent\n{\n\tconstructor(\n\t\t/**\n\t\t * Defined iff `deltaArgs.operation` is {@link @fluidframework/merge-tree#MergeTreeMaintenanceType.ACKNOWLEDGED|MergeTreeMaintenanceType.ACKNOWLEDGED}.\n\t\t *\n\t\t * In that case, this argument provides information about the change which was acknowledged.\n\t\t */\n\t\tpublic readonly opArgs: IMergeTreeDeltaOpArgs | undefined,\n\t\tdeltaArgs: IMergeTreeMaintenanceCallbackArgs,\n\t\t// eslint-disable-next-line import/no-deprecated\n\t\tmergeTreeClient: Client,\n\t) {\n\t\tsuper(opArgs, deltaArgs, mergeTreeClient);\n\t}\n}\n\n/**\n * A range that has changed corresponding to a segment modification.\n * @legacy\n * @alpha\n */\nexport interface ISequenceDeltaRange<\n\tTOperation extends MergeTreeDeltaOperationTypes = MergeTreeDeltaOperationTypes,\n> {\n\t/**\n\t * The type of operation that changed this range.\n\t *\n\t * @remarks Consuming code should typically compare this to the enum values defined in\n\t * `MergeTreeDeltaOperationTypes`.\n\t */\n\toperation: TOperation;\n\n\t/**\n\t * The index of the start of the range.\n\t */\n\tposition: number;\n\n\t/**\n\t * The segment that corresponds to the range.\n\t */\n\tsegment: ISegment;\n\n\t/**\n\t * Deltas object which contains all modified properties with their previous values.\n\t * Since `undefined` doesn't survive a round-trip through JSON serialization, the old value being absent\n\t * is instead encoded with `null`.\n\t *\n\t * @remarks This object is motivated by undo/redo scenarios, and provides a convenient \"inverse op\" to apply to\n\t * undo a property change.\n\t *\n\t * @example\n\t *\n\t * If a segment initially had properties `{ foo: \"1\", bar: 2 }` and it was annotated with\n\t * `{ foo: 3, baz: 5 }`, the corresponding event would have a `propertyDeltas` of `{ foo: \"1\", baz: null }`.\n\t */\n\tpropertyDeltas: PropertySet;\n}\n"]}
1
+ {"version":3,"file":"sequenceDeltaEvent.js","sourceRoot":"","sources":["../src/sequenceDeltaEvent.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,kEAAmE;AACnE,kEAY6C;AAwC7C,MAAsB,kBAAkB;IAUvC,YACiB,MAAyC;IACzD;;OAEG;IACa,SAAkD,EACjD,eAAuB;QALxB,WAAM,GAAN,MAAM,CAAmC;QAIzC,cAAS,GAAT,SAAS,CAAyC;QACjD,oBAAe,GAAf,eAAe,CAAQ;QAExC,IACC,SAAS,CAAC,SAAS,KAAK,6BAAkB,CAAC,UAAU;YACrD,SAAS,CAAC,SAAS,KAAK,mCAAwB,CAAC,YAAY,EAC5D,CAAC;YACF,IAAA,iBAAM,EACL,SAAS,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAClC,KAAK,CAAC,iDAAiD,CACvD,CAAC;QACH,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,SAAS,CAAC;QAC1C,IAAI,CAAC,OAAO,GAAG,MAAM,EAAE,gBAAgB,KAAK,SAAS,CAAC;QAEtD,IAAI,CAAC,YAAY,GAAG,IAAI,eAAI,CAAoD,GAAG,EAAE;YACpF,MAAM,GAAG,GAAG,IAAI,2BAAgB,EAAmC,CAAC;YACpE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC9C,MAAM,QAAQ,GAAoC;oBACjD,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS;oBACnC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC;oBACzD,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,EAAE;oBAC1C,OAAO,EAAE,KAAK,CAAC,OAAO;iBACtB,CAAC;gBACF,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;YACH,OAAO,GAAG,CAAC;QACZ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,GAAG,IAAI,eAAI,CACrB,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CACtC,CAAC;QAEF,IAAI,CAAC,KAAK,GAAG,IAAI,eAAI,CACpB,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CACrE,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,IAAW,MAAM;QAChB,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,IAAW,QAAQ;QAClB,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,IAAW,IAAI;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IACzB,CAAC;CACD;AApFD,gDAoFC;AAsBD,MAAa,uBACZ,SAAQ,kBAA+C;IAGvD,YACiB,MAA6B,EAC7C,SAAsC,EACtC,eAAuB;QAEvB,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QAJ1B,WAAM,GAAN,MAAM,CAAuB;IAK9C,CAAC;CACD;AAXD,0DAWC;AAaD,MAAa,6BACZ,SAAQ,kBAA4C;IAGpD;IACC;;;;OAIG;IACa,MAAyC,EACzD,SAA4C,EAC5C,eAAuB;QAEvB,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QAJ1B,WAAM,GAAN,MAAM,CAAmC;IAK1D,CAAC;CACD;AAhBD,sEAgBC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert, Lazy } from \"@fluidframework/core-utils/internal\";\nimport {\n\tClient,\n\tIMergeTreeDeltaCallbackArgs,\n\tIMergeTreeDeltaOpArgs,\n\tIMergeTreeMaintenanceCallbackArgs,\n\tISegment,\n\tMergeTreeDeltaOperationType,\n\tMergeTreeDeltaOperationTypes,\n\tMergeTreeDeltaType,\n\tMergeTreeMaintenanceType,\n\tPropertySet,\n\tSortedSegmentSet,\n} from \"@fluidframework/merge-tree/internal\";\n\n/**\n * Base class for SequenceDeltaEvent and SequenceMaintenanceEvent.\n *\n * The properties of this object and its sub-objects represent the state of the sequence at the\n * point in time at which the operation was applied.\n * They will not take into any future modifications performed to the underlying sequence and merge tree.\n * @legacy @beta\n */\nexport interface SequenceEvent<\n\tTOperation extends MergeTreeDeltaOperationTypes = MergeTreeDeltaOperationTypes,\n> {\n\treadonly deltaOperation: TOperation;\n\n\treadonly deltaArgs: IMergeTreeDeltaCallbackArgs<TOperation>;\n\t/**\n\t * The in-order ranges affected by this delta.\n\t * These are not necessarily contiguous.\n\t *\n\t * @remarks - If processing code doesn't care about the order of the ranges, it may instead consider using the\n\t * {@link @fluidframework/merge-tree#IMergeTreeDeltaCallbackArgs.deltaSegments|deltaSegments} field on {@link SequenceEvent.deltaArgs|deltaArgs}.\n\t */\n\treadonly ranges: readonly Readonly<ISequenceDeltaRange<TOperation>>[];\n\n\t/**\n\t * The client id of the client that made the change which caused the delta event\n\t */\n\treadonly clientId: string | undefined;\n\n\t/**\n\t * The first of the modified ranges.\n\t */\n\treadonly first: Readonly<ISequenceDeltaRange<TOperation>>;\n\n\t/**\n\t * The last of the modified ranges.\n\t */\n\treadonly last: Readonly<ISequenceDeltaRange<TOperation>>;\n}\nexport abstract class SequenceEventClass<\n\tTOperation extends MergeTreeDeltaOperationTypes = MergeTreeDeltaOperationTypes,\n> implements SequenceEvent<TOperation>\n{\n\tpublic readonly isLocal: boolean;\n\tpublic readonly deltaOperation: TOperation;\n\tprivate readonly sortedRanges: Lazy<SortedSegmentSet<ISequenceDeltaRange<TOperation>>>;\n\tprivate readonly pFirst: Lazy<ISequenceDeltaRange<TOperation>>;\n\tprivate readonly pLast: Lazy<ISequenceDeltaRange<TOperation>>;\n\n\tconstructor(\n\t\tpublic readonly opArgs: IMergeTreeDeltaOpArgs | undefined,\n\t\t/**\n\t\t * Arguments reflecting the type of change that caused this event.\n\t\t */\n\t\tpublic readonly deltaArgs: IMergeTreeDeltaCallbackArgs<TOperation>,\n\t\tprivate readonly mergeTreeClient: Client,\n\t) {\n\t\tif (\n\t\t\tdeltaArgs.operation !== MergeTreeDeltaType.OBLITERATE &&\n\t\t\tdeltaArgs.operation !== MergeTreeMaintenanceType.ACKNOWLEDGED\n\t\t) {\n\t\t\tassert(\n\t\t\t\tdeltaArgs.deltaSegments.length > 0,\n\t\t\t\t0x2d8 /* \"Empty change event should not be emitted.\" */,\n\t\t\t);\n\t\t}\n\t\tthis.deltaOperation = deltaArgs.operation;\n\t\tthis.isLocal = opArgs?.sequencedMessage === undefined;\n\n\t\tthis.sortedRanges = new Lazy<SortedSegmentSet<ISequenceDeltaRange<TOperation>>>(() => {\n\t\t\tconst set = new SortedSegmentSet<ISequenceDeltaRange<TOperation>>();\n\t\t\tthis.deltaArgs.deltaSegments.forEach((delta) => {\n\t\t\t\tconst newRange: ISequenceDeltaRange<TOperation> = {\n\t\t\t\t\toperation: this.deltaArgs.operation,\n\t\t\t\t\tposition: this.mergeTreeClient.getPosition(delta.segment),\n\t\t\t\t\tpropertyDeltas: delta.propertyDeltas ?? {},\n\t\t\t\t\tsegment: delta.segment,\n\t\t\t\t};\n\t\t\t\tset.addOrUpdate(newRange);\n\t\t\t});\n\t\t\treturn set;\n\t\t});\n\n\t\tthis.pFirst = new Lazy<ISequenceDeltaRange<TOperation>>(\n\t\t\t() => this.sortedRanges.value.items[0],\n\t\t);\n\n\t\tthis.pLast = new Lazy<ISequenceDeltaRange<TOperation>>(\n\t\t\t() => this.sortedRanges.value.items[this.sortedRanges.value.size - 1],\n\t\t);\n\t}\n\n\t/**\n\t * The in-order ranges affected by this delta.\n\t * These are not necessarily contiguous.\n\t *\n\t * @remarks - If processing code doesn't care about the order of the ranges, it may instead consider using the\n\t * {@link @fluidframework/merge-tree#IMergeTreeDeltaCallbackArgs.deltaSegments|deltaSegments} field on {@link SequenceEvent.deltaArgs|deltaArgs}.\n\t */\n\tpublic get ranges(): readonly Readonly<ISequenceDeltaRange<TOperation>>[] {\n\t\treturn this.sortedRanges.value.items;\n\t}\n\n\t/**\n\t * The client id of the client that made the change which caused the delta event\n\t */\n\tpublic get clientId(): string | undefined {\n\t\treturn this.mergeTreeClient.longClientId;\n\t}\n\n\t/**\n\t * The first of the modified ranges.\n\t */\n\tpublic get first(): Readonly<ISequenceDeltaRange<TOperation>> {\n\t\treturn this.pFirst.value;\n\t}\n\n\t/**\n\t * The last of the modified ranges.\n\t */\n\tpublic get last(): Readonly<ISequenceDeltaRange<TOperation>> {\n\t\treturn this.pLast.value;\n\t}\n}\n\n/**\n * The event object returned on sequenceDelta events.\n *\n * The properties of this object and its sub-objects represent the state of the sequence at the\n * point in time at which the operation was applied.\n * They will not take into consideration any future modifications performed to the underlying sequence and merge tree.\n *\n * For group ops, each op will get its own event, and the group op property will be set on the op args.\n *\n * Ops may get multiple events. For instance, an insert-replace will get a remove then an insert event.\n * @legacy @beta\n */\nexport interface SequenceDeltaEvent extends SequenceEvent<MergeTreeDeltaOperationType> {\n\treadonly opArgs: IMergeTreeDeltaOpArgs;\n\n\t/**\n\t * Whether the event was caused by a locally-made change.\n\t */\n\treadonly isLocal: boolean;\n}\nexport class SequenceDeltaEventClass\n\textends SequenceEventClass<MergeTreeDeltaOperationType>\n\timplements SequenceDeltaEvent\n{\n\tconstructor(\n\t\tpublic readonly opArgs: IMergeTreeDeltaOpArgs,\n\t\tdeltaArgs: IMergeTreeDeltaCallbackArgs,\n\t\tmergeTreeClient: Client,\n\t) {\n\t\tsuper(opArgs, deltaArgs, mergeTreeClient);\n\t}\n}\n\n/**\n * The event object returned on maintenance events.\n *\n * The properties of this object and its sub-objects represent the state of the sequence at the\n * point in time at which the operation was applied.\n * They will not take into consideration any future modifications performed to the underlying sequence and merge tree.\n * @legacy @beta\n */\nexport interface SequenceMaintenanceEvent extends SequenceEvent<MergeTreeMaintenanceType> {\n\treadonly opArgs: IMergeTreeDeltaOpArgs | undefined;\n}\nexport class SequenceMaintenanceEventClass\n\textends SequenceEventClass<MergeTreeMaintenanceType>\n\timplements SequenceMaintenanceEvent\n{\n\tconstructor(\n\t\t/**\n\t\t * Defined iff `deltaArgs.operation` is {@link @fluidframework/merge-tree#MergeTreeMaintenanceType.ACKNOWLEDGED|MergeTreeMaintenanceType.ACKNOWLEDGED}.\n\t\t *\n\t\t * In that case, this argument provides information about the change which was acknowledged.\n\t\t */\n\t\tpublic readonly opArgs: IMergeTreeDeltaOpArgs | undefined,\n\t\tdeltaArgs: IMergeTreeMaintenanceCallbackArgs,\n\t\tmergeTreeClient: Client,\n\t) {\n\t\tsuper(opArgs, deltaArgs, mergeTreeClient);\n\t}\n}\n\n/**\n * A range that has changed corresponding to a segment modification.\n * @legacy @beta\n */\nexport interface ISequenceDeltaRange<\n\tTOperation extends MergeTreeDeltaOperationTypes = MergeTreeDeltaOperationTypes,\n> {\n\t/**\n\t * The type of operation that changed this range.\n\t *\n\t * @remarks Consuming code should typically compare this to the enum values defined in\n\t * `MergeTreeDeltaOperationTypes`.\n\t */\n\toperation: TOperation;\n\n\t/**\n\t * The index of the start of the range.\n\t */\n\tposition: number;\n\n\t/**\n\t * The segment that corresponds to the range.\n\t */\n\tsegment: ISegment;\n\n\t/**\n\t * Deltas object which contains all modified properties with their previous values.\n\t * Since `undefined` doesn't survive a round-trip through JSON serialization, the old value being absent\n\t * is instead encoded with `null`.\n\t *\n\t * @remarks This object is motivated by undo/redo scenarios, and provides a convenient \"inverse op\" to apply to\n\t * undo a property change.\n\t *\n\t * @example\n\t *\n\t * If a segment initially had properties `{ foo: \"1\", bar: 2 }` and it was annotated with\n\t * `{ foo: 3, baz: 5 }`, the corresponding event would have a `propertyDeltas` of `{ foo: \"1\", baz: null }`.\n\t */\n\tpropertyDeltas: PropertySet;\n}\n"]}
@@ -21,14 +21,12 @@ export declare class SharedStringFactory implements IChannelFactory<ISharedStrin
21
21
  }
22
22
  /**
23
23
  * Entrypoint for {@link ISharedString} creation.
24
- * @legacy
25
- * @alpha
24
+ * @legacy @beta
26
25
  */
27
26
  export declare const SharedString: import("@fluidframework/shared-object-base/internal").ISharedObjectKind<ISharedString> & import("@fluidframework/shared-object-base/internal").SharedObjectKind<ISharedString>;
28
27
  /**
29
28
  * Alias for {@link ISharedString} for compatibility.
30
- * @legacy
31
- * @alpha
29
+ * @legacy @beta
32
30
  */
33
31
  export type SharedString = ISharedString;
34
32
  //# sourceMappingURL=sequenceFactory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sequenceFactory.d.ts","sourceRoot":"","sources":["../src/sequenceFactory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,MAAM,gDAAgD,CAAC;AAMxD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE/F,qBAAa,mBAAoB,YAAW,eAAe,CAAC,aAAa,CAAC;IAGzE,OAAc,IAAI,SAAiD;IAEnE,gBAAuB,UAAU,EAAE,kBAAkB,CAInD;WAEY,eAAe,CAAC,IAAI,EAAE,GAAG,GAAG,mBAAmB;IAc7D,IAAW,IAAI,WAEd;IAED,IAAW,UAAU,uBAEpB;IAED;;OAEG;IACU,IAAI,CAChB,OAAO,EAAE,sBAAsB,EAC/B,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,gBAAgB,EAC1B,UAAU,EAAE,kBAAkB,GAE5B,OAAO,CAAC,iBAAiB,CAAC;IAO7B;;OAEG;IAEI,MAAM,CAAC,QAAQ,EAAE,sBAAsB,EAAE,EAAE,EAAE,MAAM,GAAG,iBAAiB;CAM9E;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,gLAA6D,CAAC;AAEvF;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,aAAa,CAAC"}
1
+ {"version":3,"file":"sequenceFactory.d.ts","sourceRoot":"","sources":["../src/sequenceFactory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,MAAM,gDAAgD,CAAC;AAKxD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE/F,qBAAa,mBAAoB,YAAW,eAAe,CAAC,aAAa,CAAC;IAGzE,OAAc,IAAI,SAAiD;IAEnE,gBAAuB,UAAU,EAAE,kBAAkB,CAInD;WAEY,eAAe,CAAC,IAAI,EAAE,GAAG,GAAG,mBAAmB;IAc7D,IAAW,IAAI,WAEd;IAED,IAAW,UAAU,uBAEpB;IAED;;OAEG;IACU,IAAI,CAChB,OAAO,EAAE,sBAAsB,EAC/B,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,gBAAgB,EAC1B,UAAU,EAAE,kBAAkB,GAC5B,OAAO,CAAC,iBAAiB,CAAC;IAM7B;;OAEG;IACI,MAAM,CAAC,QAAQ,EAAE,sBAAsB,EAAE,EAAE,EAAE,MAAM,GAAG,iBAAiB;CAK9E;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,gLAA6D,CAAC;AAEvF;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,aAAa,CAAC"}
@@ -8,7 +8,6 @@ exports.SharedString = exports.SharedStringFactory = void 0;
8
8
  const internal_1 = require("@fluidframework/merge-tree/internal");
9
9
  const internal_2 = require("@fluidframework/shared-object-base/internal");
10
10
  const packageVersion_js_1 = require("./packageVersion.js");
11
- // eslint-disable-next-line import/no-deprecated
12
11
  const sharedString_js_1 = require("./sharedString.js");
13
12
  class SharedStringFactory {
14
13
  static segmentFromSpec(spec) {
@@ -32,7 +31,6 @@ class SharedStringFactory {
32
31
  * {@inheritDoc @fluidframework/datastore-definitions#IChannelFactory.load}
33
32
  */
34
33
  async load(runtime, id, services, attributes) {
35
- // eslint-disable-next-line import/no-deprecated
36
34
  const sharedString = new sharedString_js_1.SharedStringClass(runtime, id, attributes);
37
35
  await sharedString.load(services);
38
36
  return sharedString;
@@ -40,9 +38,7 @@ class SharedStringFactory {
40
38
  /**
41
39
  * {@inheritDoc @fluidframework/datastore-definitions#IChannelFactory.create}
42
40
  */
43
- // eslint-disable-next-line import/no-deprecated
44
41
  create(document, id) {
45
- // eslint-disable-next-line import/no-deprecated
46
42
  const sharedString = new sharedString_js_1.SharedStringClass(document, id, this.attributes);
47
43
  sharedString.initializeLocal();
48
44
  return sharedString;
@@ -59,8 +55,7 @@ SharedStringFactory.Attributes = {
59
55
  };
60
56
  /**
61
57
  * Entrypoint for {@link ISharedString} creation.
62
- * @legacy
63
- * @alpha
58
+ * @legacy @beta
64
59
  */
65
60
  exports.SharedString = (0, internal_2.createSharedObjectKind)(SharedStringFactory);
66
61
  //# sourceMappingURL=sequenceFactory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sequenceFactory.js","sourceRoot":"","sources":["../src/sequenceFactory.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAQH,kEAA0E;AAC1E,0EAAqF;AAErF,2DAAiD;AACjD,gDAAgD;AAChD,uDAA+F;AAE/F,MAAa,mBAAmB;IAWxB,MAAM,CAAC,eAAe,CAAC,IAAS;QACtC,MAAM,SAAS,GAAG,sBAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,SAAS,EAAE,CAAC;YACf,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,MAAM,WAAW,GAAG,iBAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,WAAW,EAAE,CAAC;YACjB,OAAO,WAAW,CAAC;QACpB,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC7C,CAAC;IAED,IAAW,IAAI;QACd,OAAO,mBAAmB,CAAC,IAAI,CAAC;IACjC,CAAC;IAED,IAAW,UAAU;QACpB,OAAO,mBAAmB,CAAC,UAAU,CAAC;IACvC,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,IAAI,CAChB,OAA+B,EAC/B,EAAU,EACV,QAA0B,EAC1B,UAA8B;QAG9B,gDAAgD;QAChD,MAAM,YAAY,GAAG,IAAI,mCAAiB,CAAC,OAAO,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;QACpE,MAAM,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,OAAO,YAAY,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,gDAAgD;IACzC,MAAM,CAAC,QAAgC,EAAE,EAAU;QACzD,gDAAgD;QAChD,MAAM,YAAY,GAAG,IAAI,mCAAiB,CAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1E,YAAY,CAAC,eAAe,EAAE,CAAC;QAC/B,OAAO,YAAY,CAAC;IACrB,CAAC;;AA1DF,kDA2DC;AA1DA,+GAA+G;AAC/G,gEAAgE;AAClD,wBAAI,GAAG,6CAA6C,CAAC;AAE5C,8BAAU,GAAuB;IACvD,IAAI,EAAE,mBAAmB,CAAC,IAAI;IAC9B,qBAAqB,EAAE,KAAK;IAC5B,cAAc,EAAE,8BAAU;CAC1B,CAAC;AAoDH;;;;GAIG;AACU,QAAA,YAAY,GAAG,IAAA,iCAAsB,EAAgB,mBAAmB,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n\tIChannelAttributes,\n\tIChannelFactory,\n\tIFluidDataStoreRuntime,\n\tIChannelServices,\n} from \"@fluidframework/datastore-definitions/internal\";\nimport { Marker, TextSegment } from \"@fluidframework/merge-tree/internal\";\nimport { createSharedObjectKind } from \"@fluidframework/shared-object-base/internal\";\n\nimport { pkgVersion } from \"./packageVersion.js\";\n// eslint-disable-next-line import/no-deprecated\nimport { SharedStringClass, SharedStringSegment, type ISharedString } from \"./sharedString.js\";\n\nexport class SharedStringFactory implements IChannelFactory<ISharedString> {\n\t// TODO rename back to https://graph.microsoft.com/types/mergeTree/string once paparazzi is able to dynamically\n\t// load code (UPDATE: paparazzi is gone... anything to do here?)\n\tpublic static Type = \"https://graph.microsoft.com/types/mergeTree\";\n\n\tpublic static readonly Attributes: IChannelAttributes = {\n\t\ttype: SharedStringFactory.Type,\n\t\tsnapshotFormatVersion: \"0.1\",\n\t\tpackageVersion: pkgVersion,\n\t};\n\n\tpublic static segmentFromSpec(spec: any): SharedStringSegment {\n\t\tconst maybeText = TextSegment.fromJSONObject(spec);\n\t\tif (maybeText) {\n\t\t\treturn maybeText;\n\t\t}\n\n\t\tconst maybeMarker = Marker.fromJSONObject(spec);\n\t\tif (maybeMarker) {\n\t\t\treturn maybeMarker;\n\t\t}\n\n\t\tthrow new Error(`Unrecognized IJSONObject`);\n\t}\n\n\tpublic get type() {\n\t\treturn SharedStringFactory.Type;\n\t}\n\n\tpublic get attributes() {\n\t\treturn SharedStringFactory.Attributes;\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/datastore-definitions#IChannelFactory.load}\n\t */\n\tpublic async load(\n\t\truntime: IFluidDataStoreRuntime,\n\t\tid: string,\n\t\tservices: IChannelServices,\n\t\tattributes: IChannelAttributes,\n\t\t// eslint-disable-next-line import/no-deprecated\n\t): Promise<SharedStringClass> {\n\t\t// eslint-disable-next-line import/no-deprecated\n\t\tconst sharedString = new SharedStringClass(runtime, id, attributes);\n\t\tawait sharedString.load(services);\n\t\treturn sharedString;\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/datastore-definitions#IChannelFactory.create}\n\t */\n\t// eslint-disable-next-line import/no-deprecated\n\tpublic create(document: IFluidDataStoreRuntime, id: string): SharedStringClass {\n\t\t// eslint-disable-next-line import/no-deprecated\n\t\tconst sharedString = new SharedStringClass(document, id, this.attributes);\n\t\tsharedString.initializeLocal();\n\t\treturn sharedString;\n\t}\n}\n\n/**\n * Entrypoint for {@link ISharedString} creation.\n * @legacy\n * @alpha\n */\nexport const SharedString = createSharedObjectKind<ISharedString>(SharedStringFactory);\n\n/**\n * Alias for {@link ISharedString} for compatibility.\n * @legacy\n * @alpha\n */\nexport type SharedString = ISharedString;\n"]}
1
+ {"version":3,"file":"sequenceFactory.js","sourceRoot":"","sources":["../src/sequenceFactory.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAQH,kEAA0E;AAC1E,0EAAqF;AAErF,2DAAiD;AACjD,uDAA+F;AAE/F,MAAa,mBAAmB;IAWxB,MAAM,CAAC,eAAe,CAAC,IAAS;QACtC,MAAM,SAAS,GAAG,sBAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,SAAS,EAAE,CAAC;YACf,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,MAAM,WAAW,GAAG,iBAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,WAAW,EAAE,CAAC;YACjB,OAAO,WAAW,CAAC;QACpB,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC7C,CAAC;IAED,IAAW,IAAI;QACd,OAAO,mBAAmB,CAAC,IAAI,CAAC;IACjC,CAAC;IAED,IAAW,UAAU;QACpB,OAAO,mBAAmB,CAAC,UAAU,CAAC;IACvC,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,IAAI,CAChB,OAA+B,EAC/B,EAAU,EACV,QAA0B,EAC1B,UAA8B;QAE9B,MAAM,YAAY,GAAG,IAAI,mCAAiB,CAAC,OAAO,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;QACpE,MAAM,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,OAAO,YAAY,CAAC;IACrB,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,QAAgC,EAAE,EAAU;QACzD,MAAM,YAAY,GAAG,IAAI,mCAAiB,CAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1E,YAAY,CAAC,eAAe,EAAE,CAAC;QAC/B,OAAO,YAAY,CAAC;IACrB,CAAC;;AAtDF,kDAuDC;AAtDA,+GAA+G;AAC/G,gEAAgE;AAClD,wBAAI,GAAG,6CAA6C,CAAC;AAE5C,8BAAU,GAAuB;IACvD,IAAI,EAAE,mBAAmB,CAAC,IAAI;IAC9B,qBAAqB,EAAE,KAAK;IAC5B,cAAc,EAAE,8BAAU;CAC1B,CAAC;AAgDH;;;GAGG;AACU,QAAA,YAAY,GAAG,IAAA,iCAAsB,EAAgB,mBAAmB,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n\tIChannelAttributes,\n\tIChannelFactory,\n\tIFluidDataStoreRuntime,\n\tIChannelServices,\n} from \"@fluidframework/datastore-definitions/internal\";\nimport { Marker, TextSegment } from \"@fluidframework/merge-tree/internal\";\nimport { createSharedObjectKind } from \"@fluidframework/shared-object-base/internal\";\n\nimport { pkgVersion } from \"./packageVersion.js\";\nimport { SharedStringClass, SharedStringSegment, type ISharedString } from \"./sharedString.js\";\n\nexport class SharedStringFactory implements IChannelFactory<ISharedString> {\n\t// TODO rename back to https://graph.microsoft.com/types/mergeTree/string once paparazzi is able to dynamically\n\t// load code (UPDATE: paparazzi is gone... anything to do here?)\n\tpublic static Type = \"https://graph.microsoft.com/types/mergeTree\";\n\n\tpublic static readonly Attributes: IChannelAttributes = {\n\t\ttype: SharedStringFactory.Type,\n\t\tsnapshotFormatVersion: \"0.1\",\n\t\tpackageVersion: pkgVersion,\n\t};\n\n\tpublic static segmentFromSpec(spec: any): SharedStringSegment {\n\t\tconst maybeText = TextSegment.fromJSONObject(spec);\n\t\tif (maybeText) {\n\t\t\treturn maybeText;\n\t\t}\n\n\t\tconst maybeMarker = Marker.fromJSONObject(spec);\n\t\tif (maybeMarker) {\n\t\t\treturn maybeMarker;\n\t\t}\n\n\t\tthrow new Error(`Unrecognized IJSONObject`);\n\t}\n\n\tpublic get type() {\n\t\treturn SharedStringFactory.Type;\n\t}\n\n\tpublic get attributes() {\n\t\treturn SharedStringFactory.Attributes;\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/datastore-definitions#IChannelFactory.load}\n\t */\n\tpublic async load(\n\t\truntime: IFluidDataStoreRuntime,\n\t\tid: string,\n\t\tservices: IChannelServices,\n\t\tattributes: IChannelAttributes,\n\t): Promise<SharedStringClass> {\n\t\tconst sharedString = new SharedStringClass(runtime, id, attributes);\n\t\tawait sharedString.load(services);\n\t\treturn sharedString;\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/datastore-definitions#IChannelFactory.create}\n\t */\n\tpublic create(document: IFluidDataStoreRuntime, id: string): SharedStringClass {\n\t\tconst sharedString = new SharedStringClass(document, id, this.attributes);\n\t\tsharedString.initializeLocal();\n\t\treturn sharedString;\n\t}\n}\n\n/**\n * Entrypoint for {@link ISharedString} creation.\n * @legacy @beta\n */\nexport const SharedString = createSharedObjectKind<ISharedString>(SharedStringFactory);\n\n/**\n * Alias for {@link ISharedString} for compatibility.\n * @legacy @beta\n */\nexport type SharedString = ISharedString;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"sharedSequence.d.ts","sourceRoot":"","sources":["../src/sharedSequence.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACN,kBAAkB,EAClB,sBAAsB,EACtB,YAAY,EACZ,MAAM,gDAAgD,CAAC;AACxD,OAAO,EACN,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,MAAM,qCAAqC,CAAC;AAG7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAItD;;;GAGG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC,CAAE,SAAQ,YAAY;IACvD,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;CACzB;AAED;;;GAGG;AACH,qBAAa,WAAW,CAAC,CAAC,CAAE,SAAQ,WAAW;IAetC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE;IAdhC,gBAAuB,UAAU,EAAE,MAAM,CAAiB;WAC5C,EAAE,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,IAAI,WAAW,CAAC,GAAG,CAAC;WAGlD,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG;IAOzC,SAAgB,IAAI,SAA0B;gBAGtC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,EAC/B,KAAK,CAAC,EAAE,WAAW;IAMb,YAAY;IAMZ,KAAK,CAAC,KAAK,SAAI,EAAE,GAAG,CAAC,EAAE,MAAM;IAO7B,SAAS,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO;IAOrC,QAAQ;IAIR,MAAM,CAAC,OAAO,EAAE,QAAQ;IAWxB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAc7C,SAAS,CAAC,oBAAoB,CAAC,GAAG,EAAE,MAAM;CAS1C;AAED;;;GAGG;AAEH,qBAAa,cAAc,CAAC,CAAC,CAAE,SAAQ,qBAAqB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAGnE,EAAE,EAAE,MAAM;gBADjB,QAAQ,EAAE,sBAAsB,EACzB,EAAE,EAAE,MAAM,EACjB,UAAU,EAAE,kBAAkB,EAC9B,aAAa,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,QAAQ;IAKhD;;;;OAIG;IACI,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,WAAW;IAKxE;;;OAGG;IACI,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAIxC;;OAEG;IACI,YAAY,IAAI,MAAM;IAI7B;;;;;OAKG;IACI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE;CAuC/D"}
1
+ {"version":3,"file":"sharedSequence.d.ts","sourceRoot":"","sources":["../src/sharedSequence.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACN,kBAAkB,EAClB,sBAAsB,EACtB,YAAY,EACZ,MAAM,gDAAgD,CAAC;AACxD,OAAO,EACN,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAItD;;;GAGG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC,CAAE,SAAQ,YAAY;IACvD,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;CACzB;AAED;;;GAGG;AACH,qBAAa,WAAW,CAAC,CAAC,CAAE,SAAQ,WAAW;IAetC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE;IAdhC,gBAAuB,UAAU,EAAE,MAAM,CAAiB;WAC5C,EAAE,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,IAAI,WAAW,CAAC,GAAG,CAAC;WAGlD,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG;IAOzC,SAAgB,IAAI,SAA0B;gBAGtC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,EAC/B,KAAK,CAAC,EAAE,WAAW;IAMb,YAAY;IAMZ,KAAK,CAAC,KAAK,SAAI,EAAE,GAAG,CAAC,EAAE,MAAM;IAO7B,SAAS,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO;IAOrC,QAAQ;IAIR,MAAM,CAAC,OAAO,EAAE,QAAQ;IAWxB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAc7C,SAAS,CAAC,oBAAoB,CAAC,GAAG,EAAE,MAAM;CAS1C;AAED;;;GAGG;AACH,qBAAa,cAAc,CAAC,CAAC,CAAE,SAAQ,qBAAqB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAGnE,EAAE,EAAE,MAAM;gBADjB,QAAQ,EAAE,sBAAsB,EACzB,EAAE,EAAE,MAAM,EACjB,UAAU,EAAE,kBAAkB,EAC9B,aAAa,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,QAAQ;IAKhD;;;;OAIG;IACI,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,WAAW;IAKxE;;;OAGG;IACI,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAIxC;;OAEG;IACI,YAAY,IAAI,MAAM;IAI7B;;;;;OAKG;IACI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE;CAuC/D"}
@@ -7,7 +7,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.SharedSequence = exports.SubSequence = void 0;
8
8
  const internal_1 = require("@fluidframework/core-utils/internal");
9
9
  const internal_2 = require("@fluidframework/merge-tree/internal");
10
- // eslint-disable-next-line import/no-deprecated
11
10
  const sequence_js_1 = require("./sequence.js");
12
11
  const MaxRun = 128;
13
12
  /**
@@ -87,7 +86,6 @@ SubSequence.typeString = "SubSequence";
87
86
  * @deprecated SharedSequence will be removed in a upcoming release. It has been moved to the fluid-experimental/sequence-deprecated package
88
87
  * @internal
89
88
  */
90
- // eslint-disable-next-line import/no-deprecated
91
89
  class SharedSequence extends sequence_js_1.SharedSegmentSequence {
92
90
  constructor(document, id, attributes, specToSegment) {
93
91
  super(document, id, attributes, specToSegment);