@fluidframework/container-runtime 2.20.0 → 2.21.0
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/.eslintrc.cjs +36 -6
- package/CHANGELOG.md +38 -0
- package/api-report/container-runtime.legacy.alpha.api.md +31 -31
- package/dist/batchTracker.d.ts +1 -2
- package/dist/batchTracker.d.ts.map +1 -1
- package/dist/batchTracker.js +1 -1
- package/dist/batchTracker.js.map +1 -1
- package/dist/blobManager/blobManager.d.ts.map +1 -1
- package/dist/blobManager/blobManager.js +14 -11
- package/dist/blobManager/blobManager.js.map +1 -1
- package/dist/blobManager/blobManagerSnapSum.d.ts +1 -0
- package/dist/blobManager/blobManagerSnapSum.d.ts.map +1 -1
- package/dist/blobManager/blobManagerSnapSum.js +7 -5
- package/dist/blobManager/blobManagerSnapSum.js.map +1 -1
- package/dist/channelCollection.d.ts.map +1 -1
- package/dist/channelCollection.js +63 -41
- package/dist/channelCollection.js.map +1 -1
- package/dist/connectionTelemetry.d.ts +2 -2
- package/dist/connectionTelemetry.d.ts.map +1 -1
- package/dist/connectionTelemetry.js +4 -4
- package/dist/connectionTelemetry.js.map +1 -1
- package/dist/containerRuntime.d.ts +14 -30
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +264 -194
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStore.js +6 -3
- package/dist/dataStore.js.map +1 -1
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +16 -11
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStoreContexts.d.ts.map +1 -1
- package/dist/dataStoreContexts.js +1 -0
- package/dist/dataStoreContexts.js.map +1 -1
- package/dist/deltaScheduler.d.ts.map +1 -1
- package/dist/deltaScheduler.js +5 -5
- package/dist/deltaScheduler.js.map +1 -1
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/garbageCollection.js +36 -14
- package/dist/gc/garbageCollection.js.map +1 -1
- package/dist/gc/gcConfigs.d.ts.map +1 -1
- package/dist/gc/gcConfigs.js +2 -0
- package/dist/gc/gcConfigs.js.map +1 -1
- package/dist/gc/gcDefinitions.d.ts +8 -0
- package/dist/gc/gcDefinitions.d.ts.map +1 -1
- package/dist/gc/gcDefinitions.js +1 -0
- package/dist/gc/gcDefinitions.js.map +1 -1
- package/dist/gc/gcHelpers.d.ts.map +1 -1
- package/dist/gc/gcHelpers.js +8 -5
- package/dist/gc/gcHelpers.js.map +1 -1
- package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/dist/gc/gcSummaryStateTracker.js +2 -1
- package/dist/gc/gcSummaryStateTracker.js.map +1 -1
- package/dist/gc/gcTelemetry.d.ts.map +1 -1
- package/dist/gc/gcTelemetry.js +29 -15
- package/dist/gc/gcTelemetry.js.map +1 -1
- package/dist/inboundBatchAggregator.js +3 -3
- package/dist/inboundBatchAggregator.js.map +1 -1
- package/dist/layerCompatState.d.ts +19 -0
- package/dist/layerCompatState.d.ts.map +1 -0
- package/dist/layerCompatState.js +64 -0
- package/dist/layerCompatState.js.map +1 -0
- package/dist/messageTypes.d.ts.map +1 -1
- package/dist/messageTypes.js.map +1 -1
- package/dist/opLifecycle/duplicateBatchDetector.js +2 -2
- package/dist/opLifecycle/duplicateBatchDetector.js.map +1 -1
- package/dist/opLifecycle/opCompressor.d.ts +3 -2
- package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opCompressor.js +13 -19
- package/dist/opLifecycle/opCompressor.js.map +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts +3 -0
- package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opDecompressor.js +4 -1
- package/dist/opLifecycle/opDecompressor.js.map +1 -1
- package/dist/opLifecycle/opGroupingManager.d.ts +1 -1
- package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/dist/opLifecycle/opGroupingManager.js +5 -3
- package/dist/opLifecycle/opGroupingManager.js.map +1 -1
- package/dist/opLifecycle/opSplitter.d.ts +13 -10
- package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
- package/dist/opLifecycle/opSplitter.js +14 -11
- package/dist/opLifecycle/opSplitter.js.map +1 -1
- package/dist/opLifecycle/outbox.d.ts +3 -3
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.js +11 -15
- package/dist/opLifecycle/outbox.js.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.js +3 -1
- package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/pendingStateManager.d.ts +3 -4
- package/dist/pendingStateManager.d.ts.map +1 -1
- package/dist/pendingStateManager.js +11 -10
- package/dist/pendingStateManager.js.map +1 -1
- package/dist/summary/documentSchema.d.ts +7 -0
- package/dist/summary/documentSchema.d.ts.map +1 -1
- package/dist/summary/documentSchema.js +6 -4
- package/dist/summary/documentSchema.js.map +1 -1
- package/dist/summary/orderedClientElection.d.ts +1 -0
- package/dist/summary/orderedClientElection.d.ts.map +1 -1
- package/dist/summary/orderedClientElection.js +13 -11
- package/dist/summary/orderedClientElection.js.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.d.ts +1 -0
- package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.js +7 -2
- package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/dist/summary/runningSummarizer.d.ts +2 -2
- package/dist/summary/runningSummarizer.d.ts.map +1 -1
- package/dist/summary/runningSummarizer.js +38 -17
- package/dist/summary/runningSummarizer.js.map +1 -1
- package/dist/summary/summarizer.d.ts +1 -0
- package/dist/summary/summarizer.d.ts.map +1 -1
- package/dist/summary/summarizer.js +18 -9
- package/dist/summary/summarizer.js.map +1 -1
- package/dist/summary/summarizerClientElection.d.ts.map +1 -1
- package/dist/summary/summarizerClientElection.js +1 -0
- package/dist/summary/summarizerClientElection.js.map +1 -1
- package/dist/summary/summarizerHeuristics.js +1 -1
- package/dist/summary/summarizerHeuristics.js.map +1 -1
- package/dist/summary/summarizerNode/index.d.ts.map +1 -1
- package/dist/summary/summarizerNode/index.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.js +30 -31
- package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js +3 -3
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/dist/summary/summarizerTypes.d.ts +7 -0
- package/dist/summary/summarizerTypes.d.ts.map +1 -1
- package/dist/summary/summarizerTypes.js.map +1 -1
- package/dist/summary/summaryCollection.d.ts +3 -4
- package/dist/summary/summaryCollection.d.ts.map +1 -1
- package/dist/summary/summaryCollection.js +9 -6
- package/dist/summary/summaryCollection.js.map +1 -1
- package/dist/summary/summaryFormat.d.ts +4 -1
- package/dist/summary/summaryFormat.d.ts.map +1 -1
- package/dist/summary/summaryFormat.js +3 -2
- package/dist/summary/summaryFormat.js.map +1 -1
- package/dist/summary/summaryGenerator.d.ts.map +1 -1
- package/dist/summary/summaryGenerator.js +19 -8
- package/dist/summary/summaryGenerator.js.map +1 -1
- package/dist/summary/summaryManager.d.ts.map +1 -1
- package/dist/summary/summaryManager.js +12 -9
- package/dist/summary/summaryManager.js.map +1 -1
- package/lib/batchTracker.d.ts +1 -2
- package/lib/batchTracker.d.ts.map +1 -1
- package/lib/batchTracker.js +2 -2
- package/lib/batchTracker.js.map +1 -1
- package/lib/blobManager/blobManager.d.ts.map +1 -1
- package/lib/blobManager/blobManager.js +14 -11
- package/lib/blobManager/blobManager.js.map +1 -1
- package/lib/blobManager/blobManagerSnapSum.d.ts +1 -0
- package/lib/blobManager/blobManagerSnapSum.d.ts.map +1 -1
- package/lib/blobManager/blobManagerSnapSum.js +7 -5
- package/lib/blobManager/blobManagerSnapSum.js.map +1 -1
- package/lib/channelCollection.d.ts.map +1 -1
- package/lib/channelCollection.js +66 -42
- package/lib/channelCollection.js.map +1 -1
- package/lib/connectionTelemetry.d.ts +2 -2
- package/lib/connectionTelemetry.d.ts.map +1 -1
- package/lib/connectionTelemetry.js +5 -5
- package/lib/connectionTelemetry.js.map +1 -1
- package/lib/containerRuntime.d.ts +14 -30
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +271 -196
- package/lib/containerRuntime.js.map +1 -1
- package/lib/dataStore.js +6 -3
- package/lib/dataStore.js.map +1 -1
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.js +16 -11
- package/lib/dataStoreContext.js.map +1 -1
- package/lib/dataStoreContexts.d.ts.map +1 -1
- package/lib/dataStoreContexts.js +1 -0
- package/lib/dataStoreContexts.js.map +1 -1
- package/lib/deltaScheduler.d.ts.map +1 -1
- package/lib/deltaScheduler.js +6 -6
- package/lib/deltaScheduler.js.map +1 -1
- package/lib/gc/garbageCollection.d.ts.map +1 -1
- package/lib/gc/garbageCollection.js +39 -15
- package/lib/gc/garbageCollection.js.map +1 -1
- package/lib/gc/gcConfigs.d.ts.map +1 -1
- package/lib/gc/gcConfigs.js +2 -0
- package/lib/gc/gcConfigs.js.map +1 -1
- package/lib/gc/gcDefinitions.d.ts +8 -0
- package/lib/gc/gcDefinitions.d.ts.map +1 -1
- package/lib/gc/gcDefinitions.js +1 -0
- package/lib/gc/gcDefinitions.js.map +1 -1
- package/lib/gc/gcHelpers.d.ts.map +1 -1
- package/lib/gc/gcHelpers.js +8 -5
- package/lib/gc/gcHelpers.js.map +1 -1
- package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/lib/gc/gcSummaryStateTracker.js +2 -1
- package/lib/gc/gcSummaryStateTracker.js.map +1 -1
- package/lib/gc/gcTelemetry.d.ts.map +1 -1
- package/lib/gc/gcTelemetry.js +32 -16
- package/lib/gc/gcTelemetry.js.map +1 -1
- package/lib/inboundBatchAggregator.js +4 -4
- package/lib/inboundBatchAggregator.js.map +1 -1
- package/lib/layerCompatState.d.ts +19 -0
- package/lib/layerCompatState.d.ts.map +1 -0
- package/lib/layerCompatState.js +60 -0
- package/lib/layerCompatState.js.map +1 -0
- package/lib/messageTypes.d.ts.map +1 -1
- package/lib/messageTypes.js.map +1 -1
- package/lib/opLifecycle/duplicateBatchDetector.js +2 -2
- package/lib/opLifecycle/duplicateBatchDetector.js.map +1 -1
- package/lib/opLifecycle/opCompressor.d.ts +3 -2
- package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opCompressor.js +13 -19
- package/lib/opLifecycle/opCompressor.js.map +1 -1
- package/lib/opLifecycle/opDecompressor.d.ts +3 -0
- package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opDecompressor.js +4 -1
- package/lib/opLifecycle/opDecompressor.js.map +1 -1
- package/lib/opLifecycle/opGroupingManager.d.ts +1 -1
- package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/lib/opLifecycle/opGroupingManager.js +5 -3
- package/lib/opLifecycle/opGroupingManager.js.map +1 -1
- package/lib/opLifecycle/opSplitter.d.ts +13 -10
- package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
- package/lib/opLifecycle/opSplitter.js +14 -11
- package/lib/opLifecycle/opSplitter.js.map +1 -1
- package/lib/opLifecycle/outbox.d.ts +3 -3
- package/lib/opLifecycle/outbox.d.ts.map +1 -1
- package/lib/opLifecycle/outbox.js +11 -15
- package/lib/opLifecycle/outbox.js.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.js +3 -1
- package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/pendingStateManager.d.ts +3 -4
- package/lib/pendingStateManager.d.ts.map +1 -1
- package/lib/pendingStateManager.js +12 -11
- package/lib/pendingStateManager.js.map +1 -1
- package/lib/summary/documentSchema.d.ts +7 -0
- package/lib/summary/documentSchema.d.ts.map +1 -1
- package/lib/summary/documentSchema.js +6 -4
- package/lib/summary/documentSchema.js.map +1 -1
- package/lib/summary/orderedClientElection.d.ts +1 -0
- package/lib/summary/orderedClientElection.d.ts.map +1 -1
- package/lib/summary/orderedClientElection.js +13 -11
- package/lib/summary/orderedClientElection.js.map +1 -1
- package/lib/summary/runWhileConnectedCoordinator.d.ts +1 -0
- package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
- package/lib/summary/runWhileConnectedCoordinator.js +7 -2
- package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/lib/summary/runningSummarizer.d.ts +2 -2
- package/lib/summary/runningSummarizer.d.ts.map +1 -1
- package/lib/summary/runningSummarizer.js +38 -17
- package/lib/summary/runningSummarizer.js.map +1 -1
- package/lib/summary/summarizer.d.ts +1 -0
- package/lib/summary/summarizer.d.ts.map +1 -1
- package/lib/summary/summarizer.js +18 -9
- package/lib/summary/summarizer.js.map +1 -1
- package/lib/summary/summarizerClientElection.d.ts.map +1 -1
- package/lib/summary/summarizerClientElection.js +1 -0
- package/lib/summary/summarizerClientElection.js.map +1 -1
- package/lib/summary/summarizerHeuristics.js +1 -1
- package/lib/summary/summarizerHeuristics.js.map +1 -1
- package/lib/summary/summarizerNode/index.d.ts.map +1 -1
- package/lib/summary/summarizerNode/index.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.js +30 -31
- package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js +3 -3
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/lib/summary/summarizerTypes.d.ts +7 -0
- package/lib/summary/summarizerTypes.d.ts.map +1 -1
- package/lib/summary/summarizerTypes.js.map +1 -1
- package/lib/summary/summaryCollection.d.ts +3 -4
- package/lib/summary/summaryCollection.d.ts.map +1 -1
- package/lib/summary/summaryCollection.js +9 -6
- package/lib/summary/summaryCollection.js.map +1 -1
- package/lib/summary/summaryFormat.d.ts +4 -1
- package/lib/summary/summaryFormat.d.ts.map +1 -1
- package/lib/summary/summaryFormat.js +2 -2
- package/lib/summary/summaryFormat.js.map +1 -1
- package/lib/summary/summaryGenerator.d.ts.map +1 -1
- package/lib/summary/summaryGenerator.js +19 -8
- package/lib/summary/summaryGenerator.js.map +1 -1
- package/lib/summary/summaryManager.d.ts.map +1 -1
- package/lib/summary/summaryManager.js +12 -9
- package/lib/summary/summaryManager.js.map +1 -1
- package/package.json +21 -43
- package/src/batchTracker.ts +3 -3
- package/src/blobManager/blobManager.ts +16 -14
- package/src/blobManager/blobManagerSnapSum.ts +8 -8
- package/src/channelCollection.ts +63 -44
- package/src/connectionTelemetry.ts +12 -6
- package/src/containerRuntime.ts +306 -235
- package/src/dataStore.ts +6 -3
- package/src/dataStoreContext.ts +16 -16
- package/src/dataStoreContexts.ts +1 -0
- package/src/deltaScheduler.ts +6 -6
- package/src/gc/garbageCollection.ts +47 -20
- package/src/gc/gcConfigs.ts +9 -1
- package/src/gc/gcDefinitions.ts +12 -0
- package/src/gc/gcHelpers.ts +9 -4
- package/src/gc/gcSummaryStateTracker.ts +3 -1
- package/src/gc/gcTelemetry.ts +26 -11
- package/src/inboundBatchAggregator.ts +4 -4
- package/src/layerCompatState.ts +75 -0
- package/src/messageTypes.ts +2 -0
- package/src/opLifecycle/README.md +43 -34
- package/src/opLifecycle/duplicateBatchDetector.ts +2 -2
- package/src/opLifecycle/opCompressor.ts +16 -23
- package/src/opLifecycle/opDecompressor.ts +4 -1
- package/src/opLifecycle/opGroupingManager.ts +5 -4
- package/src/opLifecycle/opSplitter.ts +14 -11
- package/src/opLifecycle/outbox.ts +13 -20
- package/src/opLifecycle/remoteMessageProcessor.ts +3 -1
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +15 -10
- package/src/summary/documentSchema.ts +11 -4
- package/src/summary/orderedClientElection.ts +14 -11
- package/src/summary/runWhileConnectedCoordinator.ts +6 -0
- package/src/summary/runningSummarizer.ts +43 -19
- package/src/summary/summarizer.ts +24 -11
- package/src/summary/summarizerClientElection.ts +2 -0
- package/src/summary/summarizerHeuristics.ts +1 -1
- package/src/summary/summarizerNode/index.ts +1 -0
- package/src/summary/summarizerNode/summarizerNode.ts +32 -31
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +4 -4
- package/src/summary/summarizerTypes.ts +7 -0
- package/src/summary/summaryCollection.ts +19 -8
- package/src/summary/summaryFormat.ts +10 -5
- package/src/summary/summaryGenerator.ts +25 -10
- package/src/summary/summaryManager.ts +14 -12
- package/container-runtime.test-files.tar +0 -0
|
@@ -198,20 +198,23 @@ export class SummarizerNode implements IRootSummarizerNode {
|
|
|
198
198
|
this.wipSummarizeCalled = true;
|
|
199
199
|
|
|
200
200
|
// Try to reuse the tree if unchanged
|
|
201
|
-
if (
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
201
|
+
if (
|
|
202
|
+
this.canReuseHandle &&
|
|
203
|
+
!fullTree &&
|
|
204
|
+
!this.hasChanged() &&
|
|
205
|
+
this._lastSummaryReferenceSequenceNumber !== undefined
|
|
206
|
+
) {
|
|
207
|
+
this.wipSkipRecursion = true;
|
|
208
|
+
const stats = mergeStats();
|
|
209
|
+
stats.handleNodeCount++;
|
|
210
|
+
return {
|
|
211
|
+
summary: {
|
|
212
|
+
type: SummaryType.Handle,
|
|
213
|
+
handle: this.summaryHandleId,
|
|
214
|
+
handleType: SummaryType.Tree,
|
|
215
|
+
},
|
|
216
|
+
stats,
|
|
217
|
+
};
|
|
215
218
|
}
|
|
216
219
|
|
|
217
220
|
let incrementalSummaryContext: IExperimentalIncrementalSummaryContext | undefined;
|
|
@@ -221,14 +224,14 @@ export class SummarizerNode implements IRootSummarizerNode {
|
|
|
221
224
|
0x5df /* Summarize should not be called when not tracking the summary */,
|
|
222
225
|
);
|
|
223
226
|
incrementalSummaryContext =
|
|
224
|
-
this._lastSummaryReferenceSequenceNumber
|
|
225
|
-
?
|
|
227
|
+
this._lastSummaryReferenceSequenceNumber === undefined
|
|
228
|
+
? undefined
|
|
229
|
+
: {
|
|
226
230
|
summarySequenceNumber: this.wipReferenceSequenceNumber,
|
|
227
231
|
latestSummarySequenceNumber: this._lastSummaryReferenceSequenceNumber,
|
|
228
232
|
// TODO: remove summaryPath.
|
|
229
233
|
summaryPath: this.summaryHandleId,
|
|
230
|
-
}
|
|
231
|
-
: undefined;
|
|
234
|
+
};
|
|
232
235
|
}
|
|
233
236
|
|
|
234
237
|
const result = await this.summarizeInternalFn(
|
|
@@ -340,17 +343,15 @@ export class SummarizerNode implements IRootSummarizerNode {
|
|
|
340
343
|
this.wipReferenceSequenceNumber !== undefined,
|
|
341
344
|
0x1a4 /* "Not tracking a summary" */,
|
|
342
345
|
);
|
|
343
|
-
if (parentSkipRecursion) {
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
return;
|
|
353
|
-
}
|
|
346
|
+
if (parentSkipRecursion && this._lastSummaryReferenceSequenceNumber === undefined) {
|
|
347
|
+
// This case the child is added after the latest non-failure summary.
|
|
348
|
+
// This node and all children should consider themselves as still not
|
|
349
|
+
// having a successful summary yet.
|
|
350
|
+
// We cannot "reuse" this node if unchanged since that summary, because
|
|
351
|
+
// handles will be unable to point to that node. It never made it to the
|
|
352
|
+
// tree itself, and only exists as an attach op in the _outstandingOps.
|
|
353
|
+
this.clearSummary();
|
|
354
|
+
return;
|
|
354
355
|
}
|
|
355
356
|
|
|
356
357
|
for (const child of this.children.values()) {
|
|
@@ -617,9 +618,9 @@ export class SummarizerNode implements IRootSummarizerNode {
|
|
|
617
618
|
}
|
|
618
619
|
// In case we have pending summaries on the parent, let's initialize it on the child.
|
|
619
620
|
if (child._lastSummaryReferenceSequenceNumber !== undefined) {
|
|
620
|
-
this.pendingSummaries.
|
|
621
|
+
for (const [proposedHandle, pendingSummaryInfo] of this.pendingSummaries.entries()) {
|
|
621
622
|
child.addPendingSummary(proposedHandle, pendingSummaryInfo);
|
|
622
|
-
}
|
|
623
|
+
}
|
|
623
624
|
}
|
|
624
625
|
}
|
|
625
626
|
|
|
@@ -51,7 +51,7 @@ interface PendingSummaryInfoWithGC extends PendingSummaryInfo {
|
|
|
51
51
|
* - Manages the used routes of this node. These are used to identify if this node is referenced in the document
|
|
52
52
|
* and to determine if the node's used state changed since last summary.
|
|
53
53
|
*
|
|
54
|
-
|
|
54
|
+
*- Adds trackState param to summarize. If trackState is false, it bypasses the SummarizerNode and calls
|
|
55
55
|
* directly into summarizeInternal method.
|
|
56
56
|
*/
|
|
57
57
|
export class SummarizerNodeWithGC extends SummarizerNode implements IRootSummarizerNodeWithGC {
|
|
@@ -156,8 +156,8 @@ export class SummarizerNodeWithGC extends SummarizerNode implements IRootSummari
|
|
|
156
156
|
this.gcData = cloneGCData(baseGCDetails.gcData);
|
|
157
157
|
}
|
|
158
158
|
if (baseGCDetails.usedRoutes !== undefined) {
|
|
159
|
-
this.usedRoutes =
|
|
160
|
-
this.referenceUsedRoutes =
|
|
159
|
+
this.usedRoutes = [...baseGCDetails.usedRoutes].sort();
|
|
160
|
+
this.referenceUsedRoutes = [...baseGCDetails.usedRoutes].sort();
|
|
161
161
|
}
|
|
162
162
|
}
|
|
163
163
|
|
|
@@ -427,7 +427,7 @@ export class SummarizerNodeWithGC extends SummarizerNode implements IRootSummari
|
|
|
427
427
|
const pendingSummaryWithGC = pendingSummary as PendingSummaryInfoWithGC;
|
|
428
428
|
if (pendingSummaryWithGC.serializedUsedRoutes !== undefined) {
|
|
429
429
|
const childNodeUsedRoutes = unpackChildNodesUsedRoutes(
|
|
430
|
-
JSON.parse(pendingSummaryWithGC.serializedUsedRoutes),
|
|
430
|
+
JSON.parse(pendingSummaryWithGC.serializedUsedRoutes) as string[],
|
|
431
431
|
);
|
|
432
432
|
const newSerializedRoutes = childNodeUsedRoutes.get(id) ?? [""];
|
|
433
433
|
const childPendingSummaryInfo = {
|
|
@@ -41,6 +41,7 @@ import { SummarizeReason } from "./summaryGenerator.js";
|
|
|
41
41
|
* @param T - cancellation reason type
|
|
42
42
|
* @legacy
|
|
43
43
|
* @alpha
|
|
44
|
+
* @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
|
|
44
45
|
*/
|
|
45
46
|
export interface ICancellationToken<T> {
|
|
46
47
|
/**
|
|
@@ -58,6 +59,7 @@ export interface ICancellationToken<T> {
|
|
|
58
59
|
* Similar to AbortSignal, but using promise instead of events
|
|
59
60
|
* @legacy
|
|
60
61
|
* @alpha
|
|
62
|
+
* @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
|
|
61
63
|
*/
|
|
62
64
|
export type ISummaryCancellationToken = ICancellationToken<SummarizerStopReason>;
|
|
63
65
|
|
|
@@ -65,6 +67,7 @@ export type ISummaryCancellationToken = ICancellationToken<SummarizerStopReason>
|
|
|
65
67
|
* Data required to update internal tracking state after receiving a Summary Ack.
|
|
66
68
|
* @legacy
|
|
67
69
|
* @alpha
|
|
70
|
+
* @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
|
|
68
71
|
*/
|
|
69
72
|
export interface IRefreshSummaryAckOptions {
|
|
70
73
|
/**
|
|
@@ -88,6 +91,7 @@ export interface IRefreshSummaryAckOptions {
|
|
|
88
91
|
/**
|
|
89
92
|
* @legacy
|
|
90
93
|
* @alpha
|
|
94
|
+
* @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
|
|
91
95
|
*/
|
|
92
96
|
export interface ISummarizerInternalsProvider {
|
|
93
97
|
/**
|
|
@@ -112,6 +116,7 @@ export interface ISummarizingWarning extends ContainerWarning {
|
|
|
112
116
|
/**
|
|
113
117
|
* @legacy
|
|
114
118
|
* @alpha
|
|
119
|
+
* @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
|
|
115
120
|
*/
|
|
116
121
|
export interface IConnectableRuntime {
|
|
117
122
|
readonly disposed: boolean;
|
|
@@ -123,6 +128,7 @@ export interface IConnectableRuntime {
|
|
|
123
128
|
/**
|
|
124
129
|
* @legacy
|
|
125
130
|
* @alpha
|
|
131
|
+
* @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
|
|
126
132
|
*/
|
|
127
133
|
export interface ISummarizerRuntime extends IConnectableRuntime {
|
|
128
134
|
readonly baseLogger: ITelemetryBaseLogger;
|
|
@@ -158,6 +164,7 @@ export interface ISummarizeOptions {
|
|
|
158
164
|
/**
|
|
159
165
|
* @legacy
|
|
160
166
|
* @alpha
|
|
167
|
+
* @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
|
|
161
168
|
*/
|
|
162
169
|
export interface ISubmitSummaryOptions extends ISummarizeOptions {
|
|
163
170
|
/**
|
|
@@ -5,7 +5,11 @@
|
|
|
5
5
|
|
|
6
6
|
import { TypedEventEmitter } from "@fluid-internal/client-utils";
|
|
7
7
|
import { IDeltaManager } from "@fluidframework/container-definitions/internal";
|
|
8
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
IDisposable,
|
|
10
|
+
IEvent,
|
|
11
|
+
type ITelemetryBaseLogger,
|
|
12
|
+
} from "@fluidframework/core-interfaces";
|
|
9
13
|
import { assert, Deferred } from "@fluidframework/core-utils/internal";
|
|
10
14
|
import {
|
|
11
15
|
IDocumentMessage,
|
|
@@ -15,7 +19,10 @@ import {
|
|
|
15
19
|
MessageType,
|
|
16
20
|
ISequencedDocumentMessage,
|
|
17
21
|
} from "@fluidframework/driver-definitions/internal";
|
|
18
|
-
import {
|
|
22
|
+
import {
|
|
23
|
+
createChildLogger,
|
|
24
|
+
ITelemetryLoggerExt,
|
|
25
|
+
} from "@fluidframework/telemetry-utils/internal";
|
|
19
26
|
|
|
20
27
|
/**
|
|
21
28
|
* Interface for summary op messages with typed contents.
|
|
@@ -284,12 +291,14 @@ export class SummaryCollection extends TypedEventEmitter<ISummaryCollectionOpEve
|
|
|
284
291
|
this.deltaManager.off("op", listener);
|
|
285
292
|
}
|
|
286
293
|
|
|
294
|
+
private readonly logger: ITelemetryLoggerExt;
|
|
287
295
|
public constructor(
|
|
288
296
|
private readonly deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,
|
|
289
|
-
|
|
297
|
+
logger: ITelemetryBaseLogger,
|
|
290
298
|
) {
|
|
291
299
|
super();
|
|
292
300
|
this.deltaManager.on("op", (op) => this.handleOp(op));
|
|
301
|
+
this.logger = createChildLogger({ logger });
|
|
293
302
|
}
|
|
294
303
|
|
|
295
304
|
/**
|
|
@@ -369,20 +378,22 @@ export class SummaryCollection extends TypedEventEmitter<ISummaryCollectionOpEve
|
|
|
369
378
|
const op = { ...opArg };
|
|
370
379
|
|
|
371
380
|
switch (op.type) {
|
|
372
|
-
case MessageType.Summarize:
|
|
381
|
+
case MessageType.Summarize: {
|
|
373
382
|
this.parseContent(op);
|
|
374
383
|
return this.handleSummaryOp(op as ISummaryOpMessage);
|
|
384
|
+
}
|
|
375
385
|
case MessageType.SummaryAck:
|
|
376
|
-
case MessageType.SummaryNack:
|
|
386
|
+
case MessageType.SummaryNack: {
|
|
377
387
|
// Old files (prior to PR #10077) may not contain this info
|
|
378
|
-
if (op.data
|
|
379
|
-
op.contents = JSON.parse(op.data);
|
|
380
|
-
} else {
|
|
388
|
+
if (op.data === undefined) {
|
|
381
389
|
this.parseContent(op);
|
|
390
|
+
} else {
|
|
391
|
+
op.contents = JSON.parse(op.data);
|
|
382
392
|
}
|
|
383
393
|
return op.type === MessageType.SummaryAck
|
|
384
394
|
? this.handleSummaryAck(op as ISummaryAckMessage)
|
|
385
395
|
: this.handleSummaryNack(op as ISummaryNackMessage);
|
|
396
|
+
}
|
|
386
397
|
default: {
|
|
387
398
|
// If the difference between timestamp of current op and last summary op is greater than
|
|
388
399
|
// the maxAckWaitTime, then we need to inform summarizer to not wait and summarize
|
|
@@ -10,10 +10,7 @@ import {
|
|
|
10
10
|
ISnapshotTree,
|
|
11
11
|
ISequencedDocumentMessage,
|
|
12
12
|
} from "@fluidframework/driver-definitions/internal";
|
|
13
|
-
import {
|
|
14
|
-
blobHeadersBlobName as blobNameForBlobHeaders,
|
|
15
|
-
readAndParse,
|
|
16
|
-
} from "@fluidframework/driver-utils/internal";
|
|
13
|
+
import { readAndParse } from "@fluidframework/driver-utils/internal";
|
|
17
14
|
import {
|
|
18
15
|
ISummaryTreeWithStats,
|
|
19
16
|
channelsTreeName,
|
|
@@ -21,8 +18,10 @@ import {
|
|
|
21
18
|
} from "@fluidframework/runtime-definitions/internal";
|
|
22
19
|
|
|
23
20
|
import { blobsTreeName } from "../blobManager/index.js";
|
|
21
|
+
// eslint-disable-next-line import/no-deprecated
|
|
24
22
|
import { IGCMetadata } from "../gc/index.js";
|
|
25
23
|
|
|
24
|
+
// eslint-disable-next-line import/no-deprecated
|
|
26
25
|
import { IDocumentSchema } from "./documentSchema.js";
|
|
27
26
|
|
|
28
27
|
/**
|
|
@@ -130,7 +129,9 @@ export function hasIsolatedChannels(attributes: ReadFluidDataStoreAttributes): b
|
|
|
130
129
|
/**
|
|
131
130
|
* @legacy
|
|
132
131
|
* @alpha
|
|
132
|
+
* @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
|
|
133
133
|
*/
|
|
134
|
+
// eslint-disable-next-line import/no-deprecated
|
|
134
135
|
export interface IContainerRuntimeMetadata extends ICreateContainerMetadata, IGCMetadata {
|
|
135
136
|
readonly summaryFormatVersion: 1;
|
|
136
137
|
/**
|
|
@@ -154,12 +155,14 @@ export interface IContainerRuntimeMetadata extends ICreateContainerMetadata, IGC
|
|
|
154
155
|
*/
|
|
155
156
|
readonly telemetryDocumentId?: string;
|
|
156
157
|
|
|
158
|
+
// eslint-disable-next-line import/no-deprecated
|
|
157
159
|
readonly documentSchema?: IDocumentSchema;
|
|
158
160
|
}
|
|
159
161
|
|
|
160
162
|
/**
|
|
161
163
|
* @legacy
|
|
162
164
|
* @alpha
|
|
165
|
+
* @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
|
|
163
166
|
*/
|
|
164
167
|
export interface ICreateContainerMetadata {
|
|
165
168
|
/**
|
|
@@ -176,6 +179,7 @@ export interface ICreateContainerMetadata {
|
|
|
176
179
|
* The properties of an ISequencedDocumentMessage to be stored in the metadata blob in summary.
|
|
177
180
|
* @legacy
|
|
178
181
|
* @alpha
|
|
182
|
+
* @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
|
|
179
183
|
*/
|
|
180
184
|
export type ISummaryMetadataMessage = Pick<
|
|
181
185
|
ISequencedDocumentMessage,
|
|
@@ -227,7 +231,6 @@ export const chunksBlobName = ".chunks";
|
|
|
227
231
|
export const recentBatchInfoBlobName = ".recentBatchInfo";
|
|
228
232
|
export const electedSummarizerBlobName = ".electedSummarizer";
|
|
229
233
|
export const idCompressorBlobName = ".idCompressor";
|
|
230
|
-
export const blobHeadersBlobName = blobNameForBlobHeaders;
|
|
231
234
|
|
|
232
235
|
export function rootHasIsolatedChannels(metadata?: IContainerRuntimeMetadata): boolean {
|
|
233
236
|
return !!metadata && !metadata.disableIsolatedChannels;
|
|
@@ -308,3 +311,5 @@ export async function getFluidDataStoreAttributes(
|
|
|
308
311
|
assert(formatVersion > 0, 0x1d5 /* Invalid snapshot format version */);
|
|
309
312
|
return attributes;
|
|
310
313
|
}
|
|
314
|
+
|
|
315
|
+
export { blobHeadersBlobName } from "@fluidframework/driver-utils/internal";
|
|
@@ -25,10 +25,13 @@ import {
|
|
|
25
25
|
IAckSummaryResult,
|
|
26
26
|
IBroadcastSummaryResult,
|
|
27
27
|
INackSummaryResult,
|
|
28
|
+
// eslint-disable-next-line import/no-deprecated
|
|
28
29
|
IRefreshSummaryAckOptions,
|
|
30
|
+
// eslint-disable-next-line import/no-deprecated
|
|
29
31
|
ISubmitSummaryOptions,
|
|
30
32
|
ISummarizeHeuristicData,
|
|
31
33
|
ISummarizeResults,
|
|
34
|
+
// eslint-disable-next-line import/no-deprecated
|
|
32
35
|
ISummaryCancellationToken,
|
|
33
36
|
SubmitSummaryFailureData,
|
|
34
37
|
SubmitSummaryResult,
|
|
@@ -49,6 +52,7 @@ export type raceTimerResult<T> =
|
|
|
49
52
|
export async function raceTimer<T>(
|
|
50
53
|
promise: Promise<T>,
|
|
51
54
|
timer: Promise<IPromiseTimerResult>,
|
|
55
|
+
// eslint-disable-next-line import/no-deprecated
|
|
52
56
|
cancellationToken?: ISummaryCancellationToken,
|
|
53
57
|
): Promise<raceTimerResult<T>> {
|
|
54
58
|
const promises: Promise<raceTimerResult<T>>[] = [
|
|
@@ -211,10 +215,12 @@ export class SummaryGenerator {
|
|
|
211
215
|
private readonly pendingAckTimer: IPromiseTimer,
|
|
212
216
|
private readonly heuristicData: ISummarizeHeuristicData,
|
|
213
217
|
private readonly submitSummaryCallback: (
|
|
218
|
+
// eslint-disable-next-line import/no-deprecated
|
|
214
219
|
options: ISubmitSummaryOptions,
|
|
215
220
|
) => Promise<SubmitSummaryResult>,
|
|
216
221
|
private readonly successfulSummaryCallback: () => void,
|
|
217
222
|
private readonly refreshLatestSummaryCallback: (
|
|
223
|
+
// eslint-disable-next-line import/no-deprecated
|
|
218
224
|
options: IRefreshSummaryAckOptions,
|
|
219
225
|
) => Promise<void>,
|
|
220
226
|
private readonly summaryWatcher: Pick<IClientSummaryWatcher, "watchSummary">,
|
|
@@ -232,19 +238,23 @@ export class SummaryGenerator {
|
|
|
232
238
|
* @param resultsBuilder - optional, result builder to use to build pass or fail result.
|
|
233
239
|
*/
|
|
234
240
|
public summarize(
|
|
241
|
+
// eslint-disable-next-line import/no-deprecated
|
|
235
242
|
summaryOptions: ISubmitSummaryOptions,
|
|
236
243
|
resultsBuilder = new SummarizeResultBuilder(),
|
|
237
244
|
): ISummarizeResults {
|
|
238
|
-
this.summarizeCore(summaryOptions, resultsBuilder).catch(
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
245
|
+
this.summarizeCore(summaryOptions, resultsBuilder).catch(
|
|
246
|
+
(error: IRetriableFailureError) => {
|
|
247
|
+
const message = "UnexpectedSummarizeError";
|
|
248
|
+
summaryOptions.summaryLogger.sendErrorEvent({ eventName: message }, error);
|
|
249
|
+
resultsBuilder.fail(message, error);
|
|
250
|
+
},
|
|
251
|
+
);
|
|
243
252
|
|
|
244
253
|
return resultsBuilder.build();
|
|
245
254
|
}
|
|
246
255
|
|
|
247
256
|
private async summarizeCore(
|
|
257
|
+
// eslint-disable-next-line import/no-deprecated
|
|
248
258
|
submitSummaryOptions: ISubmitSummaryOptions,
|
|
249
259
|
resultsBuilder: SummarizeResultBuilder,
|
|
250
260
|
): Promise<void> {
|
|
@@ -521,17 +531,19 @@ export class SummaryGenerator {
|
|
|
521
531
|
initialProps: SummaryGeneratorTelemetry,
|
|
522
532
|
): SummaryGeneratorTelemetry {
|
|
523
533
|
switch (summaryData.stage) {
|
|
524
|
-
case "base":
|
|
534
|
+
case "base": {
|
|
525
535
|
return initialProps;
|
|
536
|
+
}
|
|
526
537
|
|
|
527
|
-
case "generate":
|
|
538
|
+
case "generate": {
|
|
528
539
|
return {
|
|
529
540
|
...initialProps,
|
|
530
541
|
...summaryData.summaryStats,
|
|
531
542
|
generateDuration: summaryData.generateDuration,
|
|
532
543
|
};
|
|
544
|
+
}
|
|
533
545
|
|
|
534
|
-
case "upload":
|
|
546
|
+
case "upload": {
|
|
535
547
|
return {
|
|
536
548
|
...initialProps,
|
|
537
549
|
...summaryData.summaryStats,
|
|
@@ -539,8 +551,9 @@ export class SummaryGenerator {
|
|
|
539
551
|
handle: summaryData.handle,
|
|
540
552
|
uploadDuration: summaryData.uploadDuration,
|
|
541
553
|
};
|
|
554
|
+
}
|
|
542
555
|
|
|
543
|
-
case "submit":
|
|
556
|
+
case "submit": {
|
|
544
557
|
return {
|
|
545
558
|
...initialProps,
|
|
546
559
|
...summaryData.summaryStats,
|
|
@@ -553,9 +566,11 @@ export class SummaryGenerator {
|
|
|
553
566
|
nonRuntimeOpsSinceLastSummary: this.heuristicData.numNonRuntimeOps,
|
|
554
567
|
runtimeOpsSinceLastSummary: this.heuristicData.numRuntimeOps,
|
|
555
568
|
};
|
|
569
|
+
}
|
|
556
570
|
|
|
557
|
-
default:
|
|
571
|
+
default: {
|
|
558
572
|
assert(true, 0x397 /* Unexpected summary stage */);
|
|
573
|
+
}
|
|
559
574
|
}
|
|
560
575
|
|
|
561
576
|
return initialProps;
|
|
@@ -24,6 +24,7 @@ import {
|
|
|
24
24
|
|
|
25
25
|
import { IThrottler } from "../throttler.js";
|
|
26
26
|
|
|
27
|
+
// eslint-disable-next-line import/no-deprecated
|
|
27
28
|
import { Summarizer } from "./summarizer.js";
|
|
28
29
|
import { ISummarizerClientElection } from "./summarizerClientElection.js";
|
|
29
30
|
import {
|
|
@@ -284,6 +285,7 @@ export class SummaryManager
|
|
|
284
285
|
// which would happen when we have a high enough number of unsummarized ops.
|
|
285
286
|
if (
|
|
286
287
|
startWithInitialDelay ||
|
|
288
|
+
// eslint-disable-next-line import/no-deprecated
|
|
287
289
|
!Summarizer.stopReasonCanRunLastSummary(shouldSummarizeState.stopReason)
|
|
288
290
|
) {
|
|
289
291
|
this.state = SummaryManagerState.Starting;
|
|
@@ -406,7 +408,7 @@ export class SummaryManager
|
|
|
406
408
|
}
|
|
407
409
|
|
|
408
410
|
if (delayMs > 0) {
|
|
409
|
-
let timer;
|
|
411
|
+
let timer: number | undefined;
|
|
410
412
|
let resolveOpPromiseFn: (value: void | PromiseLike<void>) => void;
|
|
411
413
|
// Create a listener that will break the delay if we've exceeded the initial delay ops count.
|
|
412
414
|
const opsListenerFn = (): void => {
|
|
@@ -432,7 +434,7 @@ export class SummaryManager
|
|
|
432
434
|
|
|
433
435
|
public summarizeOnDemand(options: IOnDemandSummarizeOptions): ISummarizeResults {
|
|
434
436
|
if (this.summarizer === undefined) {
|
|
435
|
-
throw Error("No running summarizer client");
|
|
437
|
+
throw new Error("No running summarizer client");
|
|
436
438
|
// TODO: could spawn a summarizer client temporarily.
|
|
437
439
|
}
|
|
438
440
|
return this.summarizer.summarizeOnDemand(options);
|
|
@@ -440,7 +442,7 @@ export class SummaryManager
|
|
|
440
442
|
|
|
441
443
|
public enqueueSummarize(options: IEnqueueSummarizeOptions): EnqueueSummarizeResult {
|
|
442
444
|
if (this.summarizer === undefined) {
|
|
443
|
-
throw Error("No running summarizer client");
|
|
445
|
+
throw new Error("No running summarizer client");
|
|
444
446
|
// TODO: could spawn a summarizer client temporarily.
|
|
445
447
|
}
|
|
446
448
|
return this.summarizer.enqueueSummarize(options);
|
|
@@ -457,28 +459,28 @@ export class SummaryManager
|
|
|
457
459
|
private readonly forwardedEvents = new Map<string, () => void>();
|
|
458
460
|
|
|
459
461
|
private setupForwardedEvents(): void {
|
|
460
|
-
[
|
|
462
|
+
for (const event of [
|
|
461
463
|
"summarize",
|
|
462
464
|
"summarizeAllAttemptsFailed",
|
|
463
465
|
"summarizerStop",
|
|
464
466
|
"summarizerStart",
|
|
465
467
|
"summarizerStartupFailed",
|
|
466
|
-
]
|
|
467
|
-
const listener = (...args:
|
|
468
|
+
]) {
|
|
469
|
+
const listener = (...args: unknown[]): void => {
|
|
468
470
|
this.emit(event, ...args);
|
|
469
471
|
};
|
|
470
472
|
// TODO: better typing here
|
|
471
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
473
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument
|
|
472
474
|
this.summarizer?.on(event as any, listener);
|
|
473
475
|
this.forwardedEvents.set(event, listener);
|
|
474
|
-
}
|
|
476
|
+
}
|
|
475
477
|
}
|
|
476
478
|
|
|
477
479
|
private cleanupForwardedEvents(): void {
|
|
478
|
-
this.forwardedEvents.
|
|
479
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
480
|
-
this.summarizer?.off(event as any, listener)
|
|
481
|
-
|
|
480
|
+
for (const [event, listener] of this.forwardedEvents.entries()) {
|
|
481
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument
|
|
482
|
+
this.summarizer?.off(event as any, listener);
|
|
483
|
+
}
|
|
482
484
|
this.forwardedEvents.clear();
|
|
483
485
|
}
|
|
484
486
|
}
|
|
Binary file
|