@fluid-experimental/tree 0.58.2001 → 0.59.2000-61729
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.
- package/README.md +159 -46
- package/dist/ChangeCompression.d.ts +39 -0
- package/dist/ChangeCompression.d.ts.map +1 -0
- package/dist/ChangeCompression.js +117 -0
- package/dist/ChangeCompression.js.map +1 -0
- package/{lib/default-edits/PersistedTypes.d.ts → dist/ChangeTypes.d.ts} +58 -105
- package/dist/ChangeTypes.d.ts.map +1 -0
- package/dist/{default-edits/PersistedTypes.js → ChangeTypes.js} +21 -76
- package/dist/ChangeTypes.js.map +1 -0
- package/dist/Checkout.d.ts +39 -27
- package/dist/Checkout.d.ts.map +1 -1
- package/dist/Checkout.js +61 -32
- package/dist/Checkout.js.map +1 -1
- package/dist/Common.d.ts +175 -38
- package/dist/Common.d.ts.map +1 -1
- package/dist/Common.js +240 -103
- package/dist/Common.js.map +1 -1
- package/dist/EagerCheckout.d.ts +24 -0
- package/dist/EagerCheckout.d.ts.map +1 -0
- package/dist/{BasicCheckout.js → EagerCheckout.js} +9 -6
- package/dist/EagerCheckout.js.map +1 -0
- package/dist/EditLog.d.ts +77 -63
- package/dist/EditLog.d.ts.map +1 -1
- package/dist/EditLog.js +85 -48
- package/dist/EditLog.js.map +1 -1
- package/dist/EditUtilities.d.ts +168 -0
- package/dist/EditUtilities.d.ts.map +1 -0
- package/dist/EditUtilities.js +373 -0
- package/dist/EditUtilities.js.map +1 -0
- package/dist/EventTypes.d.ts +73 -0
- package/dist/EventTypes.d.ts.map +1 -0
- package/dist/EventTypes.js +78 -0
- package/dist/EventTypes.js.map +1 -0
- package/dist/Forest.d.ts +29 -7
- package/dist/Forest.d.ts.map +1 -1
- package/dist/Forest.js +60 -36
- package/dist/Forest.js.map +1 -1
- package/dist/HistoryEditFactory.d.ts +20 -0
- package/dist/HistoryEditFactory.d.ts.map +1 -0
- package/dist/HistoryEditFactory.js +226 -0
- package/dist/HistoryEditFactory.js.map +1 -0
- package/dist/IdConversion.d.ts +12 -0
- package/dist/IdConversion.d.ts.map +1 -0
- package/dist/IdConversion.js +98 -0
- package/dist/IdConversion.js.map +1 -0
- package/dist/Identifiers.d.ts +89 -2
- package/dist/Identifiers.d.ts.map +1 -1
- package/dist/Identifiers.js +10 -0
- package/dist/Identifiers.js.map +1 -1
- package/dist/InitialTree.d.ts +2 -2
- package/dist/InitialTree.d.ts.map +1 -1
- package/dist/InitialTree.js +2 -1
- package/dist/InitialTree.js.map +1 -1
- package/dist/LazyCheckout.d.ts +28 -0
- package/dist/LazyCheckout.d.ts.map +1 -0
- package/dist/LazyCheckout.js +44 -0
- package/dist/LazyCheckout.js.map +1 -0
- package/dist/LogViewer.d.ts +129 -85
- package/dist/LogViewer.d.ts.map +1 -1
- package/dist/LogViewer.js +111 -85
- package/dist/LogViewer.js.map +1 -1
- package/dist/MergeHealth.d.ts +221 -0
- package/dist/MergeHealth.d.ts.map +1 -0
- package/dist/MergeHealth.js +263 -0
- package/dist/MergeHealth.js.map +1 -0
- package/dist/NodeIdUtilities.d.ts +105 -0
- package/dist/NodeIdUtilities.d.ts.map +1 -0
- package/dist/NodeIdUtilities.js +60 -0
- package/dist/NodeIdUtilities.js.map +1 -0
- package/dist/PayloadUtilities.d.ts +42 -0
- package/dist/PayloadUtilities.d.ts.map +1 -0
- package/dist/PayloadUtilities.js +114 -0
- package/dist/PayloadUtilities.js.map +1 -0
- package/dist/ReconciliationPath.d.ts +18 -13
- package/dist/ReconciliationPath.d.ts.map +1 -1
- package/dist/ReconciliationPath.js.map +1 -1
- package/dist/RevisionValueCache.d.ts +11 -2
- package/dist/RevisionValueCache.d.ts.map +1 -1
- package/dist/RevisionValueCache.js +2 -3
- package/dist/RevisionValueCache.js.map +1 -1
- package/dist/RevisionView.d.ts +83 -0
- package/dist/RevisionView.d.ts.map +1 -0
- package/dist/RevisionView.js +182 -0
- package/dist/RevisionView.js.map +1 -0
- package/dist/SerializationUtilities.d.ts +36 -0
- package/dist/SerializationUtilities.d.ts.map +1 -0
- package/dist/SerializationUtilities.js +102 -0
- package/dist/SerializationUtilities.js.map +1 -0
- package/dist/SharedTree.d.ts +439 -0
- package/dist/SharedTree.d.ts.map +1 -0
- package/dist/SharedTree.js +1109 -0
- package/dist/SharedTree.js.map +1 -0
- package/dist/SharedTreeEncoder.d.ts +102 -0
- package/dist/SharedTreeEncoder.d.ts.map +1 -0
- package/dist/SharedTreeEncoder.js +313 -0
- package/dist/SharedTreeEncoder.js.map +1 -0
- package/dist/StringInterner.d.ts +46 -0
- package/dist/StringInterner.d.ts.map +1 -0
- package/dist/StringInterner.js +61 -0
- package/dist/StringInterner.js.map +1 -0
- package/dist/Summary.d.ts +40 -0
- package/dist/Summary.d.ts.map +1 -0
- package/dist/Summary.js +23 -0
- package/dist/Summary.js.map +1 -0
- package/dist/SummaryBackCompatibility.d.ts +22 -22
- package/dist/SummaryBackCompatibility.d.ts.map +1 -1
- package/dist/SummaryBackCompatibility.js +30 -33
- package/dist/SummaryBackCompatibility.js.map +1 -1
- package/dist/SummaryTestUtilities.d.ts +31 -0
- package/dist/SummaryTestUtilities.d.ts.map +1 -0
- package/dist/SummaryTestUtilities.js +37 -0
- package/dist/SummaryTestUtilities.js.map +1 -0
- package/dist/Transaction.d.ts +71 -0
- package/dist/Transaction.d.ts.map +1 -0
- package/dist/Transaction.js +92 -0
- package/dist/Transaction.js.map +1 -0
- package/dist/TransactionInternal.d.ts +540 -0
- package/dist/TransactionInternal.d.ts.map +1 -0
- package/dist/TransactionInternal.js +626 -0
- package/dist/TransactionInternal.js.map +1 -0
- package/dist/TreeCompressor.d.ts +36 -0
- package/dist/TreeCompressor.d.ts.map +1 -0
- package/dist/TreeCompressor.js +137 -0
- package/dist/TreeCompressor.js.map +1 -0
- package/dist/TreeNodeHandle.d.ts +12 -18
- package/dist/TreeNodeHandle.d.ts.map +1 -1
- package/dist/TreeNodeHandle.js +13 -23
- package/dist/TreeNodeHandle.js.map +1 -1
- package/dist/TreeView.d.ts +166 -0
- package/dist/TreeView.d.ts.map +1 -0
- package/dist/TreeView.js +218 -0
- package/dist/TreeView.js.map +1 -0
- package/dist/TreeViewUtilities.d.ts +21 -0
- package/dist/TreeViewUtilities.d.ts.map +1 -0
- package/dist/TreeViewUtilities.js +77 -0
- package/dist/TreeViewUtilities.js.map +1 -0
- package/dist/{default-edits/UndoRedoHandler.d.ts → UndoRedoHandler.d.ts} +2 -2
- package/dist/UndoRedoHandler.d.ts.map +1 -0
- package/dist/{default-edits/UndoRedoHandler.js → UndoRedoHandler.js} +5 -9
- package/dist/UndoRedoHandler.js.map +1 -0
- package/dist/id-compressor/AppendOnlySortedMap.d.ts +127 -0
- package/dist/id-compressor/AppendOnlySortedMap.d.ts.map +1 -0
- package/dist/id-compressor/AppendOnlySortedMap.js +283 -0
- package/dist/id-compressor/AppendOnlySortedMap.js.map +1 -0
- package/dist/id-compressor/IdCompressor.d.ts +389 -0
- package/dist/id-compressor/IdCompressor.d.ts.map +1 -0
- package/dist/id-compressor/IdCompressor.js +1353 -0
- package/dist/id-compressor/IdCompressor.js.map +1 -0
- package/dist/id-compressor/IdRange.d.ts +11 -0
- package/dist/id-compressor/IdRange.d.ts.map +1 -0
- package/dist/id-compressor/IdRange.js +29 -0
- package/dist/id-compressor/IdRange.js.map +1 -0
- package/dist/id-compressor/NumericUuid.d.ts +63 -0
- package/dist/id-compressor/NumericUuid.d.ts.map +1 -0
- package/dist/id-compressor/NumericUuid.js +377 -0
- package/dist/id-compressor/NumericUuid.js.map +1 -0
- package/dist/id-compressor/index.d.ts +12 -0
- package/dist/id-compressor/index.d.ts.map +1 -0
- package/dist/id-compressor/index.js +26 -0
- package/dist/id-compressor/index.js.map +1 -0
- package/dist/id-compressor/persisted-types/0.0.1.d.ts +156 -0
- package/dist/id-compressor/persisted-types/0.0.1.d.ts.map +1 -0
- package/dist/id-compressor/persisted-types/0.0.1.js +7 -0
- package/dist/id-compressor/persisted-types/0.0.1.js.map +1 -0
- package/dist/id-compressor/persisted-types/index.d.ts +6 -0
- package/dist/id-compressor/persisted-types/index.d.ts.map +1 -0
- package/dist/id-compressor/persisted-types/index.js +18 -0
- package/dist/id-compressor/persisted-types/index.js.map +1 -0
- package/dist/index.d.ts +29 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +50 -35
- package/dist/index.js.map +1 -1
- package/dist/persisted-types/0.0.2.d.ts +385 -0
- package/dist/persisted-types/0.0.2.d.ts.map +1 -0
- package/dist/persisted-types/0.0.2.js +113 -0
- package/dist/persisted-types/0.0.2.js.map +1 -0
- package/dist/persisted-types/0.1.1.d.ts +314 -0
- package/dist/persisted-types/0.1.1.d.ts.map +1 -0
- package/dist/persisted-types/0.1.1.js +153 -0
- package/dist/persisted-types/0.1.1.js.map +1 -0
- package/dist/persisted-types/index.d.ts +7 -0
- package/dist/persisted-types/index.d.ts.map +1 -0
- package/dist/persisted-types/index.js +20 -0
- package/dist/persisted-types/index.js.map +1 -0
- package/docs/0-1-1-Compression.md +228 -0
- package/docs/Breaking-Change-Migration.md +52 -0
- package/docs/Compression.md +2 -2
- package/docs/Telemetry.md +43 -0
- package/docs/Write-Format.md +19 -0
- package/lib/ChangeCompression.d.ts +39 -0
- package/lib/ChangeCompression.d.ts.map +1 -0
- package/lib/ChangeCompression.js +111 -0
- package/lib/ChangeCompression.js.map +1 -0
- package/{dist/default-edits/PersistedTypes.d.ts → lib/ChangeTypes.d.ts} +58 -105
- package/lib/ChangeTypes.d.ts.map +1 -0
- package/lib/{default-edits/PersistedTypes.js → ChangeTypes.js} +15 -68
- package/lib/ChangeTypes.js.map +1 -0
- package/lib/Checkout.d.ts +39 -27
- package/lib/Checkout.d.ts.map +1 -1
- package/lib/Checkout.js +53 -24
- package/lib/Checkout.js.map +1 -1
- package/lib/Common.d.ts +175 -38
- package/lib/Common.d.ts.map +1 -1
- package/lib/Common.js +226 -101
- package/lib/Common.js.map +1 -1
- package/lib/EagerCheckout.d.ts +24 -0
- package/lib/EagerCheckout.d.ts.map +1 -0
- package/lib/{BasicCheckout.js → EagerCheckout.js} +7 -4
- package/lib/EagerCheckout.js.map +1 -0
- package/lib/EditLog.d.ts +77 -63
- package/lib/EditLog.d.ts.map +1 -1
- package/lib/EditLog.js +83 -47
- package/lib/EditLog.js.map +1 -1
- package/lib/EditUtilities.d.ts +168 -0
- package/lib/EditUtilities.d.ts.map +1 -0
- package/lib/EditUtilities.js +353 -0
- package/lib/EditUtilities.js.map +1 -0
- package/lib/EventTypes.d.ts +73 -0
- package/lib/EventTypes.d.ts.map +1 -0
- package/lib/EventTypes.js +75 -0
- package/lib/EventTypes.js.map +1 -0
- package/lib/Forest.d.ts +29 -7
- package/lib/Forest.d.ts.map +1 -1
- package/lib/Forest.js +58 -35
- package/lib/Forest.js.map +1 -1
- package/lib/HistoryEditFactory.d.ts +20 -0
- package/lib/HistoryEditFactory.d.ts.map +1 -0
- package/lib/{default-edits/HistoryEditFactory.js → HistoryEditFactory.js} +78 -39
- package/lib/HistoryEditFactory.js.map +1 -0
- package/lib/IdConversion.d.ts +12 -0
- package/lib/IdConversion.d.ts.map +1 -0
- package/lib/IdConversion.js +91 -0
- package/lib/IdConversion.js.map +1 -0
- package/lib/Identifiers.d.ts +89 -2
- package/lib/Identifiers.d.ts.map +1 -1
- package/lib/Identifiers.js +8 -1
- package/lib/Identifiers.js.map +1 -1
- package/lib/InitialTree.d.ts +2 -2
- package/lib/InitialTree.d.ts.map +1 -1
- package/lib/InitialTree.js +2 -1
- package/lib/InitialTree.js.map +1 -1
- package/lib/LazyCheckout.d.ts +28 -0
- package/lib/LazyCheckout.d.ts.map +1 -0
- package/lib/LazyCheckout.js +40 -0
- package/lib/LazyCheckout.js.map +1 -0
- package/lib/LogViewer.d.ts +129 -85
- package/lib/LogViewer.d.ts.map +1 -1
- package/lib/LogViewer.js +103 -77
- package/lib/LogViewer.js.map +1 -1
- package/lib/MergeHealth.d.ts +221 -0
- package/lib/MergeHealth.d.ts.map +1 -0
- package/lib/MergeHealth.js +258 -0
- package/lib/MergeHealth.js.map +1 -0
- package/lib/NodeIdUtilities.d.ts +105 -0
- package/lib/NodeIdUtilities.d.ts.map +1 -0
- package/lib/NodeIdUtilities.js +53 -0
- package/lib/NodeIdUtilities.js.map +1 -0
- package/lib/PayloadUtilities.d.ts +42 -0
- package/lib/PayloadUtilities.d.ts.map +1 -0
- package/lib/PayloadUtilities.js +110 -0
- package/lib/PayloadUtilities.js.map +1 -0
- package/lib/ReconciliationPath.d.ts +18 -13
- package/lib/ReconciliationPath.d.ts.map +1 -1
- package/lib/ReconciliationPath.js.map +1 -1
- package/lib/RevisionValueCache.d.ts +11 -2
- package/lib/RevisionValueCache.d.ts.map +1 -1
- package/lib/RevisionValueCache.js +2 -3
- package/lib/RevisionValueCache.js.map +1 -1
- package/lib/RevisionView.d.ts +83 -0
- package/lib/RevisionView.d.ts.map +1 -0
- package/lib/RevisionView.js +175 -0
- package/lib/RevisionView.js.map +1 -0
- package/lib/SerializationUtilities.d.ts +36 -0
- package/lib/SerializationUtilities.d.ts.map +1 -0
- package/lib/SerializationUtilities.js +95 -0
- package/lib/SerializationUtilities.js.map +1 -0
- package/lib/SharedTree.d.ts +439 -0
- package/lib/SharedTree.d.ts.map +1 -0
- package/lib/SharedTree.js +1104 -0
- package/lib/SharedTree.js.map +1 -0
- package/lib/SharedTreeEncoder.d.ts +102 -0
- package/lib/SharedTreeEncoder.d.ts.map +1 -0
- package/lib/SharedTreeEncoder.js +308 -0
- package/lib/SharedTreeEncoder.js.map +1 -0
- package/lib/StringInterner.d.ts +46 -0
- package/lib/StringInterner.d.ts.map +1 -0
- package/lib/StringInterner.js +57 -0
- package/lib/StringInterner.js.map +1 -0
- package/lib/Summary.d.ts +40 -0
- package/lib/Summary.d.ts.map +1 -0
- package/lib/Summary.js +19 -0
- package/lib/Summary.js.map +1 -0
- package/lib/SummaryBackCompatibility.d.ts +22 -22
- package/lib/SummaryBackCompatibility.d.ts.map +1 -1
- package/lib/SummaryBackCompatibility.js +29 -32
- package/lib/SummaryBackCompatibility.js.map +1 -1
- package/lib/SummaryTestUtilities.d.ts +31 -0
- package/lib/SummaryTestUtilities.d.ts.map +1 -0
- package/lib/SummaryTestUtilities.js +32 -0
- package/lib/SummaryTestUtilities.js.map +1 -0
- package/lib/Transaction.d.ts +71 -0
- package/lib/Transaction.d.ts.map +1 -0
- package/lib/Transaction.js +88 -0
- package/lib/Transaction.js.map +1 -0
- package/lib/TransactionInternal.d.ts +540 -0
- package/lib/TransactionInternal.d.ts.map +1 -0
- package/lib/TransactionInternal.js +622 -0
- package/lib/TransactionInternal.js.map +1 -0
- package/lib/TreeCompressor.d.ts +36 -0
- package/lib/TreeCompressor.d.ts.map +1 -0
- package/lib/TreeCompressor.js +133 -0
- package/lib/TreeCompressor.js.map +1 -0
- package/lib/TreeNodeHandle.d.ts +12 -18
- package/lib/TreeNodeHandle.d.ts.map +1 -1
- package/lib/TreeNodeHandle.js +14 -24
- package/lib/TreeNodeHandle.js.map +1 -1
- package/lib/TreeView.d.ts +166 -0
- package/lib/TreeView.d.ts.map +1 -0
- package/lib/TreeView.js +214 -0
- package/lib/TreeView.js.map +1 -0
- package/lib/TreeViewUtilities.d.ts +21 -0
- package/lib/TreeViewUtilities.d.ts.map +1 -0
- package/lib/TreeViewUtilities.js +71 -0
- package/lib/TreeViewUtilities.js.map +1 -0
- package/lib/{default-edits/UndoRedoHandler.d.ts → UndoRedoHandler.d.ts} +2 -2
- package/lib/UndoRedoHandler.d.ts.map +1 -0
- package/lib/{default-edits/UndoRedoHandler.js → UndoRedoHandler.js} +3 -7
- package/lib/UndoRedoHandler.js.map +1 -0
- package/lib/id-compressor/AppendOnlySortedMap.d.ts +127 -0
- package/lib/id-compressor/AppendOnlySortedMap.d.ts.map +1 -0
- package/lib/id-compressor/AppendOnlySortedMap.js +278 -0
- package/lib/id-compressor/AppendOnlySortedMap.js.map +1 -0
- package/lib/id-compressor/IdCompressor.d.ts +389 -0
- package/lib/id-compressor/IdCompressor.d.ts.map +1 -0
- package/lib/id-compressor/IdCompressor.js +1343 -0
- package/lib/id-compressor/IdCompressor.js.map +1 -0
- package/lib/id-compressor/IdRange.d.ts +11 -0
- package/lib/id-compressor/IdRange.d.ts.map +1 -0
- package/lib/id-compressor/IdRange.js +25 -0
- package/lib/id-compressor/IdRange.js.map +1 -0
- package/lib/id-compressor/NumericUuid.d.ts +63 -0
- package/lib/id-compressor/NumericUuid.d.ts.map +1 -0
- package/lib/id-compressor/NumericUuid.js +365 -0
- package/lib/id-compressor/NumericUuid.js.map +1 -0
- package/lib/id-compressor/index.d.ts +12 -0
- package/lib/id-compressor/index.d.ts.map +1 -0
- package/lib/id-compressor/index.js +12 -0
- package/lib/id-compressor/index.js.map +1 -0
- package/lib/id-compressor/persisted-types/0.0.1.d.ts +156 -0
- package/lib/id-compressor/persisted-types/0.0.1.d.ts.map +1 -0
- package/lib/{test/Snapshot.tests.d.ts → id-compressor/persisted-types/0.0.1.js} +1 -1
- package/lib/id-compressor/persisted-types/0.0.1.js.map +1 -0
- package/lib/id-compressor/persisted-types/index.d.ts +6 -0
- package/lib/id-compressor/persisted-types/index.d.ts.map +1 -0
- package/lib/id-compressor/persisted-types/index.js +6 -0
- package/lib/id-compressor/persisted-types/index.js.map +1 -0
- package/lib/index.d.ts +29 -9
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +23 -6
- package/lib/index.js.map +1 -1
- package/lib/persisted-types/0.0.2.d.ts +385 -0
- package/lib/persisted-types/0.0.2.d.ts.map +1 -0
- package/lib/persisted-types/0.0.2.js +110 -0
- package/lib/persisted-types/0.0.2.js.map +1 -0
- package/lib/persisted-types/0.1.1.d.ts +314 -0
- package/lib/persisted-types/0.1.1.d.ts.map +1 -0
- package/lib/persisted-types/0.1.1.js +150 -0
- package/lib/persisted-types/0.1.1.js.map +1 -0
- package/lib/persisted-types/index.d.ts +7 -0
- package/lib/persisted-types/index.d.ts.map +1 -0
- package/lib/persisted-types/index.js +8 -0
- package/lib/persisted-types/index.js.map +1 -0
- package/lib/test/AppendOnlySortedMap.tests.d.ts +6 -0
- package/lib/test/AppendOnlySortedMap.tests.d.ts.map +1 -0
- package/lib/test/AppendOnlySortedMap.tests.js +169 -0
- package/lib/test/AppendOnlySortedMap.tests.js.map +1 -0
- package/lib/test/{SnapshotUtilities.tests.d.ts → ChangeCompression.tests.d.ts} +1 -1
- package/lib/test/ChangeCompression.tests.d.ts.map +1 -0
- package/lib/test/ChangeCompression.tests.js +145 -0
- package/lib/test/ChangeCompression.tests.js.map +1 -0
- package/lib/test/Checkout.tests.d.ts +2 -3
- package/lib/test/Checkout.tests.d.ts.map +1 -1
- package/lib/test/Checkout.tests.js +126 -69
- package/lib/test/Checkout.tests.js.map +1 -1
- package/lib/test/Common.tests.js +60 -2
- package/lib/test/Common.tests.js.map +1 -1
- package/lib/test/{BasicCheckout.tests.d.ts → EagerCheckout.tests.d.ts} +1 -1
- package/lib/test/EagerCheckout.tests.d.ts.map +1 -0
- package/lib/test/EagerCheckout.tests.js +20 -0
- package/lib/test/EagerCheckout.tests.js.map +1 -0
- package/lib/test/Edit.tests.js +22 -14
- package/lib/test/Edit.tests.js.map +1 -1
- package/lib/test/{Anchors.glassBox.tests.d.ts → EditLog.perf.tests.d.ts} +1 -1
- package/lib/test/EditLog.perf.tests.d.ts.map +1 -0
- package/lib/test/EditLog.perf.tests.js +30 -0
- package/lib/test/EditLog.perf.tests.js.map +1 -0
- package/lib/test/EditLog.tests.js +10 -6
- package/lib/test/EditLog.tests.js.map +1 -1
- package/lib/test/EditUtilities.tests.d.ts +6 -0
- package/lib/test/EditUtilities.tests.d.ts.map +1 -0
- package/lib/test/EditUtilities.tests.js +503 -0
- package/lib/test/EditUtilities.tests.js.map +1 -0
- package/lib/test/Forest.perf.tests.d.ts +6 -0
- package/lib/test/Forest.perf.tests.d.ts.map +1 -0
- package/lib/test/Forest.perf.tests.js +133 -0
- package/lib/test/Forest.perf.tests.js.map +1 -0
- package/lib/test/Forest.tests.js +54 -27
- package/lib/test/Forest.tests.js.map +1 -1
- package/lib/test/GenericTransaction.tests.js +12 -3
- package/lib/test/GenericTransaction.tests.js.map +1 -1
- package/lib/test/HistoryEditFactory.tests.d.ts +6 -0
- package/lib/test/HistoryEditFactory.tests.d.ts.map +1 -0
- package/lib/test/HistoryEditFactory.tests.js +90 -0
- package/lib/test/HistoryEditFactory.tests.js.map +1 -0
- package/lib/test/IdCompressor.perf.tests.d.ts +6 -0
- package/lib/test/IdCompressor.perf.tests.d.ts.map +1 -0
- package/lib/test/IdCompressor.perf.tests.js +304 -0
- package/lib/test/IdCompressor.perf.tests.js.map +1 -0
- package/lib/test/IdCompressor.tests.d.ts +6 -0
- package/lib/test/IdCompressor.tests.d.ts.map +1 -0
- package/lib/test/IdCompressor.tests.js +1075 -0
- package/lib/test/IdCompressor.tests.js.map +1 -0
- package/lib/test/IdConversion.tests.d.ts +6 -0
- package/lib/test/IdConversion.tests.d.ts.map +1 -0
- package/lib/test/IdConversion.tests.js +36 -0
- package/lib/test/IdConversion.tests.js.map +1 -0
- package/lib/test/LazyCheckout.tests.d.ts +6 -0
- package/lib/test/LazyCheckout.tests.d.ts.map +1 -0
- package/lib/test/LazyCheckout.tests.js +22 -0
- package/lib/test/LazyCheckout.tests.js.map +1 -0
- package/lib/test/LogViewer.tests.js +276 -191
- package/lib/test/LogViewer.tests.js.map +1 -1
- package/lib/test/{SharedTreeWithAnchors.tests.d.ts → MergeHealthTelemetryHeartbeat.tests.d.ts} +1 -1
- package/lib/test/MergeHealthTelemetryHeartbeat.tests.d.ts.map +1 -0
- package/lib/test/MergeHealthTelemetryHeartbeat.tests.js +342 -0
- package/lib/test/MergeHealthTelemetryHeartbeat.tests.js.map +1 -0
- package/lib/test/NumericUuid.perf.tests.d.ts +6 -0
- package/lib/test/NumericUuid.perf.tests.d.ts.map +1 -0
- package/lib/test/NumericUuid.perf.tests.js +68 -0
- package/lib/test/NumericUuid.perf.tests.js.map +1 -0
- package/lib/test/NumericUuid.tests.d.ts +6 -0
- package/lib/test/NumericUuid.tests.d.ts.map +1 -0
- package/lib/test/NumericUuid.tests.js +191 -0
- package/lib/test/NumericUuid.tests.js.map +1 -0
- package/lib/test/RevisionView.tests.d.ts +6 -0
- package/lib/test/RevisionView.tests.d.ts.map +1 -0
- package/lib/test/RevisionView.tests.js +133 -0
- package/lib/test/RevisionView.tests.js.map +1 -0
- package/lib/test/SharedTree.perf.tests.d.ts +6 -0
- package/lib/test/SharedTree.perf.tests.d.ts.map +1 -0
- package/lib/test/SharedTree.perf.tests.js +39 -0
- package/lib/test/SharedTree.perf.tests.js.map +1 -0
- package/lib/test/SharedTree.tests.js +15 -3
- package/lib/test/SharedTree.tests.js.map +1 -1
- package/lib/test/StringInterner.tests.d.ts +6 -0
- package/lib/test/StringInterner.tests.d.ts.map +1 -0
- package/lib/test/StringInterner.tests.js +71 -0
- package/lib/test/StringInterner.tests.js.map +1 -0
- package/lib/test/Summary.tests.d.ts +8 -0
- package/lib/test/Summary.tests.d.ts.map +1 -0
- package/lib/test/Summary.tests.js +407 -0
- package/lib/test/Summary.tests.js.map +1 -0
- package/lib/test/Transaction.tests.js +109 -329
- package/lib/test/Transaction.tests.js.map +1 -1
- package/lib/test/TransactionInternal.tests.d.ts +6 -0
- package/lib/test/TransactionInternal.tests.d.ts.map +1 -0
- package/lib/test/TransactionInternal.tests.js +568 -0
- package/lib/test/TransactionInternal.tests.js.map +1 -0
- package/lib/test/TreeCompression.tests.d.ts +6 -0
- package/lib/test/TreeCompression.tests.d.ts.map +1 -0
- package/lib/test/TreeCompression.tests.js +292 -0
- package/lib/test/TreeCompression.tests.js.map +1 -0
- package/lib/test/TreeView.tests.d.ts +6 -0
- package/lib/test/TreeView.tests.d.ts.map +1 -0
- package/lib/test/TreeView.tests.js +176 -0
- package/lib/test/TreeView.tests.js.map +1 -0
- package/lib/test/UndoRedoHandler.tests.js +2 -2
- package/lib/test/UndoRedoHandler.tests.js.map +1 -1
- package/lib/test/Virtualization.tests.js +146 -62
- package/lib/test/Virtualization.tests.js.map +1 -1
- package/lib/test/fuzz/Generators.d.ts +19 -0
- package/lib/test/fuzz/Generators.d.ts.map +1 -0
- package/lib/test/fuzz/Generators.js +420 -0
- package/lib/test/fuzz/Generators.js.map +1 -0
- package/lib/test/fuzz/SharedTreeFuzzTests.d.ts +20 -0
- package/lib/test/fuzz/SharedTreeFuzzTests.d.ts.map +1 -0
- package/lib/test/fuzz/SharedTreeFuzzTests.js +217 -0
- package/lib/test/fuzz/SharedTreeFuzzTests.js.map +1 -0
- package/lib/test/fuzz/Types.d.ts +133 -0
- package/lib/test/fuzz/Types.d.ts.map +1 -0
- package/lib/test/{GenericTransactionWithAnchors.tests.d.ts → fuzz/Types.js} +2 -2
- package/lib/test/fuzz/Types.js.map +1 -0
- package/lib/test/utilities/IdCompressorTestUtilities.d.ts +180 -0
- package/lib/test/utilities/IdCompressorTestUtilities.d.ts.map +1 -0
- package/lib/test/utilities/IdCompressorTestUtilities.js +528 -0
- package/lib/test/utilities/IdCompressorTestUtilities.js.map +1 -0
- package/lib/test/utilities/MockTransaction.d.ts +26 -7
- package/lib/test/utilities/MockTransaction.d.ts.map +1 -1
- package/lib/test/utilities/MockTransaction.js +40 -11
- package/lib/test/utilities/MockTransaction.js.map +1 -1
- package/lib/test/utilities/PendingLocalStateTests.d.ts +12 -0
- package/lib/test/utilities/PendingLocalStateTests.d.ts.map +1 -0
- package/lib/test/utilities/PendingLocalStateTests.js +105 -0
- package/lib/test/utilities/PendingLocalStateTests.js.map +1 -0
- package/lib/test/utilities/SharedTreeTests.d.ts +3 -4
- package/lib/test/utilities/SharedTreeTests.d.ts.map +1 -1
- package/lib/test/utilities/SharedTreeTests.js +696 -439
- package/lib/test/utilities/SharedTreeTests.js.map +1 -1
- package/lib/test/utilities/SharedTreeVersioningTests.d.ts +11 -0
- package/lib/test/utilities/SharedTreeVersioningTests.d.ts.map +1 -0
- package/lib/test/utilities/SharedTreeVersioningTests.js +370 -0
- package/lib/test/utilities/SharedTreeVersioningTests.js.map +1 -0
- package/lib/test/utilities/SummaryLoadPerfTests.d.ts +10 -0
- package/lib/test/utilities/SummaryLoadPerfTests.d.ts.map +1 -0
- package/lib/test/utilities/SummaryLoadPerfTests.js +102 -0
- package/lib/test/utilities/SummaryLoadPerfTests.js.map +1 -0
- package/lib/test/utilities/SummarySizeTests.d.ts +11 -0
- package/lib/test/utilities/SummarySizeTests.d.ts.map +1 -0
- package/lib/test/utilities/SummarySizeTests.js +158 -0
- package/lib/test/utilities/SummarySizeTests.js.map +1 -0
- package/lib/test/utilities/TestCommon.d.ts +9 -0
- package/lib/test/utilities/TestCommon.d.ts.map +1 -0
- package/lib/test/utilities/TestCommon.js +13 -0
- package/lib/test/utilities/TestCommon.js.map +1 -0
- package/lib/test/utilities/TestNode.d.ts +140 -0
- package/lib/test/utilities/TestNode.d.ts.map +1 -0
- package/lib/test/utilities/TestNode.js +292 -0
- package/lib/test/utilities/TestNode.js.map +1 -0
- package/lib/test/utilities/TestUtilities.d.ts +84 -70
- package/lib/test/utilities/TestUtilities.d.ts.map +1 -1
- package/lib/test/utilities/TestUtilities.js +218 -143
- package/lib/test/utilities/TestUtilities.js.map +1 -1
- package/lib/test/utilities/UndoRedoTests.d.ts +4 -5
- package/lib/test/utilities/UndoRedoTests.d.ts.map +1 -1
- package/lib/test/utilities/UndoRedoTests.js +138 -149
- package/lib/test/utilities/UndoRedoTests.js.map +1 -1
- package/package.json +22 -17
- package/src/ChangeCompression.ts +159 -0
- package/src/{default-edits/PersistedTypes.ts → ChangeTypes.ts} +62 -125
- package/src/Checkout.ts +82 -53
- package/src/Common.ts +317 -117
- package/src/EagerCheckout.ts +38 -0
- package/src/EditLog.ts +153 -100
- package/src/EditUtilities.ts +559 -0
- package/src/EventTypes.ts +74 -0
- package/src/Forest.ts +81 -73
- package/src/{default-edits/HistoryEditFactory.ts → HistoryEditFactory.ts} +103 -53
- package/src/IdConversion.ts +125 -0
- package/src/Identifiers.ts +101 -1
- package/src/InitialTree.ts +5 -4
- package/src/LazyCheckout.ts +51 -0
- package/src/LogViewer.ts +242 -166
- package/src/MergeHealth.ts +447 -0
- package/src/NodeIdUtilities.ts +156 -0
- package/src/PayloadUtilities.ts +124 -0
- package/src/ReconciliationPath.ts +18 -13
- package/src/RevisionValueCache.ts +14 -5
- package/src/RevisionView.ts +252 -0
- package/src/SerializationUtilities.ts +130 -0
- package/src/SharedTree.ts +1501 -0
- package/src/SharedTreeEncoder.ts +493 -0
- package/src/StringInterner.ts +72 -0
- package/src/Summary.ts +48 -0
- package/src/SummaryBackCompatibility.ts +47 -57
- package/src/SummaryTestUtilities.ts +54 -0
- package/src/Transaction.ts +120 -0
- package/src/TransactionInternal.ts +1087 -0
- package/src/TreeCompressor.ts +213 -0
- package/src/TreeNodeHandle.ts +19 -32
- package/src/TreeView.ts +322 -0
- package/src/TreeViewUtilities.ts +77 -0
- package/src/{default-edits/UndoRedoHandler.ts → UndoRedoHandler.ts} +8 -13
- package/src/id-compressor/AppendOnlySortedMap.ts +325 -0
- package/src/id-compressor/IdCompressor.md +3 -0
- package/src/id-compressor/IdCompressor.ts +1848 -0
- package/src/id-compressor/IdRange.ts +33 -0
- package/src/id-compressor/NumericUuid.ts +414 -0
- package/src/id-compressor/index.ts +13 -0
- package/src/id-compressor/persisted-types/0.0.1.ts +179 -0
- package/src/id-compressor/persisted-types/README.md +3 -0
- package/src/id-compressor/persisted-types/index.ts +6 -0
- package/src/index.ts +118 -59
- package/src/persisted-types/0.0.2.ts +442 -0
- package/src/persisted-types/0.1.1.ts +476 -0
- package/src/persisted-types/README.md +22 -0
- package/src/persisted-types/index.ts +9 -0
- package/.mocharc.js +0 -41
- package/api/tree.api.md +0 -729
- package/dist/BasicCheckout.d.ts +0 -23
- package/dist/BasicCheckout.d.ts.map +0 -1
- package/dist/BasicCheckout.js.map +0 -1
- package/dist/Snapshot.d.ts +0 -198
- package/dist/Snapshot.d.ts.map +0 -1
- package/dist/Snapshot.js +0 -267
- package/dist/Snapshot.js.map +0 -1
- package/dist/SnapshotUtilities.d.ts +0 -29
- package/dist/SnapshotUtilities.d.ts.map +0 -1
- package/dist/SnapshotUtilities.js +0 -73
- package/dist/SnapshotUtilities.js.map +0 -1
- package/dist/anchored-edits/AnchorResolution.d.ts +0 -144
- package/dist/anchored-edits/AnchorResolution.d.ts.map +0 -1
- package/dist/anchored-edits/AnchorResolution.js +0 -162
- package/dist/anchored-edits/AnchorResolution.js.map +0 -1
- package/dist/anchored-edits/Factory.d.ts +0 -56
- package/dist/anchored-edits/Factory.d.ts.map +0 -1
- package/dist/anchored-edits/Factory.js +0 -79
- package/dist/anchored-edits/Factory.js.map +0 -1
- package/dist/anchored-edits/PersistedTypes.d.ts +0 -245
- package/dist/anchored-edits/PersistedTypes.d.ts.map +0 -1
- package/dist/anchored-edits/PersistedTypes.js +0 -131
- package/dist/anchored-edits/PersistedTypes.js.map +0 -1
- package/dist/anchored-edits/SharedTreeWithAnchors.d.ts +0 -120
- package/dist/anchored-edits/SharedTreeWithAnchors.d.ts.map +0 -1
- package/dist/anchored-edits/SharedTreeWithAnchors.js +0 -115
- package/dist/anchored-edits/SharedTreeWithAnchors.js.map +0 -1
- package/dist/anchored-edits/TransactionWithAnchors.d.ts +0 -28
- package/dist/anchored-edits/TransactionWithAnchors.d.ts.map +0 -1
- package/dist/anchored-edits/TransactionWithAnchors.js +0 -36
- package/dist/anchored-edits/TransactionWithAnchors.js.map +0 -1
- package/dist/anchored-edits/index.d.ts +0 -10
- package/dist/anchored-edits/index.d.ts.map +0 -1
- package/dist/anchored-edits/index.js +0 -34
- package/dist/anchored-edits/index.js.map +0 -1
- package/dist/default-edits/EditUtilities.d.ts +0 -57
- package/dist/default-edits/EditUtilities.d.ts.map +0 -1
- package/dist/default-edits/EditUtilities.js +0 -192
- package/dist/default-edits/EditUtilities.js.map +0 -1
- package/dist/default-edits/Factory.d.ts +0 -56
- package/dist/default-edits/Factory.d.ts.map +0 -1
- package/dist/default-edits/Factory.js +0 -79
- package/dist/default-edits/Factory.js.map +0 -1
- package/dist/default-edits/HistoryEditFactory.d.ts +0 -19
- package/dist/default-edits/HistoryEditFactory.d.ts.map +0 -1
- package/dist/default-edits/HistoryEditFactory.js +0 -187
- package/dist/default-edits/HistoryEditFactory.js.map +0 -1
- package/dist/default-edits/PersistedTypes.d.ts.map +0 -1
- package/dist/default-edits/PersistedTypes.js.map +0 -1
- package/dist/default-edits/SharedTree.d.ts +0 -111
- package/dist/default-edits/SharedTree.d.ts.map +0 -1
- package/dist/default-edits/SharedTree.js +0 -124
- package/dist/default-edits/SharedTree.js.map +0 -1
- package/dist/default-edits/Summary.d.ts +0 -15
- package/dist/default-edits/Summary.d.ts.map +0 -1
- package/dist/default-edits/Summary.js +0 -35
- package/dist/default-edits/Summary.js.map +0 -1
- package/dist/default-edits/Transaction.d.ts +0 -41
- package/dist/default-edits/Transaction.d.ts.map +0 -1
- package/dist/default-edits/Transaction.js +0 -225
- package/dist/default-edits/Transaction.js.map +0 -1
- package/dist/default-edits/UndoRedoHandler.d.ts.map +0 -1
- package/dist/default-edits/UndoRedoHandler.js.map +0 -1
- package/dist/default-edits/index.d.ts +0 -13
- package/dist/default-edits/index.d.ts.map +0 -1
- package/dist/default-edits/index.js +0 -41
- package/dist/default-edits/index.js.map +0 -1
- package/dist/generic/GenericEditUtilities.d.ts +0 -26
- package/dist/generic/GenericEditUtilities.d.ts.map +0 -1
- package/dist/generic/GenericEditUtilities.js +0 -45
- package/dist/generic/GenericEditUtilities.js.map +0 -1
- package/dist/generic/GenericSharedTree.d.ts +0 -221
- package/dist/generic/GenericSharedTree.d.ts.map +0 -1
- package/dist/generic/GenericSharedTree.js +0 -447
- package/dist/generic/GenericSharedTree.js.map +0 -1
- package/dist/generic/GenericTransaction.d.ts +0 -87
- package/dist/generic/GenericTransaction.d.ts.map +0 -1
- package/dist/generic/GenericTransaction.js +0 -144
- package/dist/generic/GenericTransaction.js.map +0 -1
- package/dist/generic/PersistedTypes.d.ts +0 -194
- package/dist/generic/PersistedTypes.d.ts.map +0 -1
- package/dist/generic/PersistedTypes.js +0 -42
- package/dist/generic/PersistedTypes.js.map +0 -1
- package/dist/generic/Summary.d.ts +0 -63
- package/dist/generic/Summary.d.ts.map +0 -1
- package/dist/generic/Summary.js +0 -64
- package/dist/generic/Summary.js.map +0 -1
- package/dist/generic/index.d.ts +0 -10
- package/dist/generic/index.d.ts.map +0 -1
- package/dist/generic/index.js +0 -26
- package/dist/generic/index.js.map +0 -1
- package/docs/Future.md +0 -155
- package/lib/BasicCheckout.d.ts +0 -23
- package/lib/BasicCheckout.d.ts.map +0 -1
- package/lib/BasicCheckout.js.map +0 -1
- package/lib/Snapshot.d.ts +0 -198
- package/lib/Snapshot.d.ts.map +0 -1
- package/lib/Snapshot.js +0 -263
- package/lib/Snapshot.js.map +0 -1
- package/lib/SnapshotUtilities.d.ts +0 -29
- package/lib/SnapshotUtilities.d.ts.map +0 -1
- package/lib/SnapshotUtilities.js +0 -67
- package/lib/SnapshotUtilities.js.map +0 -1
- package/lib/anchored-edits/AnchorResolution.d.ts +0 -144
- package/lib/anchored-edits/AnchorResolution.d.ts.map +0 -1
- package/lib/anchored-edits/AnchorResolution.js +0 -152
- package/lib/anchored-edits/AnchorResolution.js.map +0 -1
- package/lib/anchored-edits/Factory.d.ts +0 -56
- package/lib/anchored-edits/Factory.d.ts.map +0 -1
- package/lib/anchored-edits/Factory.js +0 -74
- package/lib/anchored-edits/Factory.js.map +0 -1
- package/lib/anchored-edits/PersistedTypes.d.ts +0 -245
- package/lib/anchored-edits/PersistedTypes.d.ts.map +0 -1
- package/lib/anchored-edits/PersistedTypes.js +0 -128
- package/lib/anchored-edits/PersistedTypes.js.map +0 -1
- package/lib/anchored-edits/SharedTreeWithAnchors.d.ts +0 -120
- package/lib/anchored-edits/SharedTreeWithAnchors.d.ts.map +0 -1
- package/lib/anchored-edits/SharedTreeWithAnchors.js +0 -110
- package/lib/anchored-edits/SharedTreeWithAnchors.js.map +0 -1
- package/lib/anchored-edits/TransactionWithAnchors.d.ts +0 -28
- package/lib/anchored-edits/TransactionWithAnchors.d.ts.map +0 -1
- package/lib/anchored-edits/TransactionWithAnchors.js +0 -32
- package/lib/anchored-edits/TransactionWithAnchors.js.map +0 -1
- package/lib/anchored-edits/index.d.ts +0 -10
- package/lib/anchored-edits/index.d.ts.map +0 -1
- package/lib/anchored-edits/index.js +0 -11
- package/lib/anchored-edits/index.js.map +0 -1
- package/lib/default-edits/EditUtilities.d.ts +0 -57
- package/lib/default-edits/EditUtilities.d.ts.map +0 -1
- package/lib/default-edits/EditUtilities.js +0 -181
- package/lib/default-edits/EditUtilities.js.map +0 -1
- package/lib/default-edits/Factory.d.ts +0 -56
- package/lib/default-edits/Factory.d.ts.map +0 -1
- package/lib/default-edits/Factory.js +0 -74
- package/lib/default-edits/Factory.js.map +0 -1
- package/lib/default-edits/HistoryEditFactory.d.ts +0 -19
- package/lib/default-edits/HistoryEditFactory.d.ts.map +0 -1
- package/lib/default-edits/HistoryEditFactory.js.map +0 -1
- package/lib/default-edits/PersistedTypes.d.ts.map +0 -1
- package/lib/default-edits/PersistedTypes.js.map +0 -1
- package/lib/default-edits/SharedTree.d.ts +0 -111
- package/lib/default-edits/SharedTree.d.ts.map +0 -1
- package/lib/default-edits/SharedTree.js +0 -100
- package/lib/default-edits/SharedTree.js.map +0 -1
- package/lib/default-edits/Summary.d.ts +0 -15
- package/lib/default-edits/Summary.d.ts.map +0 -1
- package/lib/default-edits/Summary.js +0 -31
- package/lib/default-edits/Summary.js.map +0 -1
- package/lib/default-edits/Transaction.d.ts +0 -41
- package/lib/default-edits/Transaction.d.ts.map +0 -1
- package/lib/default-edits/Transaction.js +0 -221
- package/lib/default-edits/Transaction.js.map +0 -1
- package/lib/default-edits/UndoRedoHandler.d.ts.map +0 -1
- package/lib/default-edits/UndoRedoHandler.js.map +0 -1
- package/lib/default-edits/index.d.ts +0 -13
- package/lib/default-edits/index.d.ts.map +0 -1
- package/lib/default-edits/index.js +0 -14
- package/lib/default-edits/index.js.map +0 -1
- package/lib/generic/GenericEditUtilities.d.ts +0 -26
- package/lib/generic/GenericEditUtilities.d.ts.map +0 -1
- package/lib/generic/GenericEditUtilities.js +0 -38
- package/lib/generic/GenericEditUtilities.js.map +0 -1
- package/lib/generic/GenericSharedTree.d.ts +0 -221
- package/lib/generic/GenericSharedTree.d.ts.map +0 -1
- package/lib/generic/GenericSharedTree.js +0 -443
- package/lib/generic/GenericSharedTree.js.map +0 -1
- package/lib/generic/GenericTransaction.d.ts +0 -87
- package/lib/generic/GenericTransaction.d.ts.map +0 -1
- package/lib/generic/GenericTransaction.js +0 -140
- package/lib/generic/GenericTransaction.js.map +0 -1
- package/lib/generic/PersistedTypes.d.ts +0 -194
- package/lib/generic/PersistedTypes.d.ts.map +0 -1
- package/lib/generic/PersistedTypes.js +0 -39
- package/lib/generic/PersistedTypes.js.map +0 -1
- package/lib/generic/Summary.d.ts +0 -63
- package/lib/generic/Summary.d.ts.map +0 -1
- package/lib/generic/Summary.js +0 -58
- package/lib/generic/Summary.js.map +0 -1
- package/lib/generic/index.d.ts +0 -10
- package/lib/generic/index.d.ts.map +0 -1
- package/lib/generic/index.js +0 -11
- package/lib/generic/index.js.map +0 -1
- package/lib/test/Anchors.glassBox.tests.d.ts.map +0 -1
- package/lib/test/Anchors.glassBox.tests.js +0 -410
- package/lib/test/Anchors.glassBox.tests.js.map +0 -1
- package/lib/test/BasicCheckout.tests.d.ts.map +0 -1
- package/lib/test/BasicCheckout.tests.js +0 -8
- package/lib/test/BasicCheckout.tests.js.map +0 -1
- package/lib/test/GenericTransactionWithAnchors.tests.d.ts.map +0 -1
- package/lib/test/GenericTransactionWithAnchors.tests.js +0 -25
- package/lib/test/GenericTransactionWithAnchors.tests.js.map +0 -1
- package/lib/test/SharedTreeWithAnchors.tests.d.ts.map +0 -1
- package/lib/test/SharedTreeWithAnchors.tests.js +0 -420
- package/lib/test/SharedTreeWithAnchors.tests.js.map +0 -1
- package/lib/test/Snapshot.tests.d.ts.map +0 -1
- package/lib/test/Snapshot.tests.js +0 -96
- package/lib/test/Snapshot.tests.js.map +0 -1
- package/lib/test/SnapshotUtilities.tests.d.ts.map +0 -1
- package/lib/test/SnapshotUtilities.tests.js +0 -168
- package/lib/test/SnapshotUtilities.tests.js.map +0 -1
- package/lib/test/undoRedoStackManager.d.ts +0 -26
- package/lib/test/undoRedoStackManager.d.ts.map +0 -1
- package/lib/test/undoRedoStackManager.js +0 -176
- package/lib/test/undoRedoStackManager.js.map +0 -1
- package/lib/test/utilities/SummaryFormatCompatibilityTests.d.ts +0 -13
- package/lib/test/utilities/SummaryFormatCompatibilityTests.d.ts.map +0 -1
- package/lib/test/utilities/SummaryFormatCompatibilityTests.js +0 -154
- package/lib/test/utilities/SummaryFormatCompatibilityTests.js.map +0 -1
- package/src/BasicCheckout.ts +0 -34
- package/src/Snapshot.ts +0 -363
- package/src/SnapshotUtilities.ts +0 -88
- package/src/anchored-edits/AnchorResolution.ts +0 -442
- package/src/anchored-edits/Factory.ts +0 -94
- package/src/anchored-edits/PersistedTypes.ts +0 -310
- package/src/anchored-edits/SharedTreeWithAnchors.ts +0 -200
- package/src/anchored-edits/TransactionWithAnchors.ts +0 -39
- package/src/anchored-edits/index.ts +0 -21
- package/src/default-edits/EditUtilities.ts +0 -220
- package/src/default-edits/Factory.ts +0 -94
- package/src/default-edits/SharedTree.ts +0 -174
- package/src/default-edits/Summary.ts +0 -44
- package/src/default-edits/Transaction.ts +0 -262
- package/src/default-edits/index.ts +0 -29
- package/src/generic/GenericEditUtilities.ts +0 -46
- package/src/generic/GenericSharedTree.ts +0 -593
- package/src/generic/GenericTransaction.ts +0 -194
- package/src/generic/PersistedTypes.ts +0 -221
- package/src/generic/Summary.ts +0 -113
- package/src/generic/index.ts +0 -41
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
import { expect } from 'chai';
|
|
6
|
+
import { RevisionView } from '../RevisionView';
|
|
7
|
+
import { refreshTestTree } from './utilities/TestUtilities';
|
|
8
|
+
import { expectDefined } from './utilities/TestCommon';
|
|
9
|
+
describe('TreeView', () => {
|
|
10
|
+
const testTree = refreshTestTree();
|
|
11
|
+
describe('can compute deltas', () => {
|
|
12
|
+
it('that are the same object', () => {
|
|
13
|
+
const view = testTree.view;
|
|
14
|
+
expect(view.delta(view)).deep.equals({
|
|
15
|
+
changed: [],
|
|
16
|
+
added: [],
|
|
17
|
+
removed: [],
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
it('that have the same tree', () => {
|
|
21
|
+
const viewA = RevisionView.fromTree(testTree);
|
|
22
|
+
const viewB = RevisionView.fromTree(testTree);
|
|
23
|
+
expect(viewA.delta(viewB)).deep.equals({
|
|
24
|
+
changed: [],
|
|
25
|
+
added: [],
|
|
26
|
+
removed: [],
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
it('with different root ids', () => {
|
|
30
|
+
const viewA = RevisionView.fromTree(testTree.buildLeaf(testTree.generateNodeId()));
|
|
31
|
+
const viewB = RevisionView.fromTree(testTree.buildLeaf(testTree.generateNodeId()));
|
|
32
|
+
expect(() => viewA.delta(viewB)).to.throw('Delta can only be calculated between views that share a root');
|
|
33
|
+
});
|
|
34
|
+
it('with different subtrees', () => {
|
|
35
|
+
const rootId = testTree.generateNodeId();
|
|
36
|
+
const leafA = testTree.buildLeaf(testTree.generateNodeId());
|
|
37
|
+
const leafB = testTree.buildLeaf(testTree.generateNodeId());
|
|
38
|
+
const subtreeA = {
|
|
39
|
+
identifier: testTree.generateNodeId(),
|
|
40
|
+
definition: 'node',
|
|
41
|
+
traits: { children: [leafA] },
|
|
42
|
+
};
|
|
43
|
+
const subtreeB = {
|
|
44
|
+
identifier: testTree.generateNodeId(),
|
|
45
|
+
definition: 'node',
|
|
46
|
+
traits: { children: [leafB] },
|
|
47
|
+
};
|
|
48
|
+
const rootA = {
|
|
49
|
+
identifier: rootId,
|
|
50
|
+
definition: 'node',
|
|
51
|
+
traits: {
|
|
52
|
+
children: [subtreeA],
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
const rootB = {
|
|
56
|
+
identifier: rootId,
|
|
57
|
+
definition: 'node',
|
|
58
|
+
traits: {
|
|
59
|
+
children: [subtreeB],
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
const viewA = RevisionView.fromTree(rootA);
|
|
63
|
+
const viewB = RevisionView.fromTree(rootB);
|
|
64
|
+
const delta = viewA.delta(viewB);
|
|
65
|
+
expect(delta.changed).deep.equals([rootId]);
|
|
66
|
+
expect(delta.removed.length).equals(2);
|
|
67
|
+
expect(delta.added.length).equals(2);
|
|
68
|
+
expect(delta.removed).contains(subtreeA.identifier);
|
|
69
|
+
expect(delta.removed).contains(leafA.identifier);
|
|
70
|
+
expect(delta.added).contains(subtreeB.identifier);
|
|
71
|
+
expect(delta.added).contains(leafB.identifier);
|
|
72
|
+
});
|
|
73
|
+
it('with different payloads', () => {
|
|
74
|
+
const rootId = testTree.generateNodeId();
|
|
75
|
+
const nodeA = {
|
|
76
|
+
identifier: rootId,
|
|
77
|
+
definition: 'node',
|
|
78
|
+
payload: 'test1',
|
|
79
|
+
traits: {},
|
|
80
|
+
};
|
|
81
|
+
const nodeB = {
|
|
82
|
+
identifier: rootId,
|
|
83
|
+
definition: 'node',
|
|
84
|
+
payload: 'test2',
|
|
85
|
+
traits: {},
|
|
86
|
+
};
|
|
87
|
+
const viewA = RevisionView.fromTree(nodeA);
|
|
88
|
+
const viewB = RevisionView.fromTree(nodeB);
|
|
89
|
+
const delta = viewA.delta(viewB);
|
|
90
|
+
expect(delta.changed).deep.equals([rootId]);
|
|
91
|
+
expect(delta.removed).deep.equals([]);
|
|
92
|
+
expect(delta.added).deep.equals([]);
|
|
93
|
+
});
|
|
94
|
+
it('after an insert', () => {
|
|
95
|
+
const viewA = testTree.view;
|
|
96
|
+
const insertedNode = testTree.buildLeaf(testTree.generateNodeId());
|
|
97
|
+
const treeB = {
|
|
98
|
+
identifier: testTree.identifier,
|
|
99
|
+
definition: testTree.definition,
|
|
100
|
+
traits: Object.assign(Object.assign({}, testTree.traits), { left: [insertedNode, testTree.left] }),
|
|
101
|
+
};
|
|
102
|
+
const viewB = RevisionView.fromTree(treeB);
|
|
103
|
+
const delta = viewA.delta(viewB);
|
|
104
|
+
expect(delta.changed).deep.equals([testTree.identifier]);
|
|
105
|
+
expect(delta.removed).deep.equals([]);
|
|
106
|
+
expect(delta.added).deep.equals([insertedNode.identifier]);
|
|
107
|
+
});
|
|
108
|
+
it('after a delete', () => {
|
|
109
|
+
const viewA = testTree.view;
|
|
110
|
+
const treeB = {
|
|
111
|
+
identifier: testTree.identifier,
|
|
112
|
+
definition: testTree.definition,
|
|
113
|
+
traits: Object.assign(Object.assign({}, testTree.traits), { left: [] }),
|
|
114
|
+
};
|
|
115
|
+
const viewB = RevisionView.fromTree(treeB);
|
|
116
|
+
const delta = viewA.delta(viewB);
|
|
117
|
+
expect(delta.changed).deep.equals([testTree.identifier]);
|
|
118
|
+
expect(delta.removed).deep.equals([testTree.left.identifier]);
|
|
119
|
+
expect(delta.added).deep.equals([]);
|
|
120
|
+
});
|
|
121
|
+
it('after a move', () => {
|
|
122
|
+
const viewA = testTree.view;
|
|
123
|
+
const treeB = {
|
|
124
|
+
identifier: testTree.identifier,
|
|
125
|
+
definition: testTree.definition,
|
|
126
|
+
traits: Object.assign(Object.assign({}, testTree.traits), { left: [], right: [testTree.right, testTree.left] }),
|
|
127
|
+
};
|
|
128
|
+
const viewB = RevisionView.fromTree(treeB);
|
|
129
|
+
const delta = viewA.delta(viewB);
|
|
130
|
+
expect(delta.changed).deep.equals([testTree.identifier]);
|
|
131
|
+
expect(delta.removed).deep.equals([]);
|
|
132
|
+
expect(delta.added).deep.equals([]);
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
it('correctly returns node parentage', () => {
|
|
136
|
+
const view = testTree.view;
|
|
137
|
+
for (const node of view) {
|
|
138
|
+
const parentNode = view.tryGetParentViewNode(node.identifier);
|
|
139
|
+
if (parentNode !== undefined) {
|
|
140
|
+
const parentage = expectDefined(node.parentage);
|
|
141
|
+
expect(parentage.label).to.equal(view.getTraitLabel(node.identifier));
|
|
142
|
+
expect(parentage.parent).to.equal(parentNode.identifier);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
// Regression test for the issue fixed in #9824
|
|
147
|
+
it('can be iterated in a consistent order', () => {
|
|
148
|
+
const [id1, id2, id3] = Array.from({ length: 3 }).map(() => testTree.generateNodeId());
|
|
149
|
+
const label1 = 'traitLabelA';
|
|
150
|
+
const label2 = 'traitLabelB';
|
|
151
|
+
const { definition } = testTree;
|
|
152
|
+
const tree1 = {
|
|
153
|
+
identifier: id1,
|
|
154
|
+
definition,
|
|
155
|
+
traits: {
|
|
156
|
+
[label1]: [{ identifier: id2, definition, traits: {} }],
|
|
157
|
+
[label2]: [{ identifier: id3, definition, traits: {} }],
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
// Like tree1, but defined with the labels in the opposite order and with different node ids under each trait.
|
|
161
|
+
const tree2 = {
|
|
162
|
+
identifier: id1,
|
|
163
|
+
definition,
|
|
164
|
+
traits: {
|
|
165
|
+
[label2]: [{ identifier: id2, definition, traits: {} }],
|
|
166
|
+
[label1]: [{ identifier: id3, definition, traits: {} }],
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
const view1 = RevisionView.fromTree(tree1);
|
|
170
|
+
const view2 = RevisionView.fromTree(tree2);
|
|
171
|
+
expect(Array.from(view1).map((node) => node.identifier)).to.deep.equal([id1, id2, id3]);
|
|
172
|
+
// Child iteration should be sorted on trait labels.
|
|
173
|
+
expect(Array.from(view2).map((node) => node.identifier)).to.deep.equal([id1, id3, id2]);
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
//# sourceMappingURL=TreeView.tests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TreeView.tests.js","sourceRoot":"","sources":["../../src/test/TreeView.tests.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 { expect } from 'chai';\nimport { Definition, TraitLabel } from '../Identifiers';\nimport { RevisionView } from '../RevisionView';\nimport { ChangeNode } from '../persisted-types';\nimport { refreshTestTree } from './utilities/TestUtilities';\nimport { TestNode } from './utilities/TestNode';\nimport { expectDefined } from './utilities/TestCommon';\n\ndescribe('TreeView', () => {\n\tconst testTree = refreshTestTree();\n\n\tdescribe('can compute deltas', () => {\n\t\tit('that are the same object', () => {\n\t\t\tconst view = testTree.view;\n\t\t\texpect(view.delta(view)).deep.equals({\n\t\t\t\tchanged: [],\n\t\t\t\tadded: [],\n\t\t\t\tremoved: [],\n\t\t\t});\n\t\t});\n\n\t\tit('that have the same tree', () => {\n\t\t\tconst viewA = RevisionView.fromTree<TestNode>(testTree);\n\t\t\tconst viewB = RevisionView.fromTree<TestNode>(testTree);\n\t\t\texpect(viewA.delta(viewB)).deep.equals({\n\t\t\t\tchanged: [],\n\t\t\t\tadded: [],\n\t\t\t\tremoved: [],\n\t\t\t});\n\t\t});\n\n\t\tit('with different root ids', () => {\n\t\t\tconst viewA = RevisionView.fromTree(testTree.buildLeaf(testTree.generateNodeId()));\n\t\t\tconst viewB = RevisionView.fromTree(testTree.buildLeaf(testTree.generateNodeId()));\n\t\t\texpect(() => viewA.delta(viewB)).to.throw('Delta can only be calculated between views that share a root');\n\t\t});\n\n\t\tit('with different subtrees', () => {\n\t\t\tconst rootId = testTree.generateNodeId();\n\n\t\t\tconst leafA = testTree.buildLeaf(testTree.generateNodeId());\n\t\t\tconst leafB = testTree.buildLeaf(testTree.generateNodeId());\n\n\t\t\tconst subtreeA = {\n\t\t\t\tidentifier: testTree.generateNodeId(),\n\t\t\t\tdefinition: 'node' as Definition,\n\t\t\t\ttraits: { children: [leafA] },\n\t\t\t};\n\t\t\tconst subtreeB = {\n\t\t\t\tidentifier: testTree.generateNodeId(),\n\t\t\t\tdefinition: 'node' as Definition,\n\t\t\t\ttraits: { children: [leafB] },\n\t\t\t};\n\n\t\t\tconst rootA: ChangeNode = {\n\t\t\t\tidentifier: rootId,\n\t\t\t\tdefinition: 'node' as Definition,\n\t\t\t\ttraits: {\n\t\t\t\t\tchildren: [subtreeA],\n\t\t\t\t},\n\t\t\t};\n\t\t\tconst rootB: ChangeNode = {\n\t\t\t\tidentifier: rootId,\n\t\t\t\tdefinition: 'node' as Definition,\n\t\t\t\ttraits: {\n\t\t\t\t\tchildren: [subtreeB],\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst viewA = RevisionView.fromTree(rootA);\n\t\t\tconst viewB = RevisionView.fromTree(rootB);\n\t\t\tconst delta = viewA.delta(viewB);\n\t\t\texpect(delta.changed).deep.equals([rootId]);\n\t\t\texpect(delta.removed.length).equals(2);\n\t\t\texpect(delta.added.length).equals(2);\n\t\t\texpect(delta.removed).contains(subtreeA.identifier);\n\t\t\texpect(delta.removed).contains(leafA.identifier);\n\t\t\texpect(delta.added).contains(subtreeB.identifier);\n\t\t\texpect(delta.added).contains(leafB.identifier);\n\t\t});\n\n\t\tit('with different payloads', () => {\n\t\t\tconst rootId = testTree.generateNodeId();\n\t\t\tconst nodeA: ChangeNode = {\n\t\t\t\tidentifier: rootId,\n\t\t\t\tdefinition: 'node' as Definition,\n\t\t\t\tpayload: 'test1',\n\t\t\t\ttraits: {},\n\t\t\t};\n\t\t\tconst nodeB: ChangeNode = {\n\t\t\t\tidentifier: rootId,\n\t\t\t\tdefinition: 'node' as Definition,\n\t\t\t\tpayload: 'test2',\n\t\t\t\ttraits: {},\n\t\t\t};\n\n\t\t\tconst viewA = RevisionView.fromTree(nodeA);\n\t\t\tconst viewB = RevisionView.fromTree(nodeB);\n\t\t\tconst delta = viewA.delta(viewB);\n\t\t\texpect(delta.changed).deep.equals([rootId]);\n\t\t\texpect(delta.removed).deep.equals([]);\n\t\t\texpect(delta.added).deep.equals([]);\n\t\t});\n\n\t\tit('after an insert', () => {\n\t\t\tconst viewA = testTree.view;\n\t\t\tconst insertedNode = testTree.buildLeaf(testTree.generateNodeId());\n\t\t\tconst treeB: ChangeNode = {\n\t\t\t\tidentifier: testTree.identifier,\n\t\t\t\tdefinition: testTree.definition,\n\t\t\t\ttraits: { ...testTree.traits, left: [insertedNode, testTree.left] },\n\t\t\t};\n\t\t\tconst viewB = RevisionView.fromTree(treeB);\n\t\t\tconst delta = viewA.delta(viewB);\n\t\t\texpect(delta.changed).deep.equals([testTree.identifier]);\n\t\t\texpect(delta.removed).deep.equals([]);\n\t\t\texpect(delta.added).deep.equals([insertedNode.identifier]);\n\t\t});\n\n\t\tit('after a delete', () => {\n\t\t\tconst viewA = testTree.view;\n\t\t\tconst treeB: ChangeNode = {\n\t\t\t\tidentifier: testTree.identifier,\n\t\t\t\tdefinition: testTree.definition,\n\t\t\t\ttraits: { ...testTree.traits, left: [] },\n\t\t\t};\n\t\t\tconst viewB = RevisionView.fromTree(treeB);\n\t\t\tconst delta = viewA.delta(viewB);\n\t\t\texpect(delta.changed).deep.equals([testTree.identifier]);\n\t\t\texpect(delta.removed).deep.equals([testTree.left.identifier]);\n\t\t\texpect(delta.added).deep.equals([]);\n\t\t});\n\n\t\tit('after a move', () => {\n\t\t\tconst viewA = testTree.view;\n\t\t\tconst treeB: ChangeNode = {\n\t\t\t\tidentifier: testTree.identifier,\n\t\t\t\tdefinition: testTree.definition,\n\t\t\t\ttraits: { ...testTree.traits, left: [], right: [testTree.right, testTree.left] },\n\t\t\t};\n\t\t\tconst viewB = RevisionView.fromTree(treeB);\n\t\t\tconst delta = viewA.delta(viewB);\n\t\t\texpect(delta.changed).deep.equals([testTree.identifier]);\n\t\t\texpect(delta.removed).deep.equals([]);\n\t\t\texpect(delta.added).deep.equals([]);\n\t\t});\n\t});\n\n\tit('correctly returns node parentage', () => {\n\t\tconst view = testTree.view;\n\t\tfor (const node of view) {\n\t\t\tconst parentNode = view.tryGetParentViewNode(node.identifier);\n\t\t\tif (parentNode !== undefined) {\n\t\t\t\tconst parentage = expectDefined(node.parentage);\n\t\t\t\texpect(parentage.label).to.equal(view.getTraitLabel(node.identifier));\n\t\t\t\texpect(parentage.parent).to.equal(parentNode.identifier);\n\t\t\t}\n\t\t}\n\t});\n\n\t// Regression test for the issue fixed in #9824\n\tit('can be iterated in a consistent order', () => {\n\t\tconst [id1, id2, id3] = Array.from({ length: 3 }).map(() => testTree.generateNodeId());\n\t\tconst label1 = 'traitLabelA' as TraitLabel;\n\t\tconst label2 = 'traitLabelB' as TraitLabel;\n\t\tconst { definition } = testTree;\n\t\tconst tree1: ChangeNode = {\n\t\t\tidentifier: id1,\n\t\t\tdefinition,\n\t\t\ttraits: {\n\t\t\t\t[label1]: [{ identifier: id2, definition, traits: {} }],\n\t\t\t\t[label2]: [{ identifier: id3, definition, traits: {} }],\n\t\t\t},\n\t\t};\n\t\t// Like tree1, but defined with the labels in the opposite order and with different node ids under each trait.\n\t\tconst tree2: ChangeNode = {\n\t\t\tidentifier: id1,\n\t\t\tdefinition,\n\t\t\ttraits: {\n\t\t\t\t[label2]: [{ identifier: id2, definition, traits: {} }],\n\t\t\t\t[label1]: [{ identifier: id3, definition, traits: {} }],\n\t\t\t},\n\t\t};\n\t\tconst view1 = RevisionView.fromTree(tree1);\n\t\tconst view2 = RevisionView.fromTree(tree2);\n\t\texpect(Array.from(view1).map((node) => node.identifier)).to.deep.equal([id1, id2, id3]);\n\t\t// Child iteration should be sorted on trait labels.\n\t\texpect(Array.from(view2).map((node) => node.identifier)).to.deep.equal([id1, id3, id2]);\n\t});\n});\n"]}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
5
|
+
import { UndoRedoStackManager } from '@fluidframework/undo-redo';
|
|
6
|
+
import { SharedTreeUndoRedoHandler } from '../UndoRedoHandler';
|
|
6
7
|
import { runSharedTreeUndoRedoTestSuite } from './utilities/UndoRedoTests';
|
|
7
|
-
import { UndoRedoStackManager } from './undoRedoStackManager';
|
|
8
8
|
describe('SharedTreeUndoRedoHandler', () => {
|
|
9
9
|
let undoRedoStack;
|
|
10
10
|
let handler;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UndoRedoHandler.tests.js","sourceRoot":"","sources":["../../src/test/UndoRedoHandler.tests.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"UndoRedoHandler.tests.js","sourceRoot":"","sources":["../../src/test/UndoRedoHandler.tests.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAGjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAE3E,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IAC1C,IAAI,aAAmC,CAAC;IACxC,IAAI,OAAkC,CAAC;IAEvC,MAAM,eAAe,GAAG;QACvB,UAAU,EAAE,CAAC,KAAmB,EAAE,EAAE;YACnC,aAAa,GAAG,IAAI,oBAAoB,EAAE,CAAC;YAC3C,OAAO,GAAG,IAAI,yBAAyB,CAAC,aAAa,CAAC,CAAC;YAEvD,kCAAkC;YAClC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,EAAE,CAAC,IAAgB,EAAE,MAAc,EAAE,EAAE;YAC1C,aAAa,CAAC,aAAa,EAAE,CAAC;YAE9B,6DAA6D;YAC7D,OAAO,sCAAgD,CAAC;QACzD,CAAC;QACD,IAAI,EAAE,CAAC,IAAgB,EAAE,MAAc,EAAE,EAAE;YAC1C,aAAa,CAAC,aAAa,EAAE,CAAC;YAE9B,6DAA6D;YAC7D,OAAO,sCAAgD,CAAC;QACzD,CAAC;QACD,SAAS,EAAE,GAAG,EAAE;YACf,aAAa,CAAC,qBAAqB,EAAE,CAAC;QACvC,CAAC;QACD,sEAAsE;QACtE,oBAAoB,EAAE,KAAK;KAC3B,CAAC;IAEF,8BAA8B,iBAAG,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,IAAK,eAAe,EAAG,CAAC;IAChG,8BAA8B,iBAAG,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,IAAK,eAAe,EAAG,CAAC;AACtG,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { UndoRedoStackManager } from '@fluidframework/undo-redo';\nimport { EditId } from '../Identifiers';\nimport { SharedTree } from '../SharedTree';\nimport { SharedTreeUndoRedoHandler } from '../UndoRedoHandler';\nimport { runSharedTreeUndoRedoTestSuite } from './utilities/UndoRedoTests';\n\ndescribe('SharedTreeUndoRedoHandler', () => {\n\tlet undoRedoStack: UndoRedoStackManager;\n\tlet handler: SharedTreeUndoRedoHandler;\n\n\tconst undoRedoOptions = {\n\t\tbeforeEach: (trees: SharedTree[]) => {\n\t\t\tundoRedoStack = new UndoRedoStackManager();\n\t\t\thandler = new SharedTreeUndoRedoHandler(undoRedoStack);\n\n\t\t\t// Attach each tree to the handler\n\t\t\ttrees.forEach((tree) => handler.attachTree(tree));\n\t\t},\n\t\tundo: (tree: SharedTree, editId: EditId) => {\n\t\t\tundoRedoStack.undoOperation();\n\n\t\t\t// Returns a dummy edit id in order to satisfy the interface.\n\t\t\treturn 'aa26ef18-76a9-4238-9c29-9b796d21ef5a' as EditId;\n\t\t},\n\t\tredo: (tree: SharedTree, editId: EditId) => {\n\t\t\tundoRedoStack.redoOperation();\n\n\t\t\t// Returns a dummy edit id in order to satisfy the interface.\n\t\t\treturn 'aa26ef18-76a9-4238-9c29-9b796d21ef5a' as EditId;\n\t\t},\n\t\tafterEdit: () => {\n\t\t\tundoRedoStack.closeCurrentOperation();\n\t\t},\n\t\t// The SharedTreeUndoRedoHandler does not support out of order revert.\n\t\ttestOutOfOrderRevert: false,\n\t};\n\n\trunSharedTreeUndoRedoTestSuite({ localMode: true, title: 'in local mode', ...undoRedoOptions });\n\trunSharedTreeUndoRedoTestSuite({ localMode: false, title: 'in connected mode', ...undoRedoOptions });\n});\n"]}
|
|
@@ -3,53 +3,97 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
import { expect } from 'chai';
|
|
6
|
-
import {
|
|
7
|
-
import { setTrait } from '../default-edits';
|
|
6
|
+
import { EditLog } from '../EditLog';
|
|
8
7
|
import { assertNotUndefined } from '../Common';
|
|
9
8
|
import { initialTree } from '../InitialTree';
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
9
|
+
import { reservedIdCount, WriteFormat, editsPerChunk, } from '../persisted-types';
|
|
10
|
+
import { SharedTreeDiagnosticEvent } from '../EventTypes';
|
|
11
|
+
import { IdCompressor } from '../id-compressor';
|
|
12
|
+
import { createSessionId } from '../id-compressor/NumericUuid';
|
|
13
|
+
import { SharedTreeEncoder_0_1_1 } from '../SharedTreeEncoder';
|
|
14
|
+
import { CachingLogViewer } from '../LogViewer';
|
|
15
|
+
import { RevisionView } from '../RevisionView';
|
|
16
|
+
import { MutableStringInterner } from '../StringInterner';
|
|
17
|
+
import { applyNoop, createStableEdits, makeNodeIdContext, setUpLocalServerTestSharedTree, } from './utilities/TestUtilities';
|
|
18
|
+
import { SimpleTestTree } from './utilities/TestNode';
|
|
12
19
|
describe('SharedTree history virtualization', () => {
|
|
13
20
|
let sharedTree;
|
|
14
21
|
let testObjectProvider;
|
|
22
|
+
let editChunksUploaded = 0;
|
|
23
|
+
const editCount = 250;
|
|
24
|
+
const expectedFullChunkCount = Math.floor(editCount / editsPerChunk);
|
|
15
25
|
// Create a summary used to test catchup blobbing
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
26
|
+
function createCatchUpSummary(numberOfEdits, payload) {
|
|
27
|
+
const idCompressor = new IdCompressor(createSessionId(), reservedIdCount);
|
|
28
|
+
const context = makeNodeIdContext(idCompressor);
|
|
29
|
+
const edits = createStableEdits(numberOfEdits, context, payload);
|
|
30
|
+
idCompressor.finalizeCreationRange(idCompressor.takeNextCreationRange());
|
|
31
|
+
const editLog = new EditLog();
|
|
32
|
+
for (let i = 0; i < edits.length; i++) {
|
|
33
|
+
editLog.addSequencedEdit(edits[i], { sequenceNumber: i + 1, referenceSequenceNumber: i });
|
|
34
|
+
}
|
|
35
|
+
const logViewer = new CachingLogViewer(editLog, RevisionView.fromTree(initialTree, context, true), undefined, true);
|
|
36
|
+
const internedStrings = [
|
|
37
|
+
SimpleTestTree.definition,
|
|
38
|
+
SimpleTestTree.traitLabel,
|
|
39
|
+
SimpleTestTree.leftTraitLabel,
|
|
40
|
+
SimpleTestTree.rightTraitLabel,
|
|
41
|
+
];
|
|
42
|
+
const interner = new MutableStringInterner(internedStrings);
|
|
43
|
+
const encoder = new SharedTreeEncoder_0_1_1(true);
|
|
44
|
+
return encoder.encodeSummary(editLog, logViewer.getRevisionViewInSession(Number.POSITIVE_INFINITY), context, context, interner, idCompressor.serialize(false));
|
|
45
|
+
}
|
|
21
46
|
beforeEach(async () => {
|
|
22
47
|
const testingComponents = await setUpLocalServerTestSharedTree({
|
|
23
48
|
summarizeHistory: true,
|
|
49
|
+
writeFormat: WriteFormat.v0_1_1,
|
|
24
50
|
});
|
|
25
51
|
sharedTree = testingComponents.tree;
|
|
26
52
|
testObjectProvider = testingComponents.testObjectProvider;
|
|
53
|
+
sharedTree.on(SharedTreeDiagnosticEvent.EditChunkUploaded, () => {
|
|
54
|
+
editChunksUploaded++;
|
|
55
|
+
});
|
|
27
56
|
});
|
|
28
|
-
afterEach(
|
|
29
|
-
|
|
57
|
+
afterEach(() => {
|
|
58
|
+
editChunksUploaded = 0;
|
|
30
59
|
});
|
|
60
|
+
// Replace sharedTree with one that writes summary format 0.0.2
|
|
61
|
+
const useSharedTreeSummaryv0_0_2 = async () => {
|
|
62
|
+
const testingComponents = await setUpLocalServerTestSharedTree({
|
|
63
|
+
summarizeHistory: true,
|
|
64
|
+
writeFormat: WriteFormat.v0_0_2,
|
|
65
|
+
});
|
|
66
|
+
sharedTree = testingComponents.tree;
|
|
67
|
+
testObjectProvider = testingComponents.testObjectProvider;
|
|
68
|
+
sharedTree.on(SharedTreeDiagnosticEvent.EditChunkUploaded, () => {
|
|
69
|
+
editChunksUploaded++;
|
|
70
|
+
});
|
|
71
|
+
};
|
|
31
72
|
// Adds edits to sharedTree1 to make up the specified number of chunks.
|
|
32
|
-
const
|
|
73
|
+
const addNewEditChunks = async (numberOfChunks = 1, additionalEdits = 0) => {
|
|
33
74
|
const expectedEdits = [];
|
|
34
75
|
// Add some edits to create a chunk with.
|
|
35
|
-
while (expectedEdits.length < sharedTree.edits.editsPerChunk * numberOfChunks) {
|
|
36
|
-
|
|
37
|
-
expectedEdits.push(edit);
|
|
38
|
-
sharedTree.processLocalEdit(edit);
|
|
76
|
+
while (expectedEdits.length < sharedTree.edits.editsPerChunk * numberOfChunks + additionalEdits) {
|
|
77
|
+
expectedEdits.push(applyNoop(sharedTree));
|
|
39
78
|
}
|
|
79
|
+
// `ensureSynchronized` does not guarantee blob upload
|
|
80
|
+
await new Promise((resolve) => setImmediate(resolve));
|
|
40
81
|
// Wait for the ops to to be submitted and processed across the containers.
|
|
41
82
|
await testObjectProvider.ensureSynchronized();
|
|
42
83
|
return expectedEdits;
|
|
43
84
|
};
|
|
44
85
|
it('can upload edit chunks and load chunks from handles', async () => {
|
|
45
|
-
const expectedEdits = await
|
|
46
|
-
const summary =
|
|
86
|
+
const expectedEdits = await addNewEditChunks();
|
|
87
|
+
const summary = sharedTree.saveSummary();
|
|
47
88
|
const { editHistory } = summary;
|
|
48
89
|
const { editChunks } = assertNotUndefined(editHistory);
|
|
49
90
|
expect(editChunks.length).to.equal(1);
|
|
50
91
|
expect(typeof editChunks[0].chunk.get).to.equal('function');
|
|
51
92
|
// Load a second tree using the summary
|
|
52
|
-
const { tree: sharedTree2 } = await setUpLocalServerTestSharedTree({
|
|
93
|
+
const { tree: sharedTree2 } = await setUpLocalServerTestSharedTree({
|
|
94
|
+
testObjectProvider,
|
|
95
|
+
writeFormat: WriteFormat.v0_1_1,
|
|
96
|
+
});
|
|
53
97
|
sharedTree2.loadSummary(summary);
|
|
54
98
|
// Ensure chunked edit can be retrieved
|
|
55
99
|
expect((await sharedTree2.edits.getEditAtIndex(2)).id).to.equal(expectedEdits[2].id);
|
|
@@ -61,12 +105,12 @@ describe('SharedTree history virtualization', () => {
|
|
|
61
105
|
});
|
|
62
106
|
// Wait for the op to to be submitted and processed across the containers.
|
|
63
107
|
await testObjectProvider.ensureSynchronized();
|
|
64
|
-
sharedTree.loadSummary(
|
|
108
|
+
sharedTree.loadSummary(createCatchUpSummary(250));
|
|
65
109
|
await testObjectProvider.ensureSynchronized();
|
|
66
|
-
expect(catchUpBlobsUploaded).to.equal(
|
|
67
|
-
const { editHistory } =
|
|
110
|
+
expect(catchUpBlobsUploaded).to.equal(expectedFullChunkCount);
|
|
111
|
+
const { editHistory } = sharedTree.saveSummary();
|
|
68
112
|
const { editChunks } = assertNotUndefined(editHistory);
|
|
69
|
-
expect(editChunks.length).to.equal(1);
|
|
113
|
+
expect(editChunks.length).to.equal(expectedFullChunkCount + 1);
|
|
70
114
|
expect(typeof editChunks[0].chunk.get).to.equal('function');
|
|
71
115
|
});
|
|
72
116
|
it('only uploads catchup blobs from one client', async () => {
|
|
@@ -74,10 +118,12 @@ describe('SharedTree history virtualization', () => {
|
|
|
74
118
|
const { tree: sharedTree2 } = await setUpLocalServerTestSharedTree({
|
|
75
119
|
testObjectProvider,
|
|
76
120
|
summarizeHistory: true,
|
|
121
|
+
writeFormat: WriteFormat.v0_1_1,
|
|
77
122
|
});
|
|
78
123
|
const { tree: sharedTree3 } = await setUpLocalServerTestSharedTree({
|
|
79
124
|
testObjectProvider,
|
|
80
125
|
summarizeHistory: true,
|
|
126
|
+
writeFormat: WriteFormat.v0_1_1,
|
|
81
127
|
});
|
|
82
128
|
let catchUpBlobsUploaded = 0;
|
|
83
129
|
sharedTree.on(SharedTreeDiagnosticEvent.CatchUpBlobUploaded, () => {
|
|
@@ -92,51 +138,31 @@ describe('SharedTree history virtualization', () => {
|
|
|
92
138
|
// Wait for processing again in case there are more no ops
|
|
93
139
|
await testObjectProvider.ensureSynchronized();
|
|
94
140
|
// Try to load summaries on all the trees
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
141
|
+
const summary = createCatchUpSummary(250);
|
|
142
|
+
sharedTree.loadSummary(summary);
|
|
143
|
+
sharedTree2.loadSummary(summary);
|
|
144
|
+
sharedTree3.loadSummary(summary);
|
|
98
145
|
// `ensureSynchronized` does not guarantee blob upload
|
|
99
146
|
await new Promise((resolve) => setImmediate(resolve));
|
|
100
147
|
await testObjectProvider.ensureSynchronized();
|
|
101
|
-
expect(catchUpBlobsUploaded).to.equal(
|
|
148
|
+
expect(catchUpBlobsUploaded).to.equal(expectedFullChunkCount);
|
|
102
149
|
// Make sure the trees are still the same
|
|
103
150
|
expect(sharedTree.equals(sharedTree2)).to.be.true;
|
|
104
151
|
expect(sharedTree.equals(sharedTree3)).to.be.true;
|
|
105
152
|
});
|
|
106
153
|
it("doesn't upload incomplete chunks", async () => {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
// Wait for the op to to be submitted and processed across the containers.
|
|
110
|
-
await testObjectProvider.ensureSynchronized();
|
|
111
|
-
const { editHistory } = fullHistorySummarizer_0_1_0(sharedTree.edits, sharedTree.currentView);
|
|
112
|
-
const { editChunks } = assertNotUndefined(editHistory);
|
|
113
|
-
expect(editChunks.length).to.equal(1);
|
|
114
|
-
// The chunk given by the summary should be an array of length 1.
|
|
115
|
-
const { chunk } = editChunks[0];
|
|
116
|
-
expect(Array.isArray(chunk)).to.be.true;
|
|
117
|
-
expect(chunk.length).to.equal(1);
|
|
154
|
+
await addNewEditChunks(0, 50);
|
|
155
|
+
expect(editChunksUploaded).to.equal(0);
|
|
118
156
|
});
|
|
119
157
|
it('can upload full chunks with incomplete chunks in the edit log', async () => {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
const edit = newEdit(setTrait(testTrait, [makeTestNode()]));
|
|
124
|
-
expectedEdits.push(edit);
|
|
125
|
-
sharedTree.processLocalEdit(edit);
|
|
126
|
-
}
|
|
127
|
-
// Wait for the ops to to be submitted and processed across the containers.
|
|
128
|
-
await testObjectProvider.ensureSynchronized();
|
|
129
|
-
const { editHistory } = fullHistorySummarizer_0_1_0(sharedTree.edits, sharedTree.currentView);
|
|
130
|
-
const { editChunks } = assertNotUndefined(editHistory);
|
|
131
|
-
expect(editChunks.length).to.equal(2);
|
|
132
|
-
expect(typeof editChunks[0].chunk.get).to.equal('function');
|
|
133
|
-
expect(Array.isArray(editChunks[1].chunk)).to.be.true;
|
|
134
|
-
expect(editChunks[1].chunk.length).to.equal(10);
|
|
158
|
+
testObjectProvider.logger.registerExpectedEvent({ eventName: 'fluid:telemetry:Batching:LengthTooBig' }, { eventName: 'fluid:telemetry:Batching:LengthTooBig' });
|
|
159
|
+
await addNewEditChunks(1, 50);
|
|
160
|
+
expect(editChunksUploaded).to.equal(1);
|
|
135
161
|
});
|
|
136
162
|
it('correctly saves handles and their corresponding starting revisions to the summary', async () => {
|
|
137
163
|
testObjectProvider.logger.registerExpectedEvent({ eventName: 'fluid:telemetry:Batching:LengthTooBig' }, { eventName: 'fluid:telemetry:Batching:LengthTooBig' });
|
|
138
|
-
await
|
|
139
|
-
const { editHistory } =
|
|
164
|
+
await addNewEditChunks(4);
|
|
165
|
+
const { editHistory } = sharedTree.saveSummary();
|
|
140
166
|
const { editChunks } = assertNotUndefined(editHistory);
|
|
141
167
|
expect(editChunks.length).to.equal(4);
|
|
142
168
|
// Make sure each starting revision is correct and each chunk in the summary is a handle
|
|
@@ -150,20 +176,22 @@ describe('SharedTree history virtualization', () => {
|
|
|
150
176
|
const { tree: sharedTree2 } = await setUpLocalServerTestSharedTree({
|
|
151
177
|
testObjectProvider,
|
|
152
178
|
summarizeHistory: true,
|
|
179
|
+
writeFormat: WriteFormat.v0_1_1,
|
|
153
180
|
});
|
|
154
181
|
const { tree: sharedTree3 } = await setUpLocalServerTestSharedTree({
|
|
155
182
|
testObjectProvider,
|
|
156
183
|
summarizeHistory: true,
|
|
184
|
+
writeFormat: WriteFormat.v0_1_1,
|
|
157
185
|
});
|
|
158
186
|
// All shared trees should have no edits or chunks
|
|
159
|
-
expect((_a =
|
|
160
|
-
expect((_b =
|
|
161
|
-
expect((_c =
|
|
162
|
-
await
|
|
187
|
+
expect((_a = sharedTree.saveSummary().editHistory) === null || _a === void 0 ? void 0 : _a.editChunks.length).to.equal(0);
|
|
188
|
+
expect((_b = sharedTree2.saveSummary().editHistory) === null || _b === void 0 ? void 0 : _b.editChunks.length).to.equal(0);
|
|
189
|
+
expect((_c = sharedTree3.saveSummary().editHistory) === null || _c === void 0 ? void 0 : _c.editChunks.length).to.equal(0);
|
|
190
|
+
await addNewEditChunks();
|
|
163
191
|
// All shared trees should have the new handle
|
|
164
|
-
const sharedTreeSummary =
|
|
165
|
-
const sharedTree2Summary =
|
|
166
|
-
const sharedTree3Summary =
|
|
192
|
+
const sharedTreeSummary = sharedTree.saveSummary();
|
|
193
|
+
const sharedTree2Summary = sharedTree2.saveSummary();
|
|
194
|
+
const sharedTree3Summary = sharedTree3.saveSummary();
|
|
167
195
|
const sharedTreeChunk = assertNotUndefined(sharedTreeSummary.editHistory).editChunks[0].chunk;
|
|
168
196
|
const sharedTree2Chunk = assertNotUndefined(sharedTree2Summary.editHistory).editChunks[0].chunk;
|
|
169
197
|
const sharedTree3Chunk = assertNotUndefined(sharedTree3Summary.editHistory).editChunks[0].chunk;
|
|
@@ -177,5 +205,61 @@ describe('SharedTree history virtualization', () => {
|
|
|
177
205
|
expect(sharedTreeHandleRoute).to.equal(sharedTree2HandleRoute);
|
|
178
206
|
expect(sharedTree2HandleRoute).to.equal(sharedTree3HandleRoute);
|
|
179
207
|
});
|
|
208
|
+
it('does not cause misaligned chunks', async () => {
|
|
209
|
+
testObjectProvider.logger.registerExpectedEvent({ eventName: 'fluid:telemetry:Batching:LengthTooBig' }, { eventName: 'fluid:telemetry:Batching:LengthTooBig' }, { eventName: 'fluid:telemetry:Batching:LengthTooBig' });
|
|
210
|
+
await addNewEditChunks(1, 50);
|
|
211
|
+
const summary = sharedTree.saveSummary();
|
|
212
|
+
// Connect another client
|
|
213
|
+
const { tree: sharedTree2 } = await setUpLocalServerTestSharedTree({
|
|
214
|
+
testObjectProvider,
|
|
215
|
+
summarizeHistory: true,
|
|
216
|
+
writeFormat: WriteFormat.v0_1_1,
|
|
217
|
+
});
|
|
218
|
+
let unexpectedHistoryChunk = false;
|
|
219
|
+
sharedTree2.on(SharedTreeDiagnosticEvent.UnexpectedHistoryChunk, () => {
|
|
220
|
+
unexpectedHistoryChunk = true;
|
|
221
|
+
});
|
|
222
|
+
sharedTree2.loadSummary(summary);
|
|
223
|
+
// Finish off the incomplete chunk
|
|
224
|
+
await addNewEditChunks();
|
|
225
|
+
expect(unexpectedHistoryChunk).to.be.false;
|
|
226
|
+
});
|
|
227
|
+
it('does not cause misaligned chunks for format version 0.0.2', async () => {
|
|
228
|
+
await useSharedTreeSummaryv0_0_2();
|
|
229
|
+
testObjectProvider.logger.registerExpectedEvent({ eventName: 'fluid:telemetry:Batching:LengthTooBig' }, { eventName: 'fluid:telemetry:Batching:LengthTooBig' }, { eventName: 'fluid:telemetry:Batching:LengthTooBig' });
|
|
230
|
+
// Add enough edits for a chunk and a half
|
|
231
|
+
await addNewEditChunks(1, 50);
|
|
232
|
+
// Connect another client
|
|
233
|
+
const { tree: sharedTree2 } = await setUpLocalServerTestSharedTree({
|
|
234
|
+
testObjectProvider,
|
|
235
|
+
summarizeHistory: true,
|
|
236
|
+
writeFormat: WriteFormat.v0_0_2,
|
|
237
|
+
});
|
|
238
|
+
let unexpectedHistoryChunk = false;
|
|
239
|
+
sharedTree2.on(SharedTreeDiagnosticEvent.UnexpectedHistoryChunk, () => {
|
|
240
|
+
unexpectedHistoryChunk = true;
|
|
241
|
+
});
|
|
242
|
+
sharedTree2.loadSummary(sharedTree.saveSummary());
|
|
243
|
+
// Finish off the incomplete chunk
|
|
244
|
+
await addNewEditChunks();
|
|
245
|
+
expect(unexpectedHistoryChunk).to.be.false;
|
|
246
|
+
});
|
|
247
|
+
it('does not upload blobs larger than 4MB', async () => {
|
|
248
|
+
testObjectProvider.logger.registerExpectedEvent({
|
|
249
|
+
eventName: 'fluid:telemetry:FluidDataStoreRuntime:SharedTree:EditChunkUploadFailure',
|
|
250
|
+
});
|
|
251
|
+
const numberOfEdits = editsPerChunk;
|
|
252
|
+
const fourMegas = 2 ** 22;
|
|
253
|
+
// Without the 1.1, we would generate 100 edits of size roughly 40kb here, but not all of them end up in the first edit chunk
|
|
254
|
+
// due to some setup edits.
|
|
255
|
+
// So we'd barely land within the 4MB limit. Bumping each payload size by 10% is enough to account for this.
|
|
256
|
+
const bigPayload = 'a'.repeat(Math.ceil((1.1 * fourMegas) / numberOfEdits));
|
|
257
|
+
const fakeSummary = createCatchUpSummary(numberOfEdits, () => bigPayload);
|
|
258
|
+
sharedTree.loadSummary(fakeSummary);
|
|
259
|
+
// `ensureSynchronized` does not guarantee blob upload
|
|
260
|
+
await new Promise((resolve) => setImmediate(resolve));
|
|
261
|
+
await testObjectProvider.ensureSynchronized();
|
|
262
|
+
expect(editChunksUploaded).to.equal(0);
|
|
263
|
+
});
|
|
180
264
|
});
|
|
181
265
|
//# sourceMappingURL=Virtualization.tests.js.map
|