@fluid-experimental/tree 0.58.2000 → 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,493 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { IsoBuffer } from '@fluidframework/common-utils';
|
|
7
|
+
import { assert, fail } from './Common';
|
|
8
|
+
import { EditLog } from './EditLog';
|
|
9
|
+
import { convertTreeNodes, newEdit } from './EditUtilities';
|
|
10
|
+
import { DetachedSequenceId, FinalNodeId, OpSpaceNodeId, TraitLabel } from './Identifiers';
|
|
11
|
+
import { initialTree } from './InitialTree';
|
|
12
|
+
import {
|
|
13
|
+
ContextualizedNodeIdNormalizer,
|
|
14
|
+
getNodeIdContext,
|
|
15
|
+
NodeIdContext,
|
|
16
|
+
NodeIdConverter,
|
|
17
|
+
NodeIdGenerator,
|
|
18
|
+
NodeIdNormalizer,
|
|
19
|
+
scopeIdNormalizer,
|
|
20
|
+
sequencedIdNormalizer,
|
|
21
|
+
} from './NodeIdUtilities';
|
|
22
|
+
import { getChangeNodeFromView, getChangeNode_0_0_2FromView } from './SerializationUtilities';
|
|
23
|
+
import {
|
|
24
|
+
CompressedChangeInternal,
|
|
25
|
+
ChangeInternal,
|
|
26
|
+
SharedTreeSummary_0_0_2,
|
|
27
|
+
WriteFormat,
|
|
28
|
+
ChangeNode,
|
|
29
|
+
Edit,
|
|
30
|
+
SharedTreeEditOp,
|
|
31
|
+
SharedTreeOpType,
|
|
32
|
+
SharedTreeSummary,
|
|
33
|
+
EditWithoutId,
|
|
34
|
+
ChangeTypeInternal,
|
|
35
|
+
ChangeInternal_0_0_2,
|
|
36
|
+
SharedTreeEditOp_0_0_2,
|
|
37
|
+
reservedIdCount,
|
|
38
|
+
ChangeNode_0_0_2,
|
|
39
|
+
EditChunkContents,
|
|
40
|
+
EditLogSummary,
|
|
41
|
+
EditChunkContents_0_1_1,
|
|
42
|
+
FluidEditHandle,
|
|
43
|
+
StablePlaceInternal,
|
|
44
|
+
Side,
|
|
45
|
+
} from './persisted-types';
|
|
46
|
+
import { RevisionView } from './RevisionView';
|
|
47
|
+
import { MutableStringInterner, StringInterner } from './StringInterner';
|
|
48
|
+
import { SummaryContents } from './Summary';
|
|
49
|
+
import { InterningTreeCompressor } from './TreeCompressor';
|
|
50
|
+
import {
|
|
51
|
+
createSessionId,
|
|
52
|
+
hasOngoingSession,
|
|
53
|
+
IdCompressor,
|
|
54
|
+
IdCreationRange,
|
|
55
|
+
SerializedIdCompressorWithNoSession,
|
|
56
|
+
} from './id-compressor';
|
|
57
|
+
import { ChangeCompressor, compressEdit, decompressEdit } from './ChangeCompression';
|
|
58
|
+
import { convertEditIds, convertNodeDataIds } from './IdConversion';
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Object capable of converting between the current internal representation for 0.1.1 edits and their wire format.
|
|
62
|
+
* @internal
|
|
63
|
+
*/
|
|
64
|
+
export class SharedTreeEncoder_0_1_1 {
|
|
65
|
+
private readonly treeCompressor = new InterningTreeCompressor<never>();
|
|
66
|
+
private readonly changeCompressor = new ChangeCompressor(this.treeCompressor);
|
|
67
|
+
|
|
68
|
+
public constructor(private readonly summarizeHistory: boolean) {}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Encodes an edit op to be sent.
|
|
72
|
+
* @param edit - edit to encode.
|
|
73
|
+
* @param fluidSerialize - Callback which serializes Fluid handles contained in a JSON-serializable object, returning the result.
|
|
74
|
+
* Should be invoked on the edit contents at some point before op encoding is complete.
|
|
75
|
+
* This is because edit contents may have Payloads needing to be serialized.
|
|
76
|
+
*/
|
|
77
|
+
public encodeEditOp(
|
|
78
|
+
edit: Edit<ChangeInternal>,
|
|
79
|
+
fluidSerialize: (
|
|
80
|
+
edit: Edit<CompressedChangeInternal<OpSpaceNodeId>>
|
|
81
|
+
) => Edit<CompressedChangeInternal<OpSpaceNodeId>>,
|
|
82
|
+
idRange: IdCreationRange,
|
|
83
|
+
idNormalizer: NodeIdNormalizer<OpSpaceNodeId>,
|
|
84
|
+
interner: StringInterner
|
|
85
|
+
): SharedTreeEditOp {
|
|
86
|
+
// IFluidHandles are not allowed in Ops.
|
|
87
|
+
// Ops can contain Fluid's Serializable (for payloads) which allows IFluidHandles.
|
|
88
|
+
// So replace the handles by encoding before sending:
|
|
89
|
+
const semiSerialized = fluidSerialize(
|
|
90
|
+
compressEdit(this.changeCompressor, interner, scopeIdNormalizer(idNormalizer, idRange.sessionId), edit)
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
return {
|
|
94
|
+
type: SharedTreeOpType.Edit,
|
|
95
|
+
edit: semiSerialized,
|
|
96
|
+
version: WriteFormat.v0_1_1,
|
|
97
|
+
idRange,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Decodes an edit op encoded with `encodeEditOp`.
|
|
103
|
+
* @param op - op to decode.
|
|
104
|
+
* @param fluidDeserialize - Callback which deserializes Fluid handles contained in a JSON-serializable object.
|
|
105
|
+
* Should be invoked on the semi-serialized edit contents at some point before decoding is complete.
|
|
106
|
+
* This will rehydrate any serialized Fluid handles into usable IFluidHandle objects.
|
|
107
|
+
*/
|
|
108
|
+
public decodeEditOp(
|
|
109
|
+
op: SharedTreeEditOp,
|
|
110
|
+
fluidDeserialize: (
|
|
111
|
+
semiSerializedEdit: Edit<CompressedChangeInternal<OpSpaceNodeId>>
|
|
112
|
+
) => Edit<CompressedChangeInternal<OpSpaceNodeId>>,
|
|
113
|
+
idNormalizer: NodeIdNormalizer<OpSpaceNodeId>,
|
|
114
|
+
interner: StringInterner
|
|
115
|
+
): Edit<ChangeInternal> {
|
|
116
|
+
const { edit: semiSerializedEdit } = op;
|
|
117
|
+
const parsedEdit = fluidDeserialize(semiSerializedEdit);
|
|
118
|
+
return decompressEdit(
|
|
119
|
+
this.changeCompressor,
|
|
120
|
+
interner,
|
|
121
|
+
scopeIdNormalizer(idNormalizer, op.idRange.sessionId),
|
|
122
|
+
parsedEdit
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Encodes a summary.
|
|
128
|
+
*/
|
|
129
|
+
public encodeSummary(
|
|
130
|
+
edits: EditLog<ChangeInternal>,
|
|
131
|
+
currentView: RevisionView,
|
|
132
|
+
idContext: NodeIdContext,
|
|
133
|
+
idNormalizer: NodeIdNormalizer<OpSpaceNodeId>,
|
|
134
|
+
interner: StringInterner,
|
|
135
|
+
serializedIdCompressor: SerializedIdCompressorWithNoSession
|
|
136
|
+
): SharedTreeSummary {
|
|
137
|
+
if (this.summarizeHistory) {
|
|
138
|
+
return this.fullHistorySummarizer(edits, currentView, idNormalizer, interner, serializedIdCompressor);
|
|
139
|
+
} else {
|
|
140
|
+
return this.noHistorySummarizer(
|
|
141
|
+
edits,
|
|
142
|
+
currentView,
|
|
143
|
+
idContext,
|
|
144
|
+
idNormalizer,
|
|
145
|
+
interner,
|
|
146
|
+
serializedIdCompressor
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Decodes an encoded summary.
|
|
153
|
+
*/
|
|
154
|
+
public decodeSummary({
|
|
155
|
+
editHistory,
|
|
156
|
+
currentTree: compressedTree,
|
|
157
|
+
internedStrings,
|
|
158
|
+
idCompressor: serializedIdCompressor,
|
|
159
|
+
version,
|
|
160
|
+
}: SharedTreeSummary): SummaryContents {
|
|
161
|
+
assert(version === WriteFormat.v0_1_1, `Invalid summary version to decode: ${version}, expected: 0.1.1`);
|
|
162
|
+
assert(typeof editHistory === 'object', '0.1.1 summary encountered with non-object edit history.');
|
|
163
|
+
|
|
164
|
+
const idCompressor = hasOngoingSession(serializedIdCompressor)
|
|
165
|
+
? IdCompressor.deserialize(serializedIdCompressor)
|
|
166
|
+
: IdCompressor.deserialize(serializedIdCompressor, createSessionId()); // TODO attribution
|
|
167
|
+
|
|
168
|
+
const interner = new MutableStringInterner(internedStrings);
|
|
169
|
+
const sequencedNormalizer = sequencedIdNormalizer(getNodeIdContext(idCompressor));
|
|
170
|
+
const decompressedTree: ChangeNode | undefined =
|
|
171
|
+
compressedTree !== undefined
|
|
172
|
+
? this.treeCompressor.decompress(compressedTree, interner, sequencedNormalizer)
|
|
173
|
+
: undefined;
|
|
174
|
+
const { editChunks, editIds } = editHistory;
|
|
175
|
+
assert(editChunks !== undefined, 'Missing editChunks on 0.1.1 summary.');
|
|
176
|
+
assert(editIds !== undefined, 'Missing editIds on 0.1.1 summary.');
|
|
177
|
+
|
|
178
|
+
const uncompressedChunks = editChunks.map(({ startRevision, chunk }) => ({
|
|
179
|
+
startRevision,
|
|
180
|
+
chunk: isEditHandle(chunk)
|
|
181
|
+
? {
|
|
182
|
+
get: async () => {
|
|
183
|
+
const baseHandle = chunk;
|
|
184
|
+
const contents: EditChunkContents = JSON.parse(
|
|
185
|
+
IsoBuffer.from(await baseHandle.get()).toString()
|
|
186
|
+
);
|
|
187
|
+
// Note: any interned IDs referenced in chunks taken at the time of summarization must be included
|
|
188
|
+
// in the summary. So this interner is sufficient.
|
|
189
|
+
return this.decodeEditChunk(contents, sequencedNormalizer, interner);
|
|
190
|
+
},
|
|
191
|
+
baseHandle: chunk,
|
|
192
|
+
}
|
|
193
|
+
: chunk.map((edit) => decompressEdit(this.changeCompressor, interner, sequencedNormalizer, edit)),
|
|
194
|
+
}));
|
|
195
|
+
return {
|
|
196
|
+
currentTree: decompressedTree,
|
|
197
|
+
editHistory: { editIds, editChunks: uncompressedChunks },
|
|
198
|
+
idCompressor,
|
|
199
|
+
interner,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Does not preserve (persist) history at all.
|
|
205
|
+
* Instead, the history returned in the summary will contain a single edit that creates a revision identical to the supplied view.
|
|
206
|
+
* Writes summary format 0.1.1 which does not store the currentView for no history summaries.
|
|
207
|
+
*/
|
|
208
|
+
private noHistorySummarizer<TChange>(
|
|
209
|
+
_edits: EditLog<TChange>,
|
|
210
|
+
currentView: RevisionView,
|
|
211
|
+
idContext: NodeIdContext,
|
|
212
|
+
idNormalizer: NodeIdNormalizer<OpSpaceNodeId>,
|
|
213
|
+
interner: StringInterner,
|
|
214
|
+
serializedIdCompressor: SerializedIdCompressorWithNoSession
|
|
215
|
+
): SharedTreeSummary {
|
|
216
|
+
const currentTree = getChangeNodeFromView(currentView);
|
|
217
|
+
const initialTreeId = idContext.convertToNodeId(initialTree.identifier);
|
|
218
|
+
const changes: ChangeInternal[] = [];
|
|
219
|
+
// Generate a set of changes to set the root node's children to that of the root in the currentTree
|
|
220
|
+
Object.entries(currentTree.traits).forEach(([label, children]) => {
|
|
221
|
+
const id = 0 as DetachedSequenceId;
|
|
222
|
+
changes.push(
|
|
223
|
+
ChangeInternal.build(children, id),
|
|
224
|
+
ChangeInternal.insert(
|
|
225
|
+
id,
|
|
226
|
+
StablePlaceInternal.atStartOf({ parent: initialTreeId, label: label as TraitLabel })
|
|
227
|
+
)
|
|
228
|
+
);
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
if (currentTree.payload !== undefined) {
|
|
232
|
+
changes.push(ChangeInternal.setPayload(initialTreeId, currentTree.payload));
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
assert(
|
|
236
|
+
currentTree.identifier === initialTreeId && currentTree.definition === initialTree.definition,
|
|
237
|
+
'root definition and identifier should be immutable.'
|
|
238
|
+
);
|
|
239
|
+
const edit = newEdit(changes);
|
|
240
|
+
const compressedChanges = edit.changes.map((change) =>
|
|
241
|
+
this.changeCompressor.compress(change, interner, sequencedIdNormalizer(idNormalizer))
|
|
242
|
+
);
|
|
243
|
+
return {
|
|
244
|
+
editHistory: {
|
|
245
|
+
editChunks: [{ startRevision: 0, chunk: [{ changes: compressedChanges }] }],
|
|
246
|
+
editIds: [edit.id],
|
|
247
|
+
},
|
|
248
|
+
version: WriteFormat.v0_1_1,
|
|
249
|
+
internedStrings: interner.getSerializable(),
|
|
250
|
+
idCompressor: serializedIdCompressor,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Generates a summary with format version 0.1.1. This will prefer handles over edits in edit chunks where possible,
|
|
256
|
+
* and string interning and tree compression will be applied.
|
|
257
|
+
*/
|
|
258
|
+
private fullHistorySummarizer(
|
|
259
|
+
edits: EditLog<ChangeInternal>,
|
|
260
|
+
currentView: RevisionView,
|
|
261
|
+
idNormalizer: NodeIdNormalizer<OpSpaceNodeId>,
|
|
262
|
+
interner: StringInterner,
|
|
263
|
+
serializedIdCompressor: SerializedIdCompressorWithNoSession
|
|
264
|
+
): SharedTreeSummary {
|
|
265
|
+
const sequencedNormalizer = sequencedIdNormalizer(idNormalizer);
|
|
266
|
+
const currentTree = this.treeCompressor.compress(
|
|
267
|
+
getChangeNodeFromView(currentView),
|
|
268
|
+
interner,
|
|
269
|
+
sequencedNormalizer
|
|
270
|
+
);
|
|
271
|
+
|
|
272
|
+
return {
|
|
273
|
+
currentTree,
|
|
274
|
+
editHistory: edits.getEditLogSummary((edit) =>
|
|
275
|
+
compressEdit(this.changeCompressor, interner, sequencedNormalizer, edit)
|
|
276
|
+
),
|
|
277
|
+
version: WriteFormat.v0_1_1,
|
|
278
|
+
internedStrings: interner.getSerializable(),
|
|
279
|
+
idCompressor: serializedIdCompressor,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
public encodeEditChunk(
|
|
284
|
+
edits: readonly EditWithoutId<ChangeInternal>[],
|
|
285
|
+
idNormalizer: ContextualizedNodeIdNormalizer<FinalNodeId>,
|
|
286
|
+
interner: StringInterner
|
|
287
|
+
): EditChunkContents_0_1_1 {
|
|
288
|
+
const compressedEdits = edits.map((edit) => compressEdit(this.changeCompressor, interner, idNormalizer, edit));
|
|
289
|
+
return {
|
|
290
|
+
version: WriteFormat.v0_1_1,
|
|
291
|
+
edits: compressedEdits,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
public decodeEditChunk(
|
|
296
|
+
contents: EditChunkContents,
|
|
297
|
+
idNormalizer: ContextualizedNodeIdNormalizer<FinalNodeId>,
|
|
298
|
+
interner: StringInterner
|
|
299
|
+
): EditWithoutId<ChangeInternal>[] {
|
|
300
|
+
assert(
|
|
301
|
+
contents.version === WriteFormat.v0_1_1,
|
|
302
|
+
`Invalid editChunk to decode: ${contents.version}. Expected 0.1.1.`
|
|
303
|
+
);
|
|
304
|
+
return contents.edits.map((edit) => decompressEdit(this.changeCompressor, interner, idNormalizer, edit));
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* Object capable of converting between the current internal representation for 0.0.2 edits and their wire format.
|
|
310
|
+
* @internal
|
|
311
|
+
*/
|
|
312
|
+
export class SharedTreeEncoder_0_0_2 {
|
|
313
|
+
public constructor(private readonly summarizeHistory: boolean) {}
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
* Encodes an edit op to be sent.
|
|
317
|
+
* @param edit - edit to encode.
|
|
318
|
+
* @param fluidSerialize - Callback which serializes Fluid handles contained in a JSON-serializable object, returning the result.
|
|
319
|
+
* Should be invoked on the edit contents at some point before op encoding is complete.
|
|
320
|
+
* This is because edit contents may have Payloads needing to be serialized.
|
|
321
|
+
*/
|
|
322
|
+
public encodeEditOp(
|
|
323
|
+
edit: Edit<ChangeInternal>,
|
|
324
|
+
fluidSerialize: (edit: Edit<ChangeInternal_0_0_2>) => Edit<ChangeInternal_0_0_2>,
|
|
325
|
+
idConverter: NodeIdConverter
|
|
326
|
+
): SharedTreeEditOp_0_0_2 {
|
|
327
|
+
// IFluidHandles are not allowed in Ops.
|
|
328
|
+
// Ops can contain Fluid's Serializable (for payloads) which allows IFluidHandles.
|
|
329
|
+
// So replace the handles by encoding before sending:
|
|
330
|
+
const semiSerialized = fluidSerialize(convertEditIds(edit, (id) => idConverter.convertToStableNodeId(id)));
|
|
331
|
+
|
|
332
|
+
return {
|
|
333
|
+
type: SharedTreeOpType.Edit,
|
|
334
|
+
edit: semiSerialized,
|
|
335
|
+
version: WriteFormat.v0_0_2,
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
/**
|
|
340
|
+
* Decodes an edit op encoded with `encodeEditOp`.
|
|
341
|
+
* @param op - op to decode.
|
|
342
|
+
* @param fluidDeserialize - Callback which deserializes Fluid handles contained in a JSON-serializable object.
|
|
343
|
+
* Should be invoked on the semi-serialized edit contents at some point before decoding is complete.
|
|
344
|
+
* This will rehydrate any serialized Fluid handles into usable IFluidHandle objects.
|
|
345
|
+
*/
|
|
346
|
+
public decodeEditOp(
|
|
347
|
+
op: SharedTreeEditOp_0_0_2,
|
|
348
|
+
fluidDeserialize: (semiSerializedEdit: Edit<ChangeInternal_0_0_2>) => Edit<ChangeInternal_0_0_2>,
|
|
349
|
+
idGenerator: NodeIdGenerator
|
|
350
|
+
): Edit<ChangeInternal> {
|
|
351
|
+
const { edit: semiSerializedEdit } = op;
|
|
352
|
+
const parsedEdit = fluidDeserialize(semiSerializedEdit);
|
|
353
|
+
return convertEditIds(parsedEdit, (id) => idGenerator.generateNodeId(id));
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
/**
|
|
357
|
+
* Encodes a summary.
|
|
358
|
+
*/
|
|
359
|
+
public encodeSummary(
|
|
360
|
+
edits: EditLog<ChangeInternal>,
|
|
361
|
+
currentView: RevisionView,
|
|
362
|
+
idConverter: NodeIdConverter
|
|
363
|
+
): SharedTreeSummary_0_0_2 {
|
|
364
|
+
if (this.summarizeHistory) {
|
|
365
|
+
return this.fullHistorySummarizer(edits, currentView, idConverter);
|
|
366
|
+
} else {
|
|
367
|
+
return this.noHistorySummarizer(edits, currentView, idConverter);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/**
|
|
372
|
+
* Decodes an encoded summary.
|
|
373
|
+
*/
|
|
374
|
+
public decodeSummary({ currentTree, sequencedEdits }: SharedTreeSummary_0_0_2): SummaryContents {
|
|
375
|
+
assert(sequencedEdits !== undefined, '0.0.2 summary encountered with missing sequencedEdits field.');
|
|
376
|
+
const idCompressor = new IdCompressor(createSessionId(), reservedIdCount);
|
|
377
|
+
const idGenerator = getNodeIdContext(idCompressor);
|
|
378
|
+
const generateId = (id) => idGenerator.generateNodeId(id);
|
|
379
|
+
|
|
380
|
+
// This saves all of the edits in the summary as part of the first chunk.
|
|
381
|
+
const temporaryLog = new EditLog<ChangeInternal>();
|
|
382
|
+
sequencedEdits.forEach((edit) =>
|
|
383
|
+
temporaryLog.addSequencedEdit(convertEditIds(edit, generateId), {
|
|
384
|
+
sequenceNumber: 1,
|
|
385
|
+
referenceSequenceNumber: 0,
|
|
386
|
+
})
|
|
387
|
+
);
|
|
388
|
+
|
|
389
|
+
return {
|
|
390
|
+
currentTree: convertTreeNodes<ChangeNode_0_0_2, ChangeNode>(currentTree, (node) =>
|
|
391
|
+
convertNodeDataIds(node, generateId)
|
|
392
|
+
),
|
|
393
|
+
idCompressor,
|
|
394
|
+
interner: new MutableStringInterner(),
|
|
395
|
+
// This cast is valid because we just constructed this log and gave it only in-session edits.
|
|
396
|
+
editHistory: temporaryLog.getEditLogSummary() as EditLogSummary<ChangeInternal, never>,
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
/**
|
|
401
|
+
* Does not preserve (persist) history at all.
|
|
402
|
+
* Instead, the history returned in the summary will contain a single edit that creates a revision identical to the supplied view.
|
|
403
|
+
* @param stable - Generates the single edit with a stable edit ID. False by default, used for testing.
|
|
404
|
+
*/
|
|
405
|
+
private noHistorySummarizer<TChange>(
|
|
406
|
+
_edits: EditLog<TChange>,
|
|
407
|
+
currentView: RevisionView,
|
|
408
|
+
idConverter: NodeIdConverter
|
|
409
|
+
): SharedTreeSummary_0_0_2 {
|
|
410
|
+
const currentTree = getChangeNode_0_0_2FromView(currentView, idConverter);
|
|
411
|
+
const changes: ChangeInternal_0_0_2[] = [];
|
|
412
|
+
// Generate a set of changes to set the root node's children to that of the root in the currentTree
|
|
413
|
+
Object.entries(currentTree.traits).forEach(([label, children]) => {
|
|
414
|
+
const id = 0 as DetachedSequenceId;
|
|
415
|
+
changes.push(
|
|
416
|
+
{ type: ChangeTypeInternal.Build, source: children, destination: id },
|
|
417
|
+
{
|
|
418
|
+
type: ChangeTypeInternal.Insert,
|
|
419
|
+
source: id,
|
|
420
|
+
destination: {
|
|
421
|
+
side: Side.After,
|
|
422
|
+
referenceTrait: { label: label as TraitLabel, parent: initialTree.identifier },
|
|
423
|
+
},
|
|
424
|
+
}
|
|
425
|
+
);
|
|
426
|
+
});
|
|
427
|
+
|
|
428
|
+
if (currentTree.payload !== undefined) {
|
|
429
|
+
changes.push({
|
|
430
|
+
type: ChangeTypeInternal.SetValue,
|
|
431
|
+
nodeToModify: initialTree.identifier,
|
|
432
|
+
payload: currentTree.payload,
|
|
433
|
+
});
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
assert(
|
|
437
|
+
currentTree.identifier === initialTree.identifier && currentTree.definition === initialTree.definition,
|
|
438
|
+
'root definition and identifier should be immutable.'
|
|
439
|
+
);
|
|
440
|
+
const edit = newEdit(changes);
|
|
441
|
+
|
|
442
|
+
return {
|
|
443
|
+
currentTree,
|
|
444
|
+
sequencedEdits: [
|
|
445
|
+
{
|
|
446
|
+
id: edit.id,
|
|
447
|
+
changes: edit.changes,
|
|
448
|
+
},
|
|
449
|
+
],
|
|
450
|
+
version: WriteFormat.v0_0_2,
|
|
451
|
+
};
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Preserves the full history in the generated summary.
|
|
455
|
+
*/
|
|
456
|
+
private fullHistorySummarizer(
|
|
457
|
+
edits: EditLog<ChangeInternal>,
|
|
458
|
+
currentView: RevisionView,
|
|
459
|
+
idConverter: NodeIdConverter
|
|
460
|
+
): SharedTreeSummary_0_0_2 {
|
|
461
|
+
const { editChunks, editIds } = edits.getEditLogSummary();
|
|
462
|
+
|
|
463
|
+
const sequencedEdits: Edit<ChangeInternal_0_0_2>[] = [];
|
|
464
|
+
let idIndex = 0;
|
|
465
|
+
editChunks.forEach(({ chunk }) => {
|
|
466
|
+
if (isEditHandle(chunk)) {
|
|
467
|
+
fail('Cannot write handles to summary version 0.0.2');
|
|
468
|
+
} else {
|
|
469
|
+
chunk.forEach(({ changes }) => {
|
|
470
|
+
sequencedEdits.push(
|
|
471
|
+
convertEditIds(
|
|
472
|
+
{
|
|
473
|
+
changes,
|
|
474
|
+
id: editIds[idIndex++] ?? fail('Number of edits should match number of edit IDs.'),
|
|
475
|
+
},
|
|
476
|
+
(id) => idConverter.convertToStableNodeId(id)
|
|
477
|
+
)
|
|
478
|
+
);
|
|
479
|
+
});
|
|
480
|
+
}
|
|
481
|
+
});
|
|
482
|
+
|
|
483
|
+
return {
|
|
484
|
+
currentTree: getChangeNode_0_0_2FromView(currentView, idConverter),
|
|
485
|
+
sequencedEdits,
|
|
486
|
+
version: WriteFormat.v0_0_2,
|
|
487
|
+
};
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
function isEditHandle(chunk: FluidEditHandle | readonly EditWithoutId<unknown>[]): chunk is FluidEditHandle {
|
|
492
|
+
return !Array.isArray(chunk);
|
|
493
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { fail } from './Common';
|
|
7
|
+
import type { InternedStringId } from './Identifiers';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Interns strings as integers.
|
|
11
|
+
*/
|
|
12
|
+
export interface StringInterner {
|
|
13
|
+
getInternedId(input: string): InternedStringId | undefined;
|
|
14
|
+
getString(internedId: number): string;
|
|
15
|
+
getSerializable(): readonly string[];
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Interns strings as integers.
|
|
20
|
+
* Given a string, this class will produce a unique integer associated with that string that can then be used to retrieve the string.
|
|
21
|
+
*/
|
|
22
|
+
export class MutableStringInterner implements StringInterner {
|
|
23
|
+
private readonly stringToInternedIdMap = new Map<string, InternedStringId>();
|
|
24
|
+
private readonly internedStrings: string[] = [];
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @param inputStrings - A list of strings to intern in the order given. Can be used to rehydrate from a previous
|
|
28
|
+
* `StringInterner`'s {@link StringInterner.getSerializable} return value.
|
|
29
|
+
*/
|
|
30
|
+
constructor(inputStrings: readonly string[] = []) {
|
|
31
|
+
for (const value of inputStrings) {
|
|
32
|
+
this.getOrCreateInternedId(value);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @param input - The string to get the associated intern ID for
|
|
38
|
+
* @returns an intern ID that is uniquely associated with the input string
|
|
39
|
+
*/
|
|
40
|
+
public getOrCreateInternedId(input: string): InternedStringId {
|
|
41
|
+
return this.getInternedId(input) ?? this.createNewId(input);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public getInternedId(input: string): InternedStringId | undefined {
|
|
45
|
+
return this.stringToInternedIdMap.get(input);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
*
|
|
50
|
+
* @param internId - The intern ID to get the associated string for. Can only retrieve strings that have been used as inputs to
|
|
51
|
+
* calls of `getInternId`.
|
|
52
|
+
* @returns a string that is uniquely associated with the given intern ID
|
|
53
|
+
*/
|
|
54
|
+
public getString(internId: number): string {
|
|
55
|
+
return this.internedStrings[internId] ?? fail(`No string associated with ${internId}.`);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @returns the list of strings interned where the indices map to the associated {@link InternedStringId} of each string
|
|
60
|
+
*/
|
|
61
|
+
public getSerializable(): readonly string[] {
|
|
62
|
+
return this.internedStrings;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** Create a new interned id. Assumes without validation that the input doesn't already have an interned id. */
|
|
66
|
+
private createNewId(input: string): InternedStringId {
|
|
67
|
+
const internedId = this.stringToInternedIdMap.size as InternedStringId;
|
|
68
|
+
this.stringToInternedIdMap.set(input, internedId);
|
|
69
|
+
this.internedStrings.push(input);
|
|
70
|
+
return internedId;
|
|
71
|
+
}
|
|
72
|
+
}
|
package/src/Summary.ts
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { IFluidHandle } from '@fluidframework/core-interfaces';
|
|
7
|
+
import { IFluidSerializer, serializeHandles } from '@fluidframework/shared-object-base';
|
|
8
|
+
import { fail } from './Common';
|
|
9
|
+
import type { IdCompressor } from './id-compressor';
|
|
10
|
+
import type { EditLogSummary, SharedTreeSummaryBase, ChangeNode, ChangeInternal } from './persisted-types';
|
|
11
|
+
import type { EditHandle } from './EditLog';
|
|
12
|
+
import type { MutableStringInterner } from './StringInterner';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The contents of a SharedTree summary, converted to a common internal format that can be
|
|
16
|
+
* loaded into a SharedTree.
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
export interface SummaryContents {
|
|
20
|
+
readonly currentTree?: ChangeNode;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Information that can populate an edit log.
|
|
24
|
+
*/
|
|
25
|
+
readonly editHistory: EditLogSummary<ChangeInternal, EditHandle<ChangeInternal>>;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Information about all IDs compressed in the summary
|
|
29
|
+
*/
|
|
30
|
+
readonly idCompressor: IdCompressor;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Interner pre-loaded with all definitions and labels from the summary.
|
|
34
|
+
*/
|
|
35
|
+
readonly interner: MutableStringInterner;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Serializes a SharedTree summary into a JSON string. This may later be used to initialize a SharedTree's state via `deserialize()`
|
|
40
|
+
* Also replaces handle objects with their serialized form.
|
|
41
|
+
*
|
|
42
|
+
* @param summary - The SharedTree summary to serialize.
|
|
43
|
+
* @param serializer - The serializer required to serialize handles in the summary.
|
|
44
|
+
* @param bind - The object handle required to serialize handles in the summary
|
|
45
|
+
*/
|
|
46
|
+
export function serialize(summary: SharedTreeSummaryBase, serializer: IFluidSerializer, bind: IFluidHandle): string {
|
|
47
|
+
return serializeHandles(summary, serializer, bind) ?? fail();
|
|
48
|
+
}
|