@fluid-experimental/tree 1.2.6 → 2.0.0-dev.1.3.0.96595

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 (175) hide show
  1. package/.mocharc.js +12 -0
  2. package/.prettierignore +6 -0
  3. package/README.md +1 -1
  4. package/dist/Checkout.d.ts +9 -4
  5. package/dist/Checkout.d.ts.map +1 -1
  6. package/dist/Checkout.js +34 -25
  7. package/dist/Checkout.js.map +1 -1
  8. package/dist/Common.d.ts +31 -18
  9. package/dist/Common.d.ts.map +1 -1
  10. package/dist/Common.js +33 -22
  11. package/dist/Common.js.map +1 -1
  12. package/dist/EditLog.js +2 -2
  13. package/dist/EditLog.js.map +1 -1
  14. package/dist/EditUtilities.d.ts +5 -0
  15. package/dist/EditUtilities.d.ts.map +1 -1
  16. package/dist/EditUtilities.js +4 -3
  17. package/dist/EditUtilities.js.map +1 -1
  18. package/dist/EventTypes.d.ts +11 -6
  19. package/dist/EventTypes.d.ts.map +1 -1
  20. package/dist/EventTypes.js +11 -6
  21. package/dist/EventTypes.js.map +1 -1
  22. package/dist/HistoryEditFactory.d.ts +5 -3
  23. package/dist/HistoryEditFactory.d.ts.map +1 -1
  24. package/dist/HistoryEditFactory.js +25 -6
  25. package/dist/HistoryEditFactory.js.map +1 -1
  26. package/dist/LogViewer.d.ts +12 -6
  27. package/dist/LogViewer.d.ts.map +1 -1
  28. package/dist/LogViewer.js.map +1 -1
  29. package/dist/RevisionValueCache.d.ts +8 -4
  30. package/dist/RevisionValueCache.d.ts.map +1 -1
  31. package/dist/RevisionValueCache.js +4 -2
  32. package/dist/RevisionValueCache.js.map +1 -1
  33. package/dist/SharedTree.d.ts +22 -11
  34. package/dist/SharedTree.d.ts.map +1 -1
  35. package/dist/SharedTree.js +25 -19
  36. package/dist/SharedTree.js.map +1 -1
  37. package/dist/StringInterner.d.ts +4 -3
  38. package/dist/StringInterner.d.ts.map +1 -1
  39. package/dist/StringInterner.js +4 -3
  40. package/dist/StringInterner.js.map +1 -1
  41. package/dist/Transaction.d.ts +2 -2
  42. package/dist/Transaction.d.ts.map +1 -1
  43. package/dist/Transaction.js +3 -2
  44. package/dist/Transaction.js.map +1 -1
  45. package/dist/TransactionInternal.d.ts.map +1 -1
  46. package/dist/TransactionInternal.js +1 -0
  47. package/dist/TransactionInternal.js.map +1 -1
  48. package/dist/id-compressor/IdCompressor.d.ts +14 -8
  49. package/dist/id-compressor/IdCompressor.d.ts.map +1 -1
  50. package/dist/id-compressor/IdCompressor.js +36 -15
  51. package/dist/id-compressor/IdCompressor.js.map +1 -1
  52. package/dist/id-compressor/NumericUuid.d.ts +4 -0
  53. package/dist/id-compressor/NumericUuid.d.ts.map +1 -1
  54. package/dist/id-compressor/NumericUuid.js +13 -3
  55. package/dist/id-compressor/NumericUuid.js.map +1 -1
  56. package/dist/id-compressor/SessionIdNormalizer.d.ts +10 -5
  57. package/dist/id-compressor/SessionIdNormalizer.d.ts.map +1 -1
  58. package/dist/id-compressor/SessionIdNormalizer.js +10 -5
  59. package/dist/id-compressor/SessionIdNormalizer.js.map +1 -1
  60. package/dist/id-compressor/persisted-types/0.0.1.d.ts.map +1 -1
  61. package/dist/id-compressor/persisted-types/0.0.1.js.map +1 -1
  62. package/dist/index.d.ts +1 -1
  63. package/dist/index.js +1 -1
  64. package/dist/index.js.map +1 -1
  65. package/lib/Checkout.d.ts +9 -4
  66. package/lib/Checkout.d.ts.map +1 -1
  67. package/lib/Checkout.js +36 -27
  68. package/lib/Checkout.js.map +1 -1
  69. package/lib/Common.d.ts +31 -18
  70. package/lib/Common.d.ts.map +1 -1
  71. package/lib/Common.js +31 -21
  72. package/lib/Common.js.map +1 -1
  73. package/lib/EditLog.js +2 -2
  74. package/lib/EditLog.js.map +1 -1
  75. package/lib/EditUtilities.d.ts +5 -0
  76. package/lib/EditUtilities.d.ts.map +1 -1
  77. package/lib/EditUtilities.js +4 -3
  78. package/lib/EditUtilities.js.map +1 -1
  79. package/lib/EventTypes.d.ts +11 -6
  80. package/lib/EventTypes.d.ts.map +1 -1
  81. package/lib/EventTypes.js +11 -6
  82. package/lib/EventTypes.js.map +1 -1
  83. package/lib/HistoryEditFactory.d.ts +5 -3
  84. package/lib/HistoryEditFactory.d.ts.map +1 -1
  85. package/lib/HistoryEditFactory.js +25 -6
  86. package/lib/HistoryEditFactory.js.map +1 -1
  87. package/lib/LogViewer.d.ts +12 -6
  88. package/lib/LogViewer.d.ts.map +1 -1
  89. package/lib/LogViewer.js.map +1 -1
  90. package/lib/RevisionValueCache.d.ts +8 -4
  91. package/lib/RevisionValueCache.d.ts.map +1 -1
  92. package/lib/RevisionValueCache.js +4 -2
  93. package/lib/RevisionValueCache.js.map +1 -1
  94. package/lib/SharedTree.d.ts +22 -11
  95. package/lib/SharedTree.d.ts.map +1 -1
  96. package/lib/SharedTree.js +26 -20
  97. package/lib/SharedTree.js.map +1 -1
  98. package/lib/StringInterner.d.ts +4 -3
  99. package/lib/StringInterner.d.ts.map +1 -1
  100. package/lib/StringInterner.js +4 -3
  101. package/lib/StringInterner.js.map +1 -1
  102. package/lib/Transaction.d.ts +2 -2
  103. package/lib/Transaction.d.ts.map +1 -1
  104. package/lib/Transaction.js +3 -2
  105. package/lib/Transaction.js.map +1 -1
  106. package/lib/TransactionInternal.d.ts.map +1 -1
  107. package/lib/TransactionInternal.js +1 -0
  108. package/lib/TransactionInternal.js.map +1 -1
  109. package/lib/id-compressor/IdCompressor.d.ts +14 -8
  110. package/lib/id-compressor/IdCompressor.d.ts.map +1 -1
  111. package/lib/id-compressor/IdCompressor.js +36 -15
  112. package/lib/id-compressor/IdCompressor.js.map +1 -1
  113. package/lib/id-compressor/NumericUuid.d.ts +4 -0
  114. package/lib/id-compressor/NumericUuid.d.ts.map +1 -1
  115. package/lib/id-compressor/NumericUuid.js +13 -3
  116. package/lib/id-compressor/NumericUuid.js.map +1 -1
  117. package/lib/id-compressor/SessionIdNormalizer.d.ts +10 -5
  118. package/lib/id-compressor/SessionIdNormalizer.d.ts.map +1 -1
  119. package/lib/id-compressor/SessionIdNormalizer.js +10 -5
  120. package/lib/id-compressor/SessionIdNormalizer.js.map +1 -1
  121. package/lib/id-compressor/persisted-types/0.0.1.d.ts.map +1 -1
  122. package/lib/id-compressor/persisted-types/0.0.1.js.map +1 -1
  123. package/lib/index.d.ts +1 -1
  124. package/lib/index.js +1 -1
  125. package/lib/index.js.map +1 -1
  126. package/lib/test/AppendOnlySortedMap.perf.tests.js.map +1 -1
  127. package/lib/test/Checkout.tests.d.ts.map +1 -1
  128. package/lib/test/Checkout.tests.js +39 -10
  129. package/lib/test/Checkout.tests.js.map +1 -1
  130. package/lib/test/Common.tests.js +20 -1
  131. package/lib/test/Common.tests.js.map +1 -1
  132. package/lib/test/HistoryEditFactory.tests.js +48 -9
  133. package/lib/test/HistoryEditFactory.tests.js.map +1 -1
  134. package/lib/test/IdCompressor.tests.js +23 -0
  135. package/lib/test/IdCompressor.tests.js.map +1 -1
  136. package/lib/test/SessionIdNormalizer.tests.js +3 -2
  137. package/lib/test/SessionIdNormalizer.tests.js.map +1 -1
  138. package/lib/test/fuzz/Generators.d.ts.map +1 -1
  139. package/lib/test/fuzz/Generators.js.map +1 -1
  140. package/lib/test/fuzz/SharedTreeFuzzTests.d.ts.map +1 -1
  141. package/lib/test/fuzz/SharedTreeFuzzTests.js +2 -3
  142. package/lib/test/fuzz/SharedTreeFuzzTests.js.map +1 -1
  143. package/lib/test/utilities/MockTransaction.d.ts.map +1 -1
  144. package/lib/test/utilities/MockTransaction.js +1 -0
  145. package/lib/test/utilities/MockTransaction.js.map +1 -1
  146. package/lib/test/utilities/SharedTreeTests.d.ts.map +1 -1
  147. package/lib/test/utilities/SharedTreeTests.js +35 -26
  148. package/lib/test/utilities/SharedTreeTests.js.map +1 -1
  149. package/lib/test/utilities/SharedTreeVersioningTests.d.ts.map +1 -1
  150. package/lib/test/utilities/SharedTreeVersioningTests.js +7 -0
  151. package/lib/test/utilities/SharedTreeVersioningTests.js.map +1 -1
  152. package/lib/test/utilities/TestUtilities.d.ts +5 -0
  153. package/lib/test/utilities/TestUtilities.d.ts.map +1 -1
  154. package/lib/test/utilities/TestUtilities.js +4 -3
  155. package/lib/test/utilities/TestUtilities.js.map +1 -1
  156. package/lib/test/utilities/UndoRedoTests.js +3 -2
  157. package/lib/test/utilities/UndoRedoTests.js.map +1 -1
  158. package/package.json +28 -23
  159. package/src/Checkout.ts +56 -14
  160. package/src/Common.ts +39 -21
  161. package/src/EditLog.ts +2 -2
  162. package/src/EditUtilities.ts +3 -3
  163. package/src/EventTypes.ts +12 -6
  164. package/src/HistoryEditFactory.ts +31 -6
  165. package/src/LogViewer.ts +12 -6
  166. package/src/RevisionValueCache.ts +8 -4
  167. package/src/SharedTree.ts +39 -26
  168. package/src/StringInterner.ts +4 -3
  169. package/src/Transaction.ts +5 -4
  170. package/src/TransactionInternal.ts +1 -0
  171. package/src/id-compressor/IdCompressor.ts +55 -24
  172. package/src/id-compressor/NumericUuid.ts +17 -3
  173. package/src/id-compressor/SessionIdNormalizer.ts +10 -5
  174. package/src/id-compressor/persisted-types/0.0.1.ts +1 -0
  175. package/src/index.ts +1 -1
