@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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"undoRedoStackManager.js","sourceRoot":"","sources":["../../src/test/undoRedoStackManager.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\n// TODO: This is a temporary copy of the 'UndoRedoStackManager' from 'framework/undo-redo'\n// to unblock testing of SharedMatrix undo while we decide on the correct layering\n// for undo.\n\nimport { EventEmitter } from 'events';\nimport { IRevertible } from '../default-edits/UndoRedoHandler';\n\nenum UndoRedoMode {\n\tNone,\n\tRedo,\n\tUndo,\n}\n\n/**\n * Helper class for createing a stack over an array\n */\nclass Stack<T> {\n\tpublic itemPushedCallback: (() => void) | undefined;\n\tprivate readonly items: T[] = [];\n\tconstructor(...items: T[]) {\n\t\tif (items !== undefined) {\n\t\t\titems.forEach((item) => this.push(item));\n\t\t}\n\t}\n\n\tpublic empty(): boolean {\n\t\treturn this.items.length === 0;\n\t}\n\tpublic top(): T | undefined {\n\t\tif (!this.empty()) {\n\t\t\treturn this.items[0];\n\t\t}\n\t\treturn undefined;\n\t}\n\tpublic pop(): T | undefined {\n\t\treturn this.items.shift();\n\t}\n\n\tpublic push(item: T) {\n\t\tthis.items.unshift(item);\n\t\tif (this.itemPushedCallback !== undefined) {\n\t\t\tthis.itemPushedCallback();\n\t\t}\n\t}\n}\n\n/**\n * Helper class for creating the Undo and Redo stacks\n */\nclass UndoRedoStack extends Stack<Stack<IRevertible> | undefined> {\n\tpublic push(item: Stack<IRevertible> | undefined) {\n\t\tif (item !== undefined) {\n\t\t\titem.itemPushedCallback = () => this.callItemPushedCallback;\n\t\t}\n\t\tsuper.push(item);\n\t}\n\n\tpublic closeCurrentOperationIfInProgress() {\n\t\tif (this.top() !== undefined) {\n\t\t\tthis.push(undefined);\n\t\t} else {\n\t\t\tthis.callItemPushedCallback();\n\t\t}\n\t}\n\n\tprivate callItemPushedCallback() {\n\t\tif (this.itemPushedCallback !== undefined) {\n\t\t\tthis.itemPushedCallback();\n\t\t}\n\t}\n}\n\n/**\n * Manages the Undo and Redo stacks, and operations withing those stacks.\n * Allows adding items to the current operation on the stack, closing the current operation,\n * and issuing and undo or a redo.\n */\nexport class UndoRedoStackManager {\n\tprivate static revert(revertStack: UndoRedoStack, pushStack: UndoRedoStack) {\n\t\t// Close the pushStack, as it could get new ops\n\t\t// from the revert, and we don't want those combined\n\t\t// with any existing operation\n\t\tpushStack.closeCurrentOperationIfInProgress();\n\n\t\t// Search the revert stack for the first defined operation stack\n\t\twhile (!revertStack.empty() && revertStack.top() === undefined) {\n\t\t\trevertStack.pop();\n\t\t}\n\n\t\t// If there is a defined operation stack, revert it\n\t\tif (!revertStack.empty()) {\n\t\t\tconst operationStack = revertStack.pop();\n\t\t\tif (operationStack !== undefined) {\n\t\t\t\twhile (!operationStack.empty()) {\n\t\t\t\t\tconst operation = operationStack.pop();\n\t\t\t\t\tif (operation !== undefined) {\n\t\t\t\t\t\toperation.revert();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Make sure both stacks have any open operations\n\t\t// closed, since we won't want anything added to those\n\t\t//\n\t\trevertStack.closeCurrentOperationIfInProgress();\n\t\tpushStack.closeCurrentOperationIfInProgress();\n\t}\n\n\tprivate readonly undoStack = new UndoRedoStack();\n\tprivate readonly redoStack = new UndoRedoStack();\n\tprivate mode: UndoRedoMode = UndoRedoMode.None;\n\tprivate readonly eventEmitter = new EventEmitter();\n\n\tconstructor() {\n\t\tthis.undoStack.itemPushedCallback = () => this.eventEmitter.emit('changePushed');\n\t\tthis.redoStack.itemPushedCallback = () => this.eventEmitter.emit('changePushed');\n\t}\n\n\tpublic closeCurrentOperation() {\n\t\tif (this.mode === UndoRedoMode.None) {\n\t\t\tthis.undoStack.closeCurrentOperationIfInProgress();\n\t\t}\n\t}\n\n\tpublic on(event: 'changePushed', listener: () => void) {\n\t\tthis.eventEmitter.on(event, listener);\n\t}\n\tpublic removeListener(event: 'changePushed', listener: () => void) {\n\t\tthis.eventEmitter.removeListener(event, listener);\n\t}\n\n\tpublic undoOperation(): boolean {\n\t\tif (this.undoStack.empty()) {\n\t\t\treturn false;\n\t\t}\n\t\tthis.mode = UndoRedoMode.Undo;\n\t\tUndoRedoStackManager.revert(this.undoStack, this.redoStack);\n\t\tthis.mode = UndoRedoMode.None;\n\t\treturn true;\n\t}\n\n\tpublic redoOperation(): boolean {\n\t\tif (this.redoStack.empty()) {\n\t\t\treturn false;\n\t\t}\n\t\tthis.mode = UndoRedoMode.Redo;\n\t\tUndoRedoStackManager.revert(this.redoStack, this.undoStack);\n\t\tthis.mode = UndoRedoMode.None;\n\t\treturn true;\n\t}\n\n\tpublic pushToCurrentOperation(revertible: IRevertible) {\n\t\tlet currentStack: UndoRedoStack;\n\n\t\tswitch (this.mode) {\n\t\t\tcase UndoRedoMode.None:\n\t\t\t\tcurrentStack = this.undoStack;\n\t\t\t\tthis.clearRedoStack();\n\t\t\t\tbreak;\n\n\t\t\tcase UndoRedoMode.Redo:\n\t\t\t\tcurrentStack = this.undoStack;\n\t\t\t\tbreak;\n\n\t\t\tcase UndoRedoMode.Undo:\n\t\t\t\tcurrentStack = this.redoStack;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error('unknown mode');\n\t\t}\n\t\tconst operationStack = currentStack.top();\n\t\tif (operationStack === undefined) {\n\t\t\tcurrentStack.push(new Stack<IRevertible>(revertible));\n\t\t} else {\n\t\t\toperationStack.push(revertible);\n\t\t}\n\t}\n\n\tprivate clearRedoStack() {\n\t\twhile (!this.redoStack.empty()) {\n\t\t\tconst redoOpertionStack = this.redoStack.pop();\n\t\t\tif (redoOpertionStack !== undefined) {\n\t\t\t\twhile (!redoOpertionStack.empty()) {\n\t\t\t\t\tconst redoOperation = redoOpertionStack.pop();\n\t\t\t\t\tif (redoOperation !== undefined) {\n\t\t\t\t\t\tredoOperation.discard();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
import { SharedTree } from '../../default-edits';
|
|
6
|
-
import { SharedTreeWithAnchors } from '../../anchored-edits';
|
|
7
|
-
import { LocalServerSharedTreeTestingComponents, LocalServerSharedTreeTestingOptions, SharedTreeTestingComponents, SharedTreeTestingOptions } from './TestUtilities';
|
|
8
|
-
/**
|
|
9
|
-
* Runs a test suite for summaries on `SharedTree`.
|
|
10
|
-
* This suite can be used to test other implementations that aim to fulfill `SharedTree`'s contract.
|
|
11
|
-
*/
|
|
12
|
-
export declare function runSummaryTests<TSharedTree extends SharedTree | SharedTreeWithAnchors>(title: string, setUpTestSharedTree: (options?: SharedTreeTestingOptions) => SharedTreeTestingComponents<TSharedTree>, setUpLocalServerTestSharedTree: (options: LocalServerSharedTreeTestingOptions) => Promise<LocalServerSharedTreeTestingComponents<TSharedTree>>): void;
|
|
13
|
-
//# sourceMappingURL=SummaryFormatCompatibilityTests.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SummaryFormatCompatibilityTests.d.ts","sourceRoot":"","sources":["../../../src/test/utilities/SummaryFormatCompatibilityTests.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AASjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAEN,sCAAsC,EACtC,mCAAmC,EACnC,2BAA2B,EAC3B,wBAAwB,EACxB,MAAM,iBAAiB,CAAC;AAoBzB;;;GAGG;AACH,wBAAgB,eAAe,CAAC,WAAW,SAAS,UAAU,GAAG,qBAAqB,EACrF,KAAK,EAAE,MAAM,EACb,mBAAmB,EAAE,CAAC,OAAO,CAAC,EAAE,wBAAwB,KAAK,2BAA2B,CAAC,WAAW,CAAC,EACrG,8BAA8B,EAAE,CAC/B,OAAO,EAAE,mCAAmC,KACxC,OAAO,CAAC,sCAAsC,CAAC,WAAW,CAAC,CAAC,QA8JjE"}
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
import * as fs from 'fs';
|
|
6
|
-
import { resolve, join } from 'path';
|
|
7
|
-
import { assert, expect } from 'chai';
|
|
8
|
-
import { fail } from '../../Common';
|
|
9
|
-
import { deserialize } from '../../SummaryBackCompatibility';
|
|
10
|
-
import { fullHistorySummarizer, fullHistorySummarizer_0_1_0, } from '../../generic';
|
|
11
|
-
import { createStableEdits, } from './TestUtilities';
|
|
12
|
-
import { TestFluidSerializer } from './TestSerializer';
|
|
13
|
-
// This accounts for this file being executed after compilation. If many tests want to leverage resources, we should unify
|
|
14
|
-
// resource path logic to a single place.
|
|
15
|
-
const pathBase = resolve(__dirname, '../../../src/test/summary-files/');
|
|
16
|
-
function summaryFilePath(summaryName) {
|
|
17
|
-
return join(pathBase, `${summaryName}.json`);
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* A version/summarizer pair must be specified for a write test to be generated.
|
|
21
|
-
* Versions that can no longer be written should be removed from this list.
|
|
22
|
-
*/
|
|
23
|
-
const supportedSummarizers = [
|
|
24
|
-
{ version: '0.0.2', summarizer: fullHistorySummarizer },
|
|
25
|
-
{ version: '0.1.0', summarizer: fullHistorySummarizer_0_1_0 },
|
|
26
|
-
];
|
|
27
|
-
/**
|
|
28
|
-
* Runs a test suite for summaries on `SharedTree`.
|
|
29
|
-
* This suite can be used to test other implementations that aim to fulfill `SharedTree`'s contract.
|
|
30
|
-
*/
|
|
31
|
-
export function runSummaryTests(title, setUpTestSharedTree, setUpLocalServerTestSharedTree) {
|
|
32
|
-
describe(title, () => {
|
|
33
|
-
var _a;
|
|
34
|
-
const setupEditId = '9406d301-7449-48a5-b2ea-9be637b0c6e4';
|
|
35
|
-
const testSerializer = new TestFluidSerializer();
|
|
36
|
-
let expectedTree;
|
|
37
|
-
let testObjectProvider;
|
|
38
|
-
const testSummaryFiles = fs.readdirSync(pathBase);
|
|
39
|
-
// Create and populate a map of the file names associated with their summary type
|
|
40
|
-
const summaryTypes = new Map();
|
|
41
|
-
for (let fileName of testSummaryFiles) {
|
|
42
|
-
// Summary files should be named in the following format: `${summaryType}-${version}.json`
|
|
43
|
-
const fileNameRegularExpression = /(?<summaryType>[\w+-]*\w+)-(?<version>\d+\.\d\.\d).json/;
|
|
44
|
-
const match = fileNameRegularExpression.exec(fileName);
|
|
45
|
-
const matchGroups = (_a = match === null || match === void 0 ? void 0 : match.groups) !== null && _a !== void 0 ? _a : fail(`invalid filename ${fileName}`);
|
|
46
|
-
const summaryType = matchGroups.summaryType;
|
|
47
|
-
fileName = `${matchGroups.summaryType}-${matchGroups.version}`;
|
|
48
|
-
let collection = summaryTypes.get(summaryType);
|
|
49
|
-
if (collection === undefined) {
|
|
50
|
-
collection = [];
|
|
51
|
-
summaryTypes.set(summaryType, collection);
|
|
52
|
-
}
|
|
53
|
-
collection.push(fileName);
|
|
54
|
-
}
|
|
55
|
-
// Resets the tree before each test
|
|
56
|
-
beforeEach(async () => {
|
|
57
|
-
const testingComponents = await setUpLocalServerTestSharedTree({
|
|
58
|
-
setupEditId,
|
|
59
|
-
});
|
|
60
|
-
expectedTree = testingComponents.tree;
|
|
61
|
-
testObjectProvider = testingComponents.testObjectProvider;
|
|
62
|
-
});
|
|
63
|
-
afterEach(async () => {
|
|
64
|
-
testObjectProvider.reset();
|
|
65
|
-
});
|
|
66
|
-
const validateSummaryRead = (fileName) => {
|
|
67
|
-
const serializedSummary = fs.readFileSync(summaryFilePath(fileName), 'utf8');
|
|
68
|
-
const summary = deserialize(serializedSummary, testSerializer);
|
|
69
|
-
const { tree } = setUpTestSharedTree();
|
|
70
|
-
assert.typeOf(summary, 'object');
|
|
71
|
-
tree.loadSummary(summary);
|
|
72
|
-
expect(tree.equals(expectedTree)).to.be.true;
|
|
73
|
-
};
|
|
74
|
-
const validateSummaryWrite = (summarizer) => {
|
|
75
|
-
// Save a new summary with the expected tree and use it to load a new SharedTree
|
|
76
|
-
const newSummary = summarizer(expectedTree.edits, expectedTree.currentView);
|
|
77
|
-
const { tree: tree2 } = setUpTestSharedTree();
|
|
78
|
-
tree2.loadSummary(newSummary);
|
|
79
|
-
// The expected tree, tree loaded with the existing summary, and the tree loaded
|
|
80
|
-
// with the new summary should all be equal.
|
|
81
|
-
expect(tree2.equals(expectedTree)).to.be.true;
|
|
82
|
-
};
|
|
83
|
-
for (const [summaryType, files] of summaryTypes.entries()) {
|
|
84
|
-
it(`files of type '${summaryType}' with different format versions produce identical trees`, () => {
|
|
85
|
-
// Load the first summary file
|
|
86
|
-
const serializedSummary = fs.readFileSync(summaryFilePath(files[0]), 'utf8');
|
|
87
|
-
const summary = deserialize(serializedSummary, testSerializer);
|
|
88
|
-
assert.typeOf(summary, 'object');
|
|
89
|
-
expectedTree.loadSummary(summary);
|
|
90
|
-
// Check every other summary file results in the same loaded tree
|
|
91
|
-
for (let i = 1; i < files.length; i++) {
|
|
92
|
-
const { tree } = setUpTestSharedTree();
|
|
93
|
-
const serializedSummary = fs.readFileSync(summaryFilePath(files[i]), 'utf8');
|
|
94
|
-
const summary = deserialize(serializedSummary, testSerializer);
|
|
95
|
-
assert.typeOf(summary, 'object');
|
|
96
|
-
tree.loadSummary(summary);
|
|
97
|
-
expect(tree.equals(expectedTree)).to.be.true;
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
for (const { version, summarizer } of supportedSummarizers) {
|
|
101
|
-
it(`format version ${version} can be written for ${summaryType} summary type`, async () => {
|
|
102
|
-
// Load the first summary file (the one with the oldest version)
|
|
103
|
-
const serializedSummary = fs.readFileSync(summaryFilePath(files.sort()[0]), 'utf8');
|
|
104
|
-
const summary = deserialize(serializedSummary, testSerializer);
|
|
105
|
-
assert.typeOf(summary, 'object');
|
|
106
|
-
// Wait for the ops to to be submitted and processed across the containers.
|
|
107
|
-
await testObjectProvider.ensureSynchronized();
|
|
108
|
-
expectedTree.loadSummary(summary);
|
|
109
|
-
await testObjectProvider.ensureSynchronized();
|
|
110
|
-
// Write a new summary with the specified version
|
|
111
|
-
const newSummary = expectedTree.saveSerializedSummary({ summarizer });
|
|
112
|
-
// Check the newly written summary is equivalent to its corresponding test summary file
|
|
113
|
-
const fileName = `${summaryType}-${version}`;
|
|
114
|
-
// Re-stringify the the JSON file to remove escaped characters
|
|
115
|
-
const expectedSummary = JSON.stringify(JSON.parse(fs.readFileSync(summaryFilePath(fileName), 'utf8')));
|
|
116
|
-
expect(newSummary).to.equal(expectedSummary);
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
describe('version 0.0.2', () => {
|
|
121
|
-
it('can be read and written with no history', async () => {
|
|
122
|
-
validateSummaryRead('no-history-0.0.2');
|
|
123
|
-
validateSummaryWrite(fullHistorySummarizer);
|
|
124
|
-
});
|
|
125
|
-
it('can be read and written with small history', async () => {
|
|
126
|
-
createStableEdits(11).forEach((edit) => {
|
|
127
|
-
expectedTree.processLocalEdit(edit);
|
|
128
|
-
});
|
|
129
|
-
// Wait for the ops to to be submitted and processed across the containers.
|
|
130
|
-
await testObjectProvider.ensureSynchronized();
|
|
131
|
-
validateSummaryRead('small-history-0.0.2');
|
|
132
|
-
validateSummaryWrite(fullHistorySummarizer);
|
|
133
|
-
});
|
|
134
|
-
});
|
|
135
|
-
describe('version 0.1.0', () => {
|
|
136
|
-
it('can be read and written with no history', async () => {
|
|
137
|
-
validateSummaryRead('no-history-0.1.0');
|
|
138
|
-
validateSummaryWrite(fullHistorySummarizer_0_1_0);
|
|
139
|
-
});
|
|
140
|
-
it('can be read and written with large history', async () => {
|
|
141
|
-
testObjectProvider.logger.registerExpectedEvent({ eventName: 'fluid:telemetry:Batching:LengthTooBig' }, { eventName: 'fluid:telemetry:Batching:LengthTooBig' });
|
|
142
|
-
// Process an arbitrarily large number of stable edits
|
|
143
|
-
createStableEdits(251).forEach((edit) => {
|
|
144
|
-
expectedTree.processLocalEdit(edit);
|
|
145
|
-
});
|
|
146
|
-
// Wait for the ops to to be submitted and processed across the containers.
|
|
147
|
-
await testObjectProvider.ensureSynchronized();
|
|
148
|
-
validateSummaryRead('large-history-0.1.0');
|
|
149
|
-
validateSummaryWrite(fullHistorySummarizer_0_1_0);
|
|
150
|
-
});
|
|
151
|
-
});
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
//# sourceMappingURL=SummaryFormatCompatibilityTests.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SummaryFormatCompatibilityTests.js","sourceRoot":"","sources":["../../../src/test/utilities/SummaryFormatCompatibilityTests.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 * as fs from 'fs';\nimport { resolve, join } from 'path';\nimport { assert, expect } from 'chai';\nimport { TestObjectProvider } from '@fluidframework/test-utils';\nimport { fail } from '../../Common';\nimport { SharedTree } from '../../default-edits';\nimport { EditId } from '../../Identifiers';\nimport { deserialize } from '../../SummaryBackCompatibility';\nimport {\n\tfullHistorySummarizer,\n\tfullHistorySummarizer_0_1_0,\n\tSharedTreeSummarizer,\n\tSharedTreeSummaryBase,\n} from '../../generic';\nimport { SharedTreeWithAnchors } from '../../anchored-edits';\nimport {\n\tcreateStableEdits,\n\tLocalServerSharedTreeTestingComponents,\n\tLocalServerSharedTreeTestingOptions,\n\tSharedTreeTestingComponents,\n\tSharedTreeTestingOptions,\n} from './TestUtilities';\nimport { TestFluidSerializer } from './TestSerializer';\n\n// This accounts for this file being executed after compilation. If many tests want to leverage resources, we should unify\n// resource path logic to a single place.\nconst pathBase = resolve(__dirname, '../../../src/test/summary-files/');\n\nfunction summaryFilePath(summaryName: string): string {\n\treturn join(pathBase, `${summaryName}.json`);\n}\n\n/**\n * A version/summarizer pair must be specified for a write test to be generated.\n * Versions that can no longer be written should be removed from this list.\n */\nconst supportedSummarizers: { version: string; summarizer: SharedTreeSummarizer<unknown> }[] = [\n\t{ version: '0.0.2', summarizer: fullHistorySummarizer },\n\t{ version: '0.1.0', summarizer: fullHistorySummarizer_0_1_0 },\n];\n\n/**\n * Runs a test suite for summaries on `SharedTree`.\n * This suite can be used to test other implementations that aim to fulfill `SharedTree`'s contract.\n */\nexport function runSummaryTests<TSharedTree extends SharedTree | SharedTreeWithAnchors>(\n\ttitle: string,\n\tsetUpTestSharedTree: (options?: SharedTreeTestingOptions) => SharedTreeTestingComponents<TSharedTree>,\n\tsetUpLocalServerTestSharedTree: (\n\t\toptions: LocalServerSharedTreeTestingOptions\n\t) => Promise<LocalServerSharedTreeTestingComponents<TSharedTree>>\n) {\n\tdescribe(title, () => {\n\t\tconst setupEditId = '9406d301-7449-48a5-b2ea-9be637b0c6e4' as EditId;\n\n\t\tconst testSerializer = new TestFluidSerializer();\n\n\t\tlet expectedTree: TSharedTree;\n\t\tlet testObjectProvider: TestObjectProvider;\n\n\t\tconst testSummaryFiles = fs.readdirSync(pathBase);\n\n\t\t// Create and populate a map of the file names associated with their summary type\n\t\tconst summaryTypes = new Map<string, string[]>();\n\t\tfor (let fileName of testSummaryFiles) {\n\t\t\t// Summary files should be named in the following format: `${summaryType}-${version}.json`\n\t\t\tconst fileNameRegularExpression = /(?<summaryType>[\\w+-]*\\w+)-(?<version>\\d+\\.\\d\\.\\d).json/;\n\t\t\tconst match = fileNameRegularExpression.exec(fileName);\n\n\t\t\tconst matchGroups = match?.groups ?? fail(`invalid filename ${fileName}`);\n\t\t\tconst summaryType = matchGroups.summaryType;\n\t\t\tfileName = `${matchGroups.summaryType}-${matchGroups.version}`;\n\n\t\t\tlet collection = summaryTypes.get(summaryType);\n\t\t\tif (collection === undefined) {\n\t\t\t\tcollection = [];\n\t\t\t\tsummaryTypes.set(summaryType, collection);\n\t\t\t}\n\t\t\tcollection.push(fileName);\n\t\t}\n\n\t\t// Resets the tree before each test\n\t\tbeforeEach(async () => {\n\t\t\tconst testingComponents = await setUpLocalServerTestSharedTree({\n\t\t\t\tsetupEditId,\n\t\t\t});\n\t\t\texpectedTree = testingComponents.tree;\n\t\t\ttestObjectProvider = testingComponents.testObjectProvider;\n\t\t});\n\n\t\tafterEach(async () => {\n\t\t\ttestObjectProvider.reset();\n\t\t});\n\n\t\tconst validateSummaryRead = (fileName: string): void => {\n\t\t\tconst serializedSummary = fs.readFileSync(summaryFilePath(fileName), 'utf8');\n\t\t\tconst summary = deserialize(serializedSummary, testSerializer);\n\n\t\t\tconst { tree } = setUpTestSharedTree();\n\t\t\tassert.typeOf(summary, 'object');\n\t\t\ttree.loadSummary(summary as SharedTreeSummaryBase);\n\n\t\t\texpect(tree.equals(expectedTree)).to.be.true;\n\t\t};\n\n\t\tconst validateSummaryWrite = (summarizer: SharedTreeSummarizer<unknown>): void => {\n\t\t\t// Save a new summary with the expected tree and use it to load a new SharedTree\n\t\t\tconst newSummary = summarizer(expectedTree.edits, expectedTree.currentView);\n\t\t\tconst { tree: tree2 } = setUpTestSharedTree();\n\t\t\ttree2.loadSummary(newSummary);\n\n\t\t\t// The expected tree, tree loaded with the existing summary, and the tree loaded\n\t\t\t// with the new summary should all be equal.\n\t\t\texpect(tree2.equals(expectedTree)).to.be.true;\n\t\t};\n\n\t\tfor (const [summaryType, files] of summaryTypes.entries()) {\n\t\t\tit(`files of type '${summaryType}' with different format versions produce identical trees`, () => {\n\t\t\t\t// Load the first summary file\n\t\t\t\tconst serializedSummary = fs.readFileSync(summaryFilePath(files[0]), 'utf8');\n\t\t\t\tconst summary = deserialize(serializedSummary, testSerializer);\n\t\t\t\tassert.typeOf(summary, 'object');\n\t\t\t\texpectedTree.loadSummary(summary as SharedTreeSummaryBase);\n\n\t\t\t\t// Check every other summary file results in the same loaded tree\n\t\t\t\tfor (let i = 1; i < files.length; i++) {\n\t\t\t\t\tconst { tree } = setUpTestSharedTree();\n\n\t\t\t\t\tconst serializedSummary = fs.readFileSync(summaryFilePath(files[i]), 'utf8');\n\t\t\t\t\tconst summary = deserialize(serializedSummary, testSerializer);\n\t\t\t\t\tassert.typeOf(summary, 'object');\n\t\t\t\t\ttree.loadSummary(summary as SharedTreeSummaryBase);\n\n\t\t\t\t\texpect(tree.equals(expectedTree)).to.be.true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfor (const { version, summarizer } of supportedSummarizers) {\n\t\t\t\tit(`format version ${version} can be written for ${summaryType} summary type`, async () => {\n\t\t\t\t\t// Load the first summary file (the one with the oldest version)\n\t\t\t\t\tconst serializedSummary = fs.readFileSync(summaryFilePath(files.sort()[0]), 'utf8');\n\t\t\t\t\tconst summary = deserialize(serializedSummary, testSerializer);\n\t\t\t\t\tassert.typeOf(summary, 'object');\n\n\t\t\t\t\t// Wait for the ops to to be submitted and processed across the containers.\n\t\t\t\t\tawait testObjectProvider.ensureSynchronized();\n\t\t\t\t\texpectedTree.loadSummary(summary as SharedTreeSummaryBase);\n\n\t\t\t\t\tawait testObjectProvider.ensureSynchronized();\n\n\t\t\t\t\t// Write a new summary with the specified version\n\t\t\t\t\tconst newSummary = expectedTree.saveSerializedSummary({ summarizer });\n\n\t\t\t\t\t// Check the newly written summary is equivalent to its corresponding test summary file\n\t\t\t\t\tconst fileName = `${summaryType}-${version}`;\n\t\t\t\t\t// Re-stringify the the JSON file to remove escaped characters\n\t\t\t\t\tconst expectedSummary = JSON.stringify(\n\t\t\t\t\t\tJSON.parse(fs.readFileSync(summaryFilePath(fileName), 'utf8'))\n\t\t\t\t\t);\n\n\t\t\t\t\texpect(newSummary).to.equal(expectedSummary);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tdescribe('version 0.0.2', () => {\n\t\t\tit('can be read and written with no history', async () => {\n\t\t\t\tvalidateSummaryRead('no-history-0.0.2');\n\t\t\t\tvalidateSummaryWrite(fullHistorySummarizer);\n\t\t\t});\n\n\t\t\tit('can be read and written with small history', async () => {\n\t\t\t\tcreateStableEdits(11).forEach((edit) => {\n\t\t\t\t\texpectedTree.processLocalEdit(edit);\n\t\t\t\t});\n\n\t\t\t\t// Wait for the ops to to be submitted and processed across the containers.\n\t\t\t\tawait testObjectProvider.ensureSynchronized();\n\n\t\t\t\tvalidateSummaryRead('small-history-0.0.2');\n\t\t\t\tvalidateSummaryWrite(fullHistorySummarizer);\n\t\t\t});\n\t\t});\n\n\t\tdescribe('version 0.1.0', () => {\n\t\t\tit('can be read and written with no history', async () => {\n\t\t\t\tvalidateSummaryRead('no-history-0.1.0');\n\t\t\t\tvalidateSummaryWrite(fullHistorySummarizer_0_1_0);\n\t\t\t});\n\n\t\t\tit('can be read and written with large history', async () => {\n\t\t\t\ttestObjectProvider.logger.registerExpectedEvent(\n\t\t\t\t\t{ eventName: 'fluid:telemetry:Batching:LengthTooBig' },\n\t\t\t\t\t{ eventName: 'fluid:telemetry:Batching:LengthTooBig' }\n\t\t\t\t);\n\t\t\t\t// Process an arbitrarily large number of stable edits\n\t\t\t\tcreateStableEdits(251).forEach((edit) => {\n\t\t\t\t\texpectedTree.processLocalEdit(edit);\n\t\t\t\t});\n\n\t\t\t\t// Wait for the ops to to be submitted and processed across the containers.\n\t\t\t\tawait testObjectProvider.ensureSynchronized();\n\n\t\t\t\tvalidateSummaryRead('large-history-0.1.0');\n\t\t\t\tvalidateSummaryWrite(fullHistorySummarizer_0_1_0);\n\t\t\t});\n\t\t});\n\t});\n}\n"]}
|
package/src/BasicCheckout.ts
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { Snapshot } from './Snapshot';
|
|
7
|
-
import { Checkout } from './Checkout';
|
|
8
|
-
import { EditCommittedEventArguments, GenericSharedTree } from './generic';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Basic Session that stays up to date with the SharedTree.
|
|
12
|
-
*
|
|
13
|
-
* waitForPendingUpdates is always a no-op since BasicCheckout is always up to date.
|
|
14
|
-
* @public
|
|
15
|
-
* @sealed
|
|
16
|
-
*/
|
|
17
|
-
export class BasicCheckout<TChange> extends Checkout<TChange> {
|
|
18
|
-
/**
|
|
19
|
-
* @param tree - the tree
|
|
20
|
-
*/
|
|
21
|
-
public constructor(tree: GenericSharedTree<TChange>) {
|
|
22
|
-
super(tree, tree.currentView, (args: EditCommittedEventArguments<GenericSharedTree<TChange>>) => {
|
|
23
|
-
this.emitChange();
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
protected get latestCommittedView(): Snapshot {
|
|
28
|
-
return this.tree.currentView;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
public async waitForPendingUpdates(): Promise<void> {
|
|
32
|
-
return Promise.resolve();
|
|
33
|
-
}
|
|
34
|
-
}
|
package/src/Snapshot.ts
DELETED
|
@@ -1,363 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { assert, copyPropertyIfDefined, fail } from './Common';
|
|
7
|
-
import { NodeId, TraitLabel } from './Identifiers';
|
|
8
|
-
import { getChangeNodeFromSnapshot } from './SnapshotUtilities';
|
|
9
|
-
import { Delta, Forest } from './Forest';
|
|
10
|
-
import { ChangeNode, NodeData, Payload, TraitLocation } from './generic';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* An immutable view of a distributed tree node.
|
|
14
|
-
* @public
|
|
15
|
-
*/
|
|
16
|
-
export interface SnapshotNode extends NodeData {
|
|
17
|
-
readonly traits: ReadonlyMap<TraitLabel, readonly NodeId[]>;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Index of a place within a trait.
|
|
22
|
-
* 0 = before all nodes,
|
|
23
|
-
* 1 = after first node,
|
|
24
|
-
* etc.
|
|
25
|
-
* @public
|
|
26
|
-
*/
|
|
27
|
-
export type PlaceIndex = number & { readonly PlaceIndex: unique symbol };
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Index of a node within a trait.
|
|
31
|
-
* 0 = first node,
|
|
32
|
-
* 1 = second node,
|
|
33
|
-
* etc.
|
|
34
|
-
* @public
|
|
35
|
-
*/
|
|
36
|
-
export type TraitNodeIndex = number & { readonly TraitNodeIndex: unique symbol };
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* A place within a particular `Snapshot` that is anchored relative to a specific node in the tree, or relative to the outside of the trait.
|
|
40
|
-
* Valid iff 'trait' is valid and, if provided, sibling is in the Location specified by 'trait'.
|
|
41
|
-
* @public
|
|
42
|
-
*/
|
|
43
|
-
export interface SnapshotPlace {
|
|
44
|
-
readonly sibling?: NodeId;
|
|
45
|
-
readonly side: Side;
|
|
46
|
-
readonly trait: TraitLocation;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Defines a place relative to sibling.
|
|
51
|
-
* The "outside" of a trait is the `undefined` sibling,
|
|
52
|
-
* so After `undefined` is the beginning of the trait, and before `undefined` is the end.
|
|
53
|
-
*
|
|
54
|
-
* For this purpose, traits look like:
|
|
55
|
-
*
|
|
56
|
-
* `{undefined} - {Node 0} - {Node 1} - ... - {Node N} - {undefined}`
|
|
57
|
-
*
|
|
58
|
-
* Each `{value}` in the diagram is a possible sibling, which is either a Node or undefined.
|
|
59
|
-
* Each `-` in the above diagram is a `Place`, and can be describe as being `After` a particular `{sibling}` or `Before` it.
|
|
60
|
-
* This means that `After` `{undefined}` means the same `Place` as before the first node
|
|
61
|
-
* and `Before` `{undefined}` means the `Place` after the last Node.
|
|
62
|
-
*
|
|
63
|
-
* Each place can be specified, (aka 'anchored') in two ways (relative to the sibling before or after):
|
|
64
|
-
* the choice of which way to anchor a place only matters when the kept across an edit, and thus evaluated in multiple contexts where the
|
|
65
|
-
* two place description may no longer evaluate to the same place.
|
|
66
|
-
* @public
|
|
67
|
-
*/
|
|
68
|
-
export enum Side {
|
|
69
|
-
Before = 0,
|
|
70
|
-
After = 1,
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Specifies the range of nodes from `start` to `end` within a trait within a particular `Snapshot`.
|
|
75
|
-
* Valid iff start and end are valid and are withing the same trait.
|
|
76
|
-
* @public
|
|
77
|
-
*/
|
|
78
|
-
export interface SnapshotRange {
|
|
79
|
-
readonly start: SnapshotPlace;
|
|
80
|
-
readonly end: SnapshotPlace;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* An immutable view of a distributed tree.
|
|
85
|
-
* @public
|
|
86
|
-
*/
|
|
87
|
-
export class Snapshot {
|
|
88
|
-
public readonly root: NodeId;
|
|
89
|
-
private readonly forest: Forest;
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* A cache of node's index within their parent trait.
|
|
93
|
-
* Used to avoid redundant linear scans of traits.
|
|
94
|
-
* Not shared across snapshots; initialized to empty each time a Snapshot is created.
|
|
95
|
-
*/
|
|
96
|
-
private traitIndicesCache?: Map<NodeId, TraitNodeIndex>;
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Constructs a Snapshot using the supplied tree.
|
|
100
|
-
* @param root - the root of the tree to use as the contents of the `Snapshot`
|
|
101
|
-
*/
|
|
102
|
-
public static fromTree(root: ChangeNode, expensiveValidation = false): Snapshot {
|
|
103
|
-
function insertNodeRecursive(node: ChangeNode, newSnapshotNodes: Map<NodeId, SnapshotNode>): NodeId {
|
|
104
|
-
const { identifier, definition } = node;
|
|
105
|
-
const traits: Map<TraitLabel, readonly NodeId[]> = new Map();
|
|
106
|
-
|
|
107
|
-
// eslint-disable-next-line no-restricted-syntax
|
|
108
|
-
for (const key in node.traits) {
|
|
109
|
-
if (Object.prototype.hasOwnProperty.call(node.traits, key)) {
|
|
110
|
-
const element = node.traits[key];
|
|
111
|
-
if (element.length > 0) {
|
|
112
|
-
traits.set(
|
|
113
|
-
key as TraitLabel,
|
|
114
|
-
element.map((n) => insertNodeRecursive(n, newSnapshotNodes))
|
|
115
|
-
);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
const snapshotNode: SnapshotNode = { identifier, definition, traits };
|
|
120
|
-
copyPropertyIfDefined(node, snapshotNode, 'payload');
|
|
121
|
-
assert(
|
|
122
|
-
!newSnapshotNodes.has(identifier),
|
|
123
|
-
`duplicate node in tree for snapshot: { identifier: ${identifier}, definition: ${definition}`
|
|
124
|
-
);
|
|
125
|
-
newSnapshotNodes.set(snapshotNode.identifier, snapshotNode);
|
|
126
|
-
return snapshotNode.identifier;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
const map = new Map<NodeId, SnapshotNode>();
|
|
130
|
-
return new Snapshot(insertNodeRecursive(root, map), Forest.create(expensiveValidation).add(map.values()));
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
private constructor(root: NodeId, forest: Forest) {
|
|
134
|
-
this.root = root;
|
|
135
|
-
this.forest = forest;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/** Return a tree of JSON-compatible `ChangeNode`s representing the current state of this `Snapshot` */
|
|
139
|
-
public getChangeNodeTree(): ChangeNode {
|
|
140
|
-
return getChangeNodeFromSnapshot(this, this.root);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* Returns the number of nodes in this `Snapshot`
|
|
145
|
-
*/
|
|
146
|
-
public get size(): number {
|
|
147
|
-
return this.forest.size;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* @returns true iff the nodeId exists.
|
|
152
|
-
*/
|
|
153
|
-
public hasNode(id: NodeId): boolean {
|
|
154
|
-
return this.forest.tryGet(id) !== undefined;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* @returns a `ChangeNode` derived from the `SnapshotNode` in this snapshot with the given `NodeId`.
|
|
159
|
-
*/
|
|
160
|
-
public getChangeNode(id: NodeId): ChangeNode {
|
|
161
|
-
return getChangeNodeFromSnapshot(this, id);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
/**
|
|
165
|
-
* @returns the `ChangeNode`s derived from the `SnapshotNode`s in this snapshot with the given `NodeId`s.
|
|
166
|
-
*/
|
|
167
|
-
public getChangeNodes(nodeIds: readonly NodeId[]): ChangeNode[] {
|
|
168
|
-
return nodeIds.map((id) => this.getChangeNode(id));
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
* Asserts the forest is in a consistent state.
|
|
173
|
-
*/
|
|
174
|
-
public assertConsistent(): void {
|
|
175
|
-
this.forest.assertConsistent();
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* Inserts all nodes in a NodeSequence into the forest.
|
|
180
|
-
*/
|
|
181
|
-
public addNodes(sequence: Iterable<SnapshotNode>): Snapshot {
|
|
182
|
-
return new Snapshot(this.root, this.forest.add(sequence));
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
* Remove all nodes with the given ids from the forest
|
|
187
|
-
*/
|
|
188
|
-
public deleteNodes(nodes: Iterable<NodeId>): Snapshot {
|
|
189
|
-
return new Snapshot(this.root, this.forest.delete(nodes, true));
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
/**
|
|
193
|
-
* Parents a set of detached nodes at a specified place.
|
|
194
|
-
* @param nodesToAttach - the nodes to parent in the specified place. The nodes must already be present in the Snapshot.
|
|
195
|
-
* @param place - the location to insert the nodes.
|
|
196
|
-
*/
|
|
197
|
-
public attachRange(nodesToAttach: readonly NodeId[], place: SnapshotPlace): Snapshot {
|
|
198
|
-
const { parent, label } = place.trait;
|
|
199
|
-
const index = this.findIndexWithinTrait(place);
|
|
200
|
-
return new Snapshot(this.root, this.forest.attachRangeOfChildren(parent, label, index, nodesToAttach));
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
/**
|
|
204
|
-
* Detaches a range of nodes from their parent. The detached nodes remain in the Snapshot.
|
|
205
|
-
* @param rangeToDetach - the range of nodes to detach
|
|
206
|
-
*/
|
|
207
|
-
public detachRange(rangeToDetach: SnapshotRange): { snapshot: Snapshot; detached: readonly NodeId[] } {
|
|
208
|
-
const { start, end } = rangeToDetach;
|
|
209
|
-
const { trait: traitLocation } = start;
|
|
210
|
-
const { parent, label } = traitLocation;
|
|
211
|
-
const startIndex = this.findIndexWithinTrait(start);
|
|
212
|
-
const endIndex = this.findIndexWithinTrait(end);
|
|
213
|
-
const { forest, detached } = this.forest.detachRangeOfChildren(parent, label, startIndex, endIndex);
|
|
214
|
-
return { snapshot: new Snapshot(this.root, forest), detached };
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
/**
|
|
218
|
-
* Sets a node's value. The node must exist in this `Snapshot`.
|
|
219
|
-
* @param nodeId - the id of the node
|
|
220
|
-
* @param value - the new value
|
|
221
|
-
*/
|
|
222
|
-
public setNodeValue(nodeId: NodeId, value: Payload): Snapshot {
|
|
223
|
-
return new Snapshot(this.root, this.forest.setValue(nodeId, value));
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
/**
|
|
227
|
-
* @returns the index just after place (which specifies a location between items).
|
|
228
|
-
* Performance note: this is O(siblings in trait).
|
|
229
|
-
*/
|
|
230
|
-
public findIndexWithinTrait(place: SnapshotPlace): PlaceIndex {
|
|
231
|
-
if (place.sibling === undefined) {
|
|
232
|
-
return this.getIndexOfSide(place.side, place.trait);
|
|
233
|
-
}
|
|
234
|
-
return getIndex(place.side, this.getIndexInTrait(place.sibling));
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
/**
|
|
238
|
-
* Returns the node associated with `id` in this `Snapshot`.
|
|
239
|
-
*/
|
|
240
|
-
public getSnapshotNode(id: NodeId): SnapshotNode {
|
|
241
|
-
return this.forest.get(id);
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
/**
|
|
245
|
-
* Returns the label of the trait that a node is under. Returns undefined if the node is not present or if it is the root node.
|
|
246
|
-
*/
|
|
247
|
-
public getTraitLabel(id: NodeId): TraitLabel | undefined {
|
|
248
|
-
return this.forest.tryGetParent(id)?.traitParent;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
/**
|
|
252
|
-
* Returns the parent of a node. Returns undefined if the node does not exist in the snapshot or if it does not have a parent.
|
|
253
|
-
*/
|
|
254
|
-
public getParentSnapshotNode(id: NodeId): SnapshotNode | undefined {
|
|
255
|
-
const parentInfo = this.forest.tryGetParent(id);
|
|
256
|
-
if (parentInfo === undefined) {
|
|
257
|
-
return undefined;
|
|
258
|
-
}
|
|
259
|
-
return this.getSnapshotNode(parentInfo.parentId);
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
/**
|
|
263
|
-
* @param node - must have a parent.
|
|
264
|
-
*/
|
|
265
|
-
public getTraitLocation(node: NodeId): TraitLocation {
|
|
266
|
-
const parentData = this.forest.getParent(node);
|
|
267
|
-
assert(parentData !== undefined, 'node must have parent');
|
|
268
|
-
return {
|
|
269
|
-
parent: parentData.parentId,
|
|
270
|
-
label: parentData.traitParent,
|
|
271
|
-
};
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
/**
|
|
275
|
-
* @param node - must have a parent.
|
|
276
|
-
* Performance note: this is O(siblings in trait).
|
|
277
|
-
*/
|
|
278
|
-
public getIndexInTrait(node: NodeId): TraitNodeIndex {
|
|
279
|
-
if (this.traitIndicesCache === undefined) {
|
|
280
|
-
this.traitIndicesCache = new Map();
|
|
281
|
-
} else {
|
|
282
|
-
const cached = this.traitIndicesCache.get(node);
|
|
283
|
-
if (cached !== undefined) {
|
|
284
|
-
return cached;
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
const parentData = this.forest.getParent(node);
|
|
288
|
-
const parent = this.forest.get(parentData.parentId);
|
|
289
|
-
const traitParent =
|
|
290
|
-
parent.traits.get(parentData.traitParent) ?? fail('invalid parentData: trait parent not found.');
|
|
291
|
-
let foundIndex = -1 as TraitNodeIndex;
|
|
292
|
-
for (let i = 0; i < traitParent.length; i++) {
|
|
293
|
-
const nodeInTrait = traitParent[i];
|
|
294
|
-
const index = i as TraitNodeIndex;
|
|
295
|
-
this.traitIndicesCache.set(nodeInTrait, index);
|
|
296
|
-
if (nodeInTrait === node) {
|
|
297
|
-
foundIndex = index;
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
return foundIndex !== -1 ? foundIndex : fail('invalidParentData: node not found in specified trait');
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
/**
|
|
304
|
-
* Return a trait given its location
|
|
305
|
-
* @param traitLocation - the location of the trait
|
|
306
|
-
*/
|
|
307
|
-
public getTrait(traitLocation: TraitLocation): readonly NodeId[] {
|
|
308
|
-
return this.getSnapshotNode(traitLocation.parent).traits.get(traitLocation.label) ?? [];
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
private getIndexOfSide(side: Side, traitLocation: TraitLocation): PlaceIndex {
|
|
312
|
-
return side === Side.After ? (0 as PlaceIndex) : (this.getTrait(traitLocation).length as PlaceIndex);
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
/** Compares this snapshot to another for equality. */
|
|
316
|
-
public equals(snapshot: Snapshot): boolean {
|
|
317
|
-
if (this.root !== snapshot.root) {
|
|
318
|
-
return false;
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
// TODO:#49100:Perf: make this faster and/or remove use by PrefetchingCheckout.
|
|
322
|
-
return this.forest.equals(snapshot.forest);
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
private *iterateNodeDescendants(nodeId: NodeId): IterableIterator<SnapshotNode> {
|
|
326
|
-
const node = this.getSnapshotNode(nodeId);
|
|
327
|
-
yield node;
|
|
328
|
-
for (const trait of node.traits.values()) {
|
|
329
|
-
for (const childId of trait) {
|
|
330
|
-
yield* this.iterateNodeDescendants(childId);
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
/**
|
|
336
|
-
* Calculate the difference between two `Snapshot`s
|
|
337
|
-
* @param snapshot - the other snapshot to compare to this one
|
|
338
|
-
* @returns A {@link Delta} which nodes must be changed, added, and removed to get from `this` to `snapshot`.
|
|
339
|
-
* The snapshots must share a root.
|
|
340
|
-
*/
|
|
341
|
-
public delta(snapshot: Snapshot): Delta<NodeId> {
|
|
342
|
-
assert(this.root === snapshot.root, 'Delta can only be calculated between snapshots that share a root');
|
|
343
|
-
return this.forest.delta(snapshot.forest);
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
public [Symbol.iterator](): IterableIterator<SnapshotNode> {
|
|
347
|
-
return this.iterateNodeDescendants(this.root);
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
function getIndex(side: Side, index: TraitNodeIndex): PlaceIndex {
|
|
352
|
-
// eslint-disable-next-line @typescript-eslint/restrict-plus-operands
|
|
353
|
-
return (side + index) as PlaceIndex;
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
/**
|
|
357
|
-
* Contains some redundant information. Use only in computations between edits. Do not store.
|
|
358
|
-
* @public
|
|
359
|
-
*/
|
|
360
|
-
export interface NodeInTrait {
|
|
361
|
-
readonly trait: TraitLocation;
|
|
362
|
-
readonly index: TraitNodeIndex;
|
|
363
|
-
}
|