@fluid-experimental/tree 0.58.2001 → 0.59.1000-61898
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 +1074 -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 +36 -0
- package/dist/TreeCompressor.d.ts.map +1 -0
- package/dist/TreeCompressor.js +137 -0
- package/dist/TreeCompressor.js.map +1 -0
- package/dist/TreeNodeHandle.d.ts +12 -18
- package/dist/TreeNodeHandle.d.ts.map +1 -1
- package/dist/TreeNodeHandle.js +13 -23
- package/dist/TreeNodeHandle.js.map +1 -1
- package/dist/TreeView.d.ts +166 -0
- package/dist/TreeView.d.ts.map +1 -0
- package/dist/TreeView.js +218 -0
- package/dist/TreeView.js.map +1 -0
- package/dist/TreeViewUtilities.d.ts +21 -0
- package/dist/TreeViewUtilities.d.ts.map +1 -0
- package/dist/TreeViewUtilities.js +77 -0
- package/dist/TreeViewUtilities.js.map +1 -0
- package/dist/{default-edits/UndoRedoHandler.d.ts → UndoRedoHandler.d.ts} +2 -2
- package/dist/UndoRedoHandler.d.ts.map +1 -0
- package/dist/{default-edits/UndoRedoHandler.js → UndoRedoHandler.js} +5 -9
- package/dist/UndoRedoHandler.js.map +1 -0
- package/dist/id-compressor/AppendOnlySortedMap.d.ts +127 -0
- package/dist/id-compressor/AppendOnlySortedMap.d.ts.map +1 -0
- package/dist/id-compressor/AppendOnlySortedMap.js +283 -0
- package/dist/id-compressor/AppendOnlySortedMap.js.map +1 -0
- package/dist/id-compressor/IdCompressor.d.ts +389 -0
- package/dist/id-compressor/IdCompressor.d.ts.map +1 -0
- package/dist/id-compressor/IdCompressor.js +1353 -0
- package/dist/id-compressor/IdCompressor.js.map +1 -0
- package/dist/id-compressor/IdRange.d.ts +11 -0
- package/dist/id-compressor/IdRange.d.ts.map +1 -0
- package/dist/id-compressor/IdRange.js +29 -0
- package/dist/id-compressor/IdRange.js.map +1 -0
- package/dist/id-compressor/NumericUuid.d.ts +63 -0
- package/dist/id-compressor/NumericUuid.d.ts.map +1 -0
- package/dist/id-compressor/NumericUuid.js +377 -0
- package/dist/id-compressor/NumericUuid.js.map +1 -0
- package/dist/id-compressor/index.d.ts +12 -0
- package/dist/id-compressor/index.d.ts.map +1 -0
- package/dist/id-compressor/index.js +26 -0
- package/dist/id-compressor/index.js.map +1 -0
- package/dist/id-compressor/persisted-types/0.0.1.d.ts +156 -0
- package/dist/id-compressor/persisted-types/0.0.1.d.ts.map +1 -0
- package/dist/id-compressor/persisted-types/0.0.1.js +7 -0
- package/dist/id-compressor/persisted-types/0.0.1.js.map +1 -0
- package/dist/id-compressor/persisted-types/index.d.ts +6 -0
- package/dist/id-compressor/persisted-types/index.d.ts.map +1 -0
- package/dist/id-compressor/persisted-types/index.js +18 -0
- package/dist/id-compressor/persisted-types/index.js.map +1 -0
- package/dist/index.d.ts +29 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +50 -35
- package/dist/index.js.map +1 -1
- package/dist/persisted-types/0.0.2.d.ts +385 -0
- package/dist/persisted-types/0.0.2.d.ts.map +1 -0
- package/dist/persisted-types/0.0.2.js +113 -0
- package/dist/persisted-types/0.0.2.js.map +1 -0
- package/dist/persisted-types/0.1.1.d.ts +314 -0
- package/dist/persisted-types/0.1.1.d.ts.map +1 -0
- package/dist/persisted-types/0.1.1.js +153 -0
- package/dist/persisted-types/0.1.1.js.map +1 -0
- package/dist/persisted-types/index.d.ts +7 -0
- package/dist/persisted-types/index.d.ts.map +1 -0
- package/dist/persisted-types/index.js +20 -0
- package/dist/persisted-types/index.js.map +1 -0
- package/docs/0-1-1-Compression.md +228 -0
- package/docs/Breaking-Change-Migration.md +52 -0
- package/docs/Compression.md +2 -2
- package/docs/Telemetry.md +43 -0
- package/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 +1069 -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 +36 -0
- package/lib/TreeCompressor.d.ts.map +1 -0
- package/lib/TreeCompressor.js +133 -0
- package/lib/TreeCompressor.js.map +1 -0
- package/lib/TreeNodeHandle.d.ts +12 -18
- package/lib/TreeNodeHandle.d.ts.map +1 -1
- package/lib/TreeNodeHandle.js +14 -24
- package/lib/TreeNodeHandle.js.map +1 -1
- package/lib/TreeView.d.ts +166 -0
- package/lib/TreeView.d.ts.map +1 -0
- package/lib/TreeView.js +214 -0
- package/lib/TreeView.js.map +1 -0
- package/lib/TreeViewUtilities.d.ts +21 -0
- package/lib/TreeViewUtilities.d.ts.map +1 -0
- package/lib/TreeViewUtilities.js +71 -0
- package/lib/TreeViewUtilities.js.map +1 -0
- package/lib/{default-edits/UndoRedoHandler.d.ts → UndoRedoHandler.d.ts} +2 -2
- package/lib/UndoRedoHandler.d.ts.map +1 -0
- package/lib/{default-edits/UndoRedoHandler.js → UndoRedoHandler.js} +3 -7
- package/lib/UndoRedoHandler.js.map +1 -0
- package/lib/id-compressor/AppendOnlySortedMap.d.ts +127 -0
- package/lib/id-compressor/AppendOnlySortedMap.d.ts.map +1 -0
- package/lib/id-compressor/AppendOnlySortedMap.js +278 -0
- package/lib/id-compressor/AppendOnlySortedMap.js.map +1 -0
- package/lib/id-compressor/IdCompressor.d.ts +389 -0
- package/lib/id-compressor/IdCompressor.d.ts.map +1 -0
- package/lib/id-compressor/IdCompressor.js +1343 -0
- package/lib/id-compressor/IdCompressor.js.map +1 -0
- package/lib/id-compressor/IdRange.d.ts +11 -0
- package/lib/id-compressor/IdRange.d.ts.map +1 -0
- package/lib/id-compressor/IdRange.js +25 -0
- package/lib/id-compressor/IdRange.js.map +1 -0
- package/lib/id-compressor/NumericUuid.d.ts +63 -0
- package/lib/id-compressor/NumericUuid.d.ts.map +1 -0
- package/lib/id-compressor/NumericUuid.js +365 -0
- package/lib/id-compressor/NumericUuid.js.map +1 -0
- package/lib/id-compressor/index.d.ts +12 -0
- package/lib/id-compressor/index.d.ts.map +1 -0
- package/lib/id-compressor/index.js +12 -0
- package/lib/id-compressor/index.js.map +1 -0
- package/lib/id-compressor/persisted-types/0.0.1.d.ts +156 -0
- package/lib/id-compressor/persisted-types/0.0.1.d.ts.map +1 -0
- package/lib/{test/Snapshot.tests.d.ts → id-compressor/persisted-types/0.0.1.js} +1 -1
- package/lib/id-compressor/persisted-types/0.0.1.js.map +1 -0
- package/lib/id-compressor/persisted-types/index.d.ts +6 -0
- package/lib/id-compressor/persisted-types/index.d.ts.map +1 -0
- package/lib/id-compressor/persisted-types/index.js +6 -0
- package/lib/id-compressor/persisted-types/index.js.map +1 -0
- package/lib/index.d.ts +29 -9
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +23 -6
- package/lib/index.js.map +1 -1
- package/lib/persisted-types/0.0.2.d.ts +385 -0
- package/lib/persisted-types/0.0.2.d.ts.map +1 -0
- package/lib/persisted-types/0.0.2.js +110 -0
- package/lib/persisted-types/0.0.2.js.map +1 -0
- package/lib/persisted-types/0.1.1.d.ts +314 -0
- package/lib/persisted-types/0.1.1.d.ts.map +1 -0
- package/lib/persisted-types/0.1.1.js +150 -0
- package/lib/persisted-types/0.1.1.js.map +1 -0
- package/lib/persisted-types/index.d.ts +7 -0
- package/lib/persisted-types/index.d.ts.map +1 -0
- package/lib/persisted-types/index.js +8 -0
- package/lib/persisted-types/index.js.map +1 -0
- package/lib/test/AppendOnlySortedMap.tests.d.ts +6 -0
- package/lib/test/AppendOnlySortedMap.tests.d.ts.map +1 -0
- package/lib/test/AppendOnlySortedMap.tests.js +169 -0
- package/lib/test/AppendOnlySortedMap.tests.js.map +1 -0
- package/lib/test/{SnapshotUtilities.tests.d.ts → ChangeCompression.tests.d.ts} +1 -1
- package/lib/test/ChangeCompression.tests.d.ts.map +1 -0
- package/lib/test/ChangeCompression.tests.js +145 -0
- package/lib/test/ChangeCompression.tests.js.map +1 -0
- package/lib/test/Checkout.tests.d.ts +2 -3
- package/lib/test/Checkout.tests.d.ts.map +1 -1
- package/lib/test/Checkout.tests.js +126 -69
- package/lib/test/Checkout.tests.js.map +1 -1
- package/lib/test/Common.tests.js +60 -2
- package/lib/test/Common.tests.js.map +1 -1
- package/lib/test/{BasicCheckout.tests.d.ts → EagerCheckout.tests.d.ts} +1 -1
- package/lib/test/EagerCheckout.tests.d.ts.map +1 -0
- package/lib/test/EagerCheckout.tests.js +20 -0
- package/lib/test/EagerCheckout.tests.js.map +1 -0
- package/lib/test/Edit.tests.js +22 -14
- package/lib/test/Edit.tests.js.map +1 -1
- package/lib/test/{Anchors.glassBox.tests.d.ts → EditLog.perf.tests.d.ts} +1 -1
- package/lib/test/EditLog.perf.tests.d.ts.map +1 -0
- package/lib/test/EditLog.perf.tests.js +30 -0
- package/lib/test/EditLog.perf.tests.js.map +1 -0
- package/lib/test/EditLog.tests.js +10 -6
- package/lib/test/EditLog.tests.js.map +1 -1
- package/lib/test/EditUtilities.tests.d.ts +6 -0
- package/lib/test/EditUtilities.tests.d.ts.map +1 -0
- package/lib/test/EditUtilities.tests.js +503 -0
- package/lib/test/EditUtilities.tests.js.map +1 -0
- package/lib/test/Forest.perf.tests.d.ts +6 -0
- package/lib/test/Forest.perf.tests.d.ts.map +1 -0
- package/lib/test/Forest.perf.tests.js +133 -0
- package/lib/test/Forest.perf.tests.js.map +1 -0
- package/lib/test/Forest.tests.js +54 -27
- package/lib/test/Forest.tests.js.map +1 -1
- package/lib/test/GenericTransaction.tests.js +12 -3
- package/lib/test/GenericTransaction.tests.js.map +1 -1
- package/lib/test/HistoryEditFactory.tests.d.ts +6 -0
- package/lib/test/HistoryEditFactory.tests.d.ts.map +1 -0
- package/lib/test/HistoryEditFactory.tests.js +90 -0
- package/lib/test/HistoryEditFactory.tests.js.map +1 -0
- package/lib/test/IdCompressor.perf.tests.d.ts +6 -0
- package/lib/test/IdCompressor.perf.tests.d.ts.map +1 -0
- package/lib/test/IdCompressor.perf.tests.js +304 -0
- package/lib/test/IdCompressor.perf.tests.js.map +1 -0
- package/lib/test/IdCompressor.tests.d.ts +6 -0
- package/lib/test/IdCompressor.tests.d.ts.map +1 -0
- package/lib/test/IdCompressor.tests.js +1075 -0
- package/lib/test/IdCompressor.tests.js.map +1 -0
- package/lib/test/IdConversion.tests.d.ts +6 -0
- package/lib/test/IdConversion.tests.d.ts.map +1 -0
- package/lib/test/IdConversion.tests.js +36 -0
- package/lib/test/IdConversion.tests.js.map +1 -0
- package/lib/test/LazyCheckout.tests.d.ts +6 -0
- package/lib/test/LazyCheckout.tests.d.ts.map +1 -0
- package/lib/test/LazyCheckout.tests.js +22 -0
- package/lib/test/LazyCheckout.tests.js.map +1 -0
- package/lib/test/LogViewer.tests.js +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 +176 -0
- package/lib/test/TreeView.tests.js.map +1 -0
- package/lib/test/UndoRedoHandler.tests.js +2 -2
- package/lib/test/UndoRedoHandler.tests.js.map +1 -1
- package/lib/test/Virtualization.tests.js +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 +217 -0
- package/lib/test/fuzz/SharedTreeFuzzTests.js.map +1 -0
- package/lib/test/fuzz/Types.d.ts +133 -0
- package/lib/test/fuzz/Types.d.ts.map +1 -0
- package/lib/test/{GenericTransactionWithAnchors.tests.d.ts → fuzz/Types.js} +2 -2
- package/lib/test/fuzz/Types.js.map +1 -0
- package/lib/test/utilities/IdCompressorTestUtilities.d.ts +180 -0
- package/lib/test/utilities/IdCompressorTestUtilities.d.ts.map +1 -0
- package/lib/test/utilities/IdCompressorTestUtilities.js +528 -0
- package/lib/test/utilities/IdCompressorTestUtilities.js.map +1 -0
- package/lib/test/utilities/MockTransaction.d.ts +26 -7
- package/lib/test/utilities/MockTransaction.d.ts.map +1 -1
- package/lib/test/utilities/MockTransaction.js +40 -11
- package/lib/test/utilities/MockTransaction.js.map +1 -1
- package/lib/test/utilities/PendingLocalStateTests.d.ts +12 -0
- package/lib/test/utilities/PendingLocalStateTests.d.ts.map +1 -0
- package/lib/test/utilities/PendingLocalStateTests.js +105 -0
- package/lib/test/utilities/PendingLocalStateTests.js.map +1 -0
- package/lib/test/utilities/SharedTreeTests.d.ts +3 -4
- package/lib/test/utilities/SharedTreeTests.d.ts.map +1 -1
- package/lib/test/utilities/SharedTreeTests.js +696 -439
- package/lib/test/utilities/SharedTreeTests.js.map +1 -1
- package/lib/test/utilities/SharedTreeVersioningTests.d.ts +11 -0
- package/lib/test/utilities/SharedTreeVersioningTests.d.ts.map +1 -0
- package/lib/test/utilities/SharedTreeVersioningTests.js +370 -0
- package/lib/test/utilities/SharedTreeVersioningTests.js.map +1 -0
- package/lib/test/utilities/SummaryLoadPerfTests.d.ts +10 -0
- package/lib/test/utilities/SummaryLoadPerfTests.d.ts.map +1 -0
- package/lib/test/utilities/SummaryLoadPerfTests.js +102 -0
- package/lib/test/utilities/SummaryLoadPerfTests.js.map +1 -0
- package/lib/test/utilities/SummarySizeTests.d.ts +11 -0
- package/lib/test/utilities/SummarySizeTests.d.ts.map +1 -0
- package/lib/test/utilities/SummarySizeTests.js +158 -0
- package/lib/test/utilities/SummarySizeTests.js.map +1 -0
- package/lib/test/utilities/TestCommon.d.ts +9 -0
- package/lib/test/utilities/TestCommon.d.ts.map +1 -0
- package/lib/test/utilities/TestCommon.js +13 -0
- package/lib/test/utilities/TestCommon.js.map +1 -0
- package/lib/test/utilities/TestNode.d.ts +140 -0
- package/lib/test/utilities/TestNode.d.ts.map +1 -0
- package/lib/test/utilities/TestNode.js +292 -0
- package/lib/test/utilities/TestNode.js.map +1 -0
- package/lib/test/utilities/TestUtilities.d.ts +84 -70
- package/lib/test/utilities/TestUtilities.d.ts.map +1 -1
- package/lib/test/utilities/TestUtilities.js +218 -143
- package/lib/test/utilities/TestUtilities.js.map +1 -1
- package/lib/test/utilities/UndoRedoTests.d.ts +4 -5
- package/lib/test/utilities/UndoRedoTests.d.ts.map +1 -1
- package/lib/test/utilities/UndoRedoTests.js +138 -149
- package/lib/test/utilities/UndoRedoTests.js.map +1 -1
- package/package.json +22 -17
- package/src/ChangeCompression.ts +159 -0
- package/src/{default-edits/PersistedTypes.ts → ChangeTypes.ts} +62 -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 +1458 -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 +213 -0
- package/src/TreeNodeHandle.ts +19 -32
- package/src/TreeView.ts +322 -0
- package/src/TreeViewUtilities.ts +77 -0
- package/src/{default-edits/UndoRedoHandler.ts → UndoRedoHandler.ts} +8 -13
- package/src/id-compressor/AppendOnlySortedMap.ts +325 -0
- package/src/id-compressor/IdCompressor.md +3 -0
- package/src/id-compressor/IdCompressor.ts +1848 -0
- package/src/id-compressor/IdRange.ts +33 -0
- package/src/id-compressor/NumericUuid.ts +414 -0
- package/src/id-compressor/index.ts +13 -0
- package/src/id-compressor/persisted-types/0.0.1.ts +179 -0
- package/src/id-compressor/persisted-types/README.md +3 -0
- package/src/id-compressor/persisted-types/index.ts +6 -0
- package/src/index.ts +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,559 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
7
|
+
import { compareArrays, copyPropertyIfDefined, fail, Mutable } from './Common';
|
|
8
|
+
import { Definition, DetachedSequenceId, EditId, NodeId, StableNodeId, TraitLabel } from './Identifiers';
|
|
9
|
+
import { NodeIdContext, NodeIdConverter } from './NodeIdUtilities';
|
|
10
|
+
import {
|
|
11
|
+
BuildNodeInternal,
|
|
12
|
+
ChangeInternal,
|
|
13
|
+
ChangeNode,
|
|
14
|
+
ChangeNode_0_0_2,
|
|
15
|
+
Edit,
|
|
16
|
+
HasTraits,
|
|
17
|
+
NodeData,
|
|
18
|
+
Side,
|
|
19
|
+
StablePlaceInternal,
|
|
20
|
+
StableRangeInternal,
|
|
21
|
+
TraitLocationInternal,
|
|
22
|
+
TraitMap,
|
|
23
|
+
TreeNode,
|
|
24
|
+
TreeNodeSequence,
|
|
25
|
+
} from './persisted-types';
|
|
26
|
+
import { TraitLocation, TreeView } from './TreeView';
|
|
27
|
+
import { BuildNode, BuildTreeNode, Change, HasVariadicTraits, StablePlace, StableRange } from './ChangeTypes';
|
|
28
|
+
import { placeFromStablePlace, rangeFromStableRange } from './TreeViewUtilities';
|
|
29
|
+
import { iterateChildren, TransactionView } from './RevisionView';
|
|
30
|
+
import { getChangeNode_0_0_2FromView } from './SerializationUtilities';
|
|
31
|
+
import { comparePayloads } from './PayloadUtilities';
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Functions for constructing and comparing Edits.
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Returns true if the provided Edits have equivalent properties.
|
|
39
|
+
*/
|
|
40
|
+
export function compareEdits(editIdA: EditId, editIdB: EditId): boolean {
|
|
41
|
+
// TODO #45414: We should also be deep comparing the list of changes in the edit. This is not straightforward.
|
|
42
|
+
// We can use our edit validation code when we write it since it will need to do deep walks of the changes.
|
|
43
|
+
return editIdA === editIdB;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Generates a new edit object from the supplied changes.
|
|
48
|
+
*/
|
|
49
|
+
export function newEdit<TEdit>(changes: readonly TEdit[]): Edit<TEdit> {
|
|
50
|
+
return { id: newEditId(), changes };
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Generates a new edit object from the supplied changes.
|
|
55
|
+
*/
|
|
56
|
+
export function newEditId(): EditId {
|
|
57
|
+
return uuidv4() as EditId;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* A node type that does not require its children to be specified
|
|
62
|
+
*/
|
|
63
|
+
export type NoTraits<TChild extends HasVariadicTraits<unknown>> = Omit<TChild, keyof HasVariadicTraits<TChild>>;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Transform an input tree into an isomorphic output tree
|
|
67
|
+
* @param tree - the input tree
|
|
68
|
+
* @param convert - a conversion function that will run on each node in the input tree to produce the output tree.
|
|
69
|
+
*/
|
|
70
|
+
export function convertTreeNodes<TIn extends HasVariadicTraits<TIn>, TOut extends HasTraits<TOut>>(
|
|
71
|
+
root: TIn,
|
|
72
|
+
convert: (node: TIn) => NoTraits<TOut>
|
|
73
|
+
): TOut;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Transform an input tree into an isomorphic output tree
|
|
77
|
+
* @param tree - the input tree
|
|
78
|
+
* @param convert - a conversion function that will run on each (non-placeholder) node in the input tree to produce the output tree.
|
|
79
|
+
* @param isPlaceholder - a predicate which determines if a node is a placeholder
|
|
80
|
+
*/
|
|
81
|
+
export function convertTreeNodes<
|
|
82
|
+
TIn extends HasVariadicTraits<TIn | TPlaceholder>,
|
|
83
|
+
TOut extends HasTraits<TOut | TPlaceholder>,
|
|
84
|
+
TPlaceholder
|
|
85
|
+
>(
|
|
86
|
+
root: TIn | TPlaceholder,
|
|
87
|
+
convert: (node: TIn) => NoTraits<TOut>,
|
|
88
|
+
isPlaceholder: (node: TIn | TPlaceholder) => node is TPlaceholder
|
|
89
|
+
): TOut | TPlaceholder;
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Transform an input tree into an isomorphic output tree
|
|
93
|
+
* @param tree - the input tree
|
|
94
|
+
* @param convert - a conversion function that will run on each (non-placeholder) node in the input tree to produce the output tree.
|
|
95
|
+
* Returning undefined means that conversion for the given node was impossible, at which time the entire tree conversion will be aborted
|
|
96
|
+
* and return undefined.
|
|
97
|
+
* @param isPlaceholder - a predicate which determines if the given node is of type TPlaceholder
|
|
98
|
+
*/
|
|
99
|
+
export function convertTreeNodes<
|
|
100
|
+
TIn extends HasVariadicTraits<TIn | TPlaceholder>,
|
|
101
|
+
TOut extends HasTraits<TOut | TPlaceholder>,
|
|
102
|
+
TPlaceholder
|
|
103
|
+
>(
|
|
104
|
+
root: TIn | TPlaceholder,
|
|
105
|
+
convert: (node: TIn) => NoTraits<TOut>,
|
|
106
|
+
isPlaceholder?: (node: TIn | TPlaceholder) => node is TPlaceholder
|
|
107
|
+
): TOut | TPlaceholder {
|
|
108
|
+
if (isKnownType(root, isPlaceholder)) {
|
|
109
|
+
return root;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const convertedRoot = convert(root) as TOut;
|
|
113
|
+
// `convertedRoot` might be the same as `root`, in which case stash the children of `root` before wiping them from `convertedRoot`
|
|
114
|
+
const rootTraits = (root as unknown as TOut) === convertedRoot ? { traits: root.traits } : root;
|
|
115
|
+
(convertedRoot as Mutable<TOut>).traits = {};
|
|
116
|
+
const pendingNodes: {
|
|
117
|
+
childIterator: Iterator<[TraitLabel, TIn | TPlaceholder]>;
|
|
118
|
+
newNode: Mutable<TOut>;
|
|
119
|
+
}[] = [{ childIterator: iterateChildren(rootTraits)[Symbol.iterator](), newNode: convertedRoot }];
|
|
120
|
+
|
|
121
|
+
while (pendingNodes.length > 0) {
|
|
122
|
+
const { childIterator, newNode } = pendingNodes[pendingNodes.length - 1] ?? fail('Undefined node');
|
|
123
|
+
const { value, done } = childIterator.next();
|
|
124
|
+
if (done === true) {
|
|
125
|
+
pendingNodes.pop();
|
|
126
|
+
} else {
|
|
127
|
+
const [traitLabel, child] = value as [TraitLabel, TIn | TPlaceholder];
|
|
128
|
+
let convertedChild: TOut | TPlaceholder;
|
|
129
|
+
if (!isKnownType(child, isPlaceholder)) {
|
|
130
|
+
convertedChild = convert(child) as TOut;
|
|
131
|
+
if (child.traits !== undefined) {
|
|
132
|
+
const childTraits =
|
|
133
|
+
(child as unknown as TOut) === convertedChild ? { traits: child.traits } : child;
|
|
134
|
+
pendingNodes.push({
|
|
135
|
+
childIterator: iterateChildren(childTraits)[Symbol.iterator](),
|
|
136
|
+
newNode: convertedChild,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
(convertedChild as Mutable<TOut>).traits = {};
|
|
140
|
+
} else {
|
|
141
|
+
convertedChild = child;
|
|
142
|
+
}
|
|
143
|
+
const newTraits = newNode.traits as Mutable<TraitMap<TOut | TPlaceholder>>;
|
|
144
|
+
let newTrait = newTraits[traitLabel];
|
|
145
|
+
if (newTrait === undefined) {
|
|
146
|
+
newTrait = [];
|
|
147
|
+
newTraits[traitLabel] = newTrait;
|
|
148
|
+
}
|
|
149
|
+
(newTrait as (TOut | TPlaceholder)[]).push(convertedChild);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return convertedRoot;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Visits an input tree in a depth-first pre-order traversal.
|
|
158
|
+
* @param tree - the input tree
|
|
159
|
+
* @param visitor - callback invoked for each node in the tree.
|
|
160
|
+
*/
|
|
161
|
+
export function walkTree<TIn extends HasVariadicTraits<TIn>>(tree: TIn, visitor: (node: TIn) => void): void;
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Visits an input tree containing placeholders in a depth-first pre-order traversal.
|
|
165
|
+
* @param tree - the input tree
|
|
166
|
+
* @param visitor - callback invoked for each node in the tree. Must return true if the given node is a TPlaceholder.
|
|
167
|
+
*/
|
|
168
|
+
export function walkTree<TIn extends HasVariadicTraits<TIn | TPlaceholder>, TPlaceholder = never>(
|
|
169
|
+
tree: TIn | TPlaceholder,
|
|
170
|
+
visitors:
|
|
171
|
+
| ((node: TIn) => void)
|
|
172
|
+
| { nodeVisitor?: (node: TIn) => void; placeholderVisitor?: (placeholder: TPlaceholder) => void },
|
|
173
|
+
isPlaceholder: (node: TIn | TPlaceholder) => node is TPlaceholder
|
|
174
|
+
): void;
|
|
175
|
+
|
|
176
|
+
export function walkTree<TIn extends HasVariadicTraits<TIn | TPlaceholder>, TPlaceholder = never>(
|
|
177
|
+
tree: TIn | TPlaceholder,
|
|
178
|
+
visitors:
|
|
179
|
+
| ((node: TIn) => void)
|
|
180
|
+
| { nodeVisitor?: (node: TIn) => void; placeholderVisitor?: (placeholder: TPlaceholder) => void },
|
|
181
|
+
isPlaceholder?: (node: TIn | TPlaceholder) => node is TPlaceholder
|
|
182
|
+
): void {
|
|
183
|
+
const nodeVisitor = typeof visitors === 'function' ? visitors : visitors.nodeVisitor;
|
|
184
|
+
const placeholderVisitor = typeof visitors === 'object' ? visitors.placeholderVisitor : undefined;
|
|
185
|
+
if (isKnownType(tree, isPlaceholder)) {
|
|
186
|
+
placeholderVisitor?.(tree);
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
nodeVisitor?.(tree);
|
|
190
|
+
|
|
191
|
+
const childIterators: Iterator<[TraitLabel, TIn | TPlaceholder]>[] = [iterateChildren(tree)[Symbol.iterator]()];
|
|
192
|
+
|
|
193
|
+
while (childIterators.length > 0) {
|
|
194
|
+
const childIterator = childIterators[childIterators.length - 1] ?? fail('Undefined node');
|
|
195
|
+
const { value, done } = childIterator.next();
|
|
196
|
+
if (done === true) {
|
|
197
|
+
childIterators.pop();
|
|
198
|
+
} else {
|
|
199
|
+
const [_, child] = value as [TraitLabel, TIn | TPlaceholder];
|
|
200
|
+
if (isKnownType(child, isPlaceholder)) {
|
|
201
|
+
placeholderVisitor?.(child);
|
|
202
|
+
} else {
|
|
203
|
+
nodeVisitor?.(child);
|
|
204
|
+
childIterators.push(iterateChildren(child)[Symbol.iterator]());
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// Useful for collapsing type checks in `convertTreeNodes` into a single line
|
|
211
|
+
function isKnownType<T, Type extends T>(value: T, isType?: (value: T) => value is Type): value is Type {
|
|
212
|
+
return isType?.(value) ?? false;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Check if two trees are equivalent, meaning they have the same descendants with the same properties.
|
|
217
|
+
*
|
|
218
|
+
* See {@link comparePayloads} for payload comparison semantics.
|
|
219
|
+
*/
|
|
220
|
+
export function deepCompareNodes(
|
|
221
|
+
a: ChangeNode | ChangeNode_0_0_2,
|
|
222
|
+
b: ChangeNode | ChangeNode_0_0_2,
|
|
223
|
+
comparator: (
|
|
224
|
+
a: NodeData<NodeId> | NodeData<StableNodeId>,
|
|
225
|
+
b: NodeData<NodeId> | NodeData<StableNodeId>
|
|
226
|
+
) => boolean = compareNodes
|
|
227
|
+
): boolean {
|
|
228
|
+
if (a === b) {
|
|
229
|
+
return true;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
if (!comparator(a, b)) {
|
|
233
|
+
return false;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
const traitsA = Object.entries(a.traits);
|
|
237
|
+
const traitsB = Object.entries(b.traits);
|
|
238
|
+
|
|
239
|
+
if (traitsA.length !== traitsB.length) {
|
|
240
|
+
return false;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
for (const [traitLabel, childrenA] of traitsA) {
|
|
244
|
+
const childrenB = b.traits[traitLabel];
|
|
245
|
+
|
|
246
|
+
if (childrenA.length !== childrenB.length) {
|
|
247
|
+
return false;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
const traitsEqual = compareArrays<ChangeNode | ChangeNode_0_0_2>(childrenA, childrenB, (childA, childB) => {
|
|
251
|
+
if (typeof childA === 'number' || typeof childB === 'number') {
|
|
252
|
+
// Check if children are DetachedSequenceIds
|
|
253
|
+
return childA === childB;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
return deepCompareNodes(childA, childB);
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
if (!traitsEqual) {
|
|
260
|
+
return false;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
return true;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/*
|
|
268
|
+
* Returns true if two nodes have equivalent data and payloads, otherwise false.
|
|
269
|
+
* Does not compare children
|
|
270
|
+
* @param nodes - two or more nodes to compare
|
|
271
|
+
*/
|
|
272
|
+
export function compareNodes(
|
|
273
|
+
a: NodeData<NodeId> | NodeData<StableNodeId>,
|
|
274
|
+
b: NodeData<NodeId> | NodeData<StableNodeId>
|
|
275
|
+
): boolean {
|
|
276
|
+
if (a === b) {
|
|
277
|
+
return true;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
if (a.identifier !== b.identifier) {
|
|
281
|
+
return false;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
if (a.definition !== b.definition) {
|
|
285
|
+
return false;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
if (!comparePayloads(a.payload, b.payload)) {
|
|
289
|
+
return false;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
return true;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* Compare two views such that semantically equivalent node IDs are considered equal.
|
|
297
|
+
*/
|
|
298
|
+
export function areRevisionViewsSemanticallyEqual(
|
|
299
|
+
treeViewA: TreeView,
|
|
300
|
+
idConverterA: NodeIdConverter,
|
|
301
|
+
treeViewB: TreeView,
|
|
302
|
+
idConverterB: NodeIdConverter
|
|
303
|
+
): boolean {
|
|
304
|
+
const treeA = getChangeNode_0_0_2FromView(treeViewA, idConverterA);
|
|
305
|
+
const treeB = getChangeNode_0_0_2FromView(treeViewB, idConverterB);
|
|
306
|
+
if (!deepCompareNodes(treeA, treeB)) {
|
|
307
|
+
return false;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
return true;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
* Create a sequence of changes that resets the contents of `trait`.
|
|
315
|
+
* @public
|
|
316
|
+
*/
|
|
317
|
+
export function setTrait(trait: TraitLocation, nodes: BuildNode | TreeNodeSequence<BuildNode>): Change[] {
|
|
318
|
+
const id = 0 as DetachedSequenceId;
|
|
319
|
+
const traitContents = StableRange.all(trait);
|
|
320
|
+
return [Change.detach(traitContents), Change.build(nodes, id), Change.insert(id, traitContents.start)];
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Create a sequence of changes that resets the contents of `trait`.
|
|
325
|
+
* @internal
|
|
326
|
+
*/
|
|
327
|
+
export function setTraitInternal(
|
|
328
|
+
trait: TraitLocationInternal,
|
|
329
|
+
nodes: TreeNodeSequence<BuildNodeInternal>
|
|
330
|
+
): ChangeInternal[] {
|
|
331
|
+
const id = 0 as DetachedSequenceId;
|
|
332
|
+
const traitContents = StableRangeInternal.all(trait);
|
|
333
|
+
return [
|
|
334
|
+
ChangeInternal.detach(traitContents),
|
|
335
|
+
ChangeInternal.build(nodes, id),
|
|
336
|
+
ChangeInternal.insert(id, traitContents.start),
|
|
337
|
+
];
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
/**
|
|
341
|
+
* Check the validity of the given `StablePlace`
|
|
342
|
+
* @param view - the `TreeView` within which to validate the given place
|
|
343
|
+
* @param place - the `StablePlace` to check
|
|
344
|
+
*/
|
|
345
|
+
export function validateStablePlace(
|
|
346
|
+
view: TreeView,
|
|
347
|
+
place: StablePlaceInternal
|
|
348
|
+
):
|
|
349
|
+
| {
|
|
350
|
+
result: PlaceValidationResult.Valid;
|
|
351
|
+
side: Side;
|
|
352
|
+
referenceSibling: NodeId;
|
|
353
|
+
referenceTrait?: never;
|
|
354
|
+
}
|
|
355
|
+
| {
|
|
356
|
+
result: PlaceValidationResult.Valid;
|
|
357
|
+
side: Side;
|
|
358
|
+
referenceSibling?: never;
|
|
359
|
+
referenceTrait: TraitLocation;
|
|
360
|
+
}
|
|
361
|
+
| { result: Exclude<PlaceValidationResult, PlaceValidationResult.Valid> } {
|
|
362
|
+
/* A StablePlace is valid if the following conditions are met:
|
|
363
|
+
* 1. A sibling or trait is defined.
|
|
364
|
+
* 2. If a sibling is defined, both it and its parent exist in the `TreeView`.
|
|
365
|
+
* 3. If a trait is defined, its parent node exists in the `TreeView`.
|
|
366
|
+
* 4. If a sibling and a trait location are both specified, the sibling needs to actually be in that trait.
|
|
367
|
+
*/
|
|
368
|
+
const { referenceSibling, referenceTrait } = place;
|
|
369
|
+
|
|
370
|
+
// A well-formed `StablePlace` specifies exactly one of `referenceSibling` and `referenceTrait`.
|
|
371
|
+
if (
|
|
372
|
+
(referenceSibling === undefined && referenceTrait === undefined) ||
|
|
373
|
+
(referenceSibling !== undefined && referenceTrait !== undefined)
|
|
374
|
+
) {
|
|
375
|
+
return { result: PlaceValidationResult.Malformed };
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
if (referenceSibling !== undefined) {
|
|
379
|
+
if (!view.hasNode(referenceSibling)) {
|
|
380
|
+
return { result: PlaceValidationResult.MissingSibling };
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
// Detached nodes and the root are invalid anchors.
|
|
384
|
+
if (view.tryGetTraitLabel(referenceSibling) === undefined) {
|
|
385
|
+
return { result: PlaceValidationResult.SiblingIsRootOrDetached };
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
return { result: PlaceValidationResult.Valid, side: place.side, referenceSibling };
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
if (referenceTrait === undefined) {
|
|
392
|
+
return { result: PlaceValidationResult.MissingParent };
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
if (!view.hasNode(referenceTrait.parent)) {
|
|
396
|
+
return { result: PlaceValidationResult.MissingParent };
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
return { result: PlaceValidationResult.Valid, side: place.side, referenceTrait };
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
/**
|
|
403
|
+
* The result of validating a place.
|
|
404
|
+
*/
|
|
405
|
+
export enum PlaceValidationResult {
|
|
406
|
+
Valid = 'Valid',
|
|
407
|
+
Malformed = 'Malformed',
|
|
408
|
+
SiblingIsRootOrDetached = 'SiblingIsRootOrDetached',
|
|
409
|
+
MissingSibling = 'MissingSibling',
|
|
410
|
+
MissingParent = 'MissingParent',
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
/**
|
|
414
|
+
* The result of validating a bad place.
|
|
415
|
+
*/
|
|
416
|
+
export type BadPlaceValidationResult = Exclude<PlaceValidationResult, PlaceValidationResult.Valid>;
|
|
417
|
+
|
|
418
|
+
/**
|
|
419
|
+
* Check the validity of the given `StableRange`
|
|
420
|
+
* @param view - the `TreeView` within which to validate the given range
|
|
421
|
+
* @param range - the `StableRange` to check
|
|
422
|
+
*/
|
|
423
|
+
export function validateStableRange(
|
|
424
|
+
view: TreeView,
|
|
425
|
+
range: StableRangeInternal
|
|
426
|
+
):
|
|
427
|
+
| { result: RangeValidationResultKind.Valid; start: StablePlaceInternal; end: StablePlaceInternal }
|
|
428
|
+
| { result: Exclude<RangeValidationResult, RangeValidationResultKind.Valid> } {
|
|
429
|
+
/* A StableRange is valid if the following conditions are met:
|
|
430
|
+
* 1. Its start and end places are valid.
|
|
431
|
+
* 2. Its start and end places are within the same trait.
|
|
432
|
+
* 3. Its start place is before its end place.
|
|
433
|
+
*/
|
|
434
|
+
const { start, end } = range;
|
|
435
|
+
|
|
436
|
+
const validatedStart = validateStablePlace(view, start);
|
|
437
|
+
if (validatedStart.result !== PlaceValidationResult.Valid) {
|
|
438
|
+
return {
|
|
439
|
+
result: { kind: RangeValidationResultKind.BadPlace, place: start, placeFailure: validatedStart.result },
|
|
440
|
+
};
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
const validatedEnd = validateStablePlace(view, end);
|
|
444
|
+
if (validatedEnd.result !== PlaceValidationResult.Valid) {
|
|
445
|
+
return { result: { kind: RangeValidationResultKind.BadPlace, place: end, placeFailure: validatedEnd.result } };
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
const startTraitLocation = validatedStart.referenceTrait || view.getTraitLocation(validatedStart.referenceSibling);
|
|
449
|
+
const endTraitLocation = validatedEnd.referenceTrait || view.getTraitLocation(validatedEnd.referenceSibling);
|
|
450
|
+
if (!compareTraits(startTraitLocation, endTraitLocation)) {
|
|
451
|
+
return { result: RangeValidationResultKind.PlacesInDifferentTraits };
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
const { start: startPlace, end: endPlace } = rangeFromStableRange(view, {
|
|
455
|
+
start: validatedStart,
|
|
456
|
+
end: validatedEnd,
|
|
457
|
+
});
|
|
458
|
+
const startIndex = view.findIndexWithinTrait(startPlace);
|
|
459
|
+
const endIndex = view.findIndexWithinTrait(endPlace);
|
|
460
|
+
|
|
461
|
+
if (startIndex > endIndex) {
|
|
462
|
+
return { result: RangeValidationResultKind.Inverted };
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
return { result: RangeValidationResultKind.Valid, start: validatedStart, end: validatedEnd };
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
/**
|
|
469
|
+
* The kinds of result of validating a range.
|
|
470
|
+
*/
|
|
471
|
+
export enum RangeValidationResultKind {
|
|
472
|
+
Valid = 'Valid',
|
|
473
|
+
BadPlace = 'BadPlace',
|
|
474
|
+
PlacesInDifferentTraits = 'PlacesInDifferentTraits',
|
|
475
|
+
Inverted = 'Inverted',
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
/**
|
|
479
|
+
* The result of validating a range.
|
|
480
|
+
*/
|
|
481
|
+
export type RangeValidationResult =
|
|
482
|
+
| RangeValidationResultKind.Valid
|
|
483
|
+
| RangeValidationResultKind.PlacesInDifferentTraits
|
|
484
|
+
| RangeValidationResultKind.Inverted
|
|
485
|
+
| {
|
|
486
|
+
kind: RangeValidationResultKind.BadPlace;
|
|
487
|
+
place: StablePlaceInternal;
|
|
488
|
+
placeFailure: BadPlaceValidationResult;
|
|
489
|
+
};
|
|
490
|
+
|
|
491
|
+
/**
|
|
492
|
+
* The result of validating a bad range.
|
|
493
|
+
*/
|
|
494
|
+
export type BadRangeValidationResult = Exclude<RangeValidationResult, RangeValidationResultKind.Valid>;
|
|
495
|
+
|
|
496
|
+
/**
|
|
497
|
+
* Check if two TraitLocations are equal.
|
|
498
|
+
*/
|
|
499
|
+
function compareTraits(traitA: TraitLocation, traitB: TraitLocation): boolean {
|
|
500
|
+
if (traitA.label !== traitB.label || traitA.parent !== traitB.parent) {
|
|
501
|
+
return false;
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
return true;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
/**
|
|
508
|
+
* Parents a set of nodes in a specified location within a trait.
|
|
509
|
+
* @param nodesToInsert - the nodes to parent in the specified place. The nodes must already be present in the TreeView.
|
|
510
|
+
* @param placeToInsert - the location to insert the nodes.
|
|
511
|
+
*/
|
|
512
|
+
export function insertIntoTrait(
|
|
513
|
+
view: TransactionView,
|
|
514
|
+
nodesToInsert: readonly NodeId[],
|
|
515
|
+
placeToInsert: StablePlace
|
|
516
|
+
): TransactionView {
|
|
517
|
+
return view.attachRange(nodesToInsert, placeFromStablePlace(view, placeToInsert));
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
/**
|
|
521
|
+
* Detaches a range of nodes from their parent. The detached nodes remain in the TreeView.
|
|
522
|
+
* @param rangeToDetach - the range of nodes to detach
|
|
523
|
+
*/
|
|
524
|
+
export function detachRange(
|
|
525
|
+
view: TransactionView,
|
|
526
|
+
rangeToDetach: StableRange
|
|
527
|
+
): { view: TransactionView; detached: readonly NodeId[] } {
|
|
528
|
+
return view.detachRange(rangeFromStableRange(view, rangeToDetach));
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
/**
|
|
532
|
+
* Deeply clone the given StablePlace
|
|
533
|
+
*/
|
|
534
|
+
export function deepCloneStablePlace(place: StablePlace): StablePlace {
|
|
535
|
+
const clone: StablePlace = { side: place.side };
|
|
536
|
+
copyPropertyIfDefined(place, clone, 'referenceSibling');
|
|
537
|
+
copyPropertyIfDefined(place, clone, 'referenceTrait');
|
|
538
|
+
return clone;
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
/**
|
|
542
|
+
* Deeply clone the given StableRange
|
|
543
|
+
*/
|
|
544
|
+
export function deepCloneStableRange(range: StableRange): StableRange {
|
|
545
|
+
return { start: deepCloneStablePlace(range.start), end: deepCloneStablePlace(range.end) };
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
/** Convert a node used in a Build change into its internal representation */
|
|
549
|
+
export function internalizeBuildNode(
|
|
550
|
+
nodeData: BuildTreeNode,
|
|
551
|
+
nodeIdContext: NodeIdContext
|
|
552
|
+
): Omit<TreeNode<BuildNodeInternal, NodeId>, 'traits'> {
|
|
553
|
+
const output = {
|
|
554
|
+
definition: nodeData.definition as Definition,
|
|
555
|
+
identifier: nodeData.identifier ?? nodeIdContext.generateNodeId(),
|
|
556
|
+
};
|
|
557
|
+
copyPropertyIfDefined(nodeData, output, 'payload');
|
|
558
|
+
return output;
|
|
559
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* An event emitted by a `SharedTree` to indicate a state change. See {@link ISharedTreeEvents} for event argument information.
|
|
8
|
+
* @public
|
|
9
|
+
*/
|
|
10
|
+
export enum SharedTreeEvent {
|
|
11
|
+
/**
|
|
12
|
+
* An edit has been committed to the log.
|
|
13
|
+
* This happens when either:
|
|
14
|
+
* 1. A locally generated edit is added to the log.
|
|
15
|
+
* 2. A remotely generated edit is added to the log.
|
|
16
|
+
* Note that, for locally generated edits, this event will not be emitted again when that edit is sequenced.
|
|
17
|
+
* Passed the EditId of the committed edit, i.e. supports callbacks of type {@link EditCommittedHandler}.
|
|
18
|
+
*/
|
|
19
|
+
EditCommitted = 'committedEdit',
|
|
20
|
+
/**
|
|
21
|
+
* A sequenced edit has been applied.
|
|
22
|
+
* This includes local edits though the callback is only invoked once the sequenced version is received.
|
|
23
|
+
* For edits that were local (see {@link SequencedEditAppliedEventArguments.wasLocal}, this callback will only be called once.
|
|
24
|
+
* For non-local edits, it may be called multiple times: the number of calls and when they occur depends on caching and is an
|
|
25
|
+
* implementation detail.
|
|
26
|
+
* Supports callbacks of type {@link SequencedEditAppliedHandler}.
|
|
27
|
+
*/
|
|
28
|
+
SequencedEditApplied = 'sequencedEditApplied',
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* An event emitted by a `SharedTree` for diagnostic purposes.
|
|
33
|
+
* See {@link ISharedTreeEvents} for event argument information.
|
|
34
|
+
*/
|
|
35
|
+
export enum SharedTreeDiagnosticEvent {
|
|
36
|
+
/**
|
|
37
|
+
* A single catch up blob has been uploaded.
|
|
38
|
+
*/
|
|
39
|
+
CatchUpBlobUploaded = 'uploadedCatchUpBlob',
|
|
40
|
+
/**
|
|
41
|
+
* An edit chunk blob has been uploaded. This includes catchup blobs.
|
|
42
|
+
*/
|
|
43
|
+
EditChunkUploaded = 'uploadedEditChunk',
|
|
44
|
+
/**
|
|
45
|
+
* A valid edit (local or remote) has been applied.
|
|
46
|
+
* Passed the EditId of the applied edit.
|
|
47
|
+
* Note that this may be called multiple times, due to concurrent edits causing reordering,
|
|
48
|
+
* and/or due to not caching the output of every edit.
|
|
49
|
+
*/
|
|
50
|
+
AppliedEdit = 'appliedEdit',
|
|
51
|
+
/**
|
|
52
|
+
* An invalid edit (local or remote) has been dropped.
|
|
53
|
+
* Passed the EditId of the dropped edit.
|
|
54
|
+
* Note that this may be called multiple times, due to concurrent edits causing reordering,
|
|
55
|
+
* and/or due to not caching the output of every edit.
|
|
56
|
+
*/
|
|
57
|
+
DroppedInvalidEdit = 'droppedInvalidEdit',
|
|
58
|
+
/**
|
|
59
|
+
* A malformed edit (local or remote) has been dropped.
|
|
60
|
+
* Passed the EditId of the dropped edit.
|
|
61
|
+
* Note that this may be called multiple times, due to concurrent edits causing reordering,
|
|
62
|
+
* and/or due to not caching the output of every edit.
|
|
63
|
+
*/
|
|
64
|
+
DroppedMalformedEdit = 'droppedMalformedEdit',
|
|
65
|
+
/**
|
|
66
|
+
* A history chunk has been received that does not have a corresponding edit chunk on the edit log.
|
|
67
|
+
*/
|
|
68
|
+
UnexpectedHistoryChunk = 'unexpectedHistoryChunk',
|
|
69
|
+
/**
|
|
70
|
+
* The current write format changed, either because an old summary was loaded or an update op was successfully processed.
|
|
71
|
+
* This event is emitted with the new version as an argument.
|
|
72
|
+
*/
|
|
73
|
+
WriteVersionChanged = 'writeVersionChanged',
|
|
74
|
+
}
|