@@ -685,12 +685,23 @@ export function runSharedTreeOperationsTests(title, writeFormat, setUpTestShared
685
685
  });
686
686
  });
687
687
  describe('telemetry', () => {
688
+ class LoggerThatOnlySeesSharedTreeEvents {
689
+ constructor(additionalFilter = (e) => true) {
690
+ this.additionalFilter = additionalFilter;
691
+ this.events = [];
692
+ }
693
+ send(event) {
694
+ if (isSharedTreeEvent(event) && this.additionalFilter(event)) {
695
+ this.events.push(event);
696
+ }
697
+ }
698
+ }
688
699
  describe('useFailedSequencedEditTelemetry', () => {
689
700
  it('decorates events with the correct properties', async () => {
690
701
  // Test that a handle can wrap a node and retrieve that node's properties
691
- const events = [];
702
+ const logger = new LoggerThatOnlySeesSharedTreeEvents();
692
703
  const { sharedTree, testTree, containerRuntimeFactory } = createSimpleTestTree({
693
- logger: { send: (event) => events.push(event) },
704
+ logger,
694
705
  allowInvalid: true,
695
706
  });
696
707
  useFailedSequencedEditTelemetry(sharedTree);
@@ -699,68 +710,66 @@ export function runSharedTreeOperationsTests(title, writeFormat, setUpTestShared
699
710
  containerRuntimeFactory.processAllMessages();
700
711
  // Force demand, which will cause a telemetry event for the invalid edit to be emitted
701
712
  await sharedTree.logViewer.getRevisionView(Number.POSITIVE_INFINITY);
702
- expect(events.length).is.greaterThan(0);
703
- events.forEach((event) => {
713
+ expect(logger.events.length).is.greaterThan(0);
714
+ logger.events.forEach((event) => {
704
715
  expect(isSharedTreeEvent(event)).is.true;
705
716
  });
706
717
  });
707
718
  it('is logged for invalid locally generated edits when those edits are sequenced', async () => {
708
- const events = [];
719
+ const logger = new LoggerThatOnlySeesSharedTreeEvents((event) => !event.eventName.includes('IdCompressor'));
709
720
  const { sharedTree, testTree, containerRuntimeFactory } = createSimpleTestTree({
710
- logger: { send: (event) => !event.eventName.includes('IdCompressor') && events.push(event) },
721
+ logger,
711
722
  allowInvalid: true,
712
723
  });
713
724
  useFailedSequencedEditTelemetry(sharedTree);
714
725
  // Invalid edit
715
726
  sharedTree.applyEdit(...Change.insertTree([testTree.buildLeaf()], StablePlace.after(testTree.buildLeaf(testTree.generateNodeId()))));
716
- expect(events.length).equals(0);
727
+ expect(logger.events.length).equals(0);
717
728
  containerRuntimeFactory.processAllMessages();
718
729
  // Force demand, which will cause a telemetry event for the invalid edit to be emitted
719
730
  await sharedTree.logViewer.getRevisionView(Number.POSITIVE_INFINITY);
720
- expect(events.length).equals(1);
721
- expect(events[0].category).equals('generic');
722
- expect(events[0].eventName).equals('SharedTree:SequencedEditApplied:InvalidSharedTreeEdit');
731
+ expect(logger.events.length).equals(1);
732
+ expect(logger.events[0].category).equals('generic');
733
+ expect(logger.events[0].eventName).equals('SharedTree:SequencedEditApplied:InvalidSharedTreeEdit');
723
734
  });
724
735
  it('can be disabled and re-enabled', async () => {
725
- const events = [];
736
+ const logger = new LoggerThatOnlySeesSharedTreeEvents((event) => !event.eventName.includes('IdCompressor'));
726
737
  const { sharedTree, testTree, containerRuntimeFactory } = createSimpleTestTree({
727
- logger: { send: (event) => !event.eventName.includes('IdCompressor') && events.push(event) },
738
+ logger,
728
739
  allowInvalid: true,
729
740
  });
730
741
  const { disable } = useFailedSequencedEditTelemetry(sharedTree);
731
742
  sharedTree.applyEdit(...Change.insertTree([testTree.buildLeaf()], StablePlace.after(testTree.buildLeaf(testTree.generateNodeId()))));
732
- expect(events.length).equals(0);
743
+ expect(logger.events.length).equals(0);
733
744
  containerRuntimeFactory.processAllMessages();
734
745
  await sharedTree.logViewer.getRevisionView(Number.POSITIVE_INFINITY);
735
- expect(events.length).equals(1);
736
- expect(events[0].eventName).equals('SharedTree:SequencedEditApplied:InvalidSharedTreeEdit');
746
+ expect(logger.events.length).equals(1);
747
+ expect(logger.events[0].eventName).equals('SharedTree:SequencedEditApplied:InvalidSharedTreeEdit');
737
748
  disable();
738
749
  sharedTree.applyEdit(...Change.insertTree([testTree.buildLeaf()], StablePlace.after(testTree.buildLeaf(testTree.generateNodeId()))));
739
750
  containerRuntimeFactory.processAllMessages();
740
751
  await sharedTree.logViewer.getRevisionView(Number.POSITIVE_INFINITY);
741
- expect(events.length).equals(1);
752
+ expect(logger.events.length).equals(1);
742
753
  useFailedSequencedEditTelemetry(sharedTree);
743
754
  sharedTree.applyEdit(...Change.insertTree([testTree.buildLeaf()], StablePlace.after(testTree.buildLeaf(testTree.generateNodeId()))));
744
755
  containerRuntimeFactory.processAllMessages();
745
756
  await sharedTree.logViewer.getRevisionView(Number.POSITIVE_INFINITY);
746
- expect(events.length).equals(2);
747
- expect(events[1].eventName).equals('SharedTree:SequencedEditApplied:InvalidSharedTreeEdit');
757
+ expect(logger.events.length).equals(2);
758
+ expect(logger.events[1].eventName).equals('SharedTree:SequencedEditApplied:InvalidSharedTreeEdit');
748
759
  });
749
760
  it('is not logged for valid edits', async () => {
750
- const events = [];
751
- const { sharedTree, testTree, containerRuntimeFactory } = createSimpleTestTree({
752
- logger: { send: (event) => !event.eventName.includes('IdCompressor') && events.push(event) },
753
- });
761
+ const logger = new LoggerThatOnlySeesSharedTreeEvents((event) => !event.eventName.includes('IdCompressor'));
762
+ const { sharedTree, testTree, containerRuntimeFactory } = createSimpleTestTree({ logger });
754
763
  useFailedSequencedEditTelemetry(sharedTree);
755
764
  sharedTree.applyEdit(...Change.insertTree(testTree.buildLeaf(), StablePlace.after(testTree.left)));
756
765
  containerRuntimeFactory.processAllMessages();
757
766
  await sharedTree.logViewer.getRevisionView(Number.POSITIVE_INFINITY);
758
- expect(events.length).equals(0);
767
+ expect(logger.events.length).equals(0);
759
768
  });
760
769
  it('is not logged for remote edits', async () => {
761
- const events = [];
770
+ const logger = new LoggerThatOnlySeesSharedTreeEvents((event) => !event.eventName.includes('IdCompressor'));
762
771
  const { sharedTree: sharedTree1, containerRuntimeFactory } = createSimpleTestTree({
763
- logger: { send: (event) => !event.eventName.includes('IdCompressor') && events.push(event) },
772
+ logger,
764
773
  allowInvalid: true,
765
774
  localMode: false,
766
775
  });
@@ -773,7 +782,7 @@ export function runSharedTreeOperationsTests(title, writeFormat, setUpTestShared
773
782
  sharedTree2.applyEdit(...Change.insertTree([testTree2.buildLeaf()], StablePlace.after(testTree2.buildLeaf(testTree2.generateNodeId()))));
774
783
  containerRuntimeFactory.processAllMessages();
775
784
  await sharedTree1.logViewer.getRevisionView(Number.POSITIVE_INFINITY);
776
- expect(events.length).equals(0);
785
+ expect(logger.events.length).equals(0);
777
786
  });
778
787
  });
779
788
  });