@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,213 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
import { isDetachedSequenceId } from './Identifiers';
|
|
6
|
+
import type { Definition, DetachedSequenceId, InternedStringId, OpSpaceNodeId, TraitLabel } from './Identifiers';
|
|
7
|
+
import type { StringInterner } from './StringInterner';
|
|
8
|
+
import type { CompressedTraits, CompressedPlaceholderTree, PlaceholderTree, Payload } from './persisted-types';
|
|
9
|
+
import type { ContextualizedNodeIdNormalizer } from './NodeIdUtilities';
|
|
10
|
+
import { assert, fail, Mutable } from './Common';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Compresses a given {@link PlaceholderTree} into a more compact serializable format.
|
|
14
|
+
*/
|
|
15
|
+
export interface TreeCompressor<TPlaceholder extends DetachedSequenceId | never> {
|
|
16
|
+
/**
|
|
17
|
+
* @param node - The {@link PlaceholderTree} to compress.
|
|
18
|
+
* @param interner - The StringInterner to use to intern strings.
|
|
19
|
+
* @param idNormalizer - A normalizer to transform node IDs into op-space
|
|
20
|
+
*/
|
|
21
|
+
compress<TId extends OpSpaceNodeId>(
|
|
22
|
+
node: PlaceholderTree<TPlaceholder>,
|
|
23
|
+
interner: StringInterner,
|
|
24
|
+
idNormalizer: ContextualizedNodeIdNormalizer<TId>
|
|
25
|
+
): CompressedPlaceholderTree<TId, TPlaceholder>;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @param node - The {@link PlaceholderTree} to compress.
|
|
29
|
+
* @param interner - The StringInterner to use to intern strings.
|
|
30
|
+
* @param idNormalizer - A normalizer to transform node IDs into op-space
|
|
31
|
+
*/
|
|
32
|
+
decompress<TId extends OpSpaceNodeId>(
|
|
33
|
+
node: CompressedPlaceholderTree<TId, TPlaceholder>,
|
|
34
|
+
interner: StringInterner,
|
|
35
|
+
idNormalizer: ContextualizedNodeIdNormalizer<TId>
|
|
36
|
+
): PlaceholderTree<TPlaceholder>;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Compresses a given {@link PlaceholderTree}
|
|
41
|
+
* (Such as a {@link ChangeNode} or {@link BuildNode}) into an array,
|
|
42
|
+
* while also string interning all node {@link Definition}s and {@link TraitLabel}s.
|
|
43
|
+
* See {@link CompressedPlaceholderTree} for format.
|
|
44
|
+
*/
|
|
45
|
+
export class InterningTreeCompressor<TPlaceholder extends DetachedSequenceId | never>
|
|
46
|
+
implements TreeCompressor<TPlaceholder>
|
|
47
|
+
{
|
|
48
|
+
public compress<TId extends OpSpaceNodeId>(
|
|
49
|
+
node: PlaceholderTree<TPlaceholder>,
|
|
50
|
+
interner: StringInterner,
|
|
51
|
+
idNormalizer: ContextualizedNodeIdNormalizer<TId>
|
|
52
|
+
): CompressedPlaceholderTree<TId, TPlaceholder> {
|
|
53
|
+
this.previousId = undefined;
|
|
54
|
+
return this.compressI(node, interner, idNormalizer);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
private compressI<TId extends OpSpaceNodeId>(
|
|
58
|
+
node: PlaceholderTree<TPlaceholder>,
|
|
59
|
+
interner: StringInterner,
|
|
60
|
+
idNormalizer: ContextualizedNodeIdNormalizer<TId>
|
|
61
|
+
): CompressedPlaceholderTree<TId, TPlaceholder> {
|
|
62
|
+
if (isDetachedSequenceId(node)) {
|
|
63
|
+
return node;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const internedDefinition = interner.getInternedId(node.definition) ?? node.definition;
|
|
67
|
+
const normalizedId = idNormalizer.normalizeToOpSpace(node.identifier);
|
|
68
|
+
const compressedId = canElideId(this.previousId, normalizedId) ? undefined : normalizedId;
|
|
69
|
+
this.previousId = normalizedId;
|
|
70
|
+
const compressedTraits: CompressedTraits<TId, TPlaceholder> = [];
|
|
71
|
+
|
|
72
|
+
// Omit traits if empty and payload is undefined.
|
|
73
|
+
const traits = Object.entries(node.traits).sort();
|
|
74
|
+
if (traits.length > 0 || node.payload !== undefined) {
|
|
75
|
+
for (const [label, trait] of traits) {
|
|
76
|
+
compressedTraits.push(
|
|
77
|
+
interner.getInternedId(label) ?? (label as TraitLabel),
|
|
78
|
+
trait.map((child) => this.compressI(child, interner, idNormalizer))
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const payloadTraits = node.payload !== undefined ? [node.payload, ...compressedTraits] : compressedTraits;
|
|
84
|
+
if (payloadTraits.length > 0) {
|
|
85
|
+
if (compressedId !== undefined) {
|
|
86
|
+
return [internedDefinition, compressedId, payloadTraits];
|
|
87
|
+
}
|
|
88
|
+
return [internedDefinition, payloadTraits];
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (compressedId !== undefined) {
|
|
92
|
+
return [internedDefinition, compressedId];
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return [internedDefinition];
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** The ID that was compressed or decompressed most recently */
|
|
99
|
+
private previousId?: OpSpaceNodeId;
|
|
100
|
+
|
|
101
|
+
public decompress<TId extends OpSpaceNodeId>(
|
|
102
|
+
node: CompressedPlaceholderTree<TId, TPlaceholder>,
|
|
103
|
+
interner: StringInterner,
|
|
104
|
+
idNormalizer: ContextualizedNodeIdNormalizer<TId>
|
|
105
|
+
): PlaceholderTree<TPlaceholder> {
|
|
106
|
+
if (isDetachedSequenceId(node)) {
|
|
107
|
+
return node;
|
|
108
|
+
}
|
|
109
|
+
const rootId = node[1];
|
|
110
|
+
assert(typeof rootId === 'number', 'Root node was compressed with no ID');
|
|
111
|
+
this.previousId = rootId;
|
|
112
|
+
return this.decompressI(node, interner, idNormalizer);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
private decompressI<TId extends OpSpaceNodeId>(
|
|
116
|
+
node: CompressedPlaceholderTree<TId, TPlaceholder>,
|
|
117
|
+
interner: StringInterner,
|
|
118
|
+
idNormalizer: ContextualizedNodeIdNormalizer<TId>
|
|
119
|
+
): PlaceholderTree<TPlaceholder> {
|
|
120
|
+
if (isDetachedSequenceId(node)) {
|
|
121
|
+
return node;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
let compressedId: TId | undefined;
|
|
125
|
+
let compressedTraits:
|
|
126
|
+
| [Payload, ...CompressedTraits<TId, TPlaceholder>]
|
|
127
|
+
| CompressedTraits<TId, TPlaceholder>
|
|
128
|
+
| undefined;
|
|
129
|
+
let payload: Payload | undefined;
|
|
130
|
+
const [maybeInternedDefinition, idOrPayloadTraits, payloadTraits] = node;
|
|
131
|
+
if (idOrPayloadTraits !== undefined) {
|
|
132
|
+
if (typeof idOrPayloadTraits === 'number') {
|
|
133
|
+
compressedId = idOrPayloadTraits;
|
|
134
|
+
if (payloadTraits !== undefined) {
|
|
135
|
+
compressedTraits = payloadTraits;
|
|
136
|
+
}
|
|
137
|
+
} else {
|
|
138
|
+
// TODO: This cast can be removed on typescript 4.6
|
|
139
|
+
compressedTraits = idOrPayloadTraits as typeof compressedTraits;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
const definition =
|
|
144
|
+
typeof maybeInternedDefinition === 'string'
|
|
145
|
+
? maybeInternedDefinition
|
|
146
|
+
: // TODO: This cast can be removed on typescript 4.6
|
|
147
|
+
(interner.getString(maybeInternedDefinition as number) as Definition);
|
|
148
|
+
|
|
149
|
+
let identifier: TId;
|
|
150
|
+
if (compressedId !== undefined) {
|
|
151
|
+
identifier = compressedId;
|
|
152
|
+
} else {
|
|
153
|
+
const prevId = this.previousId ?? fail();
|
|
154
|
+
identifier = prevId < 0 ? ((prevId - 1) as TId) : (((prevId as number) + 1) as TId);
|
|
155
|
+
}
|
|
156
|
+
this.previousId = identifier;
|
|
157
|
+
|
|
158
|
+
const traits = {};
|
|
159
|
+
if (compressedTraits !== undefined) {
|
|
160
|
+
let offset: number;
|
|
161
|
+
if (compressedTraits.length % 2 === 1) {
|
|
162
|
+
offset = 1;
|
|
163
|
+
payload = compressedTraits[0];
|
|
164
|
+
} else {
|
|
165
|
+
offset = 0;
|
|
166
|
+
}
|
|
167
|
+
const traitsLength = compressedTraits.length - offset;
|
|
168
|
+
for (let i = 0; i < traitsLength; i += 2) {
|
|
169
|
+
const offsetIndex = i + offset;
|
|
170
|
+
const maybeCompressedLabel = compressedTraits[offsetIndex] as InternedStringId;
|
|
171
|
+
const compressedChildren = compressedTraits[offsetIndex + 1] as (
|
|
172
|
+
| TPlaceholder
|
|
173
|
+
| CompressedPlaceholderTree<TId, TPlaceholder>
|
|
174
|
+
)[];
|
|
175
|
+
|
|
176
|
+
const decompressedTraits = compressedChildren.map((child) =>
|
|
177
|
+
this.decompressI(child, interner, idNormalizer)
|
|
178
|
+
);
|
|
179
|
+
|
|
180
|
+
const label =
|
|
181
|
+
typeof maybeCompressedLabel === 'string'
|
|
182
|
+
? maybeCompressedLabel
|
|
183
|
+
: (interner.getString(maybeCompressedLabel) as TraitLabel);
|
|
184
|
+
traits[label] = decompressedTraits;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
const decompressedNode: Mutable<PlaceholderTree<TPlaceholder>> = {
|
|
189
|
+
identifier: idNormalizer.normalizeToSessionSpace(identifier),
|
|
190
|
+
definition,
|
|
191
|
+
traits,
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
if (payload !== undefined) {
|
|
195
|
+
decompressedNode.payload = payload;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
return decompressedNode;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
function canElideId<TId extends OpSpaceNodeId>(previousId: TId | undefined, id: TId): boolean {
|
|
203
|
+
if (previousId === undefined) {
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
const numericId: number = previousId;
|
|
208
|
+
if (numericId < 0) {
|
|
209
|
+
return id === numericId - 1;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
return id === numericId + 1;
|
|
213
|
+
}
|
package/src/TreeNodeHandle.ts
CHANGED
|
@@ -4,25 +4,24 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { Definition, NodeId } from './Identifiers';
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { getChangeNodeFromSnapshot } from './SnapshotUtilities';
|
|
7
|
+
import { fail, memoizeGetter } from './Common';
|
|
8
|
+
import { Payload, TraitMap, TreeNode } from './persisted-types';
|
|
9
|
+
import { TreeView, TreeViewNode } from './TreeView';
|
|
11
10
|
|
|
12
11
|
/**
|
|
13
|
-
* A handle to a `TreeNode` that exists within a specific `
|
|
14
|
-
* API for traversing trees of nodes in a
|
|
15
|
-
* performance; if performance is a concern, consider using the
|
|
12
|
+
* A handle to a `TreeNode` that exists within a specific `TreeView`. This type provides a convenient
|
|
13
|
+
* API for traversing trees of nodes in a TreeView and is not designed to provide maximum runtime
|
|
14
|
+
* performance; if performance is a concern, consider using the TreeView and TreeViewNode APIs directly.
|
|
16
15
|
* @public
|
|
17
16
|
*/
|
|
18
|
-
export class TreeNodeHandle implements TreeNode<TreeNodeHandle> {
|
|
19
|
-
private readonly
|
|
20
|
-
private readonly
|
|
17
|
+
export class TreeNodeHandle implements TreeNode<TreeNodeHandle, NodeId> {
|
|
18
|
+
private readonly view: TreeView;
|
|
19
|
+
private readonly viewNode: TreeViewNode;
|
|
21
20
|
|
|
22
|
-
/** Construct a handle which references the node with the given id in the given `
|
|
23
|
-
public constructor(
|
|
24
|
-
this.
|
|
25
|
-
this.
|
|
21
|
+
/** Construct a handle which references the node with the given id in the given `TreeView` */
|
|
22
|
+
public constructor(view: TreeView, nodeId: NodeId) {
|
|
23
|
+
this.view = view;
|
|
24
|
+
this.viewNode = view.tryGetViewNode(nodeId) ?? fail('Failed to create handle: node is not present in view');
|
|
26
25
|
}
|
|
27
26
|
|
|
28
27
|
public get payload(): Payload | undefined {
|
|
@@ -40,11 +39,11 @@ export class TreeNodeHandle implements TreeNode<TreeNodeHandle> {
|
|
|
40
39
|
public get traits(): TraitMap<TreeNodeHandle> {
|
|
41
40
|
// Construct a new trait map that wraps each node in each trait in a handle
|
|
42
41
|
const traitMap: TraitMap<TreeNodeHandle> = {};
|
|
43
|
-
const {
|
|
44
|
-
for (const [label, trait] of
|
|
42
|
+
const { view } = this;
|
|
43
|
+
for (const [label, trait] of this.node.traits.entries()) {
|
|
45
44
|
Object.defineProperty(traitMap, label, {
|
|
46
45
|
get() {
|
|
47
|
-
const handleTrait = trait.map((node) => new TreeNodeHandle(
|
|
46
|
+
const handleTrait = trait.map((node) => new TreeNodeHandle(view, node));
|
|
48
47
|
return memoizeGetter(this as TraitMap<TreeNodeHandle>, label, handleTrait);
|
|
49
48
|
},
|
|
50
49
|
configurable: true,
|
|
@@ -56,21 +55,9 @@ export class TreeNodeHandle implements TreeNode<TreeNodeHandle> {
|
|
|
56
55
|
}
|
|
57
56
|
|
|
58
57
|
/**
|
|
59
|
-
* Get a `
|
|
58
|
+
* Get a `TreeViewNode` for the tree view node that this handle references
|
|
60
59
|
*/
|
|
61
|
-
public get node():
|
|
62
|
-
return memoizeGetter(this, 'node',
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Generate a new `ChangeNode` for the snapshot node that this handle references. The returned node will be fully
|
|
67
|
-
* demanded, i.e. will contain no lazy/virtualized subtrees.
|
|
68
|
-
*/
|
|
69
|
-
public demandTree(): ChangeNode {
|
|
70
|
-
return getChangeNodeFromSnapshot(this.snapshot, this.nodeId, false);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
public toString(): string {
|
|
74
|
-
return JSON.stringify(this.demandTree());
|
|
60
|
+
public get node(): TreeViewNode {
|
|
61
|
+
return memoizeGetter(this, 'node', this.viewNode);
|
|
75
62
|
}
|
|
76
63
|
}
|
package/src/TreeView.ts
ADDED
|
@@ -0,0 +1,322 @@
|
|
|
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 { Delta, Forest, isParentedForestNode } from './Forest';
|
|
9
|
+
import { NodeData, Side } from './persisted-types';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Specifies the location of a trait (a labeled sequence of nodes) within the tree.
|
|
13
|
+
* @public
|
|
14
|
+
*/
|
|
15
|
+
export interface TraitLocation {
|
|
16
|
+
readonly parent: NodeId;
|
|
17
|
+
readonly label: TraitLabel;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* An immutable view of a distributed tree node.
|
|
22
|
+
* @public
|
|
23
|
+
*/
|
|
24
|
+
export interface TreeViewNode extends NodeData<NodeId> {
|
|
25
|
+
/** The IDs of the children under this node */
|
|
26
|
+
readonly traits: ReadonlyMap<TraitLabel, readonly NodeId[]>;
|
|
27
|
+
/** The parent and trait under which this node resides. Undefined iff this is the root node of the tree (i.e. {@link initialTree}). */
|
|
28
|
+
readonly parentage?: TraitLocation;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Index of a place within a trait.
|
|
33
|
+
* 0 = before all nodes,
|
|
34
|
+
* 1 = after first node,
|
|
35
|
+
* etc.
|
|
36
|
+
* @public
|
|
37
|
+
*/
|
|
38
|
+
export type PlaceIndex = number & { readonly PlaceIndex: unique symbol };
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Index of a node within a trait.
|
|
42
|
+
* 0 = first node,
|
|
43
|
+
* 1 = second node,
|
|
44
|
+
* etc.
|
|
45
|
+
* @public
|
|
46
|
+
*/
|
|
47
|
+
export type TraitNodeIndex = number & { readonly TraitNodeIndex: unique symbol };
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* A place within a particular `TreeView` that is anchored relative to a specific node in the tree, or relative to the outside of the trait.
|
|
51
|
+
* Valid iff 'trait' is valid and, if provided, sibling is in the Location specified by 'trait'.
|
|
52
|
+
* @public
|
|
53
|
+
*/
|
|
54
|
+
export interface TreeViewPlace {
|
|
55
|
+
readonly sibling?: NodeId;
|
|
56
|
+
readonly side: Side;
|
|
57
|
+
readonly trait: TraitLocation;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Specifies the range of nodes from `start` to `end` within a trait within a particular `TreeView`.
|
|
62
|
+
* Valid iff start and end are valid and are within the same trait.
|
|
63
|
+
* @public
|
|
64
|
+
*/
|
|
65
|
+
export interface TreeViewRange {
|
|
66
|
+
readonly start: TreeViewPlace;
|
|
67
|
+
readonly end: TreeViewPlace;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Contains some redundant information. Use only in computations between edits. Do not store.
|
|
72
|
+
* @public
|
|
73
|
+
*/
|
|
74
|
+
export interface NodeInTrait {
|
|
75
|
+
readonly trait: TraitLocation;
|
|
76
|
+
readonly index: TraitNodeIndex;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* A view of a distributed tree.
|
|
81
|
+
* @public
|
|
82
|
+
*/
|
|
83
|
+
export abstract class TreeView {
|
|
84
|
+
public readonly root: NodeId;
|
|
85
|
+
protected readonly forest: Forest;
|
|
86
|
+
private readonly rootNode: TreeViewNode;
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* A cache of node's index within their parent trait.
|
|
90
|
+
* Used to avoid redundant linear scans of traits.
|
|
91
|
+
* Not shared across views; initialized to empty each time a TreeView is created.
|
|
92
|
+
*/
|
|
93
|
+
private traitIndicesCache?: Map<NodeId, TraitNodeIndex>;
|
|
94
|
+
|
|
95
|
+
protected constructor(root: NodeId, forest: Forest) {
|
|
96
|
+
this.root = root;
|
|
97
|
+
this.forest = forest;
|
|
98
|
+
this.rootNode = this.getViewNode(root);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/** @returns the number of nodes in this view */
|
|
102
|
+
public get size(): number {
|
|
103
|
+
return this.forest.size;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/** @returns true iff a node with the given id exists in this view */
|
|
107
|
+
public hasNode(id: NodeId): boolean {
|
|
108
|
+
return this.forest.has(id);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* @returns the index just after place (which specifies a location between items).
|
|
113
|
+
* Performance note: this is O(siblings in trait).
|
|
114
|
+
*/
|
|
115
|
+
public findIndexWithinTrait(place: TreeViewPlace): PlaceIndex {
|
|
116
|
+
if (place.sibling === undefined) {
|
|
117
|
+
return this.getIndexOfSide(place.side, place.trait);
|
|
118
|
+
}
|
|
119
|
+
return getIndex(place.side, this.getIndexInTrait(place.sibling));
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/** @returns the node associated with the given id in this view. Fails if the node does not exist in this view. */
|
|
123
|
+
public getViewNode(id: NodeId): TreeViewNode {
|
|
124
|
+
return this.tryGetViewNode(id) ?? fail('NodeId not found');
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/** @returns the node associated with the given id in this view, or undefined if the node does not exist in this view */
|
|
128
|
+
public tryGetViewNode(id: NodeId): TreeViewNode | undefined {
|
|
129
|
+
const forestNode = this.forest.tryGet(id);
|
|
130
|
+
if (forestNode !== undefined && isParentedForestNode(forestNode)) {
|
|
131
|
+
const viewNode: TreeViewNode = {
|
|
132
|
+
definition: forestNode.definition,
|
|
133
|
+
identifier: forestNode.identifier,
|
|
134
|
+
traits: forestNode.traits,
|
|
135
|
+
parentage: {
|
|
136
|
+
label: forestNode.traitParent,
|
|
137
|
+
parent: forestNode.parentId,
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
copyPropertyIfDefined(forestNode, viewNode, 'payload');
|
|
141
|
+
return viewNode;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return forestNode;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* @returns the label of the trait under which a node with the given id resides. Fails if the node does not exist in this view or if
|
|
149
|
+
* it is the root node.
|
|
150
|
+
*/
|
|
151
|
+
public getTraitLabel(id: NodeId): TraitLabel {
|
|
152
|
+
return this.forest.getParent(id).traitParent;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* @returns the label of the trait under which a node with the given id resides, or undefined if the node is not present in this
|
|
157
|
+
* view or if it is the root node
|
|
158
|
+
*/
|
|
159
|
+
public tryGetTraitLabel(id: NodeId): TraitLabel | undefined {
|
|
160
|
+
return this.forest.tryGetParent(id)?.traitParent;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* @returns the parent of the node with the given id. Fails if the node does not exist in this view or if it is the root node.
|
|
165
|
+
*/
|
|
166
|
+
public getParentViewNode(id: NodeId): TreeViewNode {
|
|
167
|
+
const parentInfo = this.forest.getParent(id);
|
|
168
|
+
return this.getViewNode(parentInfo.parentId);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* @returns the parent of the node with the given id. Returns undefined if the node does not exist in this view or if it is the root
|
|
173
|
+
* node.
|
|
174
|
+
*/
|
|
175
|
+
public tryGetParentViewNode(id: NodeId): TreeViewNode | undefined {
|
|
176
|
+
const parentInfo = this.forest.tryGetParent(id);
|
|
177
|
+
if (parentInfo === undefined) {
|
|
178
|
+
return undefined;
|
|
179
|
+
}
|
|
180
|
+
return this.getViewNode(parentInfo.parentId);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* @returns the trait location of the node with the given id. Fails if the node does not exist in this view or of it is the root
|
|
185
|
+
* node
|
|
186
|
+
*/
|
|
187
|
+
public getTraitLocation(id: NodeId): TraitLocation {
|
|
188
|
+
const parentData = this.forest.getParent(id);
|
|
189
|
+
return {
|
|
190
|
+
parent: parentData.parentId,
|
|
191
|
+
label: parentData.traitParent,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* @returns the trait location of the node with the given id, or undefined if the node does not exist in this view or if it is the root
|
|
197
|
+
* node
|
|
198
|
+
*/
|
|
199
|
+
public tryGetTraitLocation(id: NodeId): TraitLocation | undefined {
|
|
200
|
+
const parentData = this.forest.tryGetParent(id);
|
|
201
|
+
if (parentData === undefined) {
|
|
202
|
+
return undefined;
|
|
203
|
+
}
|
|
204
|
+
return {
|
|
205
|
+
parent: parentData.parentId,
|
|
206
|
+
label: parentData.traitParent,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* @returns the index within the trait under which the node with the given id resides. The node must exist in this view and must have a
|
|
212
|
+
* parent.
|
|
213
|
+
* Performance note: this is O(siblings in trait).
|
|
214
|
+
*/
|
|
215
|
+
public getIndexInTrait(id: NodeId): TraitNodeIndex {
|
|
216
|
+
const index = this.tryGetIndexInTrait(id);
|
|
217
|
+
return index ?? fail('ID does not exist in the forest.');
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* @returns the index within the trait under which the node with the given id resides, or undefined if the node does not exist in this
|
|
222
|
+
* view or does not have a parent.
|
|
223
|
+
* Performance note: this is O(siblings in trait).
|
|
224
|
+
*/
|
|
225
|
+
public tryGetIndexInTrait(id: NodeId): TraitNodeIndex | undefined {
|
|
226
|
+
const cachedIndex = this.traitIndicesCache?.get(id);
|
|
227
|
+
if (cachedIndex !== undefined) {
|
|
228
|
+
return cachedIndex;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
const parentData = this.forest.tryGetParent(id);
|
|
232
|
+
if (parentData === undefined) {
|
|
233
|
+
return undefined;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
const parent = this.forest.tryGet(parentData.parentId);
|
|
237
|
+
if (parent === undefined) {
|
|
238
|
+
return undefined;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
const trait = parent.traits.get(parentData.traitParent) ?? fail('inconsistent forest: trait parent not found');
|
|
242
|
+
let foundIndex: TraitNodeIndex | undefined;
|
|
243
|
+
if (trait.length === 0) {
|
|
244
|
+
return foundIndex;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
this.traitIndicesCache ??= new Map();
|
|
248
|
+
for (let i = 0; i < trait.length; i++) {
|
|
249
|
+
const nodeInTrait = trait[i];
|
|
250
|
+
const index = i as TraitNodeIndex;
|
|
251
|
+
this.traitIndicesCache.set(nodeInTrait, index);
|
|
252
|
+
if (nodeInTrait === id) {
|
|
253
|
+
foundIndex = index;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
return foundIndex;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* @returns the trait at the given location. If no such trait exists, returns an empty trait.
|
|
262
|
+
*/
|
|
263
|
+
public getTrait(traitLocation: TraitLocation): readonly NodeId[] {
|
|
264
|
+
return this.getViewNode(traitLocation.parent).traits.get(traitLocation.label) ?? [];
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/** Asserts that the view's internal state is consistent. Useful for testing/validation. */
|
|
268
|
+
public assertConsistent(): void {
|
|
269
|
+
this.forest.assertConsistent();
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
public [Symbol.iterator](): IterableIterator<TreeViewNode> {
|
|
273
|
+
return this.iterateNodeDescendants(this.rootNode);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/** @returns true iff the given view is equal to this view */
|
|
277
|
+
public abstract equals(view: TreeView): boolean;
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* @returns true iff the given view's forest of nodes is equivalent to this view's forest of nodes
|
|
281
|
+
* @param strict - if true, the views' forests must be the same object, otherwise they must merely be equivalent
|
|
282
|
+
*/
|
|
283
|
+
public hasEqualForest(view: TreeView, strict = false): boolean {
|
|
284
|
+
if (this.root === view.root) {
|
|
285
|
+
// TODO:#49100:Perf: make this faster and/or remove use by PrefetchingCheckout.
|
|
286
|
+
return strict ? this.forest === view.forest : this.forest.equals(view.forest);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
return false;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
private *iterateNodeDescendants(node: TreeViewNode): IterableIterator<TreeViewNode> {
|
|
293
|
+
yield node;
|
|
294
|
+
for (const label of [...node.traits.keys()].sort()) {
|
|
295
|
+
const trait = node.traits.get(label);
|
|
296
|
+
for (const childId of trait ?? fail('Expected trait with label')) {
|
|
297
|
+
const child = this.getViewNode(childId);
|
|
298
|
+
yield* this.iterateNodeDescendants(child);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
private getIndexOfSide(side: Side, traitLocation: TraitLocation): PlaceIndex {
|
|
304
|
+
return side === Side.After ? (0 as PlaceIndex) : (this.getTrait(traitLocation).length as PlaceIndex);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* Calculate the difference between two `TreeView`s
|
|
309
|
+
* @param view - the other view to compare to this one
|
|
310
|
+
* @returns A {@link Delta} which nodes must be changed, added, and removed to get from `this` to `view`.
|
|
311
|
+
* The views must share a root.
|
|
312
|
+
*/
|
|
313
|
+
public delta(view: TreeView): Delta<NodeId> {
|
|
314
|
+
assert(this.root === view.root, 'Delta can only be calculated between views that share a root');
|
|
315
|
+
return this.forest.delta(view.forest);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
function getIndex(side: Side, index: TraitNodeIndex): PlaceIndex {
|
|
320
|
+
// eslint-disable-next-line @typescript-eslint/restrict-plus-operands
|
|
321
|
+
return (side + index) as PlaceIndex;
|
|
322
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { StablePlace, StableRange } from './ChangeTypes';
|
|
7
|
+
import { assert, fail } from './Common';
|
|
8
|
+
import { TraitLocation, TreeView, TreeViewPlace, TreeViewRange } from './TreeView';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Express the given {@link (StableRange:interface)} as a {@link TreeViewRange}
|
|
12
|
+
*/
|
|
13
|
+
export function rangeFromStableRange(view: TreeView, range: StableRange): TreeViewRange {
|
|
14
|
+
const location = getTraitLocationOfRange(view, range);
|
|
15
|
+
// This can be optimized for better constant factors.
|
|
16
|
+
return {
|
|
17
|
+
start: sideOfRange(range, SideOfRange.Start, location),
|
|
18
|
+
end: sideOfRange(range, SideOfRange.End, location),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Express the given {@link (StablePlace:interface)} as a {@link TreeViewPlace}
|
|
24
|
+
*/
|
|
25
|
+
export function placeFromStablePlace(view: TreeView, stablePlace: StablePlace): TreeViewPlace {
|
|
26
|
+
const { side } = stablePlace;
|
|
27
|
+
if (stablePlace.referenceSibling === undefined) {
|
|
28
|
+
assert(stablePlace.referenceTrait !== undefined);
|
|
29
|
+
return {
|
|
30
|
+
trait: stablePlace.referenceTrait,
|
|
31
|
+
side,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
trait: view.getTraitLocation(stablePlace.referenceSibling),
|
|
36
|
+
side: stablePlace.side,
|
|
37
|
+
sibling: stablePlace.referenceSibling,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Return the trait under which the given range resides
|
|
43
|
+
* @param view - the {@link TreeView} within which to retrieve the trait location
|
|
44
|
+
* @param range - must be well formed and valid
|
|
45
|
+
*/
|
|
46
|
+
export function getTraitLocationOfRange(view: TreeView, range: StableRange): TraitLocation {
|
|
47
|
+
const referenceTrait = range.start.referenceTrait ?? range.end.referenceTrait;
|
|
48
|
+
if (referenceTrait) {
|
|
49
|
+
return referenceTrait;
|
|
50
|
+
}
|
|
51
|
+
const sibling =
|
|
52
|
+
range.start.referenceSibling ?? range.end.referenceSibling ?? fail('malformed range does not indicate trait');
|
|
53
|
+
return view.getTraitLocation(sibling);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function sideOfRange(range: StableRange, sideOfRange: SideOfRange, trait: TraitLocation): TreeViewPlace {
|
|
57
|
+
const siblingRelative = sideOfRange === SideOfRange.Start ? range.start : range.end;
|
|
58
|
+
return {
|
|
59
|
+
trait,
|
|
60
|
+
side: siblingRelative.side,
|
|
61
|
+
sibling: siblingRelative.referenceSibling,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Denotes either the start or end of a range
|
|
67
|
+
*/
|
|
68
|
+
enum SideOfRange {
|
|
69
|
+
/**
|
|
70
|
+
* The start of the range
|
|
71
|
+
*/
|
|
72
|
+
Start = 0,
|
|
73
|
+
/**
|
|
74
|
+
* The end of the range
|
|
75
|
+
*/
|
|
76
|
+
End = 1,
|
|
77
|
+
}
|