@fluidframework/debugger 2.0.0-internal.6.4.0 → 2.0.0-internal.7.1.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.
Files changed (39) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/api-extractor.json +1 -1
  3. package/api-report/debugger.api.md +156 -0
  4. package/dist/debugger-alpha.d.ts +190 -0
  5. package/dist/debugger-beta.d.ts +190 -0
  6. package/dist/debugger-public.d.ts +190 -0
  7. package/dist/debugger.d.ts +190 -0
  8. package/dist/fluidDebugger.d.ts +3 -0
  9. package/dist/fluidDebugger.d.ts.map +1 -1
  10. package/dist/fluidDebugger.js +4 -1
  11. package/dist/fluidDebugger.js.map +1 -1
  12. package/dist/fluidDebuggerController.d.ts +6 -1
  13. package/dist/fluidDebuggerController.d.ts.map +1 -1
  14. package/dist/fluidDebuggerController.js +2 -0
  15. package/dist/fluidDebuggerController.js.map +1 -1
  16. package/dist/fluidDebuggerUi.d.ts +9 -0
  17. package/dist/fluidDebuggerUi.d.ts.map +1 -1
  18. package/dist/fluidDebuggerUi.js +25 -22
  19. package/dist/fluidDebuggerUi.js.map +1 -1
  20. package/dist/sanitizer.js +5 -1
  21. package/dist/sanitizer.js.map +1 -1
  22. package/dist/tsdoc-metadata.json +1 -1
  23. package/lib/fluidDebugger.d.ts +3 -0
  24. package/lib/fluidDebugger.d.ts.map +1 -1
  25. package/lib/fluidDebugger.js +3 -0
  26. package/lib/fluidDebugger.js.map +1 -1
  27. package/lib/fluidDebuggerController.d.ts +6 -1
  28. package/lib/fluidDebuggerController.d.ts.map +1 -1
  29. package/lib/fluidDebuggerController.js +2 -0
  30. package/lib/fluidDebuggerController.js.map +1 -1
  31. package/lib/fluidDebuggerUi.d.ts +9 -0
  32. package/lib/fluidDebuggerUi.d.ts.map +1 -1
  33. package/lib/fluidDebuggerUi.js +25 -22
  34. package/lib/fluidDebuggerUi.js.map +1 -1
  35. package/lib/test/types/validateDebuggerPrevious.generated.js.map +1 -1
  36. package/package.json +17 -17
  37. package/src/fluidDebugger.ts +3 -0
  38. package/src/fluidDebuggerController.ts +5 -0
  39. package/src/fluidDebuggerUi.ts +9 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,53 @@
1
1
  # @fluidframework/debugger
2
2
 
