@fluid-experimental/tree 0.58.2002 → 0.58.3000-61081
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 +9 -9
- 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 -100
- 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 +59 -31
- 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 +130 -85
- package/dist/LogViewer.d.ts.map +1 -1
- package/dist/LogViewer.js +110 -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 +90 -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 +400 -0
- package/dist/SharedTree.d.ts.map +1 -0
- package/dist/SharedTree.js +1064 -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 +53 -0
- package/dist/Transaction.d.ts.map +1 -0
- package/dist/Transaction.js +76 -0
- package/dist/Transaction.js.map +1 -0
- package/dist/TransactionInternal.d.ts +543 -0
- package/dist/TransactionInternal.d.ts.map +1 -0
- package/dist/TransactionInternal.js +622 -0
- package/dist/TransactionInternal.js.map +1 -0
- package/dist/TreeCompressor.d.ts +37 -0
- package/dist/TreeCompressor.d.ts.map +1 -0
- package/dist/TreeCompressor.js +132 -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 +217 -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/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 -100
- 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 +51 -23
- 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 +130 -85
- package/lib/LogViewer.d.ts.map +1 -1
- package/lib/LogViewer.js +102 -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 +90 -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 +400 -0
- package/lib/SharedTree.d.ts.map +1 -0
- package/lib/SharedTree.js +1059 -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 +53 -0
- package/lib/Transaction.d.ts.map +1 -0
- package/lib/Transaction.js +72 -0
- package/lib/Transaction.js.map +1 -0
- package/lib/TransactionInternal.d.ts +543 -0
- package/lib/TransactionInternal.d.ts.map +1 -0
- package/lib/TransactionInternal.js +618 -0
- package/lib/TransactionInternal.js.map +1 -0
- package/lib/TreeCompressor.d.ts +37 -0
- package/lib/TreeCompressor.d.ts.map +1 -0
- package/lib/TreeCompressor.js +128 -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 +213 -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 +269 -187
- 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 +76 -330
- 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 +147 -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 +147 -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 +200 -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 +345 -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 +19 -14
- package/src/ChangeCompression.ts +159 -0
- package/src/{default-edits/PersistedTypes.ts → ChangeTypes.ts} +62 -120
- package/src/Checkout.ts +81 -52
- 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 +141 -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 +1448 -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 +94 -0
- package/src/TransactionInternal.ts +1088 -0
- package/src/TreeCompressor.ts +222 -0
- package/src/TreeNodeHandle.ts +19 -32
- package/src/TreeView.ts +321 -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 +119 -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/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,124 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { IFluidHandle } from '@fluidframework/core-interfaces';
|
|
7
|
+
import { compareArrays } from './Common';
|
|
8
|
+
import { Payload } from './persisted-types';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @returns true if two `Payloads` are identical.
|
|
12
|
+
* May return false for equivalent payloads encoded differently.
|
|
13
|
+
*
|
|
14
|
+
* Object field order and object identity are not considered significant, and are ignored by this function.
|
|
15
|
+
* (This is because they may not be preserved through roundtrip).
|
|
16
|
+
*
|
|
17
|
+
* For other information which Fluid would lose on serialization round trip,
|
|
18
|
+
* behavior is unspecified other than this this function is reflective (all payloads are equal to themselves)
|
|
19
|
+
* and commutative (argument order does not matter).
|
|
20
|
+
*
|
|
21
|
+
* This means that any Payload is equal to itself and a deep clone of itself.
|
|
22
|
+
*
|
|
23
|
+
* Payloads might not be equal to a version of themselves that has been serialized then deserialized.
|
|
24
|
+
* If they are serialized then deserialized again, the two deserialized objects will compare equal,
|
|
25
|
+
* however the serialized strings may be unequal (due to field order for objects being unspecified).
|
|
26
|
+
*
|
|
27
|
+
* Fluid will cause lossy operations due to use of JSON.stringify().
|
|
28
|
+
* This includes:
|
|
29
|
+
* - Loss of object identity
|
|
30
|
+
* - Loss of field order (may be ordered arbitrarily)
|
|
31
|
+
* - -0 becomes +0
|
|
32
|
+
* - NaN, Infinity, -Infinity all become null
|
|
33
|
+
* - custom toJSON functions may cause arbitrary behavior
|
|
34
|
+
* - functions become undefined or null
|
|
35
|
+
* - non enumerable properties (including prototype) are lost
|
|
36
|
+
* - more (this is not a complete list)
|
|
37
|
+
*
|
|
38
|
+
* Inputs must not contain cyclic references other than fields set to their immediate parent (for the JavaScript feature detection pattern).
|
|
39
|
+
*
|
|
40
|
+
* IFluidHandle instances (detected via JavaScript feature detection pattern) are only compared by absolutePath.
|
|
41
|
+
*
|
|
42
|
+
* TODO:#54095: Is there a better way to do this comparison?
|
|
43
|
+
* @public
|
|
44
|
+
*/
|
|
45
|
+
export function comparePayloads(a: Payload, b: Payload): boolean {
|
|
46
|
+
// === is not reflective because of how NaN is handled, so use Object.is instead.
|
|
47
|
+
// This treats -0 and +0 as different.
|
|
48
|
+
// Since -0 is not preserved in serialization round trips,
|
|
49
|
+
// it can be handed in any way that is reflective and commutative, so this is fine.
|
|
50
|
+
if (Object.is(a, b)) {
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Primitives which are equal would have early returned above, so now if the values are not both objects, they are unequal.
|
|
55
|
+
if (typeof a !== 'object' || typeof b !== 'object') {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// null is of type object, and needs to be treated as distinct from the empty object.
|
|
60
|
+
// Handling it early also avoids type errors trying to access its keys.
|
|
61
|
+
// Rationale: 'undefined' payloads are reserved for future use (see 'SetValue' interface).
|
|
62
|
+
if (a === null || b === null) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Special case IFluidHandles, comparing them only by their absolutePath
|
|
67
|
+
// Detect them using JavaScript feature detection pattern: they have a `IFluidHandle` field that is set to the parent object.
|
|
68
|
+
{
|
|
69
|
+
const aHandle = a as IFluidHandle;
|
|
70
|
+
const bHandle = b as IFluidHandle;
|
|
71
|
+
if (aHandle.IFluidHandle === a) {
|
|
72
|
+
if (bHandle.IFluidHandle !== b) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
return a.absolutePath === b.absolutePath;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Fluid Serialization (like Json) only keeps enumerable properties, so we can ignore non-enumerable ones.
|
|
80
|
+
const aKeys = Object.keys(a);
|
|
81
|
+
const bKeys = Object.keys(b);
|
|
82
|
+
|
|
83
|
+
if (aKeys.length !== bKeys.length) {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// make sure objects with numeric keys (or no keys) compare unequal to arrays.
|
|
88
|
+
if (a instanceof Array !== b instanceof Array) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Fluid Serialization (like Json) orders object fields arbitrarily, so reordering fields is not considered considered a change.
|
|
93
|
+
// Therefor the keys arrays must be sorted here.
|
|
94
|
+
if (!(a instanceof Array)) {
|
|
95
|
+
aKeys.sort();
|
|
96
|
+
bKeys.sort();
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// First check keys are equal.
|
|
100
|
+
// This will often early exit, and thus is worth doing as a separate pass than recursive check.
|
|
101
|
+
if (!compareArrays(aKeys, bKeys)) {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
for (let i = 0; i < aKeys.length; i++) {
|
|
106
|
+
const aItem: Payload = a[aKeys[i]];
|
|
107
|
+
const bItem: Payload = b[bKeys[i]];
|
|
108
|
+
|
|
109
|
+
// The JavaScript feature detection pattern, used for IFluidHandle, uses a field that is set to the parent object.
|
|
110
|
+
// Detect this pattern and special case it to avoid infinite recursion.
|
|
111
|
+
const aSelf = Object.is(aItem, a);
|
|
112
|
+
const bSelf = Object.is(bItem, b);
|
|
113
|
+
if (aSelf !== bSelf) {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
if (!aSelf) {
|
|
117
|
+
if (!comparePayloads(aItem, bItem)) {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
@@ -3,15 +3,18 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import { ChangeInternal } from './persisted-types';
|
|
7
|
+
import { TransactionView } from './RevisionView';
|
|
8
|
+
import { TreeView } from './TreeView';
|
|
7
9
|
|
|
8
10
|
/**
|
|
9
|
-
* The path of edits from the
|
|
10
|
-
* is actually applied.
|
|
11
|
+
* The path of edits from the revision view where a change was meant to have been applied to the view where the edit that contains the
|
|
12
|
+
* change is actually applied.
|
|
11
13
|
* The path only contains edits that were successfully applied.
|
|
12
14
|
* This path is always empty for a change that has no concurrent edits.
|
|
15
|
+
* @public
|
|
13
16
|
*/
|
|
14
|
-
export interface ReconciliationPath
|
|
17
|
+
export interface ReconciliationPath {
|
|
15
18
|
/**
|
|
16
19
|
* The number of edits in the path.
|
|
17
20
|
*/
|
|
@@ -20,21 +23,22 @@ export interface ReconciliationPath<TChange> {
|
|
|
20
23
|
* Allows access to edit information.
|
|
21
24
|
* @returns Reconciliation information for the edit at the given `index`.
|
|
22
25
|
*/
|
|
23
|
-
readonly [index: number]: ReconciliationEdit
|
|
26
|
+
readonly [index: number]: ReconciliationEdit;
|
|
24
27
|
}
|
|
25
28
|
|
|
26
29
|
/**
|
|
27
30
|
* An edit in the `ReconciliationPath`.
|
|
31
|
+
* @public
|
|
28
32
|
*/
|
|
29
|
-
export interface ReconciliationEdit
|
|
33
|
+
export interface ReconciliationEdit {
|
|
30
34
|
/**
|
|
31
35
|
* The state before the edit was applied.
|
|
32
36
|
*/
|
|
33
|
-
readonly before:
|
|
37
|
+
readonly before: TreeView;
|
|
34
38
|
/**
|
|
35
39
|
* The state after the edit was applied.
|
|
36
40
|
*/
|
|
37
|
-
readonly after:
|
|
41
|
+
readonly after: TreeView;
|
|
38
42
|
/**
|
|
39
43
|
* The number of changes in the edit.
|
|
40
44
|
*/
|
|
@@ -43,20 +47,21 @@ export interface ReconciliationEdit<TChange> {
|
|
|
43
47
|
* Allows access to change information.
|
|
44
48
|
* @returns Reconciliation information for the change at the given `index`.
|
|
45
49
|
*/
|
|
46
|
-
readonly [index: number]: ReconciliationChange
|
|
50
|
+
readonly [index: number]: ReconciliationChange;
|
|
47
51
|
}
|
|
48
52
|
|
|
49
53
|
/**
|
|
50
54
|
* A change in the `ReconciliationPath`.
|
|
55
|
+
* @public
|
|
51
56
|
*/
|
|
52
|
-
export interface ReconciliationChange
|
|
57
|
+
export interface ReconciliationChange {
|
|
53
58
|
/**
|
|
54
59
|
* The resolved change that was applied during the edit.
|
|
55
60
|
* Resolved changes are guaranteed to be expressed with valid tree locations instead of anchors that need resolution.
|
|
56
61
|
*/
|
|
57
|
-
readonly resolvedChange:
|
|
62
|
+
readonly resolvedChange: ChangeInternal;
|
|
58
63
|
/**
|
|
59
|
-
* The resulting
|
|
64
|
+
* The resulting view from applying the resolved change.
|
|
60
65
|
*/
|
|
61
|
-
readonly after:
|
|
66
|
+
readonly after: TransactionView;
|
|
62
67
|
}
|
|
@@ -5,9 +5,17 @@
|
|
|
5
5
|
|
|
6
6
|
import BTree from 'sorted-btree';
|
|
7
7
|
import LRU from 'lru-cache';
|
|
8
|
-
import { assert, fail } from './Common';
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
import { assert, fail, compareFiniteNumbers } from './Common';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* A revision corresponds to an index in an `EditLog`.
|
|
12
|
+
*
|
|
13
|
+
* It is associated with the output `RevisionView` of applying the edit at the index to the previous revision.
|
|
14
|
+
* For example:
|
|
15
|
+
* - revision 0 corresponds to the initialRevision.
|
|
16
|
+
* - revision 1 corresponds to the output of editLog[0] applied to the initialRevision.
|
|
17
|
+
*/
|
|
18
|
+
export type Revision = number;
|
|
11
19
|
|
|
12
20
|
/**
|
|
13
21
|
* A cache of `TValue`s corresponding to `Revision`s.
|
|
@@ -27,9 +35,10 @@ export class RevisionValueCache<TValue> {
|
|
|
27
35
|
private readonly sortedEntries = new BTree<Revision, TValue>(undefined, compareFiniteNumbers);
|
|
28
36
|
|
|
29
37
|
/**
|
|
30
|
-
*
|
|
38
|
+
* Cache of most recently used evictable entries.
|
|
31
39
|
* Subset of 'sortedValues` eligible for eviction:
|
|
32
40
|
* All entries are also in `sortedValues`, and are removed from `sortedValues` when evicted from this cache.
|
|
41
|
+
* Evicts least recently used entries.
|
|
33
42
|
*/
|
|
34
43
|
private readonly evictableRevisions: LRU<Revision, TValue>;
|
|
35
44
|
|
|
@@ -115,7 +124,7 @@ export class RevisionValueCache<TValue> {
|
|
|
115
124
|
if (fromLRU !== undefined) {
|
|
116
125
|
return [requestedRevision, fromLRU];
|
|
117
126
|
}
|
|
118
|
-
return this.sortedEntries.
|
|
127
|
+
return this.sortedEntries.getPairOrNextLower(requestedRevision) ?? undefined;
|
|
119
128
|
}
|
|
120
129
|
|
|
121
130
|
/**
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { copyPropertyIfDefined, fail, Mutable, MutableMap } from './Common';
|
|
7
|
+
import { Forest } from './Forest';
|
|
8
|
+
import { NodeId, StableNodeId, TraitLabel } from './Identifiers';
|
|
9
|
+
import { NodeIdConverter } from './NodeIdUtilities';
|
|
10
|
+
import { Payload, TreeNode, TreeNodeSequence } from './persisted-types';
|
|
11
|
+
import { TreeView, TreeViewNode, TreeViewPlace, TreeViewRange } from './TreeView';
|
|
12
|
+
import { HasVariadicTraits } from './ChangeTypes';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* An immutable view of a distributed tree.
|
|
16
|
+
* @public
|
|
17
|
+
*/
|
|
18
|
+
export class RevisionView extends TreeView {
|
|
19
|
+
/**
|
|
20
|
+
* Constructs a {@link RevisionView} using the supplied tree.
|
|
21
|
+
* @param root - the root of the tree to use as the contents of the {@link RevisionView}
|
|
22
|
+
* @param expensiveValidation - whether or not to perform additional validation, e.g. to catch errors when testing
|
|
23
|
+
*/
|
|
24
|
+
public static fromTree<T extends TreeNode<T, NodeId>>(root: T, expensiveValidation?: boolean): RevisionView;
|
|
25
|
+
/**
|
|
26
|
+
* Constructs a {@link RevisionView} using the supplied tree.
|
|
27
|
+
* @param root - the root of the tree to use as the contents of the `RevisionView`
|
|
28
|
+
* @param idConverter - the {@link NodeIdConverter} that will recompress the IDs the in the tree
|
|
29
|
+
* @param expensiveValidation - whether or not to perform additional validation, e.g. to catch errors when testing
|
|
30
|
+
*/
|
|
31
|
+
public static fromTree<T extends TreeNode<T, StableNodeId>>(
|
|
32
|
+
root: T,
|
|
33
|
+
idConverter: NodeIdConverter,
|
|
34
|
+
expensiveValidation?: boolean
|
|
35
|
+
): RevisionView;
|
|
36
|
+
|
|
37
|
+
public static fromTree<T extends TreeNode<T, NodeId> | TreeNode<T, StableNodeId>>(
|
|
38
|
+
root: T,
|
|
39
|
+
idConverterOrExpensiveValidation?: NodeIdConverter | boolean,
|
|
40
|
+
expensiveValidation = false
|
|
41
|
+
): RevisionView {
|
|
42
|
+
if (typeof idConverterOrExpensiveValidation === 'object') {
|
|
43
|
+
const rootId = idConverterOrExpensiveValidation.convertToNodeId(root.identifier as StableNodeId);
|
|
44
|
+
|
|
45
|
+
const treeViewNodes = convertTreeNodesToViewNodes(root, (node) => {
|
|
46
|
+
const identifier = idConverterOrExpensiveValidation.convertToNodeId(node.identifier as StableNodeId);
|
|
47
|
+
const viewNode = {
|
|
48
|
+
definition: node.definition,
|
|
49
|
+
identifier,
|
|
50
|
+
};
|
|
51
|
+
copyPropertyIfDefined(node, viewNode, 'payload');
|
|
52
|
+
return viewNode;
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
return new RevisionView(rootId, Forest.create(expensiveValidation).add(treeViewNodes));
|
|
56
|
+
} else {
|
|
57
|
+
return new RevisionView(
|
|
58
|
+
root.identifier as NodeId,
|
|
59
|
+
Forest.create(expensiveValidation).add(
|
|
60
|
+
convertTreeNodesToViewNodes(root, (node) => {
|
|
61
|
+
const viewNode = {
|
|
62
|
+
definition: node.definition,
|
|
63
|
+
identifier: node.identifier as NodeId,
|
|
64
|
+
};
|
|
65
|
+
copyPropertyIfDefined(node, viewNode, 'payload');
|
|
66
|
+
return viewNode;
|
|
67
|
+
})
|
|
68
|
+
)
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** Begin a transaction by generating a mutable `TransactionView` from this view */
|
|
74
|
+
public openForTransaction(): TransactionView {
|
|
75
|
+
return new TransactionView(this.root, this.forest);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
public equals(view: TreeView): boolean {
|
|
79
|
+
if (!(view instanceof RevisionView)) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return this.hasEqualForest(view);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* An view of a distributed tree that is part of an ongoing transaction between `RevisionView`s.
|
|
89
|
+
* @public
|
|
90
|
+
*/
|
|
91
|
+
export class TransactionView extends TreeView {
|
|
92
|
+
/** Conclude a transaction by generating an immutable `RevisionView` from this view */
|
|
93
|
+
public close(): RevisionView {
|
|
94
|
+
return new RevisionView(this.root, this.forest);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/** Inserts all nodes in a NodeSequence into the view */
|
|
98
|
+
public addNodes(sequence: Iterable<TreeViewNode>): TransactionView {
|
|
99
|
+
return new TransactionView(this.root, this.forest.add(sequence));
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** Remove all nodes with the given ids from the view */
|
|
103
|
+
public deleteNodes(nodes: Iterable<NodeId>): TransactionView {
|
|
104
|
+
return new TransactionView(this.root, this.forest.delete(nodes, true));
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Parents a set of detached nodes at a specified place.
|
|
109
|
+
* @param nodesToAttach - the nodes to parent in the specified place. The nodes must already be present in the view.
|
|
110
|
+
* @param place - the location to insert the nodes.
|
|
111
|
+
*/
|
|
112
|
+
public attachRange(nodesToAttach: readonly NodeId[], place: TreeViewPlace): TransactionView {
|
|
113
|
+
const { parent, label } = place.trait;
|
|
114
|
+
const index = this.findIndexWithinTrait(place);
|
|
115
|
+
return new TransactionView(this.root, this.forest.attachRangeOfChildren(parent, label, index, nodesToAttach));
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Detaches a range of nodes from their parent. The detached nodes remain in the view.
|
|
120
|
+
* @param rangeToDetach - the range of nodes to detach
|
|
121
|
+
*/
|
|
122
|
+
public detachRange(rangeToDetach: TreeViewRange): { view: TransactionView; detached: readonly NodeId[] } {
|
|
123
|
+
const { start, end } = rangeToDetach;
|
|
124
|
+
const { trait: traitLocation } = start;
|
|
125
|
+
const { parent, label } = traitLocation;
|
|
126
|
+
const startIndex = this.findIndexWithinTrait(start);
|
|
127
|
+
const endIndex = this.findIndexWithinTrait(end);
|
|
128
|
+
const { forest, detached } = this.forest.detachRangeOfChildren(parent, label, startIndex, endIndex);
|
|
129
|
+
return { view: new TransactionView(this.root, forest), detached };
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Sets or overwrites a node's value. The node must exist in this view.
|
|
134
|
+
* @param nodeId - the id of the node
|
|
135
|
+
* @param value - the new value
|
|
136
|
+
*/
|
|
137
|
+
public setNodeValue(nodeId: NodeId, value: Payload): TransactionView {
|
|
138
|
+
return new TransactionView(this.root, this.forest.setValue(nodeId, value));
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
public equals(view: TreeView): boolean {
|
|
142
|
+
if (!(view instanceof TransactionView)) {
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
return this.hasEqualForest(view);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Transform an input tree into a list of {@link TreeViewNode}s.
|
|
152
|
+
* @param tree - the input tree
|
|
153
|
+
* @param convert - a conversion function that will run on each node in the input tree to produce the output nodes.
|
|
154
|
+
* Returning undefined means that conversion for the given node was impossible, at which time the entire tree conversion will be aborted
|
|
155
|
+
* and return undefined.
|
|
156
|
+
*/
|
|
157
|
+
export function convertTreeNodesToViewNodes<
|
|
158
|
+
TIn extends HasVariadicTraits<TIn>,
|
|
159
|
+
TOut extends TreeViewNode = TreeViewNode
|
|
160
|
+
>(root: TIn, convert: (node: TIn) => Omit<TOut, 'traits'>): TOut[];
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Transform an input tree into a list of {@link TreeViewNode}s.
|
|
164
|
+
* @param tree - the input tree
|
|
165
|
+
* @param convert - a conversion function that will run on each node in the input tree to produce the output nodes.
|
|
166
|
+
*/
|
|
167
|
+
export function convertTreeNodesToViewNodes<
|
|
168
|
+
TIn extends HasVariadicTraits<TIn>,
|
|
169
|
+
TOut extends TreeViewNode = TreeViewNode
|
|
170
|
+
>(root: TIn, convert: (node: TIn) => Omit<TOut, 'traits'> | undefined): TOut[] | undefined;
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Transform an input tree into a list of {@link TreeViewNode}s.
|
|
174
|
+
* @param tree - the input tree
|
|
175
|
+
* @param convert - a conversion function that will run on each node in the input tree to produce the output nodes.
|
|
176
|
+
* Returning undefined means that conversion for the given node was impossible, at which time the entire tree conversion will be aborted
|
|
177
|
+
* and return undefined.
|
|
178
|
+
*/
|
|
179
|
+
export function convertTreeNodesToViewNodes<
|
|
180
|
+
TIn extends HasVariadicTraits<TIn>,
|
|
181
|
+
TOut extends TreeViewNode = TreeViewNode
|
|
182
|
+
>(root: TIn, convert: (node: TIn) => Omit<TOut, 'traits'> | undefined): TOut[] | undefined {
|
|
183
|
+
const convertedRoot = convert(root) as Mutable<TOut>;
|
|
184
|
+
if (convertedRoot === undefined || root.traits === undefined) {
|
|
185
|
+
return undefined;
|
|
186
|
+
}
|
|
187
|
+
// `convertedRoot` might be the same as `root`, in which case stash the children of `root` before wiping them from `convertedRoot`
|
|
188
|
+
const rootTraits = (root as unknown as TOut) === convertedRoot ? { traits: root.traits } : root;
|
|
189
|
+
convertedRoot.traits = new Map();
|
|
190
|
+
const pendingNodes: {
|
|
191
|
+
childIterator: Iterator<[TraitLabel, TIn]>;
|
|
192
|
+
newNode: Mutable<TOut>;
|
|
193
|
+
}[] = [{ childIterator: iterateChildren(rootTraits)[Symbol.iterator](), newNode: convertedRoot }];
|
|
194
|
+
const resultNodes: TOut[] = [];
|
|
195
|
+
|
|
196
|
+
while (pendingNodes.length > 0) {
|
|
197
|
+
const { childIterator, newNode } = pendingNodes[pendingNodes.length - 1] ?? fail('Undefined node');
|
|
198
|
+
const { value, done } = childIterator.next();
|
|
199
|
+
if (done === true) {
|
|
200
|
+
resultNodes.push(
|
|
201
|
+
pendingNodes.pop()?.newNode ?? fail('covertTreeNodesToViewNodes incorrectly coordinated parentage')
|
|
202
|
+
);
|
|
203
|
+
} else {
|
|
204
|
+
const [traitLabel, child] = value as [TraitLabel, TIn];
|
|
205
|
+
const convertedChild = convert(child) as TOut;
|
|
206
|
+
if (convertedChild === undefined) {
|
|
207
|
+
return undefined;
|
|
208
|
+
}
|
|
209
|
+
if (child.traits !== undefined) {
|
|
210
|
+
const childTraits = (child as unknown as TOut) === convertedChild ? { traits: child.traits } : child;
|
|
211
|
+
(convertedChild as Mutable<TOut>).traits = new Map();
|
|
212
|
+
pendingNodes.push({
|
|
213
|
+
childIterator: iterateChildren(childTraits)[Symbol.iterator](),
|
|
214
|
+
newNode: convertedChild,
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
const newTraits = newNode.traits as MutableMap<TOut['traits']>;
|
|
219
|
+
let newTrait = newTraits.get(traitLabel);
|
|
220
|
+
if (newTrait === undefined) {
|
|
221
|
+
newTrait = [];
|
|
222
|
+
newTraits.set(traitLabel, newTrait);
|
|
223
|
+
}
|
|
224
|
+
(newTrait as NodeId[]).push(convertedChild.identifier);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
return resultNodes;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Returns an iterable of the supplied node's traits in a stable order.
|
|
233
|
+
*/
|
|
234
|
+
export function* iterateChildren<T>(hasTraits: HasVariadicTraits<T>): Iterable<[TraitLabel, T]> {
|
|
235
|
+
if (hasTraits.traits !== undefined) {
|
|
236
|
+
for (const [label, trait] of Object.entries(hasTraits.traits).sort()) {
|
|
237
|
+
if (trait !== undefined) {
|
|
238
|
+
if (isTreeNodeSequence(trait)) {
|
|
239
|
+
for (const child of trait) {
|
|
240
|
+
yield [label as TraitLabel, child];
|
|
241
|
+
}
|
|
242
|
+
} else {
|
|
243
|
+
yield [label as TraitLabel, trait];
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
function isTreeNodeSequence<TChild>(sequence: TreeNodeSequence<TChild> | TChild): sequence is TreeNodeSequence<TChild> {
|
|
251
|
+
return Array.isArray(sequence);
|
|
252
|
+
}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { copyPropertyIfDefined, memoizeGetter } from './Common';
|
|
7
|
+
import { NodeId, TraitLabel } from './Identifiers';
|
|
8
|
+
import { NodeIdConverter } from './NodeIdUtilities';
|
|
9
|
+
import { ChangeNode, ChangeNode_0_0_2, TraitMap } from './persisted-types';
|
|
10
|
+
import { TreeView } from './TreeView';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Converts this tree view to an equivalent `ChangeNode`.
|
|
14
|
+
* @param view - the view to convert
|
|
15
|
+
*/
|
|
16
|
+
export function getChangeNodeFromView(view: TreeView): ChangeNode {
|
|
17
|
+
return getChangeNodeFromViewNode(view, view.root);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Converts a node in this tree view to an equivalent `ChangeNode`.
|
|
22
|
+
* @param view - the view of the tree that contains the node to convert
|
|
23
|
+
* @param id - the id of the node to convert
|
|
24
|
+
* @param lazyTraits - whether or not traits should be populated lazily. If true, the subtrees under each trait will not be read until
|
|
25
|
+
* the trait is first accessed.
|
|
26
|
+
*/
|
|
27
|
+
export function getChangeNodeFromViewNode(view: TreeView, id: NodeId, lazyTraits = false): ChangeNode {
|
|
28
|
+
const node = view.getViewNode(id);
|
|
29
|
+
const nodeData = {
|
|
30
|
+
definition: node.definition,
|
|
31
|
+
identifier: node.identifier,
|
|
32
|
+
};
|
|
33
|
+
copyPropertyIfDefined(node, nodeData, 'payload');
|
|
34
|
+
|
|
35
|
+
if (lazyTraits) {
|
|
36
|
+
return {
|
|
37
|
+
...nodeData,
|
|
38
|
+
get traits() {
|
|
39
|
+
return memoizeGetter(this, 'traits', makeTraits(view, node.traits, lazyTraits));
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return {
|
|
45
|
+
...nodeData,
|
|
46
|
+
traits: makeTraits(view, node.traits, lazyTraits),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** Given the traits of a TreeViewNode, return the corresponding traits on a Node */
|
|
51
|
+
function makeTraits(
|
|
52
|
+
view: TreeView,
|
|
53
|
+
traits: ReadonlyMap<TraitLabel, readonly NodeId[]>,
|
|
54
|
+
lazyTraits = false
|
|
55
|
+
): TraitMap<ChangeNode> {
|
|
56
|
+
const traitMap = {};
|
|
57
|
+
for (const [label, trait] of traits.entries()) {
|
|
58
|
+
if (lazyTraits) {
|
|
59
|
+
Object.defineProperty(traitMap, label, {
|
|
60
|
+
get() {
|
|
61
|
+
const treeNodeTrait = trait.map((id) => getChangeNodeFromViewNode(view, id, lazyTraits));
|
|
62
|
+
return memoizeGetter(this as TraitMap<ChangeNode>, label, treeNodeTrait);
|
|
63
|
+
},
|
|
64
|
+
configurable: true,
|
|
65
|
+
enumerable: true,
|
|
66
|
+
});
|
|
67
|
+
} else {
|
|
68
|
+
Object.defineProperty(traitMap, label, {
|
|
69
|
+
value: trait.map((id) => getChangeNodeFromViewNode(view, id, lazyTraits)),
|
|
70
|
+
enumerable: true,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return traitMap;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Converts this tree view to an equivalent `ChangeNode`.
|
|
80
|
+
* @param view - the view to convert
|
|
81
|
+
*/
|
|
82
|
+
export function getChangeNode_0_0_2FromView(view: TreeView, idConverter: NodeIdConverter): ChangeNode_0_0_2 {
|
|
83
|
+
return getChangeNode_0_0_2FromViewNode(view, view.root, idConverter);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Converts a node in this tree view to an equivalent `ChangeNode`.
|
|
88
|
+
* @param view - the view of the tree that contains the node to convert
|
|
89
|
+
* @param id - the id of the node to convert
|
|
90
|
+
* @param lazyTraits - whether or not traits should be populated lazily. If true, the subtrees under each trait will not be read until
|
|
91
|
+
* the trait is first accessed.
|
|
92
|
+
* @deprecated Remove by March 2022
|
|
93
|
+
*/
|
|
94
|
+
export function getChangeNode_0_0_2FromViewNode(
|
|
95
|
+
view: TreeView,
|
|
96
|
+
id: NodeId,
|
|
97
|
+
idConverter: NodeIdConverter
|
|
98
|
+
): ChangeNode_0_0_2 {
|
|
99
|
+
const node = view.getViewNode(id);
|
|
100
|
+
const nodeData = {
|
|
101
|
+
definition: node.definition,
|
|
102
|
+
identifier: idConverter.convertToStableNodeId(node.identifier),
|
|
103
|
+
};
|
|
104
|
+
copyPropertyIfDefined(node, nodeData, 'payload');
|
|
105
|
+
|
|
106
|
+
return {
|
|
107
|
+
...nodeData,
|
|
108
|
+
traits: makeTraits_0_0_2(view, node.traits, idConverter),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Given the traits of a TreeViewNode, return the corresponding traits on a Node
|
|
114
|
+
* @deprecated Remove by march 2022
|
|
115
|
+
*/
|
|
116
|
+
function makeTraits_0_0_2(
|
|
117
|
+
view: TreeView,
|
|
118
|
+
traits: ReadonlyMap<TraitLabel, readonly NodeId[]>,
|
|
119
|
+
idConverter: NodeIdConverter
|
|
120
|
+
): TraitMap<ChangeNode_0_0_2> {
|
|
121
|
+
const traitMap = {};
|
|
122
|
+
for (const [label, trait] of traits.entries()) {
|
|
123
|
+
Object.defineProperty(traitMap, label, {
|
|
124
|
+
value: trait.map((id) => getChangeNode_0_0_2FromViewNode(view, id, idConverter)),
|
|
125
|
+
enumerable: true,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return traitMap;
|
|
130
|
+
}
|