3
+ ## 2.0.0-internal.7.1.0
4
+
5
+ Dependency updates only.
6
+
7
+ ## 2.0.0-internal.7.0.0
8
+
9
+ ### Major Changes
10
+
11
+ - Dependencies on @fluidframework/protocol-definitions package updated to 3.0.0 [871b3493dd](https://github.com/microsoft/FluidFramework/commits/871b3493dd0d7ea3a89be64998ceb6cb9021a04e)
12
+
13
+ This included the following changes from the protocol-definitions release:
14
+
15
+ - Updating signal interfaces for some planned improvements. The intention is split the interface between signals
16
+ submitted by clients to the server and the resulting signals sent from the server to clients.
17
+ - A new optional type member is available on the ISignalMessage interface and a new ISentSignalMessage interface has
18
+ been added, which will be the typing for signals sent from the client to the server. Both extend a new
19
+ ISignalMessageBase interface that contains common members.
20
+ - The @fluidframework/common-definitions package dependency has been updated to version 1.0.0.
21
+
22
+ - Server upgrade: dependencies on Fluid server packages updated to 2.0.1 [871b3493dd](https://github.com/microsoft/FluidFramework/commits/871b3493dd0d7ea3a89be64998ceb6cb9021a04e)
23
+
24
+ Dependencies on the following Fluid server package have been updated to version 2.0.1:
25
+
26
+ - @fluidframework/gitresources: 2.0.1
27
+ - @fluidframework/server-kafka-orderer: 2.0.1
28
+ - @fluidframework/server-lambdas: 2.0.1
29
+ - @fluidframework/server-lambdas-driver: 2.0.1
30
+ - @fluidframework/server-local-server: 2.0.1
31
+ - @fluidframework/server-memory-orderer: 2.0.1
32
+ - @fluidframework/protocol-base: 2.0.1
33
+ - @fluidframework/server-routerlicious: 2.0.1
34
+ - @fluidframework/server-routerlicious-base: 2.0.1
35
+ - @fluidframework/server-services: 2.0.1
36
+ - @fluidframework/server-services-client: 2.0.1
37
+ - @fluidframework/server-services-core: 2.0.1
38
+ - @fluidframework/server-services-ordering-kafkanode: 2.0.1
39
+ - @fluidframework/server-services-ordering-rdkafka: 2.0.1
40
+ - @fluidframework/server-services-ordering-zookeeper: 2.0.1
41
+ - @fluidframework/server-services-shared: 2.0.1
42
+ - @fluidframework/server-services-telemetry: 2.0.1
43
+ - @fluidframework/server-services-utils: 2.0.1
44
+ - @fluidframework/server-test-utils: 2.0.1
45
+ - tinylicious: 2.0.1
46
+
47
+ - Minimum TypeScript version now 5.1.6 [871b3493dd](https://github.com/microsoft/FluidFramework/commits/871b3493dd0d7ea3a89be64998ceb6cb9021a04e)
48
+
49
+ The minimum supported TypeScript version for Fluid 2.0 clients is now 5.1.6.
50
+
3
51
  ## 2.0.0-internal.6.4.0
4
52
 
5
53
  Dependency updates only.
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
3
- "extends": "@fluidframework/build-common/api-extractor-common-report.json"
3
+ "extends": "@fluidframework/build-common/api-extractor-base.json"
4
4
  }
@@ -0,0 +1,156 @@
1
+ ## API Report File for "@fluidframework/debugger"
2
+
3
+ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
4
+
5
+ ```ts
6
+
7
+ import { Deferred } from '@fluidframework/core-utils';
8
+ import { IDocumentService } from '@fluidframework/driver-definitions';
9
+ import { IDocumentServiceFactory } from '@fluidframework/driver-definitions';
10
+ import { IDocumentStorageService } from '@fluidframework/driver-definitions';
11
+ import { ISequencedDocumentMessage } from '@fluidframework/protocol-definitions';
12
+ import { ISnapshotTree } from '@fluidframework/protocol-definitions';
13
+ import { IVersion } from '@fluidframework/protocol-definitions';
14
+ import { ReadDocumentStorageServiceBase } from '@fluidframework/replay-driver';
15
+ import { ReplayController } from '@fluidframework/replay-driver';
16
+
17
+ // @public (undocumented)
18
+ export class DebuggerUI {
19
+ protected constructor(controller: IDebuggerController, debuggerWindow: Window);
20
+ // (undocumented)
21
+ addVersions(versions: IVersion[]): void;
22
+ // (undocumented)
23
+ protected buttonOps?: HTMLButtonElement;
24
+ // (undocumented)
25
+ static create(controller: IDebuggerController): DebuggerUI | null;
26
+ // (undocumented)
27
+ disableNextOpButton(disable: boolean): void;
28
+ // (undocumented)
29
+ protected documentClosed: boolean;
30
+ // (undocumented)
31
+ protected lastOpText?: HTMLDivElement;
32
+ // (undocumented)
33
+ protected selector?: HTMLSelectElement;
34
+ // (undocumented)
35
+ protected text1?: HTMLDivElement;
36
+ // (undocumented)
37
+ protected text2?: HTMLDivElement;
38
+ // (undocumented)
39
+ protected text3?: HTMLDivElement;
40
+ // (undocumented)
41
+ updateLastOpText(lastKnownOp: number, stillLoading: boolean): void;
42
+ // (undocumented)
43
+ updateNextOpText(ops: ISequencedDocumentMessage[]): void;
44
+ // (undocumented)
45
+ updateVersion(index: number, version: IVersion, seqNumber: number): void;
46
+ // (undocumented)
47
+ updateVersionText(versionCount: number): void;
48
+ // (undocumented)
49
+ protected versions: IVersion[];
50
+ // (undocumented)
51
+ versionSelected(seqNumber: number, version: IVersion | string): void;
52
+ // (undocumented)
53
+ protected versionText: HTMLDivElement;
54
+ // (undocumented)
55
+ protected wasVersionSelected: boolean;
56
+ }
57
+
58
+ // @public (undocumented)
59
+ export type debuggerUIFactory = (controller: IDebuggerController) => IDebuggerUI | null;
60
+
61
+ // @public
62
+ export class DebugReplayController extends ReplayController implements IDebuggerController {
63
+ // (undocumented)
64
+ connectToUi(ui: IDebuggerUI): void;
65
+ // (undocumented)
66
+ static create(createUi: debuggerUIFactory): DebugReplayController | null;
67
+ // (undocumented)
68
+ protected documentService?: IDocumentService;
69
+ // (undocumented)
70
+ protected documentStorageService?: IDocumentStorageService;
71
+ // (undocumented)
72
+ downloadVersionInfo(documentStorageService: IDocumentStorageService, prevRequest: Promise<void>, index: number, version: IVersion): Promise<void>;
73
+ // (undocumented)
74
+ fetchTo(currentOp: number): number | undefined;
75
+ // (undocumented)
76
+ getSnapshotTree(versionRequested?: IVersion): Promise<ISnapshotTree | null>;
77
+ // (undocumented)
78
+ getStartingOpSequence(): Promise<number>;
79
+ // (undocumented)
80
+ getVersions(versionId: string | null, count: number): Promise<IVersion[]>;
81
+ // (undocumented)
82
+ initStorage(documentService: IDocumentService): Promise<boolean>;
83
+ isDoneFetch(currentOp: number, lastTimeStamp?: number): boolean;
84
+ // (undocumented)
85
+ isSelectionMade(): boolean;
86
+ // (undocumented)
87
+ protected lastOpReached: boolean;
88
+ // (undocumented)
89
+ onClose(): void;
90
+ // (undocumented)
91
+ onDownloadOpsButtonClick(anonymize: boolean): Promise<string>;
92
+ // (undocumented)
93
+ onOpButtonClick(steps: number): void;
94
+ // (undocumented)
95
+ onSnapshotFileSelection(file: File): void;
96
+ // (undocumented)
97
+ onVersionSelection(version: IVersion): Promise<void>;
98
+ // (undocumented)
99
+ readBlob(blobId: string): Promise<ArrayBufferLike>;
100
+ // (undocumented)
101
+ replay(emitter: (op: ISequencedDocumentMessage[]) => void, fetchedOps: ISequencedDocumentMessage[]): Promise<void>;
102
+ // (undocumented)
103
+ protected resolveStorage(seq: number, storage: ReadDocumentStorageServiceBase, version: IVersion | string): void;
104
+ // (undocumented)
105
+ protected retryFetchOpsOnEndOfFile: boolean;
106
+ // (undocumented)
107
+ protected static seqFromTree(documentStorageService: IDocumentStorageService, tree: ISnapshotTree | null): Promise<number>;
108
+ // (undocumented)
109
+ protected startSeqDeferred: Deferred<number>;
110
+ // (undocumented)
111
+ protected stepsDeferred?: Deferred<number>;
112
+ // (undocumented)
113
+ protected stepsToPlay: number;
114
+ // (undocumented)
115
+ protected storage?: ReadDocumentStorageServiceBase;
116
+ // (undocumented)
117
+ protected ui: IDebuggerUI;
118
+ // (undocumented)
119
+ protected versionCount: number;
120
+ // (undocumented)
121
+ protected versions: IVersion[];
122
+ // (undocumented)
123
+ protected static readonly WindowClosedSeq = -1;
124
+ }
125
+
126
+ // @public (undocumented)
127
+ export namespace FluidDebugger {
128
+ export function createFromService(documentService: IDocumentService): Promise<IDocumentService>;
129
+ // (undocumented)
130
+ export function createFromServiceFactory(documentServiceFactory: IDocumentServiceFactory): Promise<IDocumentServiceFactory>;
131
+ }
132
+
133
+ // @public (undocumented)
134
+ export interface IDebuggerController {
135
+ connectToUi(ui: IDebuggerUI): any;
136
+ onClose(): void;
137
+ onDownloadOpsButtonClick(anonymize: boolean): Promise<string>;
138
+ onOpButtonClick(steps: number): void;
139
+ onSnapshotFileSelection(file: File): void;
140
+ onVersionSelection(version: IVersion): void;
141
+ }
142
+
143
+ // @public (undocumented)
144
+ export interface IDebuggerUI {
145
+ addVersions(version: IVersion[]): void;
146
+ disableNextOpButton(disable: boolean): void;
147
+ updateLastOpText(lastKnownOp: number, stillLoading: boolean): void;
148
+ updateNextOpText(ops: ISequencedDocumentMessage[]): void;
149
+ updateVersion(index: number, version: IVersion, seqNumber: number): void;
150
+ updateVersionText(versionsLeft: number): void;
151
+ versionSelected(seqNumber: number, version: IVersion | string): void;
152
+ }
153
+
154
+ // (No @packageDocumentation comment for this package)
155
+
156
+ ```
@@ -0,0 +1,190 @@
1
+ import { Deferred } from '@fluidframework/core-utils';
2
+ import { IDocumentService } from '@fluidframework/driver-definitions';
3
+ import { IDocumentServiceFactory } from '@fluidframework/driver-definitions';
4
+ import { IDocumentStorageService } from '@fluidframework/driver-definitions';
5
+ import { ISequencedDocumentMessage } from '@fluidframework/protocol-definitions';
6
+ import { ISnapshotTree } from '@fluidframework/protocol-definitions';
7
+ import { IVersion } from '@fluidframework/protocol-definitions';
8
+ import { ReadDocumentStorageServiceBase } from '@fluidframework/replay-driver';
9
+ import { ReplayController } from '@fluidframework/replay-driver';
10
+
11
+ /**
12
+ * @public
13
+ */
14
+ export declare class DebuggerUI {
15
+ private readonly controller;
16
+ private readonly debuggerWindow;
17
+ static create(controller: IDebuggerController): DebuggerUI | null;
18
+ private static formatDate;
19
+ protected selector?: HTMLSelectElement;
20
+ protected versionText: HTMLDivElement;
21
+ protected buttonOps?: HTMLButtonElement;
22
+ protected text1?: HTMLDivElement;
23
+ protected text2?: HTMLDivElement;
24
+ protected text3?: HTMLDivElement;
25
+ protected lastOpText?: HTMLDivElement;
26
+ protected wasVersionSelected: boolean;
27
+ protected versions: IVersion[];
28
+ protected documentClosed: boolean;
29
+ protected constructor(controller: IDebuggerController, debuggerWindow: Window);
30
+ private attachDownloadOpsListener;
31
+ addVersions(versions: IVersion[]): void;
32
+ updateVersion(index: number, version: IVersion, seqNumber: number): void;
33
+ versionSelected(seqNumber: number, version: IVersion | string): void;
34
+ disableNextOpButton(disable: boolean): void;
35
+ updateNextOpText(ops: ISequencedDocumentMessage[]): void;
36
+ updateVersionText(versionCount: number): void;
37
+ updateLastOpText(lastKnownOp: number, stillLoading: boolean): void;
38
+ private download;
39
+ }
40
+
41
+ /**
42
+ * @public
43
+ */
44
+ export declare type debuggerUIFactory = (controller: IDebuggerController) => IDebuggerUI | null;
45
+
46
+ /**
47
+ * Replay controller that uses pop-up window to control op playback
48
+ *
49
+ * @public
50
+ */
51
+ export declare class DebugReplayController extends ReplayController implements IDebuggerController {
52
+ static create(createUi: debuggerUIFactory): DebugReplayController | null;
53
+ protected static readonly WindowClosedSeq = -1;
54
+ protected static seqFromTree(documentStorageService: IDocumentStorageService, tree: ISnapshotTree | null): Promise<number>;
55
+ protected ui: IDebuggerUI;
56
+ protected stepsDeferred?: Deferred<number>;
57
+ protected startSeqDeferred: Deferred<number>;
58
+ protected retryFetchOpsOnEndOfFile: boolean;
59
+ protected documentService?: IDocumentService;
60
+ protected documentStorageService?: IDocumentStorageService;
61
+ protected versions: IVersion[];
62
+ protected stepsToPlay: number;
63
+ protected lastOpReached: boolean;
64
+ protected versionCount: number;
65
+ protected storage?: ReadDocumentStorageServiceBase;
66
+ private shouldUseController;
67
+ connectToUi(ui: IDebuggerUI): void;
68
+ onClose(): void;
69
+ onVersionSelection(version: IVersion): Promise<void>;
70
+ onOpButtonClick(steps: number): void;
71
+ onSnapshotFileSelection(file: File): void;
72
+ onDownloadOpsButtonClick(anonymize: boolean): Promise<string>;
73
+ private fetchOpsFromDeltaStorage;
74
+ fetchTo(currentOp: number): number | undefined;
75
+ isSelectionMade(): boolean;
76
+ downloadVersionInfo(documentStorageService: IDocumentStorageService, prevRequest: Promise<void>, index: number, version: IVersion): Promise<void>;
77
+ initStorage(documentService: IDocumentService): Promise<boolean>;
78
+ readBlob(blobId: string): Promise<ArrayBufferLike>;
79
+ getVersions(versionId: string | null, count: number): Promise<IVersion[]>;
80
+ getSnapshotTree(versionRequested?: IVersion): Promise<ISnapshotTree | null>;
81
+ getStartingOpSequence(): Promise<number>;
82
+ /**
83
+ * Return true if we are done processing ops
84
+ */
85
+ isDoneFetch(currentOp: number, lastTimeStamp?: number): boolean;
86
+ replay(emitter: (op: ISequencedDocumentMessage[]) => void, fetchedOps: ISequencedDocumentMessage[]): Promise<void>;
87
+ protected resolveStorage(seq: number, storage: ReadDocumentStorageServiceBase, version: IVersion | string): void;
88
+ }
89
+
90
+ /**
91
+ * @public
92
+ */
93
+ export declare namespace FluidDebugger {
94
+ /**
95
+ * Creates document service wrapper that pops up Debugger window and allows user to play ops one by one.
96
+ * User can chose to start with any snapshot
97
+ * If pop-ups are disabled, we continue without debugger.
98
+ * @param documentService - original document service to use to fetch ops / snapshots.
99
+ */
100
+ export function createFromService(documentService: IDocumentService): Promise<IDocumentService>;
101
+ export function createFromServiceFactory(documentServiceFactory: IDocumentServiceFactory): Promise<IDocumentServiceFactory>;
102
+ }
103
+
104
+ /**
105
+ * @public
106
+ */
107
+ export declare interface IDebuggerController {
108
+ /**
109
+ * Initialization. UI layers calls into controller to connect the two.
110
+ * @param ui - UI layer
111
+ */
112
+ connectToUi(ui: IDebuggerUI): any;
113
+ /**
114
+ * Called by UI layer when debugger window is closed by user
115
+ * If called before user makes selection of snapshot/file, original
116
+ * document service is returned to loader (instead of debugger service) and normal document load continues.
117
+ */
118
+ onClose(): void;
119
+ /**
120
+ * UI Layer notifies about selection of version to continue.
121
+ * On successful load, versionSelected() is called.
122
+ * @param version - Snapshot version to start from.
123
+ */
124
+ onVersionSelection(version: IVersion): void;
125
+ /**
126
+ * UI Layer notifies about selection of version to continue.
127
+ * On successful load, versionSelected() is called.
128
+ * @param version - File to load snapshot from
129
+ */
130
+ onSnapshotFileSelection(file: File): void;
131
+ /**
132
+ * "next op" button is clicked in the UI
133
+ * @param steps - number of ops to play.
134
+ */
135
+ onOpButtonClick(steps: number): void;
136
+ /**
137
+ * "Download ops" option is clicked in the UI. Returns JSON of the full opStream when available.
138
+ * @param anonymize - anonymize the ops json using the sanitization tool
139
+ */
140
+ onDownloadOpsButtonClick(anonymize: boolean): Promise<string>;
141
+ }
142
+
143
+ /**
144
+ * @public
145
+ */
146
+ export declare interface IDebuggerUI {
147
+ /**
148
+ * Version information is provided.
149
+ * Expect updates (information about seq#, timestamp) through updateVersion() calls
150
+ */
151
+ addVersions(version: IVersion[]): void;
152
+ /**
153
+ * Call when new version is downloaded from storage
154
+ * Expect multiple callbacks.
155
+ */
156
+ updateVersion(index: number, version: IVersion, seqNumber: number): void;
157
+ /**
158
+ * Called in response to successful onVersionSelection() or onSnapshotFileSelection() call
159
+ * and provides extra information about selection.
160
+ * It expected that UI layer would change its mode as result of this call, i.e. switch to
161
+ * displaying op playback controls (if this is supported)
162
+ * Note: There maybe no call to versionSelected() in response to onSnapshotFileSelection() call
163
+ * if file does not exist, has wrong name of wrong format.
164
+ * @param version - version, file name, or undefined if playing ops.
165
+ */
166
+ versionSelected(seqNumber: number, version: IVersion | string): void;
167
+ /**
168
+ * Called by controller in response to new ops being downloaded
169
+ * Called with disable = true if there are no (currently) ops to play
170
+ */
171
+ disableNextOpButton(disable: boolean): void;
172
+ /**
173
+ * Called by controller when new ops arrive (or we are done playing previous batch)
174
+ * Indicates next batch of ops that would be played when UI calls controller's onOpButtonClick()
175
+ * Called with ops=[] when there are no ops to play.
176
+ */
177
+ updateNextOpText(ops: ISequencedDocumentMessage[]): void;
178
+ /**
179
+ * Called periodically when new versions are downloaded from server
180
+ */
181
+ updateVersionText(versionsLeft: number): void;
182
+ /**
183
+ * Called periodically to notify about last known op
184
+ * @param lastKnownOp - seq number of last known op. -1 if can't play ops in this mode (load from file)
185
+ * @param stillLoading - true if we did not reach yet the end of the stream
186
+ */
187
+ updateLastOpText(lastKnownOp: number, stillLoading: boolean): void;
188
+ }
189
+
190
+ export { }
@@ -0,0 +1,190 @@
1
+ import { Deferred } from '@fluidframework/core-utils';
2
+ import { IDocumentService } from '@fluidframework/driver-definitions';
3
+ import { IDocumentServiceFactory } from '@fluidframework/driver-definitions';
4
+ import { IDocumentStorageService } from '@fluidframework/driver-definitions';
5
+ import { ISequencedDocumentMessage } from '@fluidframework/protocol-definitions';
6
+ import { ISnapshotTree } from '@fluidframework/protocol-definitions';
7
+ import { IVersion } from '@fluidframework/protocol-definitions';
8
+ import { ReadDocumentStorageServiceBase } from '@fluidframework/replay-driver';
9
+ import { ReplayController } from '@fluidframework/replay-driver';
10
+
11
+ /**
12
+ * @public
13
+ */
14
+ export declare class DebuggerUI {
15
+ private readonly controller;
16
+ private readonly debuggerWindow;
17
+ static create(controller: IDebuggerController): DebuggerUI | null;
18
+ private static formatDate;
19
+ protected selector?: HTMLSelectElement;
20
+ protected versionText: HTMLDivElement;
21
+ protected buttonOps?: HTMLButtonElement;
22
+ protected text1?: HTMLDivElement;
23
+ protected text2?: HTMLDivElement;
24
+ protected text3?: HTMLDivElement;
25
+ protected lastOpText?: HTMLDivElement;
26
+ protected wasVersionSelected: boolean;
27
+ protected versions: IVersion[];
28
+ protected documentClosed: boolean;
29
+ protected constructor(controller: IDebuggerController, debuggerWindow: Window);
30
+ private attachDownloadOpsListener;
31
+ addVersions(versions: IVersion[]): void;
32
+ updateVersion(index: number, version: IVersion, seqNumber: number): void;
33
+ versionSelected(seqNumber: number, version: IVersion | string): void;
34
+ disableNextOpButton(disable: boolean): void;
35
+ updateNextOpText(ops: ISequencedDocumentMessage[]): void;
36
+ updateVersionText(versionCount: number): void;
37
+ updateLastOpText(lastKnownOp: number, stillLoading: boolean): void;
38
+ private download;
39
+ }
40
+
41
+ /**
42
+ * @public
43
+ */
44
+ export declare type debuggerUIFactory = (controller: IDebuggerController) => IDebuggerUI | null;
45
+
46
+ /**
47
+ * Replay controller that uses pop-up window to control op playback
48
+ *
49
+ * @public
50
+ */
51
+ export declare class DebugReplayController extends ReplayController implements IDebuggerController {
52
+ static create(createUi: debuggerUIFactory): DebugReplayController | null;
53
+ protected static readonly WindowClosedSeq = -1;
54
+ protected static seqFromTree(documentStorageService: IDocumentStorageService, tree: ISnapshotTree | null): Promise<number>;
55
+ protected ui: IDebuggerUI;
56
+ protected stepsDeferred?: Deferred<number>;
57
+ protected startSeqDeferred: Deferred<number>;
58
+ protected retryFetchOpsOnEndOfFile: boolean;
59
+ protected documentService?: IDocumentService;
60
+ protected documentStorageService?: IDocumentStorageService;
61
+ protected versions: IVersion[];
62
+ protected stepsToPlay: number;
63
+ protected lastOpReached: boolean;
64
+ protected versionCount: number;
65
+ protected storage?: ReadDocumentStorageServiceBase;
66
+ private shouldUseController;
67
+ connectToUi(ui: IDebuggerUI): void;
68
+ onClose(): void;
69
+ onVersionSelection(version: IVersion): Promise<void>;
70
+ onOpButtonClick(steps: number): void;
71
+ onSnapshotFileSelection(file: File): void;
72
+ onDownloadOpsButtonClick(anonymize: boolean): Promise<string>;
73
+ private fetchOpsFromDeltaStorage;
74
+ fetchTo(currentOp: number): number | undefined;
75
+ isSelectionMade(): boolean;
76
+ downloadVersionInfo(documentStorageService: IDocumentStorageService, prevRequest: Promise<void>, index: number, version: IVersion): Promise<void>;
77
+ initStorage(documentService: IDocumentService): Promise<boolean>;
78
+ readBlob(blobId: string): Promise<ArrayBufferLike>;
79
+ getVersions(versionId: string | null, count: number): Promise<IVersion[]>;
80
+ getSnapshotTree(versionRequested?: IVersion): Promise<ISnapshotTree | null>;
81
+ getStartingOpSequence(): Promise<number>;
82
+ /**
83
+ * Return true if we are done processing ops
84
+ */
85
+ isDoneFetch(currentOp: number, lastTimeStamp?: number): boolean;
86
+ replay(emitter: (op: ISequencedDocumentMessage[]) => void, fetchedOps: ISequencedDocumentMessage[]): Promise<void>;
87
+ protected resolveStorage(seq: number, storage: ReadDocumentStorageServiceBase, version: IVersion | string): void;
88
+ }
89
+
90
+ /**
91
+ * @public
92
+ */
93
+ export declare namespace FluidDebugger {
94
+ /**
95
+ * Creates document service wrapper that pops up Debugger window and allows user to play ops one by one.
96
+ * User can chose to start with any snapshot
97
+ * If pop-ups are disabled, we continue without debugger.
98
+ * @param documentService - original document service to use to fetch ops / snapshots.
99
+ */
100
+ export function createFromService(documentService: IDocumentService): Promise<IDocumentService>;
101
+ export function createFromServiceFactory(documentServiceFactory: IDocumentServiceFactory): Promise<IDocumentServiceFactory>;
102
+ }
103
+
104
+ /**
105
+ * @public
106
+ */
107
+ export declare interface IDebuggerController {
108
+ /**
109
+ * Initialization. UI layers calls into controller to connect the two.
110
+ * @param ui - UI layer
111
+ */
112
+ connectToUi(ui: IDebuggerUI): any;
113
+ /**
114
+ * Called by UI layer when debugger window is closed by user
115
+ * If called before user makes selection of snapshot/file, original
116
+ * document service is returned to loader (instead of debugger service) and normal document load continues.
117
+ */
118
+ onClose(): void;
119
+ /**
120
+ * UI Layer notifies about selection of version to continue.
121
+ * On successful load, versionSelected() is called.
122
+ * @param version - Snapshot version to start from.
123
+ */
124
+ onVersionSelection(version: IVersion): void;
125
+ /**
126
+ * UI Layer notifies about selection of version to continue.
127
+ * On successful load, versionSelected() is called.
128
+ * @param version - File to load snapshot from
129
+ */
130
+ onSnapshotFileSelection(file: File): void;
131
+ /**
132
+ * "next op" button is clicked in the UI
133
+ * @param steps - number of ops to play.
134
+ */
135
+ onOpButtonClick(steps: number): void;
136
+ /**
137
+ * "Download ops" option is clicked in the UI. Returns JSON of the full opStream when available.
138
+ * @param anonymize - anonymize the ops json using the sanitization tool
139
+ */
140
+ onDownloadOpsButtonClick(anonymize: boolean): Promise<string>;
141
+ }
142
+
143
+ /**
144
+ * @public
145
+ */
146
+ export declare interface IDebuggerUI {
147
+ /**
148
+ * Version information is provided.
149
+ * Expect updates (information about seq#, timestamp) through updateVersion() calls
150
+ */
151
+ addVersions(version: IVersion[]): void;
152
+ /**
153
+ * Call when new version is downloaded from storage
154
+ * Expect multiple callbacks.
155
+ */
156
+ updateVersion(index: number, version: IVersion, seqNumber: number): void;
157
+ /**
158
+ * Called in response to successful onVersionSelection() or onSnapshotFileSelection() call
159
+ * and provides extra information about selection.
160
+ * It expected that UI layer would change its mode as result of this call, i.e. switch to
161
+ * displaying op playback controls (if this is supported)
162
+ * Note: There maybe no call to versionSelected() in response to onSnapshotFileSelection() call
163
+ * if file does not exist, has wrong name of wrong format.
164
+ * @param version - version, file name, or undefined if playing ops.
165
+ */
166
+ versionSelected(seqNumber: number, version: IVersion | string): void;
167
+ /**
168
+ * Called by controller in response to new ops being downloaded
169
+ * Called with disable = true if there are no (currently) ops to play
170
+ */
171
+ disableNextOpButton(disable: boolean): void;
172
+ /**
173
+ * Called by controller when new ops arrive (or we are done playing previous batch)
174
+ * Indicates next batch of ops that would be played when UI calls controller's onOpButtonClick()
175
+ * Called with ops=[] when there are no ops to play.
176
+ */
177
+ updateNextOpText(ops: ISequencedDocumentMessage[]): void;
178
+ /**
179
+ * Called periodically when new versions are downloaded from server
180
+ */
181
+ updateVersionText(versionsLeft: number): void;
182
+ /**
183
+ * Called periodically to notify about last known op
184
+ * @param lastKnownOp - seq number of last known op. -1 if can't play ops in this mode (load from file)
185
+ * @param stillLoading - true if we did not reach yet the end of the stream
186
+ */
187
+ updateLastOpText(lastKnownOp: number, stillLoading: boolean): void;
188
+ }
189
+
190
+ export { }